diff options
Diffstat (limited to 'install/ui/src/libs')
-rw-r--r-- | install/ui/src/libs/Makefile.am | 1 | ||||
-rw-r--r-- | install/ui/src/libs/loader.js.in | 103 |
2 files changed, 104 insertions, 0 deletions
diff --git a/install/ui/src/libs/Makefile.am b/install/ui/src/libs/Makefile.am index 807b9d8d3..6991e474e 100644 --- a/install/ui/src/libs/Makefile.am +++ b/install/ui/src/libs/Makefile.am @@ -7,6 +7,7 @@ app_DATA = \ jquery.ordered-map.js \ jquery-ui.js \ json2.js \ + loader.js \ $(NULL) EXTRA_DIST = \ diff --git a/install/ui/src/libs/loader.js.in b/install/ui/src/libs/loader.js.in new file mode 100644 index 000000000..134e061e7 --- /dev/null +++ b/install/ui/src/libs/loader.js.in @@ -0,0 +1,103 @@ +/* Authors: + * Petr Vobornik <pvoborni@redhat.com> + * + * Copyright (C) 2013 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ +(function() { + + var loader = window.ipa_loader = { + num_version: '__NUM_VERSION__' + }; + + var head = document.getElementsByTagName('head')[0]; + + function link(path, rel) { + rel = rel || 'stylesheet'; + var el = document.createElement('link'); + el.setAttribute('rel', rel); + el.setAttribute('type', 'text/css'); + el.setAttribute('href', path); + head.appendChild(el); + } + + function js(path, callback) { + var el = document.createElement('script'); + el.setAttribute('type', 'text/javascript'); + el.setAttribute('src', path); + var done = false; + var onload = function () { + if (done) return; + done = true; + callback(); + }; + + // older ie + el.onreadystatechange = function () { + if (el.readyState === 'loaded' || el.readyState === 'complete') { + el.onreadystatechange = null; + onload(); + } + }; + // others + el.onload = onload; + + head.appendChild(el); + } + + function synchronous_download(paths, callback) { + + var dl = paths.splice(0, 1)[0]; + if (dl) { + js(dl, function() { + synchronous_download(paths, callback); + }); + } else { + if (callback) callback(); + } + } + + function version_suffix() { + var suffix = ''; + if (loader.num_version) { + suffix = '?v=' + loader.num_version; + } + return suffix; + } + + loader.scripts = function(scripts, callback) { + var suffix = version_suffix(); + var syn_code = []; + for (var i=0; i < scripts.length; i++) { + syn_code.push(scripts[i]+suffix); + } + synchronous_download(syn_code, callback); + }; + + loader.styles = function(styles) { + var suffix = version_suffix(); + for (var i=0; i < styles.length; i++) { + link(styles[i] + suffix); + } + }; + + loader.icons = function(icons) { + var suffix = version_suffix(); + for (var i=0; i < icons.length; i++) { + link(icons[i] + suffix, 'icon'); + } + }; +})();
\ No newline at end of file |