mirror of
https://github.com/TiddlyWiki/TiddlyWiki5.git
synced 2026-04-26 04:24:44 +00:00
Added parsing and rendering for JSON tiddlers
This commit is contained in:
56
js/JSONParser.js
Normal file
56
js/JSONParser.js
Normal file
@@ -0,0 +1,56 @@
|
||||
/*\
|
||||
title: js/JSONParser.js
|
||||
|
||||
Compiles JSON objects into JavaScript functions that render them in HTML and plain text
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true */
|
||||
"use strict";
|
||||
|
||||
var utils = require("./Utils.js");
|
||||
|
||||
var JSONRenderer = function(handlerCode) {
|
||||
/*jslint evil: true */
|
||||
this.handler = eval(handlerCode);
|
||||
};
|
||||
|
||||
JSONRenderer.prototype.render = function(tiddler,store) {
|
||||
return this.handler(tiddler,store,utils);
|
||||
};
|
||||
|
||||
JSONRenderer.prototype.toString = function(type) {
|
||||
var output = [];
|
||||
utils.renderObject(output,type,this.handler.toString(),[]);
|
||||
return output.join("");
|
||||
};
|
||||
|
||||
// The parse tree is degenerate
|
||||
var JSONParseTree = function(tree) {
|
||||
this.tree = tree;
|
||||
this.dependencies = [];
|
||||
};
|
||||
|
||||
JSONParseTree.prototype.compile = function(type) {
|
||||
console.log("(function (tiddler,store,utils) {var output=[]; utils.renderObject(output,'" + type + "'," + JSON.stringify(this.tree) + ",[]);return output.join('');})");
|
||||
return new JSONRenderer("(function (tiddler,store,utils) {var output=[]; utils.renderObject(output,'" + type + "'," + JSON.stringify(this.tree) + ",[]);return output.join('');})");
|
||||
};
|
||||
|
||||
JSONParseTree.prototype.toString = function(type) {
|
||||
var output = [];
|
||||
utils.renderObject(output,type,this.tree,[]);
|
||||
return output.join("");
|
||||
};
|
||||
|
||||
var JSONParser = function() {
|
||||
};
|
||||
|
||||
JSONParser.prototype.parse = function(type,text) {
|
||||
return new JSONParseTree(JSON.parse(text));
|
||||
};
|
||||
|
||||
|
||||
exports.JSONParser = JSONParser;
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user