From e84c422e5091c02f55db4027faa9ba840e2aee6c Mon Sep 17 00:00:00 2001 From: Jeremy Ruston Date: Sat, 2 Nov 2019 09:31:15 +0000 Subject: [PATCH] Range widget: fix refreshing The range widget wasn't refreshing correctly when the underlying tiddler value changed --- core/modules/widgets/range.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/core/modules/widgets/range.js b/core/modules/widgets/range.js index 591dab482..eee536487 100644 --- a/core/modules/widgets/range.js +++ b/core/modules/widgets/range.js @@ -47,11 +47,9 @@ RangeWidget.prototype.render = function(parent,nextSibling) { this.inputDomNode.setAttribute("step", this.increment); } this.inputDomNode.value = this.getValue(); - - // Add a click event handler $tw.utils.addEventListeners(this.inputDomNode,[ - {name: "input", handlerObject: this, handlerMethod: "handleChangeEvent"} + {name: "input", handlerObject: this, handlerMethod: "handleInputEvent"} ]); // Insert the label into the DOM and render any children parent.insertBefore(this.inputDomNode,nextSibling); @@ -60,10 +58,11 @@ RangeWidget.prototype.render = function(parent,nextSibling) { RangeWidget.prototype.getValue = function() { var tiddler = this.wiki.getTiddler(this.tiddlerTitle), + fieldName = this.tiddlerField || "text", value = this.defaultValue; if(tiddler) { - if($tw.utils.hop(tiddler.fields,this.tiddlerField)) { - value = tiddler.fields[this.tiddlerField] || ""; + if($tw.utils.hop(tiddler.fields,fieldName)) { + value = tiddler.fields[fieldName] || ""; } else { value = this.defaultValue || ""; } @@ -71,8 +70,10 @@ RangeWidget.prototype.getValue = function() { return value; }; -RangeWidget.prototype.handleChangeEvent = function(event) { - this.wiki.setText(this.tiddlerTitle ,this.tiddlerField, null,this.inputDomNode.value); +RangeWidget.prototype.handleInputEvent = function(event) { + if(this.getValue() !== this.inputDomNode.value) { + this.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value); + } }; /* @@ -102,7 +103,10 @@ RangeWidget.prototype.refresh = function(changedTiddlers) { } else { var refreshed = false; if(changedTiddlers[this.tiddlerTitle]) { - this.inputDomNode.checked = this.getValue(); + var value = this.getValue(); + if(this.inputDomNode.value !== value) { + this.inputDomNode.value = value; + } refreshed = true; } return this.refreshChildren(changedTiddlers) || refreshed;