/*\ title: $:/core/modules/widgets/action-listops.js type: application/javascript module-type: widget Action widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler) \*/ (function() { /*jslint node: true, browser: true */ /*global $tw: false */ "use strict"; var Widget = require("$:/core/modules/widgets/widget.js").widget; var ActionListopsWidget = function(parseTreeNode, options) { this.initialise(parseTreeNode, options); }; /** * Inherit from the base widget class */ ActionListopsWidget.prototype = new Widget(); /** * Render this widget into the DOM */ ActionListopsWidget.prototype.render = function(parent, nextSibling) { this.computeAttributes(); this.execute(); }; /** * Compute the internal state of the widget */ ActionListopsWidget.prototype.execute = function() { // Get our parameters this.target = this.getAttribute("$tiddler", this.getVariable( "currentTiddler")); this.filter = this.getAttribute("$filter"); this.subfilter = this.getAttribute("$subfilter"); this.listField = this.getAttribute("$field", "list"); this.listIndex = this.getAttribute("$index"); this.filtertags = this.getAttribute("$tags"); }; /** * Refresh the widget by ensuring our attributes are up to date */ ActionListopsWidget.prototype.refresh = function(changedTiddlers) { var changedAttributes = this.computeAttributes(); if(changedAttributes.$tiddler || changedAttributes.$filter || changedAttributes.$subfilter || changedAttributes.$field || changedAttributes.$index || changedAttributes.$tags) { this.refreshSelf(); return true; } return this.refreshChildren(changedTiddlers); }; /** * Invoke the action associated with this widget */ ActionListopsWidget.prototype.invokeAction = function(triggeringWidget, event) { //Apply the specified filters to the lists var field = this.listField, index, type = "!!", list = this.listField; if(this.listIndex) { field = undefined; index = this.listIndex; type = "##"; list = this.listIndex; } if(this.filter) { this.wiki.setText(this.target, field, index, $tw.utils.stringifyList( this.wiki .filterTiddlers(this.filter, this))); } if(this.subfilter) { var subfilter = "[list[" + this.target + type + list + "]] " + this.subfilter; this.wiki.setText(this.target, field, index, $tw.utils.stringifyList( this.wiki .filterTiddlers(subfilter, this))); } if(this.filtertags) { var tagfilter = "[list[" + this.target + "!!tags]] " + this.filtertags; this.wiki.setText(this.target, "tags", undefined, $tw.utils.stringifyList( this.wiki.filterTiddlers(tagfilter, this))); } return true; // Action was invoked }; exports["action-listops"] = ActionListopsWidget; })();