/*\ title: $:/core/modules/macros/story/story.js type: application/javascript module-type: macro Displays a sequence of tiddlers defined in a JSON structure: { tiddlers: [ {title: , template: } ] } The storyview is a plugin that extends the story macro to implement different navigation experiences. \*/ (function(){ /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; exports.info = { name: "story", params: { story: {byName: "default", type: "tiddler"}, defaultViewTemplate: {byName: true, type: "tiddler"}, defaultEditTemplate: {byName: true, type: "tiddler"}, storyview: {byName: true, type: "text"} }, events: ["tw-navigate","tw-EditTiddler","tw-SaveTiddler"] }; exports.getStory = function() { var storyTiddler = this.wiki.getTiddler(this.params.story), story = {tiddlers: []}; if(storyTiddler && $tw.utils.hop(storyTiddler.fields,"text")) { return JSON.parse(storyTiddler.fields.text); } else { return { tiddlers: [] }; } }; exports.handleEvent = function(event) { if(this.eventMap[event.type]) { this.eventMap[event.type].call(this,event); } }; exports.eventMap = {}; // Navigate to a specified tiddler exports.eventMap["tw-navigate"] = function(event) { var template = this.params.defaultViewTemplate || "$:/templates/ViewTemplate", story = this.getStory(), navTiddler,t,tiddler; // See if the tiddler we want is already there for(t=0; t t) { // First delete the DOM nodes for(n=t; n story.tiddlers.length) { for(t=story.tiddlers.length; t