tab-indexer
Version:
Tab indexer counter with context to make tabIndex settings in a project easy.
64 lines (63 loc) • 2.42 kB
JavaScript
;
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();