From 15939a34a9cda3f1489f72f5585ceeaedbbbea35 Mon Sep 17 00:00:00 2001 From: Joshua Horton Date: Fri, 12 May 2017 10:08:54 +0700 Subject: [PATCH] Refactored setupDesktopPage() to allow for setup of dynamically-added inputs after page initialization, added setup for solving #29. Includes present code for testing the issue. --- testing/issues-29-63.html | 99 ++++++++++++++++++++++++++++++++ testing/issues-29-63.js | 116 ++++++++++++++++++++++++++++++++++++++ testing/lao_2008_basic.js | 1 + testing/us-1.0.js | 1 + web/source/keymanweb.js | 82 ++++++++++++++++++++++++--- 5 files changed, 290 insertions(+), 9 deletions(-) create mode 100644 testing/issues-29-63.html create mode 100644 testing/issues-29-63.js create mode 100644 testing/lao_2008_basic.js create mode 100644 testing/us-1.0.js diff --git a/testing/issues-29-63.html b/testing/issues-29-63.html new file mode 100644 index 0000000000..e3a8367f99 --- /dev/null +++ b/testing/issues-29-63.html @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + KeymanWeb Sample Page - Uncompiled Source + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

KeymanWeb Sample Page - Uncompiled Source

+ +
+ +
+ + +
+
+ +

Return to testing home page

+ + + + + + + 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; }