From a3024011a91d3941f81481dd4d600e9684eb0fd4 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Thu, 2 Feb 2012 00:11:51 -0800 Subject: upgrading to Montage v0.6 Signed-off-by: Valerio Virgillito --- .../montage/ui/toggle-button.reel/toggle-button.js | 171 +++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 node_modules/montage/ui/toggle-button.reel/toggle-button.js (limited to 'node_modules/montage/ui/toggle-button.reel') diff --git a/node_modules/montage/ui/toggle-button.reel/toggle-button.js b/node_modules/montage/ui/toggle-button.reel/toggle-button.js new file mode 100644 index 00000000..f8f3c0fa --- /dev/null +++ b/node_modules/montage/ui/toggle-button.reel/toggle-button.js @@ -0,0 +1,171 @@ +/* + This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ +var Montage = require("montage").Montage, + Component = require("ui/component").Component, + Button = require("ui/button.reel/button").Button; +/** + * The Text input + */ +var ToggleButton = exports.ToggleButton = Montage.create(Button, { + _pressed: { + enumerable: false, + value: false + }, + /** + Whether the toggle button is down/pressed or not. + @type {Property} + @default {Boolean} false + */ + pressed: { + get: function() { + return this._pressed; + }, + set: function(value) { + this._pressed = !!value; + this._label = (this._pressed) ? this._pressedLabel : this._unpressedLabel; + this.needsDraw = true; + } + }, + + _unpressedLabel: { + enumerable: false, + value: null + }, + /** + The value the button should take when it is in the unpressed state. If + this is not set at initialization it will be set to the `value` of the + button. + @type {Property} + @default {String} null + */ + unpressedLabel: { + get: function() { + return this._unpressedLabel; + }, + set: function(value) { + this._unpressedLabel = value; + if (!this._pressed) { + this.label = this._unpressedLabel; + this.needsDraw = true; + } + } + }, + + _pressedLabel: { + enumerable: false, + value: null + }, + /** + The value the button should take when it is in the pressed state. If + this is not set at initialization it will be set to the `value` of the + button. + @type {Property} + @default {String} null + */ + pressedLabel: { + get: function() { + return this._pressedLabel; + }, + set: function(value) { + this._pressedLabel = value; + if (this._pressed) { + this.label = this._pressedLabel; + this.needsDraw = true; + } + } + }, + + _pressedClass: { + enumerable: false, + value: "pressed" + }, + /** + The class that should be added to the element when the button is in + the pressed state. It is removed when the button is unpressed. + @type {Property} + @default {String} "pressed" + */ + pressedClass: { + get: function() { + return this._pressedClass; + }, + set: function(value) { + this._pressedClass = value; + if (this._pressed) { + this.needsDraw = true; + } + } + }, + + /** + The current value of the button. It will be set to unpressedLabel or + pressedLabel depending on state. + + Setting this property equal to unpressedLabel or pressedLabel will + change the pressed state of the button to `false` and `true` respectively. + @type {Property} + @default {String} null, or the value of the element + */ + label: { + get: function() { + return Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ToggleButton),"label").get.call(this); + }, + set: function(value) { + // Call super + Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ToggleButton),"label").set.call(this, value); + if (this._pressed === true && this._label === this._unpressedLabel) { + this.pressed = false; + } else if (this._pressed === false && this._label === this._pressedLabel) { + this.pressed = true; + } + } + }, + + deserializedFromTemplate: { + value: function() { + Object.getPrototypeOf(ToggleButton).deserializedFromTemplate.call(this); + + // If we haven't set the (un)pressedLabel of the initial state, + // then take it from the label + if (this._unpressedLabel === null && this._label !== null) { + this._unpressedLabel = this._label; + } + if (this._pressedLabel === null && this._label !== null) { + this._pressedLabel = this._label; + } + } + }, + + draw: { + value: function() { + Object.getPrototypeOf(ToggleButton).draw.call(this); + if (this._pressed) { + this._element.classList.add(this._pressedClass); + this._element.setAttribute("aria-pressed", true); + } else { + this._element.classList.remove(this._pressedClass); + this._element.setAttribute("aria-pressed", false); + } + } + }, + + _dispatchActionEvent: { + value: function() { + this.pressed = !this._pressed; + Object.getPrototypeOf(ToggleButton)._dispatchActionEvent.call(this); + } + }, + + /** + Change the button to the inverse of its current state. + @type {Function} + */ + toggle: { + value: function() { + this.pressed = !this._pressed; + } + } +}); -- cgit v1.2.3