From 89339839fb91bf33f95a2b34288beda5fcced505 Mon Sep 17 00:00:00 2001 From: darcywong00 Date: Fri, 11 Aug 2017 16:16:55 +0700 Subject: [PATCH] Fix KMEA uncaught javascript references Javascript functions defined in keyboard.html need the window loaded before they can be called. -Also cleaned up formatting in keyboard.html --- .../KMEA/app/src/main/assets/keyboard.html | 398 +++++++++--------- .../java/com/tavultesoft/kmea/KMKeyboard.java | 6 +- web/.gitignore | 2 + 3 files changed, 210 insertions(+), 196 deletions(-) diff --git a/android/KMEA/app/src/main/assets/keyboard.html b/android/KMEA/app/src/main/assets/keyboard.html index 55c2641c16..413311ce40 100644 --- a/android/KMEA/app/src/main/assets/keyboard.html +++ b/android/KMEA/app/src/main/assets/keyboard.html @@ -1,201 +1,211 @@ - + - - - - Keyman - - + - - - -
- -
- + function getOskHeight() { + return oskHeight; + } + + function getOskWidth() { + if(oskWidth <= 0) { + oskWidth = window.jsInterface.getKeyboardWidth(); + } + window.console.log('Keyboard width = '+oskWidth); + return oskWidth; + } + + function setKeymanLanguage(keyboardName, internalName, languageName, langId, version, font, oskFont) { + //oskFont.files = ['NotoSansSyriacWestern-Regular.svg#NotoSansSyriacWesternRegular']; + //window.console.log('oskFonts = '+JSON.stringify(oskFont)); + var kmw=window['tavultesoft']['keymanweb']; + // Defaults for mising arguments + switch (arguments.length) { + case 1: + internalName = keyboardName; + if (keyboardName == 'English') { + internalName = 'us'; + } + break; + case 2: + languageName = keyboardName; + break; + case 3: + langId=''; + break; + case 6: + oskFont = font; + break; + } + + kmw['KRS']({KN:keyboardName,KI:'Keyboard_'+internalName,KLC:langId,KL:languageName, + KF:internalName+'-'+version+'.js',KFont:font,KOskFont:oskFont}); + kmw['setActiveKeyboard']('Keyboard_'+internalName,langId); + kmw['osk']['show'](true); + } + + function insertText(dn, s) { + window.console.log('insertText('+ dn +', ' + s +');'); + window.jsInterface.insertText(dn, s); + } + + function updateKMText(text) { + if(text == undefined) { + text = ''; + } + var ta = document.getElementById('ta'); + var kmw = window['tavultesoft']['keymanweb']; + ta.value = text; + kmw['setActiveElement'](ta); + } + + function updateKMSelectionRange(start, end) { + var ta = document.getElementById('ta'); + var kmw = window['tavultesoft']['keymanweb']; + ta.selectionStart = ta._KeymanWebSelectionStart = start; + ta.selectionEnd = ta._KeymanWebSelectionEnd = end; + kmw['setActiveElement'](ta); + } + + var fragmentToggle = 0; + function oskCreateKeyPreview(x,y,w,h,t) { + fragmentToggle = (fragmentToggle + 1) % 100; + var div = document.createElement('div'); + div.innerHTML = t; + var dt = div.firstChild.nodeValue; + window.location.hash = 'showKeyPreview-'+fragmentToggle+'+x='+x+'+y='+y+'+w='+w+'+h='+h+'+t='+toHex(dt); + } + + function oskClearKeyPreview() { + fragmentToggle = (fragmentToggle + 1) % 100; + window.location.hash = 'dismissKeyPreview-'+fragmentToggle; + } + + function oskCreatePopup(obj,x,y) { + if(obj != null) { + var i; + var s = ''; + var shift = false; + var keyPos = x.toString() + ',' + y.toString(); + for(i=0; i + + + +
+ +
+ \ No newline at end of file diff --git a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java index 147a2a13ea..eee996561a 100644 --- a/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java +++ b/android/KMEA/app/src/main/java/com/tavultesoft/kmea/KMKeyboard.java @@ -163,8 +163,10 @@ final class KMKeyboard extends WebView { public void onResume() { DisplayMetrics dms = context.getResources().getDisplayMetrics(); int kbWidth = (int) (dms.widthPixels / dms.density); - loadUrl(String.format("javascript:setOskWidth(%d)", kbWidth)); - loadUrl("javascript:setOskHeight(0)"); + // Ensure window is loaded for javascript functions + loadUrl(String.format( + "javascript:window.onload = function(){ setOskWidth(\"%d\");"+ + "setOskHeight(\"0\"); };", kbWidth)); if (ShouldShowHelpBubble) { ShouldShowHelpBubble = false; Handler handler = new Handler(); diff --git a/web/.gitignore b/web/.gitignore index 4f3ae289fd..4c7f7b3fff 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,3 +1,5 @@ output/ embedded/ +**/.idea/**/*.xml +**/*.iml **/*.kpj.user \ No newline at end of file