polymer-neon-rails 1.0.0.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +39 -0
  3. data/Rakefile +1 -0
  4. data/app/assets/components/iron-flex-layout/README.md +4 -0
  5. data/app/assets/components/iron-flex-layout/bower.json +21 -0
  6. data/app/assets/components/iron-flex-layout/classes/iron-flex-layout.html +307 -0
  7. data/app/assets/components/iron-flex-layout/classes/iron-shadow-flex-layout.html +302 -0
  8. data/app/assets/components/iron-flex-layout/demo/index.html +40 -0
  9. data/app/assets/components/iron-flex-layout/demo/x-app.html +106 -0
  10. data/app/assets/components/iron-flex-layout/iron-flex-layout.html +313 -0
  11. data/app/assets/components/iron-meta/README.md +46 -0
  12. data/app/assets/components/iron-meta/bower.json +28 -0
  13. data/app/assets/components/iron-meta/demo/index.html +45 -0
  14. data/app/assets/components/iron-meta/hero.svg +33 -0
  15. data/app/assets/components/iron-meta/index.html +27 -0
  16. data/app/assets/components/iron-meta/iron-meta.html +352 -0
  17. data/app/assets/components/iron-meta/test/basic.html +48 -0
  18. data/app/assets/components/iron-meta/test/index.html +30 -0
  19. data/app/assets/components/iron-meta/test/iron-meta.html +186 -0
  20. data/app/assets/components/iron-resizable-behavior/README.md +16 -0
  21. data/app/assets/components/iron-resizable-behavior/bower.json +26 -0
  22. data/app/assets/components/iron-resizable-behavior/demo/index.html +29 -0
  23. data/app/assets/components/iron-resizable-behavior/demo/src/x-app.html +114 -0
  24. data/app/assets/components/iron-resizable-behavior/index.html +25 -0
  25. data/app/assets/components/iron-resizable-behavior/iron-resizable-behavior.html +139 -0
  26. data/app/assets/components/iron-resizable-behavior/test/basic.html +263 -0
  27. data/app/assets/components/iron-resizable-behavior/test/index.html +31 -0
  28. data/app/assets/components/iron-resizable-behavior/test/test-elements.html +143 -0
  29. data/app/assets/components/iron-selector/README.md +50 -0
  30. data/app/assets/components/iron-selector/bower.json +31 -0
  31. data/app/assets/components/iron-selector/demo/index.html +66 -0
  32. data/app/assets/components/iron-selector/index.html +28 -0
  33. data/app/assets/components/iron-selector/iron-multi-selectable.html +120 -0
  34. data/app/assets/components/iron-selector/iron-selectable.html +307 -0
  35. data/app/assets/components/iron-selector/iron-selection.html +115 -0
  36. data/app/assets/components/iron-selector/iron-selector.html +71 -0
  37. data/app/assets/components/iron-selector/test/activate-event.html +138 -0
  38. data/app/assets/components/iron-selector/test/basic.html +150 -0
  39. data/app/assets/components/iron-selector/test/content-element.html +43 -0
  40. data/app/assets/components/iron-selector/test/content.html +168 -0
  41. data/app/assets/components/iron-selector/test/index.html +36 -0
  42. data/app/assets/components/iron-selector/test/multi.html +135 -0
  43. data/app/assets/components/iron-selector/test/next-previous.html +134 -0
  44. data/app/assets/components/iron-selector/test/selected-attribute.html +72 -0
  45. data/app/assets/components/iron-selector/test/template-repeat.html +110 -0
  46. data/app/assets/components/neon-animation/README.md +304 -0
  47. data/app/assets/components/neon-animation/animations/cascaded-animation.html +84 -0
  48. data/app/assets/components/neon-animation/animations/fade-in-animation.html +49 -0
  49. data/app/assets/components/neon-animation/animations/fade-out-animation.html +49 -0
  50. data/app/assets/components/neon-animation/animations/hero-animation.html +83 -0
  51. data/app/assets/components/neon-animation/animations/opaque-animation.html +46 -0
  52. data/app/assets/components/neon-animation/animations/ripple-animation.html +92 -0
  53. data/app/assets/components/neon-animation/animations/scale-down-animation.html +65 -0
  54. data/app/assets/components/neon-animation/animations/scale-up-animation.html +58 -0
  55. data/app/assets/components/neon-animation/animations/slide-down-animation.html +59 -0
  56. data/app/assets/components/neon-animation/animations/slide-from-left-animation.html +60 -0
  57. data/app/assets/components/neon-animation/animations/slide-from-right-animation.html +60 -0
  58. data/app/assets/components/neon-animation/animations/slide-left-animation.html +59 -0
  59. data/app/assets/components/neon-animation/animations/slide-right-animation.html +59 -0
  60. data/app/assets/components/neon-animation/animations/slide-up-animation.html +59 -0
  61. data/app/assets/components/neon-animation/animations/transform-animation.html +61 -0
  62. data/app/assets/components/neon-animation/bower.json +51 -0
  63. data/app/assets/components/neon-animation/demo/declarative/index.html +108 -0
  64. data/app/assets/components/neon-animation/demo/doc/basic.html +47 -0
  65. data/app/assets/components/neon-animation/demo/doc/my-animatable.html +73 -0
  66. data/app/assets/components/neon-animation/demo/doc/my-dialog.html +97 -0
  67. data/app/assets/components/neon-animation/demo/doc/types.html +53 -0
  68. data/app/assets/components/neon-animation/demo/dropdown/animated-dropdown.html +97 -0
  69. data/app/assets/components/neon-animation/demo/dropdown/index.html +54 -0
  70. data/app/assets/components/neon-animation/demo/grid/animated-grid.html +166 -0
  71. data/app/assets/components/neon-animation/demo/grid/fullsize-page-with-card.html +124 -0
  72. data/app/assets/components/neon-animation/demo/grid/index.html +70 -0
  73. data/app/assets/components/neon-animation/demo/index.html +6 -0
  74. data/app/assets/components/neon-animation/demo/list/full-view.html +122 -0
  75. data/app/assets/components/neon-animation/demo/list/index.html +29 -0
  76. data/app/assets/components/neon-animation/demo/list/list-demo.html +112 -0
  77. data/app/assets/components/neon-animation/demo/list/list-view.html +127 -0
  78. data/app/assets/components/neon-animation/demo/load/animated-grid.html +147 -0
  79. data/app/assets/components/neon-animation/demo/load/full-page.html +86 -0
  80. data/app/assets/components/neon-animation/demo/load/index.html +45 -0
  81. data/app/assets/components/neon-animation/demo/reprojection/animated-grid.html +166 -0
  82. data/app/assets/components/neon-animation/demo/reprojection/fullsize-page-with-card.html +124 -0
  83. data/app/assets/components/neon-animation/demo/reprojection/index.html +66 -0
  84. data/app/assets/components/neon-animation/demo/reprojection/reprojected-pages.html +42 -0
  85. data/app/assets/components/neon-animation/demo/shared.css +40 -0
  86. data/app/assets/components/neon-animation/demo/tiles/circles-page.html +110 -0
  87. data/app/assets/components/neon-animation/demo/tiles/index.html +77 -0
  88. data/app/assets/components/neon-animation/demo/tiles/squares-page.html +104 -0
  89. data/app/assets/components/neon-animation/guides/neon-animation.md +313 -0
  90. data/app/assets/components/neon-animation/index.html +30 -0
  91. data/app/assets/components/neon-animation/neon-animatable-behavior.html +156 -0
  92. data/app/assets/components/neon-animation/neon-animatable.html +54 -0
  93. data/app/assets/components/neon-animation/neon-animated-pages.html +208 -0
  94. data/app/assets/components/neon-animation/neon-animation-behavior.html +88 -0
  95. data/app/assets/components/neon-animation/neon-animation-runner-behavior.html +110 -0
  96. data/app/assets/components/neon-animation/neon-animation.html +17 -0
  97. data/app/assets/components/neon-animation/neon-animations.html +25 -0
  98. data/app/assets/components/neon-animation/neon-shared-element-animatable-behavior.html +37 -0
  99. data/app/assets/components/neon-animation/neon-shared-element-animation-behavior.html +66 -0
  100. data/app/assets/components/neon-animation/web-animations.html +11 -0
  101. data/app/assets/components/neon-elements/README.md +19 -0
  102. data/app/assets/components/neon-elements/bower.json +26 -0
  103. data/app/assets/components/paper-styles/README.md +3 -0
  104. data/app/assets/components/paper-styles/bower.json +27 -0
  105. data/app/assets/components/paper-styles/classes/global.html +96 -0
  106. data/app/assets/components/paper-styles/classes/shadow-layout.html +302 -0
  107. data/app/assets/components/paper-styles/classes/shadow.html +39 -0
  108. data/app/assets/components/paper-styles/classes/typography.html +171 -0
  109. data/app/assets/components/paper-styles/color.html +333 -0
  110. data/app/assets/components/paper-styles/default-theme.html +39 -0
  111. data/app/assets/components/paper-styles/demo-pages.html +72 -0
  112. data/app/assets/components/paper-styles/demo.css +25 -0
  113. data/app/assets/components/paper-styles/paper-styles-classes.html +14 -0
  114. data/app/assets/components/paper-styles/paper-styles.html +17 -0
  115. data/app/assets/components/paper-styles/shadow.html +61 -0
  116. data/app/assets/components/paper-styles/typography.html +240 -0
  117. data/app/assets/components/polymer/LICENSE.txt +27 -0
  118. data/app/assets/components/polymer/bower.json +26 -0
  119. data/app/assets/components/polymer/build.log +27 -0
  120. data/app/assets/components/polymer/polymer-micro.html +523 -0
  121. data/app/assets/components/polymer/polymer-mini.html +1368 -0
  122. data/app/assets/components/polymer/polymer.html +3768 -0
  123. data/app/assets/components/web-animations-js/COPYING +202 -0
  124. data/app/assets/components/web-animations-js/History.md +108 -0
  125. data/app/assets/components/web-animations-js/README.md +161 -0
  126. data/app/assets/components/web-animations-js/bower.json +31 -0
  127. data/app/assets/components/web-animations-js/web-animations-next-lite.min.js +17 -0
  128. data/app/assets/components/web-animations-js/web-animations-next-lite.min.js.map +1 -0
  129. data/app/assets/components/web-animations-js/web-animations-next.min.js +17 -0
  130. data/app/assets/components/web-animations-js/web-animations-next.min.js.map +1 -0
  131. data/app/assets/components/web-animations-js/web-animations.html +50 -0
  132. data/app/assets/components/web-animations-js/web-animations.min.js +17 -0
  133. data/app/assets/components/web-animations-js/web-animations.min.js.gz +0 -0
  134. data/app/assets/components/web-animations-js/web-animations.min.js.map +1 -0
  135. data/app/assets/components/webcomponentsjs/CustomElements.js +956 -0
  136. data/app/assets/components/webcomponentsjs/CustomElements.min.js +11 -0
  137. data/app/assets/components/webcomponentsjs/HTMLImports.js +1078 -0
  138. data/app/assets/components/webcomponentsjs/HTMLImports.min.js +11 -0
  139. data/app/assets/components/webcomponentsjs/MutationObserver.js +344 -0
  140. data/app/assets/components/webcomponentsjs/MutationObserver.min.js +11 -0
  141. data/app/assets/components/webcomponentsjs/README.md +125 -0
  142. data/app/assets/components/webcomponentsjs/ShadowDOM.js +4414 -0
  143. data/app/assets/components/webcomponentsjs/ShadowDOM.min.js +15 -0
  144. data/app/assets/components/webcomponentsjs/bower.json +14 -0
  145. data/app/assets/components/webcomponentsjs/build.log +33 -0
  146. data/app/assets/components/webcomponentsjs/package.json +31 -0
  147. data/app/assets/components/webcomponentsjs/webcomponents-lite.js +2300 -0
  148. data/app/assets/components/webcomponentsjs/webcomponents-lite.min.js +13 -0
  149. data/app/assets/components/webcomponentsjs/webcomponents.js +7112 -0
  150. data/app/assets/components/webcomponentsjs/webcomponents.min.js +15 -0
  151. data/lib/polymer-neon-rails.rb +2 -0
  152. data/lib/polymer-neon-rails/engine.rb +4 -0
  153. data/lib/polymer-neon-rails/version.rb +3 -0
  154. metadata +264 -0
@@ -0,0 +1,1368 @@
1
+ <!--
2
+ @license
3
+ Copyright (c) 2014 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
+ --><link rel="import" href="polymer-micro.html">
10
+
11
+ <script>Polymer.Base._addFeature({
12
+ _prepTemplate: function () {
13
+ this._template = this._template || Polymer.DomModule.import(this.is, 'template');
14
+ if (!this._template) {
15
+ var script = document._currentScript || document.currentScript;
16
+ var prev = script && script.previousElementSibling;
17
+ if (prev && prev.localName === 'template') {
18
+ this._template = prev;
19
+ }
20
+ }
21
+ if (this._template && this._template.hasAttribute('is')) {
22
+ this._warn(this._logf('_prepTemplate', 'top-level Polymer template ' + 'must not be a type-extension, found', this._template, 'Move inside simple <template>.'));
23
+ }
24
+ },
25
+ _stampTemplate: function () {
26
+ if (this._template) {
27
+ this.root = this.instanceTemplate(this._template);
28
+ }
29
+ },
30
+ instanceTemplate: function (template) {
31
+ var dom = document.importNode(template._content || template.content, true);
32
+ return dom;
33
+ }
34
+ });
35
+ (function () {
36
+ var baseAttachedCallback = Polymer.Base.attachedCallback;
37
+ Polymer.Base._addFeature({
38
+ _hostStack: [],
39
+ ready: function () {
40
+ },
41
+ _pushHost: function (host) {
42
+ this.dataHost = host = host || Polymer.Base._hostStack[Polymer.Base._hostStack.length - 1];
43
+ if (host && host._clients) {
44
+ host._clients.push(this);
45
+ }
46
+ this._beginHost();
47
+ },
48
+ _beginHost: function () {
49
+ Polymer.Base._hostStack.push(this);
50
+ if (!this._clients) {
51
+ this._clients = [];
52
+ }
53
+ },
54
+ _popHost: function () {
55
+ Polymer.Base._hostStack.pop();
56
+ },
57
+ _tryReady: function () {
58
+ if (this._canReady()) {
59
+ this._ready();
60
+ }
61
+ },
62
+ _canReady: function () {
63
+ return !this.dataHost || this.dataHost._clientsReadied;
64
+ },
65
+ _ready: function () {
66
+ this._beforeClientsReady();
67
+ this._setupRoot();
68
+ this._readyClients();
69
+ this._afterClientsReady();
70
+ this._readySelf();
71
+ },
72
+ _readyClients: function () {
73
+ this._beginDistribute();
74
+ var c$ = this._clients;
75
+ for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
76
+ c._ready();
77
+ }
78
+ this._finishDistribute();
79
+ this._clientsReadied = true;
80
+ this._clients = null;
81
+ },
82
+ _readySelf: function () {
83
+ this._doBehavior('ready');
84
+ this._readied = true;
85
+ if (this._attachedPending) {
86
+ this._attachedPending = false;
87
+ this.attachedCallback();
88
+ }
89
+ },
90
+ _beforeClientsReady: function () {
91
+ },
92
+ _afterClientsReady: function () {
93
+ },
94
+ _beforeAttached: function () {
95
+ },
96
+ attachedCallback: function () {
97
+ if (this._readied) {
98
+ this._beforeAttached();
99
+ baseAttachedCallback.call(this);
100
+ } else {
101
+ this._attachedPending = true;
102
+ }
103
+ }
104
+ });
105
+ }());
106
+ Polymer.ArraySplice = function () {
107
+ function newSplice(index, removed, addedCount) {
108
+ return {
109
+ index: index,
110
+ removed: removed,
111
+ addedCount: addedCount
112
+ };
113
+ }
114
+ var EDIT_LEAVE = 0;
115
+ var EDIT_UPDATE = 1;
116
+ var EDIT_ADD = 2;
117
+ var EDIT_DELETE = 3;
118
+ function ArraySplice() {
119
+ }
120
+ ArraySplice.prototype = {
121
+ calcEditDistances: function (current, currentStart, currentEnd, old, oldStart, oldEnd) {
122
+ var rowCount = oldEnd - oldStart + 1;
123
+ var columnCount = currentEnd - currentStart + 1;
124
+ var distances = new Array(rowCount);
125
+ for (var i = 0; i < rowCount; i++) {
126
+ distances[i] = new Array(columnCount);
127
+ distances[i][0] = i;
128
+ }
129
+ for (var j = 0; j < columnCount; j++)
130
+ distances[0][j] = j;
131
+ for (var i = 1; i < rowCount; i++) {
132
+ for (var j = 1; j < columnCount; j++) {
133
+ if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1]))
134
+ distances[i][j] = distances[i - 1][j - 1];
135
+ else {
136
+ var north = distances[i - 1][j] + 1;
137
+ var west = distances[i][j - 1] + 1;
138
+ distances[i][j] = north < west ? north : west;
139
+ }
140
+ }
141
+ }
142
+ return distances;
143
+ },
144
+ spliceOperationsFromEditDistances: function (distances) {
145
+ var i = distances.length - 1;
146
+ var j = distances[0].length - 1;
147
+ var current = distances[i][j];
148
+ var edits = [];
149
+ while (i > 0 || j > 0) {
150
+ if (i == 0) {
151
+ edits.push(EDIT_ADD);
152
+ j--;
153
+ continue;
154
+ }
155
+ if (j == 0) {
156
+ edits.push(EDIT_DELETE);
157
+ i--;
158
+ continue;
159
+ }
160
+ var northWest = distances[i - 1][j - 1];
161
+ var west = distances[i - 1][j];
162
+ var north = distances[i][j - 1];
163
+ var min;
164
+ if (west < north)
165
+ min = west < northWest ? west : northWest;
166
+ else
167
+ min = north < northWest ? north : northWest;
168
+ if (min == northWest) {
169
+ if (northWest == current) {
170
+ edits.push(EDIT_LEAVE);
171
+ } else {
172
+ edits.push(EDIT_UPDATE);
173
+ current = northWest;
174
+ }
175
+ i--;
176
+ j--;
177
+ } else if (min == west) {
178
+ edits.push(EDIT_DELETE);
179
+ i--;
180
+ current = west;
181
+ } else {
182
+ edits.push(EDIT_ADD);
183
+ j--;
184
+ current = north;
185
+ }
186
+ }
187
+ edits.reverse();
188
+ return edits;
189
+ },
190
+ calcSplices: function (current, currentStart, currentEnd, old, oldStart, oldEnd) {
191
+ var prefixCount = 0;
192
+ var suffixCount = 0;
193
+ var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
194
+ if (currentStart == 0 && oldStart == 0)
195
+ prefixCount = this.sharedPrefix(current, old, minLength);
196
+ if (currentEnd == current.length && oldEnd == old.length)
197
+ suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);
198
+ currentStart += prefixCount;
199
+ oldStart += prefixCount;
200
+ currentEnd -= suffixCount;
201
+ oldEnd -= suffixCount;
202
+ if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)
203
+ return [];
204
+ if (currentStart == currentEnd) {
205
+ var splice = newSplice(currentStart, [], 0);
206
+ while (oldStart < oldEnd)
207
+ splice.removed.push(old[oldStart++]);
208
+ return [splice];
209
+ } else if (oldStart == oldEnd)
210
+ return [newSplice(currentStart, [], currentEnd - currentStart)];
211
+ var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));
212
+ var splice = undefined;
213
+ var splices = [];
214
+ var index = currentStart;
215
+ var oldIndex = oldStart;
216
+ for (var i = 0; i < ops.length; i++) {
217
+ switch (ops[i]) {
218
+ case EDIT_LEAVE:
219
+ if (splice) {
220
+ splices.push(splice);
221
+ splice = undefined;
222
+ }
223
+ index++;
224
+ oldIndex++;
225
+ break;
226
+ case EDIT_UPDATE:
227
+ if (!splice)
228
+ splice = newSplice(index, [], 0);
229
+ splice.addedCount++;
230
+ index++;
231
+ splice.removed.push(old[oldIndex]);
232
+ oldIndex++;
233
+ break;
234
+ case EDIT_ADD:
235
+ if (!splice)
236
+ splice = newSplice(index, [], 0);
237
+ splice.addedCount++;
238
+ index++;
239
+ break;
240
+ case EDIT_DELETE:
241
+ if (!splice)
242
+ splice = newSplice(index, [], 0);
243
+ splice.removed.push(old[oldIndex]);
244
+ oldIndex++;
245
+ break;
246
+ }
247
+ }
248
+ if (splice) {
249
+ splices.push(splice);
250
+ }
251
+ return splices;
252
+ },
253
+ sharedPrefix: function (current, old, searchLength) {
254
+ for (var i = 0; i < searchLength; i++)
255
+ if (!this.equals(current[i], old[i]))
256
+ return i;
257
+ return searchLength;
258
+ },
259
+ sharedSuffix: function (current, old, searchLength) {
260
+ var index1 = current.length;
261
+ var index2 = old.length;
262
+ var count = 0;
263
+ while (count < searchLength && this.equals(current[--index1], old[--index2]))
264
+ count++;
265
+ return count;
266
+ },
267
+ calculateSplices: function (current, previous) {
268
+ return this.calcSplices(current, 0, current.length, previous, 0, previous.length);
269
+ },
270
+ equals: function (currentValue, previousValue) {
271
+ return currentValue === previousValue;
272
+ }
273
+ };
274
+ return new ArraySplice();
275
+ }();
276
+ Polymer.EventApi = function () {
277
+ var Settings = Polymer.Settings;
278
+ var EventApi = function (event) {
279
+ this.event = event;
280
+ };
281
+ if (Settings.useShadow) {
282
+ EventApi.prototype = {
283
+ get rootTarget() {
284
+ return this.event.path[0];
285
+ },
286
+ get localTarget() {
287
+ return this.event.target;
288
+ },
289
+ get path() {
290
+ return this.event.path;
291
+ }
292
+ };
293
+ } else {
294
+ EventApi.prototype = {
295
+ get rootTarget() {
296
+ return this.event.target;
297
+ },
298
+ get localTarget() {
299
+ var current = this.event.currentTarget;
300
+ var currentRoot = current && Polymer.dom(current).getOwnerRoot();
301
+ var p$ = this.path;
302
+ for (var i = 0; i < p$.length; i++) {
303
+ if (Polymer.dom(p$[i]).getOwnerRoot() === currentRoot) {
304
+ return p$[i];
305
+ }
306
+ }
307
+ },
308
+ get path() {
309
+ if (!this.event._path) {
310
+ var path = [];
311
+ var o = this.rootTarget;
312
+ while (o) {
313
+ path.push(o);
314
+ o = Polymer.dom(o).parentNode || o.host;
315
+ }
316
+ path.push(window);
317
+ this.event._path = path;
318
+ }
319
+ return this.event._path;
320
+ }
321
+ };
322
+ }
323
+ var factory = function (event) {
324
+ if (!event.__eventApi) {
325
+ event.__eventApi = new EventApi(event);
326
+ }
327
+ return event.__eventApi;
328
+ };
329
+ return { factory: factory };
330
+ }();
331
+ Polymer.domInnerHTML = function () {
332
+ var escapeAttrRegExp = /[&\u00A0"]/g;
333
+ var escapeDataRegExp = /[&\u00A0<>]/g;
334
+ function escapeReplace(c) {
335
+ switch (c) {
336
+ case '&':
337
+ return '&amp;';
338
+ case '<':
339
+ return '&lt;';
340
+ case '>':
341
+ return '&gt;';
342
+ case '"':
343
+ return '&quot;';
344
+ case '\xA0':
345
+ return '&nbsp;';
346
+ }
347
+ }
348
+ function escapeAttr(s) {
349
+ return s.replace(escapeAttrRegExp, escapeReplace);
350
+ }
351
+ function escapeData(s) {
352
+ return s.replace(escapeDataRegExp, escapeReplace);
353
+ }
354
+ function makeSet(arr) {
355
+ var set = {};
356
+ for (var i = 0; i < arr.length; i++) {
357
+ set[arr[i]] = true;
358
+ }
359
+ return set;
360
+ }
361
+ var voidElements = makeSet([
362
+ 'area',
363
+ 'base',
364
+ 'br',
365
+ 'col',
366
+ 'command',
367
+ 'embed',
368
+ 'hr',
369
+ 'img',
370
+ 'input',
371
+ 'keygen',
372
+ 'link',
373
+ 'meta',
374
+ 'param',
375
+ 'source',
376
+ 'track',
377
+ 'wbr'
378
+ ]);
379
+ var plaintextParents = makeSet([
380
+ 'style',
381
+ 'script',
382
+ 'xmp',
383
+ 'iframe',
384
+ 'noembed',
385
+ 'noframes',
386
+ 'plaintext',
387
+ 'noscript'
388
+ ]);
389
+ function getOuterHTML(node, parentNode, composed) {
390
+ switch (node.nodeType) {
391
+ case Node.ELEMENT_NODE:
392
+ var tagName = node.localName;
393
+ var s = '<' + tagName;
394
+ var attrs = node.attributes;
395
+ for (var i = 0, attr; attr = attrs[i]; i++) {
396
+ s += ' ' + attr.name + '="' + escapeAttr(attr.value) + '"';
397
+ }
398
+ s += '>';
399
+ if (voidElements[tagName]) {
400
+ return s;
401
+ }
402
+ return s + getInnerHTML(node, composed) + '</' + tagName + '>';
403
+ case Node.TEXT_NODE:
404
+ var data = node.data;
405
+ if (parentNode && plaintextParents[parentNode.localName]) {
406
+ return data;
407
+ }
408
+ return escapeData(data);
409
+ case Node.COMMENT_NODE:
410
+ return '<!--' + node.data + '-->';
411
+ default:
412
+ console.error(node);
413
+ throw new Error('not implemented');
414
+ }
415
+ }
416
+ function getInnerHTML(node, composed) {
417
+ if (node instanceof HTMLTemplateElement)
418
+ node = node.content;
419
+ var s = '';
420
+ var c$ = Polymer.dom(node).childNodes;
421
+ c$ = composed ? node._composedChildren : c$;
422
+ for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) {
423
+ s += getOuterHTML(child, node, composed);
424
+ }
425
+ return s;
426
+ }
427
+ return { getInnerHTML: getInnerHTML };
428
+ }();
429
+ Polymer.DomApi = function () {
430
+ 'use strict';
431
+ var Settings = Polymer.Settings;
432
+ var getInnerHTML = Polymer.domInnerHTML.getInnerHTML;
433
+ var nativeInsertBefore = Element.prototype.insertBefore;
434
+ var nativeRemoveChild = Element.prototype.removeChild;
435
+ var nativeAppendChild = Element.prototype.appendChild;
436
+ var dirtyRoots = [];
437
+ var DomApi = function (node) {
438
+ this.node = node;
439
+ if (this.patch) {
440
+ this.patch();
441
+ }
442
+ };
443
+ DomApi.prototype = {
444
+ flush: function () {
445
+ for (var i = 0, host; i < dirtyRoots.length; i++) {
446
+ host = dirtyRoots[i];
447
+ host.flushDebouncer('_distribute');
448
+ }
449
+ dirtyRoots = [];
450
+ },
451
+ _lazyDistribute: function (host) {
452
+ if (host.shadyRoot && host.shadyRoot._distributionClean) {
453
+ host.shadyRoot._distributionClean = false;
454
+ host.debounce('_distribute', host._distributeContent);
455
+ dirtyRoots.push(host);
456
+ }
457
+ },
458
+ appendChild: function (node) {
459
+ var distributed;
460
+ this._removeNodeFromHost(node);
461
+ if (this._nodeIsInLogicalTree(this.node)) {
462
+ var host = this._hostForNode(this.node);
463
+ this._addLogicalInfo(node, this.node, host && host.shadyRoot);
464
+ this._addNodeToHost(node);
465
+ if (host) {
466
+ distributed = this._maybeDistribute(node, this.node, host);
467
+ }
468
+ }
469
+ if (!distributed && !this._tryRemoveUndistributedNode(node)) {
470
+ var container = this.node._isShadyRoot ? this.node.host : this.node;
471
+ nativeAppendChild.call(container, node);
472
+ addToComposedParent(container, node);
473
+ }
474
+ return node;
475
+ },
476
+ insertBefore: function (node, ref_node) {
477
+ if (!ref_node) {
478
+ return this.appendChild(node);
479
+ }
480
+ var distributed;
481
+ this._removeNodeFromHost(node);
482
+ if (this._nodeIsInLogicalTree(this.node)) {
483
+ saveLightChildrenIfNeeded(this.node);
484
+ var children = this.childNodes;
485
+ var index = children.indexOf(ref_node);
486
+ if (index < 0) {
487
+ throw Error('The ref_node to be inserted before is not a child ' + 'of this node');
488
+ }
489
+ var host = this._hostForNode(this.node);
490
+ this._addLogicalInfo(node, this.node, host && host.shadyRoot, index);
491
+ this._addNodeToHost(node);
492
+ if (host) {
493
+ distributed = this._maybeDistribute(node, this.node, host);
494
+ }
495
+ }
496
+ if (!distributed && !this._tryRemoveUndistributedNode(node)) {
497
+ ref_node = ref_node.localName === CONTENT ? this._firstComposedNode(ref_node) : ref_node;
498
+ var container = this.node._isShadyRoot ? this.node.host : this.node;
499
+ nativeInsertBefore.call(container, node, ref_node);
500
+ addToComposedParent(container, node, ref_node);
501
+ }
502
+ return node;
503
+ },
504
+ removeChild: function (node) {
505
+ if (factory(node).parentNode !== this.node) {
506
+ console.warn('The node to be removed is not a child of this node', node);
507
+ }
508
+ var distributed;
509
+ if (this._nodeIsInLogicalTree(this.node)) {
510
+ var host = this._hostForNode(this.node);
511
+ distributed = this._maybeDistribute(node, this.node, host);
512
+ this._removeNodeFromHost(node);
513
+ }
514
+ if (!distributed) {
515
+ var container = this.node._isShadyRoot ? this.node.host : this.node;
516
+ if (container === node.parentNode) {
517
+ nativeRemoveChild.call(container, node);
518
+ removeFromComposedParent(container, node);
519
+ }
520
+ }
521
+ return node;
522
+ },
523
+ replaceChild: function (node, ref_node) {
524
+ this.insertBefore(node, ref_node);
525
+ this.removeChild(ref_node);
526
+ return node;
527
+ },
528
+ getOwnerRoot: function () {
529
+ return this._ownerShadyRootForNode(this.node);
530
+ },
531
+ _ownerShadyRootForNode: function (node) {
532
+ if (!node) {
533
+ return;
534
+ }
535
+ if (node._ownerShadyRoot === undefined) {
536
+ var root;
537
+ if (node._isShadyRoot) {
538
+ root = node;
539
+ } else {
540
+ var parent = Polymer.dom(node).parentNode;
541
+ if (parent) {
542
+ root = parent._isShadyRoot ? parent : this._ownerShadyRootForNode(parent);
543
+ } else {
544
+ root = null;
545
+ }
546
+ }
547
+ node._ownerShadyRoot = root;
548
+ }
549
+ return node._ownerShadyRoot;
550
+ },
551
+ _maybeDistribute: function (node, parent, host) {
552
+ var nodeNeedsDistribute = this._nodeNeedsDistribution(node);
553
+ var distribute = this._parentNeedsDistribution(parent) || nodeNeedsDistribute;
554
+ if (nodeNeedsDistribute) {
555
+ this._updateInsertionPoints(host);
556
+ }
557
+ if (distribute) {
558
+ this._lazyDistribute(host);
559
+ }
560
+ return distribute;
561
+ },
562
+ _tryRemoveUndistributedNode: function (node) {
563
+ if (this.node.shadyRoot) {
564
+ if (node.parentNode) {
565
+ nativeRemoveChild.call(node.parentNode, node);
566
+ }
567
+ return true;
568
+ }
569
+ },
570
+ _updateInsertionPoints: function (host) {
571
+ host.shadyRoot._insertionPoints = factory(host.shadyRoot).querySelectorAll(CONTENT);
572
+ },
573
+ _nodeIsInLogicalTree: function (node) {
574
+ return Boolean(node._lightParent || node._isShadyRoot || this._ownerShadyRootForNode(node) || node.shadyRoot);
575
+ },
576
+ _hostForNode: function (node) {
577
+ var root = node.shadyRoot || (node._isShadyRoot ? node : this._ownerShadyRootForNode(node));
578
+ return root && root.host;
579
+ },
580
+ _parentNeedsDistribution: function (parent) {
581
+ return parent && parent.shadyRoot && hasInsertionPoint(parent.shadyRoot);
582
+ },
583
+ _nodeNeedsDistribution: function (node) {
584
+ return node.localName === CONTENT || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && node.querySelector(CONTENT);
585
+ },
586
+ _removeNodeFromHost: function (node) {
587
+ if (node._lightParent) {
588
+ var root = this._ownerShadyRootForNode(node);
589
+ if (root) {
590
+ root.host._elementRemove(node);
591
+ }
592
+ this._removeLogicalInfo(node, node._lightParent);
593
+ }
594
+ this._removeOwnerShadyRoot(node);
595
+ },
596
+ _addNodeToHost: function (node) {
597
+ var checkNode = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? node.firstChild : node;
598
+ var root = this._ownerShadyRootForNode(checkNode);
599
+ if (root) {
600
+ root.host._elementAdd(node);
601
+ }
602
+ },
603
+ _addLogicalInfo: function (node, container, root, index) {
604
+ saveLightChildrenIfNeeded(container);
605
+ var children = factory(container).childNodes;
606
+ index = index === undefined ? children.length : index;
607
+ if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
608
+ var c$ = Array.prototype.slice.call(node.childNodes);
609
+ for (var i = 0, n; i < c$.length && (n = c$[i]); i++) {
610
+ children.splice(index++, 0, n);
611
+ n._lightParent = container;
612
+ }
613
+ } else {
614
+ children.splice(index, 0, node);
615
+ node._lightParent = container;
616
+ }
617
+ },
618
+ _removeLogicalInfo: function (node, container) {
619
+ var children = factory(container).childNodes;
620
+ var index = children.indexOf(node);
621
+ if (index < 0 || container !== node._lightParent) {
622
+ throw Error('The node to be removed is not a child of this node');
623
+ }
624
+ children.splice(index, 1);
625
+ node._lightParent = null;
626
+ },
627
+ _removeOwnerShadyRoot: function (node) {
628
+ var hasCachedRoot = factory(node).getOwnerRoot() !== undefined;
629
+ if (hasCachedRoot) {
630
+ var c$ = factory(node).childNodes;
631
+ for (var i = 0, l = c$.length, n; i < l && (n = c$[i]); i++) {
632
+ this._removeOwnerShadyRoot(n);
633
+ }
634
+ }
635
+ node._ownerShadyRoot = undefined;
636
+ },
637
+ _firstComposedNode: function (content) {
638
+ var n$ = factory(content).getDistributedNodes();
639
+ for (var i = 0, l = n$.length, n, p$; i < l && (n = n$[i]); i++) {
640
+ p$ = factory(n).getDestinationInsertionPoints();
641
+ if (p$[p$.length - 1] === content) {
642
+ return n;
643
+ }
644
+ }
645
+ },
646
+ querySelector: function (selector) {
647
+ return this.querySelectorAll(selector)[0];
648
+ },
649
+ querySelectorAll: function (selector) {
650
+ return this._query(function (n) {
651
+ return matchesSelector.call(n, selector);
652
+ }, this.node);
653
+ },
654
+ _query: function (matcher, node) {
655
+ node = node || this.node;
656
+ var list = [];
657
+ this._queryElements(factory(node).childNodes, matcher, list);
658
+ return list;
659
+ },
660
+ _queryElements: function (elements, matcher, list) {
661
+ for (var i = 0, l = elements.length, c; i < l && (c = elements[i]); i++) {
662
+ if (c.nodeType === Node.ELEMENT_NODE) {
663
+ this._queryElement(c, matcher, list);
664
+ }
665
+ }
666
+ },
667
+ _queryElement: function (node, matcher, list) {
668
+ if (matcher(node)) {
669
+ list.push(node);
670
+ }
671
+ this._queryElements(factory(node).childNodes, matcher, list);
672
+ },
673
+ getDestinationInsertionPoints: function () {
674
+ return this.node._destinationInsertionPoints || [];
675
+ },
676
+ getDistributedNodes: function () {
677
+ return this.node._distributedNodes || [];
678
+ },
679
+ queryDistributedElements: function (selector) {
680
+ var c$ = this.childNodes;
681
+ var list = [];
682
+ this._distributedFilter(selector, c$, list);
683
+ for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
684
+ if (c.localName === CONTENT) {
685
+ this._distributedFilter(selector, factory(c).getDistributedNodes(), list);
686
+ }
687
+ }
688
+ return list;
689
+ },
690
+ _distributedFilter: function (selector, list, results) {
691
+ results = results || [];
692
+ for (var i = 0, l = list.length, d; i < l && (d = list[i]); i++) {
693
+ if (d.nodeType === Node.ELEMENT_NODE && d.localName !== CONTENT && matchesSelector.call(d, selector)) {
694
+ results.push(d);
695
+ }
696
+ }
697
+ return results;
698
+ },
699
+ _clear: function () {
700
+ while (this.childNodes.length) {
701
+ this.removeChild(this.childNodes[0]);
702
+ }
703
+ },
704
+ setAttribute: function (name, value) {
705
+ this.node.setAttribute(name, value);
706
+ this._distributeParent();
707
+ },
708
+ removeAttribute: function (name) {
709
+ this.node.removeAttribute(name);
710
+ this._distributeParent();
711
+ },
712
+ _distributeParent: function () {
713
+ if (this._parentNeedsDistribution(this.parentNode)) {
714
+ this._lazyDistribute(this.parentNode);
715
+ }
716
+ }
717
+ };
718
+ Object.defineProperty(DomApi.prototype, 'classList', {
719
+ get: function () {
720
+ if (!this._classList) {
721
+ this._classList = new DomApi.ClassList(this);
722
+ }
723
+ return this._classList;
724
+ },
725
+ configurable: true
726
+ });
727
+ DomApi.ClassList = function (host) {
728
+ this.domApi = host;
729
+ this.node = host.node;
730
+ };
731
+ DomApi.ClassList.prototype = {
732
+ add: function () {
733
+ this.node.classList.add.apply(this.node.classList, arguments);
734
+ this.domApi._distributeParent();
735
+ },
736
+ remove: function () {
737
+ this.node.classList.remove.apply(this.node.classList, arguments);
738
+ this.domApi._distributeParent();
739
+ },
740
+ toggle: function () {
741
+ this.node.classList.toggle.apply(this.node.classList, arguments);
742
+ this.domApi._distributeParent();
743
+ }
744
+ };
745
+ if (!Settings.useShadow) {
746
+ Object.defineProperties(DomApi.prototype, {
747
+ childNodes: {
748
+ get: function () {
749
+ var c$ = getLightChildren(this.node);
750
+ return Array.isArray(c$) ? c$ : Array.prototype.slice.call(c$);
751
+ },
752
+ configurable: true
753
+ },
754
+ children: {
755
+ get: function () {
756
+ return Array.prototype.filter.call(this.childNodes, function (n) {
757
+ return n.nodeType === Node.ELEMENT_NODE;
758
+ });
759
+ },
760
+ configurable: true
761
+ },
762
+ parentNode: {
763
+ get: function () {
764
+ return this.node._lightParent || (this.node.__patched ? this.node._composedParent : this.node.parentNode);
765
+ },
766
+ configurable: true
767
+ },
768
+ firstChild: {
769
+ get: function () {
770
+ return this.childNodes[0];
771
+ },
772
+ configurable: true
773
+ },
774
+ lastChild: {
775
+ get: function () {
776
+ var c$ = this.childNodes;
777
+ return c$[c$.length - 1];
778
+ },
779
+ configurable: true
780
+ },
781
+ nextSibling: {
782
+ get: function () {
783
+ var c$ = this.parentNode && factory(this.parentNode).childNodes;
784
+ if (c$) {
785
+ return c$[Array.prototype.indexOf.call(c$, this.node) + 1];
786
+ }
787
+ },
788
+ configurable: true
789
+ },
790
+ previousSibling: {
791
+ get: function () {
792
+ var c$ = this.parentNode && factory(this.parentNode).childNodes;
793
+ if (c$) {
794
+ return c$[Array.prototype.indexOf.call(c$, this.node) - 1];
795
+ }
796
+ },
797
+ configurable: true
798
+ },
799
+ firstElementChild: {
800
+ get: function () {
801
+ return this.children[0];
802
+ },
803
+ configurable: true
804
+ },
805
+ lastElementChild: {
806
+ get: function () {
807
+ var c$ = this.children;
808
+ return c$[c$.length - 1];
809
+ },
810
+ configurable: true
811
+ },
812
+ nextElementSibling: {
813
+ get: function () {
814
+ var c$ = this.parentNode && factory(this.parentNode).children;
815
+ if (c$) {
816
+ return c$[Array.prototype.indexOf.call(c$, this.node) + 1];
817
+ }
818
+ },
819
+ configurable: true
820
+ },
821
+ previousElementSibling: {
822
+ get: function () {
823
+ var c$ = this.parentNode && factory(this.parentNode).children;
824
+ if (c$) {
825
+ return c$[Array.prototype.indexOf.call(c$, this.node) - 1];
826
+ }
827
+ },
828
+ configurable: true
829
+ },
830
+ textContent: {
831
+ get: function () {
832
+ if (this.node.nodeType === Node.TEXT_NODE) {
833
+ return this.node.textContent;
834
+ } else {
835
+ return Array.prototype.map.call(this.childNodes, function (c) {
836
+ return c.textContent;
837
+ }).join('');
838
+ }
839
+ },
840
+ set: function (text) {
841
+ this._clear();
842
+ if (text) {
843
+ this.appendChild(document.createTextNode(text));
844
+ }
845
+ },
846
+ configurable: true
847
+ },
848
+ innerHTML: {
849
+ get: function () {
850
+ if (this.node.nodeType === Node.TEXT_NODE) {
851
+ return null;
852
+ } else {
853
+ return getInnerHTML(this.node);
854
+ }
855
+ },
856
+ set: function (text) {
857
+ if (this.node.nodeType !== Node.TEXT_NODE) {
858
+ this._clear();
859
+ var d = document.createElement('div');
860
+ d.innerHTML = text;
861
+ for (var e = d.firstChild; e; e = e.nextSibling) {
862
+ this.appendChild(e);
863
+ }
864
+ }
865
+ },
866
+ configurable: true
867
+ }
868
+ });
869
+ DomApi.prototype._getComposedInnerHTML = function () {
870
+ return getInnerHTML(this.node, true);
871
+ };
872
+ } else {
873
+ DomApi.prototype.querySelectorAll = function (selector) {
874
+ return Array.prototype.slice.call(this.node.querySelectorAll(selector));
875
+ };
876
+ DomApi.prototype.getOwnerRoot = function () {
877
+ var n = this.node;
878
+ while (n) {
879
+ if (n.nodeType === Node.DOCUMENT_FRAGMENT_NODE && n.host) {
880
+ return n;
881
+ }
882
+ n = n.parentNode;
883
+ }
884
+ };
885
+ DomApi.prototype.getDestinationInsertionPoints = function () {
886
+ var n$ = this.node.getDestinationInsertionPoints();
887
+ return n$ ? Array.prototype.slice.call(n$) : [];
888
+ };
889
+ DomApi.prototype.getDistributedNodes = function () {
890
+ var n$ = this.node.getDistributedNodes();
891
+ return n$ ? Array.prototype.slice.call(n$) : [];
892
+ };
893
+ DomApi.prototype._distributeParent = function () {
894
+ };
895
+ Object.defineProperties(DomApi.prototype, {
896
+ childNodes: {
897
+ get: function () {
898
+ return Array.prototype.slice.call(this.node.childNodes);
899
+ },
900
+ configurable: true
901
+ },
902
+ children: {
903
+ get: function () {
904
+ return Array.prototype.slice.call(this.node.children);
905
+ },
906
+ configurable: true
907
+ },
908
+ textContent: {
909
+ get: function () {
910
+ return this.node.textContent;
911
+ },
912
+ set: function (value) {
913
+ return this.node.textContent = value;
914
+ },
915
+ configurable: true
916
+ },
917
+ innerHTML: {
918
+ get: function () {
919
+ return this.node.innerHTML;
920
+ },
921
+ set: function (value) {
922
+ return this.node.innerHTML = value;
923
+ },
924
+ configurable: true
925
+ }
926
+ });
927
+ var forwards = [
928
+ 'parentNode',
929
+ 'firstChild',
930
+ 'lastChild',
931
+ 'nextSibling',
932
+ 'previousSibling',
933
+ 'firstElementChild',
934
+ 'lastElementChild',
935
+ 'nextElementSibling',
936
+ 'previousElementSibling'
937
+ ];
938
+ forwards.forEach(function (name) {
939
+ Object.defineProperty(DomApi.prototype, name, {
940
+ get: function () {
941
+ return this.node[name];
942
+ },
943
+ configurable: true
944
+ });
945
+ });
946
+ }
947
+ var CONTENT = 'content';
948
+ var factory = function (node, patch) {
949
+ node = node || document;
950
+ if (!node.__domApi) {
951
+ node.__domApi = new DomApi(node, patch);
952
+ }
953
+ return node.__domApi;
954
+ };
955
+ Polymer.dom = function (obj, patch) {
956
+ if (obj instanceof Event) {
957
+ return Polymer.EventApi.factory(obj);
958
+ } else {
959
+ return factory(obj, patch);
960
+ }
961
+ };
962
+ Polymer.dom.flush = DomApi.prototype.flush;
963
+ function getLightChildren(node) {
964
+ var children = node._lightChildren;
965
+ return children ? children : node.childNodes;
966
+ }
967
+ function getComposedChildren(node) {
968
+ if (!node._composedChildren) {
969
+ node._composedChildren = Array.prototype.slice.call(node.childNodes);
970
+ }
971
+ return node._composedChildren;
972
+ }
973
+ function addToComposedParent(parent, node, ref_node) {
974
+ var children = getComposedChildren(parent);
975
+ var i = ref_node ? children.indexOf(ref_node) : -1;
976
+ if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
977
+ var fragChildren = getComposedChildren(node);
978
+ fragChildren.forEach(function (c) {
979
+ addNodeToComposedChildren(c, parent, children, i);
980
+ });
981
+ } else {
982
+ addNodeToComposedChildren(node, parent, children, i);
983
+ }
984
+ }
985
+ function addNodeToComposedChildren(node, parent, children, i) {
986
+ node._composedParent = parent;
987
+ if (i >= 0) {
988
+ children.splice(i, 0, node);
989
+ } else {
990
+ children.push(node);
991
+ }
992
+ }
993
+ function removeFromComposedParent(parent, node) {
994
+ node._composedParent = null;
995
+ if (parent) {
996
+ var children = getComposedChildren(parent);
997
+ var i = children.indexOf(node);
998
+ if (i >= 0) {
999
+ children.splice(i, 1);
1000
+ }
1001
+ }
1002
+ }
1003
+ function saveLightChildrenIfNeeded(node) {
1004
+ if (!node._lightChildren) {
1005
+ var c$ = Array.prototype.slice.call(node.childNodes);
1006
+ for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) {
1007
+ child._lightParent = child._lightParent || node;
1008
+ }
1009
+ node._lightChildren = c$;
1010
+ }
1011
+ }
1012
+ function hasInsertionPoint(root) {
1013
+ return Boolean(root._insertionPoints.length);
1014
+ }
1015
+ var p = Element.prototype;
1016
+ var matchesSelector = p.matches || p.matchesSelector || p.mozMatchesSelector || p.msMatchesSelector || p.oMatchesSelector || p.webkitMatchesSelector;
1017
+ return {
1018
+ getLightChildren: getLightChildren,
1019
+ getComposedChildren: getComposedChildren,
1020
+ removeFromComposedParent: removeFromComposedParent,
1021
+ saveLightChildrenIfNeeded: saveLightChildrenIfNeeded,
1022
+ matchesSelector: matchesSelector,
1023
+ hasInsertionPoint: hasInsertionPoint,
1024
+ ctor: DomApi,
1025
+ factory: factory
1026
+ };
1027
+ }();
1028
+ (function () {
1029
+ Polymer.Base._addFeature({
1030
+ _prepShady: function () {
1031
+ this._useContent = this._useContent || Boolean(this._template);
1032
+ if (this._useContent) {
1033
+ this._template._hasInsertionPoint = this._template.content.querySelector('content');
1034
+ }
1035
+ },
1036
+ _poolContent: function () {
1037
+ if (this._useContent) {
1038
+ saveLightChildrenIfNeeded(this);
1039
+ }
1040
+ },
1041
+ _setupRoot: function () {
1042
+ if (this._useContent) {
1043
+ this._createLocalRoot();
1044
+ if (!this.dataHost) {
1045
+ upgradeLightChildren(this._lightChildren);
1046
+ }
1047
+ }
1048
+ },
1049
+ _createLocalRoot: function () {
1050
+ this.shadyRoot = this.root;
1051
+ this.shadyRoot._distributionClean = false;
1052
+ this.shadyRoot._isShadyRoot = true;
1053
+ this.shadyRoot._dirtyRoots = [];
1054
+ this.shadyRoot._insertionPoints = this._template._hasInsertionPoint ? this.shadyRoot.querySelectorAll('content') : [];
1055
+ saveLightChildrenIfNeeded(this.shadyRoot);
1056
+ this.shadyRoot.host = this;
1057
+ },
1058
+ get domHost() {
1059
+ var root = Polymer.dom(this).getOwnerRoot();
1060
+ return root && root.host;
1061
+ },
1062
+ distributeContent: function () {
1063
+ if (this.shadyRoot) {
1064
+ var host = getTopDistributingHost(this);
1065
+ Polymer.dom(this)._lazyDistribute(host);
1066
+ }
1067
+ },
1068
+ _distributeContent: function () {
1069
+ if (this._useContent && !this.shadyRoot._distributionClean) {
1070
+ this._beginDistribute();
1071
+ this._distributeDirtyRoots();
1072
+ this._finishDistribute();
1073
+ }
1074
+ },
1075
+ _beginDistribute: function () {
1076
+ if (this._useContent && hasInsertionPoint(this.shadyRoot)) {
1077
+ this._resetDistribution();
1078
+ this._distributePool(this.shadyRoot, this._collectPool());
1079
+ }
1080
+ },
1081
+ _distributeDirtyRoots: function () {
1082
+ var c$ = this.shadyRoot._dirtyRoots;
1083
+ for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
1084
+ c._distributeContent();
1085
+ }
1086
+ this.shadyRoot._dirtyRoots = [];
1087
+ },
1088
+ _finishDistribute: function () {
1089
+ if (this._useContent) {
1090
+ if (hasInsertionPoint(this.shadyRoot)) {
1091
+ this._composeTree();
1092
+ } else {
1093
+ if (!this.shadyRoot._hasDistributed) {
1094
+ this.textContent = '';
1095
+ this.appendChild(this.shadyRoot);
1096
+ } else {
1097
+ var children = this._composeNode(this);
1098
+ this._updateChildNodes(this, children);
1099
+ }
1100
+ }
1101
+ this.shadyRoot._hasDistributed = true;
1102
+ this.shadyRoot._distributionClean = true;
1103
+ }
1104
+ },
1105
+ elementMatches: function (selector, node) {
1106
+ node = node || this;
1107
+ return matchesSelector.call(node, selector);
1108
+ },
1109
+ _resetDistribution: function () {
1110
+ var children = getLightChildren(this);
1111
+ for (var i = 0; i < children.length; i++) {
1112
+ var child = children[i];
1113
+ if (child._destinationInsertionPoints) {
1114
+ child._destinationInsertionPoints = undefined;
1115
+ }
1116
+ if (isInsertionPoint(child)) {
1117
+ clearDistributedDestinationInsertionPoints(child);
1118
+ }
1119
+ }
1120
+ var root = this.shadyRoot;
1121
+ var p$ = root._insertionPoints;
1122
+ for (var j = 0; j < p$.length; j++) {
1123
+ p$[j]._distributedNodes = [];
1124
+ }
1125
+ },
1126
+ _collectPool: function () {
1127
+ var pool = [];
1128
+ var children = getLightChildren(this);
1129
+ for (var i = 0; i < children.length; i++) {
1130
+ var child = children[i];
1131
+ if (isInsertionPoint(child)) {
1132
+ pool.push.apply(pool, child._distributedNodes);
1133
+ } else {
1134
+ pool.push(child);
1135
+ }
1136
+ }
1137
+ return pool;
1138
+ },
1139
+ _distributePool: function (node, pool) {
1140
+ var p$ = node._insertionPoints;
1141
+ for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) {
1142
+ this._distributeInsertionPoint(p, pool);
1143
+ maybeRedistributeParent(p, this);
1144
+ }
1145
+ },
1146
+ _distributeInsertionPoint: function (content, pool) {
1147
+ var anyDistributed = false;
1148
+ for (var i = 0, l = pool.length, node; i < l; i++) {
1149
+ node = pool[i];
1150
+ if (!node) {
1151
+ continue;
1152
+ }
1153
+ if (this._matchesContentSelect(node, content)) {
1154
+ distributeNodeInto(node, content);
1155
+ pool[i] = undefined;
1156
+ anyDistributed = true;
1157
+ }
1158
+ }
1159
+ if (!anyDistributed) {
1160
+ var children = getLightChildren(content);
1161
+ for (var j = 0; j < children.length; j++) {
1162
+ distributeNodeInto(children[j], content);
1163
+ }
1164
+ }
1165
+ },
1166
+ _composeTree: function () {
1167
+ this._updateChildNodes(this, this._composeNode(this));
1168
+ var p$ = this.shadyRoot._insertionPoints;
1169
+ for (var i = 0, l = p$.length, p, parent; i < l && (p = p$[i]); i++) {
1170
+ parent = p._lightParent || p.parentNode;
1171
+ if (!parent._useContent && parent !== this && parent !== this.shadyRoot) {
1172
+ this._updateChildNodes(parent, this._composeNode(parent));
1173
+ }
1174
+ }
1175
+ },
1176
+ _composeNode: function (node) {
1177
+ var children = [];
1178
+ var c$ = getLightChildren(node.shadyRoot || node);
1179
+ for (var i = 0; i < c$.length; i++) {
1180
+ var child = c$[i];
1181
+ if (isInsertionPoint(child)) {
1182
+ var distributedNodes = child._distributedNodes;
1183
+ for (var j = 0; j < distributedNodes.length; j++) {
1184
+ var distributedNode = distributedNodes[j];
1185
+ if (isFinalDestination(child, distributedNode)) {
1186
+ children.push(distributedNode);
1187
+ }
1188
+ }
1189
+ } else {
1190
+ children.push(child);
1191
+ }
1192
+ }
1193
+ return children;
1194
+ },
1195
+ _updateChildNodes: function (container, children) {
1196
+ var composed = getComposedChildren(container);
1197
+ var splices = Polymer.ArraySplice.calculateSplices(children, composed);
1198
+ for (var i = 0, d = 0, s; i < splices.length && (s = splices[i]); i++) {
1199
+ for (var j = 0, n; j < s.removed.length && (n = s.removed[j]); j++) {
1200
+ remove(n);
1201
+ composed.splice(s.index + d, 1);
1202
+ }
1203
+ d -= s.addedCount;
1204
+ }
1205
+ for (var i = 0, s, next; i < splices.length && (s = splices[i]); i++) {
1206
+ next = composed[s.index];
1207
+ for (var j = s.index, n; j < s.index + s.addedCount; j++) {
1208
+ n = children[j];
1209
+ insertBefore(container, n, next);
1210
+ composed.splice(j, 0, n);
1211
+ }
1212
+ }
1213
+ },
1214
+ _matchesContentSelect: function (node, contentElement) {
1215
+ var select = contentElement.getAttribute('select');
1216
+ if (!select) {
1217
+ return true;
1218
+ }
1219
+ select = select.trim();
1220
+ if (!select) {
1221
+ return true;
1222
+ }
1223
+ if (!(node instanceof Element)) {
1224
+ return false;
1225
+ }
1226
+ var validSelectors = /^(:not\()?[*.#[a-zA-Z_|]/;
1227
+ if (!validSelectors.test(select)) {
1228
+ return false;
1229
+ }
1230
+ return this.elementMatches(select, node);
1231
+ },
1232
+ _elementAdd: function () {
1233
+ },
1234
+ _elementRemove: function () {
1235
+ }
1236
+ });
1237
+ var saveLightChildrenIfNeeded = Polymer.DomApi.saveLightChildrenIfNeeded;
1238
+ var getLightChildren = Polymer.DomApi.getLightChildren;
1239
+ var matchesSelector = Polymer.DomApi.matchesSelector;
1240
+ var hasInsertionPoint = Polymer.DomApi.hasInsertionPoint;
1241
+ var getComposedChildren = Polymer.DomApi.getComposedChildren;
1242
+ var removeFromComposedParent = Polymer.DomApi.removeFromComposedParent;
1243
+ function distributeNodeInto(child, insertionPoint) {
1244
+ insertionPoint._distributedNodes.push(child);
1245
+ var points = child._destinationInsertionPoints;
1246
+ if (!points) {
1247
+ child._destinationInsertionPoints = [insertionPoint];
1248
+ } else {
1249
+ points.push(insertionPoint);
1250
+ }
1251
+ }
1252
+ function clearDistributedDestinationInsertionPoints(content) {
1253
+ var e$ = content._distributedNodes;
1254
+ for (var i = 0; i < e$.length; i++) {
1255
+ var d = e$[i]._destinationInsertionPoints;
1256
+ if (d) {
1257
+ d.splice(d.indexOf(content) + 1, d.length);
1258
+ }
1259
+ }
1260
+ }
1261
+ function maybeRedistributeParent(content, host) {
1262
+ var parent = content._lightParent;
1263
+ if (parent && parent.shadyRoot && hasInsertionPoint(parent.shadyRoot) && parent.shadyRoot._distributionClean) {
1264
+ parent.shadyRoot._distributionClean = false;
1265
+ host.shadyRoot._dirtyRoots.push(parent);
1266
+ }
1267
+ }
1268
+ function isFinalDestination(insertionPoint, node) {
1269
+ var points = node._destinationInsertionPoints;
1270
+ return points && points[points.length - 1] === insertionPoint;
1271
+ }
1272
+ function isInsertionPoint(node) {
1273
+ return node.localName == 'content';
1274
+ }
1275
+ var nativeInsertBefore = Element.prototype.insertBefore;
1276
+ var nativeRemoveChild = Element.prototype.removeChild;
1277
+ function insertBefore(parentNode, newChild, refChild) {
1278
+ var newChildParent = getComposedParent(newChild);
1279
+ if (newChildParent !== parentNode) {
1280
+ removeFromComposedParent(newChildParent, newChild);
1281
+ }
1282
+ remove(newChild);
1283
+ saveLightChildrenIfNeeded(parentNode);
1284
+ nativeInsertBefore.call(parentNode, newChild, refChild || null);
1285
+ newChild._composedParent = parentNode;
1286
+ }
1287
+ function remove(node) {
1288
+ var parentNode = getComposedParent(node);
1289
+ if (parentNode) {
1290
+ saveLightChildrenIfNeeded(parentNode);
1291
+ node._composedParent = null;
1292
+ nativeRemoveChild.call(parentNode, node);
1293
+ }
1294
+ }
1295
+ function getComposedParent(node) {
1296
+ return node.__patched ? node._composedParent : node.parentNode;
1297
+ }
1298
+ function getTopDistributingHost(host) {
1299
+ while (host && hostNeedsRedistribution(host)) {
1300
+ host = host.domHost;
1301
+ }
1302
+ return host;
1303
+ }
1304
+ function hostNeedsRedistribution(host) {
1305
+ var c$ = Polymer.dom(host).children;
1306
+ for (var i = 0, c; i < c$.length; i++) {
1307
+ c = c$[i];
1308
+ if (c.localName === 'content') {
1309
+ return host.domHost;
1310
+ }
1311
+ }
1312
+ }
1313
+ var needsUpgrade = window.CustomElements && !CustomElements.useNative;
1314
+ function upgradeLightChildren(children) {
1315
+ if (needsUpgrade && children) {
1316
+ for (var i = 0; i < children.length; i++) {
1317
+ CustomElements.upgrade(children[i]);
1318
+ }
1319
+ }
1320
+ }
1321
+ }());
1322
+ if (Polymer.Settings.useShadow) {
1323
+ Polymer.Base._addFeature({
1324
+ _poolContent: function () {
1325
+ },
1326
+ _beginDistribute: function () {
1327
+ },
1328
+ distributeContent: function () {
1329
+ },
1330
+ _distributeContent: function () {
1331
+ },
1332
+ _finishDistribute: function () {
1333
+ },
1334
+ _createLocalRoot: function () {
1335
+ this.createShadowRoot();
1336
+ this.shadowRoot.appendChild(this.root);
1337
+ this.root = this.shadowRoot;
1338
+ }
1339
+ });
1340
+ }
1341
+ Polymer.DomModule = document.createElement('dom-module');
1342
+ Polymer.Base._addFeature({
1343
+ _registerFeatures: function () {
1344
+ this._prepIs();
1345
+ this._prepAttributes();
1346
+ this._prepBehaviors();
1347
+ this._prepExtends();
1348
+ this._prepConstructor();
1349
+ this._prepTemplate();
1350
+ this._prepShady();
1351
+ },
1352
+ _prepBehavior: function (b) {
1353
+ this._addHostAttributes(b.hostAttributes);
1354
+ },
1355
+ _initFeatures: function () {
1356
+ this._poolContent();
1357
+ this._pushHost();
1358
+ this._stampTemplate();
1359
+ this._popHost();
1360
+ this._marshalHostAttributes();
1361
+ this._setupDebouncers();
1362
+ this._marshalBehaviors();
1363
+ this._tryReady();
1364
+ },
1365
+ _marshalBehavior: function (b) {
1366
+ }
1367
+ });</script>
1368
+