| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 | var WebGLInput = {    $instances: [],    WebGLInputInit : function() {        // use WebAssembly.Table : makeDynCall        // when enable. dynCall is undefined        if(typeof dynCall === "undefined")        {            // make Runtime.dynCall to undefined            Runtime = { dynCall : undefined }        }        else        {            // Remove the `Runtime` object from "v1.37.27: 12/24/2017"            // if Runtime not defined. create and add functon!!            if(typeof Runtime === "undefined") Runtime = { dynCall : dynCall }        }    },    WebGLInputCreate: function (canvasId, x, y, width, height, fontsize, text, placeholder, isMultiLine, isPassword, isHidden, isMobile) {        var container = document.getElementById(UTF8ToString(canvasId));        var canvas = container.getElementsByTagName('canvas')[0];        // if container is null and have canvas        if (!container && canvas)        {            // set the container to canvas.parentNode            container = canvas.parentNode;        }        if(canvas)        {            var scaleX = container.offsetWidth / canvas.width;            var scaleY = container.offsetHeight / canvas.height;            if(scaleX && scaleY)            {                x *= scaleX;                width *= scaleX;                y *= scaleY;                height *= scaleY;            }        }        var input = document.createElement(isMultiLine?"textarea":"input");        input.style.position = "absolute";        if(isMobile) {            input.style.bottom = 1 + "vh";            input.style.left = 5 + "vw";            input.style.width = 90 + "vw";            input.style.height = (isMultiLine? 18 : 10) + "vh";            input.style.fontSize = 5 + "vh";            input.style.borderWidth = 5 + "px";            input.style.borderColor = "#000000";        } else {            input.style.top = y + "px";            input.style.left = x + "px";            input.style.width = width + "px";            input.style.height = height + "px";            input.style.fontSize = fontsize + "px";        }        input.style.outlineWidth = 1 + 'px';        input.style.opacity = isHidden?0:1;        input.style.resize = 'none'; // for textarea        input.style.padding = '0px 1px';        input.style.cursor = "default";        input.style.touchAction = 'none';        input.spellcheck = false;        input.value = UTF8ToString(text);        input.placeholder = UTF8ToString(placeholder);        input.style.outlineColor = 'black';                if(isPassword){            input.type = 'password';        }        if(isMobile) {            document.body.appendChild(input);        } else {            container.appendChild(input);        }        return instances.push(input) - 1;    },    WebGLInputEnterSubmit: function(id, falg){        var input = instances[id];        // for enter key        input.addEventListener('keydown', function(e) {            if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {                if(falg)                {                    e.preventDefault();                    input.blur();                }            }        });    },    WebGLInputTab:function(id, cb) {        var input = instances[id];        // for tab key        input.addEventListener('keydown', function (e) {            if ((e.which && e.which === 9) || (e.keyCode && e.keyCode === 9)) {                e.preventDefault();                // if enable tab text                if(input.enableTabText){                    var val = input.value;                    var start = input.selectionStart;                    var end = input.selectionEnd;                    input.value = val.substr(0, start) + '\t' + val.substr(end, val.length);                    input.setSelectionRange(start + 1, start + 1);                    input.oninput();	// call oninput to exe ValueChange function!!                } else {                    (!!Runtime.dynCall) ? Runtime.dynCall("vii", cb, [id, e.shiftKey ? -1 : 1]) : {{{ makeDynCall("vii", "cb") }}}(id, e.shiftKey ? -1 : 1);                }            }        });    },    WebGLInputFocus: function(id){        var input = instances[id];        input.focus();    },    WebGLInputOnFocus: function (id, cb) {        var input = instances[id];        input.onfocus = function () {            (!!Runtime.dynCall) ? Runtime.dynCall("vi", cb, [id]) : {{{ makeDynCall("vi", "cb") }}}(id);        };    },    WebGLInputOnBlur: function (id, cb) {        var input = instances[id];        input.onblur = function () {            (!!Runtime.dynCall) ? Runtime.dynCall("vi", cb, [id]) : {{{ makeDynCall("vi", "cb") }}}(id);        };    },    WebGLInputIsFocus: function (id) {        return instances[id] === document.activeElement;    },    WebGLInputOnValueChange:function(id, cb){        var input = instances[id];        input.oninput = function () {            var returnStr = input.value;            var bufferSize = lengthBytesUTF8(returnStr) + 1;            var buffer = _malloc(bufferSize);            stringToUTF8(returnStr, buffer, bufferSize);            (!!Runtime.dynCall) ? Runtime.dynCall("vii", cb, [id, buffer]) : {{{ makeDynCall("vii", "cb") }}}(id, buffer);        };    },    WebGLInputOnEditEnd:function(id, cb){        var input = instances[id];        input.onchange = function () {            var returnStr = input.value;            var bufferSize = lengthBytesUTF8(returnStr) + 1;            var buffer = _malloc(bufferSize);            stringToUTF8(returnStr, buffer, bufferSize);            (!!Runtime.dynCall) ? Runtime.dynCall("vii", cb, [id, buffer]) : {{{ makeDynCall("vii", "cb") }}}(id, buffer);        };    },    WebGLInputOnKeyboardEvent:function(id, cb){        var input = instances[id];        var func = function(mode, e) {            if (e instanceof KeyboardEvent){                var bufferSize = lengthBytesUTF8(e.key) + 1;                var key = _malloc(bufferSize);                stringToUTF8(e.key, key, bufferSize);                var code = e.code;                var shift = e.shiftKey ? 1 : 0;                var ctrl = e.ctrlKey ? 1 : 0;                var alt = e.altKey ? 1 : 0;                (!!Runtime.dynCall) ? Runtime.dynCall("viiiiiii", cb, [id, mode, key, code, shift, ctrl, alt]) : {{{ makeDynCall("viiiiiii", "cb") }}}(id, mode, key, code, shift, ctrl, alt);            }        }        input.addEventListener('keydown', function(e) { func(1, e); });        input.addEventListener('keyup', function(e) { func(2, e); });    },    WebGLInputSelectionStart:function(id){        var input = instances[id];        return input.selectionStart;    },    WebGLInputSelectionEnd:function(id){        var input = instances[id];        return input.selectionEnd;    },    WebGLInputSelectionDirection:function(id){        var input = instances[id];        return (input.selectionDirection == "backward")?-1:1;    },    WebGLInputSetSelectionRange:function(id, start, end){        var input = instances[id];        input.setSelectionRange(start, end);    },    WebGLInputMaxLength:function(id, maxlength){        var input = instances[id];        input.maxLength = maxlength;    },    WebGLInputText:function(id, text){        var input = instances[id];        input.value = UTF8ToString(text);    },    WebGLInputDelete:function(id){        var input = instances[id];        input.parentNode.removeChild(input);        instances[id] = null;    },    WebGLInputEnableTabText:function(id, enable) {        var input = instances[id];        input.enableTabText = enable;    },    WebGLInputForceBlur:function(id) {        var input = instances[id];        input.blur();    },}autoAddDeps(WebGLInput, '$instances');mergeInto(LibraryManager.library, WebGLInput);
 |