1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-12-28 02:50:27 +00:00

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)
This commit is contained in:
Jeremy Ruston 2012-05-05 17:42:42 +01:00
parent 6ad2886013
commit b81fdd9ced
3 changed files with 41 additions and 17 deletions

View File

@ -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;

View File

@ -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) {

View File

@ -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>