/**
|
|
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();
|
|
}
|
|
}
|
|
})
|