/*\ title: $:/core/modules/macros/story.js type: application/javascript module-type: macro \*/ (function(){ /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; function scrollToTop(duration) { if (duration < 0) { return; } var delta = (-document.body.scrollTop/duration) * 10; window.setTimeout(function() { document.body.scrollTop = document.body.scrollTop + delta; scrollToTop(duration-10); }, 10); } exports.info = { name: "story", params: { story: {byName: "default", type: "tiddler"}, defaultViewTemplate: {byName: true, type: "tiddler"}, defaultEditTemplate: {byName: true, type: "tiddler"} }, events: ["tw-navigate","tw-EditTiddler","tw-SaveTiddler"] }; exports.handleEvent = function(event) { var template, storyTiddler, story, storyRecord, tiddler, storyTiddlerModified, t; switch(event.type) { case "tw-navigate": // Navigate to a specified tiddler template = this.hasParameter("defaultViewTemplate") ? this.params.defaultViewTemplate : "ViewTemplate"; storyTiddler = this.wiki.getTiddler(this.params.story); story = {tiddlers: []}; if(storyTiddler && storyTiddler.fields.hasOwnProperty("text")) { story = JSON.parse(storyTiddler.fields.text); } story.tiddlers.unshift({title: event.navigateTo, template: template}); this.wiki.addTiddler(new $tw.Tiddler(storyTiddler,{text: JSON.stringify(story)})); scrollToTop(400); event.stopPropagation(); return false; case "tw-EditTiddler": // Put the specified tiddler into edit mode template = this.hasParameter("defaultEditTemplate") ? this.params.defaultEditTemplate : "EditTemplate"; storyTiddler = this.wiki.getTiddler(this.params.story); story = {tiddlers: []}; if(storyTiddler && storyTiddler.fields.hasOwnProperty("text")) { story = JSON.parse(storyTiddler.fields.text); } for(t=0; t t) { // First delete the DOM nodes for(n=t; n story.tiddlers.length) { for(t=story.tiddlers.length; t