Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / polymer / components / paper-toggle-button / paper-toggle-button.html
1 <!--
2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
3 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
5 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
6 Code distributed by Google as part of the polymer project is also
7 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
8 -->
9
10 <!--
11 `paper-toggle-button` provides a ON/OFF switch that user can toggle the state
12 by tapping or by dragging the swtich.
13
14 Example:
15
16     <paper-toggle-button></paper-toggle-button>
17
18 Styling toggle button:
19
20 To change the ink color for checked state:
21
22     paper-toggle-button::shadow paper-radio-button::shadow #ink[checked] {
23       color: #4285f4;
24     }
25     
26 To change the radio checked color:
27     
28     paper-toggle-button::shadow paper-radio-button::shadow #onRadio {
29       background-color: #4285f4;
30     }
31     
32 To change the bar color for checked state:
33
34     paper-toggle-button::shadow #toggleBar[checked] {
35       background-color: #4285f4;
36     }
37     
38 To change the ink color for unchecked state:
39
40     paper-toggle-button::shadow paper-radio-button::shadow #ink {
41       color: #b5b5b5;
42     }
43     
44 To change the radio unchecked color:
45     
46     paper-toggle-button::shadow paper-radio-button::shadow #offRadio {
47       border-color: #b5b5b5;
48     }
49
50 To change the bar color for unchecked state:
51
52     paper-toggle-button::shadow #toggleBar {
53       background-color: red;
54     }
55
56 @group Paper Elements
57 @element paper-toggle-button
58 @homepage github.io
59 -->
60
61 <link rel="import" href="../paper-radio-button/paper-radio-button.html">
62
63 <polymer-element name="paper-toggle-button" attributes="checked" role="button" aria-pressed="false" tabindex="0">
64 <template>
65
66   <link rel="stylesheet" href="paper-toggle-button.css">
67
68   <div id="toggleContainer">
69   
70     <div id="toggleBar" checked?="{{checked}}"></div>
71   
72     <paper-radio-button id="toggleRadio" toggles checked="{{checked}}"
73         on-trackstart="{{trackStart}}" on-trackx="{{trackx}}" on-trackend="{{trackEnd}}"></paper-radio-button>
74     
75   </div>
76
77 </template>
78 <script>
79
80   Polymer('paper-toggle-button', {
81     
82     /**
83      * Fired when the checked state changes.
84      *
85      * @event change
86      */
87
88     /**
89      * Gets or sets the state, `true` is checked and `false` is unchecked.
90      *
91      * @attribute checked
92      * @type boolean
93      * @default false
94      */
95     checked: false,
96
97     trackStart: function(e) {
98       this._w = this.$.toggleBar.offsetLeft + this.$.toggleBar.offsetWidth;
99       e.preventTap();
100     },
101
102     trackx: function(e) {
103       this._x = Math.min(this._w, 
104           Math.max(0, this.checked ? this._w + e.dx : e.dx));
105       this.$.toggleRadio.classList.add('dragging');
106       var s =  this.$.toggleRadio.style;
107       s.webkitTransform = s.transform = 'translate3d(' + this._x + 'px,0,0)';
108     },
109
110     trackEnd: function() {
111       var s =  this.$.toggleRadio.style;
112       s.webkitTransform = s.transform = null;
113       this.$.toggleRadio.classList.remove('dragging');
114       this.checked = Math.abs(this._x) > this._w / 2;
115     },
116
117     checkedChanged: function() {
118       this.setAttribute('aria-pressed', Boolean(this.checked));
119       this.fire('change');
120     }
121
122   });
123
124 </script>
125 </polymer-element>