diff --git a/lib/6to5/browser.js b/lib/6to5/browser.js index 089a195e9b..fb7561ca57 100644 --- a/lib/6to5/browser.js +++ b/lib/6to5/browser.js @@ -14,6 +14,92 @@ Error.captureStackTrace = Error.captureStackTrace || function (obj) { } }; -exports = module.exports = require("./transform"); -exports.transform = exports; -exports.generate = require("./generator"); +var transform = module.exports = require("./transform"); +var generate = require("./generator"); + +transform.transform = transform; +transform.generate = generate; + +transform.eval = function (code, opts) { + opts = opts || {}; + opts.filename = opts.filename || "eval"; + opts.sourceMap = "inline"; + return eval(transform(code, opts).code); +}; + +transform.run = function (code, opts) { + opts = opts || {}; + opts.sourceMap = "inline"; + return Function(transform(code, opts).code)(); +}; + +transform.load = function (url, callback, opts, hold) { + opts = opts || {}; + opts.filename = opts.filename || url; + + var xhr = window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : new window.XMLHttpRequest(); + xhr.open("GET", url, true); + if ("overrideMimeType" in xhr) xhr.overrideMimeType("text/plain"); + + xhr.onreadystatechange = function() { + if (xhr.readyState !== 4) return; + + var status = xhr.status; + if (status === 0 || status === 200) { + var param = [xhr.responseText, options]; + if (!hold) transform.run.apply(transform, param); + if (callback) callback(param); + } else { + throw new Error("Could not load " + url); + } + }; + + xhr.send(null); +}; + +var runScripts = function () { + var scripts = []; + var types = ["text/ecmascript-6"]; + var index = 0; + + var execute = function () { + var param = scripts[index]; + if (param instanceof Array) { + transform.run.apply(transform, param); + index++; + execute(); + } + }; + + var run = function (script, i) { + var opts = {}; + + if (script.src) { + transform.load(script.src, function(param) { + scripts[i] = param; + execute(); + }, opts, true); + } else { + opts.filename = "embedded"; + scripts[i] = [script.innerHTML, opts]; + } + }; + + var _scripts = window.document.getElementsByTagName("script"); + for (var i in _scripts) { + var _script = _scripts[i]; + if (types.indexOf(_script.type) >= 0) scripts.push(_script); + } + + for (var i in scripts) { + run(scripts[i], i); + } + + execute(); +}; + +if (window.addEventListener) { + window.addEventListener("DOMContentLoaded", runScripts, false); +} else { + window.attachEvent("onload", runScripts); +}