kopia lustrzana https://github.com/miklobit/TiddlyWiki5
				
				
				
			Add Range widget (#2988)
* Adds a range widget Adds a range widget that supports all the range attributes on a input[type=range] element. These include min max and increment. * Update range.js * Fix spaces vs tabs. * Added documentation.print-window-tiddler
							rodzic
							
								
									f26bcb273b
								
							
						
					
					
						commit
						c974858cf5
					
				|  | @ -0,0 +1,114 @@ | ||||||
|  | /*\ | ||||||
|  | title: $:/core/modules/widgets/range.js | ||||||
|  | type: application/javascript | ||||||
|  | module-type: widget | ||||||
|  | 
 | ||||||
|  | Range widget | ||||||
|  | 
 | ||||||
|  | \*/ | ||||||
|  | (function(){ | ||||||
|  | 
 | ||||||
|  | /*jslint node: true, browser: true */ | ||||||
|  | /*global $tw: false */ | ||||||
|  | "use strict"; | ||||||
|  | 
 | ||||||
|  | var Widget = require("$:/core/modules/widgets/widget.js").widget; | ||||||
|  | 
 | ||||||
|  | var RangeWidget = function(parseTreeNode,options) { | ||||||
|  | 	this.initialise(parseTreeNode,options); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | Inherit from the base widget class | ||||||
|  | */ | ||||||
|  | RangeWidget.prototype = new Widget(); | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | Render this widget into the DOM | ||||||
|  | */ | ||||||
|  | RangeWidget.prototype.render = function(parent,nextSibling) { | ||||||
|  | 	// Save the parent dom node
 | ||||||
|  | 	this.parentDomNode = parent; | ||||||
|  | 	// Compute our attributes
 | ||||||
|  | 	this.computeAttributes(); | ||||||
|  | 	// Execute our logic
 | ||||||
|  | 	this.execute(); | ||||||
|  | 	// Create our elements
 | ||||||
|  | 	this.inputDomNode = this.document.createElement("input"); | ||||||
|  | 	this.inputDomNode.setAttribute("type","range"); | ||||||
|  | 	this.inputDomNode.setAttribute("class",this.elementClass); | ||||||
|  | 	if(this.minValue){ | ||||||
|  | 		this.inputDomNode.setAttribute("min", this.minValue); | ||||||
|  | 	} | ||||||
|  | 	if(this.maxValue){ | ||||||
|  | 		this.inputDomNode.setAttribute("max", this.maxValue); | ||||||
|  | 	} | ||||||
|  | 	if(this.increment){ | ||||||
|  | 		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"} | ||||||
|  | 	]); | ||||||
|  | 	// Insert the label into the DOM and render any children
 | ||||||
|  | 	parent.insertBefore(this.inputDomNode,nextSibling); | ||||||
|  | 	this.domNodes.push(this.inputDomNode); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | RangeWidget.prototype.getValue = function() { | ||||||
|  | 	var tiddler = this.wiki.getTiddler(this.tiddlerTitle), | ||||||
|  | 		value   = this.defaultValue; | ||||||
|  | 	if(tiddler) { | ||||||
|  | 		if($tw.utils.hop(tiddler.fields,this.tiddlerField)) { | ||||||
|  | 			value = tiddler.fields[this.tiddlerField] || ""; | ||||||
|  | 		} else { | ||||||
|  | 			value = this.defaultValue || ""; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return value; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | RangeWidget.prototype.handleChangeEvent = function(event) { | ||||||
|  | 	this.wiki.setText(this.tiddlerTitle ,this.tiddlerField, null,this.inputDomNode.value); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | Compute the internal state of the widget | ||||||
|  | */ | ||||||
|  | RangeWidget.prototype.execute = function() { | ||||||
|  | 	// Get the parameters from the attributes
 | ||||||
|  | 	this.tiddlerTitle = this.getAttribute("tiddler",this.getVariable("currentTiddler")); | ||||||
|  | 	this.tiddlerField = this.getAttribute("field"); | ||||||
|  | 	this.minValue = this.getAttribute("min"); | ||||||
|  | 	this.maxValue = this.getAttribute("max"); | ||||||
|  | 	this.increment = this.getAttribute("increment"); | ||||||
|  | 	this.defaultValue = this.getAttribute("default"); | ||||||
|  | 	this.elementClass = this.getAttribute("class",""); | ||||||
|  | 	// Make the child widgets
 | ||||||
|  | 	this.makeChildWidgets(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /* | ||||||
|  | Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering | ||||||
|  | */ | ||||||
|  | RangeWidget.prototype.refresh = function(changedTiddlers) { | ||||||
|  | 	var changedAttributes = this.computeAttributes(); | ||||||
|  | 	if(changedAttributes.tiddler || changedAttributes.field || changedAttributes['min'] || changedAttributes['max'] || changedAttributes['increment'] || changedAttributes["default"] || changedAttributes["class"]) { | ||||||
|  | 		this.refreshSelf(); | ||||||
|  | 		return true; | ||||||
|  | 	} else { | ||||||
|  | 		var refreshed = false; | ||||||
|  | 		if(changedTiddlers[this.tiddlerTitle]) { | ||||||
|  | 			this.inputDomNode.checked = this.getValue(); | ||||||
|  | 			refreshed = true; | ||||||
|  | 		} | ||||||
|  | 		return this.refreshChildren(changedTiddlers) || refreshed; | ||||||
|  | 	} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | exports.range = RangeWidget; | ||||||
|  | 
 | ||||||
|  | })(); | ||||||
|  | @ -0,0 +1,22 @@ | ||||||
|  | caption: range | ||||||
|  | created: 20171102134825376 | ||||||
|  | modified: 20171102134928964 | ||||||
|  | tags: Widgets | ||||||
|  | title: RangeWidget | ||||||
|  | 
 | ||||||
|  | ! Introduction | ||||||
|  | 
 | ||||||
|  | The range widget displays an HTML `<input type="range">` that reflects a given tiddler field numeric value. Adjusting the radio button sets to the tiddler field to the value. | ||||||
|  | 
 | ||||||
|  | ! Content and Attributes | ||||||
|  | 
 | ||||||
|  | The content of the `<$range>` widget is ignored. | ||||||
|  | 
 | ||||||
|  | |!Attribute |!Description | | ||||||
|  | |tiddler |Title of the tiddler to manipulate (defaults to the [[current tiddler|Current Tiddler]]) | | ||||||
|  | |field |The field of the //tiddler// bound to the radio button| | ||||||
|  | |min |The minimum value to be able to be set by the `<$range>` widget.| | ||||||
|  | |max |The maximum value to be able to be set by the `<$range>` widget.| | ||||||
|  | |increment |The minimum amount by which a value may be changed.  Defaults to 1.| | ||||||
|  | |default |The default value displayed if the field is missing or empty.| | ||||||
|  | |class |CSS classes to be assigned to the label around the radio button | | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 Matt Lauber
						Matt Lauber