diff --git a/README.md b/README.md
index f39d7c0b..9b3bf176 100644
--- a/README.md
+++ b/README.md
@@ -147,6 +147,25 @@ Wiki: [Home](https://github.com/Mottie/Keyboard/wiki/Home) | [FAQ](https://githu
Only the latest changes will be shown below, see the [wiki log](https://github.com/Mottie/Keyboard/wiki/Log) to view older versions.
+### Version 1.28.0 (2018-02-23)
+
+* Core:
+ * An `activeOnReadonly` option to open the keyboard. See [issue #653](https://github.com/Mottie/Keyboard/issues/653); Thanks [@BastienVerschaete](https://github.com/BastienVerschaete)!
+ * Combine keyboard checks. See [issue #653](https://github.com/Mottie/Keyboard/issues/653).
+ * Fix undefined variable.
+ * Remove `$allKeys` variable; use delegated binding. See [issue #649](https://github.com/Mottie/Keyboard/issues/649).
+ * Add `checkValidOnInit` option. Fixes [issue #650](https://github.com/Mottie/Keyboard/issues/650).
+* Docs:
+ * Update jQuery.
+* AltKeys:
+ * Disable keysets when popup is open. See [issue #654](https://github.com/Mottie/Keyboard/issues/654).
+* Autocomplete:
+ * Prevent exception with browser autocompletion. See [issue #651](https://github.com/Mottie/Keyboard/issues/651); Thanks [@vkurlyan](https://github.com/vkurlyan)!
+* Meta:
+ * Update dependencies.
+ * Update Authors.
+ * Add rudimentary linting.
+
### Version 1.27.4 (2018-01-10)
* Core: Pass correct clicked target to close event. Fixes [issue #639](https://github.com/Mottie/Keyboard/issues/639).
@@ -156,9 +175,3 @@ Only the latest changes will be shown below, see the [wiki log](https://github.c
* Core: Prevent JS error while checking `closeByClickEvent`. Fixes [issue #634](https://github.com/Mottie/Keyboard/issues/634).
* Meta: Update dependencies.
-
-### Version 1.27.2 (2017-12-06)
-
-* Core:
- * Prevent JS error on empty contenteditable.
- * Fix contenteditable caret position at beginning of line.
diff --git a/bower.json b/bower.json
index 2a24e5e4..0e8c8302 100644
--- a/bower.json
+++ b/bower.json
@@ -44,7 +44,7 @@
"jquery-ui": ">=1.9.2"
},
"devDependencies": {
- "grunt": "^1.0.1",
+ "grunt": "^1.0.2",
"grunt-cli": "^1.2.0",
"grunt-contrib-clean": "^1.1.0",
"grunt-contrib-concat": "^1.0.1",
diff --git a/dist/css/keyboard-basic.min.css b/dist/css/keyboard-basic.min.css
index 2b8a5fa6..20567ea1 100644
--- a/dist/css/keyboard-basic.min.css
+++ b/dist/css/keyboard-basic.min.css
@@ -1 +1 @@
-.ui-keyboard{font-size:14px;text-align:center;background:#fefefe;border:1px solid #aaa;padding:4px;width:100%;height:auto;left:0;top:auto;bottom:0;position:fixed;white-space:nowrap;overflow-x:auto;-ms-touch-action:manipulation;touch-action:manipulation}.ui-keyboard-has-focus{z-index:16001}.ui-keyboard-button{border:1px solid #aaa;padding:0 .5em;margin:1px;min-width:3em;height:3em;line-height:3em;vertical-align:top;font-family:Helvetica,Arial,sans-serif;color:#333;text-align:center;border-radius:5px;-webkit-box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);background:#fff;background-image:-webkit-linear-gradient(-90deg,#fff 0,#e3e3e3 100%);background-image:linear-gradient(-90deg,#fff 0,#e3e3e3 100%);cursor:pointer;overflow:hidden;-moz-user-focus:ignore}.ui-keyboard-button:not([disabled]):hover{background:#eee;background-image:-webkit-linear-gradient(-90deg,#f2f2f2 0,#d3d3d3 100%);background-image:linear-gradient(-90deg,#f2f2f2 0,#d3d3d3 100%)}.ui-keyboard-button:not([disabled]):active{background:#ddd;background-image:-webkit-linear-gradient(-90deg,#e5e5e5 0,#d3d3d3 100%);background-image:linear-gradient(-90deg,#e5e5e5 0,#d3d3d3 100%)}.ui-keyboard-button span{display:block;width:100%;font-size:1.2em;text-align:center}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo){min-width:6em}.ui-keyboard-space{width:15em}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo) span{font-size:.8em;position:relative;top:-1em;left:-1.6em}.ui-keyboard-placeholder{color:#888}.ui-keyboard-nokeyboard{color:#888;border-color:#888}.ui-keyboard-spacer{display:inline-block;width:1px;height:0;cursor:default}.ui-keyboard-LRM span,.ui-keyboard-NBSP span,.ui-keyboard-RLM span,.ui-keyboard-ZWJ span,.ui-keyboard-ZWNJ span,.ui-keyboard-ZWSP span{font-size:.5em;line-height:1.5em;white-space:normal}.ui-keyboard-button.ui-keyboard-combo.ui-state-default{-webkit-box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);border-color:#d58512}.ui-keyboard-button.ui-keyboard-combo.ui-state-active{-webkit-box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);border-color:#269abc}button.ui-keyboard-accept.ui-keyboard-valid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);border-color:#398439}button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover{border-color:#4cae4c}button.ui-keyboard-accept.ui-keyboard-invalid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);border-color:#ac2925}button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover{border-color:#d43f3a}button.ui-keyboard-toggle span{width:.9em;height:.9em;display:inline-block;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),.ui-keyboard.ui-keyboard-disabled input{opacity:.5}.ui-keyboard-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(238,238,238,.5)}.ui-keyboard-popup{display:inline-block;max-width:22em}.ui-keyboard-caret{background:#c00;width:1px;margin-top:3px}div.ui-keyboard-extender{margin-left:5px;margin-right:10px}button.ui-keyboard-extender span{width:.9em;height:.9em;display:inline-block;margin-bottom:3px;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6IzExMSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzExMSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}
\ No newline at end of file
+.ui-keyboard{font-size:14px;text-align:center;background:#fefefe;border:1px solid #aaa;padding:4px;width:100%;height:auto;left:0;top:auto;bottom:0;position:fixed;white-space:nowrap;overflow-x:auto;-ms-touch-action:manipulation;touch-action:manipulation}.ui-keyboard-has-focus{z-index:16001}.ui-keyboard-button{border:1px solid #aaa;padding:0 .5em;margin:1px;min-width:3em;height:3em;line-height:3em;vertical-align:top;font-family:Helvetica,Arial,sans-serif;color:#333;text-align:center;border-radius:5px;-webkit-box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);background:#fff;background-image:-webkit-linear-gradient(-90deg,#fff 0,#e3e3e3 100%);background-image:linear-gradient(-90deg,#fff 0,#e3e3e3 100%);cursor:pointer;overflow:hidden;-moz-user-focus:ignore}.ui-keyboard-button:not([disabled]):hover{background:#eee;background-image:-webkit-linear-gradient(-90deg,#f2f2f2 0,#d3d3d3 100%);background-image:linear-gradient(-90deg,#f2f2f2 0,#d3d3d3 100%)}.ui-keyboard-button:not([disabled]):active{background:#ddd;background-image:-webkit-linear-gradient(-90deg,#e5e5e5 0,#d3d3d3 100%);background-image:linear-gradient(-90deg,#e5e5e5 0,#d3d3d3 100%)}.ui-keyboard-button span{display:block;width:100%;font-size:1.2em;text-align:center}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo){min-width:6em}.ui-keyboard-space{width:15em}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo) span{font-size:.8em;position:relative;top:-1em;left:-1.6em}.ui-keyboard-placeholder{color:#888}.ui-keyboard-nokeyboard{color:#888;border-color:#888}.ui-keyboard-spacer{display:inline-block;width:1px;height:0;cursor:default}.ui-keyboard-LRM span,.ui-keyboard-NBSP span,.ui-keyboard-RLM span,.ui-keyboard-ZWJ span,.ui-keyboard-ZWNJ span,.ui-keyboard-ZWSP span{font-size:.5em;line-height:1.5em;white-space:normal}.ui-keyboard-button.ui-keyboard-combo.ui-state-default{-webkit-box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);border-color:#d58512}.ui-keyboard-button.ui-keyboard-combo.ui-state-active{-webkit-box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);border-color:#269abc}button.ui-keyboard-accept.ui-keyboard-valid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);border-color:#398439}button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover{border-color:#4cae4c}button.ui-keyboard-accept.ui-keyboard-invalid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);border-color:#ac2925}button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover{border-color:#d43f3a}button.ui-keyboard-toggle span{width:.9em;height:.9em;display:inline-block;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),.ui-keyboard.ui-keyboard-disabled input{opacity:.5}.ui-keyboard-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(238,238,238,.5)}.ui-keyboard-popup{display:inline-block;max-width:22em}.ui-keyboard.ui-keyboard-popup-open .ui-keyboard-keyset .ui-keyboard-button{pointer-events:none}.ui-keyboard-caret{background:#c00;width:1px;margin-top:3px}div.ui-keyboard-extender{margin-left:5px;margin-right:10px}button.ui-keyboard-extender span{width:.9em;height:.9em;display:inline-block;margin-bottom:3px;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6IzExMSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzExMSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}
\ No newline at end of file
diff --git a/dist/css/keyboard-dark.min.css b/dist/css/keyboard-dark.min.css
index cb398de5..b8b451e4 100644
--- a/dist/css/keyboard-dark.min.css
+++ b/dist/css/keyboard-dark.min.css
@@ -1 +1 @@
-.ui-keyboard{font-size:14px;text-align:center;background:#282828;border:1px solid #484848;padding:4px;width:100%;height:auto;left:0;top:auto;bottom:0;position:fixed;white-space:nowrap;overflow-x:auto;-ms-touch-action:manipulation;touch-action:manipulation}.ui-keyboard-has-focus{z-index:16001}.ui-keyboard-button{border:1px solid #404040;padding:0 .5em;margin:1px;min-width:3em;height:3em;line-height:3em;vertical-align:top;font-family:Helvetica,Arial,sans-serif;color:#eee;text-align:center;border-radius:5px;-webkit-box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);background:#444;background-image:-webkit-linear-gradient(-90deg,#444 0,#333 100%);background-image:linear-gradient(-90deg,#444 0,#333 100%);cursor:pointer;overflow:hidden;-moz-user-focus:ignore}.ui-keyboard-button:not([disabled]):hover{background:#eee;background-image:-webkit-linear-gradient(-90deg,#4f4f4f 0,#444 100%);background-image:linear-gradient(-90deg,#4f4f4f 0,#444 100%)}.ui-keyboard-button:not([disabled]):active{background:#ddd;background-image:-webkit-linear-gradient(-90deg,#555 0,#5f5f5f 100%);background-image:linear-gradient(-90deg,#555 0,#5f5f5f 100%)}.ui-keyboard-button span{display:block;width:100%;font-size:1.2em;text-align:center}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo){min-width:6em}.ui-keyboard-space{width:15em}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo) span{font-size:.8em;position:relative;top:-1em;left:-1.6em}.ui-keyboard-placeholder{color:#888}.ui-keyboard-nokeyboard{color:#888;border-color:#888}.ui-keyboard-spacer{display:inline-block;width:1px;height:0;cursor:default}.ui-keyboard-LRM span,.ui-keyboard-NBSP span,.ui-keyboard-RLM span,.ui-keyboard-ZWJ span,.ui-keyboard-ZWNJ span,.ui-keyboard-ZWSP span{font-size:.5em;line-height:1.5em;white-space:normal}.ui-keyboard-button.ui-keyboard-combo.ui-state-default{-webkit-box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);border-color:#d58512}.ui-keyboard-button.ui-keyboard-combo.ui-state-active{-webkit-box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);border-color:#269abc}button.ui-keyboard-accept.ui-keyboard-valid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);border-color:#398439}button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover{border-color:#4cae4c}button.ui-keyboard-accept.ui-keyboard-invalid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);border-color:#ac2925}button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover{border-color:#d43f3a}button.ui-keyboard-toggle span{width:.9em;height:.9em;display:inline-block;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),.ui-keyboard.ui-keyboard-disabled input{opacity:.5}.ui-keyboard-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.5)}.ui-keyboard-popup{display:inline-block;max-width:22em}.ui-keyboard-caret{background:#c00;width:1px;margin-top:3px}div.ui-keyboard-extender{margin-left:5px;margin-right:10px}button.ui-keyboard-extender span{width:.9em;height:.9em;display:inline-block;margin-bottom:3px;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6I2VlZSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}
\ No newline at end of file
+.ui-keyboard{font-size:14px;text-align:center;background:#282828;border:1px solid #484848;padding:4px;width:100%;height:auto;left:0;top:auto;bottom:0;position:fixed;white-space:nowrap;overflow-x:auto;-ms-touch-action:manipulation;touch-action:manipulation}.ui-keyboard-has-focus{z-index:16001}.ui-keyboard-button{border:1px solid #404040;padding:0 .5em;margin:1px;min-width:3em;height:3em;line-height:3em;vertical-align:top;font-family:Helvetica,Arial,sans-serif;color:#eee;text-align:center;border-radius:5px;-webkit-box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);box-shadow:1px 1px 3px 0 rgba(0,0,0,.5);background:#444;background-image:-webkit-linear-gradient(-90deg,#444 0,#333 100%);background-image:linear-gradient(-90deg,#444 0,#333 100%);cursor:pointer;overflow:hidden;-moz-user-focus:ignore}.ui-keyboard-button:not([disabled]):hover{background:#eee;background-image:-webkit-linear-gradient(-90deg,#4f4f4f 0,#444 100%);background-image:linear-gradient(-90deg,#4f4f4f 0,#444 100%)}.ui-keyboard-button:not([disabled]):active{background:#ddd;background-image:-webkit-linear-gradient(-90deg,#555 0,#5f5f5f 100%);background-image:linear-gradient(-90deg,#555 0,#5f5f5f 100%)}.ui-keyboard-button span{display:block;width:100%;font-size:1.2em;text-align:center}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo){min-width:6em}.ui-keyboard-space{width:15em}.ui-keyboard-actionkey:not(.ui-keyboard-dec):not(.ui-keyboard-combo) span{font-size:.8em;position:relative;top:-1em;left:-1.6em}.ui-keyboard-placeholder{color:#888}.ui-keyboard-nokeyboard{color:#888;border-color:#888}.ui-keyboard-spacer{display:inline-block;width:1px;height:0;cursor:default}.ui-keyboard-LRM span,.ui-keyboard-NBSP span,.ui-keyboard-RLM span,.ui-keyboard-ZWJ span,.ui-keyboard-ZWNJ span,.ui-keyboard-ZWSP span{font-size:.5em;line-height:1.5em;white-space:normal}.ui-keyboard-button.ui-keyboard-combo.ui-state-default{-webkit-box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);box-shadow:1px 1px 3px 0 rgba(213,133,18,.5);border-color:#d58512}.ui-keyboard-button.ui-keyboard-combo.ui-state-active{-webkit-box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);box-shadow:1px 1px 3px 0 rgba(38,154,188,.5);border-color:#269abc}button.ui-keyboard-accept.ui-keyboard-valid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);box-shadow:1px 1px 3px 0 rgba(57,132,57,.5);border-color:#398439}button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover{border-color:#4cae4c}button.ui-keyboard-accept.ui-keyboard-invalid-input{-webkit-box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);box-shadow:1px 1px 3px 0 rgba(172,41,37,.5);border-color:#ac2925}button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover{border-color:#d43f3a}button.ui-keyboard-toggle span{width:.9em;height:.9em;display:inline-block;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),.ui-keyboard.ui-keyboard-disabled input{opacity:.5}.ui-keyboard-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.5)}.ui-keyboard-popup{display:inline-block;max-width:22em}.ui-keyboard.ui-keyboard-popup-open .ui-keyboard-keyset .ui-keyboard-button{pointer-events:none}.ui-keyboard-caret{background:#c00;width:1px;margin-top:3px}div.ui-keyboard-extender{margin-left:5px;margin-right:10px}button.ui-keyboard-extender span{width:.9em;height:.9em;display:inline-block;margin-bottom:3px;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6I2VlZSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}
\ No newline at end of file
diff --git a/dist/css/keyboard.min.css b/dist/css/keyboard.min.css
index dc77fe0f..74e9e951 100644
--- a/dist/css/keyboard.min.css
+++ b/dist/css/keyboard.min.css
@@ -1 +1 @@
-.ui-keyboard{text-align:center;padding:.3em;position:absolute;left:0;top:0;z-index:16000;-ms-touch-action:manipulation;touch-action:manipulation}.ui-keyboard-has-focus{z-index:16001}.ui-keyboard div{font-size:1.1em}.ui-keyboard[contenteditable]{white-space:pre}.ui-keyboard-button{height:2em;min-width:2em;margin:.1em;cursor:pointer;overflow:hidden;line-height:2em;-moz-user-focus:ignore}.ui-keyboard-button span{padding:0;margin:0;white-space:nowrap;display:inline-block}.ui-keyboard-button-endrow{clear:left}.ui-keyboard-space{width:15em}.ui-keyboard-empty span,.ui-keyboard-space span{font:0/0 a;text-shadow:none;color:transparent}.ui-keyboard-preview-wrapper{text-align:center;position:relative;overflow:hidden}.ui-keyboard-preview{text-align:left;margin:0 0 3px 0;display:inline;width:99%}.ui-keyboard-keyset{text-align:center;white-space:nowrap}.ui-keyboard-input{text-align:left}.ui-keyboard-input-current{-moz-box-shadow:0 0 5px #4d90fe;-webkit-box-shadow:0 0 5px #4d90fe;box-shadow:0 0 5px #4d90fe}.ui-keyboard-placeholder{color:#888}.ui-keyboard-nokeyboard{color:#888;border-color:#888}.ui-keyboard-spacer{display:inline-block;width:1px;height:0;cursor:default}.ui-keyboard-LRM span,.ui-keyboard-NBSP span,.ui-keyboard-RLM span,.ui-keyboard-ZWJ span,.ui-keyboard-ZWNJ span,.ui-keyboard-ZWSP span{font-size:.5em;line-height:1.5em;white-space:normal}.ui-keyboard-button.ui-keyboard-combo.ui-state-default{border-color:#ffaf0f}button.ui-keyboard-accept.ui-keyboard-valid-input{border-color:#0c0;background:#080;color:#fff}button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover{background:#0a0}button.ui-keyboard-accept.ui-keyboard-invalid-input{border-color:#c00;background:#800;color:#fff;opacity:.5}button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover{background:#a00}.ui-keyboard-caret{background:#c00;width:1px;margin-top:3px}div.ui-body.ui-keyboard button.ui-keyboard-button.ui-btn{padding:.5em 1em;border-color:transparent}.ui-body .ui-keyboard-button{width:3em;height:3em;display:inline-block}.ui-body .ui-keyboard-widekey{width:5.5em}.ui-body .ui-keyboard-space{width:15em}.ui-body .ui-keyboard-space span{visibility:hidden}.ui-body .ui-keyboard-keyset{line-height:.5em}.ui-body input.ui-input-text,.ui-body textarea.ui-input-text{width:95%}.ui-body .ui-btn-inner{height:2em;padding:.2em 0;margin:0}.ui-body .ui-btn{margin:0;font-size:13px}button.ui-keyboard-button.btn{padding:1px 6px}button.ui-keyboard-toggle span{width:.8em;height:.8em;display:inline-block;background-repeat:no-repeat;background-position:center center;background-size:contain}button.ui-keyboard-toggle span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}.ui-keyboard-dark-theme button.ui-keyboard-toggle span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard-dark-theme button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),.ui-keyboard.ui-keyboard-disabled input{opacity:.5}.ui-keyboard-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.5)}.ui-keyboard-popup{display:inline-block;max-width:22em}div.ui-keyboard-extender{margin-left:5px}button.ui-keyboard-extender span{width:.9em;height:.9em;display:inline-block;margin-bottom:3px;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6IzExMSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzExMSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}.ui-keyboard-dark-theme button.ui-keyboard-extender span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6I2VlZSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}@media all and (max-width:319px){.ui-keyboard div{font-size:9px}.ui-keyboard .ui-keyboard-input{font-size:12px}.ui-body .ui-btn{margin:0;font-size:9px}.ui-body .ui-keyboard-button{width:1.8em;height:2.5em}.ui-body .ui-keyboard-widekey{width:4em}.ui-body .ui-keyboard-space{width:8em}.ui-body .ui-btn-inner{height:2.5em;padding:.3em 0}}@media all and (min-width:320px) and (max-width:479px){.ui-keyboard div{font-size:9px}.ui-keyboard .ui-keyboard-input{font-size:14px}.ui-body .ui-btn{margin:0;font-size:11px}.ui-body .ui-keyboard-button{width:1.8em;height:3em}.ui-body .ui-keyboard-widekey{width:4.5em}.ui-body .ui-keyboard-space{width:10em}.ui-body .ui-btn-inner{height:3em;padding:.7em 0}}@media all and (min-width:480px) and (max-width:767px){.ui-keyboard div{font-size:13px}.ui-keyboard .ui-keyboard-input{font-size:14px}.ui-body .ui-btn{margin:0;font-size:10px}.ui-body .ui-keyboard-button{height:2.5em}.ui-body .ui-btn-inner{height:2.5em;padding:.5em 0}}
\ No newline at end of file
+.ui-keyboard{text-align:center;padding:.3em;position:absolute;left:0;top:0;z-index:16000;-ms-touch-action:manipulation;touch-action:manipulation}.ui-keyboard-has-focus{z-index:16001}.ui-keyboard div{font-size:1.1em}.ui-keyboard[contenteditable]{white-space:pre}.ui-keyboard-button{height:2em;min-width:2em;margin:.1em;cursor:pointer;overflow:hidden;line-height:2em;-moz-user-focus:ignore}.ui-keyboard-button span{padding:0;margin:0;white-space:nowrap;display:inline-block}.ui-keyboard-button-endrow{clear:left}.ui-keyboard-space{width:15em}.ui-keyboard-empty span,.ui-keyboard-space span{font:0/0 a;text-shadow:none;color:transparent}.ui-keyboard-preview-wrapper{text-align:center;position:relative;overflow:hidden}.ui-keyboard-preview{text-align:left;margin:0 0 3px 0;display:inline;width:99%}.ui-keyboard-keyset{text-align:center;white-space:nowrap}.ui-keyboard-input{text-align:left}.ui-keyboard-input-current{-moz-box-shadow:0 0 5px #4d90fe;-webkit-box-shadow:0 0 5px #4d90fe;box-shadow:0 0 5px #4d90fe}.ui-keyboard-placeholder{color:#888}.ui-keyboard-nokeyboard{color:#888;border-color:#888}.ui-keyboard-spacer{display:inline-block;width:1px;height:0;cursor:default}.ui-keyboard-LRM span,.ui-keyboard-NBSP span,.ui-keyboard-RLM span,.ui-keyboard-ZWJ span,.ui-keyboard-ZWNJ span,.ui-keyboard-ZWSP span{font-size:.5em;line-height:1.5em;white-space:normal}.ui-keyboard-button.ui-keyboard-combo.ui-state-default{border-color:#ffaf0f}button.ui-keyboard-accept.ui-keyboard-valid-input{border-color:#0c0;background:#080;color:#fff}button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover{background:#0a0}button.ui-keyboard-accept.ui-keyboard-invalid-input{border-color:#c00;background:#800;color:#fff;opacity:.5}button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover{background:#a00}.ui-keyboard-caret{background:#c00;width:1px;margin-top:3px}div.ui-body.ui-keyboard button.ui-keyboard-button.ui-btn{padding:.5em 1em;border-color:transparent}.ui-body .ui-keyboard-button{width:3em;height:3em;display:inline-block}.ui-body .ui-keyboard-widekey{width:5.5em}.ui-body .ui-keyboard-space{width:15em}.ui-body .ui-keyboard-space span{visibility:hidden}.ui-body .ui-keyboard-keyset{line-height:.5em}.ui-body input.ui-input-text,.ui-body textarea.ui-input-text{width:95%}.ui-body .ui-btn-inner{height:2em;padding:.2em 0;margin:0}.ui-body .ui-btn{margin:0;font-size:13px}button.ui-keyboard-button.btn{padding:1px 6px}button.ui-keyboard-toggle span{width:.8em;height:.8em;display:inline-block;background-repeat:no-repeat;background-position:center center;background-size:contain}button.ui-keyboard-toggle span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}.ui-keyboard-dark-theme button.ui-keyboard-toggle span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==)}button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard-dark-theme button.ui-keyboard-toggle.ui-keyboard-disabled span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=)}.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),.ui-keyboard.ui-keyboard-disabled input{opacity:.5}.ui-keyboard-overlay{position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.5)}.ui-keyboard-popup{display:inline-block;max-width:22em}.ui-keyboard.ui-keyboard-popup-open .ui-keyboard-keyset .ui-keyboard-button{pointer-events:none}div.ui-keyboard-extender{margin-left:5px}button.ui-keyboard-extender span{width:.9em;height:.9em;display:inline-block;margin-bottom:3px;background-repeat:no-repeat;background-position:center center;background-size:contain;background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6IzExMSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzExMSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}.ui-keyboard-dark-theme button.ui-keyboard-extender span{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6I2VlZSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+)}@media all and (max-width:319px){.ui-keyboard div{font-size:9px}.ui-keyboard .ui-keyboard-input{font-size:12px}.ui-body .ui-btn{margin:0;font-size:9px}.ui-body .ui-keyboard-button{width:1.8em;height:2.5em}.ui-body .ui-keyboard-widekey{width:4em}.ui-body .ui-keyboard-space{width:8em}.ui-body .ui-btn-inner{height:2.5em;padding:.3em 0}}@media all and (min-width:320px) and (max-width:479px){.ui-keyboard div{font-size:9px}.ui-keyboard .ui-keyboard-input{font-size:14px}.ui-body .ui-btn{margin:0;font-size:11px}.ui-body .ui-keyboard-button{width:1.8em;height:3em}.ui-body .ui-keyboard-widekey{width:4.5em}.ui-body .ui-keyboard-space{width:10em}.ui-body .ui-btn-inner{height:3em;padding:.7em 0}}@media all and (min-width:480px) and (max-width:767px){.ui-keyboard div{font-size:13px}.ui-keyboard .ui-keyboard-input{font-size:14px}.ui-body .ui-btn{margin:0;font-size:10px}.ui-body .ui-keyboard-button{height:2.5em}.ui-body .ui-btn-inner{height:2.5em;padding:.5em 0}}
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-all.min.js b/dist/js/jquery.keyboard.extension-all.min.js
index 39c1c955..aae9fab8 100644
--- a/dist/js/jquery.keyboard.extension-all.min.js
+++ b/dist/js/jquery.keyboard.extension-all.min.js
@@ -1,5 +1,4 @@
-/*! jQuery UI Virtual Keyboard (1.27.4) - ALL Extensions + Mousewheel */
+/*! jQuery UI Virtual Keyboard (1.28.0) - ALL Extensions + Mousewheel */
/*! jQuery UI Virtual Keyboard Alt Key Popup v1.1.4 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard;e.extend(t.css,{altKeyPopup:"ui-keyboard-popup",altKeyOverlay:"ui-keyboard-overlay"}),t.altKeys=e.extend({a:"å æ ā ă ą à á â ã ä",A:"Å Æ Ā Ă Ą À Á  à Ä",c:"ç ć ĉ ċ č",C:"Ç Ć Ĉ Ċ Č",d:"ď ð ď",D:"Ď Ð Ď",e:"ė ę ĕ ě ə è é ê ë ē",E:"Ė Ę Ĕ Ě Ǝ È É Ê Ë Ē",g:"ģ ğ ĝ ġ",G:"Ģ Ğ Ĝ Ġ",h:"ĥ ħ",H:"Ĥ Ħ",i:"ı į ī ï î í ì ĩ ĭ",I:"İ Į Ī Ï Î Í Ì Ĩ Ĭ",j:"ĵ",J:"Ĵ",k:"ķ",K:"Ķ",l:"Ł Ľ Ļ Ĺ Ŀ",L:"ł ľ ļ ĺ ŀ",n:"ʼn ň ņ ń ñ",N:"ʼn Ň Ņ Ń Ñ",o:"œ ő ø ö õ ô ó ò ō ŏ",O:"Œ Ő Ø Ö Õ Ô Ó Ò Ō Ŏ",r:"ŕ ř ŗ",R:"Ŕ Ř Ŗ",s:"ś š ş ß § ŝ",S:"Ś Š Ş ẞ § Ŝ",t:"þ ť ț ţ ŧ",T:"Þ Ť Ț Ţ Ŧ",u:"ų ű ů ū ü û ú ù ũ ŭ",U:"Ų Ű Ů Ū Ü Û Ú Ù Ũ Ŭ",w:"ŵ",W:"Ŵ",y:"ý",Y:"Ý",z:"ź ż ž",Z:"Ź Ż Ž","!":"¡",$:"€ £ ¤ ¥ ¢ ₡ ₱ ₩ ₹ ₪ ₭ ₮ ₦ ₤","?":"¿","'":"〈 「 『 “",'"':"〉 」 』 ”","(":"《 【 〔",")":"》 】 〕"},t.altKeys),t.navigationKeys=e.extend({enter:13,escape:27,end:35,home:36,left:37,right:39},t.navigationKeys),e.fn.addAltKeyPopup=function(n){var o={holdTime:500,popupVisible:"popup-visible",popupHidden:"popup-hidden",popupPosition:null};return this.each(function(){var i=e(this).data("keyboard");if(i){if(i.altkeypopup_options=e.extend({},o,i.altkeypopup_options,n),i.altkeypopup_namespace)return i.altkeypopup_setup();i.altkeypopup_namespace=i.namespace+"AltKeyPopup",i.extensionNamespace.push(i.altkeypopup_namespace),i.altkeypopup_setup=function(){var n,o="mousedown touchstart ".split(" ").join(i.altkeypopup_namespace+" "),a="mouseup touchend touchcancel ".split(" ").join(i.altkeypopup_namespace+" ");i.options.repeatRate=0,i.$allKeys.unbind(i.altkeypopup_namespace).bind(o,function(){clearTimeout(n);var o=e(this),a=o.attr("data-value")||"",s=i.altkeypopup_options.holdTime;a in t.altKeys&&(s?n=setTimeout(function(){i.altKeyPopup_popup(a,o)},s):i.altKeyPopup_popup(a,o))}).bind(a,function(){clearTimeout(n)}),i.altkeypopup_blockingFlag=!1,i.$preview.unbind("keypress keydown keyup ".split(" ").join(i.altkeypopup_namespace+" ").trim()).bind("keypress keydown keyup ".split(" ").join(i.altkeypopup_namespace+" "),function(o){if("keyup"===o.type)return clearTimeout(n),i.altkeypopup_blockingFlag=!1,o.which!==t.navigationKeys.escape;var a,s=t.builtLayouts[i.layout],r=t.keyCodes,p=e(o.target),u=o.charCode||o.which,l=String.fromCharCode(u);return"keydown"===o.type&&l in t.altKeys?(a=i.altkeypopup_blockingFlag,i.altkeypopup_blockingFlag=!0,!a):i.altkeypopup_blockingFlag?(u>=r.a&&u<=r.z&&!o.shiftKey&&(l=l.toLowerCase()),s.hasMappedKeys&&s.mappedKeys.hasOwnProperty(l)&&(l=s.mappedKeys[l]),l in t.altKeys&&(n=setTimeout(function(){i.altkeypopup_blockingFlag&&i.altKeyPopup_popup(l,p)},i.altkeypopup_options.holdTime)),!0):void 0})},i.altKeyPopup_close=function(){i.altkeypopup_blockingFlag=!1,i.altKeyPopup_$overlay=null,i.$keyboard.find("."+t.css.altKeyOverlay).remove(),e(document).unbind(i.altkeypopup_namespace),i.$preview.focus(),i.options.ignoreEsc=i.altKeyPopup_savedIgnoreEsc,i.$el.trigger(i.altkeypopup_options.popupHidden,[i])},i.altKeyPopup_popup=function(n,o){if(!i.$keyboard.find("."+t.css.altKeyOverlay).length){var a,s,r,p,u,l,c,d,y,b=t.css,f={$kb:i.$keyboard,kbWidth:i.$keyboard.outerWidth(),kbHeight:i.$keyboard.outerHeight(),$key:o};i.altKeyPopup_$overlay=e('
').css({width:f.kbWidth,height:f.kbHeight}).appendTo(i.$keyboard).bind("click touchstart",function(){i.altKeyPopup_close()}),y="inactive hidden ".split(" ").join(i.altkeypopup_namespace+" "),i.$el.unbind(y).bind(y,function(){i.altKeyPopup_close()}),"bksp"!==n&&t.keyaction.bksp(i),s=e(''),a=t.altKeys[n].split(/\s+/),i.buildRow(s,0,a,[]),r=s.appendTo(i.altKeyPopup_$overlay).children().bind("mousedown touchstart",function(n){var o=e(this).attr("data-action");o in t.keyaction&&e.isFunction(t.keyaction[o])?t.keyaction[o](i,this,n):i.insertText(o),i.altKeyPopup_close()}).bind("mouseover mouseleave",function(t){r.removeClass(i.options.css.buttonHover),"mouseleave"!==t.type&&e(this).addClass(i.options.css.buttonHover)}),i.altKeyPopup_navigate(!0),i.altKeyPopup_savedIgnoreEsc=i.options.ignoreEsc,i.options.ignoreEsc=!0,e(document).unbind(i.altkeypopup_namespace).bind("keydown"+i.altkeypopup_namespace,function(e){return!1}).bind("keyup"+i.altkeypopup_namespace,function(e){return e.which===t.navigationKeys.escape?(e.which=0,i.altKeyPopup_close()):i.altKeyPopup_navigate(e),!1}),f.$popup=s,c=s.outerWidth(),(p=o.position().left-c/2)+c>f.kbWidth&&(p=f.kbWidth-c)<0&&s.css({width:f.kbWidth,height:"auto"}),u=o.position().top-o.outerHeight()-5,d=s.outerHeight(),l=i.$keyboard.find("."+b.keySet).position().top,u+d>f.kbHeight&&(u=f.kbHeight-d)p&&(n=p),i.altKeyPopup_currentIndex=n,r.removeClass(s).eq(n).addClass(s)},i.options.alwaysOpen&&i.isVisible()&&i.altkeypopup_setup(),i.$el.unbind(t.events.kbBeforeVisible+i.altkeypopup_namespace).bind(t.events.kbBeforeVisible+i.altkeypopup_namespace,function(){i.altkeypopup_setup()})}})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.fn.addAutocomplete=function(t){var n={position:{of:null,my:"right top",at:"left top",collision:"flip"},events:"autocomplete",data:""};return this.each(function(){var o,i,a=e(this).data("keyboard");a&&(i=a.namespace+"Autocomplete",a.autocomplete_namespace=i,a.extensionNamespace.push(i),a.autocomplete_init=function(){var s=(o=a.autocomplete_options=e.extend(!0,{},n,t)).events||o.data||"autocomplete";a.options.alwaysOpen&&a.isVisible()&&a.autocomplete_setup(),a.$el.unbind(i).bind(e.keyboard.events.kbVisible+i,function(){a.autocomplete_setup()}).bind(e.keyboard.events.kbHidden+i,function(){a.$el[o.data||"autocomplete"]("close")}).bind(e.keyboard.events.kbChange+i,function(){a.hasAutocomplete&&a.isVisible()&&a.$el.val(a.$preview.val())}).bind(s+"open"+i,function(){if(a.hasAutocomplete){var t=e.extend({},o.position);t.of=t.of||a.$keyboard,a.$autocomplete.menu.element.position(t)}}).bind(s+"select"+i,function(e,t){a.autocomplete_getVal(t.item)})},a.autocomplete_getVal=function(e){var t;switch(typeof e){case"string":t=e||"";break;case"object":t=e.label||e.value||"";break;default:t=a.preview&&a.preview.value||a.el.value}t=t.toString(),a.hasAutocomplete&&""!==t&&((a.$preview||a.$el).val(t).focus(),a.last.start=t.length,a.last.end=t.length,a.last.val=t)},a.autocomplete_update=function(e){clearTimeout(a.$autocomplete.searching),a.$autocomplete.searching=setTimeout(function(){a.$autocomplete.term!==a.$autocomplete.element.val()&&(a.$autocomplete.selectedItem=null,a.$autocomplete.search(null,e))},a.$autocomplete.options.delay)},a.autocomplete_navKeys={8:"backSpace",9:"tab",13:"enter",20:"capsLock",27:"escape",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete"},a.autocomplete_setup=function(){var e;if(a.$autocomplete=a.$el.data(a.autocomplete_options.data)||a.$el.data("uiAutocomplete")||a.$el.data("ui-autocomplete")||a.$el.data("autocomplete"),a.hasAutocomplete=void 0!==a.$autocomplete&&!a.$autocomplete.options.disabled,a.hasAutocomplete){a.$preview.bind("keydown"+i+" keypress"+i,function(t){a.$preview&&t.namespace!==a.$autocomplete.eventNamespace&&(t.namespace=a.$autocomplete.eventNamespace.slice(1),(e=a.autocomplete_navKeys[t.which])?a.el!==a.preview&&(a.$el.triggerHandler(t),"enter"===e&&setTimeout(function(){a.$autocomplete&&(a.$preview.val(a.$autocomplete.selectedItem.value),a.$preview.focus())},100)):a.autocomplete_update(t))});var t="mouseup mousedown mouseleave touchstart touchend touchcancel ".split(" ").join(i+" ");a.$allKeys.bind(t,function(e){a.autocomplete_update(e)})}a.escCloseCallback.autocomplete||(a.escCloseCallback.autocomplete=a.checkAutocompleteMenu)},a.checkAutocompleteMenu=function(e){return a.hasAutocomplete&&e.closest("ul").hasClass("ui-autocomplete")},a.autocomplete_destroy=function(){clearTimeout(a.$autocomplete.searching),a.hasAutocomplete=!1,a.$el.unbind(i),a.$preview&&(a.$preview.unbind(i),a.$allKeys.unbind(i)),delete a.$autocomplete},a.autocomplete_init())})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard;t.firefox=void 0!==window.mozInnerScreenX,e.extend(t.css,{caret:"ui-keyboard-caret",caretMirror:"ui-keyboard-mirror-div"}),e.fn.addCaret=function(n){var o={caretClass:"",charAttr:"data-character",charIndex:1,offsetX:0,offsetY:0,adjustHt:0};return this.each(function(){var i,a,s=t.events,r=e(this).data("keyboard");r&&(i=r.caret_options=e.extend({},o,n),a=r.caret_namespace=r.namespace+"caret",r.extensionNamespace.push(a),r.textareaCaretProperties=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r.caret_setup=function(){var n=t.css,o="keyup keypress mouseup mouseleave ".split(" ").join(a+" "),p="position:absolute;visibility:hidden;top:-9999em;left:-9999em;white-space:pre-wrap;z-index:-10;"+("INPUT"===r.preview.nodeName?"":"word-wrap:break-word;");r.$keyboard.find("."+n.caretMirror).remove(),r.caret_$div=e('').appendTo(r.$keyboard),r.$caret&&r.$caret.remove(),r.$caret=e('
').insertAfter(r.$preview),r.$el.unbind(s.kbChange+a).bind(s.kbChange+a,function(){r.findCaretPos()}),r.$preview.unbind(o).bind(o,function(){r.findCaretPos()})},r.findCaretPos=function(){if(r.caret_$div){var n,o,a,s,p,u,l,c,d=r.preview,y=parseFloat(r.$preview.css("fontSize")),b="INPUT"===d.nodeName,f=r.caret_$div[0];n=f.style,o=window.getComputedStyle?getComputedStyle(d,null):d.currentStyle,s=t.caret(r.$preview),p=Math["ltr"===o.direction?"max":"min"](s.start,s.end),r.textareaCaretProperties.forEach(function(e){n[e]=o[e]}),t.firefox&&(n.width=parseInt(o.width,10)-2+"px",d.scrollHeight>parseInt(o.height,10)&&(n.overflowY="scroll")),n.width=parseInt(b?d.scrollWidth:o.width,10)+(b?2*y:0)+"px",f.textContent=d.value.substring(0,p),"INPUT"===d.nodeName&&(f.textContent=f.textContent.replace(/\x20/g," ")),(l=document.createElement("span")).textContent=d.value.substring(p)||"",f.appendChild(l),c=e(l).position(),s="center"===n.textAlign?y:0,r.caretPos={top:c.top+parseInt(o.borderTopWidth,10)+i.offsetY,left:c.left+parseInt(o.borderLeftWidth,10)+i.offsetX-s},a=parseInt(r.$caret.css("margin-top"),10),n=Math.round(y+2*a)+i.adjustHt,c=r.$preview.position(),r.$caret.css({top:c.top-d.scrollTop+r.caretPos.top-a,left:c.left-d.scrollLeft+r.caretPos.left,height:n}),u=d.value.substring(p,p+i.charIndex).replace(/\s/," ")||" ",r.$caret.attr(i.charAttr,u)}},r.$el.unbind(a).bind(s.kbBeforeVisible+a,function(){r.caret_setup()}).bind(s.kbVisible+a,function(){r.findCaretPos()}).bind(s.kbHidden+a,function(){var e="keyup keypress mouseup mouseleave ".split(" ").join(a+" ");r.$preview.unbind(e),r.$caret.remove(),r.$caret=null,r.caret_$div=null}),r.options.alwaysOpen&&r.isVisible()&&(r.caret_setup(),r.findCaretPos()))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard;t.css.extender="ui-keyboard-extender",t.language.en.display.extender=" :toggle_numpad",t.layouts.numpad={normal:["{clear} / * -","7 8 9 +","4 5 6 %","1 2 3 =","0 {dec} {left} {right}"]},t.keyaction.extender=function(e,t){return e.extender_toggle(),!1},e.fn.addExtender=function(n){var o={layout:"numpad",showing:!1,reposition:!0};return this.each(function(){var i=e(this).data("keyboard");if(i){if(i.extender_options=e.extend({},o,i.extender_options,n),i.extender_namespace)return i.extender_layoutSwitcher();i.extender_namespace=i.namespace+"extender",i.extensionNamespace.push(i.extender_namespace),i.extender_layoutSwitcher=function(){i.extender_lastKeyset=i.last.keyset,i.extender_bindEvents(!1),i.$el.one(t.events.kbBeforeVisible,function(){i.shiftActive=i.extender_lastKeyset[0],i.altActive=i.extender_lastKeyset[1],i.metaActive=i.extender_lastKeyset[2],i.showKeySet(),i.extender_setup(),i.extender_bindEvents()}),i.redraw()},i.extender_bindEvents=function(e){var n=t.events.kbBeforeVisible+i.extender_namespace;i.$el.unbind(n),!1!==e&&i.$el.bind(n,function(){i.extender_setup()})},i.extender_setup=function(){var e,n=i.extender_options.layout;void 0===t.builtLayouts[n]&&i.buildKeyboard(n),(e=t.builtLayouts[n].$keyboard.find("."+t.css.keySet+"-normal").clone()).removeClass().removeAttr("name").addClass(t.css.extender).children("button").removeAttr("data-pos"),e[0].style.display=i.extender_options.showing?"inline-block":"none",i.$keyboard.find("div."+t.css.extender).remove(),i.$keyboard.append(e),i.extender_toggle(i.extender_options.showing),i.bindKeys()},i.extender_toggle=function(n){i.extender_options.showing=void 0===n?!i.extender_options.showing:n,i.$keyboard.find("button."+t.css.extender).toggleClass(i.options.css.buttonActive,i.extender_options.showing).end().find("div."+t.css.extender)[0].style.display=i.extender_options.showing?"inline-block":"none",i.extender_options.reposition&&e(window).trigger("resize")},i.options.alwaysOpen&&i.isVisible()&&i.extender_setup(),i.extender_bindEvents()}})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){e.fn.addMobile=function(t){var n,o={container:{theme:"b",cssClass:"ui-body"},input:{theme:"b",cssClass:""},buttonMarkup:{theme:"b",cssClass:"ui-btn",shadow:"true",corners:"true"},buttonHover:{theme:"b",cssClass:"ui-btn-hover"},buttonAction:{theme:"b",cssClass:"ui-btn-active"},buttonActive:{theme:"b",cssClass:"ui-btn-active"},allThemes:"a b c"};return this.each(function(){var i=e(this).data("keyboard");i&&void 0!==e.fn.textinput&&(i.mobile_options=n=e.extend(!0,{},o,t),i.mobile_themes=e.trim((" "+n.allThemes).split(" ").join(" "+n.buttonMarkup.cssClass+"-")+(" "+n.allThemes).split(" ").join(" "+n.buttonAction.cssClass+"-")+(" "+n.allThemes).split(" ").join(" "+n.buttonActive.cssClass+"-")),void 0===i.options.mobile_savedActiveClass&&(i.options.mobile_savedActiveClass=""+i.options.css.buttonActive),i.mobile_init=function(){var t=i.namespace+"Mobile";e("."+e.keyboard.css.input).textinput(),i.options.alwaysOpen&&i.isVisible&&i.mobile_setup(),i.extensionNamespace.push(t),i.$el.unbind(t).bind(e.keyboard.events.kbBeforeVisible+t,function(){i&&i.el.active&&i.$keyboard.length&&i.$keyboard.css("visibility","hidden")}).bind(e.keyboard.events.kbVisible+t,function(){i&&i.el.active&&i.$keyboard.length&&(i.mobile_setup(),i.$keyboard.css("visibility","visible"),i.$preview.focus())})},i.mobile_setup=function(){var t,o=e.keyboard.css,a=i.options,s=i.mobile_themes;i.mobile_$actionKeys=i.$keyboard.find("."+i.options.css.buttonAction),a.css.buttonActive=a.mobile_savedActiveClass+" "+i.modOptions(n.buttonActive,n.buttonMarkup),i.$keyboard.addClass(i.modOptions(n.container,n.container)).find("."+o.preview).removeClass("ui-widget ui-widget-content").addClass(i.modOptions(n.input,n.input)).end().find("button").removeClass(e.trim("ui-corner-all ui-state-default "+s)).addClass(i.modOptions(n.buttonMarkup,n.buttonMarkup)).not(i.mobile_$actionKeys).hover(function(){e(this).removeClass(s).addClass(i.modOptions(n.buttonHover,n.buttonMarkup))},function(){e(this).removeClass(s+" "+n.buttonHover.cssClass).addClass(i.modOptions(n.buttonMarkup,n.buttonMarkup))}),i.mobile_$actionKeys.removeClass(s).addClass(i.modOptions(n.buttonAction,n.buttonMarkup)),i.msie&&i.$preview[0]!==i.el&&(i.$preview.hide(),i.$keyboard.css("width",""),i.width=i.$keyboard.outerWidth(),i.$keyboard.width(i.width+parseInt(i.$preview.css("fontSize"),10)),i.$preview.width(i.width),i.$preview.show()),e.ui&&e.ui.position&&((t=a.position).of=t.of||i.$el.data("keyboardPosition")||i.$el,t.collision=t.collision||"flipfit flipfit",i.$keyboard.position(t))},i.modOptions=function(e,t){return" "+(e.cssClass||"")+" "+(t&&t.cssClass?t.cssClass+"-"+(e.theme||""):"")+("true"==e.shadow?" ui-shadow":"")+("true"==e.corners?" ui-corner-all":"")},i.mobile_init())})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.keyboard.navigationKeys={toggle:112,enter:13,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,caretrt:45,caretlt:46,caretright:function(t){e.keyboard.keyaction.right(t)},caretleft:function(t){e.keyboard.keyaction.left(t)}},e.fn.addNavigation=function(t){return this.each(function(){var n,o,i=e(this).data("keyboard"),a=i.options,s=e.keyboard.events,r=e.keyboard.css;i&&(i.navigation_options=n=e.extend({},{position:[0,0],toggleMode:!1,focusClass:"hasFocus",toggleKey:null,rowLooping:!1},t),i.navigation_keys=o=e.extend({},e.keyboard.navigationKeys),i.navigation_namespace=i.namespace+"Nav",i.extensionNamespace.push(i.navigation_namespace),i.saveNav=[i.options.tabNavigation,i.options.enterNavigation],i.allNavKeys=e.map(o,function(e,t){return e}),i.navigation_init=function(){i.$keyboard.toggleClass(n.focusClass,n.toggleMode).find("."+r.keySet+":visible").find("."+r.keyButton+'[data-pos="'+n.position[0]+","+n.position[1]+'"]').addClass(a.css.buttonHover),i.$preview.unbind(i.navigation_namespace).bind("keydown"+i.navigation_namespace,function(e){return i.checkKeys(e.which)})},i.checkKeys=function(t,o){if(void 0!==t){var a=i.navigation_keys;return(t===(n.toggleKey||a.toggle)||o)&&(n.toggleMode=!o&&!n.toggleMode,i.options.tabNavigation=!n.toggleMode&&i.saveNav[0],i.options.enterNavigation=!n.toggleMode&&i.saveNav[1]),i.$keyboard.toggleClass(n.focusClass,n.toggleMode),n.toggleMode&&t===a.enter?(i.$keyboard.find("."+r.keySet+":visible").find("."+r.keyButton+'[data-pos="'+n.position[0]+","+n.position[1]+'"]').trigger(s.kbRepeater),!1):n.toggleMode&&e.inArray(t,i.allNavKeys)>=0?(i.navigateKeys(t),!1):void 0}},i.getMaxIndex=function(e,t){return e.find("."+r.keyButton+'[data-pos^="'+t+',"]').length-1},i.leftNavigateKey=function(e,t){var n=i.navigation_options.rowLooping,o=e-1;return o>=0?o:n?t:0},i.rightNavigateKey=function(e,t){var n=i.navigation_options.rowLooping,o=e+1;return o<=t?o:n?0:t},i.navigateKeys=function(t,o,s){if(i.isVisible()){s="number"==typeof s?s:n.position[1],o="number"==typeof o?o:n.position[0];var p,u=i.$keyboard.find("."+r.keySet+":visible"),l=u.find("."+r.endRow).length-1,c=i.getMaxIndex(u,o),d=i.last,y=i.$preview.val().length,b=i.navigation_keys;switch(t){case b.pageup:o=0;break;case b.pagedown:o=l;break;case b.end:s=c;break;case b.home:s=0;break;case b.left:s=i.leftNavigateKey(s,c);break;case b.up:o+=o>0?-1:0,p=i.getMaxIndex(u,o),s=s===c?p:s;break;case b.right:s=i.rightNavigateKey(s,c);break;case b.down:o+=o+1>l?0:1,p=i.getMaxIndex(u,o),s=s===c?p:s;break;case b.caretrt:d.start++;break;case b.caretlt:d.start--}t!==b.caretrt&&t!==b.caretlt||(d.start=d.start<0?0:d.start>y?y:d.start,i.last.start=i.last.end=d.end=d.start,e.keyboard.caret(i.$preview,i.last)),s>(c=i.getMaxIndex(u,o))&&(s=c),u.find("."+a.css.buttonHover).removeClass(a.css.buttonHover),u.find("."+r.keyButton+'[data-pos="'+o+","+s+'"]').addClass(a.css.buttonHover),n.position=[o,s]}},i.options.alwaysOpen&&i.isVisible()&&(i.$keyboard.find("."+a.css.buttonHover).removeClass(a.css.buttonHover),i.navigation_init()),i.$el.unbind(i.navigation_namespace).bind(s.kbVisible,function(){i.$keyboard.find("."+a.css.buttonHover).removeClass(a.css.buttonHover),i.navigation_init()}).bind(s.kbInactive+" "+s.kbHidden,function(e){i.checkKeys(e.which,!0)}).bind(s.kbKeysetChange,function(){i.navigateKeys(null)}).bind("navigate navigateTo",function(t,n,o){var a;(n=isNaN(n)?n.toLowerCase():n)in i.navigation_keys?(a=i.navigation_keys[n],isNaN(a)&&a in e.keyboard.keyaction?e.keyboard.keyaction[a](i,this,t):e.isFunction(a)?a(i):i.checkKeys(a)):"string"==typeof n&&n in e.keyboard.keyaction?e.keyboard.keyaction[n](i,this,t):i.navigateKeys(null,n,o)}))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.previewKeyset=function(t){return this.each(function(){var n=e(this).data("keyboard"),o=n.namespace+"Preview";n&&(n.previewKeyset_options=e.extend({},{sets:["normal","shift","alt","alt-shift"]},t),n.extensionNamespace.push(o),n.previewKeyset=function(){var t=e.keyboard.css,o=n.previewKeyset_options.sets,i=n.$keyboard.find("."+t.keySet).filter('[name="'+o.join('"],[name="')+'"]');i.length>1&&i.eq(0).find("."+t.keyButton).not("."+t.keyAction).each(function(){var n,a,s={},r=o.length,p=i.find('button[data-pos="'+e(this).attr("data-pos")+'"]');for(n=0;n
=0&&(s["data-"+a]=p.eq(n).find("."+t.keyText).text());p.attr(s)})},n.options.alwaysOpen&&n.isVisible()?n.previewKeyset():n.$el.unbind(e.keyboard.events.kbBeforeVisible+o).bind(e.keyboard.events.kbBeforeVisible+o,function(){n.previewKeyset()}))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.addScramble=function(t){var n={targetKeys:/[a-z\d]/i,byRow:!0,byKeySet:!1,randomizeOnce:!0,randomizeInput:!1,init:null,sameForAll:!1};return this.each(function(){var o,i=e(this).data("keyboard"),a=i.namespace+"Scramble",s=i.options;i&&!i.scramble_options&&(o=i.scramble_options=e.extend({},n,t),i.extensionNamespace.push(a),o.orig_create=s.create,i.scramble_setup=function(t){var n,a,s,r,p,u,l,c,d,y,b;if(n=t.find("."+e.keyboard.css.keySet),t.length){for(o.byKeySet&&(n=n.eq(0)),a=0;a0;)o=Math.floor(Math.random()*i),!1===t[i-1]&&i--,!1!==t[i-1]&&!1!==t[o]&&(n=e[--i],e[i]=e[o],e[o]=n);return e},i.realign=function(t){var n,o,i,a=t.find("."+e.keyboard.css.keySet),s=a.eq(0);return a=a.filter(":gt(0)"),s.children().each(function(t,s){o="BR"===s.tagName,i=e(s).attr("data-pos"),a.each(function(t,a){n=o?"br:first":'button[data-pos="'+i+'"]',e(a).find(n).appendTo(a)})}),t},i.setScrambleLayout=function(){if(!/^scrambled/.test(s.layout)){i.orig_layout=s.layout;var e=e||"scrambled"+Math.round(1e4*Math.random());s.layout=o.sameForAll?e:"scrambled"+Math.round(1e4*Math.random())}},s.create=function(){var t=s.layout;e.keyboard.builtLayouts[t]={mappedKeys:{},acceptedKeys:[],$keyboard:null},i.layout=s.layout=i.orig_layout,i.buildKeyboard(i.layout,!0),i.layout=s.layout=t,e.keyboard.builtLayouts[t]=e.extend(!0,{},e.keyboard.builtLayouts[i.orig_layout]),o.randomizeOnce&&(e.keyboard.builtLayouts[t].$keyboard=i.scramble_setup(e.keyboard.builtLayouts[i.orig_layout].$keyboard.clone())),i.$keyboard=e.keyboard.builtLayouts[t].$keyboard,o.randomizeInput?i.$el.unbind(e.keyboard.events.kbChange+a).bind(e.keyboard.events.kbChange+a,function(t,n){o.targetKeys.test(n.last.key)&&(n.$keyboard.find("."+s.css.buttonHover).removeClass(s.css.buttonHover),n.$keyboard=n.scramble_setup(n.$keyboard),e(document.elementFromPoint(t.clientX,t.clientY)).trigger("mouseenter"))}):o.randomizeOnce||i.$el.unbind(e.keyboard.events.kbBeforeVisible+a).bind(e.keyboard.events.kbBeforeVisible+a,function(e,t){t.$keyboard=t.scramble_setup(t.$keyboard)}),e.isFunction(o.orig_create)&&o.orig_create(i)},i.setScrambleLayout(),s.alwaysOpen&&i.$keyboard.length?setTimeout(function(){var t=e.keyboard.builtLayouts;i.$keyboard=i.scramble_setup(i.$keyboard),i.setScrambleLayout(),void 0===t[s.layout]&&(t[s.layout]={mappedKeys:e.extend({},t[i.layout].mappedKeys),acceptedKeys:e.extend([],t[i.layout].acceptedKeys),$keyboard:i.$keyboard.clone()}),e.isFunction(o.init)&&o.init(i)},0):e.isFunction(o.init)&&o.init(i))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){e.fn.addTyping=function(t){var n={showTyping:!0,lockTypeIn:!1,delay:250,hoverDelay:250},o=e.keyboard;return this.each(function(){var i,a=e(this).data("keyboard");a&&(i=a.typing_options=e.extend({},n,t),a.typing_keymap={" ":"space",'"':"34","'":"39"," ":"space","\b":"bksp","{b}":"bksp","{d}":"del","{l}":"left","{r}":"right","\n":"enter","\r":"enter","{e}":"enter","\t":"tab","{t}":"tab"},a.typing_xref={8:"bksp",9:"tab",13:"enter",32:"space",37:"left",39:"right",46:"del"},a.typing_event=!1,a.typing_namespace=a.namespace+"typing",a.extensionNamespace.push(a.typing_namespace),i.savedLockInput=a.options.lockInput,a.typing_setup_reset=function(){var e=o.events,t=a.typing_namespace,n=[e.kbHidden,e.kbInactive,""].join(t+" ");a.$el.unbind(t).bind(n,function(){a.typing_reset()}),a.$allKeys.unbind(t).bind("mousedown"+t,function(){a.typing_reset()})},a.typing_setup=function(){var e=a.typing_namespace;a.typing_setup_reset(),a.$el.bind(o.events.kbBeforeVisible+e,function(){a.typing_setup()}),a.$preview.unbind(e).bind("keyup"+e,function(e){return!(i.init&&i.lockTypeIn||!i.showTyping)&&(e.which>=37&&e.which<=40?void 0:(16===e.which&&(a.shiftActive=!1),18===e.which&&(a.altActive=!1),16===e.which||18===e.which?(a.showSet(),void setTimeout(function(){a.$preview.focus()},200)):void 0))}).bind("keydown"+e,function(e){if(i.init&&i.lockTypeIn||!i.showTyping)return!1;e.temp=!1,16===e.which&&(e.temp=!a.shiftActive,a.shiftActive=!0),18===e.which&&(e.temp=!a.altActive,a.altActive=!0),e.temp&&(a.showSet(),a.$preview.focus()),a.typing_event=!0,a.typing_xref[e.which]&&a.typing_findKey("",e)}).bind("keypress"+e,function(e){if(i.init&&i.lockTypeIn)return!1;a.typing_event&&!a.options.lockInput&&(a.typing_reset(),a.typing_event=!0,a.typing_findKey("",e))})},a.typing_reset=function(){a.typing_event=i.init=!1,i.text="",i.len=i.current=0,a.options.lockInput=i.savedLockInput},a.typeIn=function(e,t,n,o){if(!a.isVisible())return clearTimeout(a.typing_timer),void a.typing_reset();if(a.typing_event){if(void 0===e)return a.typing_event=!1,void(a.options.lockInput=i.savedLockInput)}else!0!==i.init&&(i.init=!0,a.options.lockInput=i.lockTypeIn,i.text=e||i.text||"",i.len=i.text.length,i.delay=t||i.delay,i.current=0,n&&(i.callback=n)),"{"===(e=i.text.substring(i.current,++i.current))&&"}"===i.text.substring(i.current+1,i.current+2)&&(e+=i.text.substring(i.current,i.current+=2)),a.typing_findKey(e,o)},a.typing_findKey=function(t,n){var s,r,p,u,l,c,d,y,b=o.css,f=o.builtLayouts[a.layout].mappedKeys;if(a.isOpen&&a.$keyboard.length)if(c=a.$keyboard.find("."+b.keySet),u=t in a.typing_keymap?a.typing_keymap[t]:t,s="."+b.keyButton+'[data-action="'+u+'"]',a.typing_event&&n&&("keypress"!==n.type&&a.typing_xref.hasOwnProperty(n.keyCode||n.which)?s="."+b.keyPrefix+a.processName(a.typing_xref[n.keyCode||n.which]):(r=String.fromCharCode(n.charCode||n.which),s=f.hasOwnProperty(r)?"."+b.keyButton+'[data-value="'+f[r].replace(/"/g,'\\"')+'"]':"."+b.keyPrefix+a.processName(r))),(l=c.filter(":visible").find(s)).length?a.typing_simulateKey(l,t,n):(a.typing_event?l=c.find(s):(p=t in a.typing_keymap?a.typing_keymap[t]:a.processName(t),l=c.find("."+b.keyPrefix+p)),(y=l.closest("."+b.keySet)).attr("name")?(i.showTyping&&(d=y.attr("name"),a.shiftActive=/shift/.test(d),a.altActive=/alt/.test(d),a.metaActive=a.last.keyset[2]=!!/\bmeta/.test(d)&&d.match(/meta[\w-]+/)[0],a.showSet(a.metaActive)),a.typing_simulateKey(l,t,n)):a.typing_event||(t in a.typing_keymap&&a.typing_keymap[t]in o.keyaction?o.keyaction[a.typing_keymap[t]](a,l,n):a.insertText(t),a.checkCombos(),a.$el.trigger(o.events.kbChange,[a,a.el]))),i.current<=i.len&&0!==i.len){if(!a.isVisible())return;a.typing_timer=setTimeout(function(){a.typeIn()},i.delay)}else{if(0!==i.len)return a.typing_reset(),void(e.isFunction(i.callback)&&(a.typing_timer=setTimeout(function(){e.isFunction(i.callback)&&i.callback(a)},i.delay)));a.typing_reset()}},a.typing_simulateKey=function(t,n,s){var r=t.length;a.isVisible()&&(i.showTyping&&r&&(t.filter(":visible").trigger("mouseenter"+a.namespace),i.showTyping&&r&&setTimeout(function(){t.trigger("mouseleave"+a.namespace)},Math.min(i.hoverDelay,i.delay))),a.typing_event||setTimeout(function(){n in a.typing_keymap&&a.typing_keymap[n]in o.keyaction?((s=s||e.Event("keypress")).target=t,o.keyaction[a.typing_keymap[n]](a,t,s)):a.insertText(n),a.checkCombos(),a.$el.trigger(o.events.kbChange,[a,a.el])},i.delay/3))},i.showTyping&&a.options.alwaysOpen&&a.isVisible()?a.typing_setup():a.$el.unbind(o.events.kbBeforeVisible+a.typing_namespace).bind(o.events.kbBeforeVisible+a.typing_namespace,function(){i.showTyping?a.typing_setup():a.typing_setup_reset()}))})}}),
-/*! Mousewheel version: 3.1.12 * (c) 2014 Brandon Aaron * MIT License */
-function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){var t,n,o=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],i="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],a=Array.prototype.slice;if(e.event.fixHooks)for(var s=o.length;s;)e.event.fixHooks[o[--s]]=e.event.mouseHooks;var r=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var t=i.length;t;)this.addEventListener(i[--t],p,!1);else this.onmousewheel=p;e.data(this,"mousewheel-line-height",r.getLineHeight(this)),e.data(this,"mousewheel-page-height",r.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var t=i.length;t;)this.removeEventListener(i[--t],p,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var n=e(t),o=n["offsetParent"in e.fn?"offsetParent":"parent"]();return o.length||(o=e("body")),parseInt(o.css("fontSize"),10)||parseInt(n.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function p(o){var i,s=o||window.event,p=a.call(arguments,1),c=0,d=0,y=0,b=0,f=0;if((o=e.event.fix(s)).type="mousewheel","detail"in s&&(y=-1*s.detail),"wheelDelta"in s&&(y=s.wheelDelta),"wheelDeltaY"in s&&(y=s.wheelDeltaY),"wheelDeltaX"in s&&(d=-1*s.wheelDeltaX),"axis"in s&&s.axis===s.HORIZONTAL_AXIS&&(d=-1*y,y=0),c=0===y?d:y,"deltaY"in s&&(c=y=-1*s.deltaY),"deltaX"in s&&(d=s.deltaX,0===y&&(c=-1*d)),0!==y||0!==d){if(1===s.deltaMode){var h=e.data(this,"mousewheel-line-height");c*=h,y*=h,d*=h}else if(2===s.deltaMode){var m=e.data(this,"mousewheel-page-height");c*=m,y*=m,d*=m}if(i=Math.max(Math.abs(y),Math.abs(d)),(!n||i=1?"floor":"ceil"](c/n),d=Math[d>=1?"floor":"ceil"](d/n),y=Math[y>=1?"floor":"ceil"](y/n),r.settings.normalizeOffset&&this.getBoundingClientRect){var v=this.getBoundingClientRect();b=o.clientX-v.left,f=o.clientY-v.top}return o.deltaX=d,o.deltaY=y,o.deltaFactor=n,o.offsetX=b,o.offsetY=f,o.deltaMode=0,p.unshift(o,c,d,y),t&&clearTimeout(t),t=setTimeout(u,200),(e.event.dispatch||e.event.handle).apply(this,p)}}function u(){n=null}function l(e,t){return r.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard;e.extend(t.css,{altKeyPopup:"ui-keyboard-popup",altKeyOverlay:"ui-keyboard-overlay",altKeyPopupOpen:"ui-keyboard-popup-open"}),t.altKeys=e.extend({a:"å æ ā ă ą à á â ã ä",A:"Å Æ Ā Ă Ą À Á  à Ä",c:"ç ć ĉ ċ č",C:"Ç Ć Ĉ Ċ Č",d:"ď ð ď",D:"Ď Ð Ď",e:"ė ę ĕ ě ə è é ê ë ē",E:"Ė Ę Ĕ Ě Ǝ È É Ê Ë Ē",g:"ģ ğ ĝ ġ",G:"Ģ Ğ Ĝ Ġ",h:"ĥ ħ",H:"Ĥ Ħ",i:"ı į ī ï î í ì ĩ ĭ",I:"İ Į Ī Ï Î Í Ì Ĩ Ĭ",j:"ĵ",J:"Ĵ",k:"ķ",K:"Ķ",l:"Ł Ľ Ļ Ĺ Ŀ",L:"ł ľ ļ ĺ ŀ",n:"ʼn ň ņ ń ñ",N:"ʼn Ň Ņ Ń Ñ",o:"œ ő ø ö õ ô ó ò ō ŏ",O:"Œ Ő Ø Ö Õ Ô Ó Ò Ō Ŏ",r:"ŕ ř ŗ",R:"Ŕ Ř Ŗ",s:"ś š ş ß § ŝ",S:"Ś Š Ş ẞ § Ŝ",t:"þ ť ț ţ ŧ",T:"Þ Ť Ț Ţ Ŧ",u:"ų ű ů ū ü û ú ù ũ ŭ",U:"Ų Ű Ů Ū Ü Û Ú Ù Ũ Ŭ",w:"ŵ",W:"Ŵ",y:"ý",Y:"Ý",z:"ź ż ž",Z:"Ź Ż Ž","!":"¡",$:"€ £ ¤ ¥ ¢ ₡ ₱ ₩ ₹ ₪ ₭ ₮ ₦ ₤","?":"¿","'":"〈 「 『 “",'"':"〉 」 』 ”","(":"《 【 〔",")":"》 】 〕"},t.altKeys),t.navigationKeys=e.extend({enter:13,escape:27,end:35,home:36,left:37,right:39},t.navigationKeys),e.fn.addAltKeyPopup=function(n){var o={holdTime:500,popupVisible:"popup-visible",popupHidden:"popup-hidden",popupPosition:null};return this.each(function(){var i=e(this).data("keyboard");if(i){if(i.altkeypopup_options=e.extend({},o,i.altkeypopup_options,n),i.altkeypopup_namespace)return i.altkeypopup_setup();i.altkeypopup_namespace=i.namespace+"AltKeyPopup",i.extensionNamespace.push(i.altkeypopup_namespace),i.altkeypopup_setup=function(){var n,o="mousedown touchstart ".split(" ").join(i.altkeypopup_namespace+" "),a="mouseup touchend touchcancel ".split(" ").join(i.altkeypopup_namespace+" ");i.options.repeatRate=0,i.unbindButton(i.altkeypopup_namespace).bindButton(o,function(){clearTimeout(n);var o=e(this),a=o.attr("data-value")||"",s=i.altkeypopup_options.holdTime;a in t.altKeys&&(s?n=setTimeout(function(){i.altKeyPopup_popup(a,o)},s):i.altKeyPopup_popup(a,o))}).bindButton(a,function(){clearTimeout(n)}),i.altkeypopup_blockingFlag=!1,i.$preview.unbind("keypress keydown keyup ".split(" ").join(i.altkeypopup_namespace+" ").trim()).bind("keypress keydown keyup ".split(" ").join(i.altkeypopup_namespace+" "),function(o){if("keyup"===o.type)return clearTimeout(n),i.altkeypopup_blockingFlag=!1,o.which!==t.navigationKeys.escape;var a,s=t.builtLayouts[i.layout],r=t.keyCodes,p=e(o.target),u=o.charCode||o.which,l=String.fromCharCode(u);return"keydown"===o.type&&l in t.altKeys?(a=i.altkeypopup_blockingFlag,i.altkeypopup_blockingFlag=!0,!a):i.altkeypopup_blockingFlag?(u>=r.a&&u<=r.z&&!o.shiftKey&&(l=l.toLowerCase()),s.hasMappedKeys&&s.mappedKeys.hasOwnProperty(l)&&(l=s.mappedKeys[l]),l in t.altKeys&&(n=setTimeout(function(){i.altkeypopup_blockingFlag&&i.altKeyPopup_popup(l,p)},i.altkeypopup_options.holdTime)),!0):void 0})},i.altKeyPopup_close=function(){i.altkeypopup_blockingFlag=!1,i.altKeyPopup_$overlay=null,setTimeout(function(){if(i.$keyboard.length){i.$keyboard.removeClass(t.css.altKeyPopupOpen);var e=i.$keyboard.find("."+t.css.altKeyOverlay);e&&e.remove()}},1),e(document).unbind(i.altkeypopup_namespace),i.$preview.focus(),i.options.ignoreEsc=i.altKeyPopup_savedIgnoreEsc,i.$el.trigger(i.altkeypopup_options.popupHidden,[i])},i.altKeyPopup_popup=function(n,o){if(!i.$keyboard.find("."+t.css.altKeyOverlay).length){var a,s,r,p,u,l,c,d,y,b=t.css,f={$kb:i.$keyboard,kbWidth:i.$keyboard.outerWidth(),kbHeight:i.$keyboard.outerHeight(),$key:o};i.altKeyPopup_$overlay=e('').css({width:f.kbWidth,height:f.kbHeight}).appendTo(i.$keyboard).bind("click touchstart",function(){i.altKeyPopup_close()}),y="inactive hidden ".split(" ").join(i.altkeypopup_namespace+" "),i.$keyboard.addClass(t.css.altKeyPopupOpen),i.$el.unbind(y).bind(y,function(){i.altKeyPopup_close()}),"bksp"!==n&&t.keyaction.bksp(i),s=e(''),a=t.altKeys[n].split(/\s+/),i.buildRow(s,0,a,[]),r=s.appendTo(i.altKeyPopup_$overlay).children().bind("mousedown touchstart",function(){i.altKeyPopup_close()}).bind("mouseover mouseleave",function(t){r.removeClass(i.options.css.buttonHover),"mouseleave"!==t.type&&e(this).addClass(i.options.css.buttonHover)}),i.altKeyPopup_navigate(!0),i.altKeyPopup_savedIgnoreEsc=i.options.ignoreEsc,i.options.ignoreEsc=!0,e(document).unbind(i.altkeypopup_namespace).bind("keydown"+i.altkeypopup_namespace,function(){return!1}).bind("keyup"+i.altkeypopup_namespace,function(e){return e.which===t.navigationKeys.escape?(e.which=0,i.altKeyPopup_close()):i.altKeyPopup_navigate(e),!1}),f.$popup=s,c=s.outerWidth(),(p=o.position().left-c/2)+c>f.kbWidth&&(p=f.kbWidth-c)<0&&s.css({width:f.kbWidth,height:"auto"}),u=o.position().top-o.outerHeight()-5,d=s.outerHeight(),l=i.$keyboard.find("."+b.keySet).position().top,u+d>f.kbHeight&&(u=f.kbHeight-d)p&&(n=p),i.altKeyPopup_currentIndex=n,r.removeClass(s).eq(n).addClass(s)},i.options.alwaysOpen&&i.isVisible()&&i.altkeypopup_setup(),i.$el.unbind(t.events.kbBeforeVisible+i.altkeypopup_namespace).bind(t.events.kbBeforeVisible+i.altkeypopup_namespace,function(){i.altkeypopup_setup()})}})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.fn.addAutocomplete=function(t){var n={position:{of:null,my:"right top",at:"left top",collision:"flip"},events:"autocomplete",data:""};return this.each(function(){var o,i,a=e(this).data("keyboard");a&&(i=a.namespace+"Autocomplete",a.autocomplete_namespace=i,a.extensionNamespace.push(i),a.autocomplete_init=function(){var s=(o=a.autocomplete_options=e.extend(!0,{},n,t)).events||o.data||"autocomplete";a.options.alwaysOpen&&a.isVisible()&&a.autocomplete_setup(),a.$el.unbind(i).bind(e.keyboard.events.kbVisible+i,function(){a.autocomplete_setup()}).bind(e.keyboard.events.kbHidden+i,function(){a.$el[o.data||"autocomplete"]("close")}).bind(e.keyboard.events.kbChange+i,function(){a.hasAutocomplete&&a.isVisible()&&a.$el.val(a.$preview.val())}).bind(s+"open"+i,function(){if(a.hasAutocomplete){var t=e.extend({},o.position);t.of=t.of||a.$keyboard,a.$autocomplete.menu.element.position(t)}}).bind(s+"select"+i,function(e,t){a.autocomplete_getVal(t.item)})},a.autocomplete_getVal=function(e){var t;switch(typeof e){case"string":t=e||"";break;case"object":t=e.label||e.value||"";break;default:t=a.preview&&a.preview.value||a.el.value}t=t.toString(),a.hasAutocomplete&&""!==t&&((a.$preview||a.$el).val(t).focus(),a.last.start=t.length,a.last.end=t.length,a.last.val=t)},a.autocomplete_update=function(e){clearTimeout(a.$autocomplete.searching),a.$autocomplete.searching=setTimeout(function(){a.$autocomplete.term!==a.$autocomplete.element.val()&&(a.$autocomplete.selectedItem=null,a.$autocomplete.search(null,e))},a.$autocomplete.options.delay)},a.autocomplete_navKeys={8:"backSpace",9:"tab",13:"enter",20:"capsLock",27:"escape",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete"},a.autocomplete_setup=function(){var e;if(a.$autocomplete=a.$el.data(a.autocomplete_options.data)||a.$el.data("uiAutocomplete")||a.$el.data("ui-autocomplete")||a.$el.data("autocomplete"),a.hasAutocomplete=void 0!==a.$autocomplete&&!a.$autocomplete.options.disabled,a.hasAutocomplete){a.$preview.bind("keydown"+i+" keypress"+i,function(t){a.$preview&&t.namespace!==a.$autocomplete.eventNamespace&&(t.namespace=a.$autocomplete.eventNamespace.slice(1),(e=a.autocomplete_navKeys[t.which])?a.el!==a.preview&&(a.$el.triggerHandler(t),"enter"===e&&setTimeout(function(){a.$autocomplete&&(a.$preview.val(a.$autocomplete.selectedItem.value),a.$preview.focus())},100)):a.autocomplete_update(t))});var t="mouseup mousedown mouseleave touchstart touchend touchcancel ".split(" ").join(i+" ");a.bindButton(t,function(e){a.autocomplete_update(e)})}a.escCloseCallback.autocomplete||(a.escCloseCallback.autocomplete=a.checkAutocompleteMenu)},a.checkAutocompleteMenu=function(e){return a.hasAutocomplete&&e.closest("ul").hasClass("ui-autocomplete")},a.autocomplete_destroy=function(){clearTimeout(a.$autocomplete.searching),a.hasAutocomplete=!1,a.$el.unbind(i),a.$preview&&(a.$preview.unbind(i),a.unbindButton(i)),delete a.$autocomplete},a.autocomplete_init())})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard;t.firefox=void 0!==window.mozInnerScreenX,e.extend(t.css,{caret:"ui-keyboard-caret",caretMirror:"ui-keyboard-mirror-div"}),e.fn.addCaret=function(n){var o={caretClass:"",charAttr:"data-character",charIndex:1,offsetX:0,offsetY:0,adjustHt:0};return this.each(function(){var i,a,s=t.events,r=e(this).data("keyboard");r&&(i=r.caret_options=e.extend({},o,n),a=r.caret_namespace=r.namespace+"caret",r.extensionNamespace.push(a),r.textareaCaretProperties=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r.caret_setup=function(){var n=t.css,o="keyup keypress mouseup mouseleave ".split(" ").join(a+" "),p="position:absolute;visibility:hidden;top:-9999em;left:-9999em;white-space:pre-wrap;z-index:-10;"+("INPUT"===r.preview.nodeName?"":"word-wrap:break-word;");r.$keyboard.find("."+n.caretMirror).remove(),r.caret_$div=e('').appendTo(r.$keyboard),r.$caret&&r.$caret.remove(),r.$caret=e('
').insertAfter(r.$preview),r.$el.unbind(s.kbChange+a).bind(s.kbChange+a,function(){r.findCaretPos()}),r.$preview.unbind(o).bind(o,function(){r.findCaretPos()})},r.findCaretPos=function(){if(r.caret_$div){var n,o,a,s,p,u,l,c,d=r.preview,y=parseFloat(r.$preview.css("fontSize")),b="INPUT"===d.nodeName,f=r.caret_$div[0];n=f.style,o=window.getComputedStyle?getComputedStyle(d,null):d.currentStyle,s=t.caret(r.$preview),p=Math["ltr"===o.direction?"max":"min"](s.start,s.end),r.textareaCaretProperties.forEach(function(e){n[e]=o[e]}),t.firefox&&(n.width=parseInt(o.width,10)-2+"px",d.scrollHeight>parseInt(o.height,10)&&(n.overflowY="scroll")),n.width=parseInt(b?d.scrollWidth:o.width,10)+(b?2*y:0)+"px",f.textContent=d.value.substring(0,p),"INPUT"===d.nodeName&&(f.textContent=f.textContent.replace(/\x20/g," ")),(l=document.createElement("span")).textContent=d.value.substring(p)||"",f.appendChild(l),c=e(l).position(),s="center"===n.textAlign?y:0,r.caretPos={top:c.top+parseInt(o.borderTopWidth,10)+i.offsetY,left:c.left+parseInt(o.borderLeftWidth,10)+i.offsetX-s},a=parseInt(r.$caret.css("margin-top"),10),n=Math.round(y+2*a)+i.adjustHt,c=r.$preview.position(),r.$caret.css({top:c.top-d.scrollTop+r.caretPos.top-a,left:c.left-d.scrollLeft+r.caretPos.left,height:n}),u=d.value.substring(p,p+i.charIndex).replace(/\s/," ")||" ",r.$caret.attr(i.charAttr,u)}},r.$el.unbind(a).bind(s.kbBeforeVisible+a,function(){r.caret_setup()}).bind(s.kbVisible+a,function(){r.findCaretPos()}).bind(s.kbHidden+a,function(){var e="keyup keypress mouseup mouseleave ".split(" ").join(a+" ");r.$preview.unbind(e),r.$caret.remove(),r.$caret=null,r.caret_$div=null}),r.options.alwaysOpen&&r.isVisible()&&(r.caret_setup(),r.findCaretPos()))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard;t.css.extender="ui-keyboard-extender",t.language.en.display.extender=" :toggle_numpad",t.layouts.numpad={normal:["{clear} / * -","7 8 9 +","4 5 6 %","1 2 3 =","0 {dec} {left} {right}"]},t.keyaction.extender=function(e){return e.extender_toggle(),!1},e.fn.addExtender=function(n){var o={layout:"numpad",showing:!1,reposition:!0};return this.each(function(){var i=e(this).data("keyboard");if(i){if(i.extender_options=e.extend({},o,i.extender_options,n),i.extender_namespace)return i.extender_layoutSwitcher();i.extender_namespace=i.namespace+"extender",i.extensionNamespace.push(i.extender_namespace),i.extender_layoutSwitcher=function(){i.extender_lastKeyset=i.last.keyset,i.extender_bindEvents(!1),i.$el.one(t.events.kbBeforeVisible,function(){i.shiftActive=i.extender_lastKeyset[0],i.altActive=i.extender_lastKeyset[1],i.metaActive=i.extender_lastKeyset[2],i.showKeySet(),i.extender_setup(),i.extender_bindEvents()}),i.redraw()},i.extender_bindEvents=function(e){var n=t.events.kbBeforeVisible+i.extender_namespace;i.$el.unbind(n),!1!==e&&i.$el.bind(n,function(){i.extender_setup()})},i.extender_setup=function(){var e,n=i.extender_options.layout;void 0===t.builtLayouts[n]&&i.buildKeyboard(n),(e=t.builtLayouts[n].$keyboard.find("."+t.css.keySet+"-normal").clone()).removeClass().removeAttr("name").addClass(t.css.extender).children("button").removeAttr("data-pos"),e[0].style.display=i.extender_options.showing?"inline-block":"none",i.$keyboard.find("div."+t.css.extender).remove(),i.$keyboard.append(e),i.extender_toggle(i.extender_options.showing),i.bindKeys()},i.extender_toggle=function(n){i.extender_options.showing=void 0===n?!i.extender_options.showing:n,i.$keyboard.find("button."+t.css.extender).toggleClass(i.options.css.buttonActive,i.extender_options.showing).end().find("div."+t.css.extender)[0].style.display=i.extender_options.showing?"inline-block":"none",i.extender_options.reposition&&e(window).trigger("resize")},i.options.alwaysOpen&&i.isVisible()&&i.extender_setup(),i.extender_bindEvents()}})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){e.fn.addMobile=function(t){var n,o={container:{theme:"b",cssClass:"ui-body"},input:{theme:"b",cssClass:""},buttonMarkup:{theme:"b",cssClass:"ui-btn",shadow:"true",corners:"true"},buttonHover:{theme:"b",cssClass:"ui-btn-hover"},buttonAction:{theme:"b",cssClass:"ui-btn-active"},buttonActive:{theme:"b",cssClass:"ui-btn-active"},allThemes:"a b c"};return this.each(function(){var i=e(this).data("keyboard");i&&void 0!==e.fn.textinput&&(i.mobile_options=n=e.extend(!0,{},o,t),i.mobile_themes=e.trim((" "+n.allThemes).split(" ").join(" "+n.buttonMarkup.cssClass+"-")+(" "+n.allThemes).split(" ").join(" "+n.buttonAction.cssClass+"-")+(" "+n.allThemes).split(" ").join(" "+n.buttonActive.cssClass+"-")),void 0===i.options.mobile_savedActiveClass&&(i.options.mobile_savedActiveClass=""+i.options.css.buttonActive),i.mobile_init=function(){var t=i.namespace+"Mobile";e("."+e.keyboard.css.input).textinput(),i.options.alwaysOpen&&i.isVisible&&i.mobile_setup(),i.extensionNamespace.push(t),i.$el.unbind(t).bind(e.keyboard.events.kbBeforeVisible+t,function(){i&&i.el.active&&i.$keyboard.length&&i.$keyboard.css("visibility","hidden")}).bind(e.keyboard.events.kbVisible+t,function(){i&&i.el.active&&i.$keyboard.length&&(i.mobile_setup(),i.$keyboard.css("visibility","visible"),i.$preview.focus())})},i.mobile_setup=function(){var t,o=e.keyboard.css,a=i.options,s=i.mobile_themes;i.mobile_$actionKeys=i.$keyboard.find("."+i.options.css.buttonAction),a.css.buttonActive=a.mobile_savedActiveClass+" "+i.modOptions(n.buttonActive,n.buttonMarkup),i.$keyboard.addClass(i.modOptions(n.container,n.container)).find("."+o.preview).removeClass("ui-widget ui-widget-content").addClass(i.modOptions(n.input,n.input)).end().find("button").removeClass(e.trim("ui-corner-all ui-state-default "+s)).addClass(i.modOptions(n.buttonMarkup,n.buttonMarkup)).not(i.mobile_$actionKeys).hover(function(){e(this).removeClass(s).addClass(i.modOptions(n.buttonHover,n.buttonMarkup))},function(){e(this).removeClass(s+" "+n.buttonHover.cssClass).addClass(i.modOptions(n.buttonMarkup,n.buttonMarkup))}),i.mobile_$actionKeys.removeClass(s).addClass(i.modOptions(n.buttonAction,n.buttonMarkup)),i.msie&&i.$preview[0]!==i.el&&(i.$preview.hide(),i.$keyboard.css("width",""),i.width=i.$keyboard.outerWidth(),i.$keyboard.width(i.width+parseInt(i.$preview.css("fontSize"),10)),i.$preview.width(i.width),i.$preview.show()),e.ui&&e.ui.position&&((t=a.position).of=t.of||i.$el.data("keyboardPosition")||i.$el,t.collision=t.collision||"flipfit flipfit",i.$keyboard.position(t))},i.modOptions=function(e,t){return" "+(e.cssClass||"")+" "+(t&&t.cssClass?t.cssClass+"-"+(e.theme||""):"")+("true"==e.shadow?" ui-shadow":"")+("true"==e.corners?" ui-corner-all":"")},i.mobile_init())})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.keyboard.navigationKeys={toggle:112,enter:13,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,caretrt:45,caretlt:46,caretright:function(t){e.keyboard.keyaction.right(t)},caretleft:function(t){e.keyboard.keyaction.left(t)}},e.fn.addNavigation=function(t){return this.each(function(){var n,o,i=e(this).data("keyboard"),a=i.options,s={position:[0,0],toggleMode:!1,focusClass:"hasFocus",toggleKey:null,rowLooping:!1},r=e.keyboard.events,p=e.keyboard.css;i&&(i.navigation_options=n=e.extend({},s,t),i.navigation_keys=o=e.extend({},e.keyboard.navigationKeys),i.navigation_namespace=i.namespace+"Nav",i.extensionNamespace.push(i.navigation_namespace),i.saveNav=[i.options.tabNavigation,i.options.enterNavigation],i.allNavKeys=e.map(o,function(e){return e}),i.navigation_init=function(){i.$keyboard.toggleClass(n.focusClass,n.toggleMode).find("."+p.keySet+":visible").find("."+p.keyButton+'[data-pos="'+n.position[0]+","+n.position[1]+'"]').addClass(a.css.buttonHover),i.$preview.unbind(i.navigation_namespace).bind("keydown"+i.navigation_namespace,function(e){return i.checkKeys(e.which)})},i.checkKeys=function(t,o){if(void 0!==t){var a=i.navigation_keys;return(t===(n.toggleKey||a.toggle)||o)&&(n.toggleMode=!o&&!n.toggleMode,i.options.tabNavigation=!n.toggleMode&&i.saveNav[0],i.options.enterNavigation=!n.toggleMode&&i.saveNav[1]),i.$keyboard.toggleClass(n.focusClass,n.toggleMode),n.toggleMode&&t===a.enter?(i.$keyboard.find("."+p.keySet+":visible").find("."+p.keyButton+'[data-pos="'+n.position[0]+","+n.position[1]+'"]').trigger(r.kbRepeater),!1):n.toggleMode&&e.inArray(t,i.allNavKeys)>=0?(i.navigateKeys(t),!1):void 0}},i.getMaxIndex=function(e,t){return e.find("."+p.keyButton+'[data-pos^="'+t+',"]').length-1},i.leftNavigateKey=function(e,t){var n=i.navigation_options.rowLooping,o=e-1;return o>=0?o:n?t:0},i.rightNavigateKey=function(e,t){var n=i.navigation_options.rowLooping,o=e+1;return o<=t?o:n?0:t},i.navigateKeys=function(t,o,s){if(i.isVisible()){s="number"==typeof s?s:n.position[1],o="number"==typeof o?o:n.position[0];var r,u=i.$keyboard.find("."+p.keySet+":visible"),l=u.find("."+p.endRow).length-1,c=i.getMaxIndex(u,o),d=i.last,y=i.$preview.val().length,b=i.navigation_keys;switch(t){case b.pageup:o=0;break;case b.pagedown:o=l;break;case b.end:s=c;break;case b.home:s=0;break;case b.left:s=i.leftNavigateKey(s,c);break;case b.up:o+=o>0?-1:0,r=i.getMaxIndex(u,o),s=s===c?r:s;break;case b.right:s=i.rightNavigateKey(s,c);break;case b.down:o+=o+1>l?0:1,r=i.getMaxIndex(u,o),s=s===c?r:s;break;case b.caretrt:d.start++;break;case b.caretlt:d.start--}t!==b.caretrt&&t!==b.caretlt||(d.start=d.start<0?0:d.start>y?y:d.start,i.last.start=i.last.end=d.end=d.start,e.keyboard.caret(i.$preview,i.last)),s>(c=i.getMaxIndex(u,o))&&(s=c),u.find("."+a.css.buttonHover).removeClass(a.css.buttonHover),u.find("."+p.keyButton+'[data-pos="'+o+","+s+'"]').addClass(a.css.buttonHover),n.position=[o,s]}},i.options.alwaysOpen&&i.isVisible()&&(i.$keyboard.find("."+a.css.buttonHover).removeClass(a.css.buttonHover),i.navigation_init()),i.$el.unbind(i.navigation_namespace).bind(r.kbVisible,function(){i.$keyboard.find("."+a.css.buttonHover).removeClass(a.css.buttonHover),i.navigation_init()}).bind(r.kbInactive+" "+r.kbHidden,function(e){i.checkKeys(e.which,!0)}).bind(r.kbKeysetChange,function(){i.navigateKeys(null)}).bind("navigate navigateTo",function(t,n,o){var a;(n=isNaN(n)?n.toLowerCase():n)in i.navigation_keys?(a=i.navigation_keys[n],isNaN(a)&&a in e.keyboard.keyaction?e.keyboard.keyaction[a](i,this,t):e.isFunction(a)?a(i):i.checkKeys(a)):"string"==typeof n&&n in e.keyboard.keyaction?e.keyboard.keyaction[n](i,this,t):i.navigateKeys(null,n,o)}))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.previewKeyset=function(t){return this.each(function(){var n=e(this).data("keyboard"),o=n.namespace+"Preview",i={sets:["normal","shift","alt","alt-shift"]};n&&(n.previewKeyset_options=e.extend({},i,t),n.extensionNamespace.push(o),n.previewKeyset=function(){var t=e.keyboard.css,o=n.previewKeyset_options.sets,i=n.$keyboard.find("."+t.keySet).filter('[name="'+o.join('"],[name="')+'"]');i.length>1&&i.eq(0).find("."+t.keyButton).not("."+t.keyAction).each(function(){var n,a,s={},r=o.length,p=i.find('button[data-pos="'+e(this).attr("data-pos")+'"]');for(n=0;n
=0&&(s["data-"+a]=p.eq(n).find("."+t.keyText).text());p.attr(s)})},n.options.alwaysOpen&&n.isVisible()?n.previewKeyset():n.$el.unbind(e.keyboard.events.kbBeforeVisible+o).bind(e.keyboard.events.kbBeforeVisible+o,function(){n.previewKeyset()}))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.addScramble=function(t){var n={targetKeys:/[a-z\d]/i,byRow:!0,byKeySet:!1,randomizeOnce:!0,randomizeInput:!1,init:null,sameForAll:!1};return this.each(function(){var o,i=e(this).data("keyboard"),a=i.namespace+"Scramble",s=i.options;i&&!i.scramble_options&&(o=i.scramble_options=e.extend({},n,t),i.extensionNamespace.push(a),o.orig_create=s.create,i.scramble_setup=function(t){var n,a,s,r,p,u,l,c,d,y,b;if(n=t.find("."+e.keyboard.css.keySet),t.length){for(o.byKeySet&&(n=n.eq(0)),a=0;a0;)o=Math.floor(Math.random()*i),!1===t[i-1]&&i--,!1!==t[i-1]&&!1!==t[o]&&(n=e[--i],e[i]=e[o],e[o]=n);return e},i.realign=function(t){var n,o,i,a=t.find("."+e.keyboard.css.keySet),s=a.eq(0);return a=a.filter(":gt(0)"),s.children().each(function(t,s){o="BR"===s.tagName,i=e(s).attr("data-pos"),a.each(function(t,a){n=o?"br:first":'button[data-pos="'+i+'"]',e(a).find(n).appendTo(a)})}),t},i.setScrambleLayout=function(){if(!/^scrambled/.test(s.layout)){i.orig_layout=s.layout;var e=e||"scrambled"+Math.round(1e4*Math.random());s.layout=o.sameForAll?e:"scrambled"+Math.round(1e4*Math.random())}},s.create=function(){var t=s.layout;e.keyboard.builtLayouts[t]={mappedKeys:{},acceptedKeys:[],$keyboard:null},i.layout=s.layout=i.orig_layout,i.buildKeyboard(i.layout,!0),i.layout=s.layout=t,e.keyboard.builtLayouts[t]=e.extend(!0,{},e.keyboard.builtLayouts[i.orig_layout]),o.randomizeOnce&&(e.keyboard.builtLayouts[t].$keyboard=i.scramble_setup(e.keyboard.builtLayouts[i.orig_layout].$keyboard.clone())),i.$keyboard=e.keyboard.builtLayouts[t].$keyboard,o.randomizeInput?i.$el.unbind(e.keyboard.events.kbChange+a).bind(e.keyboard.events.kbChange+a,function(t,n){o.targetKeys.test(n.last.key)&&(n.$keyboard.find("."+s.css.buttonHover).removeClass(s.css.buttonHover),n.$keyboard=n.scramble_setup(n.$keyboard),e(document.elementFromPoint(t.clientX,t.clientY)).trigger("mouseenter"))}):o.randomizeOnce||i.$el.unbind(e.keyboard.events.kbBeforeVisible+a).bind(e.keyboard.events.kbBeforeVisible+a,function(e,t){t.$keyboard=t.scramble_setup(t.$keyboard)}),e.isFunction(o.orig_create)&&o.orig_create(i)},i.setScrambleLayout(),s.alwaysOpen&&i.$keyboard.length?setTimeout(function(){var t=e.keyboard.builtLayouts;i.$keyboard=i.scramble_setup(i.$keyboard),i.setScrambleLayout(),void 0===t[s.layout]&&(t[s.layout]={mappedKeys:e.extend({},t[i.layout].mappedKeys),acceptedKeys:e.extend([],t[i.layout].acceptedKeys),$keyboard:i.$keyboard.clone()}),e.isFunction(o.init)&&o.init(i)},0):e.isFunction(o.init)&&o.init(i))})}}),function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){e.fn.addTyping=function(t){var n={showTyping:!0,lockTypeIn:!1,delay:250,hoverDelay:250},o=e.keyboard;return this.each(function(){var i,a=e(this).data("keyboard");a&&(i=a.typing_options=e.extend({},n,t),a.typing_keymap={" ":"space",'"':"34","'":"39"," ":"space","\b":"bksp","{b}":"bksp","{d}":"del","{l}":"left","{r}":"right","\n":"enter","\r":"enter","{e}":"enter","\t":"tab","{t}":"tab"},a.typing_xref={8:"bksp",9:"tab",13:"enter",32:"space",37:"left",39:"right",46:"del"},a.typing_event=!1,a.typing_namespace=a.namespace+"typing",a.extensionNamespace.push(a.typing_namespace),i.savedLockInput=a.options.lockInput,a.typing_setup_reset=function(){var e=o.events,t=a.typing_namespace,n=[e.kbHidden,e.kbInactive,""].join(t+" ");a.$el.unbind(t).bind(n,function(){a.typing_reset()}),a.unbindButton(t).bindButton("mousedown"+t,function(){a.typing_reset()})},a.typing_setup=function(){var e=a.typing_namespace;a.typing_setup_reset(),a.$el.bind(o.events.kbBeforeVisible+e,function(){a.typing_setup()}),a.$preview.unbind(e).bind("keyup"+e,function(e){if(i.init&&i.lockTypeIn||!i.showTyping)return!1;if(!(e.which>=37&&e.which<=40))return 16===e.which&&(a.shiftActive=!1),18===e.which&&(a.altActive=!1),16===e.which||18===e.which?(a.showSet(),void setTimeout(function(){a.$preview.focus()},200)):void 0}).bind("keydown"+e,function(e){if(i.init&&i.lockTypeIn||!i.showTyping)return!1;e.temp=!1,16===e.which&&(e.temp=!a.shiftActive,a.shiftActive=!0),18===e.which&&(e.temp=!a.altActive,a.altActive=!0),e.temp&&(a.showSet(),a.$preview.focus()),a.typing_event=!0,a.typing_xref[e.which]&&a.typing_findKey("",e)}).bind("keypress"+e,function(e){if(i.init&&i.lockTypeIn)return!1;a.typing_event&&!a.options.lockInput&&(a.typing_reset(),a.typing_event=!0,a.typing_findKey("",e))})},a.typing_reset=function(){a.typing_event=i.init=!1,i.text="",i.len=i.current=0,a.options.lockInput=i.savedLockInput},a.typeIn=function(e,t,n,o){if(!a.isVisible())return clearTimeout(a.typing_timer),void a.typing_reset();if(a.typing_event){if(void 0===e)return a.typing_event=!1,void(a.options.lockInput=i.savedLockInput)}else!0!==i.init&&(i.init=!0,a.options.lockInput=i.lockTypeIn,i.text=e||i.text||"",i.len=i.text.length,i.delay=t||i.delay,i.current=0,n&&(i.callback=n)),"{"===(e=i.text.substring(i.current,++i.current))&&"}"===i.text.substring(i.current+1,i.current+2)&&(e+=i.text.substring(i.current,i.current+=2)),a.typing_findKey(e,o)},a.typing_findKey=function(t,n){var s,r,p,u,l,c,d,y,b=o.css,f=o.builtLayouts[a.layout].mappedKeys;if(a.isOpen&&a.$keyboard.length)if(c=a.$keyboard.find("."+b.keySet),u=t in a.typing_keymap?a.typing_keymap[t]:t,s="."+b.keyButton+'[data-action="'+u+'"]',a.typing_event&&n&&("keypress"!==n.type&&a.typing_xref.hasOwnProperty(n.keyCode||n.which)?s="."+b.keyPrefix+a.processName(a.typing_xref[n.keyCode||n.which]):(r=String.fromCharCode(n.charCode||n.which),s=f.hasOwnProperty(r)?"."+b.keyButton+'[data-value="'+f[r].replace(/"/g,'\\"')+'"]':"."+b.keyPrefix+a.processName(r))),l=c.filter(":visible").find(s),l.length?a.typing_simulateKey(l,t,n):(a.typing_event?l=c.find(s):(p=t in a.typing_keymap?a.typing_keymap[t]:a.processName(t),l=c.find("."+b.keyPrefix+p)),(y=l.closest("."+b.keySet)).attr("name")?(i.showTyping&&(d=y.attr("name"),a.shiftActive=/shift/.test(d),a.altActive=/alt/.test(d),a.metaActive=a.last.keyset[2]=!!/\bmeta/.test(d)&&d.match(/meta[\w-]+/)[0],a.showSet(a.metaActive)),a.typing_simulateKey(l,t,n)):a.typing_event||(t in a.typing_keymap&&a.typing_keymap[t]in o.keyaction?o.keyaction[a.typing_keymap[t]](a,l,n):a.insertText(t),a.checkCombos(),a.$el.trigger(o.events.kbChange,[a,a.el]))),i.current<=i.len&&0!==i.len){if(!a.isVisible())return;a.typing_timer=setTimeout(function(){a.typeIn()},i.delay)}else{if(0!==i.len)return a.typing_reset(),void(e.isFunction(i.callback)&&(a.typing_timer=setTimeout(function(){e.isFunction(i.callback)&&i.callback(a)},i.delay)));a.typing_reset()}},a.typing_simulateKey=function(t,n,s){var r=t.length;a.isVisible()&&(i.showTyping&&r&&(t.filter(":visible").trigger("mouseenter"+a.namespace),i.showTyping&&r&&setTimeout(function(){t.trigger("mouseleave"+a.namespace)},Math.min(i.hoverDelay,i.delay))),a.typing_event||setTimeout(function(){n in a.typing_keymap&&a.typing_keymap[n]in o.keyaction?((s=s||e.Event("keypress")).target=t,o.keyaction[a.typing_keymap[n]](a,t,s)):a.insertText(n),a.checkCombos(),a.$el.trigger(o.events.kbChange,[a,a.el])},i.delay/3))},i.showTyping&&a.options.alwaysOpen&&a.isVisible()?a.typing_setup():a.$el.unbind(o.events.kbBeforeVisible+a.typing_namespace).bind(o.events.kbBeforeVisible+a.typing_namespace,function(){i.showTyping?a.typing_setup():a.typing_setup_reset()}))})}}),/*! Mousewheel version: 3.1.12 * (c) 2014 Brandon Aaron * MIT License */
+function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e:e(jQuery)}(function(e){function t(t){var s=t||window.event,r=p.call(arguments,1),u=0,c=0,d=0,y=0,b=0,f=0;if(t=e.event.fix(s),t.type="mousewheel","detail"in s&&(d=-1*s.detail),"wheelDelta"in s&&(d=s.wheelDelta),"wheelDeltaY"in s&&(d=s.wheelDeltaY),"wheelDeltaX"in s&&(c=-1*s.wheelDeltaX),"axis"in s&&s.axis===s.HORIZONTAL_AXIS&&(c=-1*d,d=0),u=0===d?c:d,"deltaY"in s&&(u=d=-1*s.deltaY),"deltaX"in s&&(c=s.deltaX,0===d&&(u=-1*c)),0!==d||0!==c){if(1===s.deltaMode){var h=e.data(this,"mousewheel-line-height");u*=h,d*=h,c*=h}else if(2===s.deltaMode){var m=e.data(this,"mousewheel-page-height");u*=m,d*=m,c*=m}if(y=Math.max(Math.abs(d),Math.abs(c)),(!a||y=1?"floor":"ceil"](u/a),c=Math[c>=1?"floor":"ceil"](c/a),d=Math[d>=1?"floor":"ceil"](d/a),l.settings.normalizeOffset&&this.getBoundingClientRect){var v=this.getBoundingClientRect();b=t.clientX-v.left,f=t.clientY-v.top}return t.deltaX=c,t.deltaY=d,t.deltaFactor=a,t.offsetX=b,t.offsetY=f,t.deltaMode=0,r.unshift(t,u,c,d),i&&clearTimeout(i),i=setTimeout(n,200),(e.event.dispatch||e.event.handle).apply(this,r)}}function n(){a=null}function o(e,t){return l.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}var i,a,s=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],r="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],p=Array.prototype.slice;if(e.event.fixHooks)for(var u=s.length;u;)e.event.fixHooks[s[--u]]=e.event.mouseHooks;var l=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var n=r.length;n;)this.addEventListener(r[--n],t,!1);else this.onmousewheel=t;e.data(this,"mousewheel-line-height",l.getLineHeight(this)),e.data(this,"mousewheel-page-height",l.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var n=r.length;n;)this.removeEventListener(r[--n],t,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var n=e(t),o=n["offsetParent"in e.fn?"offsetParent":"parent"]();return o.length||(o=e("body")),parseInt(o.css("fontSize"),10)||parseInt(n.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-altkeyspopup.min.js b/dist/js/jquery.keyboard.extension-altkeyspopup.min.js
index 6be69326..5df65a84 100644
--- a/dist/js/jquery.keyboard.extension-altkeyspopup.min.js
+++ b/dist/js/jquery.keyboard.extension-altkeyspopup.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard Alt Key Popup v1.1.4 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var p=e.keyboard;e.extend(p.css,{altKeyPopup:"ui-keyboard-popup",altKeyOverlay:"ui-keyboard-overlay"}),p.altKeys=e.extend({a:"å æ ā ă ą à á â ã ä",A:"Å Æ Ā Ă Ą À Á  à Ä",c:"ç ć ĉ ċ č",C:"Ç Ć Ĉ Ċ Č",d:"ď ð ď",D:"Ď Ð Ď",e:"ė ę ĕ ě ə è é ê ë ē",E:"Ė Ę Ĕ Ě Ǝ È É Ê Ë Ē",g:"ģ ğ ĝ ġ",G:"Ģ Ğ Ĝ Ġ",h:"ĥ ħ",H:"Ĥ Ħ",i:"ı į ī ï î í ì ĩ ĭ",I:"İ Į Ī Ï Î Í Ì Ĩ Ĭ",j:"ĵ",J:"Ĵ",k:"ķ",K:"Ķ",l:"Ł Ľ Ļ Ĺ Ŀ",L:"ł ľ ļ ĺ ŀ",n:"ʼn ň ņ ń ñ",N:"ʼn Ň Ņ Ń Ñ",o:"œ ő ø ö õ ô ó ò ō ŏ",O:"Œ Ő Ø Ö Õ Ô Ó Ò Ō Ŏ",r:"ŕ ř ŗ",R:"Ŕ Ř Ŗ",s:"ś š ş ß § ŝ",S:"Ś Š Ş ẞ § Ŝ",t:"þ ť ț ţ ŧ",T:"Þ Ť Ț Ţ Ŧ",u:"ų ű ů ū ü û ú ù ũ ŭ",U:"Ų Ű Ů Ū Ü Û Ú Ù Ũ Ŭ",w:"ŵ",W:"Ŵ",y:"ý",Y:"Ý",z:"ź ż ž",Z:"Ź Ż Ž","!":"¡",$:"€ £ ¤ ¥ ¢ ₡ ₱ ₩ ₹ ₪ ₭ ₮ ₦ ₤","?":"¿","'":"〈 「 『 “",'"':"〉 」 』 ”","(":"《 【 〔",")":"》 】 〕"},p.altKeys),p.navigationKeys=e.extend({enter:13,escape:27,end:35,home:36,left:37,right:39},p.navigationKeys),e.fn.addAltKeyPopup=function(o){var t={holdTime:500,popupVisible:"popup-visible",popupHidden:"popup-hidden",popupPosition:null};return this.each(function(){var a=e(this).data("keyboard");if(a){if(a.altkeypopup_options=e.extend({},t,a.altkeypopup_options,o),a.altkeypopup_namespace)return a.altkeypopup_setup();a.altkeypopup_namespace=a.namespace+"AltKeyPopup",a.extensionNamespace.push(a.altkeypopup_namespace),a.altkeypopup_setup=function(){var o,t="mousedown touchstart ".split(" ").join(a.altkeypopup_namespace+" "),i="mouseup touchend touchcancel ".split(" ").join(a.altkeypopup_namespace+" ");a.options.repeatRate=0,a.$allKeys.unbind(a.altkeypopup_namespace).bind(t,function(){clearTimeout(o);var t=e(this),i=t.attr("data-value")||"",n=a.altkeypopup_options.holdTime;i in p.altKeys&&(n?o=setTimeout(function(){a.altKeyPopup_popup(i,t)},n):a.altKeyPopup_popup(i,t))}).bind(i,function(){clearTimeout(o)}),a.altkeypopup_blockingFlag=!1,a.$preview.unbind("keypress keydown keyup ".split(" ").join(a.altkeypopup_namespace+" ").trim()).bind("keypress keydown keyup ".split(" ").join(a.altkeypopup_namespace+" "),function(t){if("keyup"===t.type)return clearTimeout(o),a.altkeypopup_blockingFlag=!1,t.which!==p.navigationKeys.escape;var i,n=p.builtLayouts[a.layout],u=p.keyCodes,s=e(t.target),l=t.charCode||t.which,y=String.fromCharCode(l);return"keydown"===t.type&&y in p.altKeys?(i=a.altkeypopup_blockingFlag,a.altkeypopup_blockingFlag=!0,!i):a.altkeypopup_blockingFlag?(l>=u.a&&l<=u.z&&!t.shiftKey&&(y=y.toLowerCase()),n.hasMappedKeys&&n.mappedKeys.hasOwnProperty(y)&&(y=n.mappedKeys[y]),y in p.altKeys&&(o=setTimeout(function(){a.altkeypopup_blockingFlag&&a.altKeyPopup_popup(y,s)},a.altkeypopup_options.holdTime)),!0):void 0})},a.altKeyPopup_close=function(){a.altkeypopup_blockingFlag=!1,a.altKeyPopup_$overlay=null,a.$keyboard.find("."+p.css.altKeyOverlay).remove(),e(document).unbind(a.altkeypopup_namespace),a.$preview.focus(),a.options.ignoreEsc=a.altKeyPopup_savedIgnoreEsc,a.$el.trigger(a.altkeypopup_options.popupHidden,[a])},a.altKeyPopup_popup=function(o,t){if(!a.$keyboard.find("."+p.css.altKeyOverlay).length){var i,n,u,s,l,y,r,c,d,k=p.css,h={$kb:a.$keyboard,kbWidth:a.$keyboard.outerWidth(),kbHeight:a.$keyboard.outerHeight(),$key:t};a.altKeyPopup_$overlay=e('').css({width:h.kbWidth,height:h.kbHeight}).appendTo(a.$keyboard).bind("click touchstart",function(){a.altKeyPopup_close()}),d="inactive hidden ".split(" ").join(a.altkeypopup_namespace+" "),a.$el.unbind(d).bind(d,function(){a.altKeyPopup_close()}),"bksp"!==o&&p.keyaction.bksp(a),n=e(''),i=p.altKeys[o].split(/\s+/),a.buildRow(n,0,i,[]),u=n.appendTo(a.altKeyPopup_$overlay).children().bind("mousedown touchstart",function(o){var t=e(this).attr("data-action");t in p.keyaction&&e.isFunction(p.keyaction[t])?p.keyaction[t](a,this,o):a.insertText(t),a.altKeyPopup_close()}).bind("mouseover mouseleave",function(p){u.removeClass(a.options.css.buttonHover),"mouseleave"!==p.type&&e(this).addClass(a.options.css.buttonHover)}),a.altKeyPopup_navigate(!0),a.altKeyPopup_savedIgnoreEsc=a.options.ignoreEsc,a.options.ignoreEsc=!0,e(document).unbind(a.altkeypopup_namespace).bind("keydown"+a.altkeypopup_namespace,function(e){return!1}).bind("keyup"+a.altkeypopup_namespace,function(e){return e.which===p.navigationKeys.escape?(e.which=0,a.altKeyPopup_close()):a.altKeyPopup_navigate(e),!1}),h.$popup=n,r=n.outerWidth(),(s=t.position().left-r/2)+r>h.kbWidth&&(s=h.kbWidth-r)<0&&n.css({width:h.kbWidth,height:"auto"}),l=t.position().top-t.outerHeight()-5,c=n.outerHeight(),y=a.$keyboard.find("."+k.keySet).position().top,l+c>h.kbHeight&&(l=h.kbHeight-c)s&&(o=s),a.altKeyPopup_currentIndex=o,u.removeClass(n).eq(o).addClass(n)},a.options.alwaysOpen&&a.isVisible()&&a.altkeypopup_setup(),a.$el.unbind(p.events.kbBeforeVisible+a.altkeypopup_namespace).bind(p.events.kbBeforeVisible+a.altkeypopup_namespace,function(){a.altkeypopup_setup()})}})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var p=e.keyboard;e.extend(p.css,{altKeyPopup:"ui-keyboard-popup",altKeyOverlay:"ui-keyboard-overlay",altKeyPopupOpen:"ui-keyboard-popup-open"}),p.altKeys=e.extend({a:"å æ ā ă ą à á â ã ä",A:"Å Æ Ā Ă Ą À Á  à Ä",c:"ç ć ĉ ċ č",C:"Ç Ć Ĉ Ċ Č",d:"ď ð ď",D:"Ď Ð Ď",e:"ė ę ĕ ě ə è é ê ë ē",E:"Ė Ę Ĕ Ě Ǝ È É Ê Ë Ē",g:"ģ ğ ĝ ġ",G:"Ģ Ğ Ĝ Ġ",h:"ĥ ħ",H:"Ĥ Ħ",i:"ı į ī ï î í ì ĩ ĭ",I:"İ Į Ī Ï Î Í Ì Ĩ Ĭ",j:"ĵ",J:"Ĵ",k:"ķ",K:"Ķ",l:"Ł Ľ Ļ Ĺ Ŀ",L:"ł ľ ļ ĺ ŀ",n:"ʼn ň ņ ń ñ",N:"ʼn Ň Ņ Ń Ñ",o:"œ ő ø ö õ ô ó ò ō ŏ",O:"Œ Ő Ø Ö Õ Ô Ó Ò Ō Ŏ",r:"ŕ ř ŗ",R:"Ŕ Ř Ŗ",s:"ś š ş ß § ŝ",S:"Ś Š Ş ẞ § Ŝ",t:"þ ť ț ţ ŧ",T:"Þ Ť Ț Ţ Ŧ",u:"ų ű ů ū ü û ú ù ũ ŭ",U:"Ų Ű Ů Ū Ü Û Ú Ù Ũ Ŭ",w:"ŵ",W:"Ŵ",y:"ý",Y:"Ý",z:"ź ż ž",Z:"Ź Ż Ž","!":"¡",$:"€ £ ¤ ¥ ¢ ₡ ₱ ₩ ₹ ₪ ₭ ₮ ₦ ₤","?":"¿","'":"〈 「 『 “",'"':"〉 」 』 ”","(":"《 【 〔",")":"》 】 〕"},p.altKeys),p.navigationKeys=e.extend({enter:13,escape:27,end:35,home:36,left:37,right:39},p.navigationKeys),e.fn.addAltKeyPopup=function(o){var t={holdTime:500,popupVisible:"popup-visible",popupHidden:"popup-hidden",popupPosition:null};return this.each(function(){var a=e(this).data("keyboard");if(a){if(a.altkeypopup_options=e.extend({},t,a.altkeypopup_options,o),a.altkeypopup_namespace)return a.altkeypopup_setup();a.altkeypopup_namespace=a.namespace+"AltKeyPopup",a.extensionNamespace.push(a.altkeypopup_namespace),a.altkeypopup_setup=function(){var o,t="mousedown touchstart ".split(" ").join(a.altkeypopup_namespace+" "),n="mouseup touchend touchcancel ".split(" ").join(a.altkeypopup_namespace+" ");a.options.repeatRate=0,a.unbindButton(a.altkeypopup_namespace).bindButton(t,function(){clearTimeout(o);var t=e(this),n=t.attr("data-value")||"",i=a.altkeypopup_options.holdTime;n in p.altKeys&&(i?o=setTimeout(function(){a.altKeyPopup_popup(n,t)},i):a.altKeyPopup_popup(n,t))}).bindButton(n,function(){clearTimeout(o)}),a.altkeypopup_blockingFlag=!1,a.$preview.unbind("keypress keydown keyup ".split(" ").join(a.altkeypopup_namespace+" ").trim()).bind("keypress keydown keyup ".split(" ").join(a.altkeypopup_namespace+" "),function(t){if("keyup"===t.type)return clearTimeout(o),a.altkeypopup_blockingFlag=!1,t.which!==p.navigationKeys.escape;var n,i=p.builtLayouts[a.layout],u=p.keyCodes,s=e(t.target),l=t.charCode||t.which,y=String.fromCharCode(l);return"keydown"===t.type&&y in p.altKeys?(n=a.altkeypopup_blockingFlag,a.altkeypopup_blockingFlag=!0,!n):a.altkeypopup_blockingFlag?(l>=u.a&&l<=u.z&&!t.shiftKey&&(y=y.toLowerCase()),i.hasMappedKeys&&i.mappedKeys.hasOwnProperty(y)&&(y=i.mappedKeys[y]),y in p.altKeys&&(o=setTimeout(function(){a.altkeypopup_blockingFlag&&a.altKeyPopup_popup(y,s)},a.altkeypopup_options.holdTime)),!0):void 0})},a.altKeyPopup_close=function(){a.altkeypopup_blockingFlag=!1,a.altKeyPopup_$overlay=null,setTimeout(function(){if(a.$keyboard.length){a.$keyboard.removeClass(p.css.altKeyPopupOpen);var e=a.$keyboard.find("."+p.css.altKeyOverlay);e&&e.remove()}},1),e(document).unbind(a.altkeypopup_namespace),a.$preview.focus(),a.options.ignoreEsc=a.altKeyPopup_savedIgnoreEsc,a.$el.trigger(a.altkeypopup_options.popupHidden,[a])},a.altKeyPopup_popup=function(o,t){if(!a.$keyboard.find("."+p.css.altKeyOverlay).length){var n,i,u,s,l,y,r,c,d,k=p.css,b={$kb:a.$keyboard,kbWidth:a.$keyboard.outerWidth(),kbHeight:a.$keyboard.outerHeight(),$key:t};a.altKeyPopup_$overlay=e('').css({width:b.kbWidth,height:b.kbHeight}).appendTo(a.$keyboard).bind("click touchstart",function(){a.altKeyPopup_close()}),d="inactive hidden ".split(" ").join(a.altkeypopup_namespace+" "),a.$keyboard.addClass(p.css.altKeyPopupOpen),a.$el.unbind(d).bind(d,function(){a.altKeyPopup_close()}),"bksp"!==o&&p.keyaction.bksp(a),i=e(''),n=p.altKeys[o].split(/\s+/),a.buildRow(i,0,n,[]),u=i.appendTo(a.altKeyPopup_$overlay).children().bind("mousedown touchstart",function(){a.altKeyPopup_close()}).bind("mouseover mouseleave",function(p){u.removeClass(a.options.css.buttonHover),"mouseleave"!==p.type&&e(this).addClass(a.options.css.buttonHover)}),a.altKeyPopup_navigate(!0),a.altKeyPopup_savedIgnoreEsc=a.options.ignoreEsc,a.options.ignoreEsc=!0,e(document).unbind(a.altkeypopup_namespace).bind("keydown"+a.altkeypopup_namespace,function(){return!1}).bind("keyup"+a.altkeypopup_namespace,function(e){return e.which===p.navigationKeys.escape?(e.which=0,a.altKeyPopup_close()):a.altKeyPopup_navigate(e),!1}),b.$popup=i,r=i.outerWidth(),(s=t.position().left-r/2)+r>b.kbWidth&&(s=b.kbWidth-r)<0&&i.css({width:b.kbWidth,height:"auto"}),l=t.position().top-t.outerHeight()-5,c=i.outerHeight(),y=a.$keyboard.find("."+k.keySet).position().top,l+c>b.kbHeight&&(l=b.kbHeight-c)s&&(o=s),a.altKeyPopup_currentIndex=o,u.removeClass(i).eq(o).addClass(i)},a.options.alwaysOpen&&a.isVisible()&&a.altkeypopup_setup(),a.$el.unbind(p.events.kbBeforeVisible+a.altkeypopup_namespace).bind(p.events.kbBeforeVisible+a.altkeypopup_namespace,function(){a.altkeypopup_setup()})}})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-autocomplete.min.js b/dist/js/jquery.keyboard.extension-autocomplete.min.js
index 83f9cd94..bce898a9 100644
--- a/dist/js/jquery.keyboard.extension-autocomplete.min.js
+++ b/dist/js/jquery.keyboard.extension-autocomplete.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard Autocomplete v1.11.4 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.fn.addAutocomplete=function(t){var o={position:{of:null,my:"right top",at:"left top",collision:"flip"},events:"autocomplete",data:""};return this.each(function(){var a,l,u=e(this).data("keyboard");u&&(l=u.namespace+"Autocomplete",u.autocomplete_namespace=l,u.extensionNamespace.push(l),u.autocomplete_init=function(){var c=(a=u.autocomplete_options=e.extend(!0,{},o,t)).events||a.data||"autocomplete";u.options.alwaysOpen&&u.isVisible()&&u.autocomplete_setup(),u.$el.unbind(l).bind(e.keyboard.events.kbVisible+l,function(){u.autocomplete_setup()}).bind(e.keyboard.events.kbHidden+l,function(){u.$el[a.data||"autocomplete"]("close")}).bind(e.keyboard.events.kbChange+l,function(){u.hasAutocomplete&&u.isVisible()&&u.$el.val(u.$preview.val())}).bind(c+"open"+l,function(){if(u.hasAutocomplete){var t=e.extend({},a.position);t.of=t.of||u.$keyboard,u.$autocomplete.menu.element.position(t)}}).bind(c+"select"+l,function(e,t){u.autocomplete_getVal(t.item)})},u.autocomplete_getVal=function(e){var t;switch(typeof e){case"string":t=e||"";break;case"object":t=e.label||e.value||"";break;default:t=u.preview&&u.preview.value||u.el.value}t=t.toString(),u.hasAutocomplete&&""!==t&&((u.$preview||u.$el).val(t).focus(),u.last.start=t.length,u.last.end=t.length,u.last.val=t)},u.autocomplete_update=function(e){clearTimeout(u.$autocomplete.searching),u.$autocomplete.searching=setTimeout(function(){u.$autocomplete.term!==u.$autocomplete.element.val()&&(u.$autocomplete.selectedItem=null,u.$autocomplete.search(null,e))},u.$autocomplete.options.delay)},u.autocomplete_navKeys={8:"backSpace",9:"tab",13:"enter",20:"capsLock",27:"escape",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete"},u.autocomplete_setup=function(){var e;if(u.$autocomplete=u.$el.data(u.autocomplete_options.data)||u.$el.data("uiAutocomplete")||u.$el.data("ui-autocomplete")||u.$el.data("autocomplete"),u.hasAutocomplete=void 0!==u.$autocomplete&&!u.$autocomplete.options.disabled,u.hasAutocomplete){u.$preview.bind("keydown"+l+" keypress"+l,function(t){u.$preview&&t.namespace!==u.$autocomplete.eventNamespace&&(t.namespace=u.$autocomplete.eventNamespace.slice(1),(e=u.autocomplete_navKeys[t.which])?u.el!==u.preview&&(u.$el.triggerHandler(t),"enter"===e&&setTimeout(function(){u.$autocomplete&&(u.$preview.val(u.$autocomplete.selectedItem.value),u.$preview.focus())},100)):u.autocomplete_update(t))});var t="mouseup mousedown mouseleave touchstart touchend touchcancel ".split(" ").join(l+" ");u.$allKeys.bind(t,function(e){u.autocomplete_update(e)})}u.escCloseCallback.autocomplete||(u.escCloseCallback.autocomplete=u.checkAutocompleteMenu)},u.checkAutocompleteMenu=function(e){return u.hasAutocomplete&&e.closest("ul").hasClass("ui-autocomplete")},u.autocomplete_destroy=function(){clearTimeout(u.$autocomplete.searching),u.hasAutocomplete=!1,u.$el.unbind(l),u.$preview&&(u.$preview.unbind(l),u.$allKeys.unbind(l)),delete u.$autocomplete},u.autocomplete_init())})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.fn.addAutocomplete=function(t){var o={position:{of:null,my:"right top",at:"left top",collision:"flip"},events:"autocomplete",data:""};return this.each(function(){var a,l,u=e(this).data("keyboard");u&&(l=u.namespace+"Autocomplete",u.autocomplete_namespace=l,u.extensionNamespace.push(l),u.autocomplete_init=function(){var c=(a=u.autocomplete_options=e.extend(!0,{},o,t)).events||a.data||"autocomplete";u.options.alwaysOpen&&u.isVisible()&&u.autocomplete_setup(),u.$el.unbind(l).bind(e.keyboard.events.kbVisible+l,function(){u.autocomplete_setup()}).bind(e.keyboard.events.kbHidden+l,function(){u.$el[a.data||"autocomplete"]("close")}).bind(e.keyboard.events.kbChange+l,function(){u.hasAutocomplete&&u.isVisible()&&u.$el.val(u.$preview.val())}).bind(c+"open"+l,function(){if(u.hasAutocomplete){var t=e.extend({},a.position);t.of=t.of||u.$keyboard,u.$autocomplete.menu.element.position(t)}}).bind(c+"select"+l,function(e,t){u.autocomplete_getVal(t.item)})},u.autocomplete_getVal=function(e){var t;switch(typeof e){case"string":t=e||"";break;case"object":t=e.label||e.value||"";break;default:t=u.preview&&u.preview.value||u.el.value}t=t.toString(),u.hasAutocomplete&&""!==t&&((u.$preview||u.$el).val(t).focus(),u.last.start=t.length,u.last.end=t.length,u.last.val=t)},u.autocomplete_update=function(e){clearTimeout(u.$autocomplete.searching),u.$autocomplete.searching=setTimeout(function(){u.$autocomplete.term!==u.$autocomplete.element.val()&&(u.$autocomplete.selectedItem=null,u.$autocomplete.search(null,e))},u.$autocomplete.options.delay)},u.autocomplete_navKeys={8:"backSpace",9:"tab",13:"enter",20:"capsLock",27:"escape",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete"},u.autocomplete_setup=function(){var e;if(u.$autocomplete=u.$el.data(u.autocomplete_options.data)||u.$el.data("uiAutocomplete")||u.$el.data("ui-autocomplete")||u.$el.data("autocomplete"),u.hasAutocomplete=void 0!==u.$autocomplete&&!u.$autocomplete.options.disabled,u.hasAutocomplete){u.$preview.bind("keydown"+l+" keypress"+l,function(t){u.$preview&&t.namespace!==u.$autocomplete.eventNamespace&&(t.namespace=u.$autocomplete.eventNamespace.slice(1),(e=u.autocomplete_navKeys[t.which])?u.el!==u.preview&&(u.$el.triggerHandler(t),"enter"===e&&setTimeout(function(){u.$autocomplete&&(u.$preview.val(u.$autocomplete.selectedItem.value),u.$preview.focus())},100)):u.autocomplete_update(t))});var t="mouseup mousedown mouseleave touchstart touchend touchcancel ".split(" ").join(l+" ");u.bindButton(t,function(e){u.autocomplete_update(e)})}u.escCloseCallback.autocomplete||(u.escCloseCallback.autocomplete=u.checkAutocompleteMenu)},u.checkAutocompleteMenu=function(e){return u.hasAutocomplete&&e.closest("ul").hasClass("ui-autocomplete")},u.autocomplete_destroy=function(){clearTimeout(u.$autocomplete.searching),u.hasAutocomplete=!1,u.$el.unbind(l),u.$preview&&(u.$preview.unbind(l),u.unbindButton(l)),delete u.$autocomplete},u.autocomplete_init())})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-extender.min.js b/dist/js/jquery.keyboard.extension-extender.min.js
index 0015c40e..84cac9dc 100644
--- a/dist/js/jquery.keyboard.extension-extender.min.js
+++ b/dist/js/jquery.keyboard.extension-extender.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard Extender v1.0.3 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var n=e.keyboard;n.css.extender="ui-keyboard-extender",n.language.en.display.extender=" :toggle_numpad",n.layouts.numpad={normal:["{clear} / * -","7 8 9 +","4 5 6 %","1 2 3 =","0 {dec} {left} {right}"]},n.keyaction.extender=function(e,n){return e.extender_toggle(),!1},e.fn.addExtender=function(t){var o={layout:"numpad",showing:!1,reposition:!0};return this.each(function(){var s=e(this).data("keyboard");if(s){if(s.extender_options=e.extend({},o,s.extender_options,t),s.extender_namespace)return s.extender_layoutSwitcher();s.extender_namespace=s.namespace+"extender",s.extensionNamespace.push(s.extender_namespace),s.extender_layoutSwitcher=function(){s.extender_lastKeyset=s.last.keyset,s.extender_bindEvents(!1),s.$el.one(n.events.kbBeforeVisible,function(){s.shiftActive=s.extender_lastKeyset[0],s.altActive=s.extender_lastKeyset[1],s.metaActive=s.extender_lastKeyset[2],s.showKeySet(),s.extender_setup(),s.extender_bindEvents()}),s.redraw()},s.extender_bindEvents=function(e){var t=n.events.kbBeforeVisible+s.extender_namespace;s.$el.unbind(t),!1!==e&&s.$el.bind(t,function(){s.extender_setup()})},s.extender_setup=function(){var e,t=s.extender_options.layout;void 0===n.builtLayouts[t]&&s.buildKeyboard(t),(e=n.builtLayouts[t].$keyboard.find("."+n.css.keySet+"-normal").clone()).removeClass().removeAttr("name").addClass(n.css.extender).children("button").removeAttr("data-pos"),e[0].style.display=s.extender_options.showing?"inline-block":"none",s.$keyboard.find("div."+n.css.extender).remove(),s.$keyboard.append(e),s.extender_toggle(s.extender_options.showing),s.bindKeys()},s.extender_toggle=function(t){s.extender_options.showing=void 0===t?!s.extender_options.showing:t,s.$keyboard.find("button."+n.css.extender).toggleClass(s.options.css.buttonActive,s.extender_options.showing).end().find("div."+n.css.extender)[0].style.display=s.extender_options.showing?"inline-block":"none",s.extender_options.reposition&&e(window).trigger("resize")},s.options.alwaysOpen&&s.isVisible()&&s.extender_setup(),s.extender_bindEvents()}})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var n=e.keyboard;n.css.extender="ui-keyboard-extender",n.language.en.display.extender=" :toggle_numpad",n.layouts.numpad={normal:["{clear} / * -","7 8 9 +","4 5 6 %","1 2 3 =","0 {dec} {left} {right}"]},n.keyaction.extender=function(e){return e.extender_toggle(),!1},e.fn.addExtender=function(t){var o={layout:"numpad",showing:!1,reposition:!0};return this.each(function(){var s=e(this).data("keyboard");if(s){if(s.extender_options=e.extend({},o,s.extender_options,t),s.extender_namespace)return s.extender_layoutSwitcher();s.extender_namespace=s.namespace+"extender",s.extensionNamespace.push(s.extender_namespace),s.extender_layoutSwitcher=function(){s.extender_lastKeyset=s.last.keyset,s.extender_bindEvents(!1),s.$el.one(n.events.kbBeforeVisible,function(){s.shiftActive=s.extender_lastKeyset[0],s.altActive=s.extender_lastKeyset[1],s.metaActive=s.extender_lastKeyset[2],s.showKeySet(),s.extender_setup(),s.extender_bindEvents()}),s.redraw()},s.extender_bindEvents=function(e){var t=n.events.kbBeforeVisible+s.extender_namespace;s.$el.unbind(t),!1!==e&&s.$el.bind(t,function(){s.extender_setup()})},s.extender_setup=function(){var e,t=s.extender_options.layout;void 0===n.builtLayouts[t]&&s.buildKeyboard(t),(e=n.builtLayouts[t].$keyboard.find("."+n.css.keySet+"-normal").clone()).removeClass().removeAttr("name").addClass(n.css.extender).children("button").removeAttr("data-pos"),e[0].style.display=s.extender_options.showing?"inline-block":"none",s.$keyboard.find("div."+n.css.extender).remove(),s.$keyboard.append(e),s.extender_toggle(s.extender_options.showing),s.bindKeys()},s.extender_toggle=function(t){s.extender_options.showing=void 0===t?!s.extender_options.showing:t,s.$keyboard.find("button."+n.css.extender).toggleClass(s.options.css.buttonActive,s.extender_options.showing).end().find("div."+n.css.extender)[0].style.display=s.extender_options.showing?"inline-block":"none",s.extender_options.reposition&&e(window).trigger("resize")},s.options.alwaysOpen&&s.isVisible()&&s.extender_setup(),s.extender_bindEvents()}})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-navigation.min.js b/dist/js/jquery.keyboard.extension-navigation.min.js
index 14ef07a4..d5a651aa 100644
--- a/dist/js/jquery.keyboard.extension-navigation.min.js
+++ b/dist/js/jquery.keyboard.extension-navigation.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard Navigation v1.6.2 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.keyboard.navigationKeys={toggle:112,enter:13,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,caretrt:45,caretlt:46,caretright:function(t){e.keyboard.keyaction.right(t)},caretleft:function(t){e.keyboard.keyaction.left(t)}},e.fn.addNavigation=function(t){return this.each(function(){var a,n,o=e(this).data("keyboard"),i=o.options,s=e.keyboard.events,r=e.keyboard.css;o&&(o.navigation_options=a=e.extend({},{position:[0,0],toggleMode:!1,focusClass:"hasFocus",toggleKey:null,rowLooping:!1},t),o.navigation_keys=n=e.extend({},e.keyboard.navigationKeys),o.navigation_namespace=o.namespace+"Nav",o.extensionNamespace.push(o.navigation_namespace),o.saveNav=[o.options.tabNavigation,o.options.enterNavigation],o.allNavKeys=e.map(n,function(e,t){return e}),o.navigation_init=function(){o.$keyboard.toggleClass(a.focusClass,a.toggleMode).find("."+r.keySet+":visible").find("."+r.keyButton+'[data-pos="'+a.position[0]+","+a.position[1]+'"]').addClass(i.css.buttonHover),o.$preview.unbind(o.navigation_namespace).bind("keydown"+o.navigation_namespace,function(e){return o.checkKeys(e.which)})},o.checkKeys=function(t,n){if(void 0!==t){var i=o.navigation_keys;return(t===(a.toggleKey||i.toggle)||n)&&(a.toggleMode=!n&&!a.toggleMode,o.options.tabNavigation=!a.toggleMode&&o.saveNav[0],o.options.enterNavigation=!a.toggleMode&&o.saveNav[1]),o.$keyboard.toggleClass(a.focusClass,a.toggleMode),a.toggleMode&&t===i.enter?(o.$keyboard.find("."+r.keySet+":visible").find("."+r.keyButton+'[data-pos="'+a.position[0]+","+a.position[1]+'"]').trigger(s.kbRepeater),!1):a.toggleMode&&e.inArray(t,o.allNavKeys)>=0?(o.navigateKeys(t),!1):void 0}},o.getMaxIndex=function(e,t){return e.find("."+r.keyButton+'[data-pos^="'+t+',"]').length-1},o.leftNavigateKey=function(e,t){var a=o.navigation_options.rowLooping,n=e-1;return n>=0?n:a?t:0},o.rightNavigateKey=function(e,t){var a=o.navigation_options.rowLooping,n=e+1;return n<=t?n:a?0:t},o.navigateKeys=function(t,n,s){if(o.isVisible()){s="number"==typeof s?s:a.position[1],n="number"==typeof n?n:a.position[0];var g,d=o.$keyboard.find("."+r.keySet+":visible"),c=d.find("."+r.endRow).length-1,v=o.getMaxIndex(d,n),y=o.last,l=o.$preview.val().length,u=o.navigation_keys;switch(t){case u.pageup:n=0;break;case u.pagedown:n=c;break;case u.end:s=v;break;case u.home:s=0;break;case u.left:s=o.leftNavigateKey(s,v);break;case u.up:n+=n>0?-1:0,g=o.getMaxIndex(d,n),s=s===v?g:s;break;case u.right:s=o.rightNavigateKey(s,v);break;case u.down:n+=n+1>c?0:1,g=o.getMaxIndex(d,n),s=s===v?g:s;break;case u.caretrt:y.start++;break;case u.caretlt:y.start--}t!==u.caretrt&&t!==u.caretlt||(y.start=y.start<0?0:y.start>l?l:y.start,o.last.start=o.last.end=y.end=y.start,e.keyboard.caret(o.$preview,o.last)),s>(v=o.getMaxIndex(d,n))&&(s=v),d.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),d.find("."+r.keyButton+'[data-pos="'+n+","+s+'"]').addClass(i.css.buttonHover),a.position=[n,s]}},o.options.alwaysOpen&&o.isVisible()&&(o.$keyboard.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),o.navigation_init()),o.$el.unbind(o.navigation_namespace).bind(s.kbVisible,function(){o.$keyboard.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),o.navigation_init()}).bind(s.kbInactive+" "+s.kbHidden,function(e){o.checkKeys(e.which,!0)}).bind(s.kbKeysetChange,function(){o.navigateKeys(null)}).bind("navigate navigateTo",function(t,a,n){var i;(a=isNaN(a)?a.toLowerCase():a)in o.navigation_keys?(i=o.navigation_keys[a],isNaN(i)&&i in e.keyboard.keyaction?e.keyboard.keyaction[i](o,this,t):e.isFunction(i)?i(o):o.checkKeys(i)):"string"==typeof a&&a in e.keyboard.keyaction?e.keyboard.keyaction[a](o,this,t):o.navigateKeys(null,a,n)}))})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.keyboard.navigationKeys={toggle:112,enter:13,pageup:33,pagedown:34,end:35,home:36,left:37,up:38,right:39,down:40,caretrt:45,caretlt:46,caretright:function(t){e.keyboard.keyaction.right(t)},caretleft:function(t){e.keyboard.keyaction.left(t)}},e.fn.addNavigation=function(t){return this.each(function(){var a,n,o=e(this).data("keyboard"),i=o.options,s={position:[0,0],toggleMode:!1,focusClass:"hasFocus",toggleKey:null,rowLooping:!1},r=e.keyboard.events,g=e.keyboard.css;o&&(o.navigation_options=a=e.extend({},s,t),o.navigation_keys=n=e.extend({},e.keyboard.navigationKeys),o.navigation_namespace=o.namespace+"Nav",o.extensionNamespace.push(o.navigation_namespace),o.saveNav=[o.options.tabNavigation,o.options.enterNavigation],o.allNavKeys=e.map(n,function(e){return e}),o.navigation_init=function(){o.$keyboard.toggleClass(a.focusClass,a.toggleMode).find("."+g.keySet+":visible").find("."+g.keyButton+'[data-pos="'+a.position[0]+","+a.position[1]+'"]').addClass(i.css.buttonHover),o.$preview.unbind(o.navigation_namespace).bind("keydown"+o.navigation_namespace,function(e){return o.checkKeys(e.which)})},o.checkKeys=function(t,n){if(void 0!==t){var i=o.navigation_keys;return(t===(a.toggleKey||i.toggle)||n)&&(a.toggleMode=!n&&!a.toggleMode,o.options.tabNavigation=!a.toggleMode&&o.saveNav[0],o.options.enterNavigation=!a.toggleMode&&o.saveNav[1]),o.$keyboard.toggleClass(a.focusClass,a.toggleMode),a.toggleMode&&t===i.enter?(o.$keyboard.find("."+g.keySet+":visible").find("."+g.keyButton+'[data-pos="'+a.position[0]+","+a.position[1]+'"]').trigger(r.kbRepeater),!1):a.toggleMode&&e.inArray(t,o.allNavKeys)>=0?(o.navigateKeys(t),!1):void 0}},o.getMaxIndex=function(e,t){return e.find("."+g.keyButton+'[data-pos^="'+t+',"]').length-1},o.leftNavigateKey=function(e,t){var a=o.navigation_options.rowLooping,n=e-1;return n>=0?n:a?t:0},o.rightNavigateKey=function(e,t){var a=o.navigation_options.rowLooping,n=e+1;return n<=t?n:a?0:t},o.navigateKeys=function(t,n,s){if(o.isVisible()){s="number"==typeof s?s:a.position[1],n="number"==typeof n?n:a.position[0];var r,d=o.$keyboard.find("."+g.keySet+":visible"),c=d.find("."+g.endRow).length-1,v=o.getMaxIndex(d,n),y=o.last,l=o.$preview.val().length,u=o.navigation_keys;switch(t){case u.pageup:n=0;break;case u.pagedown:n=c;break;case u.end:s=v;break;case u.home:s=0;break;case u.left:s=o.leftNavigateKey(s,v);break;case u.up:n+=n>0?-1:0,r=o.getMaxIndex(d,n),s=s===v?r:s;break;case u.right:s=o.rightNavigateKey(s,v);break;case u.down:n+=n+1>c?0:1,r=o.getMaxIndex(d,n),s=s===v?r:s;break;case u.caretrt:y.start++;break;case u.caretlt:y.start--}t!==u.caretrt&&t!==u.caretlt||(y.start=y.start<0?0:y.start>l?l:y.start,o.last.start=o.last.end=y.end=y.start,e.keyboard.caret(o.$preview,o.last)),s>(v=o.getMaxIndex(d,n))&&(s=v),d.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),d.find("."+g.keyButton+'[data-pos="'+n+","+s+'"]').addClass(i.css.buttonHover),a.position=[n,s]}},o.options.alwaysOpen&&o.isVisible()&&(o.$keyboard.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),o.navigation_init()),o.$el.unbind(o.navigation_namespace).bind(r.kbVisible,function(){o.$keyboard.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),o.navigation_init()}).bind(r.kbInactive+" "+r.kbHidden,function(e){o.checkKeys(e.which,!0)}).bind(r.kbKeysetChange,function(){o.navigateKeys(null)}).bind("navigate navigateTo",function(t,a,n){var i;(a=isNaN(a)?a.toLowerCase():a)in o.navigation_keys?(i=o.navigation_keys[a],isNaN(i)&&i in e.keyboard.keyaction?e.keyboard.keyaction[i](o,this,t):e.isFunction(i)?i(o):o.checkKeys(i)):"string"==typeof a&&a in e.keyboard.keyaction?e.keyboard.keyaction[a](o,this,t):o.navigateKeys(null,a,n)}))})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-previewkeyset.min.js b/dist/js/jquery.keyboard.extension-previewkeyset.min.js
index 843ab394..cf0010f9 100644
--- a/dist/js/jquery.keyboard.extension-previewkeyset.min.js
+++ b/dist/js/jquery.keyboard.extension-previewkeyset.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard previewKeyset v1.1.1 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.previewKeyset=function(t){return this.each(function(){var n=e(this).data("keyboard"),i=n.namespace+"Preview";n&&(n.previewKeyset_options=e.extend({},{sets:["normal","shift","alt","alt-shift"]},t),n.extensionNamespace.push(i),n.previewKeyset=function(){var t=e.keyboard.css,i=n.previewKeyset_options.sets,o=n.$keyboard.find("."+t.keySet).filter('[name="'+i.join('"],[name="')+'"]');o.length>1&&o.eq(0).find("."+t.keyButton).not("."+t.keyAction).each(function(){var n,a,r={},s=i.length,d=o.find('button[data-pos="'+e(this).attr("data-pos")+'"]');for(n=0;n=0&&(r["data-"+a]=d.eq(n).find("."+t.keyText).text());d.attr(r)})},n.options.alwaysOpen&&n.isVisible()?n.previewKeyset():n.$el.unbind(e.keyboard.events.kbBeforeVisible+i).bind(e.keyboard.events.kbBeforeVisible+i,function(){n.previewKeyset()}))})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.previewKeyset=function(t){return this.each(function(){var n=e(this).data("keyboard"),i=n.namespace+"Preview",o={sets:["normal","shift","alt","alt-shift"]};n&&(n.previewKeyset_options=e.extend({},o,t),n.extensionNamespace.push(i),n.previewKeyset=function(){var t=e.keyboard.css,i=n.previewKeyset_options.sets,o=n.$keyboard.find("."+t.keySet).filter('[name="'+i.join('"],[name="')+'"]');o.length>1&&o.eq(0).find("."+t.keyButton).not("."+t.keyAction).each(function(){var n,a,r={},s=i.length,d=o.find('button[data-pos="'+e(this).attr("data-pos")+'"]');for(n=0;n=0&&(r["data-"+a]=d.eq(n).find("."+t.keyText).text());d.attr(r)})},n.options.alwaysOpen&&n.isVisible()?n.previewKeyset():n.$el.unbind(e.keyboard.events.kbBeforeVisible+i).bind(e.keyboard.events.kbBeforeVisible+i,function(){n.previewKeyset()}))})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-scramble.min.js b/dist/js/jquery.keyboard.extension-scramble.min.js
index a4c4fdf4..8227146d 100644
--- a/dist/js/jquery.keyboard.extension-scramble.min.js
+++ b/dist/js/jquery.keyboard.extension-scramble.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard Scramble Extension v1.7.0 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.addScramble=function(t){var a={targetKeys:/[a-z\d]/i,byRow:!0,byKeySet:!1,randomizeOnce:!0,randomizeInput:!1,init:null,sameForAll:!1};return this.each(function(){var o,n=e(this).data("keyboard"),r=n.namespace+"Scramble",i=n.options;n&&!n.scramble_options&&(o=n.scramble_options=e.extend({},a,t),n.extensionNamespace.push(r),o.orig_create=i.create,n.scramble_setup=function(t){var a,r,i,s,u,y,d,l,b,c,f;if(a=t.find("."+e.keyboard.css.keySet),t.length){for(o.byKeySet&&(a=a.eq(0)),r=0;r0;)o=Math.floor(Math.random()*n),!1===t[n-1]&&n--,!1!==t[n-1]&&!1!==t[o]&&(a=e[--n],e[n]=e[o],e[o]=a);return e},n.realign=function(t){var a,o,n,r=t.find("."+e.keyboard.css.keySet),i=r.eq(0);return r=r.filter(":gt(0)"),i.children().each(function(t,i){o="BR"===i.tagName,n=e(i).attr("data-pos"),r.each(function(t,r){a=o?"br:first":'button[data-pos="'+n+'"]',e(r).find(a).appendTo(r)})}),t},n.setScrambleLayout=function(){if(!/^scrambled/.test(i.layout)){n.orig_layout=i.layout;var e=e||"scrambled"+Math.round(1e4*Math.random());i.layout=o.sameForAll?e:"scrambled"+Math.round(1e4*Math.random())}},i.create=function(){var t=i.layout;e.keyboard.builtLayouts[t]={mappedKeys:{},acceptedKeys:[],$keyboard:null},n.layout=i.layout=n.orig_layout,n.buildKeyboard(n.layout,!0),n.layout=i.layout=t,e.keyboard.builtLayouts[t]=e.extend(!0,{},e.keyboard.builtLayouts[n.orig_layout]),o.randomizeOnce&&(e.keyboard.builtLayouts[t].$keyboard=n.scramble_setup(e.keyboard.builtLayouts[n.orig_layout].$keyboard.clone())),n.$keyboard=e.keyboard.builtLayouts[t].$keyboard,o.randomizeInput?n.$el.unbind(e.keyboard.events.kbChange+r).bind(e.keyboard.events.kbChange+r,function(t,a){o.targetKeys.test(a.last.key)&&(a.$keyboard.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),a.$keyboard=a.scramble_setup(a.$keyboard),e(document.elementFromPoint(t.clientX,t.clientY)).trigger("mouseenter"))}):o.randomizeOnce||n.$el.unbind(e.keyboard.events.kbBeforeVisible+r).bind(e.keyboard.events.kbBeforeVisible+r,function(e,t){t.$keyboard=t.scramble_setup(t.$keyboard)}),e.isFunction(o.orig_create)&&o.orig_create(n)},n.setScrambleLayout(),i.alwaysOpen&&n.$keyboard.length?setTimeout(function(){var t=e.keyboard.builtLayouts;n.$keyboard=n.scramble_setup(n.$keyboard),n.setScrambleLayout(),void 0===t[i.layout]&&(t[i.layout]={mappedKeys:e.extend({},t[n.layout].mappedKeys),acceptedKeys:e.extend([],t[n.layout].acceptedKeys),$keyboard:n.$keyboard.clone()}),e.isFunction(o.init)&&o.init(n)},0):e.isFunction(o.init)&&o.init(n))})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";e.keyboard=e.keyboard||{},e.fn.addScramble=function(t){var a={targetKeys:/[a-z\d]/i,byRow:!0,byKeySet:!1,randomizeOnce:!0,randomizeInput:!1,init:null,sameForAll:!1};return this.each(function(){var o,n=e(this).data("keyboard"),r=n.namespace+"Scramble",i=n.options;n&&!n.scramble_options&&(o=n.scramble_options=e.extend({},a,t),n.extensionNamespace.push(r),o.orig_create=i.create,n.scramble_setup=function(t){var a,r,i,s,u,y,d,l,b,c,f;if(a=t.find("."+e.keyboard.css.keySet),t.length){for(o.byKeySet&&(a=a.eq(0)),r=0;r0;)o=Math.floor(Math.random()*n),!1===t[n-1]&&n--,!1!==t[n-1]&&!1!==t[o]&&(a=e[--n],e[n]=e[o],e[o]=a);return e},n.realign=function(t){var a,o,n,r=t.find("."+e.keyboard.css.keySet),i=r.eq(0);return r=r.filter(":gt(0)"),i.children().each(function(t,i){o="BR"===i.tagName,n=e(i).attr("data-pos"),r.each(function(t,r){a=o?"br:first":'button[data-pos="'+n+'"]',e(r).find(a).appendTo(r)})}),t},n.setScrambleLayout=function(){if(!/^scrambled/.test(i.layout)){n.orig_layout=i.layout;var e=e||"scrambled"+Math.round(1e4*Math.random());i.layout=o.sameForAll?e:"scrambled"+Math.round(1e4*Math.random())}},i.create=function(){var t=i.layout;e.keyboard.builtLayouts[t]={mappedKeys:{},acceptedKeys:[],$keyboard:null},n.layout=i.layout=n.orig_layout,n.buildKeyboard(n.layout,!0),n.layout=i.layout=t,e.keyboard.builtLayouts[t]=e.extend(!0,{},e.keyboard.builtLayouts[n.orig_layout]),o.randomizeOnce&&(e.keyboard.builtLayouts[t].$keyboard=n.scramble_setup(e.keyboard.builtLayouts[n.orig_layout].$keyboard.clone())),n.$keyboard=e.keyboard.builtLayouts[t].$keyboard,o.randomizeInput?n.$el.unbind(e.keyboard.events.kbChange+r).bind(e.keyboard.events.kbChange+r,function(t,a){o.targetKeys.test(a.last.key)&&(a.$keyboard.find("."+i.css.buttonHover).removeClass(i.css.buttonHover),a.$keyboard=a.scramble_setup(a.$keyboard),e(document.elementFromPoint(t.clientX,t.clientY)).trigger("mouseenter"))}):o.randomizeOnce||n.$el.unbind(e.keyboard.events.kbBeforeVisible+r).bind(e.keyboard.events.kbBeforeVisible+r,function(e,t){t.$keyboard=t.scramble_setup(t.$keyboard)}),e.isFunction(o.orig_create)&&o.orig_create(n)},n.setScrambleLayout(),i.alwaysOpen&&n.$keyboard.length?setTimeout(function(){var t=e.keyboard.builtLayouts;n.$keyboard=n.scramble_setup(n.$keyboard),n.setScrambleLayout(),void 0===t[i.layout]&&(t[i.layout]={mappedKeys:e.extend({},t[n.layout].mappedKeys),acceptedKeys:e.extend([],t[n.layout].acceptedKeys),$keyboard:n.$keyboard.clone()}),e.isFunction(o.init)&&o.init(n)},0):e.isFunction(o.init)&&o.init(n))})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.extension-typing.min.js b/dist/js/jquery.keyboard.extension-typing.min.js
index 57f3481c..a6ff3815 100644
--- a/dist/js/jquery.keyboard.extension-typing.min.js
+++ b/dist/js/jquery.keyboard.extension-typing.min.js
@@ -1,2 +1,2 @@
/*! jQuery UI Virtual Keyboard Typing Simulator v1.11.1 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){e.fn.addTyping=function(t){var n={showTyping:!0,lockTypeIn:!1,delay:250,hoverDelay:250},i=e.keyboard;return this.each(function(){var p,s=e(this).data("keyboard");s&&(p=s.typing_options=e.extend({},n,t),s.typing_keymap={" ":"space",'"':"34","'":"39"," ":"space","\b":"bksp","{b}":"bksp","{d}":"del","{l}":"left","{r}":"right","\n":"enter","\r":"enter","{e}":"enter","\t":"tab","{t}":"tab"},s.typing_xref={8:"bksp",9:"tab",13:"enter",32:"space",37:"left",39:"right",46:"del"},s.typing_event=!1,s.typing_namespace=s.namespace+"typing",s.extensionNamespace.push(s.typing_namespace),p.savedLockInput=s.options.lockInput,s.typing_setup_reset=function(){var e=i.events,t=s.typing_namespace,n=[e.kbHidden,e.kbInactive,""].join(t+" ");s.$el.unbind(t).bind(n,function(){s.typing_reset()}),s.$allKeys.unbind(t).bind("mousedown"+t,function(){s.typing_reset()})},s.typing_setup=function(){var e=s.typing_namespace;s.typing_setup_reset(),s.$el.bind(i.events.kbBeforeVisible+e,function(){s.typing_setup()}),s.$preview.unbind(e).bind("keyup"+e,function(e){return!(p.init&&p.lockTypeIn||!p.showTyping)&&(e.which>=37&&e.which<=40?void 0:(16===e.which&&(s.shiftActive=!1),18===e.which&&(s.altActive=!1),16===e.which||18===e.which?(s.showSet(),void setTimeout(function(){s.$preview.focus()},200)):void 0))}).bind("keydown"+e,function(e){if(p.init&&p.lockTypeIn||!p.showTyping)return!1;e.temp=!1,16===e.which&&(e.temp=!s.shiftActive,s.shiftActive=!0),18===e.which&&(e.temp=!s.altActive,s.altActive=!0),e.temp&&(s.showSet(),s.$preview.focus()),s.typing_event=!0,s.typing_xref[e.which]&&s.typing_findKey("",e)}).bind("keypress"+e,function(e){if(p.init&&p.lockTypeIn)return!1;s.typing_event&&!s.options.lockInput&&(s.typing_reset(),s.typing_event=!0,s.typing_findKey("",e))})},s.typing_reset=function(){s.typing_event=p.init=!1,p.text="",p.len=p.current=0,s.options.lockInput=p.savedLockInput},s.typeIn=function(e,t,n,i){if(!s.isVisible())return clearTimeout(s.typing_timer),void s.typing_reset();if(s.typing_event){if(void 0===e)return s.typing_event=!1,void(s.options.lockInput=p.savedLockInput)}else!0!==p.init&&(p.init=!0,s.options.lockInput=p.lockTypeIn,p.text=e||p.text||"",p.len=p.text.length,p.delay=t||p.delay,p.current=0,n&&(p.callback=n)),"{"===(e=p.text.substring(p.current,++p.current))&&"}"===p.text.substring(p.current+1,p.current+2)&&(e+=p.text.substring(p.current,p.current+=2)),s.typing_findKey(e,i)},s.typing_findKey=function(t,n){var y,o,r,a,c,u,g,l,f=i.css,d=i.builtLayouts[s.layout].mappedKeys;if(s.isOpen&&s.$keyboard.length)if(u=s.$keyboard.find("."+f.keySet),a=t in s.typing_keymap?s.typing_keymap[t]:t,y="."+f.keyButton+'[data-action="'+a+'"]',s.typing_event&&n&&("keypress"!==n.type&&s.typing_xref.hasOwnProperty(n.keyCode||n.which)?y="."+f.keyPrefix+s.processName(s.typing_xref[n.keyCode||n.which]):(o=String.fromCharCode(n.charCode||n.which),y=d.hasOwnProperty(o)?"."+f.keyButton+'[data-value="'+d[o].replace(/"/g,'\\"')+'"]':"."+f.keyPrefix+s.processName(o))),(c=u.filter(":visible").find(y)).length?s.typing_simulateKey(c,t,n):(s.typing_event?c=u.find(y):(r=t in s.typing_keymap?s.typing_keymap[t]:s.processName(t),c=u.find("."+f.keyPrefix+r)),(l=c.closest("."+f.keySet)).attr("name")?(p.showTyping&&(g=l.attr("name"),s.shiftActive=/shift/.test(g),s.altActive=/alt/.test(g),s.metaActive=s.last.keyset[2]=!!/\bmeta/.test(g)&&g.match(/meta[\w-]+/)[0],s.showSet(s.metaActive)),s.typing_simulateKey(c,t,n)):s.typing_event||(t in s.typing_keymap&&s.typing_keymap[t]in i.keyaction?i.keyaction[s.typing_keymap[t]](s,c,n):s.insertText(t),s.checkCombos(),s.$el.trigger(i.events.kbChange,[s,s.el]))),p.current<=p.len&&0!==p.len){if(!s.isVisible())return;s.typing_timer=setTimeout(function(){s.typeIn()},p.delay)}else{if(0!==p.len)return s.typing_reset(),void(e.isFunction(p.callback)&&(s.typing_timer=setTimeout(function(){e.isFunction(p.callback)&&p.callback(s)},p.delay)));s.typing_reset()}},s.typing_simulateKey=function(t,n,y){var o=t.length;s.isVisible()&&(p.showTyping&&o&&(t.filter(":visible").trigger("mouseenter"+s.namespace),p.showTyping&&o&&setTimeout(function(){t.trigger("mouseleave"+s.namespace)},Math.min(p.hoverDelay,p.delay))),s.typing_event||setTimeout(function(){n in s.typing_keymap&&s.typing_keymap[n]in i.keyaction?((y=y||e.Event("keypress")).target=t,i.keyaction[s.typing_keymap[n]](s,t,y)):s.insertText(n),s.checkCombos(),s.$el.trigger(i.events.kbChange,[s,s.el])},p.delay/3))},p.showTyping&&s.options.alwaysOpen&&s.isVisible()?s.typing_setup():s.$el.unbind(i.events.kbBeforeVisible+s.typing_namespace).bind(i.events.kbBeforeVisible+s.typing_namespace,function(){p.showTyping?s.typing_setup():s.typing_setup_reset()}))})}});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){e.fn.addTyping=function(t){var n={showTyping:!0,lockTypeIn:!1,delay:250,hoverDelay:250},i=e.keyboard;return this.each(function(){var p,s=e(this).data("keyboard");s&&(p=s.typing_options=e.extend({},n,t),s.typing_keymap={" ":"space",'"':"34","'":"39"," ":"space","\b":"bksp","{b}":"bksp","{d}":"del","{l}":"left","{r}":"right","\n":"enter","\r":"enter","{e}":"enter","\t":"tab","{t}":"tab"},s.typing_xref={8:"bksp",9:"tab",13:"enter",32:"space",37:"left",39:"right",46:"del"},s.typing_event=!1,s.typing_namespace=s.namespace+"typing",s.extensionNamespace.push(s.typing_namespace),p.savedLockInput=s.options.lockInput,s.typing_setup_reset=function(){var e=i.events,t=s.typing_namespace,n=[e.kbHidden,e.kbInactive,""].join(t+" ");s.$el.unbind(t).bind(n,function(){s.typing_reset()}),s.unbindButton(t).bindButton("mousedown"+t,function(){s.typing_reset()})},s.typing_setup=function(){var e=s.typing_namespace;s.typing_setup_reset(),s.$el.bind(i.events.kbBeforeVisible+e,function(){s.typing_setup()}),s.$preview.unbind(e).bind("keyup"+e,function(e){if(p.init&&p.lockTypeIn||!p.showTyping)return!1;if(!(e.which>=37&&e.which<=40))return 16===e.which&&(s.shiftActive=!1),18===e.which&&(s.altActive=!1),16===e.which||18===e.which?(s.showSet(),void setTimeout(function(){s.$preview.focus()},200)):void 0}).bind("keydown"+e,function(e){if(p.init&&p.lockTypeIn||!p.showTyping)return!1;e.temp=!1,16===e.which&&(e.temp=!s.shiftActive,s.shiftActive=!0),18===e.which&&(e.temp=!s.altActive,s.altActive=!0),e.temp&&(s.showSet(),s.$preview.focus()),s.typing_event=!0,s.typing_xref[e.which]&&s.typing_findKey("",e)}).bind("keypress"+e,function(e){if(p.init&&p.lockTypeIn)return!1;s.typing_event&&!s.options.lockInput&&(s.typing_reset(),s.typing_event=!0,s.typing_findKey("",e))})},s.typing_reset=function(){s.typing_event=p.init=!1,p.text="",p.len=p.current=0,s.options.lockInput=p.savedLockInput},s.typeIn=function(e,t,n,i){if(!s.isVisible())return clearTimeout(s.typing_timer),void s.typing_reset();if(s.typing_event){if(void 0===e)return s.typing_event=!1,void(s.options.lockInput=p.savedLockInput)}else!0!==p.init&&(p.init=!0,s.options.lockInput=p.lockTypeIn,p.text=e||p.text||"",p.len=p.text.length,p.delay=t||p.delay,p.current=0,n&&(p.callback=n)),"{"===(e=p.text.substring(p.current,++p.current))&&"}"===p.text.substring(p.current+1,p.current+2)&&(e+=p.text.substring(p.current,p.current+=2)),s.typing_findKey(e,i)},s.typing_findKey=function(t,n){var y,o,r,a,c,u,g,l,f=i.css,d=i.builtLayouts[s.layout].mappedKeys;if(s.isOpen&&s.$keyboard.length)if(u=s.$keyboard.find("."+f.keySet),a=t in s.typing_keymap?s.typing_keymap[t]:t,y="."+f.keyButton+'[data-action="'+a+'"]',s.typing_event&&n&&("keypress"!==n.type&&s.typing_xref.hasOwnProperty(n.keyCode||n.which)?y="."+f.keyPrefix+s.processName(s.typing_xref[n.keyCode||n.which]):(o=String.fromCharCode(n.charCode||n.which),y=d.hasOwnProperty(o)?"."+f.keyButton+'[data-value="'+d[o].replace(/"/g,'\\"')+'"]':"."+f.keyPrefix+s.processName(o))),c=u.filter(":visible").find(y),c.length?s.typing_simulateKey(c,t,n):(s.typing_event?c=u.find(y):(r=t in s.typing_keymap?s.typing_keymap[t]:s.processName(t),c=u.find("."+f.keyPrefix+r)),(l=c.closest("."+f.keySet)).attr("name")?(p.showTyping&&(g=l.attr("name"),s.shiftActive=/shift/.test(g),s.altActive=/alt/.test(g),s.metaActive=s.last.keyset[2]=!!/\bmeta/.test(g)&&g.match(/meta[\w-]+/)[0],s.showSet(s.metaActive)),s.typing_simulateKey(c,t,n)):s.typing_event||(t in s.typing_keymap&&s.typing_keymap[t]in i.keyaction?i.keyaction[s.typing_keymap[t]](s,c,n):s.insertText(t),s.checkCombos(),s.$el.trigger(i.events.kbChange,[s,s.el]))),p.current<=p.len&&0!==p.len){if(!s.isVisible())return;s.typing_timer=setTimeout(function(){s.typeIn()},p.delay)}else{if(0!==p.len)return s.typing_reset(),void(e.isFunction(p.callback)&&(s.typing_timer=setTimeout(function(){e.isFunction(p.callback)&&p.callback(s)},p.delay)));s.typing_reset()}},s.typing_simulateKey=function(t,n,y){var o=t.length;s.isVisible()&&(p.showTyping&&o&&(t.filter(":visible").trigger("mouseenter"+s.namespace),p.showTyping&&o&&setTimeout(function(){t.trigger("mouseleave"+s.namespace)},Math.min(p.hoverDelay,p.delay))),s.typing_event||setTimeout(function(){n in s.typing_keymap&&s.typing_keymap[n]in i.keyaction?((y=y||e.Event("keypress")).target=t,i.keyaction[s.typing_keymap[n]](s,t,y)):s.insertText(n),s.checkCombos(),s.$el.trigger(i.events.kbChange,[s,s.el])},p.delay/3))},p.showTyping&&s.options.alwaysOpen&&s.isVisible()?s.typing_setup():s.$el.unbind(i.events.kbBeforeVisible+s.typing_namespace).bind(i.events.kbBeforeVisible+s.typing_namespace,function(){p.showTyping?s.typing_setup():s.typing_setup_reset()}))})}});
\ No newline at end of file
diff --git a/dist/js/jquery.keyboard.js b/dist/js/jquery.keyboard.js
index 55c48c83..cc3cf46a 100644
--- a/dist/js/jquery.keyboard.js
+++ b/dist/js/jquery.keyboard.js
@@ -1,4 +1,4 @@
-/*! jQuery UI Virtual Keyboard v1.27.4 *//*
+/*! jQuery UI Virtual Keyboard v1.28.0 *//*
Author: Jeremy Satterfield
Maintained: Rob Garrison (Mottie on github)
Licensed under the MIT License
@@ -42,7 +42,7 @@ http://www.opensource.org/licenses/mit-license.php
var $keyboard = $.keyboard = function (el, options) {
var o, base = this;
- base.version = '1.27.4';
+ base.version = '1.28.0';
// Access to jQuery and DOM versions of element
base.$el = $(el);
@@ -197,8 +197,7 @@ http://www.opensource.org/licenses/mit-license.php
});
}
// add disabled/readonly class - dynamically updated on reveal
- if (base.$el.is(':disabled') || (!base.options.activeOnReadonly &&
- base.$el.attr('readonly') && !base.$el.hasClass(kbcss.locked))) {
+ if (base.isUnavailable()) {
base.$el.addClass(kbcss.noKeyboard);
}
if (o.openOn) {
@@ -270,6 +269,16 @@ http://www.opensource.org/licenses/mit-license.php
base.isOpen = true;
};
+ base.isUnavailable = function() {
+ return (
+ base.$el.is(':disabled') || (
+ !base.options.activeOnReadonly &&
+ base.$el.attr('readonly') &&
+ !base.$el.hasClass($keyboard.css.locked)
+ )
+ );
+ };
+
base.isCurrent = function (set) {
var cur = $keyboard.currentKeyboard || false;
if (set) {
@@ -350,13 +359,10 @@ http://www.opensource.org/licenses/mit-license.php
});
// Don't open if disabled
- if (base.$el.is(':disabled') || (!base.options.activeOnReadonly && base.$el.attr('readonly') &&
- !base.$el.hasClass(kbcss.locked))) {
- base.$el.addClass(kbcss.noKeyboard);
+ if (base.isUnavailable()) {
return;
- } else {
- base.$el.removeClass(kbcss.noKeyboard);
}
+ base.$el.removeClass(kbcss.noKeyboard);
// Unbind focus to prevent recursion - openOn may be empty if keyboard is opened externally
if (o.openOn) {
@@ -383,7 +389,7 @@ http://www.opensource.org/licenses/mit-license.php
}
// disable/enable accept button
- if (o.acceptValid) {
+ if (o.acceptValid && o.checkValidOnInit) {
base.checkValid();
}
@@ -572,7 +578,7 @@ http://www.opensource.org/licenses/mit-license.php
base.bindKeys();
// reposition keyboard on window resize
- if (o.reposition && $.ui && $.ui.position && o.appendTo == 'body') {
+ if (o.reposition && $.ui && $.ui.position && o.appendTo === 'body') {
$(window).bind('resize' + base.namespace, function () {
base.reposition();
});
@@ -1016,13 +1022,42 @@ http://www.opensource.org/licenses/mit-license.php
};
+ base.bindButton = function(events, handler) {
+ var button = '.' + $keyboard.css.keyButton,
+ callback = function(e) {
+ e.stopPropagation();
+ // save closest keyboard wrapper/input to check in checkClose function
+ e.$target = $(this).closest('.' + $keyboard.css.keyboard + ', .' + $keyboard.css.input);
+ handler.call(this, e);
+ };
+ if ($.fn.on) {
+ // jQuery v1.7+
+ base.$keyboard.on(events, button, callback);
+ } else if ($.fn.delegate) {
+ // jQuery v1.4.2 - 3.0.0
+ base.$keyboard.delegate(button, events, callback);
+ }
+ return base;
+ };
+
+ base.unbindButton = function(namespace) {
+ if ($.fn.off) {
+ // jQuery v1.7+
+ base.$keyboard.off(namespace);
+ } else if ($.fn.undelegate) {
+ // jQuery v1.4.2 - 3.0.0 (namespace only added in v1.6)
+ base.$keyboard.undelegate('.' + $keyboard.css.keyButton, namespace);
+ }
+ return base;
+ };
+
base.bindKeys = function () {
var kbcss = $keyboard.css;
- base.$allKeys = base.$keyboard.find('button.' + kbcss.keyButton)
- .unbind(base.namespace + ' ' + base.namespace + 'kb')
+ base
+ .unbindButton(base.namespace + ' ' + base.namespace + 'kb')
// Change hover class and tooltip - moved this touchstart before option.keyBinding touchstart
// to prevent mousewheel lag/duplication - Fixes #379 & #411
- .bind('mouseenter mouseleave touchstart '.split(' ').join(base.namespace + ' '), function (e) {
+ .bindButton('mouseenter mouseleave touchstart '.split(' ').join(base.namespace + ' '), function (e) {
if ((o.alwaysOpen || o.userClosed) && e.type !== 'mouseleave' && !base.isCurrent()) {
base.reveal();
base.setFocus();
@@ -1073,7 +1108,7 @@ http://www.opensource.org/licenses/mit-license.php
}
})
// keyBinding = 'mousedown touchstart' by default
- .bind(o.keyBinding.split(' ').join(base.namespace + ' ') + base.namespace + ' ' +
+ .bindButton(o.keyBinding.split(' ').join(base.namespace + ' ') + base.namespace + ' ' +
$keyboard.events.kbRepeater, function (e) {
e.preventDefault();
// prevent errors when external triggers attempt to 'type' - see issue #158
@@ -1082,8 +1117,7 @@ http://www.opensource.org/licenses/mit-license.php
}
var action, $keys,
last = base.last,
- key = this,
- $key = $(key),
+ $key = $(this),
// prevent mousedown & touchstart from both firing events at the same time - see #184
timer = new Date().getTime();
@@ -1102,7 +1136,7 @@ http://www.opensource.org/licenses/mit-license.php
last.virtual = true;
last.$key = $key;
last.key = $key.attr('data-value');
- last.keyPress = "";
+ last.keyPress = '';
// Start caret in IE when not focused (happens with each virtual keyboard button click
base.setFocus();
if (/^meta/.test(action)) {
@@ -1133,7 +1167,8 @@ http://www.opensource.org/licenses/mit-license.php
// set caret if caret moved by action function; also, attempt to fix issue #131
$keyboard.caret(base.$preview, last);
base.checkCombos();
- e.type = $keyboard.events.kbChange;
+ e = $.extend({}, e, $.Event($keyboard.events.kbChange));
+ e.target = base.el;
e.action = last.key;
base.$el.trigger(e, [base, base.el]);
last.preVal = '' + last.val;
@@ -1149,7 +1184,7 @@ http://www.opensource.org/licenses/mit-license.php
})
// using 'kb' namespace for mouse repeat functionality to keep it separate
// I need to trigger a 'repeater.keyboard' to make it work
- .bind('mouseup' + base.namespace + ' ' + 'mouseleave touchend touchmove touchcancel '.split(' ')
+ .bindButton('mouseup' + base.namespace + ' ' + 'mouseleave touchend touchmove touchcancel '.split(' ')
.join(base.namespace + 'kb '), function (e) {
base.last.virtual = true;
var offset,
@@ -1189,13 +1224,16 @@ http://www.opensource.org/licenses/mit-license.php
return false;
})
// prevent form submits when keyboard is bound locally - issue #64
- .bind('click' + base.namespace, function () {
+ .bindButton('click' + base.namespace, function () {
return false;
})
- // no mouse repeat for action keys (shift, ctrl, alt, meta, etc)
- .not('.' + kbcss.keyAction)
// Allow mousewheel to scroll through other keysets of the same (non-action) key
- .bind('mousewheel' + base.namespace, function (e, delta) {
+ .bindButton('mousewheel' + base.namespace, function (e, delta) {
+ var $btn = $(this);
+ // no mouse repeat for action keys (shift, ctrl, alt, meta, etc)
+ if (!$btn || $btn.hasClass(kbcss.keyAction)) {
+ return;
+ }
if (o.useWheel && base.wheel) {
// deltaY used by newer versions of mousewheel plugin
delta = delta || e.deltaY;
@@ -1213,22 +1251,29 @@ http://www.opensource.org/licenses/mit-license.php
n = 0;
}
base.last.wheelIndex = n;
- $(this).html(txt[n]);
+ $btn.html(txt[n]);
return false;
}
})
- // mouse repeated action key exceptions
- .add('.' + kbcss.keyPrefix + ('tab bksp space enter'.split(' ')
- .join(',.' + kbcss.keyPrefix)), base.$keyboard)
- .bind('mousedown touchstart '.split(' ').join(base.namespace + 'kb '), function () {
+ .bindButton('mousedown touchstart '.split(' ').join(base.namespace + 'kb '), function () {
+ var $btn = $(this);
+ // no mouse repeat for action keys (shift, ctrl, alt, meta, etc)
+ if (
+ !$btn || (
+ $btn.hasClass(kbcss.keyAction) &&
+ // mouse repeated action key exceptions
+ !$btn.is('.' + kbcss.keyPrefix + ('tab bksp space enter'.split(' ').join(',.' + kbcss.keyPrefix)))
+ )
+ ) {
+ return;
+ }
if (o.repeatRate !== 0) {
- var key = $(this);
// save the key, make sure we are repeating the right one (fast typers)
- base.mouseRepeat = [true, key];
+ base.mouseRepeat = [true, $btn];
setTimeout(function () {
// don't repeat keys if it is disabled - see #431
- if (base && base.mouseRepeat[0] && base.mouseRepeat[1] === key && !key[0].disabled) {
- base.repeatKey(key);
+ if (base && base.mouseRepeat[0] && base.mouseRepeat[1] === $btn && !$btn[0].disabled) {
+ base.repeatKey($btn);
}
}, o.repeatDelay);
}
@@ -1418,10 +1463,10 @@ http://www.opensource.org/licenses/mit-license.php
if (base.metaActive) {
// remove "-shift" and "-alt" from meta name if it exists
if (base.shiftActive) {
- name = (name || "").replace("-shift", "");
+ name = (name || '').replace('-shift', '');
}
if (base.altActive) {
- name = (name || "").replace("-alt", "");
+ name = (name || '').replace('-alt', '');
}
// the name attribute contains the meta set name 'meta99'
key = (/^meta/i.test(name)) ? name : '';
@@ -1466,7 +1511,7 @@ http://www.opensource.org/licenses/mit-license.php
.find('.' + kbcss.keySet)
.hide()
.end()
- .find('.' + (kbcss.keyAction + prefix + key).replace("--", "-"))
+ .find('.' + (kbcss.keyAction + prefix + key).replace('--', '-'))
.addClass(active);
// show keyset using inline-block ( extender layout will then line up )
@@ -1776,12 +1821,12 @@ http://www.opensource.org/licenses/mit-license.php
return;
}
var kbcss = $.keyboard.css,
- name = e.target.nodeName,
- $contenteditable = $(e.target).closest('[contenteditable]'),
- $target = $contenteditable.length ? $contenteditable : $(e.target);
- base.escClose(e, $target);
+ $target = e.$target || $(e.target).closest('.' + $keyboard.css.keyboard + ', .' + $keyboard.css.input);
+ if (!$target.length) {
+ $target = $(e.target);
+ }
// needed for IE to allow switching between keyboards smoothly
- if ($target.hasClass(kbcss.input)) {
+ if ($target.length && $target[0].className.indexOf(kbcss.keyboard) > -1) {
var kb = $target.data('keyboard');
// only trigger on self
if (
@@ -1792,6 +1837,8 @@ http://www.opensource.org/licenses/mit-license.php
) {
kb.focusOn();
}
+ } else {
+ base.escClose(e, $target);
}
};
@@ -1800,19 +1847,22 @@ http://www.opensource.org/licenses/mit-license.php
base.escCloseCallback = {
// keep keyboard open if alwaysOpen or stayOpen is true - fixes mutliple
// always open keyboards or single stay open keyboard
- keepOpen: function($target) {
+ keepOpen: function() {
return !base.isOpen;
}
};
base.escClose = function (e, $el) {
+ if (!base.isOpen) {
+ return;
+ }
if (e && e.type === 'keyup') {
return (e.which === $keyboard.keyCodes.escape && !o.ignoreEsc) ?
base.close(o.autoAccept && o.autoAcceptOnEsc ? 'true' : false) :
'';
}
var shouldStayOpen = false,
- $target = $el || $(e.target);
+ $target = $el.length && $el || $(e.target);
$.each(base.escCloseCallback, function(i, callback) {
if (typeof callback === 'function') {
shouldStayOpen = shouldStayOpen || callback($target);
@@ -1878,9 +1928,8 @@ http://www.opensource.org/licenses/mit-license.php
);
}
return newName.join('');
- } else {
- return name;
}
+ return name;
};
base.processKeys = function (name) {
@@ -2323,7 +2372,6 @@ http://www.opensource.org/licenses/mit-license.php
};
base.removeKeyboard = function () {
- base.$allKeys = [];
base.$decBtn = [];
// base.$preview === base.$el when o.usePreview is false - fixes #442
if (o.usePreview) {
@@ -2932,6 +2980,9 @@ http://www.opensource.org/licenses/mit-license.php
acceptValid: false,
// Auto-accept when input is valid; requires `acceptValid` set `true` & validate callback
autoAcceptOnValid: false,
+ // Check validation on keyboard initialization. If false, the "Accept" key state (color)
+ // will not change to show if the content is valid, or not
+ checkValidOnInit: true,
// if acceptValid is true & the validate function returns a false, this option will cancel
// a keyboard close only after the accept button is pressed
@@ -2997,6 +3048,7 @@ http://www.opensource.org/licenses/mit-license.php
// Event (namespaced) on the input to reveal the keyboard. To disable it, just set it to ''.
openOn: 'focus',
+ // enable the keyboard on readonly inputs
activeOnReadonly: false,
// Event (namepaced) for when the character is added to the input (clicking on the keyboard)
@@ -3055,7 +3107,7 @@ http://www.opensource.org/licenses/mit-license.php
// value ( like this "keyboard.$preview.val('');" ), if desired. The validate function is called after
// each input, the 'isClosing' value will be false; when the accept button is clicked,
// 'isClosing' is true
- validate: function (keyboard, value, isClosing) {
+ validate: function (/* keyboard, value, isClosing */) {
return true;
}
@@ -3284,7 +3336,7 @@ http://www.opensource.org/licenses/mit-license.php
max = 0,
nodes = $.makeArray(container.childNodes);
function updateText(val) {
- txt += val ? options && options.replaceCR || "\n" : "";
+ txt += val ? options && options.replaceCR || '\n' : '';
return val > 0;
}
function checkDone(adj) {
@@ -3337,13 +3389,13 @@ http://www.opensource.org/licenses/mit-license.php
range.setStart(result.node, result.offset);
// Only find end if > start and is defined... this allows passing
// setEditableCaret(el, 'end') or setEditableCaret(el, 10, 'end');
- if (typeof end !== "undefined" && end !== start) {
+ if (typeof end !== 'undefined' && end !== start) {
result = findNode(end);
}
if (result.node) {
e = result.position; // Adjust if end > content length
range.setEnd(result.node, result.offset);
- text = s === e ? "" : result.text.substring(s, e);
+ text = s === e ? '' : result.text.substring(s, e);
}
sel.removeAllRanges();
sel.addRange(range);
@@ -3446,46 +3498,45 @@ http://www.opensource.org/licenses/mit-license.php
}
el.scrollTop = sTop;
return this;
- } else {
- if (/(email|number)/i.test(el.type)) {
- // fix suggested by raduanastase (https://github.com/Mottie/Keyboard/issues/105#issuecomment-40456535)
- start = end = $el.val().length;
- } else if (ss) {
- start = el.selectionStart;
- end = el.selectionEnd;
- } else if (selection) {
- if (el.nodeName === 'TEXTAREA') {
- val = $el.val();
- range = selection.createRange();
- stored_range = range.duplicate();
- stored_range.moveToElementText(el);
- stored_range.setEndPoint('EndToEnd', range);
- // thanks to the awesome comments in the rangy plugin
- start = stored_range.text.replace(/\r/g, '\n').length;
- end = start + range.text.replace(/\r/g, '\n').length;
- } else {
- val = $el.val().replace(/\r/g, '\n');
- range = selection.createRange().duplicate();
- range.moveEnd('character', val.length);
- start = (range.text === '' ? val.length : val.lastIndexOf(range.text));
- range = selection.createRange().duplicate();
- range.moveStart('character', -val.length);
- end = range.text.length;
- }
+ }
+ if (/(email|number)/i.test(el.type)) {
+ // fix suggested by raduanastase (https://github.com/Mottie/Keyboard/issues/105#issuecomment-40456535)
+ start = end = $el.val().length;
+ } else if (ss) {
+ start = el.selectionStart;
+ end = el.selectionEnd;
+ } else if (selection) {
+ if (el.nodeName === 'TEXTAREA') {
+ val = $el.val();
+ range = selection.createRange();
+ stored_range = range.duplicate();
+ stored_range.moveToElementText(el);
+ stored_range.setEndPoint('EndToEnd', range);
+ // thanks to the awesome comments in the rangy plugin
+ start = stored_range.text.replace(/\r/g, '\n').length;
+ end = start + range.text.replace(/\r/g, '\n').length;
} else {
- // caret positioning not supported
- start = end = (el.value || '').length;
+ val = $el.val().replace(/\r/g, '\n');
+ range = selection.createRange().duplicate();
+ range.moveEnd('character', val.length);
+ start = (range.text === '' ? val.length : val.lastIndexOf(range.text));
+ range = selection.createRange().duplicate();
+ range.moveStart('character', -val.length);
+ end = range.text.length;
}
- txt = (el.value || '');
- return {
- start: start,
- end: end,
- text: txt.substring(start, end),
- replace: function (str) {
- return txt.substring(0, start) + str + txt.substring(end, txt.length);
- }
- };
+ } else {
+ // caret positioning not supported
+ start = end = (el.value || '').length;
}
+ txt = (el.value || '');
+ return {
+ start: start,
+ end: end,
+ text: txt.substring(start, end),
+ replace: function (str) {
+ return txt.substring(0, start) + str + txt.substring(end, txt.length);
+ }
+ };
};
return $keyboard;
diff --git a/dist/js/jquery.keyboard.min.js b/dist/js/jquery.keyboard.min.js
index 075d4869..8569180b 100644
--- a/dist/js/jquery.keyboard.min.js
+++ b/dist/js/jquery.keyboard.min.js
@@ -1,2 +1,2 @@
-/*! jQuery UI Virtual Keyboard v1.27.4 */
-!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"use strict";var t=e.keyboard=function(a,i){var n,s=this;s.version="1.27.4",s.$el=e(a),s.el=a,s.$el.data("keyboard",s),s.init=function(){s.initialized=!1;var a,o,r,l=t.css,c=t.events;s.settings=i||{},i&&i.position&&(o=e.extend({},i.position),i.position=null),s.options=n=e.extend(!0,{},t.defaultOptions,i),o&&(n.position=o,i.position=o),s.el.active=!0,s.namespace=".keyboard"+Math.random().toString(16).slice(2),s.extensionNamespace=[],s.shiftActive=s.altActive=s.metaActive=s.sets=s.capsLock=!1,s.rows=["","-shift","-alt","-alt-shift"],s.inPlaceholder=s.$el.attr("placeholder")||"",s.watermark=t.watermark&&""!==s.inPlaceholder,s.repeatTime=1e3/(n.repeatRate||20),n.preventDoubleEventTime=n.preventDoubleEventTime||100,s.isOpen=!1,s.wheel=e.isFunction(e.fn.mousewheel),s.escapeRegex=/[-\/\\^$*+?.()|[\]{}]/g,s.isContentEditable=!/(input|textarea)/i.test(s.el.nodeName)&&s.el.isContentEditable,a=t.keyCodes,s.alwaysAllowed=[a.capsLock,a.pageUp,a.pageDown,a.end,a.home,a.left,a.up,a.right,a.down,a.insert,a.delete],s.$keyboard=[],s.enabled=!0,s.checkCaret=n.lockInput||t.checkCaretSupport(),s.isContentEditable&&(n.usePreview=!1),s.last={start:0,end:0,key:"",val:"",preVal:"",layout:"",virtual:!0,keyset:[!1,!1,!1],wheel_$Keys:null,wheelIndex:0,wheelLayers:[]},s.temp=["",0,0],e.each([c.kbInit,c.kbBeforeVisible,c.kbVisible,c.kbHidden,c.inputCanceled,c.inputAccepted,c.kbBeforeClose,c.inputRestricted],function(t,a){e.isFunction(n[a])&&s.$el.bind(a+s.namespace+"callbacks",n[a])}),n.alwaysOpen&&(n.stayOpen=!0),r=e(document),s.el.ownerDocument!==document&&(r=r.add(s.el.ownerDocument));var d="keyup checkkeyboard mousedown touchstart ";n.closeByClickEvent&&(d+="click "),r.bind(d.split(" ").join(s.namespace+" "),function(e){clearTimeout(s.timer3),s.timer3=setTimeout(function(){s.checkClose(e)},1)}),s.$el.addClass(l.input+" "+n.css.input).attr({"aria-haspopup":"true",role:"textbox"}),(n.lockInput||s.el.readOnly)&&(n.lockInput=!0,s.$el.addClass(l.locked).attr({readonly:"readonly"})),(s.$el.is(":disabled")||!s.options.activeOnReadonly&&s.$el.attr("readonly")&&!s.$el.hasClass(l.locked))&&s.$el.addClass(l.noKeyboard),n.openOn&&s.bindFocus(),s.watermark||""!==s.getValue(s.$el)||""===s.inPlaceholder||""===s.$el.attr("placeholder")||(s.$el.addClass(l.placeholder),s.setValue(s.inPlaceholder,s.$el)),s.$el.trigger(c.kbInit,[s,s.el]),n.alwaysOpen&&s.reveal(),s.initialized=!0},s.toggle=function(){if(s.hasKeyboard()){var e=s.$keyboard.find("."+t.css.keyToggle),a=!s.enabled;return s.preview.readonly=a||s.options.lockInput,s.$keyboard.toggleClass(t.css.keyDisabled,a).find("."+t.css.keyButton).not(e).attr("aria-disabled",a).each(function(){this.disabled=a}),e.toggleClass(t.css.keyDisabled,a),a&&s.typing_options&&(s.typing_options.text=""),s}},s.setCurrent=function(){var a=t.css,i=e("."+a.isCurrent),n=i.data("keyboard");e.isEmptyObject(n)||n.el===s.el||n.close(!!n.options.autoAccept&&"true"),i.removeClass(a.isCurrent),e("."+a.hasFocus).removeClass(a.hasFocus),s.$el.addClass(a.isCurrent),s.$keyboard.addClass(a.hasFocus),s.isCurrent(!0),s.isOpen=!0},s.isCurrent=function(e){var a=t.currentKeyboard||!1;return e?a=t.currentKeyboard=s.el:!1===e&&a===s.el&&(a=t.currentKeyboard=""),a===s.el},s.hasKeyboard=function(){return s.$keyboard&&s.$keyboard.length>0},s.isVisible=function(){return!!s.hasKeyboard()&&s.$keyboard.is(":visible")},s.setFocus=function(){var e=s.$preview||s.$el;n.noFocus||e.focus(),s.isContentEditable?t.setEditableCaret(e,s.last.start,s.last.end):t.caret(e,s.last)},s.focusOn=function(){!s&&s.el.active||(s.isVisible()?s.setCurrent():(clearTimeout(s.timer),s.reveal()))},s.redraw=function(e){return e&&(s.options.layout=e),s.$keyboard.length&&(s.last.preVal=""+s.last.val,s.saveLastChange(),s.setValue(s.last.val,s.$el),s.removeKeyboard(),s.shiftActive=s.altActive=s.metaActive=!1),s.isOpen=n.alwaysOpen,s.reveal(!0),s},s.reveal=function(a){var i,o=s.isOpen,r=t.css;if(s.opening=!o,e("."+r.keyboard).not("."+r.alwaysOpen).each(function(){var t=e(this).data("keyboard");e.isEmptyObject(t)||t.close(!!t.options.autoAccept&&"true")}),!s.$el.is(":disabled")&&(s.options.activeOnReadonly||!s.$el.attr("readonly")||s.$el.hasClass(r.locked)))return s.$el.removeClass(r.noKeyboard),n.openOn&&s.$el.unbind(e.trim((n.openOn+" ").split(/\s+/).join(s.namespace+" "))),s.$keyboard&&(!s.$keyboard||s.$keyboard.length&&!e.contains(s.el.ownerDocument.body,s.$keyboard[0]))||s.startup(),s.watermark||s.getValue()!==s.inPlaceholder||(s.$el.removeClass(r.placeholder),s.setValue("",s.$el)),s.originalContent=s.isContentEditable?s.$el.html():s.getValue(s.$el),s.el===s.preview||s.isContentEditable||s.setValue(s.originalContent),n.acceptValid&&s.checkValid(),n.resetDefault&&(s.shiftActive=s.altActive=s.metaActive=!1),s.showSet(),s.isVisible()||s.$el.trigger(t.events.kbBeforeVisible,[s,s.el]),(s.initialized||n.initialFocus||!n.initialFocus&&s.$el.hasClass(t.css.initialFocus))&&s.setCurrent(),s.toggle(),s.$keyboard.show(),n.usePreview&&t.msie&&(void 0===s.width&&(s.$preview.hide(),s.width=Math.ceil(s.$keyboard.width()),s.$preview.show()),s.$preview.width(s.width)),s.reposition(),s.checkDecimal(),s.lineHeight=parseInt(s.$preview.css("lineHeight"),10)||parseInt(s.$preview.css("font-size"),10)+4,n.caretToEnd&&(i=s.isContentEditable?t.getEditableLength(s.el):s.originalContent.length,s.saveCaret(i,i)),t.allie&&(0===s.last.end&&s.last.start>0&&(s.last.end=s.last.start),s.last.start<0&&(s.last.start=s.last.end=s.originalContent.length)),o||a?(t.caret(s.$preview,s.last),s):(s.timer2=setTimeout(function(){var e;s.opening=!1,/(number|email)/i.test(s.el.type)||n.caretToEnd||s.saveCaret(e,e,s.$el),(n.initialFocus||s.$el.hasClass(t.css.initialFocus))&&t.caret(s.$preview,s.last),s.last.eventTime=(new Date).getTime(),s.$el.trigger(t.events.kbVisible,[s,s.el]),s.timer=setTimeout(function(){s&&s.saveCaret()},200)},10),s);s.$el.addClass(r.noKeyboard)},s.updateLanguage=function(){var a=t.layouts,i=n.language||a[n.layout]&&a[n.layout].lang&&a[n.layout].lang||[n.language||"en"],o=t.language;i=e.isArray(i)?i[0]:i,s.language=i,i=i.split("-")[0],n.display=e.extend(!0,{},o.en.display,o[i]&&o[i].display||{},s.settings.display),n.combos=e.extend(!0,{},o.en.combos,o[i]&&o[i].combos||{},s.settings.combos),n.wheelMessage=o[i]&&o[i].wheelMessage||o.en.wheelMessage,n.rtl=a[n.layout]&&a[n.layout].rtl||o[i]&&o[i].rtl||!1,s.regex=o[i]&&o[i].comboRegex||t.comboRegex,s.decimal=/^\./.test(n.display.dec),s.$el.toggleClass("rtl",n.rtl).css("direction",n.rtl?"rtl":"")},s.startup=function(){var a=t.css;(n.alwaysOpen||n.userClosed)&&s.$preview||s.makePreview(),s.hasKeyboard()||("custom"===n.layout&&(n.layoutHash="custom"+s.customHash()),s.layout="custom"===n.layout?n.layoutHash:n.layout,s.last.layout=s.layout,s.updateLanguage(),void 0===t.builtLayouts[s.layout]&&(e.isFunction(n.create)?s.$keyboard=n.create(s):s.$keyboard.length||s.buildKeyboard(s.layout,!0)),s.$keyboard=t.builtLayouts[s.layout].$keyboard.clone(),s.$keyboard.data("keyboard",s),""!==(s.el.id||"")&&s.$keyboard.attr("id",s.el.id+t.css.idSuffix),s.makePreview()),s.$keyboard.attr("data-"+a.keyboard+"-layout",n.layout).attr("data-"+a.keyboard+"-language",s.language),s.$decBtn=s.$keyboard.find("."+a.keyPrefix+"dec"),(n.enterNavigation||"TEXTAREA"===s.el.nodeName)&&s.alwaysAllowed.push(13),s.bindKeyboard(),s.$keyboard.appendTo(n.appendLocally?s.$el.parent():n.appendTo||"body"),s.bindKeys(),n.reposition&&e.ui&&e.ui.position&&"body"==n.appendTo&&e(window).bind("resize"+s.namespace,function(){s.reposition()})},s.reposition=function(){return s.position=!e.isEmptyObject(n.position)&&n.position,e.ui&&e.ui.position&&s.position&&(s.position.of=s.position.of||s.$el.data("keyboardPosition")||s.$el,s.position.collision=s.position.collision||"flipfit flipfit",s.position.at=n.usePreview?n.position.at:n.position.at2,s.isVisible()&&s.$keyboard.position(s.position)),s},s.makePreview=function(){if(n.usePreview){var a,i,o,r,l=t.css;for(s.$preview=s.$el.clone(!1).data("keyboard",s).removeClass(l.placeholder+" "+l.input).addClass(l.preview+" "+n.css.input).attr("tabindex","-1").show(),s.preview=s.$preview[0],"number"===s.preview.type&&(s.preview.type="text"),r=/^(data-|id|aria-haspopup)/i,a=(i=s.$preview.get(0).attributes).length-1;a>=0;a--)o=i[a]&&i[a].name,r.test(o)&&s.preview.removeAttribute(o);e("").addClass(l.wrapper).append(s.$preview).prependTo(s.$keyboard)}else s.$preview=s.$el,s.preview=s.el},s.caret=function(a,i){var n=t.caret(s.$preview,a,i);return n instanceof e?(s.saveCaret(n.start,n.end),s):n},s.saveCaret=function(e,a,i){var n;s.isCurrent()&&(n=void 0===e?t.caret(i||s.$preview):t.caret(i||s.$preview,e,a),s.last.start=void 0===e?n.start:e,s.last.end=void 0===a?n.end:a)},s.saveLastChange=function(e){s.last.val=e||s.getValue(s.$preview||s.$el),s.isContentEditable&&(s.last.elms=s.el.cloneNode(!0))},s.setScroll=function(){if(!s.isContentEditable&&s.last.virtual){var e,a,i,o,r="TEXTAREA"===s.preview.nodeName,l=s.last.val.substring(0,Math.max(s.last.start,s.last.end));s.$previewCopy||(s.$previewCopy=s.$preview.clone().removeAttr("id").css({position:"absolute",left:0,zIndex:-10,visibility:"hidden"}).addClass(t.css.inputClone),s.$previewCopy[0].disabled=!0,r||s.$previewCopy.css({"white-space":"pre",width:0}),n.usePreview?s.$preview.after(s.$previewCopy):s.$keyboard.prepend(s.$previewCopy)),r?(s.$previewCopy.height(s.lineHeight).val(l),s.preview.scrollTop=s.lineHeight*(Math.floor(s.$previewCopy[0].scrollHeight/s.lineHeight)-1)):(s.$previewCopy.val(l.replace(/\s/g," ")),i=/c/i.test(n.scrollAdjustment)?s.preview.clientWidth/2:n.scrollAdjustment,e=s.$previewCopy[0].scrollWidth-1,void 0===s.last.scrollWidth&&(s.last.scrollWidth=e,s.last.direction=!0),o=s.last.scrollWidth===e?s.last.direction:s.last.scrollWidth=s.preview.scrollWidth-a?s.preview.scrollLeft=s.preview.scrollWidth-i:s.preview.scrollLeft=e-i>0?e-i:0,s.last.scrollWidth=e,s.last.direction=o)}},s.bindFocus=function(){n.openOn&&s&&s.el.active&&(s.$el.bind(n.openOn+s.namespace,function(){s.focusOn()}),e(":focus")[0]===s.el&&s.$el.blur())},s.bindKeyboard=function(){var a,i=t.keyCodes,o=t.builtLayouts[s.layout],r=s.namespace+"keybindings";s.$preview.unbind(s.namespace).bind("click"+r+" touchstart"+r,function(){n.alwaysOpen&&!s.isCurrent()&&s.reveal(),s.timer2=setTimeout(function(){s&&s.saveCaret()},150)}).bind("keypress"+r,function(r){if(n.lockInput)return!1;if(s.isCurrent()){var l=r.charCode||r.which,c=l>=i.A&&l<=i.Z,d=l>=i.a&&l<=i.z,u=s.last.key=String.fromCharCode(l);if(!(l=i.X&&r.which<=i.Z))return;o.hasMappedKeys&&o.mappedKeys.hasOwnProperty(u)&&(s.last.key=o.mappedKeys[u],s.insertText(s.last.key),r.preventDefault()),"function"==typeof n.beforeInsert&&(s.insertText(s.last.key),r.preventDefault()),s.checkMaxLength()}}}).bind("keyup"+r,function(a){if(s.isCurrent()){switch(s.last.virtual=!1,a.which){case i.tab:if(s.tab&&n.tabNavigation&&!n.lockInput){s.shiftActive=a.shiftKey;var o=t.keyaction.tab(s);if(s.tab=!1,!o)return!1}else a.preventDefault();break;case i.escape:return n.ignoreEsc||s.close(!(!n.autoAccept||!n.autoAcceptOnEsc)&&"true"),!1}clearTimeout(s.throttled),s.throttled=setTimeout(function(){s&&s.isVisible()&&s.checkCombos()},100),s.checkMaxLength(),s.last.preVal=""+s.last.val,s.saveLastChange();var r=e.Event(t.events.kbChange);if(r.action=s.last.key,s.$el.trigger(r,[s,s.el]),e.isFunction(n.change))return r.type=t.events.inputChange,n.change(r,s,s.el),!1;n.acceptValid&&n.autoAcceptOnValid&&e.isFunction(n.validate)&&n.validate(s,s.getValue(s.$preview))&&(s.$preview.blur(),s.accept())}}).bind("keydown"+r,function(e){if(s.last.keyPress=e.which,n.alwaysOpen&&!s.isCurrent()&&s.reveal(),e.which===i.tab)return s.tab=!0,!1;if(n.lockInput)return!1;switch(s.last.virtual=!1,e.which){case i.backSpace:t.keyaction.bksp(s,null,e),e.preventDefault();break;case i.enter:t.keyaction.enter(s,null,e);break;case i.capsLock:s.shiftActive=s.capsLock=!s.capsLock,s.showSet();break;case i.V:if(e.ctrlKey||e.metaKey){if(n.preventPaste)return void e.preventDefault();s.checkCombos()}}}).bind("mouseup touchend ".split(" ").join(r+" "),function(){s.last.virtual=!0,s.saveCaret()}),s.$keyboard.bind("mousedown click touchstart ".split(" ").join(s.namespace+" "),function(t){t.stopPropagation(),s.isCurrent()||(s.reveal(),e(s.el.ownerDocument).trigger("checkkeyboard"+s.namespace)),s.setFocus()}),n.preventPaste&&(s.$preview.bind("contextmenu"+s.namespace,function(e){e.preventDefault()}),s.$el.bind("contextmenu"+s.namespace,function(e){e.preventDefault()}))},s.bindKeys=function(){var a=t.css;s.$allKeys=s.$keyboard.find("button."+a.keyButton).unbind(s.namespace+" "+s.namespace+"kb").bind("mouseenter mouseleave touchstart ".split(" ").join(s.namespace+" "),function(t){if(!n.alwaysOpen&&!n.userClosed||"mouseleave"===t.type||s.isCurrent()||(s.reveal(),s.setFocus()),s.isCurrent()&&!this.disabled){var a,i,o=s.last,r=e(this),l=t.type;n.useWheel&&s.wheel&&(a=s.getLayers(r),i=(a.length?a.map(function(){return e(this).attr("data-value")||""}).get():"")||[r.text()],o.wheel_$Keys=a,o.wheelLayers=i,o.wheelIndex=e.inArray(r.attr("data-value"),i)),"mouseenter"!==l&&"touchstart"!==l||"password"===s.el.type||r.hasClass(n.css.buttonDisabled)||(r.addClass(n.css.buttonHover),n.useWheel&&s.wheel&&r.attr("title",function(e,t){return s.wheel&&""===t&&s.sets&&i.length>1&&"touchstart"!==l?n.wheelMessage:t})),"mouseleave"===l&&(r.removeClass("password"===s.el.type?"":n.css.buttonHover),n.useWheel&&s.wheel&&(o.wheelIndex=0,o.wheelLayers=[],o.wheel_$Keys=null,r.attr("title",function(e,t){return t===n.wheelMessage?"":t}).html(r.attr("data-html"))))}}).bind(n.keyBinding.split(" ").join(s.namespace+" ")+s.namespace+" "+t.events.kbRepeater,function(i){if(i.preventDefault(),!s.$keyboard.is(":visible")||this.disabled)return!1;var o,r,l=s.last,c=e(this),d=(new Date).getTime();if(n.useWheel&&s.wheel&&(c=(r=l.wheel_$Keys)&&l.wheelIndex>-1?r.eq(l.wheelIndex):c),o=c.attr("data-action"),!(d-(l.eventTime||0)=i.left&&a.originalEvent.touches[0].pageX=i.top&&a.originalEvent.touches[0].pageY1?((i=s.last.wheelIndex+(a>0?-1:1))>o.length-1&&(i=0),i<0&&(i=o.length-1)):i=0,s.last.wheelIndex=i,e(this).html(o[i]),!1}}).add("."+a.keyPrefix+"tab bksp space enter".split(" ").join(",."+a.keyPrefix),s.$keyboard).bind("mousedown touchstart ".split(" ").join(s.namespace+"kb "),function(){if(0!==n.repeatRate){var t=e(this);s.mouseRepeat=[!0,t],setTimeout(function(){s&&s.mouseRepeat[0]&&s.mouseRepeat[1]===t&&!t[0].disabled&&s.repeatKey(t)},n.repeatDelay)}return!1})},s.execCommand=function(e,t){s.el.ownerDocument.execCommand(e,!1,t),s.el.normalize(),n.reposition&&s.reposition()},s.getValue=function(e){return(e=e||s.$preview)[s.isContentEditable?"text":"val"]()},s.setValue=function(e,a){return a=a||s.$preview,s.isContentEditable?e!==a.text()&&(t.replaceContent(a,e),s.saveCaret()):a.val(e),s},s.insertText=function(e){if(!s.$preview)return s;if("function"==typeof n.beforeInsert&&(e=n.beforeInsert(s.last.event,s,s.el,e)),void 0===e||!1===e)return s.last.key="",s;if(s.isContentEditable)return s.insertContentEditable(e);var a,i=!1,o="\b"===e,r=s.getValue(),l=t.caret(s.$preview),c=r.length;return l.endc&&(l.end=l.start=c),"TEXTAREA"===s.preview.nodeName&&t.msie&&"\n"===r.substr(l.start,1)&&(l.start+=1,l.end+=1),a=l.start,"{d}"===e&&(e="",l.end+=1),o&&(e="",i=o&&a===l.end&&a>0),r=r.substr(0,a-(i?1:0))+e+r.substr(l.end),a+=i?-1:e.length,s.setValue(r),s.saveCaret(a,a),s.setScroll(),s},s.insertContentEditable=function(e){return s.$preview.focus(),s.execCommand("insertText",e),s.saveCaret(),s},s.checkMaxLength=function(){if(s.$preview){var e,a,i=s.getValue(),o=s.isContentEditable?t.getEditableLength(s.el):i.length;return!1!==n.maxLength&&o>n.maxLength&&(e=t.caret(s.$preview).start,a=Math.min(e,n.maxLength),n.maxInsert||(i=s.last.val,a=e-1),s.setValue(i.substring(0,n.maxLength)),s.saveCaret(a,a)),s.$decBtn.length&&s.checkDecimal(),s}},s.repeatKey=function(e){e.trigger(t.events.kbRepeater),s.mouseRepeat[0]&&(s.repeater=setTimeout(function(){s&&s.repeatKey(e)},s.repeatTime))},s.getKeySet=function(){var e=[];return s.altActive&&e.push("alt"),s.shiftActive&&e.push("shift"),s.metaActive&&e.push(s.metaActive),e.length?e.join("+"):"normal"},s.showKeySet=function(e){return"string"==typeof e?(s.last.keyset=[s.shiftActive,s.altActive,s.metaActive],s.shiftActive=/shift/i.test(e),s.altActive=/alt/i.test(e),/\bmeta/.test(e)?(s.metaActive=!0,s.showSet(e.match(/\bmeta[\w-]+/i)[0])):(s.metaActive=!1,s.showSet())):s.showSet(e),s},s.showSet=function(e){if(s.hasKeyboard()){n=s.options;var a=t.css,i="."+a.keyPrefix,o=n.css.buttonActive,r="",l=(s.shiftActive?1:0)+(s.altActive?2:0);if(s.shiftActive||(s.capsLock=!1),s.metaActive?(s.shiftActive&&(e=(e||"").replace("-shift","")),s.altActive&&(e=(e||"").replace("-alt","")),""===(r=/^meta/i.test(e)?e:"")?r=!0===s.metaActive?"":s.metaActive:s.metaActive=r,(!n.stickyShift&&s.last.keyset[2]!==s.metaActive||(s.shiftActive||s.altActive)&&!s.$keyboard.find("."+a.keySet+"-"+r+s.rows[l]).length)&&(s.shiftActive=s.altActive=!1)):!n.stickyShift&&s.last.keyset[2]!==s.metaActive&&s.shiftActive&&(s.shiftActive=s.altActive=!1),r=0!==(l=(s.shiftActive?1:0)+(s.altActive?2:0))||s.metaActive?""===r?"":"-"+r:"-normal",!s.$keyboard.find("."+a.keySet+r+s.rows[l]).length)return s.shiftActive=s.last.keyset[0],s.altActive=s.last.keyset[1],void(s.metaActive=s.last.keyset[2]);s.$keyboard.find(i+"alt,"+i+"shift,."+a.keyAction+"[class*=meta]").removeClass(o).end().find(i+"alt").toggleClass(o,s.altActive).end().find(i+"shift").toggleClass(o,s.shiftActive).end().find(i+"lock").toggleClass(o,s.capsLock).end().find("."+a.keySet).hide().end().find("."+(a.keyAction+i+r).replace("--","-")).addClass(o),s.$keyboard.find("."+a.keySet+r+s.rows[l])[0].style.display="inline-block",s.metaActive&&s.$keyboard.find(i+s.metaActive).toggleClass(o,!1!==s.metaActive),s.last.keyset=[s.shiftActive,s.altActive,s.metaActive],s.$el.trigger(t.events.kbKeysetChange,[s,s.el]),n.reposition&&s.reposition()}},s.checkCombos=function(){if(!(s.isVisible()||s.hasKeyboard()&&s.$keyboard.hasClass(t.css.hasFocus)))return s.getValue(s.$preview||s.$el);var i,o,r,l,c=s.getValue(),d=t.caret(s.$preview),u=t.builtLayouts[s.layout],p=s.isContentEditable?t.getEditableLength(s.el):c.length,h=p;return""===c?(n.acceptValid&&s.checkValid(),c):(d.endh&&(d.end=d.start=h),t.msie&&"\n"===c.substr(d.start,1)&&(d.start+=1,d.end+=1),n.useCombos&&(t.msie?c=c.replace(s.regex,function(e,t,a){return n.combos.hasOwnProperty(t)&&n.combos[t][a]||e}):s.$preview.length&&(o=d.start-(d.start-2>=0?2:0),t.caret(s.$preview,o,d.end),r=(l=function(e){return(e||"").replace(s.regex,function(e,t,a){return n.combos.hasOwnProperty(t)&&n.combos[t][a]||e})})((o=t.caret(s.$preview)).text),o&&o.replaceStr&&r!==o.text&&(s.isContentEditable?t.replaceContent(a,l):s.setValue(o.replaceStr(r))),c=s.getValue())),n.restrictInput&&""!==c&&(o=u.acceptedKeys.length,(i=u.acceptedKeysRegex)||(r=e.map(u.acceptedKeys,function(e){return e.replace(s.escapeRegex,"\\$&")}),i=u.acceptedKeysRegex=new RegExp("("+r.join("|")+")","g")),(r=c.match(i))?c=r.join(""):(c="",h=0)),d.start+=p-h,d.end+=p-h,s.setValue(c),s.saveCaret(d.start,d.end),s.setScroll(),s.checkMaxLength(),n.acceptValid&&s.checkValid(),c)},s.checkValid=function(){var a=t.css,i=s.$keyboard.find("."+a.keyPrefix+"accept"),o=!0;e.isFunction(n.validate)&&(o=n.validate(s,s.getValue(),!1)),i.toggleClass(a.inputInvalid,!o).toggleClass(a.inputValid,o).attr("title",i.attr("data-title")+" ("+n.display[o?"valid":"invalid"]+")")},s.checkDecimal=function(){s.decimal&&/\./g.test(s.preview.value)||!s.decimal&&/\,/g.test(s.preview.value)?s.$decBtn.attr({disabled:"disabled","aria-disabled":"true"}).removeClass(n.css.buttonHover).addClass(n.css.buttonDisabled):s.$decBtn.removeAttr("disabled").attr({"aria-disabled":"false"}).addClass(n.css.buttonDefault).removeClass(n.css.buttonDisabled)},s.getLayers=function(a){var i=t.css,n=a.attr("data-pos");return a.closest("."+i.keyboard).find('button[data-pos="'+n+'"]').filter(function(){return""!==e(this).find("."+i.keyText).text()}).add(a)},s.switchInput=function(t,a){if(e.isFunction(n.switchInput))n.switchInput(s,t,a);else{s.$keyboard.length&&s.$keyboard.hide();var i,o=!1,r=e("button, input, select, textarea, a, [contenteditable]").filter(":visible").not(":disabled"),l=r.index(s.$el)+(t?1:-1);if(s.$keyboard.length&&s.$keyboard.show(),l>r.length-1&&(o=n.stopAtEnd,l=0),l<0&&(o=n.stopAtEnd,l=r.length-1),!o){if(!(a=s.close(a)))return;(i=r.eq(l).data("keyboard"))&&i.options.openOn.length?i.focusOn():r.eq(l).focus()}}return!1},s.close=function(a){if(s.isOpen&&s.$keyboard.length){clearTimeout(s.throttled);var i=t.css,o=t.events,r=a?s.checkCombos():s.originalContent;if(a&&e.isFunction(n.validate)&&!n.validate(s,r,!0)&&(r=s.originalContent,a=!1,n.cancelClose))return;s.isCurrent(!1),s.isOpen=n.alwaysOpen||n.userClosed,s.isContentEditable&&!a?s.$el.html(r):s.setValue(r,s.$el),s.$el.removeClass(i.isCurrent+" "+i.inputAutoAccepted).addClass(a?!0===a?"":i.inputAutoAccepted:"").trigger(o.inputChange),n.alwaysOpen||s.$el.trigger(o.kbBeforeClose,[s,s.el,a||!1]),t.caret(s.$preview,s.last),s.$el.trigger(a?o.inputAccepted:o.inputCanceled,[s,s.el]).trigger(n.alwaysOpen?o.kbInactive:o.kbHidden,[s,s.el]).blur(),s&&(s.last.eventTime=(new Date).getTime(),n.alwaysOpen||n.userClosed&&"true"===a||!s.$keyboard.length||(s.removeKeyboard(),s.timer=setTimeout(function(){s&&s.bindFocus()},500)),s.watermark||""!==s.el.value||""===s.inPlaceholder||(s.$el.addClass(i.placeholder),s.setValue(s.inPlaceholder,s.$el)))}return!!a},s.accept=function(){return s.close(!0)},s.checkClose=function(t){if(!s.opening){var a=e.keyboard.css,i=(t.target.nodeName,e(t.target).closest("[contenteditable]")),o=i.length?i:e(t.target);if(s.escClose(t,o),o.hasClass(a.input)){var r=o.data("keyboard");r!==s&&!r.$el.hasClass(a.isCurrent)&&r.options.openOn&&t.type===n.openOn&&r.focusOn()}}},s.escCloseCallback={keepOpen:function(e){return!s.isOpen}},s.escClose=function(a,i){if(a&&"keyup"===a.type)return a.which!==t.keyCodes.escape||n.ignoreEsc?"":s.close(!(!n.autoAccept||!n.autoAcceptOnEsc)&&"true");var o=!1,r=i||e(a.target);if(e.each(s.escCloseCallback,function(e,t){"function"==typeof t&&(o=o||t(r))}),!o&&(!s.isCurrent()&&s.isOpen||s.isOpen&&r[0]!==s.el)){if((n.stayOpen||n.userClosed)&&!r.hasClass(t.css.input))return;if(t.allie&&a.preventDefault(),n.closeByClickEvent){var l=r[0]&&r[0].nodeName.toLowerCase();"input"!==l&&"textarea"!==l&&"click"!==a.type||s.close(!!n.autoAccept&&"true")}else s.close(!!n.autoAccept&&"true")}},s.keyBtn=e("").attr({role:"button",type:"button","aria-disabled":"false",tabindex:"-1"}).addClass(t.css.keyButton),s.processName=function(e){var t,a,i=(e||"").replace(/[^a-z0-9-_]/gi,""),n=i.length,s=[];if(n>1&&e===i)return e;if(n=e.length){for(t=0;t1?i.slice(1).join(":"):""):(n.name=t.match(/([^(]+)/)[0],":"===n.name&&(i=i.slice(1)),null===a&&(n.map=":",i=i.slice(2)),n.title=i.length?i.join(":"):""):(n.map=t.match(/\(([^()]+?)\)/)[1],""===(a=(t=t.replace(/\(([^()]+)\)/,"")).split(":"))[0]?(n.name=":",i=i.slice(1)):n.name=a[0],n.title=i.length>1?i.slice(1).join(":"):""):(""!==t&&""===i[0]?(n.name=":",i=i.slice(1)):n.name=i[0],n.title=i.length>1?i.slice(1).join(":"):""),n.title=e.trim(n.title).replace(/_/g," "),n},s.addKey=function(e,a,i){var o,r,l,c={},d=s.processKeys(i?e:a),u=t.css;return!i&&n.display[d.name]?(l=s.processKeys(n.display[d.name])).action=s.processKeys(e).name:(l=d).action=d.name,c.name=s.processName(d.name),""!==l.name&&(""!==l.map?(t.builtLayouts[s.layout].mappedKeys[l.map]=l.name,t.builtLayouts[s.layout].acceptedKeys.push(l.name)):i&&t.builtLayouts[s.layout].acceptedKeys.push(l.name)),o=i?""===c.name?"":u.keyPrefix+c.name:u.keyAction+" "+u.keyPrefix+l.action,o+=(l.name.length>2?" "+u.keyWide:"")+" "+n.css.buttonDefault,c.html=''+l.name.replace(/[\u00A0-\u9999]/gim,function(e){return""+e.charCodeAt(0)+";"})+"",c.$key=s.keyBtn.clone().attr({"data-value":i?l.name:l.action,"data-name":l.action,"data-pos":s.temp[1]+","+s.temp[2],"data-action":l.action,"data-html":c.html}).addClass(o).html(c.html).appendTo(s.temp[0]),l.map&&c.$key.attr("data-mapped",l.map),(l.title||d.title)&&c.$key.attr({"data-title":d.title||l.title,title:d.title||l.title}),"function"==typeof n.buildKey&&(r=(c=n.buildKey(s,c)).$key.html(),c.$key.attr("data-html",r)),c.$key},s.customHash=function(e){var t,a,i,s,o=[],r=[];for(a in e=void 0===e?n.customLayout:e)e.hasOwnProperty(a)&&o.push(e[a]);if(i=0,0===(s=(r=r.concat.apply(r,o).join(" ")).length))return i;for(t=0;t").addClass(y).attr({role:"textbox"}).hide();return(o=e.inArray("{space}",h))>-1&&(h[o]=" "),i&&"custom"===n.layout||!t.layouts.hasOwnProperty(n.layout)?(n.layout="custom",y=t.layouts.custom=n.customLayout||{normal:["{cancel}"]}):y=t.layouts[i?n.layout:a||s.layout||n.layout],e.each(y,function(t,a){if(""!==t&&!/^(name|lang|rtl)$/i.test(t))for("default"===t&&(t="normal"),u++,l=e("").attr("name",t).addClass(d.keySet+" "+d.keySet+"-"+t).appendTo(b).toggle("normal"===t),r=0;r')}),u>1&&(s.sets=!0),p.hasMappedKeys=!e.isEmptyObject(p.mappedKeys),p.$keyboard=b,b},s.buildRow=function(a,i,o,r){var l,c,d,u,p,h,y=t.css;for(d=0;d').width(p.match(/px/i)?h+"px":2*h+"em").addClass(y.keySpacer).appendTo(a)),/^empty(:((\d+)?([\.|,]\d+)?)(em|px)?)?$/i.test(p)){h=/:/.test(p)?parseFloat(p.replace(/,/,".").match(/^empty:((\d+)?([\.|,]\d+)?)(em|px)?$/i)[1]||0):"",s.addKey(""," ",!0).addClass(n.css.buttonDisabled+" "+n.css.buttonEmpty).attr("aria-disabled",!0).width(h?p.match("px")?h+"px":2*h+"em":"");continue}if(/^meta[\w-]+\:?(\w+)?/i.test(p)){s.addKey(p.split(":")[0],p).addClass(y.keyHasActive);continue}switch((c=p.split(":"))[0].toLowerCase()){case"a":case"accept":s.addKey("accept",p).addClass(n.css.buttonAction+" "+y.keyAction);break;case"alt":case"altgr":s.addKey("alt",p).addClass(y.keyHasActive);break;case"b":case"bksp":s.addKey("bksp",p);break;case"c":case"cancel":s.addKey("cancel",p).addClass(n.css.buttonAction+" "+y.keyAction);break;case"combo":s.addKey("combo",p).addClass(y.keyHasActive).attr("title",function(e,t){return t+" "+n.display[n.useCombos?"active":"disabled"]}).toggleClass(n.css.buttonActive,n.useCombos);break;case"dec":r.push(s.decimal?".":","),s.addKey("dec",p);break;case"e":case"enter":s.addKey("enter",p).addClass(n.css.buttonAction+" "+y.keyAction);break;case"lock":s.addKey("lock",p).addClass(y.keyHasActive);break;case"s":case"shift":s.addKey("shift",p).addClass(y.keyHasActive);break;case"sign":r.push("-"),s.addKey("sign",p);break;case"space":r.push(" "),s.addKey("space",p);break;case"t":case"tab":s.addKey("tab",p);break;default:t.keyaction.hasOwnProperty(c[0])&&s.addKey(c[0],p).toggleClass(n.css.buttonAction+" "+y.keyAction,u)}}else l=o[d],s.addKey(l,l,!0)},s.removeBindings=function(t){e(document).unbind(t),s.el.ownerDocument!==document&&e(s.el.ownerDocument).unbind(t),e(window).unbind(t),s.$el.unbind(t)},s.removeKeyboard=function(){s.$allKeys=[],s.$decBtn=[],n.usePreview&&s.$preview.removeData("keyboard"),s.$preview.unbind(s.namespace+"keybindings"),s.preview=null,s.$preview=null,s.$previewCopy=null,s.$keyboard.removeData("keyboard"),s.$keyboard.remove(),s.$keyboard=[],s.isOpen=!1,s.isCurrent(!1)},s.destroy=function(e){var a,i=t.css,o=s.extensionNamespace.length,r=[i.input,i.locked,i.placeholder,i.noKeyboard,i.alwaysOpen,n.css.input,i.isCurrent].join(" ");for(clearTimeout(s.timer),clearTimeout(s.timer2),clearTimeout(s.timer3),s.$keyboard.length&&s.removeKeyboard(),s.removeBindings(s.namespace),s.removeBindings(s.namespace+"callbacks"),a=0;a
'),setTimeout(function(){t.keyaction.right(a),a.saveCaret()},0))))},lock:function(e){e.last.keyset[0]=e.shiftActive=e.capsLock=!e.capsLock,e.showSet()},left:function(e){var a=t.caret(e.$preview);a.start-1>=0&&(e.last.start=e.last.end=a.start-1,t.caret(e.$preview,e.last),e.setScroll())},meta:function(t,a){var i=e(a);t.metaActive=!i.hasClass(t.options.css.buttonActive),t.showSet(i.attr("data-name"))},next:function(e){return e.switchInput(!0,e.options.autoAccept),!1},normal:function(e){e.shiftActive=e.altActive=e.metaActive=!1,e.showSet()},prev:function(e){return e.switchInput(!1,e.options.autoAccept),!1},right:function(e){var a=t.caret(e.$preview),i=e.isContentEditable?t.getEditableLength(e.el):e.getValue().length;a.end+1<=i&&(e.last.start=e.last.end=a.end+1,t.caret(e.$preview,e.last),e.setScroll())},shift:function(e){e.last.keyset[0]=e.shiftActive=!e.shiftActive,e.showSet()},sign:function(e){if(/^[+-]?\d*\.?\d*$/.test(e.getValue())){var a,i=t.caret(e.$preview),n=e.getValue(),s=e.isContentEditable?t.getEditableLength(e.el):n.length;e.setValue(-1*n),a=s-n.length,e.last.start=i.start+a,e.last.end=i.end+a,t.caret(e.$preview,e.last),e.setScroll()}},space:function(e){e.insertText(" ")},tab:function(e){var t=e.el.nodeName,a=e.options;if("TEXTAREA"!==t){if(a.tabNavigation)return e.switchInput(!e.shiftActive,!0);if("INPUT"===t)return!1}e.insertText("\t")},toggle:function(e){e.enabled=!e.enabled,e.toggle()},NBSP:" ",ZWSP:"",ZWNJ:"",ZWJ:"",LRM:"",RLM:""},t.builtLayouts={},t.layouts={alpha:{normal:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} a b c d e f g h i j [ ] \\","k l m n o p q r s ; ' {enter}","{shift} t u v w x y z , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} A B C D E F G H I J { } |",'K L M N O P Q R S : " {enter}',"{shift} T U V W X Y Z < > ? {shift}","{accept} {space} {cancel}"]},qwerty:{normal:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}","{accept} {space} {cancel}"]},international:{normal:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}","{accept} {alt} {space} {alt} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}","{accept} {alt} {space} {alt} {cancel}"],alt:["~ ¡ ² ³ ¤ € ¼ ½ ¾ ‘ ’ ¥ × {bksp}","{tab} ä å é ® þ ü ú í ó ö « » ¬","á ß ð f g h j k ø ¶ ´ {enter}","{shift} æ x © v b ñ µ ç > ¿ {shift}","{accept} {alt} {space} {alt} {cancel}"],"alt-shift":["~ ¹ ² ³ £ € ¼ ½ ¾ ‘ ’ ¥ ÷ {bksp}","{tab} Ä Å É ® Þ Ü Ú Í Ó Ö « » ¦","Ä § Ð F G H J K Ø ° ¨ {enter}","{shift} Æ X ¢ V B Ñ µ Ç . ¿ {shift}","{accept} {alt} {space} {alt} {cancel}"]},colemak:{normal:["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w f p g j l u y ; [ ] \\","{bksp} a r s t d h n e i o ' {enter}","{shift} z x c v b k m , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W F P G J L U Y : { } |",'{bksp} A R S T D H N E I O " {enter}',"{shift} Z X C V B K M < > ? {shift}","{accept} {space} {cancel}"]},dvorak:{normal:["` 1 2 3 4 5 6 7 8 9 0 [ ] {bksp}","{tab} ' , . p y f g c r l / = \\","a o e u i d h t n s - {enter}","{shift} ; q j k x b m w v z {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) { } {bksp}",'{tab} " < > P Y F G C R L ? + |',"A O E U I D H T N S _ {enter}","{shift} : Q J K X B M W V Z {shift}","{accept} {space} {cancel}"]},num:{normal:["= ( ) {b}","{clear} / * -","7 8 9 +","4 5 6 {sign}","1 2 3 %","0 {dec} {a} {c}"]}},t.language={en:{display:{a:"✔:Accept (Shift+Enter)",accept:"Accept:Accept (Shift+Enter)",alt:"Alt:⌥ AltGr",b:"⌫:Backspace",bksp:"Bksp:Backspace",c:"✖:Cancel (Esc)",cancel:"Cancel:Cancel (Esc)",clear:"C:Clear",combo:"ö:Toggle Combo Keys",dec:".:Decimal",e:"⏎:Enter",empty:" ",enter:"Enter:Enter ⏎",left:"←",lock:"Lock:⇪ Caps Lock",next:"Next ⇨",prev:"⇦ Prev",right:"→",s:"⇧:Shift",shift:"Shift:Shift",sign:"±:Change Sign",space:" :Space",t:"⇥:Tab",tab:"⇥ Tab:Tab",toggle:" ",valid:"valid",invalid:"invalid",active:"active",disabled:"disabled"},wheelMessage:"Use mousewheel to see other keys",comboRegex:/([`\'~\^\"ao])([a-z])/gim,combos:{"`":{a:"à",A:"À",e:"è",E:"È",i:"ì",I:"Ì",o:"ò",O:"Ò",u:"ù",U:"Ù",y:"ỳ",Y:"Ỳ"},"'":{a:"á",A:"Á",e:"é",E:"É",i:"í",I:"Í",o:"ó",O:"Ó",u:"ú",U:"Ú",y:"ý",Y:"Ý"},'"':{a:"ä",A:"Ä",e:"ë",E:"Ë",i:"ï",I:"Ï",o:"ö",O:"Ö",u:"ü",U:"Ü",y:"ÿ",Y:"Ÿ"},"^":{a:"â",A:"Â",e:"ê",E:"Ê",i:"î",I:"Î",o:"ô",O:"Ô",u:"û",U:"Û",y:"ŷ",Y:"Ŷ"},"~":{a:"ã",A:"Ã",e:"ẽ",E:"Ẽ",i:"ĩ",I:"Ĩ",o:"õ",O:"Õ",u:"ũ",U:"Ũ",y:"ỹ",Y:"Ỹ",n:"ñ",N:"Ñ"}}}},t.defaultOptions={language:null,rtl:!1,layout:"qwerty",customLayout:null,position:{of:null,my:"center top",at:"center top",at2:"center bottom"},reposition:!0,usePreview:!0,alwaysOpen:!1,initialFocus:!0,noFocus:!1,stayOpen:!1,userClosed:!1,ignoreEsc:!1,closeByClickEvent:!1,css:{input:"ui-widget-content ui-corner-all",container:"ui-widget-content ui-widget ui-corner-all ui-helper-clearfix",popup:"",buttonDefault:"ui-state-default ui-corner-all",buttonHover:"ui-state-hover",buttonAction:"ui-state-active",buttonActive:"ui-state-active",buttonDisabled:"ui-state-disabled",buttonEmpty:"ui-keyboard-empty"},autoAccept:!1,autoAcceptOnEsc:!1,lockInput:!1,restrictInput:!1,restrictInclude:"",acceptValid:!1,autoAcceptOnValid:!1,cancelClose:!0,tabNavigation:!1,enterNavigation:!1,enterMod:"altKey",stopAtEnd:!0,appendLocally:!1,appendTo:"body",wrapBRs:!0,stickyShift:!0,preventPaste:!1,caretToEnd:!1,scrollAdjustment:10,maxLength:!1,maxInsert:!0,repeatDelay:500,repeatRate:20,resetDefault:!0,openOn:"focus",activeOnReadonly:!1,keyBinding:"mousedown touchstart",useWheel:!0,useCombos:!0,validate:function(e,t,a){return!0}},t.comboRegex=/([`\'~\^\"ao])([a-z])/gim,t.currentKeyboard="",e('\x3c!--[if lte IE 8]>