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