2 * Copyright (c) 2013, Ford Motor Company All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 * · Redistributions of source code must retain the above copyright notice,
7 * this list of conditions and the following disclaimer.
8 * · Redistributions in binary form must reproduce the above copyright notice,
9 * this list of conditions and the following disclaimer in the documentation
10 * and/or other materials provided with the distribution.
11 * · Neither the name of the Ford Motor Company nor the names of its
12 * contributors may be used to endorse or promote products derived from this
13 * software without specific prior written permission.
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
29 * @desc Universal button component for SDL application
31 * @filesource app/controlls/Button.js
35 SDL.Button = Em.View.extend( Ember.TargetActionSupport, {
49 /** Pressed state binding */
52 /** Disable actions on button */
55 /** Button icon class */
63 target: this.target ? this.target : this,
68 /** Button timer flag */
72 /** Touch leave event flag */
81 actionDown: function( event ) {
82 if( this.get( 'disabled' ) ){
88 this.set( 'pressed', true );
89 /** Set Mouse Leave Event Flag to false */
90 this.set( 'mouseleave', false );
93 // Default trigger action
98 // Call trigger with timeout
100 this.timerId = setInterval( function() {
101 self.triggerAction();
106 actionUp: function( event ) {
107 this.set( 'pressed', false );
110 clearInterval( this.timerId );
113 if( this.get( 'disabled' ) ){
114 if( this.touchleave == true ){
115 this.set( 'touchleave', false );
121 this.triggerAction();
125 /** Only for desktop */
126 mouseLeave: function( event ) {
127 this.set( 'pressed', false );
130 clearInterval( this.timerId );
135 * Only for IOS Simulation of mouseleave event for touch
136 * devices If target element looses focus during touch move
137 * event events dont trigger
139 touchMove: function( event ) {
140 /** Set Mouse Leave Event Flag to true */
141 this.set( 'touchleave', this.targetElement !== document.elementFromPoint( event.originalEvent.touches[0].pageX, event.originalEvent.touches[0].pageY ) );
144 // component default template
145 defaultTemplate: Em.Handlebars.compile( '<img class="ico" {{bindAttr src="view.icon"}} />' + '<span>{{view.text}}</span>' ),
148 text: Em.Handlebars.compile( '<span>{{view.text}}</span>' ),
150 icon: Em.Handlebars.compile( '<img class="ico" {{bindAttr src="view.icon"}} />' ),
152 rightText: Em.Handlebars.compile( '<img class="ico" {{bindAttr src="view.icon"}} />' + '<span>{{view.text}}</span>'
153 + '<span class="right_text">{{view.rightText}}</span>' ),
155 arrow: Em.Handlebars.compile( '<img class="ico" {{bindAttr src="view.icon"}} />' + '<span>{{view.text}}</span>'
156 + '<img class="arrow-ico" src="images/common/arrow_ico.png" />' ),
158 rightIcon: Em.Handlebars.compile( '<img class="ico" {{bindAttr src="view.icon"}} />' + '<span>{{view.text}}</span>'
159 + '<img class="right_ico" {{bindAttr src="view.righticon"}} />' )