// machine for a loader instance enyo.machine = { sheet: function(inPath) { var type = "text/css"; var rel = "stylesheet"; var isLess = (inPath.slice(-5) == ".less"); if (isLess) { if (window.less) { // If client-side less is loaded, insert the less stylesheet type = "text/less"; rel = "stylesheet/less"; } else { // Otherwise, we expect a css file of the same name to exist inPath = inPath.slice(0, inPath.length-4) + "css"; } } var link; if (enyo.runtimeLoading || isLess) { link = document.createElement('link'); link.href = inPath; link.media = "screen"; link.rel = rel; link.type = type; document.getElementsByTagName('head')[0].appendChild(link); } else { document.write(''); } if (isLess && window.less) { less.sheets.push(link); if (!enyo.loader.finishCallbacks.lessRefresh) { enyo.loader.finishCallbacks.lessRefresh = function() { less.refresh(true); }; } } }, script: function(inSrc, onLoad, onError) { if (!enyo.runtimeLoading) { document.write(''); } else { var script = document.createElement('script'); script.src = inSrc; script.onload = onLoad; script.onerror = onError; document.getElementsByTagName('head')[0].appendChild(script); } }, inject: function(inCode) { document.write('"); } }; // create a dependency processor using our script machine enyo.loader = new enyo.loaderFactory(enyo.machine); // dependency API uses enyo loader enyo.depends = function() { var ldr = enyo.loader; if (!ldr.packageFolder) { var tag = enyo.locateScript("package.js"); if (tag && tag.path) { ldr.aliasPackage(tag.path); ldr.packageFolder = tag.path + "/"; //console.log("detected PACKAGEFOLDER [" + ldr.packageFolder + "]"); } } ldr.load.apply(ldr, arguments); }; // Runtime loader // Usage: enyo.load(depends, [onLoadCallback]) // where - depends is string or array of string paths to package.js, script, or css to load // - doneCallback is fired after file or package loading has completed // Only one file/package is loaded at a time; additional calls are queued and loading deferred (function() { var enyo = window.enyo; var runtimeLoadQueue = []; enyo.load = function(depends, onLoadCallback) { runtimeLoadQueue.push(arguments); if (!enyo.runtimeLoading) { enyo.runtimeLoading = true; runtimeLoad(); } }; function runtimeLoad(onLoad) { if (onLoad) { onLoad(); // Run user callback function } if (runtimeLoadQueue.length) { var args = runtimeLoadQueue.shift(); var depends = args[0]; var dependsArg = enyo.isArray(depends) ? depends : [depends]; var onLoadCallback = args[1]; enyo.loader.finishCallbacks.runtimeLoader = function(inBlock) { // Once loader is done loading a package, we chain a call to runtimeLoad(), // which will call the onLoadCallback from the original load call, passing // a reference to the depends argument from the original call for tracking, // followed by kicking off any additionally queued load() calls runtimeLoad(function() { if (onLoadCallback) { onLoadCallback(inBlock); } }); }; enyo.loader.packageFolder = "./"; // Kick off next queued call to loader enyo.depends.apply(this, dependsArg); } else { enyo.runtimeLoading = false; enyo.loader.packageFolder = ""; } } })(); // predefined path aliases enyo.path.addPaths({ enyo: enyo.args.root, lib: "$enyo/../lib" });