+
+
+
+
+
+
+
diff --git a/testing/issues-29-63.js b/testing/issues-29-63.js
new file mode 100644
index 0000000000..e0b5b4ca9c
--- /dev/null
+++ b/testing/issues-29-63.js
@@ -0,0 +1,116 @@
+// JavaScript Document samplehdr.js: Keyboard management for KeymanWeb demonstration pages
+
+/*
+ The keyboard name and/or ISO 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@fra loads the current version of the Eurolatin 2 keyboard for French
+ european2@fra@1.2 loads version 1.2 of the Eurolatin 2 keyboard for French
+
+ Argument syntax also supports the following extensions:
+ @fra load the current version of the default keyboard for French
+ @fra$ 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=tavultesoft.keymanweb;
+
+ // The first keyboard added will be the default keyboard for touch devices.
+ // For faster loading, it may be best for the default keybaord to be
+ // locally sourced.
+ kmw.addKeyboards({id:'us',name:'English',language:{id:'eng',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 ISO 639 language code.
+ kmw.addKeyboards('french','european2@swe','european2@nor','@heb');
+
+ // Add a keyboard by language name. Note that the name must be spelled
+ // correctly, or the keyboard will not be found. (Using ISO 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',
+ language:{
+ id:'lao',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','fra');},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);
+
+ // keymanweb.inputList = [];
+ // keymanweb.setupDesktopPage();
+ // keymanweb._AttachToControls(newTextArea);
+ // keymanweb._AttachToControls(newInput);
+
+ keymanweb.setupDesktopElement(newTextArea);
+ keymanweb.setupDesktopElement(newInput);
+ keymanweb.attachToControl(newTextArea);
+ keymanweb.attachToControl(newInput);
+ keymanweb.listInputs();
+ }
\ No newline at end of file
diff --git a/testing/lao_2008_basic.js b/testing/lao_2008_basic.js
new file mode 100644
index 0000000000..fa1eefddb4
--- /dev/null
+++ b/testing/lao_2008_basic.js
@@ -0,0 +1 @@
+KeymanWeb.KR(new Keyboard_lao_2008_basic()); function Keyboard_lao_2008_basic() {this.KI="Keyboard_lao_2008_basic";this.KN="Lao 2008 Basic";this.KV={F:' 1em "Saysettha OT"',K102:0,BK:new Array("* ","ຢ ","ຟ ","ໂ ","ຖ ","ກຸ ","ກູ ","ຄ ","ຕ ","ຈ ","ຂ ","ຊ ","ກໍ ","","","","ກົ ","ໄ ","ກໍາ","ພ ","ະ ","ກິ ","ກີ ","ຮ ","ນ ","ຍ ","ບ ","ລ ","\\ ","","","","ກັ ","ຫ ","ກ ","ດ ","ເ ","ກ້ ","ກ່ ","າ ","ສ ","ວ ","ງ ","","","","","","","ຜ ","ປ ","ແ ","ອ ","ກຶ ","ກື ","ທ ","ມ ","ໃ ","ຝ ","","","","","","","/ ","1 ","2 ","3 ","4 ","ກ໌ ","ກຼ ","5 ","6 ","7 ","8 ","9 ","ກໍ່ ","","","","ກົ້ ","0 ","ກໍ້າ ","_ ","+ ","ກິ້ ","ກີ້ ","ຣ ","ໜ ","ຽ ","- ","ຫຼ ",">:<","","","","ກັ້ ","; ",". ",", ",": "," "," ","! ","? ","% ","= ","","","","","","","\" ","( ","ຯ ","x ","ກຶ້ ","ກື້ ","ໆ ","ໝ ","$ ",") ","","","","",""," ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""," ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","₭","໑","໒","໓","໔","","","໕","໖","໗","໘","໙","€","","","","","໐","","","","","","","","","[","]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")};this.KH='';this.KM=0;this.s12="ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮໝໜຼ";this.s13="d07'9l-pf84mo[xz/r2,1I];svi{~";this.s33="QEYUABN+";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,16480,48)){r=m=1;k.KO(0,t,"໘");}else if(k.KKM(e,16480,49)){r=m=1;k.KO(0,t,"໑");}else if(k.KKM(e,16480,50)){r=m=1;k.KO(0,t,"໒");}else if(k.KKM(e,16480,51)){r=m=1;k.KO(0,t,"໓");}else if(k.KKM(e,16480,52)){r=m=1;k.KO(0,t,"໔");}else if(k.KKM(e,16480,55)){r=m=1;k.KO(0,t,"໕");}else if(k.KKM(e,16480,56)){r=m=1;k.KO(0,t,"໖");}else if(k.KKM(e,16480,57)){r=m=1;k.KO(0,t,"໗");}else if(k.KKM(e,16480,87)){r=m=1;k.KO(0,t,"໐");}else if(k.KKM(e,16384,96)){r=m=1;k.KO(0,t,"0");}else if(k.KKM(e,16384,97)){r=m=1;k.KO(0,t,"1");}else if(k.KKM(e,16384,98)){r=m=1;k.KO(0,t,"2");}else if(k.KKM(e,16384,99)){r=m=1;k.KO(0,t,"3");}else if(k.KKM(e,16384,100)){r=m=1;k.KO(0,t,"4");}else if(k.KKM(e,16384,101)){r=m=1;k.KO(0,t,"5");}else if(k.KKM(e,16384,102)){r=m=1;k.KO(0,t,"6");}else if(k.KKM(e,16384,103)){r=m=1;k.KO(0,t,"7");}else if(k.KKM(e,16384,104)){r=m=1;k.KO(0,t,"8");}else if(k.KKM(e,16384,105)){r=m=1;k.KO(0,t,"9");}else if(k.KKM(e,16384,106)){r=m=1;k.KO(0,t,"*");}else if(k.KKM(e,16384,107)){r=m=1;k.KO(0,t,"+");}else if(k.KKM(e,16384,109)){r=m=1;k.KO(0,t,"-");}else if(k.KKM(e,16384,110)){r=m=1;k.KO(0,t,".");}else if(k.KKM(e,16384,111)){r=m=1;k.KO(0,t,"/");}else if(k.KKM(e,16480,187)){r=m=1;k.KO(0,t,"€");}else if(k.KKM(e,16480,189)){r=m=1;k.KO(0,t,"໙");}else if(k.KKM(e,16480,192)){r=m=1;k.KO(0,t,"₭");}else if(k.KKM(e,16480,219)){r=m=1;k.KO(0,t,"[");}else if(k.KKM(e,16480,221)){r=m=1;k.KO(0,t,"]");}if(!m&&k.KIK(e)){r=this.g1(t,e);}return r;};this.g1=function(t,e){var k=KeymanWeb,r=0,m=0;if(k.KKM(e,16400,49)){r=m=1;k.KO(0,t,"1");}else if(k.KKM(e,16400,222)){r=m=1;k.KO(0,t,"=");}else if(k.KKM(e,16400,51)){r=m=1;k.KO(0,t,"3");}else if(k.KKM(e,16400,52)){r=m=1;k.KO(0,t,"4");}else if(k.KKM(e,16400,53)&&k.KCM(1,t,"ຳ",1)){r=m=1;k.KO(1,t,"໌");}else if(k.KKM(e,16400,53)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,53)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,53)&&k.KA(0,k.KC(1,1,t),this.s20)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,53)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,53)){r=m=1;k.KO(0,t,"໌");}else if(k.KKM(e,16400,55)){r=m=1;k.KO(0,t,"5");}else if(k.KKM(e,16384,222)){r=m=1;k.KO(0,t,"ງ");}else if(k.KKM(e,16400,57)){r=m=1;k.KO(0,t,"7");}else if(k.KKM(e,16400,48)){r=m=1;k.KO(0,t,"8");}else if(k.KKM(e,16400,56)){r=m=1;k.KO(0,t,"6");}else if(k.KKM(e,16400,187)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,187)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,187)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,187)){r=m=1;k.KO(0,t,"ໍ່");}else if(k.KKM(e,16384,188)){r=m=1;k.KO(0,t,"ມ");}else if(k.KKM(e,16384,189)){r=m=1;k.KO(0,t,"ຊ");}else if(k.KKM(e,16384,190)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,190)){r=m=1;k.KO(0,t,"ໃ");}else if(k.KKM(e,16384,191)){r=m=1;k.KO(0,t,"ຝ");}else if(k.KKM(e,16384,48)){r=m=1;k.KO(0,t,"ຂ");}else if(k.KKM(e,16384,49)){r=m=1;k.KO(0,t,"ຢ");}else if(k.KKM(e,16384,50)){r=m=1;k.KO(0,t,"ຟ");}else if(k.KKM(e,16384,51)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,51)){r=m=1;k.KO(0,t,"ໂ");}else if(k.KKM(e,16384,52)){r=m=1;k.KO(0,t,"ຖ");}else if(k.KKM(e,16384,53)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,53)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,53)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,53)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,53)){r=m=1;k.KO(0,t,"ຸ");}else if(k.KKM(e,16384,54)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,54)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,54)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,54)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,54)){r=m=1;k.KO(0,t,"ູ");}else if(k.KKM(e,16384,55)){r=m=1;k.KO(0,t,"ຄ");}else if(k.KKM(e,16384,56)){r=m=1;k.KO(0,t,"ຕ");}else if(k.KKM(e,16384,57)){r=m=1;k.KO(0,t,"ຈ");}else if(k.KKM(e,16400,186)){r=m=1;k.KO(0,t,"%");}else if(k.KKM(e,16384,186)){r=m=1;k.KO(0,t,"ວ");}else if(k.KKM(e,16400,188)){r=m=1;k.KO(0,t,"ໝ");}else if(k.KKM(e,16384,187)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,187)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,187)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,187)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,187)){r=m=1;k.KO(0,t,"ໍ");}else if(k.KKM(e,16400,190)){r=m=1;k.KO(0,t,"$");}else if(k.KKM(e,16400,191)){r=m=1;k.KO(0,t,")");}else if(k.KKM(e,16400,50)){r=m=1;k.KO(0,t,"2");}else if(k.KKM(e,16400,65)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,65)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,65)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,65)){r=m=1;k.KO(0,t,"ັ້");}else if(k.KKM(e,16400,66)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,66)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,66)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,66)){r=m=1;k.KO(0,t,"ຶ້");}else if(k.KKM(e,16400,67)){r=m=1;k.KO(0,t,"ຯ");}else if(k.KKM(e,16400,68)){r=m=1;k.KO(0,t,".");}else if(k.KKM(e,16400,69)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,69)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,69)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,69)){r=m=1;k.KO(0,t,"້ຳ");}else if(k.KKM(e,16400,70)){r=m=1;k.KO(0,t,",");}else if(k.KKM(e,16400,71)){r=m=1;k.KO(0,t,":");}else if(k.KKM(e,16400,72)&&k.KCM(1,t,"ຳ",1)){r=m=1;k.KO(1,t,"໊");}else if(k.KKM(e,16400,72)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,72)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,72)&&k.KA(0,k.KC(1,1,t),this.s20)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,72)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,72)){r=m=1;k.KO(0,t,"໊");}else if(k.KKM(e,16400,73)){r=m=1;k.KO(0,t,"ຣ");}else if(k.KKM(e,16400,74)&&k.KCM(1,t,"ຳ",1)){r=m=1;k.KO(1,t,"໋");}else if(k.KKM(e,16400,74)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,74)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,74)&&k.KA(0,k.KC(1,1,t),this.s20)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,74)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,74)){r=m=1;k.KO(0,t,"໋");}else if(k.KKM(e,16400,75)){r=m=1;k.KO(0,t,"!");}else if(k.KKM(e,16400,76)){r=m=1;k.KO(0,t,"?");}else if(k.KKM(e,16400,77)){r=m=1;k.KO(0,t,"ໆ");}else if(k.KKM(e,16400,78)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,78)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,78)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,78)){r=m=1;k.KO(0,t,"ື້");}else if(k.KKM(e,16400,79)){r=m=1;k.KO(0,t,"ໜ");}else if(k.KKM(e,16400,80)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,80)){r=m=1;k.KO(0,t,"ຽ");}else if(k.KKM(e,16400,81)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,81)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,81)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,81)){r=m=1;k.KO(0,t,"ົ້");}else if(k.KKM(e,16400,82)){r=m=1;k.KO(0,t,"_");}else if(k.KKM(e,16400,83)){r=m=1;k.KO(0,t,";");}else if(k.KKM(e,16400,84)){r=m=1;k.KO(0,t,"+");}else if(k.KKM(e,16400,85)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,85)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,85)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,85)){r=m=1;k.KO(0,t,"ີ້");}else if(k.KKM(e,16400,86)){r=m=1;k.KO(0,t,"x");}else if(k.KKM(e,16400,87)){r=m=1;k.KO(0,t,"0");}else if(k.KKM(e,16400,88)){r=m=1;k.KO(0,t,"(");}else if(k.KKM(e,16400,89)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,89)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,89)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16400,89)){r=m=1;k.KO(0,t,"ິ້");}else if(k.KKM(e,16400,90)){r=m=1;k.KO(0,t,"\"");}else if(k.KKM(e,16384,219)){r=m=1;k.KO(0,t,"ບ");}else if(k.KKM(e,16384,221)){r=m=1;k.KO(0,t,"ລ");}else if(k.KKM(e,16400,54)){r=m=1;k.KO(0,t,"ຼ");}else if(k.KKM(e,16400,189)){r=m=1;k.KO(0,t,"9");}else if(k.KKM(e,16384,192)){r=m=1;k.KO(0,t,"*");}else if(k.KKM(e,16384,65)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,65)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,65)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,65)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,65)){r=m=1;k.KO(0,t,"ັ");}else if(k.KKM(e,16384,66)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,66)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,66)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,66)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,66)){r=m=1;k.KO(0,t,"ຶ");}else if(k.KKM(e,16384,67)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,67)){r=m=1;k.KO(0,t,"ແ");}else if(k.KKM(e,16384,68)){r=m=1;k.KO(0,t,"ກ");}else if(k.KKM(e,16384,69)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KO(-1,t,"ຳ");}else if(k.KKM(e,16384,69)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,69)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,69)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,69)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,69)){r=m=1;k.KO(0,t,"ຳ");}else if(k.KKM(e,16384,70)){r=m=1;k.KO(0,t,"ດ");}else if(k.KKM(e,16384,71)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,71)){r=m=1;k.KO(0,t,"ເ");}else if(k.KKM(e,16384,72)&&k.KCM(1,t,"ຳ",1)){r=m=1;k.KO(1,t,"້");}else if(k.KKM(e,16384,72)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,72)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,72)&&k.KA(0,k.KC(1,1,t),this.s20)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,72)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,72)){r=m=1;k.KO(0,t,"້");}else if(k.KKM(e,16384,73)){r=m=1;k.KO(0,t,"ຮ");}else if(k.KKM(e,16384,74)&&k.KCM(1,t,"ຳ",1)){r=m=1;k.KO(1,t,"່");}else if(k.KKM(e,16384,74)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,74)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,74)&&k.KA(0,k.KC(1,1,t),this.s20)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,74)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,74)){r=m=1;k.KO(0,t,"່");}else if(k.KKM(e,16384,75)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,75)&&k.KCM(1,t,"ະ",1)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,75)&&k.KCM(1,t,"າ",1)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,75)){r=m=1;k.KO(0,t,"າ");}else if(k.KKM(e,16384,76)){r=m=1;k.KO(0,t,"ສ");}else if(k.KKM(e,16384,77)){r=m=1;k.KO(0,t,"ທ");}else if(k.KKM(e,16384,78)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,78)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,78)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,78)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,78)){r=m=1;k.KO(0,t,"ື");}else if(k.KKM(e,16384,79)){r=m=1;k.KO(0,t,"ນ");}else if(k.KKM(e,16384,80)){r=m=1;k.KO(0,t,"ຍ");}else if(k.KKM(e,16384,81)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,81)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,81)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,81)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,81)){r=m=1;k.KO(0,t,"ົ");}else if(k.KKM(e,16384,82)){r=m=1;k.KO(0,t,"ພ");}else if(k.KKM(e,16384,83)){r=m=1;k.KO(0,t,"ຫ");}else if(k.KKM(e,16384,84)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,84)&&k.KCM(1,t,"ະ",1)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,84)){r=m=1;k.KO(0,t,"ະ");}else if(k.KKM(e,16384,85)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,85)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,85)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,85)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,85)){r=m=1;k.KO(0,t,"ີ");}else if(k.KKM(e,16384,86)){r=m=1;k.KO(0,t,"ອ");}else if(k.KKM(e,16384,87)&&k.KA(0,k.KC(1,1,t),this.s18)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,87)){r=m=1;k.KO(0,t,"ໄ");}else if(k.KKM(e,16384,88)){r=m=1;k.KO(0,t,"ປ");}else if(k.KKM(e,16384,89)&&k.KA(0,k.KC(1,1,t),this.s22)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,89)&&k.KA(0,k.KC(1,1,t),this.s14)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,89)&&k.KA(0,k.KC(1,1,t),this.s16)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,89)&&k.KA(0,k.KC(1,1,t),this.s24)){r=m=1;k.KB(t);}else if(k.KKM(e,16384,89)){r=m=1;k.KO(0,t,"ິ");}else if(k.KKM(e,16384,90)){r=m=1;k.KO(0,t,"ຜ");}else if(k.KKM(e,16400,219)){r=m=1;k.KO(0,t,"-");}else if(k.KKM(e,16400,220)){r=m=1;k.KO(0,t,"");}else if(k.KKM(e,16400,221)){r=m=1;k.KO(0,t,"ຫຼ");}else if(k.KKM(e,16400,192)){r=m=1;k.KO(0,t,"/");}return r;};}
\ No newline at end of file
diff --git a/testing/us-1.0.js b/testing/us-1.0.js
new file mode 100644
index 0000000000..b78e19f4e5
--- /dev/null
+++ b/testing/us-1.0.js
@@ -0,0 +1 @@
+KeymanWeb.KR(new Keyboard_us()); function Keyboard_us() {this.KI="Keyboard_us";this.KN="US";this.KV={F:' 1em "Arial"',K102:0,BK:new Array("`","1","2","3","4","5","6","7","8","9","0","-","=","","","","q","w","e","r","t","y","u","i","o","p","[","]","\\","","","","a","s","d","f","g","h","j","k","l",";","'","","","","","","\\","z","x","c","v","b","n","m",",",".","/","","","","",""," ","~","!","@","#","$","%","^","&","*","(",")","_","+","","","","Q","W","E","R","T","Y","U","I","O","P","{","}","|","","","","A","S","D","F","G","H","J","K","L",":","\"","","","","","","|","Z","X","C","V","B","N","M","<",">","?","","","","",""," ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""," ")};this.KH='';this.KM=0;this.gs=function(t,e){return this.g0(t,e);};this.g0=function(t,e){var k=KeymanWeb,m=0;if(k.KKM(e,16384,32)){m=1;k.KO(0,t," ");}else if(k.KKM(e,16400,32)){m=1;k.KO(0,t," ");}else if(k.KKM(e,16416,32)){m=1;k.KO(0,t," ");}else if(k.KKM(e,16384,48)){m=1;k.KO(0,t,"0");}else if(k.KKM(e,16400,48)){m=1;k.KO(0,t,")");}else if(k.KKM(e,16384,49)){m=1;k.KO(0,t,"1");}else if(k.KKM(e,16400,49)){m=1;k.KO(0,t,"!");}else if(k.KKM(e,16384,50)){m=1;k.KO(0,t,"2");}else if(k.KKM(e,16400,50)){m=1;k.KO(0,t,"@");}else if(k.KKM(e,16384,51)){m=1;k.KO(0,t,"3");}else if(k.KKM(e,16400,51)){m=1;k.KO(0,t,"#");}else if(k.KKM(e,16384,52)){m=1;k.KO(0,t,"4");}else if(k.KKM(e,16400,52)){m=1;k.KO(0,t,"$");}else if(k.KKM(e,16384,53)){m=1;k.KO(0,t,"5");}else if(k.KKM(e,16400,53)){m=1;k.KO(0,t,"%");}else if(k.KKM(e,16384,54)){m=1;k.KO(0,t,"6");}else if(k.KKM(e,16400,54)){m=1;k.KO(0,t,"^");}else if(k.KKM(e,16384,55)){m=1;k.KO(0,t,"7");}else if(k.KKM(e,16400,55)){m=1;k.KO(0,t,"&");}else if(k.KKM(e,16384,56)){m=1;k.KO(0,t,"8");}else if(k.KKM(e,16400,56)){m=1;k.KO(0,t,"*");}else if(k.KKM(e,16384,57)){m=1;k.KO(0,t,"9");}else if(k.KKM(e,16400,57)){m=1;k.KO(0,t,"(");}else if(k.KKM(e,16384,65)){m=1;k.KO(0,t,"a");}else if(k.KKM(e,16400,65)){m=1;k.KO(0,t,"A");}else if(k.KKM(e,16384,66)){m=1;k.KO(0,t,"b");}else if(k.KKM(e,16400,66)){m=1;k.KO(0,t,"B");}else if(k.KKM(e,16384,67)){m=1;k.KO(0,t,"c");}else if(k.KKM(e,16400,67)){m=1;k.KO(0,t,"C");}else if(k.KKM(e,16384,68)){m=1;k.KO(0,t,"d");}else if(k.KKM(e,16400,68)){m=1;k.KO(0,t,"D");}else if(k.KKM(e,16384,69)){m=1;k.KO(0,t,"e");}else if(k.KKM(e,16400,69)){m=1;k.KO(0,t,"E");}else if(k.KKM(e,16384,70)){m=1;k.KO(0,t,"f");}else if(k.KKM(e,16400,70)){m=1;k.KO(0,t,"F");}else if(k.KKM(e,16384,71)){m=1;k.KO(0,t,"g");}else if(k.KKM(e,16400,71)){m=1;k.KO(0,t,"G");}else if(k.KKM(e,16384,72)){m=1;k.KO(0,t,"h");}else if(k.KKM(e,16400,72)){m=1;k.KO(0,t,"H");}else if(k.KKM(e,16384,73)){m=1;k.KO(0,t,"i");}else if(k.KKM(e,16400,73)){m=1;k.KO(0,t,"I");}else if(k.KKM(e,16384,74)){m=1;k.KO(0,t,"j");}else if(k.KKM(e,16400,74)){m=1;k.KO(0,t,"J");}else if(k.KKM(e,16384,75)){m=1;k.KO(0,t,"k");}else if(k.KKM(e,16400,75)){m=1;k.KO(0,t,"K");}else if(k.KKM(e,16384,76)){m=1;k.KO(0,t,"l");}else if(k.KKM(e,16400,76)){m=1;k.KO(0,t,"L");}else if(k.KKM(e,16384,77)){m=1;k.KO(0,t,"m");}else if(k.KKM(e,16400,77)){m=1;k.KO(0,t,"M");}else if(k.KKM(e,16384,78)){m=1;k.KO(0,t,"n");}else if(k.KKM(e,16400,78)){m=1;k.KO(0,t,"N");}else if(k.KKM(e,16384,79)){m=1;k.KO(0,t,"o");}else if(k.KKM(e,16400,79)){m=1;k.KO(0,t,"O");}else if(k.KKM(e,16384,80)){m=1;k.KO(0,t,"p");}else if(k.KKM(e,16400,80)){m=1;k.KO(0,t,"P");}else if(k.KKM(e,16384,81)){m=1;k.KO(0,t,"q");}else if(k.KKM(e,16400,81)){m=1;k.KO(0,t,"Q");}else if(k.KKM(e,16384,82)){m=1;k.KO(0,t,"r");}else if(k.KKM(e,16400,82)){m=1;k.KO(0,t,"R");}else if(k.KKM(e,16384,83)){m=1;k.KO(0,t,"s");}else if(k.KKM(e,16400,83)){m=1;k.KO(0,t,"S");}else if(k.KKM(e,16384,84)){m=1;k.KO(0,t,"t");}else if(k.KKM(e,16400,84)){m=1;k.KO(0,t,"T");}else if(k.KKM(e,16384,85)){m=1;k.KO(0,t,"u");}else if(k.KKM(e,16400,85)){m=1;k.KO(0,t,"U");}else if(k.KKM(e,16384,86)){m=1;k.KO(0,t,"v");}else if(k.KKM(e,16400,86)){m=1;k.KO(0,t,"V");}else if(k.KKM(e,16384,87)){m=1;k.KO(0,t,"w");}else if(k.KKM(e,16400,87)){m=1;k.KO(0,t,"W");}else if(k.KKM(e,16384,88)){m=1;k.KO(0,t,"x");}else if(k.KKM(e,16400,88)){m=1;k.KO(0,t,"X");}else if(k.KKM(e,16384,89)){m=1;k.KO(0,t,"y");}else if(k.KKM(e,16400,89)){m=1;k.KO(0,t,"Y");}else if(k.KKM(e,16384,90)){m=1;k.KO(0,t,"z");}else if(k.KKM(e,16400,90)){m=1;k.KO(0,t,"Z");}else if(k.KKM(e,16384,186)){m=1;k.KO(0,t,";");}else if(k.KKM(e,16400,186)){m=1;k.KO(0,t,":");}else if(k.KKM(e,16384,187)){m=1;k.KO(0,t,"=");}else if(k.KKM(e,16400,187)){m=1;k.KO(0,t,"+");}else if(k.KKM(e,16384,188)){m=1;k.KO(0,t,",");}else if(k.KKM(e,16400,188)){m=1;k.KO(0,t,"<");}else if(k.KKM(e,16384,189)){m=1;k.KO(0,t,"-");}else if(k.KKM(e,16400,189)){m=1;k.KO(0,t,"_");}else if(k.KKM(e,16384,190)){m=1;k.KO(0,t,".");}else if(k.KKM(e,16400,190)){m=1;k.KO(0,t,">");}else if(k.KKM(e,16384,191)){m=1;k.KO(0,t,"/");}else if(k.KKM(e,16400,191)){m=1;k.KO(0,t,"?");}else if(k.KKM(e,16384,192)){m=1;k.KO(0,t,"`");}else if(k.KKM(e,16400,192)){m=1;k.KO(0,t,"~");}else if(k.KKM(e,16384,219)){m=1;k.KO(0,t,"[");}else if(k.KKM(e,16400,219)){m=1;k.KO(0,t,"{");}else if(k.KKM(e,16384,220)){m=1;k.KO(0,t,"\\");}else if(k.KKM(e,16400,220)){m=1;k.KO(0,t,"|");}else if(k.KKM(e,16384,221)){m=1;k.KO(0,t,"]");}else if(k.KKM(e,16400,221)){m=1;k.KO(0,t,"}");}else if(k.KKM(e,16384,222)){m=1;k.KO(0,t,"'");}else if(k.KKM(e,16400,222)){m=1;k.KO(0,t,"\"");}else if(k.KKM(e,16384,226)){m=1;k.KO(0,t,"\\");}else if(k.KKM(e,16400,226)){m=1;k.KO(0,t,"|");}return m;};}
\ No newline at end of file
diff --git a/web/source/keymanweb.js b/web/source/keymanweb.js
index 5a7d2181db..b9ccd4ebb8 100644
--- a/web/source/keymanweb.js
+++ b/web/source/keymanweb.js
@@ -1028,18 +1028,37 @@
var ipList=document.getElementsByTagName(k==0?'INPUT':'TEXTAREA');
for(var n=0;n= 0) return;
-
+
if(Pelem.tagName.toLowerCase() == 'iframe')
keymanweb._AttachToIframe(Pelem);
else
@@ -3155,6 +3174,8 @@
* Description Local function to get list of editable controls
*/
var LiTmp = function(_colon){return Pelem.getElementsByTagName(_colon);};
+
+ // If the element Pelem has any child elements, we wish to analyze those.
var Linputs = LiTmp('INPUT'),
Ltextareas = LiTmp('TEXTAREA'),
Lframes = LiTmp('IFRAME'),
@@ -3537,6 +3558,49 @@
// Restore and reload the currently selected keyboard
keymanweb.restoreCurrentKeyboard();
+ /* Setup of handlers for dynamically-added and (eventually) dynamically-removed elements.
+ * Reference: https://developer.mozilla.org/en/docs/Web/API/MutationObserver
+ *
+ * We place it here so that it loads after most of the other UI loads, reducing the MutationObserver's overhead.
+ */
+
+ keymanweb.observationTarget = document.querySelector('body');
+ keymanweb.mutationObserver = new MutationObserver(function(mutations)
+ {
+ var dirtyFlag = false; // Notes if we need to recompute our .sortedInputs array.
+ //console.log(mutations);
+
+ console.log(mutations.length);
+
+ for(i=0; i < mutations.length; i++)
+ {
+ mutation = mutations[i];
+
+ for(j = 0; j < mutation.addedNodes.length; j++)
+ {
+ var addedNode = mutation.addedNodes[j];
+
+ // Will need to handle this in case of child elements in a newly-added element with child elements.
+ // if(mutation.addedNode.getElementsByTagName) console.log(mutation.target.getElementsByTagName('INPUT'));
+
+ if(addedNode.tagName == 'INPUT' || addedNode.tagName == 'TEXTAREA')
+ {
+ dirtyFlag = true;
+ //TODO: Make this a function call that does the real work!
+ //console.log(addedNode, " - ", mutation);
+ }
+ }
+
+ // There also exists a 'mutation.removedNodes' array. We'll need to address that for issue #63.
+
+ // After all mutations have been handled, we need to recompile our .sortedInputs array.
+ if(dirtyFlag) keymanweb.listInputs();
+ }
+ });
+
+ keymanweb.observationConfig = { childList: true, subtree: true };
+ keymanweb.mutationObserver.observe(keymanweb.observationTarget, keymanweb.observationConfig);
+
// Set exposed initialization flag to 2 to indicate deferred initialization also complete
keymanweb['initialized']=2;
}