diff --git a/src/core/PaperScript.js b/src/core/PaperScript.js index 9b28d7b7..09843b9a 100644 --- a/src/core/PaperScript.js +++ b/src/core/PaperScript.js @@ -450,6 +450,7 @@ Base.exports.PaperScript = (function() { var canvasId = PaperScope.getAttribute(script, 'canvas'), canvas = document.getElementById(canvasId), src = script.src, + async = PaperScope.hasAttribute(script, 'asyc'), scopeAttribute = 'data-paper-scope'; if (!canvas) throw new Error('Unable to find canvas with id "' @@ -462,11 +463,15 @@ Base.exports.PaperScript = (function() { // compiling multiple scripts for the same element. canvas.setAttribute(scopeAttribute, scope._id); if (src) { - // If we're loading from a source, request that first and then - // run later. + // If we're loading from a source, request the source + // synchronously to guarantee code is executed in the + // same order the script tags appear. + // If the async attribute is specified on the script element, + // request the source asynchronously and execute as soon as + // it is retreived. Http.request('get', src, function(code) { execute(code, scope, src); - }); + }, async); } else { // We can simply get the code form the script tag. execute(script.innerHTML, scope, script.baseURI); diff --git a/src/net/Http.js b/src/net/Http.js index 6ad8db01..0329e845 100644 --- a/src/net/Http.js +++ b/src/net/Http.js @@ -11,11 +11,12 @@ */ var Http = { - request: function(method, url, callback) { + request: function(method, url, callback, async) { // Code borrowed from Coffee Script and extended: + async = (async === undefined) ? true : async; var xhr = new (window.ActiveXObject || XMLHttpRequest)( 'Microsoft.XMLHTTP'); - xhr.open(method.toUpperCase(), url, true); + xhr.open(method.toUpperCase(), url, async); if ('overrideMimeType' in xhr) xhr.overrideMimeType('text/plain'); xhr.onreadystatechange = function() {