diff options
author | Solly Ross <sross@redhat.com> | 2016-09-03 13:39:12 -0400 |
---|---|---|
committer | Solly Ross <sross@redhat.com> | 2016-09-14 14:15:19 -0400 |
commit | 7938b0f777220393534999e35772fb16c27b766e (patch) | |
tree | 230dc0d8b85f8a309e097bdd56543c098cd7cf5d | |
parent | 8df31d1bfa96e830f263d6433957ec2c1d0ccf1b (diff) | |
download | novnc-7938b0f777220393534999e35772fb16c27b766e.tar.gz |
Clean up Util
This commit removes unused code from Util, and moves the script-loading
functionality to WebUtil.
-rw-r--r-- | app/ui.js | 5 | ||||
-rw-r--r-- | app/webutil.js | 69 | ||||
-rw-r--r-- | core/util.js | 158 | ||||
-rw-r--r-- | tests/input.html | 22 | ||||
-rw-r--r-- | tests/vnc_perf.html | 2 | ||||
-rw-r--r-- | tests/vnc_playback.html | 2 | ||||
-rw-r--r-- | vnc.html | 1 | ||||
-rw-r--r-- | vnc_auto.html | 3 |
8 files changed, 87 insertions, 175 deletions
@@ -25,11 +25,10 @@ var UI; /* [begin skip-as-module] */ // Load supporting scripts - Util.load_scripts( + WebUtil.load_scripts( {'core': ["base64.js", "websock.js", "des.js", "keysymdef.js", "xtscancodes.js", "keyboard.js", "input.js", "display.js", - "inflator.js", "rfb.js", "keysym.js"], - '.': ["webutil.js"]}); + "inflator.js", "rfb.js", "keysym.js"]}); window.onscriptsload = function () { UI.load(); }; /* [end skip-as-module] */ diff --git a/app/webutil.js b/app/webutil.js index f5f3077..7f234db 100644 --- a/app/webutil.js +++ b/app/webutil.js @@ -278,4 +278,73 @@ WebUtil.injectParamIfMissing = function (path, param, value) { } }; +// Dynamically load scripts without using document.write() +// Reference: http://unixpapa.com/js/dyna.html +// +// Handles the case where load_scripts is invoked from a script that +// itself is loaded via load_scripts. Once all scripts are loaded the +// window.onscriptsloaded handler is called (if set). +WebUtil.get_include_uri = function (root_dir) { + return (typeof INCLUDE_URI !== "undefined") ? INCLUDE_URI + root_dir + '/' : root_dir + '/'; +}; +WebUtil._loading_scripts = []; +WebUtil._pending_scripts = []; +WebUtil.load_scripts = function (files_by_dir) { + "use strict"; + var head = document.getElementsByTagName('head')[0], script, + ls = WebUtil._loading_scripts, ps = WebUtil._pending_scripts; + + var loadFunc = function (e) { + while (ls.length > 0 && (ls[0].readyState === 'loaded' || + ls[0].readyState === 'complete')) { + // For IE, append the script to trigger execution + var s = ls.shift(); + //console.log("loaded script: " + s.src); + head.appendChild(s); + } + if (!this.readyState || + (Util.Engine.presto && this.readyState === 'loaded') || + this.readyState === 'complete') { + if (ps.indexOf(this) >= 0) { + this.onload = this.onreadystatechange = null; + //console.log("completed script: " + this.src); + ps.splice(ps.indexOf(this), 1); + + // Call window.onscriptsload after last script loads + if (ps.length === 0 && window.onscriptsload) { + window.onscriptsload(); + } + } + } + }; + + var root_dirs = Object.keys(files_by_dir); + + for (var d = 0; d < root_dirs.length; d++) { + var root_dir = root_dirs[d]; + var files = files_by_dir[root_dir]; + + for (var f = 0; f < files.length; f++) { + script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = WebUtil.get_include_uri(root_dir) + files[f]; + //console.log("loading script: " + script.src); + script.onload = script.onreadystatechange = loadFunc; + // In-order script execution tricks + if (Util.Engine.trident) { + // For IE wait until readyState is 'loaded' before + // appending it which will trigger execution + // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order + ls.push(script); + } else { + // For webkit and firefox set async=false and append now + // https://developer.mozilla.org/en-US/docs/HTML/Element/script + script.async = false; + head.appendChild(script); + } + ps.push(script); + } + } +}; + /* [module] export default WebUtil; */ diff --git a/core/util.js b/core/util.js index 1b8744b..3a2d241 100644 --- a/core/util.js +++ b/core/util.js @@ -41,93 +41,6 @@ addFunc(Array, 'push32', function (num) { num & 0xFF); }); -// IE does not support map (even in IE9) -//This prototype is provided by the Mozilla foundation and -//is distributed under the MIT license. -//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license -addFunc(Array, 'map', function (fun /*, thisp*/) { - "use strict"; - var len = this.length; - if (typeof fun != "function") { - throw new TypeError(); - } - - var res = new Array(len); - var thisp = arguments[1]; - for (var i = 0; i < len; i++) { - if (i in this) { - res[i] = fun.call(thisp, this[i], i, this); - } - } - - return res; -}); - -// IE <9 does not support indexOf -//This prototype is provided by the Mozilla foundation and -//is distributed under the MIT license. -//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license -addFunc(Array, 'indexOf', function (elt /*, from*/) { - "use strict"; - var len = this.length >>> 0; - - var from = Number(arguments[1]) || 0; - from = (from < 0) ? Math.ceil(from) : Math.floor(from); - if (from < 0) { - from += len; - } - - for (; from < len; from++) { - if (from in this && - this[from] === elt) { - return from; - } - } - return -1; -}); - -// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys -if (!Object.keys) { - Object.keys = (function () { - 'use strict'; - var hasOwnProperty = Object.prototype.hasOwnProperty, - hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'), - dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' - ], - dontEnumsLength = dontEnums.length; - - return function (obj) { - if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { - throw new TypeError('Object.keys called on non-object'); - } - - var result = [], prop, i; - - for (prop in obj) { - if (hasOwnProperty.call(obj, prop)) { - result.push(prop); - } - } - - if (hasDontEnumBug) { - for (i = 0; i < dontEnumsLength; i++) { - if (hasOwnProperty.call(obj, dontEnums[i])) { - result.push(dontEnums[i]); - } - } - } - return result; - }; - })(); -} - // PhantomJS 1.x doesn't support bind, // so leave this in until PhantomJS 2.0 is released //This prototype is provided by the Mozilla foundation and @@ -368,77 +281,6 @@ Util.decodeUTF8 = function (utf8string) { * Cross-browser routines */ - -// Dynamically load scripts without using document.write() -// Reference: http://unixpapa.com/js/dyna.html -// -// Handles the case where load_scripts is invoked from a script that -// itself is loaded via load_scripts. Once all scripts are loaded the -// window.onscriptsloaded handler is called (if set). -Util.get_include_uri = function (root_dir) { - return (typeof INCLUDE_URI !== "undefined") ? INCLUDE_URI + root_dir + '/' : root_dir + '/'; -}; -Util._loading_scripts = []; -Util._pending_scripts = []; -Util.load_scripts = function (files_by_dir) { - "use strict"; - var head = document.getElementsByTagName('head')[0], script, - ls = Util._loading_scripts, ps = Util._pending_scripts; - - var loadFunc = function (e) { - while (ls.length > 0 && (ls[0].readyState === 'loaded' || - ls[0].readyState === 'complete')) { - // For IE, append the script to trigger execution - var s = ls.shift(); - //console.log("loaded script: " + s.src); - head.appendChild(s); - } - if (!this.readyState || - (Util.Engine.presto && this.readyState === 'loaded') || - this.readyState === 'complete') { - if (ps.indexOf(this) >= 0) { - this.onload = this.onreadystatechange = null; - //console.log("completed script: " + this.src); - ps.splice(ps.indexOf(this), 1); - - // Call window.onscriptsload after last script loads - if (ps.length === 0 && window.onscriptsload) { - window.onscriptsload(); - } - } - } - }; - - var root_dirs = Object.Keys(files_by_dir); - - for (var d = 0; d < root_dirs.length; d++) { - var root_dir = root_dirs[d]; - var files = files_by_dir[root_dir]; - - for (var f = 0; f < files.length; f++) { - script = document.createElement('script'); - script.type = 'text/javascript'; - script.src = Util.get_include_uri(root_dir) + files[f]; - //console.log("loading script: " + script.src); - script.onload = script.onreadystatechange = loadFunc; - // In-order script execution tricks - if (Util.Engine.trident) { - // For IE wait until readyState is 'loaded' before - // appending it which will trigger execution - // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order - ls.push(script); - } else { - // For webkit and firefox set async=false and append now - // https://developer.mozilla.org/en-US/docs/HTML/Element/script - script.async = false; - head.appendChild(script); - } - ps.push(script); - } - } -}; - - Util.getPosition = function(obj) { "use strict"; // NB(sross): the Mozilla developer reference seems to indicate that diff --git a/tests/input.html b/tests/input.html index ec3aefe..824a948 100644 --- a/tests/input.html +++ b/tests/input.html @@ -44,7 +44,7 @@ function message(str) { console.log(str); - cell = $D('messages'); + cell = document.getElementById('messages'); cell.innerHTML += msg_cnt + ": " + str + newline; cell.scrollTop = cell.scrollHeight; msg_cnt++; @@ -94,23 +94,23 @@ for (b = 0; b < blist.length; b++) { if (blist[b] === num) { - $D('button' + blist[b]).style.backgroundColor = "black"; - $D('button' + blist[b]).style.color = "lightgray"; + document.getElementById('button' + blist[b]).style.backgroundColor = "black"; + document.getElementById('button' + blist[b]).style.color = "lightgray"; } else { - $D('button' + blist[b]).style.backgroundColor = ""; - $D('button' + blist[b]).style.color = ""; + document.getElementById('button' + blist[b]).style.backgroundColor = ""; + document.getElementById('button' + blist[b]).style.color = ""; } } } window.onload = function() { - canvas = new Display({'target' : $D('canvas')}); + canvas = new Display({'target' : document.getElementById('canvas')}); keyboard = new Keyboard({'target': document, 'onKeyPress': rfbKeyPress}); Util.addEvent(document, 'keypress', rawKey); Util.addEvent(document, 'keydown', rawKey); Util.addEvent(document, 'keyup', rawKey); - mouse = new Mouse({'target': $D('canvas'), + mouse = new Mouse({'target': document.getElementById('canvas'), 'onMouseButton': mouseButton, 'onMouseMove': mouseMove}); @@ -121,10 +121,10 @@ if ('ontouchstart' in document.documentElement) { message("Touch device detected"); - $D('button-selection').style.display = "inline"; - $D('button1').onclick = function(){ selectButton(1) }; - $D('button2').onclick = function(){ selectButton(2) }; - $D('button4').onclick = function(){ selectButton(4) }; + document.getElementById('button-selection').style.display = "inline"; + document.getElementById('button1').onclick = function(){ selectButton(1) }; + document.getElementById('button2').onclick = function(){ selectButton(2) }; + document.getElementById('button4').onclick = function(){ selectButton(4) }; selectButton(); } diff --git a/tests/vnc_perf.html b/tests/vnc_perf.html index e6eee6e..021bc4e 100644 --- a/tests/vnc_perf.html +++ b/tests/vnc_perf.html @@ -49,7 +49,7 @@ msg("Loading " + fname); // Load supporting scripts - Util.load_scripts({ + WebUtil.load_scripts({ 'core': ["base64.js", "websock.js", "des.js", "keysym.js", "keysymdef.js", "xtscancodes.js", "keyboard.js", "input.js", "display.js", "rfb.js", "inflator.js"], diff --git a/tests/vnc_playback.html b/tests/vnc_playback.html index 168663d..611c371 100644 --- a/tests/vnc_playback.html +++ b/tests/vnc_playback.html @@ -59,7 +59,7 @@ if (fname) { message("Loading " + fname); // Load supporting scripts - Util.load_scripts({ + WebUtil.load_scripts({ 'core': ["base64.js", "websock.js", "des.js", "keysym.js", "keysymdef.js", "xtscancodes.js", "keyboard.js", "input.js", "display.js", "rfb.js", "inflator.js"], @@ -220,6 +220,7 @@ </div> <!-- begin scripts --> <script src="core/util.js"></script> + <script src="app/webutil.js"></script> <script src="app/ui.js"></script> <!-- end scripts --> diff --git a/vnc_auto.html b/vnc_auto.html index 6fa3f25..2bb9013 100644 --- a/vnc_auto.html +++ b/vnc_auto.html @@ -43,6 +43,7 @@ src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script> --> <script src="core/util.js"></script> + <script src="app/webutil.js"></script> </head> <body style="margin: 0px;"> @@ -77,7 +78,7 @@ "use strict"; // Load supporting scripts - Util.load_scripts({ + WebUtil.load_scripts({ 'core': ["base64.js", "websock.js", "des.js", "keysymdef.js", "xtscancodes.js", "keyboard.js", "input.js", "display.js", "inflator.js", "rfb.js", "keysym.js"], |