UNPKG

tab-indexer

Version:

Tab indexer counter with context to make tabIndex settings in a project easy.

64 lines (63 loc) 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tabIndexer = function () { var CHECKER_TYPE; (function (CHECKER_TYPE) { CHECKER_TYPE[CHECKER_TYPE["GLOBAL_CHECKER"] = 0] = "GLOBAL_CHECKER"; CHECKER_TYPE[CHECKER_TYPE["CONTEXT_CHECKER"] = 1] = "CONTEXT_CHECKER"; })(CHECKER_TYPE || (CHECKER_TYPE = {})); var contexts = {}; var numerators = {}; var checkerFns = {}; var checkerFunction = function () { return true; }; var checker = checkerFunction; function executeChecker(checkerType, checkerFn, context, currentValue, numerator) { var checkerResult = checkerType === CHECKER_TYPE.GLOBAL_CHECKER ? checkerFn(context, currentValue, numerator) : checkerFn(currentValue, numerator); if (!isNaN(checkerResult) && checkerResult < 0) { return false; } return !(checkerResult !== 0 && !checkerResult); } var indexer = function (strings, num, numerator) { var context = strings.join(''); if (contexts[context] === undefined) { contexts[context] = 0; numerators[context] = 1; } if (numerator !== undefined) { numerators[context] = numerator; } if (num !== undefined) { return contexts[context] = num; } if (!checkerFns[context]) { checkerFns[context] = checkerFunction; } if (!executeChecker(CHECKER_TYPE.GLOBAL_CHECKER, checker, context, contexts[context], numerators[context])) { return -1; } if (!executeChecker(CHECKER_TYPE.CONTEXT_CHECKER, checkerFns[context], context, contexts[context], numerators[context])) { return -1; } return contexts[context] += numerators[context]; }; indexer.setChecker = function (stringsOrFn, fn) { if (stringsOrFn instanceof Function) { checker = stringsOrFn; return; } var context = stringsOrFn.join(''); checkerFns[context] = fn; }; indexer.clearChecker = function (strings) { if (strings) { var context = strings.join(''); checkerFns[context] = checkerFunction; } checker = checkerFunction; }; return indexer; }; exports.default = tabIndexer();