diff --git a/web/testing/basic-iframe/script.js b/web/testing/basic-iframe/script.js
deleted file mode 100644
index 29c1fe18bf..0000000000
--- a/web/testing/basic-iframe/script.js
+++ /dev/null
@@ -1,80 +0,0 @@
-// JavaScript Document samplehdr.js: Keyboard management for KeymanWeb demonstration pages
-
-/*
- The keyboard name and/or BCP-47 language code must be specified for each keyboard that is to be available.
- If the same keyboard is used for several languages, it must be listed for each
- language, but the keyboard itself will only be loaded once.
- If two (or more) keyboards are to be available for a given language, both must be listed.
- Any number of keyboards may be specified in one or more calls.
- Keyboard paths may be absolute (with respect to the server root) or relative to the keyboards option path.
- The actual keyboard object will be downloaded asynchronously when first selected for use.
-
- Each argument to addKeyboards() is a string, for example:
- european2 loads the current version of the Eurolatin 2 keyboard (for its default language)
- european2@fr loads the current version of the Eurolatin 2 keyboard for French
- european2@fr@1.2 loads version 1.2 of the Eurolatin 2 keyboard for French
-
- Argument syntax also supports the following extensions:
- @fr load the current version of the default keyboard for French
- @fr$ load all available keyboards (current version) for French
-
- Each call to addKeyboards() requires a single call to the remote server,
- (unless all keyboards listed are local and fully specified) so it is better
- to use multiple arguments rather than separate function calls.
-
- Calling addKeyboards() with no arguments returns a list of *all* available keyboards.
- The Toolbar (desktop browser) UI is best suited for allowing users to select
- the appropriate language and keyboard in this case.
-
- Keyboards may also be specified by language name using addKeyboardsForLanguage()
- for example:
- keymanweb.addKeyboardsForLanguage('Burmese');
-
- Appending $ to the language name will again cause all available keyboards for that
- language to be loaded rather than the default keyboard.
-
- The first call to addKeyboardsForLanguage() makes an additional call to the
- keyman API to load the current list of keyboard/language associations.
-
- In this example, the following function loads the indicated keyboards,
- and is called when the page loads.
-*/
-
- function loadKeyboards()
- {
- var kmw=keyman;
-
- // The first keyboard added will be the default keyboard for touch devices.
- // For faster loading, it may be best for the default keyboard to be
- // locally sourced.
- kmw.addKeyboards({id:'us',name:'English',languages:{id:'en',name:'English'},
- filename:'../us-1.0.js'});
-
- // Add more keyboards to the language menu, by keyboard name,
- // keyboard name and language code, or just the BCP-47 language code.
- kmw.addKeyboards('french','european2@sv','european2@no','@he');
-
- // Add a keyboard by language name. Note that the name must be spelled
- // correctly, or the keyboard will not be found. (Using BCP-47 codes is
- // usually easier.)
- kmw.addKeyboardsForLanguage('Dzongkha');
-
- // Add a fully-specified, locally-sourced, keyboard with custom font
- kmw.addKeyboards({id:'lao_2008_basic',name:'Lao Basic',
- languages:{
- id:'lo',name:'Lao',region:'Asia',
- font:{family:'LaoWeb',source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']}
- },
- filename:'../lao_2008_basic.js'
- });
-
- // The following two optional calls should be delayed until language menus are fully loaded:
- // (a) a specific mapped input element input is focused, to ensure that the OSK appears
- // (b) a specific keyboard is loaded, rather than the keyboard last used.
- //window.setTimeout(function(){kmw.setActiveElement('ta1',true);},2500);
- //window.setTimeout(function(){kmw.setActiveKeyboard('Keyboard_french','fr');},3000);
-
- // Note that locally specified keyboards will be listed before keyboards
- // requested from the remote server by user interfaces that do not order
- // keyboards alphabetically by language.
- }
\ No newline at end of file
diff --git a/web/testing/chirality/index.html b/web/testing/chirality/index.html
index 4cd31cdea7..0c76b46eaa 100644
--- a/web/testing/chirality/index.html
+++ b/web/testing/chirality/index.html
@@ -23,7 +23,7 @@
-
+
-
+
-
-
-
-
-
-
-
-
+
-
+
@@ -58,7 +50,11 @@
-
+ This page is designed to test KeymanWeb's behavior when being told to load a keyboard multiple times, both via
+ stub and registration. If this has been performed correctly, each entry should only be listed once by the UI element.
+
-
+
-
+
diff --git a/web/testing/issue115/issue115a-1.0.js b/web/testing/issue115/issue115a-1.0.js
deleted file mode 100644
index 2e0b16a7ad..0000000000
Binary files a/web/testing/issue115/issue115a-1.0.js and /dev/null differ
diff --git a/web/testing/issue115/issue115a.js b/web/testing/issue115/issue115a.js
new file mode 100644
index 0000000000..f2c5b3105a
--- /dev/null
+++ b/web/testing/issue115/issue115a.js
@@ -0,0 +1 @@
+KeymanWeb.KR(new Keyboard_issue115a());function Keyboard_issue115a(){this.KI="Keyboard_issue115a";this.KN="Issue 115 - test default keyboard construction";this.KMINVER="9.0";this.KV={F:' 1em "Arial"',K102:0};this.KDU=0;this.KLS={"default": ["`","1","2","3","4","5","6","7","8","9","0","-","=","","","","q","w","e","r","t","y","u","i","o","p","[","]","\\","","","","a-key","s","d","f","g","h","j","k","l",";","'","","","","","","\\","z","x","c","v","b","n","m",",",".","/","","","","","",""],"shift": ["~","!","@","#","$","%","^","&","*","(",")","_","+","","","","Q","W","E","R","T","Y","U","I","O","P","{","}","|","","","","A","S","D","F","G","H","J","K","L",":","\"","","","","","","|","Z","X","C","V","shift b-key","N","M","<",">","?","","","","","",""],"ctrl": ["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]};this.KV.BK=(function(x){var e=Array.apply(null,Array(65)).map(String.prototype.valueOf,""),r=[],v,i,m=['default','shift','ctrl','shift-ctrl','alt','shift-alt','ctrl-alt','shift-ctrl-alt'];for(i=m.length-1;i>=0;i--)if((v=x[m[i]])||r.length)r=(v?v:e).slice().concat(r);return r})(this.KLS);this.KH='';this.KM=0;this.KBVER="1.0";this.KMBM=0x0010;this.KVKL={"tablet":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a-key","pad":70},{"id":"K_S","text":"s"},{"id":"K_D","text":"d"},{"id":"K_F","text":"f"},{"id":"K_G","text":"g"},{"id":"K_H","text":"h"},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_20","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1","nextlayer":"shift"},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q"},{"id":"K_W","text":"W"},{"id":"K_E","text":"E"},{"id":"K_R","text":"R"},{"id":"K_T","text":"T"},{"id":"K_Y","text":"Y"},{"id":"K_U","text":"U"},{"id":"K_I","text":"I"},{"id":"K_O","text":"O"},{"id":"K_P","text":"P"}]},{"id":2,"key":[{"id":"K_A","pad":70,"text":"A"},{"id":"K_S","text":"S"},{"id":"K_D","text":"D"},{"id":"K_F","text":"F"},{"id":"K_G","text":"G"},{"id":"K_H","text":"H"},{"id":"K_J","text":"J"},{"id":"K_K","text":"K"},{"id":"K_L","text":"L"},{"sp":"10","width":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","width":"110","sp":"2","nextlayer":"default","text":""},{"id":"K_Z","text":"Z"},{"id":"K_X","text":"X"},{"id":"K_C","text":"C"},{"id":"K_V","text":"V"},{"id":"K_B","text":"shift b-key"},{"id":"K_N","text":"N"},{"id":"K_M","text":"M"},{"id":"K_PERIOD","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON","layer":"default"}],"text":">"},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"630","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","text":"$","pad":70,"layer":"shift"},{"id":"K_2","text":"@","layer":"shift"},{"id":"K_3","text":"#","layer":"shift"},{"id":"K_5","text":"%","layer":"shift"},{"id":"K_7","text":"&","layer":"shift"},{"id":"K_HYPHEN","text":"_","layer":"shift"},{"id":"K_EQUAL","text":"=","layer":"default"},{"id":"K_BKSLASH","text":"|","layer":"shift"},{"id":"K_BKSLASH","text":"\\","layer":"default"},{"id":"T_new_54","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1"},{"id":"K_LBRKT","text":"[","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}]},{"id":"K_9","text":"(","layer":"shift"},{"id":"K_0","text":")","layer":"shift"},{"id":"K_RBRKT","text":"]","sk":[{"id":"U_00BB","text":"\u00BB"},{"id":"K_PERIOD","text":">","layer":"shift"},{"id":"K_RBRKT","text":"}","layer":"shift"}]},{"id":"K_EQUAL","text":"+","layer":"shift"},{"id":"K_HYPHEN","text":"-","layer":"default"},{"id":"K_8","text":"*","layer":"shift"},{"id":"K_SLASH","text":"\/","layer":"default"},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"140","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]}]},"phone":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a-key","pad":"50"},{"id":"K_S","text":"s"},{"id":"K_D","text":"d"},{"id":"K_F","text":"f"},{"id":"K_G","text":"g"},{"id":"K_H","text":"h"},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_88","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"1","nextlayer":"shift"},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"100","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q"},{"id":"K_W","text":"W"},{"id":"K_E","text":"E"},{"id":"K_R","text":"R"},{"id":"K_T","text":"T"},{"id":"K_Y","text":"Y"},{"id":"K_U","text":"U"},{"id":"K_I","text":"I"},{"id":"K_O","text":"O"},{"id":"K_P","text":"P"}]},{"id":2,"key":[{"id":"K_A","pad":"50","text":"A"},{"id":"K_S","text":"S"},{"id":"K_D","text":"D"},{"id":"K_F","text":"F"},{"id":"K_G","text":"G"},{"id":"K_H","text":"H"},{"id":"K_J","text":"J"},{"id":"K_K","text":"K"},{"id":"K_L","text":"L"},{"text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","sp":"2","nextlayer":"default","text":""},{"id":"K_Z","text":"Z"},{"id":"K_X","text":"X"},{"id":"K_C","text":"C"},{"id":"K_V","text":"V"},{"id":"K_B","text":"shift b-key"},{"id":"K_N","text":"N"},{"id":"K_M","text":"M"},{"id":"K_PERIOD","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON","layer":"default"}],"text":">"},{"id":"K_BKSP","text":"*BkSp*","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"610","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","text":"$","pad":"50","layer":"shift"},{"id":"K_2","text":"@","layer":"shift"},{"id":"K_3","text":"#","layer":"shift"},{"id":"K_5","text":"%","layer":"shift"},{"id":"K_6","text":"^","layer":"shift"},{"id":"K_HYPHEN","text":"_","layer":"shift"},{"id":"K_EQUAL","text":"=","layer":"default"},{"id":"K_BKSLASH","text":"|","layer":"shift"},{"id":"K_BKSLASH","text":"\\","layer":"default"},{"id":"T_new_122","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_LBRKT","text":"[","pad":"110","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}]},{"id":"K_9","text":"(","layer":"shift"},{"id":"K_0","text":")","layer":"shift"},{"id":"K_RBRKT","text":"]","sk":[{"text":"\u00BB","id":"U_00BB"},{"text":">","id":"K_PERIOD","layer":"shift"},{"text":"}","id":"K_RBRKT","nextlayer":"default","layer":"shift"}]},{"id":"K_EQUAL","text":"+","layer":"shift"},{"id":"K_HYPHEN","text":"-"},{"id":"K_8","text":"*","layer":"shift"},{"id":"K_SLASH","text":"\/"},{"id":"K_BKSP","text":"*BkSp*","width":"100","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"150","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]}]}};this.KVER="10.0.1031.0";this.gs=function(t,e) {return this.g0(t,e);};this.g0=function(t,e) {var k=KeymanWeb,r=0,m=0;if(k.KKM(e,16400,66)) {r=m=1;k.KO(0,t,"shift b-key");}else if(k.KKM(e,16384,65)) {r=m=1;k.KO(0,t,"a-key");}return r;};}
\ No newline at end of file
diff --git a/web/testing/issue115/issue115a.kmx b/web/testing/issue115/issue115a.kmx
new file mode 100644
index 0000000000..ff24a5e9cc
Binary files /dev/null and b/web/testing/issue115/issue115a.kmx differ
diff --git a/web/testing/issue115/issue115a.kvk b/web/testing/issue115/issue115a.kvk
new file mode 100644
index 0000000000..c467a566ef
Binary files /dev/null and b/web/testing/issue115/issue115a.kvk differ
diff --git a/web/testing/issue116/index.html b/web/testing/issue116/index.html
index fb6214ba9c..1b08ac3126 100644
--- a/web/testing/issue116/index.html
+++ b/web/testing/issue116/index.html
@@ -23,7 +23,7 @@
-
+
-
+
diff --git a/web/testing/issue116/next_layer_tests-1.0.js b/web/testing/issue116/next_layer_tests-1.0.js
deleted file mode 100644
index daacb4a487..0000000000
--- a/web/testing/issue116/next_layer_tests-1.0.js
+++ /dev/null
@@ -1 +0,0 @@
-KeymanWeb.KR(new Keyboard_next_layer_tests());function Keyboard_next_layer_tests(){this.KI="Keyboard_next_layer_tests";this.KN="Issue 116";this.KV=null;this.KH='';this.KM=0;this.KBVER="1.0";this.KVKD="T_CAPS_Q T_CAPS_W T_CAPS_E T_CAPS_R T_CAPS_T T_CAPS_Y T_CAPS_U T_CAPS_I T_CAPS_O T_CAPS_P T_CAPS_A T_CAPS_S T_CAPS_D T_CAPS_F T_CAPS_G T_CAPS_H T_CAPS_J T_CAPS_K T_CAPS_L T_CAPS_Z T_CAPS_X T_CAPS_C T_CAPS_V T_CAPS_B T_CAPS_N T_CAPS_M";this.KVKL={"tablet":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a","pad":70},{"id":"K_S","text":"s"},{"id":"K_D","text":"d"},{"id":"K_F","text":"f"},{"id":"K_G","text":"g"},{"id":"K_H","text":"h"},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_20","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1","nextlayer":"shift","sk":[{"text":"*Caps*","id":"T_new_409","sp":"1","nextlayer":"CAPS"}]},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q","nextlayer":"default"},{"id":"K_W","text":"W","nextlayer":"default"},{"id":"K_E","text":"E","nextlayer":"default"},{"id":"K_R","text":"R","nextlayer":"default"},{"id":"K_T","text":"T","nextlayer":"default"},{"id":"K_Y","text":"Y","nextlayer":"default"},{"id":"K_U","text":"U","nextlayer":"default"},{"id":"K_I","text":"I","nextlayer":"default"},{"id":"K_O","text":"O","nextlayer":"default"},{"id":"K_P","text":"P","nextlayer":"default"}]},{"id":2,"key":[{"id":"K_A","text":"A","pad":70,"nextlayer":"default"},{"id":"K_S","text":"S","nextlayer":"default"},{"id":"K_D","text":"D","nextlayer":"default"},{"id":"K_F","text":"F","nextlayer":"default"},{"id":"K_G","text":"G","nextlayer":"default"},{"id":"K_H","text":"H","nextlayer":"default"},{"id":"K_J","text":"J","nextlayer":"default"},{"id":"K_K","text":"K","nextlayer":"default"},{"id":"K_L","text":"L","nextlayer":"default"},{"id":"T_new_54","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"2","nextlayer":"default","sk":[{"text":"*Caps*","id":"T_new_205","sp":"1","nextlayer":"CAPS"}]},{"id":"K_Z","text":"Z","nextlayer":"default"},{"id":"K_X","text":"X","nextlayer":"default"},{"id":"K_C","text":"C","nextlayer":"default"},{"id":"K_V","text":"V","nextlayer":"default"},{"id":"K_B","text":"B","nextlayer":"default"},{"id":"K_N","text":"N","nextlayer":"default"},{"id":"K_M","text":"M","nextlayer":"default"},{"id":"K_PERIOD","text":".","nextlayer":"default","sk":[{"text":",","id":"K_COMMA","nextlayer":"default","layer":"default"},{"text":"!","id":"K_1","nextlayer":"default","layer":"shift"},{"text":"?","id":"K_SLASH","nextlayer":"default","layer":"shift"},{"text":"'","id":"K_QUOTE","nextlayer":"default","layer":"default"},{"text":"\"","id":"K_QUOTE","nextlayer":"default","layer":"shift"},{"text":"\\","id":"K_BKSLASH","nextlayer":"default","layer":"default"},{"text":":","id":"K_COLON","nextlayer":"default","layer":"shift"},{"text":";","id":"K_COLON","nextlayer":"default","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","layer":"shift","pad":70,"text":"$"},{"id":"K_2","layer":"shift","text":"@"},{"id":"K_3","layer":"shift","text":"#"},{"id":"K_5","layer":"shift","text":"%"},{"id":"K_7","layer":"shift","text":"&"},{"id":"K_HYPHEN","layer":"shift","text":"_"},{"id":"K_EQUAL","layer":"default","text":"="},{"id":"K_BKSLASH","layer":"shift","text":"|"},{"id":"K_BKSLASH","layer":"default","text":"\\"},{"text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1"},{"id":"K_LBRKT","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}],"text":"["},{"id":"K_9","layer":"shift","text":"("},{"id":"K_0","layer":"shift","text":")"},{"id":"K_RBRKT","sk":[{"id":"U_00BB","text":"\u00BB"},{"id":"K_PERIOD","text":">","layer":"shift"},{"id":"K_RBRKT","text":"}","layer":"shift"}],"text":"]"},{"id":"K_EQUAL","layer":"shift","text":"+"},{"id":"K_HYPHEN","layer":"default","text":"-"},{"id":"K_8","layer":"shift","text":"*"},{"id":"K_SLASH","layer":"default","text":"\/"},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"140","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"630","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"CAPS","row":[{"id":1,"key":[{"id":"T_CAPS_Q","text":"Q"},{"id":"T_CAPS_W","text":"W"},{"id":"T_CAPS_E","text":"E"},{"id":"T_CAPS_R","text":"R"},{"id":"T_CAPS_T","text":"T"},{"id":"T_CAPS_Y","text":"Y"},{"id":"T_CAPS_U","text":"U"},{"id":"T_CAPS_I","text":"I"},{"id":"T_CAPS_O","text":"O"},{"id":"T_CAPS_P","text":"P"}]},{"id":2,"key":[{"id":"T_CAPS_A","text":"A","pad":70},{"id":"T_CAPS_S","text":"S"},{"id":"T_CAPS_D","text":"D"},{"id":"T_CAPS_F","text":"F"},{"id":"T_CAPS_G","text":"G"},{"id":"T_CAPS_H","text":"H"},{"id":"T_CAPS_J","text":"J"},{"id":"T_CAPS_K","text":"K"},{"id":"T_CAPS_L","text":"L"},{"id":"T_new_54","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Caps*","width":"110","sp":"2","nextlayer":"default"},{"id":"T_CAPS_Z","text":"Z"},{"id":"T_CAPS_X","text":"X"},{"id":"T_CAPS_C","text":"C"},{"id":"T_CAPS_V","text":"V"},{"id":"T_CAPS_B","text":"B"},{"id":"T_CAPS_N","text":"N"},{"id":"T_CAPS_M","text":"M"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]}]},"phone":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a","pad":"50"},{"id":"K_S","text":"s"},{"id":"K_D","text":"d"},{"id":"K_F","text":"f"},{"id":"K_G","text":"g"},{"id":"K_H","text":"h"},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_122","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"1","nextlayer":"shift","sk":[{"text":"*Caps*","id":"T_new_754","sp":"1","nextlayer":"CAPS"}]},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"100","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q","nextlayer":"default"},{"id":"K_W","text":"W","nextlayer":"default"},{"id":"K_E","text":"E","nextlayer":"default"},{"id":"K_R","text":"R","nextlayer":"default"},{"id":"K_T","text":"T","nextlayer":"default"},{"id":"K_Y","text":"Y","nextlayer":"default"},{"id":"K_U","text":"U","nextlayer":"default"},{"id":"K_I","text":"I","nextlayer":"default"},{"id":"K_O","text":"O","nextlayer":"default"},{"id":"K_P","text":"P","nextlayer":"default"}]},{"id":2,"key":[{"id":"K_A","text":"A","pad":"50","nextlayer":"default"},{"id":"K_S","text":"S","nextlayer":"default"},{"id":"K_D","text":"D","nextlayer":"default"},{"id":"K_F","text":"F","nextlayer":"default"},{"id":"K_G","text":"G","nextlayer":"default"},{"id":"K_H","text":"H","nextlayer":"default"},{"id":"K_J","text":"J","nextlayer":"default"},{"id":"K_K","text":"K","nextlayer":"default"},{"id":"K_L","text":"L","nextlayer":"default"},{"id":"T_new_535","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"2","nextlayer":"default"},{"id":"K_Z","text":"Z","nextlayer":"default"},{"id":"K_X","text":"X","nextlayer":"default"},{"id":"K_C","text":"C","nextlayer":"default"},{"id":"K_V","text":"V","nextlayer":"default"},{"id":"K_B","text":"B","nextlayer":"default"},{"id":"K_N","text":"N","nextlayer":"default"},{"id":"K_M","text":"M","nextlayer":"default"},{"id":"K_PERIOD","text":".","nextlayer":"default","sk":[{"text":",","id":"K_COMMA","nextlayer":"default","layer":"default"},{"text":"!","id":"K_1","nextlayer":"default","layer":"shift"},{"text":"?","id":"K_SLASH","nextlayer":"default","layer":"shift"},{"text":"'","id":"K_QUOTE","nextlayer":"default","layer":"default"},{"text":"\"","id":"K_QUOTE","nextlayer":"default","layer":"shift"},{"text":"\\","id":"K_BKSLASH","nextlayer":"default","layer":"default"},{"text":":","id":"K_COLON","nextlayer":"default","layer":"shift"},{"text":";","id":"K_COLON","nextlayer":"default","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","layer":"shift","pad":"50","text":"$"},{"id":"K_2","layer":"shift","text":"@"},{"id":"K_3","layer":"shift","text":"#"},{"id":"K_5","layer":"shift","text":"%"},{"id":"K_6","layer":"shift","text":"&"},{"id":"K_HYPHEN","layer":"shift","text":"_"},{"id":"K_EQUAL","layer":"default","text":"="},{"id":"K_BKSLASH","layer":"shift","text":"|"},{"id":"K_BKSLASH","layer":"default","text":"\\"},{"text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_LBRKT","pad":"110","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}],"text":"["},{"id":"K_9","layer":"shift","text":"("},{"id":"K_0","layer":"shift","text":")"},{"id":"K_RBRKT","sk":[{"id":"U_00BB","text":"\u00BB"},{"id":"K_PERIOD","text":">","layer":"shift"},{"id":"K_RBRKT","text":"}","layer":"shift"}],"text":"]"},{"id":"K_EQUAL","layer":"shift","text":"+"},{"id":"K_HYPHEN","text":"-"},{"id":"K_8","layer":"shift","text":"*"},{"id":"K_SLASH","text":"\/"},{"id":"K_BKSP","text":"*BkSp*","width":"100","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"150","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"610","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"CAPS","row":[{"id":1,"key":[{"id":"T_CAPS_Q","text":"Q","layer":"default"},{"id":"T_CAPS_W","text":"W"},{"id":"T_CAPS_E","text":"E"},{"id":"T_CAPS_R","text":"R"},{"id":"T_CAPS_T","text":"T"},{"id":"T_CAPS_Y","text":"Y"},{"id":"T_CAPS_U","text":"U"},{"id":"T_CAPS_I","text":"I"},{"id":"T_CAPS_O","text":"O"},{"id":"T_CAPS_P","text":"P"}]},{"id":2,"key":[{"id":"T_CAPS_A","text":"A","pad":"50"},{"id":"T_CAPS_U","text":"S"},{"id":"T_CAPS_D","text":"D"},{"id":"T_CAPS_F","text":"F"},{"id":"T_CAPS_G","text":"G"},{"id":"T_CAPS_H","text":"H"},{"id":"T_CAPS_J","text":"J"},{"id":"T_CAPS_K","text":"K"},{"id":"T_CAPS_L","text":"L"},{"id":"T_new_535","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"2","nextlayer":"default"},{"id":"T_CAPS_Z","text":"Z"},{"id":"T_CAPS_X","text":"X"},{"id":"T_CAPS_C","text":"C"},{"id":"T_CAPS_V","text":"V"},{"id":"T_CAPS_B","text":"B"},{"id":"T_CAPS_N","text":"N"},{"id":"T_CAPS_M","text":"M"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]}]}};this.KVER="10.0.870.0";this.gs=function(t,e) {return this.g0(t,e);};this.g0=function(t,e) {var k=KeymanWeb,r=0,m=0;if(k.KKM(e,16384,256)) {r=m=1;k.KO(0,t,"CAPS MODE Q");}else if(k.KKM(e,16384,257)) {r=m=1;k.KO(0,t,"CAPS MODE W");}else if(k.KKM(e,16384,258)) {r=m=1;k.KO(0,t,"CAPS MODE E");}else if(k.KKM(e,16384,259)) {r=m=1;k.KO(0,t,"CAPS MODE R");}else if(k.KKM(e,16384,260)) {r=m=1;k.KO(0,t,"CAPS MODE T");}else if(k.KKM(e,16384,261)) {r=m=1;k.KO(0,t,"CAPS MODE Y");}else if(k.KKM(e,16384,262)) {r=m=1;k.KO(0,t,"CAPS MODE U");}else if(k.KKM(e,16384,263)) {r=m=1;k.KO(0,t,"CAPS MODE I");}else if(k.KKM(e,16384,264)) {r=m=1;k.KO(0,t,"CAPS MODE O");}else if(k.KKM(e,16384,265)) {r=m=1;k.KO(0,t,"CAPS MODE P");}else if(k.KKM(e,16384,266)) {r=m=1;k.KO(0,t,"CAPS MODE A");}else if(k.KKM(e,16384,267)) {r=m=1;k.KO(0,t,"CAPS MODE S");}else if(k.KKM(e,16384,268)) {r=m=1;k.KO(0,t,"CAPS MODE D");}else if(k.KKM(e,16384,269)) {r=m=1;k.KO(0,t,"CAPS MODE F");}else if(k.KKM(e,16384,270)) {r=m=1;k.KO(0,t,"CAPS MODE G");}else if(k.KKM(e,16384,271)) {r=m=1;k.KO(0,t,"CAPS MODE H");}else if(k.KKM(e,16384,272)) {r=m=1;k.KO(0,t,"CAPS MODE J");}else if(k.KKM(e,16384,273)) {r=m=1;k.KO(0,t,"CAPS MODE K");}else if(k.KKM(e,16384,274)) {r=m=1;k.KO(0,t,"CAPS MODE L");}else if(k.KKM(e,16384,275)) {r=m=1;k.KO(0,t,"CAPS MODE Z");}else if(k.KKM(e,16384,276)) {r=m=1;k.KO(0,t,"CAPS MODE X");}else if(k.KKM(e,16384,277)) {r=m=1;k.KO(0,t,"CAPS MODE C");}else if(k.KKM(e,16384,278)) {r=m=1;k.KO(0,t,"CAPS MODE V");}else if(k.KKM(e,16384,279)) {r=m=1;k.KO(0,t,"CAPS MODE B");}else if(k.KKM(e,16384,280)) {r=m=1;k.KO(0,t,"CAPS MODE N");}else if(k.KKM(e,16384,281)) {r=m=1;k.KO(0,t,"CAPS MODE M");}return r;};}
\ No newline at end of file
diff --git a/web/testing/issue116/next_layer_tests-1.0.json b/web/testing/issue116/next_layer_tests-1.0.json
deleted file mode 100644
index d02a2de16d..0000000000
--- a/web/testing/issue116/next_layer_tests-1.0.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "options" : {
- "device" : "any",
- "keyboardBaseUri" : "http://your-host-here/keyboard-path/",
- "fontBaseUri" : "http://your-host-here/font-path/"
- },
- "keyboard" : {
- "id" : "next_layer_tests",
- "name" : "Issue 116",
- "filename" : "next_layer_tests-1.0.js",
- "version" : "1.0",
- "lastModified" : "2017-09-15T08:13:57.822+07:00",
- "languages" : [
- {
- "id" : "eng",
- "name" : "English"
- }
- ]
- }
-}
diff --git a/web/testing/issue116/next_layer_tests-1.0_load.js b/web/testing/issue116/next_layer_tests-1.0_load.js
deleted file mode 100644
index b37b56ff58..0000000000
--- a/web/testing/issue116/next_layer_tests-1.0_load.js
+++ /dev/null
@@ -1 +0,0 @@
-KeymanWeb.KRS(new Stub_Keyboard_next_layer_tests()); function Stub_Keyboard_next_layer_tests() {this.KF="next_layer_tests-1.0.js";this.KI="Keyboard_next_layer_tests";this.KN="Issue 116";}
\ No newline at end of file
diff --git a/web/testing/issue116/next_layer_tests.js b/web/testing/issue116/next_layer_tests.js
new file mode 100644
index 0000000000..ec45091cfb
--- /dev/null
+++ b/web/testing/issue116/next_layer_tests.js
@@ -0,0 +1 @@
+KeymanWeb.KR(new Keyboard_next_layer_tests());function Keyboard_next_layer_tests(){this.KI="Keyboard_next_layer_tests";this.KN="Issue 116";this.KMINVER="9.0";this.KV=null;this.KH='';this.KM=0;this.KBVER="1.0";this.KMBM=0x0000;this.KVKD="T_CAPS_Q T_CAPS_W T_CAPS_E T_CAPS_R T_CAPS_T T_CAPS_Y T_CAPS_U T_CAPS_I T_CAPS_O T_CAPS_P T_CAPS_A T_CAPS_S T_CAPS_D T_CAPS_F T_CAPS_G T_CAPS_H T_CAPS_J T_CAPS_K T_CAPS_L T_CAPS_Z T_CAPS_X T_CAPS_C T_CAPS_V T_CAPS_B T_CAPS_N T_CAPS_M";this.KVKL={"tablet":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a","pad":70},{"id":"K_S","text":"s"},{"id":"K_D","text":"d"},{"id":"K_F","text":"f"},{"id":"K_G","text":"g"},{"id":"K_H","text":"h"},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_20","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1","nextlayer":"shift","sk":[{"text":"*Caps*","id":"T_new_409","sp":"1","nextlayer":"CAPS"}]},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q","nextlayer":"default"},{"id":"K_W","text":"W","nextlayer":"default"},{"id":"K_E","text":"E","nextlayer":"default"},{"id":"K_R","text":"R","nextlayer":"default"},{"id":"K_T","text":"T","nextlayer":"default"},{"id":"K_Y","text":"Y","nextlayer":"default"},{"id":"K_U","text":"U","nextlayer":"default"},{"id":"K_I","text":"I","nextlayer":"default"},{"id":"K_O","text":"O","nextlayer":"default"},{"id":"K_P","text":"P","nextlayer":"default"}]},{"id":2,"key":[{"id":"K_A","text":"A","pad":70,"nextlayer":"default"},{"id":"K_S","text":"S","nextlayer":"default"},{"id":"K_D","text":"D","nextlayer":"default"},{"id":"K_F","text":"F","nextlayer":"default"},{"id":"K_G","text":"G","nextlayer":"default"},{"id":"K_H","text":"H","nextlayer":"default"},{"id":"K_J","text":"J","nextlayer":"default"},{"id":"K_K","text":"K","nextlayer":"default"},{"id":"K_L","text":"L","nextlayer":"default"},{"id":"T_new_54","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"2","nextlayer":"default","sk":[{"text":"*Caps*","id":"T_new_205","sp":"1","nextlayer":"CAPS"}]},{"id":"K_Z","text":"Z","nextlayer":"default"},{"id":"K_X","text":"X","nextlayer":"default"},{"id":"K_C","text":"C","nextlayer":"default"},{"id":"K_V","text":"V","nextlayer":"default"},{"id":"K_B","text":"B","nextlayer":"default"},{"id":"K_N","text":"N","nextlayer":"default"},{"id":"K_M","text":"M","nextlayer":"default"},{"id":"K_PERIOD","text":".","nextlayer":"default","sk":[{"text":",","id":"K_COMMA","nextlayer":"default","layer":"default"},{"text":"!","id":"K_1","nextlayer":"default","layer":"shift"},{"text":"?","id":"K_SLASH","nextlayer":"default","layer":"shift"},{"text":"'","id":"K_QUOTE","nextlayer":"default","layer":"default"},{"text":"\"","id":"K_QUOTE","nextlayer":"default","layer":"shift"},{"text":"\\","id":"K_BKSLASH","nextlayer":"default","layer":"default"},{"text":":","id":"K_COLON","nextlayer":"default","layer":"shift"},{"text":";","id":"K_COLON","nextlayer":"default","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","layer":"shift","pad":70,"text":"$"},{"id":"K_2","layer":"shift","text":"@"},{"id":"K_3","layer":"shift","text":"#"},{"id":"K_5","layer":"shift","text":"%"},{"id":"K_7","layer":"shift","text":"&"},{"id":"K_HYPHEN","layer":"shift","text":"_"},{"id":"K_EQUAL","layer":"default","text":"="},{"id":"K_BKSLASH","layer":"shift","text":"|"},{"id":"K_BKSLASH","layer":"default","text":"\\"},{"text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1"},{"id":"K_LBRKT","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}],"text":"["},{"id":"K_9","layer":"shift","text":"("},{"id":"K_0","layer":"shift","text":")"},{"id":"K_RBRKT","sk":[{"id":"U_00BB","text":"\u00BB"},{"id":"K_PERIOD","text":">","layer":"shift"},{"id":"K_RBRKT","text":"}","layer":"shift"}],"text":"]"},{"id":"K_EQUAL","layer":"shift","text":"+"},{"id":"K_HYPHEN","layer":"default","text":"-"},{"id":"K_8","layer":"shift","text":"*"},{"id":"K_SLASH","layer":"default","text":"\/"},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"140","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"630","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"CAPS","row":[{"id":1,"key":[{"id":"T_CAPS_Q","text":"Q"},{"id":"T_CAPS_W","text":"W"},{"id":"T_CAPS_E","text":"E"},{"id":"T_CAPS_R","text":"R"},{"id":"T_CAPS_T","text":"T"},{"id":"T_CAPS_Y","text":"Y"},{"id":"T_CAPS_U","text":"U"},{"id":"T_CAPS_I","text":"I"},{"id":"T_CAPS_O","text":"O"},{"id":"T_CAPS_P","text":"P"}]},{"id":2,"key":[{"id":"T_CAPS_A","text":"A","pad":70},{"id":"T_CAPS_S","text":"S"},{"id":"T_CAPS_D","text":"D"},{"id":"T_CAPS_F","text":"F"},{"id":"T_CAPS_G","text":"G"},{"id":"T_CAPS_H","text":"H"},{"id":"T_CAPS_J","text":"J"},{"id":"T_CAPS_K","text":"K"},{"id":"T_CAPS_L","text":"L"},{"id":"T_new_54","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Caps*","width":"110","sp":"2","nextlayer":"default"},{"id":"T_CAPS_Z","text":"Z"},{"id":"T_CAPS_X","text":"X"},{"id":"T_CAPS_C","text":"C"},{"id":"T_CAPS_V","text":"V"},{"id":"T_CAPS_B","text":"B"},{"id":"T_CAPS_N","text":"N"},{"id":"T_CAPS_M","text":"M"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]}]},"phone":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a","pad":"50"},{"id":"K_S","text":"s"},{"id":"K_D","text":"d"},{"id":"K_F","text":"f"},{"id":"K_G","text":"g"},{"id":"K_H","text":"h"},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_122","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"1","nextlayer":"shift","sk":[{"text":"*Caps*","id":"T_new_754","sp":"1","nextlayer":"CAPS"}]},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"100","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q","nextlayer":"default"},{"id":"K_W","text":"W","nextlayer":"default"},{"id":"K_E","text":"E","nextlayer":"default"},{"id":"K_R","text":"R","nextlayer":"default"},{"id":"K_T","text":"T","nextlayer":"default"},{"id":"K_Y","text":"Y","nextlayer":"default"},{"id":"K_U","text":"U","nextlayer":"default"},{"id":"K_I","text":"I","nextlayer":"default"},{"id":"K_O","text":"O","nextlayer":"default"},{"id":"K_P","text":"P","nextlayer":"default"}]},{"id":2,"key":[{"id":"K_A","text":"A","pad":"50","nextlayer":"default"},{"id":"K_S","text":"S","nextlayer":"default"},{"id":"K_D","text":"D","nextlayer":"default"},{"id":"K_F","text":"F","nextlayer":"default"},{"id":"K_G","text":"G","nextlayer":"default"},{"id":"K_H","text":"H","nextlayer":"default"},{"id":"K_J","text":"J","nextlayer":"default"},{"id":"K_K","text":"K","nextlayer":"default"},{"id":"K_L","text":"L","nextlayer":"default"},{"id":"T_new_535","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"2","nextlayer":"default"},{"id":"K_Z","text":"Z","nextlayer":"default"},{"id":"K_X","text":"X","nextlayer":"default"},{"id":"K_C","text":"C","nextlayer":"default"},{"id":"K_V","text":"V","nextlayer":"default"},{"id":"K_B","text":"B","nextlayer":"default"},{"id":"K_N","text":"N","nextlayer":"default"},{"id":"K_M","text":"M","nextlayer":"default"},{"id":"K_PERIOD","text":".","nextlayer":"default","sk":[{"text":",","id":"K_COMMA","nextlayer":"default","layer":"default"},{"text":"!","id":"K_1","nextlayer":"default","layer":"shift"},{"text":"?","id":"K_SLASH","nextlayer":"default","layer":"shift"},{"text":"'","id":"K_QUOTE","nextlayer":"default","layer":"default"},{"text":"\"","id":"K_QUOTE","nextlayer":"default","layer":"shift"},{"text":"\\","id":"K_BKSLASH","nextlayer":"default","layer":"default"},{"text":":","id":"K_COLON","nextlayer":"default","layer":"shift"},{"text":";","id":"K_COLON","nextlayer":"default","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","layer":"shift","pad":"50","text":"$"},{"id":"K_2","layer":"shift","text":"@"},{"id":"K_3","layer":"shift","text":"#"},{"id":"K_5","layer":"shift","text":"%"},{"id":"K_6","layer":"shift","text":"&"},{"id":"K_HYPHEN","layer":"shift","text":"_"},{"id":"K_EQUAL","layer":"default","text":"="},{"id":"K_BKSLASH","layer":"shift","text":"|"},{"id":"K_BKSLASH","layer":"default","text":"\\"},{"text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_LBRKT","pad":"110","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}],"text":"["},{"id":"K_9","layer":"shift","text":"("},{"id":"K_0","layer":"shift","text":")"},{"id":"K_RBRKT","sk":[{"id":"U_00BB","text":"\u00BB"},{"id":"K_PERIOD","text":">","layer":"shift"},{"id":"K_RBRKT","text":"}","layer":"shift"}],"text":"]"},{"id":"K_EQUAL","layer":"shift","text":"+"},{"id":"K_HYPHEN","text":"-"},{"id":"K_8","layer":"shift","text":"*"},{"id":"K_SLASH","text":"\/"},{"id":"K_BKSP","text":"*BkSp*","width":"100","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"150","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"610","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]},{"id":"CAPS","row":[{"id":1,"key":[{"id":"T_CAPS_Q","text":"Q","layer":"default"},{"id":"T_CAPS_W","text":"W"},{"id":"T_CAPS_E","text":"E"},{"id":"T_CAPS_R","text":"R"},{"id":"T_CAPS_T","text":"T"},{"id":"T_CAPS_Y","text":"Y"},{"id":"T_CAPS_U","text":"U"},{"id":"T_CAPS_I","text":"I"},{"id":"T_CAPS_O","text":"O"},{"id":"T_CAPS_P","text":"P"}]},{"id":2,"key":[{"id":"T_CAPS_A","text":"A","pad":"50"},{"id":"T_CAPS_U","text":"S"},{"id":"T_CAPS_D","text":"D"},{"id":"T_CAPS_F","text":"F"},{"id":"T_CAPS_G","text":"G"},{"id":"T_CAPS_H","text":"H"},{"id":"T_CAPS_J","text":"J"},{"id":"T_CAPS_K","text":"K"},{"id":"T_CAPS_L","text":"L"},{"id":"T_new_535","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","sp":"2","nextlayer":"default"},{"id":"T_CAPS_Z","text":"Z"},{"id":"T_CAPS_X","text":"X"},{"id":"T_CAPS_C","text":"C"},{"id":"T_CAPS_V","text":"V"},{"id":"T_CAPS_B","text":"B"},{"id":"T_CAPS_N","text":"N"},{"id":"T_CAPS_M","text":"M"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"150","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"610","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"150","sp":"1"}]}]}]}};this.KVER="10.0.1031.0";this.gs=function(t,e) {return this.g0(t,e);};this.g0=function(t,e) {var k=KeymanWeb,r=0,m=0;if(k.KKM(e,16384,256)) {r=m=1;k.KO(0,t,"CAPS MODE Q");}else if(k.KKM(e,16384,257)) {r=m=1;k.KO(0,t,"CAPS MODE W");}else if(k.KKM(e,16384,258)) {r=m=1;k.KO(0,t,"CAPS MODE E");}else if(k.KKM(e,16384,259)) {r=m=1;k.KO(0,t,"CAPS MODE R");}else if(k.KKM(e,16384,260)) {r=m=1;k.KO(0,t,"CAPS MODE T");}else if(k.KKM(e,16384,261)) {r=m=1;k.KO(0,t,"CAPS MODE Y");}else if(k.KKM(e,16384,262)) {r=m=1;k.KO(0,t,"CAPS MODE U");}else if(k.KKM(e,16384,263)) {r=m=1;k.KO(0,t,"CAPS MODE I");}else if(k.KKM(e,16384,264)) {r=m=1;k.KO(0,t,"CAPS MODE O");}else if(k.KKM(e,16384,265)) {r=m=1;k.KO(0,t,"CAPS MODE P");}else if(k.KKM(e,16384,266)) {r=m=1;k.KO(0,t,"CAPS MODE A");}else if(k.KKM(e,16384,267)) {r=m=1;k.KO(0,t,"CAPS MODE S");}else if(k.KKM(e,16384,268)) {r=m=1;k.KO(0,t,"CAPS MODE D");}else if(k.KKM(e,16384,269)) {r=m=1;k.KO(0,t,"CAPS MODE F");}else if(k.KKM(e,16384,270)) {r=m=1;k.KO(0,t,"CAPS MODE G");}else if(k.KKM(e,16384,271)) {r=m=1;k.KO(0,t,"CAPS MODE H");}else if(k.KKM(e,16384,272)) {r=m=1;k.KO(0,t,"CAPS MODE J");}else if(k.KKM(e,16384,273)) {r=m=1;k.KO(0,t,"CAPS MODE K");}else if(k.KKM(e,16384,274)) {r=m=1;k.KO(0,t,"CAPS MODE L");}else if(k.KKM(e,16384,275)) {r=m=1;k.KO(0,t,"CAPS MODE Z");}else if(k.KKM(e,16384,276)) {r=m=1;k.KO(0,t,"CAPS MODE X");}else if(k.KKM(e,16384,277)) {r=m=1;k.KO(0,t,"CAPS MODE C");}else if(k.KKM(e,16384,278)) {r=m=1;k.KO(0,t,"CAPS MODE V");}else if(k.KKM(e,16384,279)) {r=m=1;k.KO(0,t,"CAPS MODE B");}else if(k.KKM(e,16384,280)) {r=m=1;k.KO(0,t,"CAPS MODE N");}else if(k.KKM(e,16384,281)) {r=m=1;k.KO(0,t,"CAPS MODE M");}return r;};}
\ No newline at end of file
diff --git a/web/testing/issue160/index.html b/web/testing/issue160/index.html
index d8790ee760..74d8a2b5d6 100644
--- a/web/testing/issue160/index.html
+++ b/web/testing/issue160/index.html
@@ -23,7 +23,7 @@
-
+
-
+
diff --git a/web/testing/issue160/issue160-1.0.js b/web/testing/issue160/issue160-1.0.js
deleted file mode 100644
index 0580368fac..0000000000
--- a/web/testing/issue160/issue160-1.0.js
+++ /dev/null
@@ -1,733 +0,0 @@
-KeymanWeb.KR(new Keyboard_issue160());
-function Keyboard_issue160()
-{
- this.KI="Keyboard_issue160";
- this.KN="#160 VKDictionary conflict(web/touch)";
- this.KV=null;
- this.KH='';
- this.KM=0;
- this.KBVER="1.0";
- this.KVKD="T_A_Hook T_A_Candrabindu T_A_Blah U_0104 T_A_305";
- this.KVKL={
- "tablet": {
- "font": "Tahoma",
- "layer": [
- {
- "id": "default",
- "row": [
- {
- "id": 1,
- "key": [
- {
- "id": "K_Q",
- "text": "q"
- },
- {
- "id": "K_W",
- "text": "w"
- },
- {
- "id": "K_E",
- "text": "e"
- },
- {
- "id": "K_R",
- "text": "r"
- },
- {
- "id": "K_T",
- "text": "t"
- },
- {
- "id": "K_Y",
- "text": "y"
- },
- {
- "id": "K_U",
- "text": "u"
- },
- {
- "id": "K_I",
- "text": "i"
- },
- {
- "id": "K_O",
- "text": "o"
- },
- {
- "id": "K_P",
- "text": "p"
- }
- ]
- },
- {
- "id": 2,
- "key": [
- {
- "id": "K_A",
- "text": "a",
- "pad": 70
- },
- {
- "id": "U_0101",
- "text": "ā"
- },
- {
- "id": "T_A_Hook",
- "text": "a̧"
- },
- {
- "id": "T_A_Candrabindu",
- "text": "a̐"
- },
- {
- "id": "U_0104",
- "text": "Ą"
- },
- {
- "id": "K_H",
- "text": "h",
- "sk": [
- {
- "text": "ă",
- "id": "U_0103"
- },
- {
- "text": "a̅",
- "id": "T_A_305"
- }
- ]
- },
- {
- "id": "K_J",
- "text": "j"
- },
- {
- "id": "K_K",
- "text": "k"
- },
- {
- "id": "K_L",
- "text": "l"
- },
- {
- "id": "T_new_20",
- "text": "",
- "width": "10",
- "sp": "10"
- }
- ]
- },
- {
- "id": 3,
- "key": [
- {
- "id": "K_SHIFT",
- "text": "*Shift*",
- "width": "110",
- "sp": "1",
- "nextlayer": "shift"
- },
- {
- "id": "K_Z",
- "text": "z"
- },
- {
- "id": "K_X",
- "text": "x"
- },
- {
- "id": "K_C",
- "text": "c"
- },
- {
- "id": "K_V",
- "text": "v"
- },
- {
- "id": "K_B",
- "text": "b"
- },
- {
- "id": "K_N",
- "text": "n"
- },
- {
- "id": "K_M",
- "text": "m"
- },
- {
- "id": "K_PERIOD",
- "text": ".",
- "sk": [
- {
- "text": ",",
- "id": "K_COMMA"
- },
- {
- "text": "!",
- "id": "K_1",
- "layer": "shift"
- },
- {
- "text": "?",
- "id": "K_SLASH",
- "layer": "shift"
- },
- {
- "text": "'",
- "id": "K_QUOTE"
- },
- {
- "text": "\"",
- "id": "K_QUOTE",
- "layer": "shift"
- },
- {
- "text": "\\",
- "id": "K_BKSLASH"
- },
- {
- "text": ":",
- "id": "K_COLON",
- "layer": "shift"
- },
- {
- "text": ";",
- "id": "K_COLON"
- }
- ]
- },
- {
- "id": "K_BKSP",
- "text": "*BkSp*",
- "width": "90",
- "sp": "1"
- }
- ]
- },
- {
- "id": 4,
- "key": [
- {
- "id": "K_NUMLOCK",
- "text": "*123*",
- "width": "140",
- "sp": "1",
- "nextlayer": "numeric"
- },
- {
- "id": "K_LOPT",
- "text": "*Menu*",
- "width": "120",
- "sp": "1"
- },
- {
- "id": "K_SPACE",
- "text": "",
- "width": "630",
- "sp": "0"
- },
- {
- "id": "K_ENTER",
- "text": "*Enter*",
- "width": "140",
- "sp": "1"
- }
- ]
- }
- ]
- },
- {
- "id": "shift",
- "row": [
- {
- "id": 1,
- "key": [
- {
- "id": "K_Q",
- "text": "Q"
- },
- {
- "id": "K_W",
- "text": "W"
- },
- {
- "id": "K_E",
- "text": "E"
- },
- {
- "id": "K_R",
- "text": "R"
- },
- {
- "id": "K_T",
- "text": "T"
- },
- {
- "id": "K_Y",
- "text": "Y"
- },
- {
- "id": "K_U",
- "text": "U"
- },
- {
- "id": "K_I",
- "text": "I"
- },
- {
- "id": "K_O",
- "text": "O"
- },
- {
- "id": "K_P",
- "text": "P"
- }
- ]
- },
- {
- "id": 2,
- "key": [
- {
- "id": "K_A",
- "text": "A",
- "pad": 70
- },
- {
- "id": "U_0101",
- "text": "ā"
- },
- {
- "id": "T_A_Hook",
- "text": "a̧"
- },
- {
- "id": "T_A_Candrabindu",
- "text": "a̐"
- },
- {
- "id": "U_0104",
- "text": "Ą"
- },
- {
- "id": "K_H",
- "text": "h",
- "sk": [
- {
- "text": "ă",
- "id": "U_0103"
- },
- {
- "text": "a̅",
- "id": "T_A_305"
- }
- ]
- },
- {
- "id": "K_J",
- "text": "J"
- },
- {
- "id": "K_K",
- "text": "K"
- },
- {
- "id": "K_L",
- "text": "L"
- },
- {
- "id": "T_new_54",
- "text": "",
- "width": "10",
- "sp": "10"
- }
- ]
- },
- {
- "id": 3,
- "key": [
- {
- "id": "K_SHIFT",
- "text": "*Shift*",
- "width": "110",
- "sp": "2",
- "nextlayer": "default"
- },
- {
- "id": "K_Z",
- "text": "Z"
- },
- {
- "id": "K_X",
- "text": "X"
- },
- {
- "id": "K_C",
- "text": "C"
- },
- {
- "id": "K_V",
- "text": "V"
- },
- {
- "id": "K_B",
- "text": "B"
- },
- {
- "id": "K_N",
- "text": "N"
- },
- {
- "id": "K_M",
- "text": "M"
- },
- {
- "id": "K_PERIOD",
- "text": ".",
- "sk": [
- {
- "text": ",",
- "id": "K_COMMA",
- "layer": "default"
- },
- {
- "text": "!",
- "id": "K_1",
- "layer": "shift"
- },
- {
- "text": "?",
- "id": "K_SLASH",
- "layer": "shift"
- },
- {
- "text": "'",
- "id": "K_QUOTE",
- "layer": "default"
- },
- {
- "text": "\"",
- "id": "K_QUOTE",
- "layer": "shift"
- },
- {
- "text": "\\",
- "id": "K_BKSLASH",
- "layer": "default"
- },
- {
- "text": ":",
- "id": "K_COLON"
- },
- {
- "text": ";",
- "id": "K_COLON",
- "layer": "default"
- }
- ]
- },
- {
- "id": "K_BKSP",
- "text": "*BkSp*",
- "width": "90",
- "sp": "1"
- }
- ]
- },
- {
- "id": 4,
- "key": [
- {
- "id": "K_NUMLOCK",
- "text": "*123*",
- "width": "140",
- "sp": "1",
- "nextlayer": "numeric"
- },
- {
- "id": "K_LOPT",
- "text": "*Menu*",
- "width": "120",
- "sp": "1"
- },
- {
- "id": "K_SPACE",
- "text": "",
- "width": "630",
- "sp": "0"
- },
- {
- "id": "K_ENTER",
- "text": "*Enter*",
- "width": "140",
- "sp": "1"
- }
- ]
- }
- ]
- },
- {
- "id": "numeric",
- "row": [
- {
- "id": 1,
- "key": [
- {
- "id": "K_1",
- "text": "1"
- },
- {
- "id": "K_2",
- "text": "2"
- },
- {
- "id": "K_3",
- "text": "3"
- },
- {
- "id": "K_4",
- "text": "4"
- },
- {
- "id": "K_5",
- "text": "5"
- },
- {
- "id": "K_6",
- "text": "6"
- },
- {
- "id": "K_7",
- "text": "7"
- },
- {
- "id": "K_8",
- "text": "8"
- },
- {
- "id": "K_9",
- "text": "9"
- },
- {
- "id": "K_0",
- "text": "0"
- }
- ]
- },
- {
- "id": 2,
- "key": [
- {
- "id": "K_4",
- "layer": "shift",
- "pad": 70,
- "text": "$"
- },
- {
- "id": "K_2",
- "layer": "shift",
- "text": "@"
- },
- {
- "id": "K_3",
- "layer": "shift",
- "text": "#"
- },
- {
- "id": "K_5",
- "layer": "shift",
- "text": "%"
- },
- {
- "id": "K_7",
- "layer": "shift",
- "text": "&"
- },
- {
- "id": "K_HYPHEN",
- "layer": "shift",
- "text": "_"
- },
- {
- "id": "K_EQUAL",
- "layer": "default",
- "text": "="
- },
- {
- "id": "K_BKSLASH",
- "layer": "shift",
- "text": "|"
- },
- {
- "id": "K_BKSLASH",
- "layer": "default",
- "text": "\\"
- },
- {
- "text": "",
- "width": "10",
- "sp": "10"
- }
- ]
- },
- {
- "id": 3,
- "key": [
- {
- "id": "K_SHIFT",
- "text": "*Shift*",
- "width": "110",
- "sp": "1"
- },
- {
- "id": "K_LBRKT",
- "sk": [
- {
- "id": "U_00AB",
- "text": "«"
- },
- {
- "id": "K_COMMA",
- "text": "<",
- "layer": "shift"
- },
- {
- "id": "K_LBRKT",
- "text": "{",
- "layer": "shift"
- }
- ],
- "text": "["
- },
- {
- "id": "K_9",
- "layer": "shift",
- "text": "("
- },
- {
- "id": "K_0",
- "layer": "shift",
- "text": ")"
- },
- {
- "id": "K_RBRKT",
- "sk": [
- {
- "id": "U_00BB",
- "text": "»"
- },
- {
- "id": "K_PERIOD",
- "text": ">",
- "layer": "shift"
- },
- {
- "id": "K_RBRKT",
- "text": "}",
- "layer": "shift"
- }
- ],
- "text": "]"
- },
- {
- "id": "K_EQUAL",
- "layer": "shift",
- "text": "+"
- },
- {
- "id": "K_HYPHEN",
- "layer": "default",
- "text": "-"
- },
- {
- "id": "K_8",
- "layer": "shift",
- "text": "*"
- },
- {
- "id": "K_SLASH",
- "layer": "default",
- "text": "/"
- },
- {
- "id": "K_BKSP",
- "text": "*BkSp*",
- "width": "90",
- "sp": "1"
- }
- ]
- },
- {
- "id": 4,
- "key": [
- {
- "id": "K_LOWER",
- "text": "*abc*",
- "width": "140",
- "sp": "1",
- "nextlayer": "default"
- },
- {
- "id": "K_LOPT",
- "text": "*Menu*",
- "width": "120",
- "sp": "1"
- },
- {
- "id": "K_SPACE",
- "width": "630",
- "sp": "0",
- "text": ""
- },
- {
- "id": "K_ENTER",
- "text": "*Enter*",
- "width": "140",
- "sp": "1"
- }
- ]
- }
- ]
- }
- ]
- }
-}
-;
- this.KVER="10.0.920.0";
- this.gs=function(t,e) {
- return this.g_main(t,e);
- };
- this.g_main=function(t,e) {
- var k=KeymanWeb,r=0,m=0;
- if(k.KKM(e,16384,259)&&k.KCM(1,t,"c",1)) { // Line 23
- r=m=1;
- k.KO(1,t,"?");
- }
- else if(k.KKM(e,16384,256)) { // Line 17
- r=m=1;
- k.KO(0,t,"a̧");
- }
- else if(k.KKM(e,16384,257)) { // Line 18
- r=m=1;
- k.KO(0,t,"a̐");
- }
- else if(k.KKM(e,16400,256)) { // Line 19
- r=m=1;
- k.KO(0,t,"SHIFT a̧");
- }
- else if(k.KKM(e,16400,257)) { // Line 20
- r=m=1;
- k.KO(0,t,"SHIFT a̐");
- }
- else if(k.KKM(e,16384,258)) { // Line 21
- r=m=1;
- k.KO(0,t,"nothing");
- }
- else if(k.KKM(e,16384,260)) { // Line 24
- r=m=1;
- k.KO(0,t,"a̅");
- }
- return r;
- };
-}
diff --git a/web/testing/issue160/issue160-1.0.json b/web/testing/issue160/issue160-1.0.json
deleted file mode 100644
index 6633427a3e..0000000000
--- a/web/testing/issue160/issue160-1.0.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "options" : {
- "device" : "any",
- "keyboardBaseUri" : "http://your-host-here/keyboard-path/",
- "fontBaseUri" : "http://your-host-here/font-path/"
- },
- "keyboard" : {
- "id" : "issue160",
- "name" : "#160 VKDictionary conflict(web/touch)",
- "filename" : "issue160-1.0.js",
- "version" : "1.0",
- "lastModified" : "2017-08-18T13:57:07.816+07:00",
- "languages" : [
- ]
- }
-}
diff --git a/web/testing/issue160/issue160-1.0_load.js b/web/testing/issue160/issue160-1.0_load.js
deleted file mode 100644
index 0655539d77..0000000000
--- a/web/testing/issue160/issue160-1.0_load.js
+++ /dev/null
@@ -1 +0,0 @@
-KeymanWeb.KRS(new Stub_Keyboard_issue160()); function Stub_Keyboard_issue160() {this.KF="issue160-1.0.js";this.KI="Keyboard_issue160";this.KN="#160 VKDictionary conflict(web/touch)";}
\ No newline at end of file
diff --git a/web/testing/issue160/issue160.js b/web/testing/issue160/issue160.js
new file mode 100644
index 0000000000..83c189e0c1
--- /dev/null
+++ b/web/testing/issue160/issue160.js
@@ -0,0 +1 @@
+KeymanWeb.KR(new Keyboard_issue160());function Keyboard_issue160(){this.KI="Keyboard_issue160";this.KN="#160 VKDictionary conflict(web/touch)";this.KMINVER="9.0";this.KV=null;this.KH='';this.KM=0;this.KBVER="1.0";this.KMBM=0x0010;this.KVKD="T_A_Hook T_A_Candrabindu T_A_Blah U_0104 T_A_305";this.KVKL={"tablet":{"font":"Tahoma","layer":[{"id":"default","row":[{"id":1,"key":[{"id":"K_Q","text":"q"},{"id":"K_W","text":"w"},{"id":"K_E","text":"e"},{"id":"K_R","text":"r"},{"id":"K_T","text":"t"},{"id":"K_Y","text":"y"},{"id":"K_U","text":"u"},{"id":"K_I","text":"i"},{"id":"K_O","text":"o"},{"id":"K_P","text":"p"}]},{"id":2,"key":[{"id":"K_A","text":"a","pad":70},{"id":"U_0101","text":"\u0101"},{"id":"T_A_Hook","text":"a\u0327"},{"id":"T_A_Candrabindu","text":"a\u0310"},{"id":"U_0104","text":"\u0104"},{"id":"K_H","text":"h","sk":[{"text":"\u0103","id":"U_0103"},{"text":"a\u0305","id":"T_A_305"}]},{"id":"K_J","text":"j"},{"id":"K_K","text":"k"},{"id":"K_L","text":"l"},{"id":"T_new_20","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1","nextlayer":"shift"},{"id":"K_Z","text":"z"},{"id":"K_X","text":"x"},{"id":"K_C","text":"c"},{"id":"K_V","text":"v"},{"id":"K_B","text":"b"},{"id":"K_N","text":"n"},{"id":"K_M","text":"m"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH"},{"text":":","id":"K_COLON","layer":"shift"},{"text":";","id":"K_COLON"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"shift","row":[{"id":1,"key":[{"id":"K_Q","text":"Q"},{"id":"K_W","text":"W"},{"id":"K_E","text":"E"},{"id":"K_R","text":"R"},{"id":"K_T","text":"T"},{"id":"K_Y","text":"Y"},{"id":"K_U","text":"U"},{"id":"K_I","text":"I"},{"id":"K_O","text":"O"},{"id":"K_P","text":"P"}]},{"id":2,"key":[{"id":"K_A","text":"A","pad":70},{"id":"U_0101","text":"\u0101"},{"id":"T_A_Hook","text":"a\u0327"},{"id":"T_A_Candrabindu","text":"a\u0310"},{"id":"U_0104","text":"\u0104"},{"id":"K_H","text":"h","sk":[{"text":"\u0103","id":"U_0103"},{"text":"a\u0305","id":"T_A_305"}]},{"id":"K_J","text":"J"},{"id":"K_K","text":"K"},{"id":"K_L","text":"L"},{"id":"T_new_54","text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"2","nextlayer":"default"},{"id":"K_Z","text":"Z"},{"id":"K_X","text":"X"},{"id":"K_C","text":"C"},{"id":"K_V","text":"V"},{"id":"K_B","text":"B"},{"id":"K_N","text":"N"},{"id":"K_M","text":"M"},{"id":"K_PERIOD","text":".","sk":[{"text":",","id":"K_COMMA","layer":"default"},{"text":"!","id":"K_1","layer":"shift"},{"text":"?","id":"K_SLASH","layer":"shift"},{"text":"'","id":"K_QUOTE","layer":"default"},{"text":"\"","id":"K_QUOTE","layer":"shift"},{"text":"\\","id":"K_BKSLASH","layer":"default"},{"text":":","id":"K_COLON"},{"text":";","id":"K_COLON","layer":"default"}]},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_NUMLOCK","text":"*123*","width":"140","sp":"1","nextlayer":"numeric"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","text":"","width":"630","sp":"0"},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]},{"id":"numeric","row":[{"id":1,"key":[{"id":"K_1","text":"1"},{"id":"K_2","text":"2"},{"id":"K_3","text":"3"},{"id":"K_4","text":"4"},{"id":"K_5","text":"5"},{"id":"K_6","text":"6"},{"id":"K_7","text":"7"},{"id":"K_8","text":"8"},{"id":"K_9","text":"9"},{"id":"K_0","text":"0"}]},{"id":2,"key":[{"id":"K_4","layer":"shift","pad":70,"text":"$"},{"id":"K_2","layer":"shift","text":"@"},{"id":"K_3","layer":"shift","text":"#"},{"id":"K_5","layer":"shift","text":"%"},{"id":"K_7","layer":"shift","text":"&"},{"id":"K_HYPHEN","layer":"shift","text":"_"},{"id":"K_EQUAL","layer":"default","text":"="},{"id":"K_BKSLASH","layer":"shift","text":"|"},{"id":"K_BKSLASH","layer":"default","text":"\\"},{"text":"","width":"10","sp":"10"}]},{"id":3,"key":[{"id":"K_SHIFT","text":"*Shift*","width":"110","sp":"1"},{"id":"K_LBRKT","sk":[{"id":"U_00AB","text":"\u00AB"},{"id":"K_COMMA","text":"<","layer":"shift"},{"id":"K_LBRKT","text":"{","layer":"shift"}],"text":"["},{"id":"K_9","layer":"shift","text":"("},{"id":"K_0","layer":"shift","text":")"},{"id":"K_RBRKT","sk":[{"id":"U_00BB","text":"\u00BB"},{"id":"K_PERIOD","text":">","layer":"shift"},{"id":"K_RBRKT","text":"}","layer":"shift"}],"text":"]"},{"id":"K_EQUAL","layer":"shift","text":"+"},{"id":"K_HYPHEN","layer":"default","text":"-"},{"id":"K_8","layer":"shift","text":"*"},{"id":"K_SLASH","layer":"default","text":"\/"},{"id":"K_BKSP","text":"*BkSp*","width":"90","sp":"1"}]},{"id":4,"key":[{"id":"K_LOWER","text":"*abc*","width":"140","sp":"1","nextlayer":"default"},{"id":"K_LOPT","text":"*Menu*","width":"120","sp":"1"},{"id":"K_SPACE","width":"630","sp":"0","text":""},{"id":"K_ENTER","text":"*Enter*","width":"140","sp":"1"}]}]}]}};this.KVER="10.0.1031.0";this.gs=function(t,e) {return this.g0(t,e);};this.g0=function(t,e) {var k=KeymanWeb,r=0,m=0;if(k.KKM(e,16384,259)&&k.KCM(1,t,"c",1)) {r=m=1;k.KO(1,t,"?");}else if(k.KKM(e,16384,256)) {r=m=1;k.KO(0,t,"a̧");}else if(k.KKM(e,16384,257)) {r=m=1;k.KO(0,t,"a̐");}else if(k.KKM(e,16400,256)) {r=m=1;k.KO(0,t,"SHIFT a̧");}else if(k.KKM(e,16400,257)) {r=m=1;k.KO(0,t,"SHIFT a̐");}else if(k.KKM(e,16384,258)) {r=m=1;k.KO(0,t,"nothing");}else if(k.KKM(e,16384,260)) {r=m=1;k.KO(0,t,"a̅");}return r;};}
\ No newline at end of file
diff --git a/web/testing/issue160/issue160.kmx b/web/testing/issue160/issue160.kmx
deleted file mode 100644
index 9667d34214..0000000000
Binary files a/web/testing/issue160/issue160.kmx and /dev/null differ
diff --git a/web/testing/issue271/header.js b/web/testing/issue271/header.js
index d9054d02d3..b0d52effe9 100644
--- a/web/testing/issue271/header.js
+++ b/web/testing/issue271/header.js
@@ -1,118 +1,7 @@
-// JavaScript Document samplehdr.js: Keyboard management for KeymanWeb demonstration pages
+function setActiveKeyboard() {
+ var kmw=window['keyman'] ? keyman : tavultesoft.keymanweb;
-/*
- The keyboard name and/or BCP-47 code must be specified for each keyboard that is to be available.
- If the same keyboard is used for several languages, it must be listed for each
- language, but the keyboard itself will only be loaded once.
- If two (or more) keyboards are to be available for a given language, both must be listed.
- Any number of keyboards may be specified in one or more calls.
- Keyboard paths may be absolute (with respect to the server root) or relative to the keyboards option path.
- The actual keyboard object will be downloaded asynchronously when first selected for use.
-
- Each argument to addKeyboards() is a string, for example:
- european2 loads the current version of the Eurolatin 2 keyboard (for its default language)
- european2@fr loads the current version of the Eurolatin 2 keyboard for French
- european2@fr@1.2 loads version 1.2 of the Eurolatin 2 keyboard for French
-
- Argument syntax also supports the following extensions:
- @fr load the current version of the default keyboard for French
- @fr$ load all available keyboards (current version) for French
-
- Each call to addKeyboards() requires a single call to the remote server,
- (unless all keyboards listed are local and fully specified) so it is better
- to use multiple arguments rather than separate function calls.
-
- Calling addKeyboards() with no arguments returns a list of *all* available keyboards.
- The Toolbar (desktop browser) UI is best suited for allowing users to select
- the appropriate language and keyboard in this case.
-
- Keyboards may also be specified by language name using addKeyboardsForLanguage()
- for example:
- keymanweb.addKeyboardsForLanguage('Burmese');
-
- Appending $ to the language name will again cause all available keyboards for that
- language to be loaded rather than the default keyboard.
-
- The first call to addKeyboardsForLanguage() makes an additional call to the
- keyman API to load the current list of keyboard/language associations.
-
- In this example, the following function loads the indicated keyboards,
- and is called when the page loads.
-*/
-
- function loadKeyboards()
- {
- var kmw=window['keyman'] ? keyman : tavultesoft.keymanweb;
-
- // The first keyboard added will be the default keyboard for touch devices.
- // For faster loading, it may be best for the default keyboard to be
- // locally sourced.
- kmw.addKeyboards({id:'us',name:'English',languages:{id:'en',name:'English', region:'North America'},
- filename:'../us-1.0.js'});
-
- // Add more keyboards to the language menu, by keyboard name,
- // keyboard name and language code, or just the BCP-47 language code.
- kmw.addKeyboards('french','european2@sv','european2@no','@he');
-
- // Add a keyboard by language name. Note that the name must be spelled
- // correctly, or the keyboard will not be found. (Using BCP-47 codes is
- // usually easier.)
- kmw.addKeyboardsForLanguage('Dzongkha');
-
- // Add a fully-specified, locally-sourced, keyboard with custom font
- kmw.addKeyboards({id:'lao_2008_basic',name:'Lao Basic',
- languages:{
- id:'lo',name:'Lao',region:'Asia',
- font:{family:'LaoWeb',source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']}
- },
- filename:'../lao_2008_basic.js'
- });
-
- // The following two optional calls should be delayed until language menus are fully loaded:
- // (a) a specific mapped input element input is focused, to ensure that the OSK appears
- // (b) a specific keyboard is loaded, rather than the keyboard last used.
- //window.setTimeout(function(){kmw.setActiveElement('ta1',true);},2500);
- //window.setTimeout(function(){kmw.setActiveKeyboard('Keyboard_french','fr');},3000);
-
- // Note that locally specified keyboards will be listed before keyboards
- // requested from the remote server by user interfaces that do not order
- // keyboards alphabetically by language.
- }
-
- // Script to allow a user to add any keyboard to the keyboard menu
- function addKeyboard(n)
- {
- var sKbd, kmw=window['keyman'] ? keyman : tavultesoft.keymanweb;
- switch(n)
- {
- case 1:
- sKbd=document.getElementById('kbd_id1').value;
- kmw.addKeyboards(sKbd);
- break;
- case 2:
- sKbd=document.getElementById('kbd_id2').value.toLowerCase();
- kmw.addKeyboards('@'+sKbd);
- break;
- case 3:
- sKbd=document.getElementById('kbd_id3').value;
- kmw.addKeyboardsForLanguage(sKbd);
- break;
- }
- }
-
- // Add keyboard on Enter (as well as pressing button)
- function clickOnEnter(e,id)
- {
- e = e || window.event;
- if(e.keyCode == 13) addKeyboard(id);
- }
-
- function setActiveKeyboard() {
- var kmw=window['keyman'] ? keyman : tavultesoft.keymanweb;
-
- var sKbd = document.getElementById('kbd_id4').value;
- var sLng = document.getElementById('lang_id4').value;
- var result = kmw.setActiveKeyboard("Keyboard_" + sKbd, sLng);
- }
-
-
\ No newline at end of file
+ var sKbd = document.getElementById('kbd_id4').value;
+ var sLng = document.getElementById('lang_id4').value;
+ var result = kmw.setActiveKeyboard("Keyboard_" + sKbd, sLng);
+}
\ No newline at end of file
diff --git a/web/testing/issue271/index.html b/web/testing/issue271/index.html
index b091c9ad3c..ad3a27775b 100644
--- a/web/testing/issue271/index.html
+++ b/web/testing/issue271/index.html
@@ -23,7 +23,7 @@
-
+
-
+
-
+
+
-
+
KeymanWeb: Test page for interactions between setActiveKeyboard and the toolbar UI
This version is used to test the interactions of SetActiveKeyboard with the Toolbar UI.
@@ -58,7 +59,7 @@
french, fr
european2, no
european2, sv
-
hebrew, heb
+
hebrew, he
dzongkha, dzo
lao_2008_basic, lo
diff --git a/web/testing/issue29/index.html b/web/testing/issue29/index.html
index f67fd12e8c..12e6b1e125 100644
--- a/web/testing/issue29/index.html
+++ b/web/testing/issue29/index.html
@@ -23,7 +23,7 @@
-
+
-
+
-
+
+
-
+
KeymanWeb: Test desktop MutationObserver functionality
diff --git a/web/testing/issue29/issue-29.js b/web/testing/issue29/issue-29.js
index a292302c54..89fed7d541 100644
--- a/web/testing/issue29/issue-29.js
+++ b/web/testing/issue29/issue-29.js
@@ -1,128 +1,45 @@
-// JavaScript Document samplehdr.js: Keyboard management for KeymanWeb demonstration pages
+{
+var inputCounter = 1;
+}
-/*
- The keyboard name and/or BCP-47 code must be specified for each keyboard that is to be available.
- If the same keyboard is used for several languages, it must be listed for each
- language, but the keyboard itself will only be loaded once.
- If two (or more) keyboards are to be available for a given language, both must be listed.
- Any number of keyboards may be specified in one or more calls.
- Keyboard paths may be absolute (with respect to the server root) or relative to the keyboards option path.
- The actual keyboard object will be downloaded asynchronously when first selected for use.
-
- Each argument to addKeyboards() is a string, for example:
- european2 loads the current version of the Eurolatin 2 keyboard (for its default language)
- european2@fr loads the current version of the Eurolatin 2 keyboard for French
- european2@fr@1.2 loads version 1.2 of the Eurolatin 2 keyboard for French
-
- Argument syntax also supports the following extensions:
- @fr load the current version of the default keyboard for French
- @fr$ load all available keyboards (current version) for French
-
- Each call to addKeyboards() requires a single call to the remote server,
- (unless all keyboards listed are local and fully specified) so it is better
- to use multiple arguments rather than separate function calls.
-
- Calling addKeyboards() with no arguments returns a list of *all* available keyboards.
- The Toolbar (desktop browser) UI is best suited for allowing users to select
- the appropriate language and keyboard in this case.
+function addInputs() {
+ var masterDiv = document.getElementById('DynamicTextboxes');
- Keyboards may also be specified by language name using addKeyboardsForLanguage()
- for example:
- keymanweb.addKeyboardsForLanguage('Burmese');
-
- Appending $ to the language name will again cause all available keyboards for that
- language to be loaded rather than the default keyboard.
-
- The first call to addKeyboardsForLanguage() makes an additional call to the
- keyman API to load the current list of keyboard/language associations.
+ var newTextArea = document.createElement("textarea");
- In this example, the following function loads the indicated keyboards,
- and is called when the page loads.
-*/
+ var i = inputCounter++;
- function loadKeyboards()
- {
- var kmw=keyman;
-
- // The first keyboard added will be the default keyboard for touch devices.
- // For faster loading, it may be best for the default keyboard to be
- // locally sourced.
- kmw.addKeyboards({id:'us',name:'English',languages:{id:'en',name:'English'},
- filename:'../us-1.0.js'});
-
- // Add more keyboards to the language menu, by keyboard name,
- // keyboard name and language code, or just the BCP-47 language code.
- kmw.addKeyboards('french','european2@sv','european2@no','@he');
-
- // Add a keyboard by language name. Note that the name must be spelled
- // correctly, or the keyboard will not be found. (Using BCP-47 codes is
- // usually easier.)
- kmw.addKeyboardsForLanguage('Dzongkha');
-
- // Add a fully-specified, locally-sourced, keyboard with custom font
- kmw.addKeyboards({id:'lao_2008_basic',name:'Lao Basic',
- languages:{
- id:'lo',name:'Lao',region:'Asia',
- font:{family:'LaoWeb',source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']}
- },
- filename:'../lao_2008_basic.js'
- });
+ newTextArea.id = 'ta' + i;
+ newTextArea.className = 'test';
+ newTextArea.placeholder = "Dynamic area!";
- // The following two optional calls should be delayed until language menus are fully loaded:
- // (a) a specific mapped input element input is focused, to ensure that the OSK appears
- // (b) a specific keyboard is loaded, rather than the keyboard last used.
- //window.setTimeout(function(){kmw.setActiveElement('ta1',true);},2500);
- //window.setTimeout(function(){kmw.setActiveKeyboard('Keyboard_french','fr');},3000);
-
- // Note that locally specified keyboards will be listed before keyboards
- // requested from the remote server by user interfaces that do not order
- // keyboards alphabetically by language.
- }
-
- {
- var inputCounter = 1;
- }
-
- function addInputs()
- {
- var masterDiv = document.getElementById('DynamicTextboxes');
-
- var newTextArea = document.createElement("textarea");
-
- var i = inputCounter++;
-
- newTextArea.id = 'ta' + i;
- newTextArea.className = 'test';
- newTextArea.placeholder = "Dynamic area!";
-
- var newInput = document.createElement("input");
- newInput.id = 'in' + i;
- newInput.className = 'test';
- newInput.placeholder = "Dynamic area!";
-
- //masterDiv.appendChild(newTextArea);
- //masterDiv.appendChild(newInput);
-
- var newDiv = document.createElement("div");
-
- newDiv.appendChild(newTextArea);
- newDiv.appendChild(newInput);
-
- masterDiv.appendChild(newDiv);
- }
-
- function addIFrame()
- {
- var masterDiv = document.getElementById('DynamicTextboxes');
-
- var frame = document.createElement("iframe");
- frame.height = "100";
- frame.src = "issue-29-iframe.html";
- frame.onload = function() {console.log('Original onload!');};
-
- //masterDiv.appendChild(frame);
-
- var newDiv = document.createElement("div");
- newDiv.appendChild(frame);
- masterDiv.appendChild(newDiv);
- }
\ No newline at end of file
+ var newInput = document.createElement("input");
+ newInput.id = 'in' + i;
+ newInput.className = 'test';
+ newInput.placeholder = "Dynamic area!";
+
+ //masterDiv.appendChild(newTextArea);
+ //masterDiv.appendChild(newInput);
+
+ var newDiv = document.createElement("div");
+
+ newDiv.appendChild(newTextArea);
+ newDiv.appendChild(newInput);
+
+ masterDiv.appendChild(newDiv);
+}
+
+function addIFrame() {
+ var masterDiv = document.getElementById('DynamicTextboxes');
+
+ var frame = document.createElement("iframe");
+ frame.height = "100";
+ frame.src = "issue-29-iframe.html";
+ frame.onload = function() {console.log('Original onload!');};
+
+ //masterDiv.appendChild(frame);
+
+ var newDiv = document.createElement("div");
+ newDiv.appendChild(frame);
+ masterDiv.appendChild(newDiv);
+}
\ No newline at end of file
diff --git a/web/testing/issue53/index.html b/web/testing/issue53/index.html
index 3d7c850e90..42d6e94c9e 100644
--- a/web/testing/issue53/index.html
+++ b/web/testing/issue53/index.html
@@ -23,7 +23,7 @@
-
+
-
+
+
-
+
+
-
+
KeymanWeb: Light test for touch-based MutationObserver functionality
diff --git a/web/testing/issue62/issue-62.js b/web/testing/issue62/issue-62.js
index 3e53e21806..2baf9d63fb 100644
--- a/web/testing/issue62/issue-62.js
+++ b/web/testing/issue62/issue-62.js
@@ -1,98 +1,17 @@
-// JavaScript Document samplehdr.js: Keyboard management for KeymanWeb demonstration pages
+function addInputs()
+{
+ var masterDiv = document.getElementById('DynamicTextboxes');
-/*
- The keyboard name and/or BCP-47 code must be specified for each keyboard that is to be available.
- If the same keyboard is used for several languages, it must be listed for each
- language, but the keyboard itself will only be loaded once.
- If two (or more) keyboards are to be available for a given language, both must be listed.
- Any number of keyboards may be specified in one or more calls.
- Keyboard paths may be absolute (with respect to the server root) or relative to the keyboards option path.
- The actual keyboard object will be downloaded asynchronously when first selected for use.
-
- Each argument to addKeyboards() is a string, for example:
- european2 loads the current version of the Eurolatin 2 keyboard (for its default language)
- european2@fr loads the current version of the Eurolatin 2 keyboard for French
- european2@fr@1.2 loads version 1.2 of the Eurolatin 2 keyboard for French
-
- Argument syntax also supports the following extensions:
- @fr load the current version of the default keyboard for French
- @fr$ load all available keyboards (current version) for French
-
- Each call to addKeyboards() requires a single call to the remote server,
- (unless all keyboards listed are local and fully specified) so it is better
- to use multiple arguments rather than separate function calls.
-
- Calling addKeyboards() with no arguments returns a list of *all* available keyboards.
- The Toolbar (desktop browser) UI is best suited for allowing users to select
- the appropriate language and keyboard in this case.
+ var newTextArea = document.createElement("textarea");
+ newTextArea.id = 'ta2';
+ newTextArea.className = 'test';
+ newTextArea.placeholder = "Dynamic area!";
- Keyboards may also be specified by language name using addKeyboardsForLanguage()
- for example:
- keymanweb.addKeyboardsForLanguage('Burmese');
-
- Appending $ to the language name will again cause all available keyboards for that
- language to be loaded rather than the default keyboard.
-
- The first call to addKeyboardsForLanguage() makes an additional call to the
- keyman API to load the current list of keyboard/language associations.
+ var newInput = document.createElement("input");
+ newInput.id = 'in2';
+ newInput.className = 'test';
+ newInput.placeholder = "Dynamic area!";
- In this example, the following function loads the indicated keyboards,
- and is called when the page loads.
-*/
-
- function loadKeyboards()
- {
- var kmw=keyman;
-
- // The first keyboard added will be the default keyboard for touch devices.
- // For faster loading, it may be best for the default keyboard to be
- // locally sourced.
- kmw.addKeyboards({id:'us',name:'English',languages:{id:'en',name:'English'},
- filename:'../us-1.0.js'});
-
- // Add more keyboards to the language menu, by keyboard name,
- // keyboard name and language code, or just the BCP-47 language code.
- kmw.addKeyboards('french','european2@sv','european2@no','@he');
-
- // Add a keyboard by language name. Note that the name must be spelled
- // correctly, or the keyboard will not be found. (Using BCP-47 codes is
- // usually easier.)
- kmw.addKeyboardsForLanguage('Dzongkha');
-
- // Add a fully-specified, locally-sourced, keyboard with custom font
- kmw.addKeyboards({id:'lao_2008_basic',name:'Lao Basic',
- languages:{
- id:'lo',name:'Lao',region:'Asia',
- font:{family:'LaoWeb',source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']}
- },
- filename:'../lao_2008_basic.js'
- });
-
- // The following two optional calls should be delayed until language menus are fully loaded:
- // (a) a specific mapped input element input is focused, to ensure that the OSK appears
- // (b) a specific keyboard is loaded, rather than the keyboard last used.
- //window.setTimeout(function(){kmw.setActiveElement('ta1',true);},2500);
- //window.setTimeout(function(){kmw.setActiveKeyboard('Keyboard_french','fr');},3000);
-
- // Note that locally specified keyboards will be listed before keyboards
- // requested from the remote server by user interfaces that do not order
- // keyboards alphabetically by language.
- }
-
- function addInputs()
- {
- var masterDiv = document.getElementById('DynamicTextboxes');
-
- var newTextArea = document.createElement("textarea");
- newTextArea.id = 'ta2';
- newTextArea.className = 'test';
- newTextArea.placeholder = "Dynamic area!";
-
- var newInput = document.createElement("input");
- newInput.id = 'in2';
- newInput.className = 'test';
- newInput.placeholder = "Dynamic area!";
-
- masterDiv.appendChild(newTextArea);
- masterDiv.appendChild(newInput);
- }
\ No newline at end of file
+ masterDiv.appendChild(newTextArea);
+ masterDiv.appendChild(newInput);
+}
\ No newline at end of file
diff --git a/web/testing/issue63/index.html b/web/testing/issue63/index.html
index a42039e110..a62b8cade4 100644
--- a/web/testing/issue63/index.html
+++ b/web/testing/issue63/index.html
@@ -23,7 +23,7 @@
-
+
-
+
+
-
+
KeymanWeb: Test/stress-test touch-based MutationObserver functionality
diff --git a/web/testing/issue63/issue-63.js b/web/testing/issue63/issue-63.js
index 1f57e15e4e..5bc5a9e792 100644
--- a/web/testing/issue63/issue-63.js
+++ b/web/testing/issue63/issue-63.js
@@ -1,156 +1,70 @@
-// JavaScript Document samplehdr.js: Keyboard management for KeymanWeb demonstration pages
+{
+var inputCounter = 1;
+var removalCounter = 1;
+var removedElements = [];
+}
-/*
- The keyboard name and/or BCP-47 code must be specified for each keyboard that is to be available.
- If the same keyboard is used for several languages, it must be listed for each
- language, but the keyboard itself will only be loaded once.
- If two (or more) keyboards are to be available for a given language, both must be listed.
- Any number of keyboards may be specified in one or more calls.
- Keyboard paths may be absolute (with respect to the server root) or relative to the keyboards option path.
- The actual keyboard object will be downloaded asynchronously when first selected for use.
-
- Each argument to addKeyboards() is a string, for example:
- european2 loads the current version of the Eurolatin 2 keyboard (for its default language)
- european2@fr loads the current version of the Eurolatin 2 keyboard for French
- european2@fr@1.2 loads version 1.2 of the Eurolatin 2 keyboard for French
-
- Argument syntax also supports the following extensions:
- @fr load the current version of the default keyboard for French
- @fr$ load all available keyboards (current version) for French
-
- Each call to addKeyboards() requires a single call to the remote server,
- (unless all keyboards listed are local and fully specified) so it is better
- to use multiple arguments rather than separate function calls.
-
- Calling addKeyboards() with no arguments returns a list of *all* available keyboards.
- The Toolbar (desktop browser) UI is best suited for allowing users to select
- the appropriate language and keyboard in this case.
+function addInputs() {
+ var masterDiv = document.getElementById('DynamicTextboxes');
- Keyboards may also be specified by language name using addKeyboardsForLanguage()
- for example:
- keymanweb.addKeyboardsForLanguage('Burmese');
-
- Appending $ to the language name will again cause all available keyboards for that
- language to be loaded rather than the default keyboard.
-
- The first call to addKeyboardsForLanguage() makes an additional call to the
- keyman API to load the current list of keyboard/language associations.
+ var newTextArea = document.createElement("textarea");
- In this example, the following function loads the indicated keyboards,
- and is called when the page loads.
-*/
+ var i = inputCounter++;
- function loadKeyboards()
- {
- var kmw=keyman;
-
- // The first keyboard added will be the default keyboard for touch devices.
- // For faster loading, it may be best for the default keyboard to be
- // locally sourced.
- kmw.addKeyboards({id:'us',name:'English',languages:{id:'en',name:'English'},
- filename:'../us-1.0.js'});
-
- // Add more keyboards to the language menu, by keyboard name,
- // keyboard name and language code, or just the BCP-47 language code.
- kmw.addKeyboards('french','european2@sv','european2@no','@he');
-
- // Add a keyboard by language name. Note that the name must be spelled
- // correctly, or the keyboard will not be found. (Using BCP-47 codes is
- // usually easier.)
- kmw.addKeyboardsForLanguage('Dzongkha');
-
- // Add a fully-specified, locally-sourced, keyboard with custom font
- kmw.addKeyboards({id:'lao_2008_basic',name:'Lao Basic',
- languages:{
- id:'lo',name:'Lao',region:'Asia',
- font:{family:'LaoWeb',source:['../font/saysettha_web.ttf','../font/saysettha_web.woff','../font/saysettha_web.eot']}
- },
- filename:'../lao_2008_basic.js'
- });
+ newTextArea.id = 'ta' + i;
+ newTextArea.className = 'test';
+ newTextArea.placeholder = "Dynamic area #" + i + "!";
- // The following two optional calls should be delayed until language menus are fully loaded:
- // (a) a specific mapped input element input is focused, to ensure that the OSK appears
- // (b) a specific keyboard is loaded, rather than the keyboard last used.
- //window.setTimeout(function(){kmw.setActiveElement('ta1',true);},2500);
- //window.setTimeout(function(){kmw.setActiveKeyboard('Keyboard_french','fr');},3000);
-
- // Note that locally specified keyboards will be listed before keyboards
- // requested from the remote server by user interfaces that do not order
- // keyboards alphabetically by language.
+ var newInput = document.createElement("input");
+ newInput.id = 'in' + i;
+ newInput.className = 'test';
+ newInput.placeholder = "Dynamic area #" + i + "!";
+
+ //masterDiv.appendChild(newTextArea);
+ //masterDiv.appendChild(newInput);
+
+ var newDiv = document.createElement("div");
+ newDiv.id = "dynamic_div" + i;
+
+ //newDiv.appendChild(newTextArea);
+ newDiv.appendChild(newInput);
+
+ masterDiv.appendChild(newDiv);
+}
+
+function removeInputs() {
+ var parent = document.getElementById('DynamicTextboxes');
+ var div = document.getElementById("dynamic_div" + removalCounter);
+ if(div) {
+ removalCounter++;
+ parent.removeChild(div);
+ removedElements.push(div);
}
-
+}
+
+function restoreInputs() {
+ var masterDiv = document.getElementById('DynamicTextboxes');
+ removalCounter = 1;
+
+ for(var i = 0; i < removedElements.length; i++)
{
- var inputCounter = 1;
- var removalCounter = 1;
- var removedElements = [];
+ masterDiv.appendChild(removedElements[i]);
}
-
- function addInputs()
- {
- var masterDiv = document.getElementById('DynamicTextboxes');
-
- var newTextArea = document.createElement("textarea");
-
- var i = inputCounter++;
-
- newTextArea.id = 'ta' + i;
- newTextArea.className = 'test';
- newTextArea.placeholder = "Dynamic area #" + i + "!";
-
- var newInput = document.createElement("input");
- newInput.id = 'in' + i;
- newInput.className = 'test';
- newInput.placeholder = "Dynamic area #" + i + "!";
-
- //masterDiv.appendChild(newTextArea);
- //masterDiv.appendChild(newInput);
-
- var newDiv = document.createElement("div");
- newDiv.id = "dynamic_div" + i;
-
- //newDiv.appendChild(newTextArea);
- newDiv.appendChild(newInput);
-
- masterDiv.appendChild(newDiv);
- }
-
- function removeInputs()
- {
- var parent = document.getElementById('DynamicTextboxes');
- var div = document.getElementById("dynamic_div" + removalCounter);
- if(div)
- {
- removalCounter++;
- parent.removeChild(div);
- removedElements.push(div);
- }
- }
-
- function restoreInputs()
- {
- var masterDiv = document.getElementById('DynamicTextboxes');
- removalCounter = 1;
-
- for(var i = 0; i < removedElements.length; i++)
- {
- masterDiv.appendChild(removedElements[i]);
- }
-
- removedElements = [];
- }
-
- function addIFrame()
- {
- var masterDiv = document.getElementById('DynamicTextboxes');
-
- var frame = document.createElement("iframe");
- frame.height = "100";
- frame.src = "issue-29-iframe.html";
- frame.onload = function() {console.log('Original onload!');};
-
- //masterDiv.appendChild(frame);
-
- var newDiv = document.createElement("div");
- newDiv.appendChild(frame);
- masterDiv.appendChild(newDiv);
- }
\ No newline at end of file
+
+ removedElements = [];
+}
+
+function addIFrame() {
+ var masterDiv = document.getElementById('DynamicTextboxes');
+
+ var frame = document.createElement("iframe");
+ frame.height = "100";
+ frame.src = "issue-29-iframe.html";
+ frame.onload = function() {console.log('Original onload!');};
+
+ //masterDiv.appendChild(frame);
+
+ var newDiv = document.createElement("div");
+ newDiv.appendChild(frame);
+ masterDiv.appendChild(newDiv);
+}
\ No newline at end of file
diff --git a/web/testing/keyboard-errors/index.html b/web/testing/keyboard-errors/index.html
index 2543065e2c..913bc484d3 100644
--- a/web/testing/keyboard-errors/index.html
+++ b/web/testing/keyboard-errors/index.html
@@ -23,7 +23,7 @@
-
+
-
+
+
-
+
-
+
diff --git a/web/testing/unminified.html b/web/testing/unminified.html
index 4fa727114e..f83b4ba2cb 100644
--- a/web/testing/unminified.html
+++ b/web/testing/unminified.html
@@ -23,7 +23,7 @@
-
+
-
+
-
+