From 00774c1a48795a6d042c55fe89561509c5479cd3 Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Mon, 6 Feb 2012 10:57:55 +0000 Subject: [PATCH] Switched over to the new HTML class --- js/WikiStore.js | 29 +++--- js/WikiTextParseTree.js | 214 ++++++++++++++++++---------------------- js/WikiTextRenderer.js | 101 ++++++++++--------- 3 files changed, 168 insertions(+), 176 deletions(-) diff --git a/js/WikiStore.js b/js/WikiStore.js index b87980247..edb68a417 100755 --- a/js/WikiStore.js +++ b/js/WikiStore.js @@ -14,6 +14,7 @@ WikiStore uses the .cache member of tiddlers to store the following information: "use strict"; var Tiddler = require("./Tiddler.js").Tiddler, + HTML = require("./HTML.js").HTML, utils = require("./Utils.js"); /* Creates a new WikiStore object @@ -353,30 +354,30 @@ WikiStore.prototype.renderTiddler = function(targetType,title,templateTitle,opti if(typeof templateTitle !== "string") { templateTitle = title; } - var stitcher = ((targetType === "text/html") && !options.noWrap && !this.disableHtmlWrapperNodes) ? utils.stitchElement : function(a,b,c) {return c.content;}, + var noWrap = options.noWrap || this.disableHtmlWrapperNodes, tiddler = this.getTiddler(title), renderer = this.compileTiddler(templateTitle,targetType), renditions = this.getCacheForTiddler(templateTitle,"renditions",function() { return {}; - }); + }), + template, + content; if(tiddler) { if(title !== templateTitle) { - var template = this.getTiddler(templateTitle); - return stitcher("div",{ - "data-tw-render-tiddler": title, - "data-tw-render-template": templateTitle - },{ - content: renderer.render(tiddler,this) - }); + template = this.getTiddler(templateTitle); + content = renderer.render(tiddler,this); + return noWrap ? content : HTML(HTML.elem("div",{ + "data-tw-render-tiddler": title, + "data-tw-render-template": templateTitle + },[HTML.raw(content)]),targetType); } else { if(!renditions[targetType]) { renditions[targetType] = renderer.render(tiddler,this); } - return stitcher("div",{ - "data-tw-render-tiddler": title - },{ - content: renditions[targetType] - }); + content = renditions[targetType]; + return noWrap ? content : HTML(HTML.elem("div",{ + "data-tw-render-tiddler": title + },[HTML.raw(content)]),targetType); } } return null; diff --git a/js/WikiTextParseTree.js b/js/WikiTextParseTree.js index 463b6afd1..b07b25f70 100644 --- a/js/WikiTextParseTree.js +++ b/js/WikiTextParseTree.js @@ -10,6 +10,7 @@ A container for the parse tree generated by parsing wikitext "use strict"; var WikiTextRenderer = require("./WikiTextRenderer.js").WikiTextRenderer, + HTML = require("./HTML.js").HTML, ArgParser = require("./ArgParser.js").ArgParser, utils = require("./Utils.js"); @@ -172,10 +173,10 @@ WikiTextParseTree.prototype.compileMacroCall = function(output,renderer,type,nod // Add the wrapper node var wrapperTag = macro.wrapperTag || "div"; if(type === "text/html" && !this.store.disableHtmlWrapperNodes) { - pushString(output,utils.stitchElement(wrapperTag,{ + pushString(output,HTML(HTML.elem(wrapperTag,{ "data-tw-macro": name, "data-tw-render-step": renderStepIndex - })); + }))); } // Output the macro call output.push({ @@ -204,9 +205,7 @@ WikiTextParseTree.prototype.compileMacroCall = function(output,renderer,type,nod WikiTextParseTree.prototype.compileElementHtml = function(output,renderer,element,options) { options = options || {}; - pushString(output,utils.stitchElement(element.type,element.attributes,{ - selfClosing: options.selfClosing - })); + pushString(output,HTML(HTML.elem(element.type,element.attributes))); if(!options.selfClosing) { if(element.children) { this.compileSubTreeHtml(output,renderer,element.children); @@ -277,119 +276,100 @@ WikiTextParseTree.prototype.compileSubTreePlain = function(output,renderer,tree) // Render the parse tree to a debugging string of the specified MIME type WikiTextParseTree.prototype.toString = function(type) { - var output = [], - htmlNodes = "a br hr table tr td th h1 h2 h3 h4 h5 h6 ul ol li dl dd dt blockquote pre img strong em u sup sub strike code span div".split(" "), - customTemplates = [ - function(output,type,node) { // Text nodes - if(node.type === "text") { - output.push(utils.stitchElement("div",null, - {classes: ["treeNode","splitLabel"]})); - output.push(utils.stitchElement("span",{"data-tw-treenode-type": "text"},{ - content: node.type, - classes: ["splitLabelLeft"] - })); - output.push(utils.stitchElement("span",null,{ - content: utils.htmlEncode(node.value).replace(/\n/g,"
"), - classes: ["splitLabelRight"] - })); - output.push(""); - return true; - } - return false; - }, - function(output,type,node) { // Macro nodes - if(node.type === "macro") { - output.push(utils.stitchElement("span", - {"data-tw-treenode-type": "macro"},{ - content: utils.htmlEncode(node.name), - classes: ["treeNode","label"] - })); - for(var f in node.params) { - output.push(utils.stitchElement("span",null,{ - classes: ["splitLabel"] - })); - output.push(utils.stitchElement("span",{"data-tw-treenode-type": "param"},{ - content: utils.htmlEncode(f), - classes: ["splitLabelLeft"] - })); - var v = node.params[f].value; - if(node.params[f].type === "string") { - v = '"' + utils.stringify(v) + '"'; - } else if(node.params[f].type === "eval") { - v = "{{" + v + "}}"; - } - output.push(utils.stitchElement("span",null,{ - content: utils.htmlEncode(v), - classes: ["splitLabelRight"] - })); - output.push(""); - } - output.push(utils.stitchElement("span",null, - {classes: ["treeNode","splitLabel"]})); - output.push(utils.stitchElement("span",{"data-tw-treenode-type": "renderStepDependencies"},{ - content: "dependencies", - classes: ["splitLabelLeft"] - })); - output.push(utils.stitchElement("span",null,{ - content: utils.htmlEncode(node.dependencies === null ? "*" : node.dependencies.join(", ")), - classes: ["splitLabelRight"] - })); - output.push(""); - if(node.children) { - utils.renderObject(output,type,node.children,customTemplates); - } - return true; - } - return false; - }, - function(output,type,node) { // HTML nodes - if(htmlNodes.indexOf(node.type) !== -1) { - output.push(utils.stitchElement("span", - {"data-tw-treenode-type": "html"},{ - content: node.type, - classes: ["treeNode","label"] - })); - for(var f in node.attributes) { - output.push(utils.stitchElement("span",null,{ - classes: ["treeNode"] - })); - var v = node.attributes[f]; - if(typeof v === "string") { - v = '"' + utils.stringify(v) + '"'; - } else if(v instanceof Array) { - v = v.join("; "); - } - if(typeof v === "object") { - output.push(utils.stitchElement("span",null,{ - classes: ["label"], - content: utils.htmlEncode(f) - })); - utils.renderObject(output,type,v); - } else { - output.push(utils.stitchElement("span",null,{ - classes: ["splitLabel"], - content: utils.stitchElement("span",null,{ - classes: ["splitLabelLeft"], - content: utils.htmlEncode(f) - }) + utils.stitchElement("span",null,{ - classes: ["splitLabelRight"], - content: utils.htmlEncode(v) - }) - })); - } - output.push(""); - } - if(node.children) { - utils.renderObject(output,type,node.children,customTemplates); - } - return true; - } else { - return false; - } + var renderNode, + renderArray = function(tree) { + var children = []; + for(var t=0; t"))], + ["treeNode"] + )]; + }, + renderMacroNode = function(node) { + var params = [], + ret = []; + for(var p in node.params) { + var v = node.params[p].value; + if(node.params[p].type === "eval") { + v = "{{" + v + "}}"; + } + params.push(HTML.splitLabel( + "param", + [HTML.text(p)], + [HTML.text(v)] + )); + } + ret.push(HTML.splitLabel( + "macro", + [HTML.text(node.name)], + params, + ["treeNode"] + )); + ret.push(HTML.splitLabel( + "dependencies", + [HTML.text("Dependencies")], + [HTML.text(node.dependencies === null ? "*" : node.dependencies.join(", "))], + ["treeNode"] + )); + if(node.children) { + ret.push(renderArray(node.children)); + } + return ret; + }, + renderHtmlNode = function(node) { + var attributes = [], + ret = []; + for(var a in node.attributes) { + var v = node.attributes[a]; + if(typeof v === "string") { + v = v; + } else if(v instanceof Array) { + v = v.join("; "); + } else if(typeof v === "object") { + var o = []; + for(var n in v) { + o.push(n,":",v[n],";"); + } + v = o.join(""); + } + attributes.push(HTML.splitLabel( + "attribute", + [HTML.text(a)], + [HTML.text(v)] + )); + } + ret.push(HTML.splitLabel( + "html", + [HTML.text(node.type)], + attributes, + ["treeNode"] + )); + if(node.children) { + ret.push(renderArray(node.children)); + } + return ret; + }; + renderNode = function(node) { + if(node.type === "text") { + return renderTextNode(node); + } else if(node.type === "macro") { + return renderMacroNode(node); + } else { + return renderHtmlNode(node); + } + }; + return HTML(renderArray(this.tree),type); }; exports.WikiTextParseTree = WikiTextParseTree; diff --git a/js/WikiTextRenderer.js b/js/WikiTextRenderer.js index 112838e23..e54bbb8c4 100644 --- a/js/WikiTextRenderer.js +++ b/js/WikiTextRenderer.js @@ -9,7 +9,8 @@ An array of JavaScript functions that generate a specified representation of a p /*jslint node: true */ "use strict"; -var utils = require("./Utils.js"); +var HTML = require("./HTML.js").HTML, + utils = require("./Utils.js"); var WikiTextRenderer = function() { this.renderSteps = []; // Array of {step: n, dependencies: [],handler: function(tiddler,renderer,store,utils) {}} @@ -59,51 +60,61 @@ WikiTextRenderer.prototype.rerender = function(node,changes,tiddler,store,render }; WikiTextRenderer.prototype.toString = function(type) { - var output = [], - stitchSplitLabel = function(name,value) { - output.push(utils.stitchElement("span",null, - {classes: ["treeNode","splitLabel"]})); - output.push(utils.stitchElement("span",null,{ - content: name, - classes: ["splitLabelLeft"] - })); - output.push(utils.stitchElement("code",null,{ - content: value, - classes: ["splitLabelRight"] - })); - output.push(""); - }, - customTemplates = [ - function(output,type,node) { // Rendering step - if(node.step !== undefined) { - output.push(utils.stitchElement("span",null,{ - content: node.step.toString(), - classes: ["treeNode","label"] - })); - output.push(utils.stitchElement("span",null,{ - content: node.type.toString(), - classes: ["treeNode","label"] - })); - stitchSplitLabel("dependencies",node.dependencies === null ? "*" : node.dependencies.join(", ")); - if(node.macro) { - stitchSplitLabel("macro",utils.htmlEncode(node.macro.toString())); - } - if(node.params) { - stitchSplitLabel("params",utils.htmlEncode(node.params.toString()).replace(/\n/g,"
")); - } - if(node.content) { - stitchSplitLabel("content",utils.htmlEncode(node.content.toString()).replace(/\n/g,"
")); - } - if(node.handler) { - stitchSplitLabel("handler",utils.htmlEncode(node.handler.toString()).replace(/\n/g,"
")); - } - return true; - } - return false; + var renderNode, + renderArray = function(tree) { + var children = []; + for(var t=0; t"))] + )); + } + if(node.content) { + ret.push(HTML.splitLabel( + "content", + [HTML.text("content")], + [HTML.raw(utils.htmlEncode(node.content.toString()).replace(/\n/g,"
"))] + )); + } + if(node.handler) { + ret.push(HTML.splitLabel( + "handler", + [HTML.text("handler")], + [HTML.raw(utils.htmlEncode(node.handler.toString()).replace(/\n/g,"
"))] + )); + } + return ret; + }; + return HTML(renderArray(this.renderSteps),type); }; exports.WikiTextRenderer = WikiTextRenderer;