From e4dd63d0894a98b6b66c7799eecb0fb45e870aff Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sun, 19 Feb 2012 17:24:01 +0000 Subject: [PATCH] Updated slider macro to have a refresh method --- js/macros/slider.js | 37 +++++++++++++++++++--------- tiddlywiki5/tiddlers/SliderTests.tid | 4 +++ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/js/macros/slider.js b/js/macros/slider.js index a434b25da..788752cd5 100644 --- a/js/macros/slider.js +++ b/js/macros/slider.js @@ -16,37 +16,50 @@ exports.macro = { name: "slider", types: ["text/html","text/plain"], params: { - state: {byPos: 0, type: "text"}, + state: {byPos: 0, type: "tiddler"}, targetTiddler: {byPos: 1, type: "tiddler"}, label: {byPos: 2, type: "text"}, tooltip: {byPos: 3, type: "text"} }, events: { click: function(event,macroNode) { - var el = event.currentTarget.firstChild.firstChild.nextSibling, - stateTiddler = macroNode.params.state ? macroNode.store.getTiddler(macroNode.params.state) : {text: ""}, - isOpen = stateTiddler.text.trim() === "open"; - macroNode.store.addTiddler(new Tiddler(stateTiddler,{text: isOpen ? "closed" : "open"})); - el.style.display = isOpen ? "none" : "block"; - event.preventDefault(); - return false; + if(event.target === event.currentTarget.firstChild.firstChild) { + var el = event.currentTarget.firstChild.firstChild.nextSibling, + stateTiddler = macroNode.params.state ? macroNode.store.getTiddler(macroNode.params.state) : null; + stateTiddler = stateTiddler || new Tiddler({title: macroNode.params.state, text: ""}); + var isOpen = stateTiddler.text.trim() === "open"; + macroNode.store.addTiddler(new Tiddler(stateTiddler,{text: isOpen ? "closed" : "open"})); + event.preventDefault(); + return false; + } else { + return true; + } } }, execute: function(macroNode,tiddler,store) { - var stateTiddler = macroNode.params.state ? store.getTiddler(macroNode.params.state) : {text: ""}, - isOpen = stateTiddler.text.trim() === "open", + var isOpen = macroNode.params.state ? store.getTiddlerText(macroNode.params.state,"").trim() === "open" : true, target = macroNode.params.targetTiddler, dependencies = new Dependencies(); dependencies.addDependency(target,true); var content = Renderer.SliderNode(macroNode.params.state, - macroNode.params.label, + macroNode.params.label ? macroNode.params.label : target, macroNode.params.tooltip, isOpen, [ Renderer.MacroNode("tiddler",{target: target},null,dependencies,store) ]); - content.execute(tiddler); + content.execute(macroNode.parents,tiddler); return [content]; + }, + refresh: function(changes,macroNode,tiddler,store) { + if(macroNode.params.target && changes.hasOwnProperty(macroNode.params.target) !== -1) { + // If the target has changed, re-render the macro + } else if (macroNode.params.state && changes.hasOwnProperty(macroNode.params.state) !== -1) { + // If it was just the state tiddler that's changed, set the display appropriately + var el = macroNode.domNode.firstChild.firstChild.nextSibling, + isOpen = macroNode.store.getTiddlerText(macroNode.params.state,"").trim() === "open"; + el.style.display = isOpen ? "block" : "none"; + } } }; diff --git a/tiddlywiki5/tiddlers/SliderTests.tid b/tiddlywiki5/tiddlers/SliderTests.tid index 0505655bc..54f345505 100644 --- a/tiddlywiki5/tiddlers/SliderTests.tid +++ b/tiddlywiki5/tiddlers/SliderTests.tid @@ -3,3 +3,7 @@ title: SliderTests The status of this slider is stored in the tiddler JackSlider: <> +And here's another slider that is also keyed to JackSlider (<>), this time inline. + +And here's another slider that contains a video: +<>