mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 00:15:32 +00:00
139 lines
No EOL
4.9 KiB
TypeScript
139 lines
No EOL
4.9 KiB
TypeScript
// Includes KMW-added property declaration extensions for HTML elements.
|
|
/// <reference path="kmwexthtml.ts" />
|
|
// Includes type definitions for basic KMW types.
|
|
/// <reference path="kmwtypedefs.ts" />
|
|
|
|
/***
|
|
KeymanWeb 11.0
|
|
Copyright 2019 SIL International
|
|
***/
|
|
|
|
// If KMW is already initialized, the KMW script has been loaded more than once. We wish to prevent resetting the
|
|
// KMW system, so we use the fact that 'initialized' is only 1 / true after all scripts are loaded for the initial
|
|
// load of KMW.
|
|
if(!window['keyman']['initialized']) {
|
|
|
|
// Continued KeymanWeb initialization.
|
|
(function()
|
|
{
|
|
|
|
// Declare KeymanWeb, OnScreen Keyboard and Util object variables
|
|
var keymanweb=window['keyman'],util=keymanweb['util'];
|
|
|
|
/**
|
|
* Function debug
|
|
* Scope Private
|
|
* @param {(string|Object)} s string (or object) to print
|
|
* Description Simple debug display (upper right of screen)
|
|
* Extended to support multiple arguments May 2015
|
|
*/
|
|
keymanweb['debug']=keymanweb.debug=function(s){
|
|
var p;
|
|
if(keymanweb.debugElement == null)
|
|
{
|
|
var d=document.createElement('DIV'),ds=d.style;
|
|
ds.position='absolute';ds.width='30%';ds.maxHeight='50%';ds.top='0';ds.right='0';
|
|
ds.minHeight='50px'; ds.border='1px solid blue'; ds.whiteSpace='pre-line';ds.overflowY='scroll';
|
|
p=document.createElement('P'); p.id='debug_output';p.style.margin='2px';
|
|
d.appendChild(p);
|
|
document.body.appendChild(d);
|
|
keymanweb.debugElement=p;
|
|
}
|
|
if((p=document.getElementById('debug_output')) == null) return;
|
|
|
|
if(arguments.length == 0)
|
|
if(typeof p.textContent != 'undefined') p.textContent=''; else p.innerHTML='';
|
|
else
|
|
{
|
|
var ts=new Date().toTimeString().substr(3,5),t=ts+' ',t1,k,m,sx;
|
|
for(k=0; k<arguments.length; k++)
|
|
{
|
|
if(k > 0) t = t + '; ';
|
|
sx = arguments[k];
|
|
if(typeof sx == 'object')
|
|
{
|
|
if(sx == null)
|
|
{
|
|
t = t + 'null';
|
|
}
|
|
else
|
|
{
|
|
t1 = '';
|
|
for(m in sx)
|
|
{
|
|
if(t1.length > 0) t1 = t1 + ', ';
|
|
t1 = t1 + m + ':';
|
|
switch(typeof sx[m])
|
|
{
|
|
case 'string':
|
|
case 'number':
|
|
case 'boolean':
|
|
t1 = t1 + sx[m]; break;
|
|
default:
|
|
t1 = t1 + typeof sx[m]; break;
|
|
}
|
|
if(t1.length > 1024)
|
|
{
|
|
t1 = t1.substr(0,1000)+'...'; break;
|
|
}
|
|
}
|
|
if(t1.length > 0) t = t + '{' + t1 + '}';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
t = t + sx;
|
|
}
|
|
}
|
|
// Truncate if necessary to avoid memory problems
|
|
if(t.length > 1500) t = t.substr(0,1500) + ' (more)';
|
|
|
|
if(typeof p.textContent != 'undefined')
|
|
p.textContent=t+'\n'+p.textContent;
|
|
else
|
|
p.innerHTML=t+'<br />'+p.innerHTML;
|
|
|
|
}
|
|
}
|
|
|
|
/*
|
|
* The following code existed here as part of the original pre-conversion JavaScript source, performing some inline initialization.
|
|
* Ideally, this will be refactored once proper object-orientation of the codebase within TypeScript is complete.
|
|
*/
|
|
keymanweb.debugElement=null;
|
|
var dbg=keymanweb.debug;
|
|
|
|
keymanweb.delayedInit();
|
|
|
|
//TODO: find all references to next three routines and disambiguate!!
|
|
|
|
// Complete page initialization only after the page is fully loaded, including any embedded fonts
|
|
// This avoids the need to use a timer to test for the fonts
|
|
|
|
util.attachDOMEvent(window, 'load', keymanweb.domManager._WindowLoad,false);
|
|
util.attachDOMEvent(window, 'unload', keymanweb.domManager._WindowUnload,false); // added fourth argument (default value)
|
|
|
|
// *** I3319 Supplementary Plane modifications - end new code
|
|
|
|
util.attachDOMEvent(document, 'keyup', keymanweb.hotkeyManager._Process, false);
|
|
|
|
/**
|
|
* Reset OSK shift states when entering or exiting the active element
|
|
**/
|
|
function resetVKShift() {
|
|
let keyman = com.keyman.singleton;
|
|
if(!keyman.uiManager.isActivating && keyman.osk.vkbd) {
|
|
keyman.core.keyboardProcessor._UpdateVKShift(null, 15, 0); //this should be enabled !!!!! TODO
|
|
}
|
|
}
|
|
|
|
// We need to track this handler, as it causes... interesting... interactions during testing in certain browsers.
|
|
keymanweb['pageFocusHandler'] = resetVKShift;
|
|
util.attachDOMEvent(window, 'focus', keymanweb['pageFocusHandler'], false); // I775
|
|
util.attachDOMEvent(window, 'blur', keymanweb['pageFocusHandler'], false); // I775
|
|
|
|
// Initialize supplementary plane string extensions
|
|
String.kmwEnableSupplementaryPlane(true);
|
|
|
|
})();
|
|
} |