|
|
- /**
- A control that looks like a switch with labels for two states. Each time a ToggleButton is tapped,
- it switches its value and fires an onChange event.
-
- {kind: "onyx.ToggleButton", onContent: "foo", offContent: "bar", onChange: "buttonToggle"}
-
- buttonToggle: function(inSender, inEvent) {
- this.log("Toggled to value " + inEvent.value);
- }
-
- To find out the value of the button, use getValue:
-
- queryToggleValue: function() {
- return this.$.toggleButton.getValue();
- }
-
- The color of the toggle button can be customized by applying a background color:
-
- {kind: "onyx.ToggleButton", style: "background-color: #35A8EE;"}
- */
- enyo.kind({
- name: "onyx.ToggleButton",
- classes: "onyx-toggle-button",
- published: {
- active: false,
- value: false,
- onContent: "On",
- offContent: "Off",
- disabled: false
- },
- events: {
- /**
- The onChange event fires when the user changes the value of the toggle button,
- but not when the value is changed programmatically.
- */
- onChange: ""
- },
- //* @protected
- handlers: {
- ondragstart: "dragstart",
- ondrag: "drag",
- ondragfinish: "dragfinish"
- },
- components: [
- {name: "contentOn", classes: "onyx-toggle-content on"},
- {name: "contentOff", classes: "onyx-toggle-content off"},
- {classes: "onyx-toggle-button-knob"}
- ],
- create: function() {
- this.inherited(arguments);
- this.value = Boolean(this.value || this.active);
- this.onContentChanged();
- this.offContentChanged();
- this.disabledChanged();
- },
- rendered: function() {
- this.inherited(arguments);
- this.valueChanged();
- },
- valueChanged: function() {
- this.addRemoveClass("off", !this.value);
- this.$.contentOn.setShowing(this.value);
- this.$.contentOff.setShowing(!this.value);
- this.setActive(this.value);
- },
- activeChanged: function() {
- this.setValue(this.active);
- this.bubble("onActivate");
- },
- onContentChanged: function() {
- this.$.contentOn.setContent(this.onContent || "");
- this.$.contentOn.addRemoveClass("empty", !this.onContent);
- },
- offContentChanged: function() {
- this.$.contentOff.setContent(this.offContent || "");
- this.$.contentOff.addRemoveClass("empty", !this.onContent);
- },
- disabledChanged: function() {
- this.addRemoveClass("disabled", this.disabled);
- },
- updateValue: function(inValue) {
- if (!this.disabled) {
- this.setValue(inValue);
- this.doChange({value: this.value});
- }
- },
- tap: function() {
- this.updateValue(!this.value);
- },
- dragstart: function(inSender, inEvent) {
- if (inEvent.horizontal) {
- inEvent.preventDefault();
- this.dragging = true;
- this.dragged = false;
- return true;
- }
- },
- drag: function(inSender, inEvent) {
- if (this.dragging) {
- var d = inEvent.dx;
- if (Math.abs(d) > 10) {
- this.updateValue(d > 0);
- this.dragged = true;
- }
- return true;
- }
- },
- dragfinish: function(inSender, inEvent) {
- this.dragging = false;
- if (this.dragged) {
- inEvent.preventTap();
- }
- }
- })
|