oxjs/source/Ox.js

107 lines
3.7 KiB
JavaScript
Raw Normal View History

2011-11-05 16:46:53 +00:00
'use strict';
2012-06-20 16:30:06 +00:00
(function(global) {
2011-04-27 19:39:56 +00:00
2012-06-20 16:30:06 +00:00
global.Ox = {
2011-04-27 19:39:56 +00:00
2012-06-20 16:30:06 +00:00
load: function() {
2011-04-27 19:39:56 +00:00
2012-06-20 16:30:06 +00:00
var args = arguments,
callback = args[args.length - 1],
path = getPath(),
regexp = /dev\/$/,
2014-01-22 10:19:03 +00:00
version = +new Date();
if (args[0] === true && regexp.test(path)) {
path = path.replace(regexp, 'build/');
loadScript('Ox.js', function() {
Ox.MODE = 'build';
Ox.PATH = path;
Ox.load.apply(null, Ox.slice(args, 1));
});
} else {
loadJSON(function(data) {
var previousOx = global.Ox;
2014-01-22 10:15:29 +00:00
version = data.version;
loadScriptsSerial(data.files, function() {
2013-05-09 19:38:47 +00:00
Ox.LOCALES = data.locales;
Ox.VERSION = data.version;
Ox.forEach(previousOx, function(value, key) {
if (Ox.isUndefined(Ox[key])) {
Ox[key] = value;
}
});
Ox.load.apply(null, args);
});
2012-06-20 16:30:06 +00:00
});
}
2011-04-27 19:39:56 +00:00
2012-06-20 16:30:06 +00:00
function getPath() {
var index, regexp = /Ox\.js(\?\d+|)$/,
scripts = document.getElementsByTagName('script'), src;
for (index = scripts.length - 1; index >= 0; index--) {
src = scripts[index].src;
if (regexp.test(src)) {
return src.replace(regexp, '');
2012-06-20 16:30:06 +00:00
}
2011-04-27 19:39:56 +00:00
}
}
2011-05-06 23:30:32 +00:00
2012-06-20 16:30:06 +00:00
function loadJSON(callback) {
2014-01-22 10:15:29 +00:00
var request = new XMLHttpRequest(),
time = +new Date();
2012-06-20 16:30:06 +00:00
request.open('GET', path + 'Ox/json/Ox.json?' + time, true);
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200) {
callback(JSON.parse(request.responseText));
}
}
2012-06-20 16:30:06 +00:00
};
request.send();
}
function loadScript(script, callback) {
var element = document.createElement('script'),
head = document.head
|| document.getElementsByTagName('head')[0]
|| document.documentElement;
element.onload = element.onreadystatechange = function() {
if (
!this.readyState
|| this.readyState == 'loaded'
|| this.readyState == 'complete'
) {
2012-06-20 16:30:06 +00:00
callback();
}
}
2014-01-22 10:15:29 +00:00
element.src = path + script + '?' + version;
element.type = 'text/javascript';
head.appendChild(element);
2012-06-20 16:30:06 +00:00
}
2012-06-20 16:30:06 +00:00
function loadScriptsParallel(scripts, callback) {
var i = 0, n = scripts.length;
2012-06-20 16:30:06 +00:00
while (scripts.length) {
loadScript(scripts.shift(), function() {
++i == n && callback();
2012-06-20 16:30:06 +00:00
});
}
}
2011-04-27 19:39:56 +00:00
function loadScriptsSerial(scripts, callback) {
loadScriptsParallel(scripts.shift(), function() {
if (scripts.length) {
loadScriptsSerial(scripts, callback);
} else {
callback();
}
});
2012-05-25 16:28:05 +00:00
}
2012-06-20 16:30:06 +00:00
2011-04-27 19:39:56 +00:00
}
2012-06-20 16:30:06 +00:00
};
2011-04-27 19:39:56 +00:00
2012-06-20 16:30:06 +00:00
}(this));