diff --git a/isso/js/app/jade.js b/isso/js/app/jade.js index 0ac330b..78346b6 100644 --- a/isso/js/app/jade.js +++ b/isso/js/app/jade.js @@ -13,7 +13,7 @@ define(["libjs-jade-runtime", "app/utils", "jade!app/text/postbox", "jade!app/te }; var set = function(name, value) { - globals[name] = value; + globals[name] = value; }; load("postbox", tt_postbox); @@ -37,7 +37,7 @@ define(["libjs-jade-runtime", "app/utils", "jade!app/text/postbox", "jade!app/te "render": function(name, locals) { var rv, t = templates[name]; if (! t) { - throw "Template not found: '" + name + "'"; + throw new Error("Template not found: '" + name + "'"); } locals = locals || {}; diff --git a/isso/js/build.embed.js b/isso/js/build.embed.js index bf4d244..0eae344 100644 --- a/isso/js/build.embed.js +++ b/isso/js/build.embed.js @@ -1,7 +1,7 @@ ({ baseUrl: ".", mainConfigFile: 'config.js', - stubModules: ['text'], + stubModules: ['text', 'jade'], name: "components/almond/almond", include: ['embed'], diff --git a/isso/js/config.js b/isso/js/config.js index 18216db..da225b6 100644 --- a/isso/js/config.js +++ b/isso/js/config.js @@ -1,9 +1,9 @@ var requirejs = { paths: { "text": "components/requirejs-text/text", + "jade": "lib/requirejs-jade/jade", "libjs-jade": "components/jade/jade", - "libjs-jade-runtime": "components/jade/runtime", - "jade": "lib/requirejs-jade/jade" + "libjs-jade-runtime": "components/jade/runtime" }, config: { diff --git a/isso/js/lib/requirejs-jade/jade.js b/isso/js/lib/requirejs-jade/jade.js index d262139..b26ad55 100644 --- a/isso/js/lib/requirejs-jade/jade.js +++ b/isso/js/lib/requirejs-jade/jade.js @@ -1,14 +1,58 @@ -define(['text', 'libjs-jade'], function (text, jade) { - 'use strict'; +define(function() { + "use strict"; - return { - load: function(name, req, onLoadNative, config) { - var onload = function(content) { - onLoadNative(jade.compileClient(content)); + var jade = null, + builds = {}; + + var fetchText = function() { + throw new Error("Environment not supported."); + }; + + if (typeof process !== "undefined") { + var fs = require.nodeRequire("fs"); + var jade = require.nodeRequire("jade"); + fetchText = function(path, callback) { + callback(fs.readFileSync(path, "utf-8")); + }; + } else if ((typeof window !== "undefined" && window.navigator && window.document) || typeof importScripts !== "undefined") { + fetchText = function (url, callback) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + callback(xhr.responseText); + } }; + xhr.send(null); + }; + } + + return { + + fetchText: fetchText, + + load: function(name, req, onload, config) { + var path = req.toUrl(name + ".jade"); + fetchText(path, function(text) { + if (jade === null) { + req(["libjs-jade"], function(jade) { + onload(jade.compileClient(text)); + onload(text); + }); + } else { + builds[name] = jade.compileClient(text); + onload(builds[name]); + } + }); - text.load(name + ".jade", req, onload, config); }, - write: function() {} + write: function(plugin, name, write) { + if (builds.hasOwnProperty(name)) { + write("define('" + plugin + "!" + name +"', function () {" + + " var fn = " + builds[name] + ";" + + " return fn;" + + "});\n"); + } + } }; });