/*\ title: js/Tiddler.js Tiddlers are an immutable dictionary of name:value pairs called fields. Values can be a string, an array of strings, or a JavaScript date object. The only field that is required is the `title` field, but useful tiddlers also have a `text` field, and some or all of the standard fields `modified`, `modifier`, `created`, `creator`, `tags` and `type`. Hardcoded in the system is the knowledge that the 'tags' field is a string array, and that the 'modified' and 'created' fields are dates. All other fields are strings. \*/ (function(){ /*jslint node: true */ "use strict"; var utils = require("./Utils.js"), ArgParser = require("./ArgParser.js").ArgParser; var Tiddler = function(/* tiddler,fields */) { var fields = {}, // Keep the fields private, later we'll expose getters for them tags, // Keep the tags separately because they're the only Array field f,t,c,arg,src; // Accumulate the supplied fields for(c=0; c bb) { return 1; } else { return 0; } } }; Tiddler.parseTiddlerField = function(name,value) { var type = Tiddler.specialTiddlerFields[name]; if(type) { return Tiddler.specialTiddlerFieldParsers[type](value); } else if (typeof value === "string") { return value; } else { return null; } }; // These are the non-string fields Tiddler.specialTiddlerFields = { "created": "date", "modified": "date", "tags": "array" }; Tiddler.specialTiddlerFieldParsers = { date: function(value) { if(typeof value === "string") { return utils.convertFromYYYYMMDDHHMMSSMMM(value); } else if (value instanceof Date) { return value; } else { return null; } }, array: function(value) { if(typeof value === "string") { var parser = new ArgParser(value,{noNames: true, allowEval: false}); return parser.getStringValues(); } else if (value instanceof Array) { var result = []; for(var t=0; t