/*\ title: js/WikiStore.js \*/ (function(){ /*jslint node: true */ "use strict"; var Tiddler = require("./Tiddler.js").Tiddler, utils = require("./Utils.js"); /* Creates a new WikiStore object Available options are: shadowStore: An existing WikiStore to use for shadow tiddler storage. Pass null to prevent a default shadow store from being created */ var WikiStore = function WikiStore(options) { options = options || {}; this.tiddlers = {}; this.parsers = {}; this.macros = {}; this.tiddlerSerializers = {}; this.tiddlerDeserializers = {}; this.sandbox = options.sandbox; this.shadows = options.shadowStore !== undefined ? options.shadowStore : new WikiStore({ shadowStore: null }); }; WikiStore.prototype.registerParser = function(type,parser) { this.parsers[type] = parser; }; WikiStore.prototype.registerTiddlerSerializer = function(extension,mimeType,serializer) { this.tiddlerSerializers[extension] = serializer; this.tiddlerSerializers[mimeType] = serializer; }; WikiStore.prototype.registerTiddlerDeserializer = function(extension,mimeType,deserializer) { this.tiddlerDeserializers[extension] = deserializer; this.tiddlerDeserializers[mimeType] = deserializer; }; WikiStore.prototype.getTiddler = function(title) { var t = this.tiddlers[title]; if(t instanceof Tiddler) { return t; } else if(this.shadows) { return this.shadows.getTiddler(title); } else { return null; } }; WikiStore.prototype.getTiddlerText = function(title) { var t = this.getTiddler(title); return t instanceof Tiddler ? t.fields.text : null; }; WikiStore.prototype.deleteTiddler = function(title) { delete this.tiddlers[title]; }; WikiStore.prototype.tiddlerExists = function(title) { var exists = this.tiddlers[title] instanceof Tiddler; if(exists) { return true; } else if (this.shadows) { return this.shadows.tiddlerExists(title); } return ; }; WikiStore.prototype.addTiddler = function(tiddler) { this.tiddlers[tiddler.fields.title] = tiddler; }; WikiStore.prototype.forEachTiddler = function(/* [sortField,[excludeTag,]]callback */) { var a = 0, sortField = arguments.length > 1 ? arguments[a++] : null, excludeTag = arguments.length > 2 ? arguments[a++] : null, callback = arguments[a++], t, tiddlers = [], tiddler; if(sortField) { for(t in this.tiddlers) { tiddlers.push(this.tiddlers[t]); } tiddlers.sort(function (a,b) { var aa = a.fields[sortField] || 0, bb = b.fields[sortField] || 0; if(aa < bb) { return -1; } else { if(aa > bb) { return 1; } else { return 0; } } }); for(t=0; t