1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-11-27 12:07:19 +00:00

Create action-listops.js

Action widget designed to apply filters to the current list and save the modified list back to the list. The widget is able to manipulate lists in any field or any data index of the target tiddler, and includes an option to manipulate the tags of the target tiddler. The widget is used in conjunction with the extended list operator filters (xlistops.js)
This commit is contained in:
William Jackson 2015-10-18 18:41:40 +02:00
parent 49894abaf4
commit 56d467fb47

View File

@ -0,0 +1,89 @@
/*\
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 'tags' 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("$list", "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.$list || 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) {
//try this
var field = this.listField,
index = undefined,
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;
})();