mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-12-24 00:50:28 +00:00
Allows checkbox widget to worth with indexes within data tiddlers (#2103)
This commit is contained in:
parent
d6d3aab36a
commit
e5b432a86b
@ -78,6 +78,15 @@ CheckboxWidget.prototype.getValue = function() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(this.checkboxIndex) {
|
||||
var value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || "");
|
||||
if(value === this.checkboxChecked) {
|
||||
return true;
|
||||
}
|
||||
if(value === this.checkboxUnchecked) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(this.checkboxTag) {
|
||||
return false;
|
||||
@ -101,7 +110,8 @@ CheckboxWidget.prototype.handleChangeEvent = function(event) {
|
||||
newFields = {title: this.checkboxTitle},
|
||||
hasChanged = false,
|
||||
tagCheck = false,
|
||||
hasTag = tiddler && tiddler.hasTag(this.checkboxTag);
|
||||
hasTag = tiddler && tiddler.hasTag(this.checkboxTag),
|
||||
value = checked ? this.checkboxChecked : this.checkboxUnchecked;
|
||||
if(this.checkboxTag && this.checkboxInvertTag === "yes") {
|
||||
tagCheck = hasTag === checked;
|
||||
} else {
|
||||
@ -123,14 +133,24 @@ CheckboxWidget.prototype.handleChangeEvent = function(event) {
|
||||
}
|
||||
// Set the field if specified
|
||||
if(this.checkboxField) {
|
||||
var value = checked ? this.checkboxChecked : this.checkboxUnchecked;
|
||||
if(!tiddler || tiddler.fields[this.checkboxField] !== value) {
|
||||
newFields[this.checkboxField] = value;
|
||||
hasChanged = true;
|
||||
}
|
||||
}
|
||||
// Set the index if specified
|
||||
if(this.checkboxIndex) {
|
||||
var indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);
|
||||
if(!tiddler || indexValue !== value) {
|
||||
hasChanged = true;
|
||||
}
|
||||
}
|
||||
if(hasChanged) {
|
||||
this.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));
|
||||
if(this.checkboxIndex) {
|
||||
this.wiki.setText(this.checkboxTitle,"",this.checkboxIndex,value);
|
||||
} else {
|
||||
this.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));
|
||||
}
|
||||
}
|
||||
// Trigger actions
|
||||
if(this.checkboxActions) {
|
||||
@ -147,6 +167,7 @@ CheckboxWidget.prototype.execute = function() {
|
||||
this.checkboxTitle = this.getAttribute("tiddler",this.getVariable("currentTiddler"));
|
||||
this.checkboxTag = this.getAttribute("tag");
|
||||
this.checkboxField = this.getAttribute("field");
|
||||
this.checkboxIndex = this.getAttribute("index");
|
||||
this.checkboxChecked = this.getAttribute("checked");
|
||||
this.checkboxUnchecked = this.getAttribute("unchecked");
|
||||
this.checkboxDefault = this.getAttribute("default");
|
||||
@ -161,7 +182,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
|
||||
*/
|
||||
CheckboxWidget.prototype.refresh = function(changedTiddlers) {
|
||||
var changedAttributes = this.computeAttributes();
|
||||
if(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.checked || changedAttributes.unchecked || changedAttributes["default"] || changedAttributes["class"]) {
|
||||
if(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes["default"] || changedAttributes["class"]) {
|
||||
this.refreshSelf();
|
||||
return true;
|
||||
} else {
|
||||
|
@ -18,9 +18,10 @@ The content of the `<$checkbox>` widget is displayed within an HTML `<label>` el
|
||||
|
||||
|!Attribute |!Description |
|
||||
|tiddler |Title of the tiddler to manipulate (defaults to the [[current tiddler|Current Tiddler]]) |
|
||||
|tag |The name of the tag to which the checkbox should be bound |
|
||||
|tag |The name of the tag to which the checkbox is bound |
|
||||
|invertTag |When set to ''yes'', flips the tag binding logic so that the absence of the tag causes the checkbox to be checked |
|
||||
|field |The name of the field to which the checkbox should be bound |
|
||||
|field |The name of the field to which the checkbox is bound |
|
||||
|index|<<.from-version "5.1.14">> The index of the //tiddler//, a [[DataTiddler|DataTiddlers]], to which the checkbox is bound<<.tip "be sure to set the //tiddler// correctly">>|
|
||||
|checked |The value of the field corresponding to the checkbox being checked |
|
||||
|unchecked |The value of the field corresponding to the checkbox being unchecked |
|
||||
|default |The default value to use if the field is not defined |
|
||||
@ -33,9 +34,7 @@ Using the checkbox widget in tag mode requires the ''tag'' attribute to specify
|
||||
|
||||
This example creates a checkbox that flips the ''done'' tag on the current tiddler:
|
||||
|
||||
```
|
||||
<$checkbox tag="done">Is it done?</$checkbox>
|
||||
```
|
||||
<<wikitext-example-without-html """<$checkbox tag="done"> Is it done?</$checkbox>""">>
|
||||
|
||||
!! Field Mode
|
||||
|
||||
@ -43,6 +42,12 @@ Using the checkbox widget in field mode requires the ''field'' attribute to spec
|
||||
|
||||
This example creates a checkbox that is checked if the field ''status'' is equal to ''open'' and unchecked if the field is equal to ''closed''. If the field is undefined then it defaults to ''closed'', meaning that the checkbox will be unchecked if the ''status'' field is missing.
|
||||
|
||||
```
|
||||
<$checkbox field="status" checked="open" unchecked="closed" default="closed">Is it open?</$checkbox>
|
||||
```
|
||||
<<wikitext-example-without-html """<$checkbox field="status" checked="open" unchecked="closed" default="closed"> Is it open?</$checkbox><br>''status:'' {{!!status}}""">>
|
||||
|
||||
!! Index Mode
|
||||
|
||||
To use the checkbox widget in index mode set the ''index'' attribute to the index of a [[DataTiddler|DataTiddlers]]. The ''checked'' and ''unchecked'' attributes specify the values to be assigned to the index and correspond to its checked and unchecked states respectively. The ''default'' attribute is used as a fallback value if the index is undefined.
|
||||
|
||||
The example below creates a checkbox that is checked if the index by the name of this tiddler in the tiddler ExampleData is equal to ''selected'' and unchecked if the index is an empty string. If the index is undefined then it defaults to an empty string, meaning the checkbox will be unchecked if the index is missing.
|
||||
|
||||
<$macrocall $name="wikitext-example-without-html" src="""<$checkbox tiddler="ExampleData" index=<<currentTiddler>> checked="selected" unchecked="" default=""> Selected?</$checkbox>"""/>
|
||||
|
Loading…
Reference in New Issue
Block a user