From c535dd605ce1c42abc1367b1404503cb867e0cd3 Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 07:50:34 -0500 Subject: [PATCH 1/9] Grant the select widget the ability to select multiple values. Multiple values are placed in a given tiddler-field combination as if that field were a list field. --- core/modules/widgets/select.js | 47 +++++++++++++++++-- .../tw5.com/tiddlers/widgets/SelectWidget.tid | 21 ++++++--- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index 904988f97..e9f89c60c 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -51,7 +51,12 @@ SelectWidget.prototype.render = function(parent,nextSibling) { Handle a change event */ SelectWidget.prototype.handleChangeEvent = function(event) { - var value = this.getSelectDomNode().value; + if(this.selectMultiple == false) { + var value = this.getSelectDomNode().value; + } else { + var value = this.getSelectValues(); + value = value.map(function(s) { return "[["+s+"]]"}).join(" "); + } this.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value); }; @@ -81,9 +86,21 @@ SelectWidget.prototype.setSelectValue = function() { } } // Assign it to the select element if it's different than the current value - var domNode = this.getSelectDomNode(); - if(domNode.value !== value) { - domNode.value = value; + if (this.selectMultiple) { + value = value === undefined ? "" : value; + var select = this.getSelectDomNode(); + var values = Array.isArray(value) ? value : value.split(","); + for(var i=0; i < select.children.length; i++){ + if(values.indexOf(select.children[i].value) != -1) { + select.children[i].selected = true; + } + } + + } else { + var domNode = this.getSelectDomNode(); + if(domNode.value !== value) { + domNode.value = value; + } } }; @@ -94,6 +111,22 @@ SelectWidget.prototype.getSelectDomNode = function() { return this.children[0].domNodes[0]; }; +// Return an array of the selected opion values +// select is an HTML select element +SelectWidget.prototype.getSelectValues = function() { + var select = this.getSelectDomNode() + var result = []; + var options = select && select.options; + var opt; + for (var i=0, iLen=options.length; i` and `` elements. @@ -99,3 +92,17 @@ This example uses a nested pair of list widgets. The outer one generates the ` "/> + +!! Multiple Selections + +This example uses the `multiple` keyword to specify that we should be able to select multiple items. + +<$macrocall $name="wikitext-example-without-html" src="<$select tiddler='$:/generated-list-demo-state' field='testing' multiple> +<$list filter='[tag[TableOfContents]]'> + + +
+<$list filter='[list[$:/generated-list-demo-state!!testing]]'> +<$view field='title' />
+ +"/> \ No newline at end of file From 75380c56cc43121bbb538ac3d5736508f719fc7c Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 07:53:19 -0500 Subject: [PATCH 2/9] Oops, deleted metadata --- editions/tw5.com/tiddlers/widgets/SelectWidget.tid | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid index 1f6093677..6afb0f2c7 100644 --- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid @@ -1,3 +1,11 @@ +caption: select +created: 20131024141900000 +modified: 20141203155137508 +tags: Widgets +title: SelectWidget +type: text/vnd.tiddlywiki + + ! Introduction The select widget displays a popup menu based on a [[HTML select element|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]]. The popup (or dropdown) contains a list of items defined by `` elements. From 1569090046099b00993671144a22db419833b799 Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 07:53:47 -0500 Subject: [PATCH 3/9] typo --- editions/tw5.com/tiddlers/widgets/SelectWidget.tid | 1 - 1 file changed, 1 deletion(-) diff --git a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid index 6afb0f2c7..8eab689bd 100644 --- a/editions/tw5.com/tiddlers/widgets/SelectWidget.tid +++ b/editions/tw5.com/tiddlers/widgets/SelectWidget.tid @@ -5,7 +5,6 @@ tags: Widgets title: SelectWidget type: text/vnd.tiddlywiki - ! Introduction The select widget displays a popup menu based on a [[HTML select element|https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select]]. The popup (or dropdown) contains a list of items defined by `` elements. From 46a3b2f2617d05bbfe42070717cb91a84b7231d9 Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 07:57:10 -0500 Subject: [PATCH 4/9] Singing CLA --- licenses/cla-individual.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index e4ca78d44..ccb7a9144 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -256,3 +256,5 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 Soeren Enevoldsen, @senevoldsen90, 2015/10/09 + +Matthew LAuber, @mklauber, 2015/11/13 \ No newline at end of file From 065b274b988b281990ed8b7752b7e55a1c82186d Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 08:04:13 -0500 Subject: [PATCH 5/9] Use the $tw.utls.parseStringArray function to break up a list. --- core/modules/widgets/select.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index e9f89c60c..852ef55f1 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -54,7 +54,7 @@ SelectWidget.prototype.handleChangeEvent = function(event) { if(this.selectMultiple == false) { var value = this.getSelectDomNode().value; } else { - var value = this.getSelectValues(); + var value = this.getSelectValues() value = value.map(function(s) { return "[["+s+"]]"}).join(" "); } this.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value); @@ -89,7 +89,7 @@ SelectWidget.prototype.setSelectValue = function() { if (this.selectMultiple) { value = value === undefined ? "" : value; var select = this.getSelectDomNode(); - var values = Array.isArray(value) ? value : value.split(","); + var values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value); for(var i=0; i < select.children.length; i++){ if(values.indexOf(select.children[i].value) != -1) { select.children[i].selected = true; From f540be4ac43571fb094c395bbc93350c66bb65c7 Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 08:06:51 -0500 Subject: [PATCH 6/9] use $tw.utils.stringifyList --- core/modules/widgets/select.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index 852ef55f1..c86869d46 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -55,7 +55,7 @@ SelectWidget.prototype.handleChangeEvent = function(event) { var value = this.getSelectDomNode().value; } else { var value = this.getSelectValues() - value = value.map(function(s) { return "[["+s+"]]"}).join(" "); + value = $tw.utils.stringifyList(value); } this.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value); }; @@ -174,4 +174,4 @@ SelectWidget.prototype.refresh = function(changedTiddlers) { exports.select = SelectWidget; -})(); \ No newline at end of file +})(); From 35ce8c8b5507608f63db7436cb9956454631eda1 Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 08:18:20 -0500 Subject: [PATCH 7/9] typo --- licenses/cla-individual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index ccb7a9144..ce6061d0f 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -257,4 +257,4 @@ Antaeus Feldspar @afeldspar 2015/10/20 Soeren Enevoldsen, @senevoldsen90, 2015/10/09 -Matthew LAuber, @mklauber, 2015/11/13 \ No newline at end of file +Matthew Lauber, @mklauber, 2015/11/13 \ No newline at end of file From 8ccee5d01518bbfa8ba029ec6df69b747f6f2580 Mon Sep 17 00:00:00 2001 From: Matt Lauber Date: Fri, 13 Nov 2015 11:30:06 -0500 Subject: [PATCH 8/9] Remove cla for separate PR, and clean up variable declaration. --- core/modules/widgets/select.js | 10 +++++----- licenses/cla-individual.md | 4 +--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/core/modules/widgets/select.js b/core/modules/widgets/select.js index c86869d46..18552fc1a 100644 --- a/core/modules/widgets/select.js +++ b/core/modules/widgets/select.js @@ -114,11 +114,11 @@ SelectWidget.prototype.getSelectDomNode = function() { // Return an array of the selected opion values // select is an HTML select element SelectWidget.prototype.getSelectValues = function() { - var select = this.getSelectDomNode() - var result = []; - var options = select && select.options; - var opt; - for (var i=0, iLen=options.length; i Date: Fri, 13 Nov 2015 12:36:05 -0500 Subject: [PATCH 9/9] Unchange CLA. --- licenses/cla-individual.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/licenses/cla-individual.md b/licenses/cla-individual.md index 5af48bb28..e4ca78d44 100644 --- a/licenses/cla-individual.md +++ b/licenses/cla-individual.md @@ -255,4 +255,4 @@ Tony Grosinger @tgrosinger 2015/10/03 Antaeus Feldspar @afeldspar 2015/10/20 -Soeren Enevoldsen, @senevoldsen90, 2015/10/09 \ No newline at end of file +Soeren Enevoldsen, @senevoldsen90, 2015/10/09