Tweaks to format of JavaScript modules

Particularly, we're now picking the module fields out of the script
tag, rather than from the comment at the top of the module. This will
allow us to minify modules safely (otherwise we'd lose the metadata
fields)
print-window-tiddler
Jeremy Ruston 2012-05-05 17:42:42 +01:00
rodzic 6ad2886013
commit b81fdd9ced
3 zmienionych plików z 41 dodań i 17 usunięć

Wyświetl plik

@ -389,7 +389,7 @@ $tw.plugins.registerPlugin($tw.config.root + "/kernel/tiddlerdeserializer/js","t
match = headerCommentRegExp.exec(text);
fields.text = text;
if(match) {
fields = $tw.utils.parseFields(match[1],fields);
fields = $tw.utils.parseFields(match[1].split("\n\n")[0],fields);
}
return [fields];
}
@ -473,11 +473,16 @@ $tw.plugins.registerPlugin($tw.config.root + "/kernel/tiddlerdeserializer/dom","
var text = node.innerHTML,
s = text.indexOf("{"),
e = text.lastIndexOf("}");
if(s !== -1 && e !== -1) {
if(node.hasAttribute("data-module") && s !== -1 && e !== -1) {
text = text.substring(s+1,e-1);
}
var fields = $tw.wiki.deserializeTiddlers("application/javascript",text)[0];
fields.title = node.getAttribute("data-tiddler-title");
var fields = {text: text},
attributes = node.attributes;
for(var a=0; a<attributes.length; a++) {
if(attributes[a].nodeName.substr(0,13) === "data-tiddler-") {
fields[attributes[a].nodeName.substr(13)] = attributes[a].nodeValue;
}
}
return fields;
} else {
return null;

Wyświetl plik

@ -21,14 +21,37 @@ exports["text/html"] = function(tiddler) {
return text ? text : "";
};
exports["application/javascript"] = function(tiddler) {
var attributes = {type: "text/javascript"}; // The script type is set to text/javascript for compatibility with old browsers
for(var f in tiddler.fields) {
if(f !== "text") {
attributes["data-tiddler-" + f] = tiddler.getFieldString(f);
}
}
return $tw.Tree.Element(
"script",
attributes,
[$tw.Tree.Raw(tiddler.fields.text)]
).render("text/html");
};
exports["application/x-tiddler-module"] = function(tiddler) {
var result = [];
result.push("<" + "script type=\"text/javascript\" data-tiddler-title=\"" + tiddler.fields.title + "\">\n");
result.push("$tw.modules.define(\"" + tiddler.fields.title + "\",\"" + tiddler.fields["module-type"] + "\",function(module,exports,require) {");
result.push(tiddler.fields.text);
result.push("});\n");
result.push("</" + "script>");
return result.join("");
var attributes = {
type: "text/javascript",
"data-module": "yes"
}, // The script type is set to text/javascript for compatibility with old browsers
text = tiddler.fields.text;
text = "$tw.modules.define(\"" + tiddler.fields.title + "\",\"" + tiddler.fields["module-type"] + "\",function(module,exports,require) {" + text + "});\n";
for(var f in tiddler.fields) {
if(f !== "text") {
attributes["data-tiddler-" + f] = tiddler.getFieldString(f);
}
}
return $tw.Tree.Element(
"script",
attributes,
[$tw.Tree.Raw(text)]
).render("text/html");
};
exports["application/x-tiddler-html-div"] = function(tiddler) {

Wyświetl plik

@ -36,16 +36,12 @@ type: text/x-tiddlywiki-html
<<^"[is[tiddler]]" application/x-tiddler-html-div>>
</div>
<!----------- Boot kernel prologue ----------->
<script id="jsBootStartArea" type="text/javascript">
<<^"$:/core/bootprefix.js" text/plain>>
</script>
<<^"$:/core/bootprefix.js" application/javascript>>
<!----------- Plugin modules ----------->
<div id="pluginModules" style="display:none;">
<<^"[is[shadowModule]]" application/x-tiddler-module>>
</div>
<!----------- Boot kernel ----------->
<script id="jsBootEndArea" type="text/javascript">
<<^"$:/core/boot.js" text/plain>>
</script>
<<^"$:/core/boot.js" application/javascript>>
</body>
</html>