UNPKG

key-sequence

Version:

Detect a sequence of keys being pressed.

1 lines 2.33 kB
!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.keySequence=a()}}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function d(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=a[c+1],f=a[c-1],g={};g[d.key]=c+1,d.isSkippable&&(g[e.key]=c+2),f&&f.isRepeatable&&(g[f.key]=c),b.push(g)}return b.push({}),b}function e(a){function b(a){return new RegExp("^"+a+"$")}return a.reduce(function(a,c){return"string"==typeof c.key&&a.push({key:c.key,regex:b(c.key)}),a},[])}function f(a,b,c,d){var e=String.fromCharCode(d),f=[d,e],g=b.filter(function(a){return a.regex.test(d)||a.regex.test(e)}).map(function(a){return a.key});f=f.concat(g);var h=f.find(function(b){return!!a[c][b]});return a[c][h]}b.exports={generateDFA:d,getKeys:e,getNextState:f}},{}],2:[function(a,b,c){var d=a("./sequence-processor"),e=a("./dfa-utils");b.exports=function(a,b){var c=0,f=d(a),g=e.getKeys(f),h=e.generateDFA(f);return function(a,d){c=e.getNextState(h,g,c,a)||0,0===c&&(c=e.getNextState(h,g,c,a)||0),c===h.length-1&&(c=0,b(d))}}},{"./dfa-utils":1,"./sequence-processor":3}],3:[function(a,b,c){function d(a){var b=a.slice(-1);return"+"===b||"*"===b}function e(a){var b=a.slice(-1);return"*"===b}function f(a){var b=a.slice(-1);return"*"===b||"+"===b?a.slice(0,-1):a}b.exports=function(a){return a.map(function(a){if("number"!=typeof a&&"string"!=typeof a)throw"Keys can only be strings or integers";var b=Number.parseInt(a),c="number"!=typeof a;return isNaN(b)?{key:f(a),isSkippable:e(a),isRepeatable:d(a)}:{key:10>b&&c?b.toString():String.fromCharCode(b)?String.fromCharCode(b):b,isSkippable:c&&e(a),isRepeatable:c&&d(a)}})}},{}],4:[function(a,b,c){b.exports=a("./lib/index")},{"./lib/index":2}]},{},[4])(4)});