polymer-paper-elements-rails 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +51 -0
- data/Rakefile +1 -0
- data/app/assets/components/iron-a11y-announcer/iron-a11y-announcer.html +125 -0
- data/app/assets/components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html +418 -0
- data/app/assets/components/iron-autogrow-textarea/hero.svg +33 -0
- data/app/assets/components/iron-autogrow-textarea/iron-autogrow-textarea.html +263 -0
- data/app/assets/components/iron-behaviors/iron-button-state.html +195 -0
- data/app/assets/components/iron-behaviors/iron-control-state.html +102 -0
- data/app/assets/components/iron-fit-behavior/iron-fit-behavior.html +230 -0
- data/app/assets/components/iron-flex-layout/classes/iron-flex-layout.html +307 -0
- data/app/assets/components/iron-flex-layout/classes/iron-shadow-flex-layout.html +302 -0
- data/app/assets/components/iron-flex-layout/iron-flex-layout.html +313 -0
- data/app/assets/components/iron-form-element-behavior/iron-form-element-behavior.html +50 -0
- data/app/assets/components/iron-icon/hero.svg +19 -0
- data/app/assets/components/iron-icon/iron-icon.html +187 -0
- data/app/assets/components/iron-icons/av-icons.html +73 -0
- data/app/assets/components/iron-icons/communication-icons.html +59 -0
- data/app/assets/components/iron-icons/device-icons.html +94 -0
- data/app/assets/components/iron-icons/editor-icons.html +70 -0
- data/app/assets/components/iron-icons/hardware-icons.html +61 -0
- data/app/assets/components/iron-icons/hero.svg +35 -0
- data/app/assets/components/iron-icons/image-icons.html +164 -0
- data/app/assets/components/iron-icons/iron-icons.html +303 -0
- data/app/assets/components/iron-icons/maps-icons.html +71 -0
- data/app/assets/components/iron-icons/notification-icons.html +62 -0
- data/app/assets/components/iron-icons/social-icons.html +40 -0
- data/app/assets/components/iron-iconset-svg/iron-iconset-svg.html +191 -0
- data/app/assets/components/iron-input/hero.svg +19 -0
- data/app/assets/components/iron-input/iron-input.html +235 -0
- data/app/assets/components/iron-media-query/hero.svg +29 -0
- data/app/assets/components/iron-media-query/iron-media-query.html +84 -0
- data/app/assets/components/iron-menu-behavior/iron-menu-behavior.html +214 -0
- data/app/assets/components/iron-menu-behavior/iron-menubar-behavior.html +65 -0
- data/app/assets/components/iron-meta/hero.svg +33 -0
- data/app/assets/components/iron-meta/iron-meta.html +352 -0
- data/app/assets/components/iron-overlay-behavior/iron-overlay-backdrop.html +132 -0
- data/app/assets/components/iron-overlay-behavior/iron-overlay-behavior.html +432 -0
- data/app/assets/components/iron-overlay-behavior/iron-overlay-manager.html +107 -0
- data/app/assets/components/iron-range-behavior/iron-range-behavior.html +101 -0
- data/app/assets/components/iron-resizable-behavior/iron-resizable-behavior.html +139 -0
- data/app/assets/components/iron-selector/iron-multi-selectable.html +120 -0
- data/app/assets/components/iron-selector/iron-selectable.html +307 -0
- data/app/assets/components/iron-selector/iron-selection.html +115 -0
- data/app/assets/components/iron-selector/iron-selector.html +71 -0
- data/app/assets/components/iron-validatable-behavior/iron-validatable-behavior.html +100 -0
- data/app/assets/components/neon-animation/animations/cascaded-animation.html +84 -0
- data/app/assets/components/neon-animation/animations/fade-in-animation.html +49 -0
- data/app/assets/components/neon-animation/animations/fade-out-animation.html +49 -0
- data/app/assets/components/neon-animation/animations/hero-animation.html +83 -0
- data/app/assets/components/neon-animation/animations/opaque-animation.html +46 -0
- data/app/assets/components/neon-animation/animations/ripple-animation.html +92 -0
- data/app/assets/components/neon-animation/animations/scale-down-animation.html +65 -0
- data/app/assets/components/neon-animation/animations/scale-up-animation.html +58 -0
- data/app/assets/components/neon-animation/animations/slide-down-animation.html +59 -0
- data/app/assets/components/neon-animation/animations/slide-from-left-animation.html +60 -0
- data/app/assets/components/neon-animation/animations/slide-from-right-animation.html +60 -0
- data/app/assets/components/neon-animation/animations/slide-left-animation.html +59 -0
- data/app/assets/components/neon-animation/animations/slide-right-animation.html +59 -0
- data/app/assets/components/neon-animation/animations/slide-up-animation.html +59 -0
- data/app/assets/components/neon-animation/animations/transform-animation.html +61 -0
- data/app/assets/components/neon-animation/guides/neon-animation.md +313 -0
- data/app/assets/components/neon-animation/neon-animatable-behavior.html +156 -0
- data/app/assets/components/neon-animation/neon-animatable.html +54 -0
- data/app/assets/components/neon-animation/neon-animated-pages.html +208 -0
- data/app/assets/components/neon-animation/neon-animation-behavior.html +88 -0
- data/app/assets/components/neon-animation/neon-animation-runner-behavior.html +110 -0
- data/app/assets/components/neon-animation/neon-animation.html +17 -0
- data/app/assets/components/neon-animation/neon-animations.html +25 -0
- data/app/assets/components/neon-animation/neon-shared-element-animatable-behavior.html +37 -0
- data/app/assets/components/neon-animation/neon-shared-element-animation-behavior.html +66 -0
- data/app/assets/components/neon-animation/web-animations.html +11 -0
- data/app/assets/components/paper-behaviors/paper-button-behavior.html +55 -0
- data/app/assets/components/paper-behaviors/paper-inky-focus-behavior.html +44 -0
- data/app/assets/components/paper-button/paper-button.html +177 -0
- data/app/assets/components/paper-checkbox/metadata.html +17 -0
- data/app/assets/components/paper-checkbox/paper-checkbox.css +149 -0
- data/app/assets/components/paper-checkbox/paper-checkbox.html +163 -0
- data/app/assets/components/paper-dialog-behavior/hero.svg +51 -0
- data/app/assets/components/paper-dialog-behavior/paper-dialog-behavior.html +236 -0
- data/app/assets/components/paper-dialog-behavior/paper-dialog-common.css +58 -0
- data/app/assets/components/paper-dialog-scrollable/hero.svg +69 -0
- data/app/assets/components/paper-dialog-scrollable/paper-dialog-scrollable.html +150 -0
- data/app/assets/components/paper-dialog/hero.svg +58 -0
- data/app/assets/components/paper-dialog/paper-dialog.html +122 -0
- data/app/assets/components/paper-drawer-panel/hero.svg +21 -0
- data/app/assets/components/paper-drawer-panel/paper-drawer-panel.css +142 -0
- data/app/assets/components/paper-drawer-panel/paper-drawer-panel.html +585 -0
- data/app/assets/components/paper-fab/paper-fab.html +159 -0
- data/app/assets/components/paper-header-panel/hero.svg +38 -0
- data/app/assets/components/paper-header-panel/paper-header-panel.html +496 -0
- data/app/assets/components/paper-icon-button/paper-icon-button.html +141 -0
- data/app/assets/components/paper-input/all-imports.html +12 -0
- data/app/assets/components/paper-input/hero.svg +19 -0
- data/app/assets/components/paper-input/paper-input-addon-behavior.html +43 -0
- data/app/assets/components/paper-input/paper-input-behavior.html +293 -0
- data/app/assets/components/paper-input/paper-input-char-counter.html +95 -0
- data/app/assets/components/paper-input/paper-input-container.html +495 -0
- data/app/assets/components/paper-input/paper-input-error.html +99 -0
- data/app/assets/components/paper-input/paper-input.html +126 -0
- data/app/assets/components/paper-input/paper-textarea.html +100 -0
- data/app/assets/components/paper-item/all-imports.html +13 -0
- data/app/assets/components/paper-item/paper-icon-item.html +86 -0
- data/app/assets/components/paper-item/paper-item-body.html +93 -0
- data/app/assets/components/paper-item/paper-item-shared.css +19 -0
- data/app/assets/components/paper-item/paper-item.html +95 -0
- data/app/assets/components/paper-material/paper-material.html +98 -0
- data/app/assets/components/paper-menu/hero.svg +35 -0
- data/app/assets/components/paper-menu/paper-menu.html +133 -0
- data/app/assets/components/paper-progress/hero.svg +21 -0
- data/app/assets/components/paper-progress/paper-progress.html +199 -0
- data/app/assets/components/paper-radio-button/hero.svg +22 -0
- data/app/assets/components/paper-radio-button/paper-radio-button.css +109 -0
- data/app/assets/components/paper-radio-button/paper-radio-button.html +148 -0
- data/app/assets/components/paper-radio-group/hero.svg +25 -0
- data/app/assets/components/paper-radio-group/paper-radio-group.html +186 -0
- data/app/assets/components/paper-ripple/hero.svg +30 -0
- data/app/assets/components/paper-ripple/paper-ripple.html +714 -0
- data/app/assets/components/paper-scroll-header-panel/hero.svg +41 -0
- data/app/assets/components/paper-scroll-header-panel/paper-scroll-header-panel.html +455 -0
- data/app/assets/components/paper-slider/hero.svg +20 -0
- data/app/assets/components/paper-slider/paper-slider.css +252 -0
- data/app/assets/components/paper-slider/paper-slider.html +449 -0
- data/app/assets/components/paper-spinner/hero.svg +27 -0
- data/app/assets/components/paper-spinner/paper-spinner.css +325 -0
- data/app/assets/components/paper-spinner/paper-spinner.html +222 -0
- data/app/assets/components/paper-styles/classes/global.html +96 -0
- data/app/assets/components/paper-styles/classes/shadow-layout.html +302 -0
- data/app/assets/components/paper-styles/classes/shadow.html +39 -0
- data/app/assets/components/paper-styles/classes/typography.html +171 -0
- data/app/assets/components/paper-styles/color.html +333 -0
- data/app/assets/components/paper-styles/default-theme.html +39 -0
- data/app/assets/components/paper-styles/paper-styles-classes.html +14 -0
- data/app/assets/components/paper-styles/paper-styles.html +17 -0
- data/app/assets/components/paper-styles/shadow.html +61 -0
- data/app/assets/components/paper-styles/typography.html +240 -0
- data/app/assets/components/paper-tabs/hero.svg +23 -0
- data/app/assets/components/paper-tabs/paper-tab.html +158 -0
- data/app/assets/components/paper-tabs/paper-tabs-icons.html +18 -0
- data/app/assets/components/paper-tabs/paper-tabs.html +483 -0
- data/app/assets/components/paper-toast/hero.svg +20 -0
- data/app/assets/components/paper-toast/paper-toast.html +164 -0
- data/app/assets/components/paper-toggle-button/hero.svg +22 -0
- data/app/assets/components/paper-toggle-button/paper-toggle-button.css +108 -0
- data/app/assets/components/paper-toggle-button/paper-toggle-button.html +183 -0
- data/app/assets/components/paper-toolbar/paper-toolbar.html +375 -0
- data/app/assets/components/polymer-gestures/Gruntfile.js +60 -0
- data/app/assets/components/polymer-gestures/banner.txt +9 -0
- data/app/assets/components/polymer-gestures/build.json +17 -0
- data/app/assets/components/polymer-gestures/conf/karma.conf.js +39 -0
- data/app/assets/components/polymer-gestures/package.json +20 -0
- data/app/assets/components/polymer-gestures/polymer-gestures.html +21 -0
- data/app/assets/components/polymer-gestures/polymer-gestures.js +46 -0
- data/app/assets/components/polymer-gestures/src/dispatcher.js +474 -0
- data/app/assets/components/polymer-gestures/src/eventFactory.js +127 -0
- data/app/assets/components/polymer-gestures/src/hold.js +129 -0
- data/app/assets/components/polymer-gestures/src/mouse.js +135 -0
- data/app/assets/components/polymer-gestures/src/ms.js +80 -0
- data/app/assets/components/polymer-gestures/src/pinch.js +186 -0
- data/app/assets/components/polymer-gestures/src/platform-events.js +39 -0
- data/app/assets/components/polymer-gestures/src/pointer.js +68 -0
- data/app/assets/components/polymer-gestures/src/pointermap.js +67 -0
- data/app/assets/components/polymer-gestures/src/scope.js +10 -0
- data/app/assets/components/polymer-gestures/src/tap.js +103 -0
- data/app/assets/components/polymer-gestures/src/targetfind.js +244 -0
- data/app/assets/components/polymer-gestures/src/touch-action.js +60 -0
- data/app/assets/components/polymer-gestures/src/touch.js +341 -0
- data/app/assets/components/polymer-gestures/src/track.js +230 -0
- data/app/assets/components/web-animations-js/web-animations-next-lite.min.js +17 -0
- data/app/assets/components/web-animations-js/web-animations-next.min.js +17 -0
- data/app/assets/components/web-animations-js/web-animations.min.js +17 -0
- data/app/assets/components/webcomponentsjs/CustomElements.js +956 -0
- data/app/assets/components/webcomponentsjs/CustomElements.min.js +11 -0
- data/app/assets/components/webcomponentsjs/HTMLImports.js +1078 -0
- data/app/assets/components/webcomponentsjs/HTMLImports.min.js +11 -0
- data/app/assets/components/webcomponentsjs/MutationObserver.js +344 -0
- data/app/assets/components/webcomponentsjs/MutationObserver.min.js +11 -0
- data/app/assets/components/webcomponentsjs/ShadowDOM.js +4414 -0
- data/app/assets/components/webcomponentsjs/ShadowDOM.min.js +15 -0
- data/app/assets/components/webcomponentsjs/package.json +31 -0
- data/app/assets/components/webcomponentsjs/webcomponents-lite.js +2300 -0
- data/app/assets/components/webcomponentsjs/webcomponents-lite.min.js +13 -0
- data/app/assets/components/webcomponentsjs/webcomponents.js +7112 -0
- data/app/assets/components/webcomponentsjs/webcomponents.min.js +15 -0
- data/lib/polymer-paper-elements-rails.rb +2 -0
- data/lib/polymer-paper-elements-rails/engine.rb +4 -0
- data/lib/polymer-paper-elements-rails/version.rb +3 -0
- metadata +272 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2015 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
|
+
<link rel="import" href="../polymer/polymer.html">
|
|
11
|
+
<link rel="import" href="iron-selection.html">
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
|
|
15
|
+
/** @polymerBehavior */
|
|
16
|
+
Polymer.IronSelectableBehavior = {
|
|
17
|
+
|
|
18
|
+
properties: {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* If you want to use the attribute value of an element for `selected` instead of the index,
|
|
22
|
+
* set this to the name of the attribute.
|
|
23
|
+
*
|
|
24
|
+
* @attribute attrForSelected
|
|
25
|
+
* @type {string}
|
|
26
|
+
*/
|
|
27
|
+
attrForSelected: {
|
|
28
|
+
type: String,
|
|
29
|
+
value: null
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Gets or sets the selected element. The default is to use the index of the item.
|
|
34
|
+
*
|
|
35
|
+
* @attribute selected
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
38
|
+
selected: {
|
|
39
|
+
type: String,
|
|
40
|
+
notify: true
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Returns the currently selected item.
|
|
45
|
+
*
|
|
46
|
+
* @attribute selectedItem
|
|
47
|
+
* @type {Object}
|
|
48
|
+
*/
|
|
49
|
+
selectedItem: {
|
|
50
|
+
type: Object,
|
|
51
|
+
readOnly: true,
|
|
52
|
+
notify: true
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The event that fires from items when they are selected. Selectable
|
|
57
|
+
* will listen for this event from items and update the selection state.
|
|
58
|
+
* Set to empty string to listen to no events.
|
|
59
|
+
*
|
|
60
|
+
* @attribute activateEvent
|
|
61
|
+
* @type {string}
|
|
62
|
+
* @default 'tap'
|
|
63
|
+
*/
|
|
64
|
+
activateEvent: {
|
|
65
|
+
type: String,
|
|
66
|
+
value: 'tap',
|
|
67
|
+
observer: '_activateEventChanged'
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* This is a CSS selector sting. If this is set, only items that matches the CSS selector
|
|
72
|
+
* are selectable.
|
|
73
|
+
*
|
|
74
|
+
* @attribute selectable
|
|
75
|
+
* @type {string}
|
|
76
|
+
*/
|
|
77
|
+
selectable: String,
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The class to set on elements when selected.
|
|
81
|
+
*
|
|
82
|
+
* @attribute selectedClass
|
|
83
|
+
* @type {string}
|
|
84
|
+
*/
|
|
85
|
+
selectedClass: {
|
|
86
|
+
type: String,
|
|
87
|
+
value: 'iron-selected'
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The attribute to set on elements when selected.
|
|
92
|
+
*
|
|
93
|
+
* @attribute selectedAttribute
|
|
94
|
+
* @type {string}
|
|
95
|
+
*/
|
|
96
|
+
selectedAttribute: {
|
|
97
|
+
type: String,
|
|
98
|
+
value: null
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
observers: [
|
|
104
|
+
'_updateSelected(attrForSelected, selected)'
|
|
105
|
+
],
|
|
106
|
+
|
|
107
|
+
excludedLocalNames: {
|
|
108
|
+
'template': 1
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
created: function() {
|
|
112
|
+
this._bindFilterItem = this._filterItem.bind(this);
|
|
113
|
+
this._selection = new Polymer.IronSelection(this._applySelection.bind(this));
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
attached: function() {
|
|
117
|
+
this._observer = this._observeItems(this);
|
|
118
|
+
this._contentObserver = this._observeContent(this);
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
detached: function() {
|
|
122
|
+
if (this._observer) {
|
|
123
|
+
this._observer.disconnect();
|
|
124
|
+
}
|
|
125
|
+
if (this._contentObserver) {
|
|
126
|
+
this._contentObserver.disconnect();
|
|
127
|
+
}
|
|
128
|
+
this._removeListener(this.activateEvent);
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Returns an array of selectable items.
|
|
133
|
+
*
|
|
134
|
+
* @property items
|
|
135
|
+
* @type Array
|
|
136
|
+
*/
|
|
137
|
+
get items() {
|
|
138
|
+
var nodes = Polymer.dom(this).queryDistributedElements(this.selectable || '*');
|
|
139
|
+
return Array.prototype.filter.call(nodes, this._bindFilterItem);
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Returns the index of the given item.
|
|
144
|
+
*
|
|
145
|
+
* @method indexOf
|
|
146
|
+
* @param {Object} item
|
|
147
|
+
* @returns Returns the index of the item
|
|
148
|
+
*/
|
|
149
|
+
indexOf: function(item) {
|
|
150
|
+
return this.items.indexOf(item);
|
|
151
|
+
},
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Selects the given value.
|
|
155
|
+
*
|
|
156
|
+
* @method select
|
|
157
|
+
* @param {string} value the value to select.
|
|
158
|
+
*/
|
|
159
|
+
select: function(value) {
|
|
160
|
+
this.selected = value;
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Selects the previous item.
|
|
165
|
+
*
|
|
166
|
+
* @method selectPrevious
|
|
167
|
+
*/
|
|
168
|
+
selectPrevious: function() {
|
|
169
|
+
var length = this.items.length;
|
|
170
|
+
var index = (Number(this._valueToIndex(this.selected)) - 1 + length) % length;
|
|
171
|
+
this.selected = this._indexToValue(index);
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Selects the next item.
|
|
176
|
+
*
|
|
177
|
+
* @method selectNext
|
|
178
|
+
*/
|
|
179
|
+
selectNext: function() {
|
|
180
|
+
var index = (Number(this._valueToIndex(this.selected)) + 1) % this.items.length;
|
|
181
|
+
this.selected = this._indexToValue(index);
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
_addListener: function(eventName) {
|
|
185
|
+
this.listen(this, eventName, '_activateHandler');
|
|
186
|
+
},
|
|
187
|
+
|
|
188
|
+
_removeListener: function(eventName) {
|
|
189
|
+
// There is no unlisten yet...
|
|
190
|
+
// https://github.com/Polymer/polymer/issues/1639
|
|
191
|
+
//this.removeEventListener(eventName, this._bindActivateHandler);
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
_activateEventChanged: function(eventName, old) {
|
|
195
|
+
this._removeListener(old);
|
|
196
|
+
this._addListener(eventName);
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
_updateSelected: function() {
|
|
200
|
+
this._selectSelected(this.selected);
|
|
201
|
+
},
|
|
202
|
+
|
|
203
|
+
_selectSelected: function(selected) {
|
|
204
|
+
this._selection.select(this._valueToItem(this.selected));
|
|
205
|
+
},
|
|
206
|
+
|
|
207
|
+
_filterItem: function(node) {
|
|
208
|
+
return !this.excludedLocalNames[node.localName];
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
_valueToItem: function(value) {
|
|
212
|
+
return (value == null) ? null : this.items[this._valueToIndex(value)];
|
|
213
|
+
},
|
|
214
|
+
|
|
215
|
+
_valueToIndex: function(value) {
|
|
216
|
+
if (this.attrForSelected) {
|
|
217
|
+
for (var i = 0, item; item = this.items[i]; i++) {
|
|
218
|
+
if (this._valueForItem(item) == value) {
|
|
219
|
+
return i;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
} else {
|
|
223
|
+
return Number(value);
|
|
224
|
+
}
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
_indexToValue: function(index) {
|
|
228
|
+
if (this.attrForSelected) {
|
|
229
|
+
var item = this.items[index];
|
|
230
|
+
if (item) {
|
|
231
|
+
return this._valueForItem(item);
|
|
232
|
+
}
|
|
233
|
+
} else {
|
|
234
|
+
return index;
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
_valueForItem: function(item) {
|
|
239
|
+
return item[this.attrForSelected] || item.getAttribute(this.attrForSelected);
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
_applySelection: function(item, isSelected) {
|
|
243
|
+
if (this.selectedClass) {
|
|
244
|
+
this.toggleClass(this.selectedClass, isSelected, item);
|
|
245
|
+
}
|
|
246
|
+
if (this.selectedAttribute) {
|
|
247
|
+
this.toggleAttribute(this.selectedAttribute, isSelected, item);
|
|
248
|
+
}
|
|
249
|
+
this._selectionChange();
|
|
250
|
+
this.fire('iron-' + (isSelected ? 'select' : 'deselect'), {item: item});
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
_selectionChange: function() {
|
|
254
|
+
this._setSelectedItem(this._selection.get());
|
|
255
|
+
},
|
|
256
|
+
|
|
257
|
+
// observe content changes under the given node.
|
|
258
|
+
_observeContent: function(node) {
|
|
259
|
+
var content = node.querySelector('content');
|
|
260
|
+
if (content && content.parentElement === node) {
|
|
261
|
+
return this._observeItems(node.domHost);
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
|
|
265
|
+
// observe items change under the given node.
|
|
266
|
+
_observeItems: function(node) {
|
|
267
|
+
var observer = new MutationObserver(function() {
|
|
268
|
+
if (this.selected != null) {
|
|
269
|
+
this._updateSelected();
|
|
270
|
+
}
|
|
271
|
+
}.bind(this));
|
|
272
|
+
observer.observe(node, {
|
|
273
|
+
childList: true,
|
|
274
|
+
subtree: true
|
|
275
|
+
});
|
|
276
|
+
return observer;
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
_activateHandler: function(e) {
|
|
280
|
+
// TODO: remove this when https://github.com/Polymer/polymer/issues/1639 is fixed so we
|
|
281
|
+
// can just remove the old event listener.
|
|
282
|
+
if (e.type !== this.activateEvent) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
var t = e.target;
|
|
286
|
+
var items = this.items;
|
|
287
|
+
while (t && t != this) {
|
|
288
|
+
var i = items.indexOf(t);
|
|
289
|
+
if (i >= 0) {
|
|
290
|
+
var value = this._indexToValue(i);
|
|
291
|
+
this._itemActivate(value, t);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
t = t.parentNode;
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
|
|
298
|
+
_itemActivate: function(value, item) {
|
|
299
|
+
if (!this.fire('iron-activate',
|
|
300
|
+
{selected: value, item: item}, {cancelable: true}).defaultPrevented) {
|
|
301
|
+
this.select(value);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
</script>
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
|
|
2
|
+
<!--
|
|
3
|
+
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
|
4
|
+
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
5
|
+
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
6
|
+
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
7
|
+
Code distributed by Google as part of the polymer project is also
|
|
8
|
+
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
9
|
+
-->
|
|
10
|
+
|
|
11
|
+
<link rel="import" href="../polymer/polymer.html">
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {!Function} selectCallback
|
|
17
|
+
* @constructor
|
|
18
|
+
*/
|
|
19
|
+
Polymer.IronSelection = function(selectCallback) {
|
|
20
|
+
this.selection = [];
|
|
21
|
+
this.selectCallback = selectCallback;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
Polymer.IronSelection.prototype = {
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Retrieves the selected item(s).
|
|
28
|
+
*
|
|
29
|
+
* @method get
|
|
30
|
+
* @returns Returns the selected item(s). If the multi property is true,
|
|
31
|
+
* `get` will return an array, otherwise it will return
|
|
32
|
+
* the selected item or undefined if there is no selection.
|
|
33
|
+
*/
|
|
34
|
+
get: function() {
|
|
35
|
+
return this.multi ? this.selection : this.selection[0];
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Clears all the selection except the ones indicated.
|
|
40
|
+
*
|
|
41
|
+
* @method clear
|
|
42
|
+
* @param {Array} excludes items to be excluded.
|
|
43
|
+
*/
|
|
44
|
+
clear: function(excludes) {
|
|
45
|
+
this.selection.slice().forEach(function(item) {
|
|
46
|
+
if (!excludes || excludes.indexOf(item) < 0) {
|
|
47
|
+
this.setItemSelected(item, false);
|
|
48
|
+
}
|
|
49
|
+
}, this);
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Indicates if a given item is selected.
|
|
54
|
+
*
|
|
55
|
+
* @method isSelected
|
|
56
|
+
* @param {*} item The item whose selection state should be checked.
|
|
57
|
+
* @returns Returns true if `item` is selected.
|
|
58
|
+
*/
|
|
59
|
+
isSelected: function(item) {
|
|
60
|
+
return this.selection.indexOf(item) >= 0;
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Sets the selection state for a given item to either selected or deselected.
|
|
65
|
+
*
|
|
66
|
+
* @method setItemSelected
|
|
67
|
+
* @param {*} item The item to select.
|
|
68
|
+
* @param {boolean} isSelected True for selected, false for deselected.
|
|
69
|
+
*/
|
|
70
|
+
setItemSelected: function(item, isSelected) {
|
|
71
|
+
if (item != null) {
|
|
72
|
+
if (isSelected) {
|
|
73
|
+
this.selection.push(item);
|
|
74
|
+
} else {
|
|
75
|
+
var i = this.selection.indexOf(item);
|
|
76
|
+
if (i >= 0) {
|
|
77
|
+
this.selection.splice(i, 1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (this.selectCallback) {
|
|
81
|
+
this.selectCallback(item, isSelected);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Sets the selection state for a given item. If the `multi` property
|
|
88
|
+
* is true, then the selected state of `item` will be toggled; otherwise
|
|
89
|
+
* the `item` will be selected.
|
|
90
|
+
*
|
|
91
|
+
* @method select
|
|
92
|
+
* @param {*} item The item to select.
|
|
93
|
+
*/
|
|
94
|
+
select: function(item) {
|
|
95
|
+
if (this.multi) {
|
|
96
|
+
this.toggle(item);
|
|
97
|
+
} else if (this.get() !== item) {
|
|
98
|
+
this.setItemSelected(this.get(), false);
|
|
99
|
+
this.setItemSelected(item, true);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Toggles the selection state for `item`.
|
|
105
|
+
*
|
|
106
|
+
* @method toggle
|
|
107
|
+
* @param {*} item The item to toggle.
|
|
108
|
+
*/
|
|
109
|
+
toggle: function(item) {
|
|
110
|
+
this.setItemSelected(item, !this.isSelected(item));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
</script>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2015 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
|
+
<link rel="import" href="../polymer/polymer.html">
|
|
12
|
+
<link rel="import" href="iron-multi-selectable.html">
|
|
13
|
+
|
|
14
|
+
<script>
|
|
15
|
+
/**
|
|
16
|
+
`iron-selector` is an element which can be used to manage a list of elements
|
|
17
|
+
that can be selected. Tapping on the item will make the item selected. The `selected` indicates
|
|
18
|
+
which item is being selected. The default is to use the index of the item.
|
|
19
|
+
|
|
20
|
+
Example:
|
|
21
|
+
|
|
22
|
+
<iron-selector selected="0">
|
|
23
|
+
<div>Item 1</div>
|
|
24
|
+
<div>Item 2</div>
|
|
25
|
+
<div>Item 3</div>
|
|
26
|
+
</iron-selector>
|
|
27
|
+
|
|
28
|
+
If you want to use the attribute value of an element for `selected` instead of the index,
|
|
29
|
+
set `attrForSelected` to the name of the attribute. For example, if you want to select item by
|
|
30
|
+
`name`, set `attrForSelected` to `name`.
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
|
|
34
|
+
<iron-selector attr-for-selected="name" selected="foo">
|
|
35
|
+
<div name="foo">Foo</div>
|
|
36
|
+
<div name="bar">Bar</div>
|
|
37
|
+
<div name="zot">Zot</div>
|
|
38
|
+
</iron-selector>
|
|
39
|
+
|
|
40
|
+
`iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element.
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
|
|
44
|
+
<style>
|
|
45
|
+
.iron-selected {
|
|
46
|
+
background: #eee;
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
49
|
+
|
|
50
|
+
...
|
|
51
|
+
|
|
52
|
+
<iron-selector selected="0">
|
|
53
|
+
<div>Item 1</div>
|
|
54
|
+
<div>Item 2</div>
|
|
55
|
+
<div>Item 3</div>
|
|
56
|
+
</iron-selector>
|
|
57
|
+
|
|
58
|
+
@demo demo/index.html
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
Polymer({
|
|
62
|
+
|
|
63
|
+
is: 'iron-selector',
|
|
64
|
+
|
|
65
|
+
behaviors: [
|
|
66
|
+
Polymer.IronMultiSelectableBehavior
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
</script>
|