UNPKG

jquery-input-lettering

Version:
9 lines 3.45 kB
/* * jquery-input-lettering - v0.0.1 * Light-weight jquery input lettering plugin * https://github.com/sergmaestro/jquery-input-lettering * * Made by Sergei Kuznetsov * Under MIT License */ !function(a,b,c,d){"use strict";a.fn.letteringInput=function(b){function d(b){var c=a("input."+m.inputClass,b);c.on("keydown",function(b){var d=a(this),k=a.trim(d.val()),o=d.getCursorPosition();if(d.val(k),37===b.keyCode)o||f(d,c);else if(39===b.keyCode)o&&g(d,c);else if(8===b.keyCode)d=o?d:i(d,c),d&&j(d),e(c),o&&""!==d.val()&&setTimeout(function(){f(d,c)},20);else if(46===b.keyCode){var p=h(d,c);o&&p&&a(p).val(""),e(c);var q=h(d,c);q&&""!==a(q).val()&&setTimeout(function(){d.setCaretPosition(0)},20)}else if(-1===a.inArray(b.keyCode,m.forbiddenKeyCodes)){var r=b.key,s=b.which||b.code;"Unidentified"===r&&(r=String.fromCharCode(s)),l(d,o,r,c)}"function"==typeof n.onSet&&setTimeout(function(){m.onSet.call(null,a(this),b)},40)}).on("keyup",function(b){"function"==typeof n.onLetterKeyup&&setTimeout(function(){m.onLetterKeyup.call(null,a(this),b)},1)}).on("focus",function(b){var d=a(this),e=c.index(d);if(d.val())return!1;var f=c.filter(function(a){return!this.value&&a<e});void 0!==f[0]&&j(f[0]),"function"==typeof n.onFocusLetter&&m.onFocusLetter.call(null,a(this),b)}).on("blur",function(b){setTimeout(function(){var d=k(c);"function"==typeof n.onBlurLetter&&m.onBlurLetter.call(null,a(this),b,d)},40)})}function e(b,c){setTimeout(function(){var d=void 0!==c?c:k(b);m.hiddenInputName&&m.hiddenInputWrapperID&&a('input[name="'+m.hiddenInputName+'"]',"#"+m.hiddenInputWrapperID).val(d),b.map(function(){this.value=void 0!==d[0]?d[0]:"",d=d.substr(1)})},30)}function f(a,b){var c=i(a,b);if(!c)return!1;j(c)}function g(a,b){var c=h(a,b);if(!c)return!1;j(c)}function h(b,c){var d=c.index(b),e=null;if(-1!==d&&c.length-1>d){var f=c[d+1];e=a(f).is(":hidden")?null:f}return e}function i(b,c){var d=c.index(b);return d>0?a(c[d-1]):null}function j(a){a.click(),setTimeout(function(){a.focus()},1)}function k(a){return a.map(function(){return this.value}).get().join("")}function l(b,c,d,f){var i=f.index(b),j=k(f);if(!f.filter(function(){return!a(this).is(":hidden")&&!this.value}).length)return e(f),!1;if(void 0!==d&&d.length>1)return!1;if(-1!==i&&(i=c?i+1:i),j.length<f.length)if(""!==b.val()){j=[j.slice(0,i),d,j.slice(i)].join(""),e(f,j);var l=h(b,f);l&&setTimeout(function(){g(b,f)},1)}else setTimeout(function(){g(b,f)},1),e(f)}var m,n={inputClass:"letter",hiddenInputName:"",hiddenInputWrapperID:"",forbiddenKeyCodes:[9,16,17,18,20,27,32,33,34,38,40,45,144],onFocusLetter:function(){},onBlurLetter:function(){},onLetterKeyup:function(){},onSet:function(){}};m="object"==typeof b?a.extend({},n,b):n;var o={destroy:function(b){a("input."+m.inputClass,b).unbind()}};return a.fn.getCursorPosition=function(){var a=this.get(0);if(a){if("selectionStart"in a)return a.selectionStart;if(c.selection){a.focus();var b=c.selection.createRange(),d=c.selection.createRange().text.length;return b.moveStart("character",-a.value.length),b.text.length-d}}},a.fn.setCaretPosition=function(a){var b=this.get(0);if(null!=b)if(b.createTextRange){var c=b.createTextRange();c.move("character",a),c.select()}else b.selectionStart?(b.focus(),b.setSelectionRange(a,a)):b.focus()},"string"==typeof b?b&&o[b]?o[b].call(null,a(this)):(a.error("Method "+b+" does not exist in jQuery.letteringInput"),this):this.each(function(){d(a(this))})}}(jQuery,window,document);