JSXTransformer respects async attribute

Conflicts:
	vendor/browser-transforms.js
This commit is contained in:
Andreas Svensson
2014-08-14 10:00:27 +02:00
parent 5ca9e193ee
commit 079400c2a6
+32 -17
View File
@@ -198,7 +198,7 @@ function run(code, url, options) {
* @param {function} callback Function to call with the content of url
* @internal
*/
function load(url, callback) {
function load(url, successCallback, errorCallback) {
var xhr;
xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP')
: new XMLHttpRequest();
@@ -212,8 +212,9 @@ function load(url, callback) {
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 0 || xhr.status === 200) {
callback(xhr.responseText, url);
successCallback(xhr.responseText);
} else {
errorCallback();
throw new Error("Could not load " + url);
}
}
@@ -230,10 +231,8 @@ function load(url, callback) {
* @internal
*/
function loadScripts(scripts) {
var result = scripts.map(function() {
return false;
});
var count = result.length;
var result = [];
var count = scripts.length;
function check() {
var script, i;
@@ -241,10 +240,10 @@ function loadScripts(scripts) {
for (i = 0; i < count; i++) {
script = result[i];
if (script && !script.executed) {
run(script.content, script.url, script.options);
if (script.loaded && !script.executed) {
script.executed = true;
} else if (!script) {
run(script.content, script.url, script.options);
} else if (!script.loaded && !script.error && !script.async) {
break;
}
}
@@ -258,26 +257,42 @@ function loadScripts(scripts) {
};
}
// script.async is always true for non-javascript script tags
var async = script.hasAttribute('async');
if (script.src) {
load(script.src, function(content, url) {
result[i] = {
executed: false,
content: content,
url: url,
options: options
};
result[i] = {
async: async,
error: false,
executed: false,
content: null,
loaded: false,
url: script.src,
options: options
};
load(script.src, function(content) {
result[i].loaded = true;
result[i].content = content;
check();
}, function() {
result[i].error = true;
check();
});
} else {
result[i] = {
async: async,
error: false,
executed: false,
content: script.innerHTML,
loaded: true,
url: null,
options: options
};
check();
}
});
check();
}
/**