polymer-rails 1.0.8 → 1.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecf7e71200170aa403fe1be244d174e279a23bde
4
- data.tar.gz: a9abb29fbdb4803dff93ef60e0ef55fb928b4198
3
+ metadata.gz: 39009e09a451db6b696b64d747b85eabe02ae38b
4
+ data.tar.gz: 2f05a0e70596c06e796cd2070940e691a4d38293
5
5
  SHA512:
6
- metadata.gz: 3834d8868077d593ce221702f3ff330523a824ba857837858e65aab2202991071a5f77f64b159667a5b8a65861986f9284d10b082d4dea1a96ab2e03a9f12fe9
7
- data.tar.gz: b3581feb883322380e1a97d65d3fc68fbc461b5c6d9a345586fc47135103b35d753dac7541455f030d5f02c305122e2cdb49fa8a25d8d8bc47b40329b7d415c1
6
+ metadata.gz: ec975c0220275695ad07be0c423d728e2d1971780e5c7150c7974d934eb9fd15725f10b1d06df29c0e64ed0b41ec6db58294a48eb5c79527afe8a165d067b4de
7
+ data.tar.gz: 22fe13f96a2eecfe72ab794a012656eb3d65cfa5653830edb82135a51dcbf86ad81eb767629cc426dcd28ef14fc6cbd8859dc88ae3420c6b0d91bc9848f73987
@@ -95,6 +95,38 @@ get: function () {
95
95
  return (document._currentScript || document.currentScript).ownerDocument;
96
96
  }
97
97
  });
98
+ Polymer.RenderStatus = {
99
+ _ready: false,
100
+ _callbacks: [],
101
+ whenReady: function (cb) {
102
+ if (this._ready) {
103
+ cb();
104
+ } else {
105
+ this._callbacks.push(cb);
106
+ }
107
+ },
108
+ _makeReady: function () {
109
+ this._ready = true;
110
+ this._callbacks.forEach(function (cb) {
111
+ cb();
112
+ });
113
+ this._callbacks = [];
114
+ },
115
+ _catchFirstRender: function () {
116
+ requestAnimationFrame(function () {
117
+ Polymer.RenderStatus._makeReady();
118
+ });
119
+ }
120
+ };
121
+ if (window.HTMLImports) {
122
+ HTMLImports.whenReady(function () {
123
+ Polymer.RenderStatus._catchFirstRender();
124
+ });
125
+ } else {
126
+ Polymer.RenderStatus._catchFirstRender();
127
+ }
128
+ Polymer.ImportStatus = Polymer.RenderStatus;
129
+ Polymer.ImportStatus.whenLoaded = Polymer.ImportStatus.whenReady;
98
130
  Polymer.Base = {
99
131
  __isPolymerInstance__: true,
100
132
  _addFeature: function (feature) {
@@ -111,17 +143,22 @@ this._doBehavior('created');
111
143
  this._initFeatures();
112
144
  },
113
145
  attachedCallback: function () {
146
+ Polymer.RenderStatus.whenReady(function () {
114
147
  this.isAttached = true;
115
148
  this._doBehavior('attached');
149
+ }.bind(this));
116
150
  },
117
151
  detachedCallback: function () {
118
152
  this.isAttached = false;
119
153
  this._doBehavior('detached');
120
154
  },
121
155
  attributeChangedCallback: function (name) {
122
- this._setAttributeToProperty(this, name);
156
+ this._attributeChangedImpl(name);
123
157
  this._doBehavior('attributeChanged', arguments);
124
158
  },
159
+ _attributeChangedImpl: function (name) {
160
+ this._setAttributeToProperty(this, name);
161
+ },
125
162
  extend: function (prototype, api) {
126
163
  if (prototype && api) {
127
164
  Object.getOwnPropertyNames(api).forEach(function (n) {
@@ -179,6 +216,7 @@ return Boolean(obj && obj.__isPolymerInstance__);
179
216
  Polymer.telemetry.instanceCount = 0;
180
217
  (function () {
181
218
  var modules = {};
219
+ var lcModules = {};
182
220
  var DomModule = function () {
183
221
  return document.createElement('dom-module');
184
222
  };
@@ -193,10 +231,11 @@ var id = id || this.id || this.getAttribute('name') || this.getAttribute('is');
193
231
  if (id) {
194
232
  this.id = id;
195
233
  modules[id] = this;
234
+ lcModules[id.toLowerCase()] = this;
196
235
  }
197
236
  },
198
237
  import: function (id, selector) {
199
- var m = modules[id];
238
+ var m = modules[id] || lcModules[id.toLowerCase()];
200
239
  if (!m) {
201
240
  forceDocumentUpgrade();
202
241
  m = modules[id];
@@ -208,19 +247,14 @@ return m;
208
247
  }
209
248
  });
210
249
  var cePolyfill = window.CustomElements && !CustomElements.useNative;
211
- if (cePolyfill) {
212
- var ready = CustomElements.ready;
213
- CustomElements.ready = true;
214
- }
215
250
  document.registerElement('dom-module', DomModule);
216
- if (cePolyfill) {
217
- CustomElements.ready = ready;
218
- }
219
251
  function forceDocumentUpgrade() {
220
252
  if (cePolyfill) {
221
253
  var script = document._currentScript || document.currentScript;
222
- if (script) {
223
- CustomElements.upgradeAll(script.ownerDocument);
254
+ var doc = script && script.ownerDocument;
255
+ if (doc && !doc.__customElementsForceUpgraded) {
256
+ doc.__customElementsForceUpgraded = true;
257
+ CustomElements.upgradeAll(doc);
224
258
  }
225
259
  }
226
260
  }
@@ -234,6 +268,9 @@ var id = module.id || module.getAttribute('name') || module.getAttribute('is');
234
268
  this.is = id;
235
269
  }
236
270
  }
271
+ if (this.is) {
272
+ this.is = this.is.toLowerCase();
273
+ }
237
274
  }
238
275
  });
239
276
  Polymer.Base._addFeature({
@@ -521,7 +558,7 @@ debouncer.stop();
521
558
  }
522
559
  }
523
560
  });
524
- Polymer.version = '1.0.8';
561
+ Polymer.version = '1.1.0';
525
562
  Polymer.Base._addFeature({
526
563
  _registerFeatures: function () {
527
564
  this._prepIs();
@@ -14,6 +14,10 @@ this._template = this._template || Polymer.DomModule.import(this.is, 'template')
14
14
  if (this._template && this._template.hasAttribute('is')) {
15
15
  this._warn(this._logf('_prepTemplate', 'top-level Polymer template ' + 'must not be a type-extension, found', this._template, 'Move inside simple <template>.'));
16
16
  }
17
+ if (this._template && !this._template.content && HTMLTemplateElement.bootstrap) {
18
+ HTMLTemplateElement.decorate(this._template);
19
+ HTMLTemplateElement.bootstrap(this._template.content);
20
+ }
17
21
  },
18
22
  _stampTemplate: function () {
19
23
  if (this._template) {
@@ -434,6 +438,14 @@ if (this.patch) {
434
438
  this.patch();
435
439
  }
436
440
  };
441
+ if (window.wrap && Settings.useShadow && !Settings.useNativeShadow) {
442
+ DomApi = function (node) {
443
+ this.node = wrap(node);
444
+ if (this.patch) {
445
+ this.patch();
446
+ }
447
+ };
448
+ }
437
449
  DomApi.prototype = {
438
450
  flush: function () {
439
451
  Polymer.dom.flush();
@@ -446,11 +458,14 @@ Polymer.dom.addDebouncer(host.debounce('_distribute', host._distributeContent));
446
458
  },
447
459
  appendChild: function (node) {
448
460
  var handled;
461
+ this._ensureContentLogicalInfo(node);
449
462
  this._removeNodeFromHost(node, true);
450
463
  if (this._nodeIsInLogicalTree(this.node)) {
451
464
  this._addLogicalInfo(node, this.node);
452
465
  this._addNodeToHost(node);
453
466
  handled = this._maybeDistribute(node, this.node);
467
+ } else {
468
+ this._addNodeToHost(node);
454
469
  }
455
470
  if (!handled && !this._tryRemoveUndistributedNode(node)) {
456
471
  var container = this.node._isShadyRoot ? this.node.host : this.node;
@@ -464,9 +479,9 @@ if (!ref_node) {
464
479
  return this.appendChild(node);
465
480
  }
466
481
  var handled;
482
+ this._ensureContentLogicalInfo(node);
467
483
  this._removeNodeFromHost(node, true);
468
484
  if (this._nodeIsInLogicalTree(this.node)) {
469
- saveLightChildrenIfNeeded(this.node);
470
485
  var children = this.childNodes;
471
486
  var index = children.indexOf(ref_node);
472
487
  if (index < 0) {
@@ -475,6 +490,8 @@ throw Error('The ref_node to be inserted before is not a child ' + 'of this node
475
490
  this._addLogicalInfo(node, this.node, index);
476
491
  this._addNodeToHost(node);
477
492
  handled = this._maybeDistribute(node, this.node);
493
+ } else {
494
+ this._addNodeToHost(node);
478
495
  }
479
496
  if (!handled && !this._tryRemoveUndistributedNode(node)) {
480
497
  ref_node = ref_node.localName === CONTENT ? this._firstComposedNode(ref_node) : ref_node;
@@ -492,6 +509,8 @@ var handled;
492
509
  if (this._nodeIsInLogicalTree(this.node)) {
493
510
  this._removeNodeFromHost(node);
494
511
  handled = this._maybeDistribute(node, this.node);
512
+ } else {
513
+ this._removeNodeFromHost(node);
495
514
  }
496
515
  if (!handled) {
497
516
  var container = this.node._isShadyRoot ? this.node.host : this.node;
@@ -507,6 +526,9 @@ this.insertBefore(node, ref_node);
507
526
  this.removeChild(ref_node);
508
527
  return node;
509
528
  },
529
+ _hasCachedOwnerRoot: function (node) {
530
+ return Boolean(node._ownerShadyRoot !== undefined);
531
+ },
510
532
  getOwnerRoot: function () {
511
533
  return this._ownerShadyRootForNode(this.node);
512
534
  },
@@ -557,10 +579,27 @@ return true;
557
579
  }
558
580
  },
559
581
  _updateInsertionPoints: function (host) {
560
- host.shadyRoot._insertionPoints = factory(host.shadyRoot).querySelectorAll(CONTENT);
582
+ var i$ = host.shadyRoot._insertionPoints = factory(host.shadyRoot).querySelectorAll(CONTENT);
583
+ for (var i = 0, c; i < i$.length; i++) {
584
+ c = i$[i];
585
+ saveLightChildrenIfNeeded(c);
586
+ saveLightChildrenIfNeeded(factory(c).parentNode);
587
+ }
561
588
  },
562
589
  _nodeIsInLogicalTree: function (node) {
563
- return Boolean(node._lightParent !== undefined || node._isShadyRoot || this._ownerShadyRootForNode(node) || node.shadyRoot);
590
+ return Boolean(node._lightParent !== undefined || node._isShadyRoot || node.shadyRoot);
591
+ },
592
+ _ensureContentLogicalInfo: function (node) {
593
+ if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
594
+ saveLightChildrenIfNeeded(this.node);
595
+ var c$ = Array.prototype.slice.call(node.childNodes);
596
+ for (var i = 0, n; i < c$.length && (n = c$[i]); i++) {
597
+ this._ensureContentLogicalInfo(n);
598
+ }
599
+ } else if (node.localName === CONTENT) {
600
+ saveLightChildrenIfNeeded(this.node);
601
+ saveLightChildrenIfNeeded(node);
602
+ }
564
603
  },
565
604
  _parentNeedsDistribution: function (parent) {
566
605
  return parent && parent.shadyRoot && hasInsertionPoint(parent.shadyRoot);
@@ -614,14 +653,12 @@ node = factory(node).parentNode;
614
653
  }
615
654
  },
616
655
  _addNodeToHost: function (node) {
617
- var checkNode = node.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? node.firstChild : node;
618
- var root = this._ownerShadyRootForNode(checkNode);
656
+ var root = this.getOwnerRoot();
619
657
  if (root) {
620
658
  root.host._elementAdd(node);
621
659
  }
622
660
  },
623
661
  _addLogicalInfo: function (node, container, index) {
624
- saveLightChildrenIfNeeded(container);
625
662
  var children = factory(container).childNodes;
626
663
  index = index === undefined ? children.length : index;
627
664
  if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
@@ -645,8 +682,7 @@ children.splice(index, 1);
645
682
  node._lightParent = null;
646
683
  },
647
684
  _removeOwnerShadyRoot: function (node) {
648
- var hasCachedRoot = factory(node).getOwnerRoot() !== undefined;
649
- if (hasCachedRoot) {
685
+ if (this._hasCachedOwnerRoot(node)) {
650
686
  var c$ = factory(node).childNodes;
651
687
  for (var i = 0, l = c$.length, n; i < l && (n = c$[i]); i++) {
652
688
  this._removeOwnerShadyRoot(n);
@@ -1149,8 +1185,13 @@ this.shadyRoot = this.root;
1149
1185
  this.shadyRoot._distributionClean = false;
1150
1186
  this.shadyRoot._isShadyRoot = true;
1151
1187
  this.shadyRoot._dirtyRoots = [];
1152
- this.shadyRoot._insertionPoints = !this._notes || this._notes._hasContent ? this.shadyRoot.querySelectorAll('content') : [];
1188
+ var i$ = this.shadyRoot._insertionPoints = !this._notes || this._notes._hasContent ? this.shadyRoot.querySelectorAll('content') : [];
1153
1189
  saveLightChildrenIfNeeded(this.shadyRoot);
1190
+ for (var i = 0, c; i < i$.length; i++) {
1191
+ c = i$[i];
1192
+ saveLightChildrenIfNeeded(c);
1193
+ saveLightChildrenIfNeeded(c.parentNode);
1194
+ }
1154
1195
  this.shadyRoot.host = this;
1155
1196
  },
1156
1197
  get domHost() {
@@ -1385,14 +1426,12 @@ if (newChildParent !== parentNode) {
1385
1426
  removeFromComposedParent(newChildParent, newChild);
1386
1427
  }
1387
1428
  remove(newChild);
1388
- saveLightChildrenIfNeeded(parentNode);
1389
1429
  nativeInsertBefore.call(parentNode, newChild, refChild || null);
1390
1430
  newChild._composedParent = parentNode;
1391
1431
  }
1392
1432
  function remove(node) {
1393
1433
  var parentNode = getComposedParent(node);
1394
1434
  if (parentNode) {
1395
- saveLightChildrenIfNeeded(parentNode);
1396
1435
  node._composedParent = null;
1397
1436
  nativeRemoveChild.call(parentNode, node);
1398
1437
  }
@@ -424,6 +424,19 @@ var MOUSE_EVENTS = [
424
424
  'mouseup',
425
425
  'click'
426
426
  ];
427
+ var MOUSE_WHICH_TO_BUTTONS = [
428
+ 0,
429
+ 1,
430
+ 4,
431
+ 2
432
+ ];
433
+ var MOUSE_HAS_BUTTONS = function () {
434
+ try {
435
+ return new MouseEvent('test', { buttons: 1 }).buttons === 1;
436
+ } catch (e) {
437
+ return false;
438
+ }
439
+ }();
427
440
  var IS_TOUCH_ONLY = navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);
428
441
  var mouseCanceller = function (mouseEvent) {
429
442
  mouseEvent[HANDLED_OBJ] = { skip: true };
@@ -462,6 +475,34 @@ POINTERSTATE.mouse.mouseIgnoreJob = null;
462
475
  };
463
476
  POINTERSTATE.mouse.mouseIgnoreJob = Polymer.Debounce(POINTERSTATE.mouse.mouseIgnoreJob, unset, MOUSE_TIMEOUT);
464
477
  }
478
+ function hasLeftMouseButton(ev) {
479
+ var type = ev.type;
480
+ if (MOUSE_EVENTS.indexOf(type) === -1) {
481
+ return false;
482
+ }
483
+ if (type === 'mousemove') {
484
+ var buttons = ev.buttons === undefined ? 1 : ev.buttons;
485
+ if (ev instanceof window.MouseEvent && !MOUSE_HAS_BUTTONS) {
486
+ buttons = MOUSE_WHICH_TO_BUTTONS[ev.which] || 0;
487
+ }
488
+ return Boolean(buttons & 1);
489
+ } else {
490
+ var button = ev.button === undefined ? 0 : ev.button;
491
+ return button === 0;
492
+ }
493
+ }
494
+ function isSyntheticClick(ev) {
495
+ if (ev.type === 'click') {
496
+ if (ev.detail === 0) {
497
+ return true;
498
+ }
499
+ var t = Gestures.findOriginalTarget(ev);
500
+ var bcr = t.getBoundingClientRect();
501
+ var x = ev.pageX, y = ev.pageY;
502
+ return !(x >= bcr.left && x <= bcr.right && (y >= bcr.top && y <= bcr.bottom));
503
+ }
504
+ return false;
505
+ }
465
506
  var POINTERSTATE = {
466
507
  mouse: {
467
508
  target: null,
@@ -486,6 +527,16 @@ break;
486
527
  }
487
528
  return ta;
488
529
  }
530
+ function trackDocument(stateObj, movefn, upfn) {
531
+ stateObj.movefn = movefn;
532
+ stateObj.upfn = upfn;
533
+ document.addEventListener('mousemove', movefn);
534
+ document.addEventListener('mouseup', upfn);
535
+ }
536
+ function untrackDocument(stateObj) {
537
+ document.removeEventListener('mousemove', stateObj.movefn);
538
+ document.removeEventListener('mouseup', stateObj.upfn);
539
+ }
489
540
  var Gestures = {
490
541
  gestures: {},
491
542
  recognizers: [],
@@ -691,18 +742,48 @@ deps: [
691
742
  'touchstart',
692
743
  'touchend'
693
744
  ],
745
+ flow: {
746
+ start: [
747
+ 'mousedown',
748
+ 'touchstart'
749
+ ],
750
+ end: [
751
+ 'mouseup',
752
+ 'touchend'
753
+ ]
754
+ },
694
755
  emits: [
695
756
  'down',
696
757
  'up'
697
758
  ],
759
+ info: {
760
+ movefn: function () {
761
+ },
762
+ upfn: function () {
763
+ }
764
+ },
765
+ reset: function () {
766
+ untrackDocument(this.info);
767
+ },
698
768
  mousedown: function (e) {
769
+ if (!hasLeftMouseButton(e)) {
770
+ return;
771
+ }
699
772
  var t = Gestures.findOriginalTarget(e);
700
773
  var self = this;
774
+ var movefn = function movefn(e) {
775
+ if (!hasLeftMouseButton(e)) {
776
+ self.fire('up', t, e);
777
+ untrackDocument(self.info);
778
+ }
779
+ };
701
780
  var upfn = function upfn(e) {
781
+ if (hasLeftMouseButton(e)) {
702
782
  self.fire('up', t, e);
703
- document.removeEventListener('mouseup', upfn);
783
+ }
784
+ untrackDocument(self.info);
704
785
  };
705
- document.addEventListener('mouseup', upfn);
786
+ trackDocument(this.info, movefn, upfn);
706
787
  this.fire('down', t, e);
707
788
  },
708
789
  touchstart: function (e) {
@@ -753,6 +834,10 @@ this.moves.shift();
753
834
  }
754
835
  this.moves.push(move);
755
836
  },
837
+ movefn: function () {
838
+ },
839
+ upfn: function () {
840
+ },
756
841
  prevent: false
757
842
  },
758
843
  reset: function () {
@@ -762,6 +847,7 @@ this.info.moves = [];
762
847
  this.info.x = 0;
763
848
  this.info.y = 0;
764
849
  this.info.prevent = false;
850
+ untrackDocument(this.info);
765
851
  },
766
852
  hasMovedEnough: function (x, y) {
767
853
  if (this.info.prevent) {
@@ -775,6 +861,9 @@ var dy = Math.abs(this.info.y - y);
775
861
  return dx >= TRACK_DISTANCE || dy >= TRACK_DISTANCE;
776
862
  },
777
863
  mousedown: function (e) {
864
+ if (!hasLeftMouseButton(e)) {
865
+ return;
866
+ }
778
867
  var t = Gestures.findOriginalTarget(e);
779
868
  var self = this;
780
869
  var movefn = function movefn(e) {
@@ -785,6 +874,10 @@ self.info.addMove({
785
874
  x: x,
786
875
  y: y
787
876
  });
877
+ if (!hasLeftMouseButton(e)) {
878
+ self.info.state = 'end';
879
+ untrackDocument(self.info);
880
+ }
788
881
  self.fire(t, e);
789
882
  self.info.started = true;
790
883
  }
@@ -794,11 +887,9 @@ if (self.info.started) {
794
887
  Gestures.prevent('tap');
795
888
  movefn(e);
796
889
  }
797
- document.removeEventListener('mousemove', movefn);
798
- document.removeEventListener('mouseup', upfn);
890
+ untrackDocument(self.info);
799
891
  };
800
- document.addEventListener('mousemove', movefn);
801
- document.addEventListener('mouseup', upfn);
892
+ trackDocument(this.info, movefn, upfn);
802
893
  this.info.x = e.clientX;
803
894
  this.info.y = e.clientY;
804
895
  },
@@ -893,10 +984,14 @@ this.info.x = e.clientX;
893
984
  this.info.y = e.clientY;
894
985
  },
895
986
  mousedown: function (e) {
987
+ if (hasLeftMouseButton(e)) {
896
988
  this.save(e);
989
+ }
897
990
  },
898
991
  click: function (e) {
992
+ if (hasLeftMouseButton(e)) {
899
993
  this.forward(e);
994
+ }
900
995
  },
901
996
  touchstart: function (e) {
902
997
  this.save(e.changedTouches[0]);
@@ -908,7 +1003,7 @@ forward: function (e) {
908
1003
  var dx = Math.abs(e.clientX - this.info.x);
909
1004
  var dy = Math.abs(e.clientY - this.info.y);
910
1005
  var t = Gestures.findOriginalTarget(e);
911
- if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE) {
1006
+ if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE || isSyntheticClick(e)) {
912
1007
  if (!this.info.prevent) {
913
1008
  Gestures.fire(t, 'tap', {
914
1009
  x: e.clientX,
@@ -1529,7 +1624,7 @@ trigger: trigger
1529
1624
  });
1530
1625
  },
1531
1626
  _parseMethod: function (expression) {
1532
- var m = expression.match(/(\w*)\((.*)\)/);
1627
+ var m = expression.match(/([^\s]+)\((.*)\)/);
1533
1628
  if (m) {
1534
1629
  var sig = {
1535
1630
  method: m[1],
@@ -1624,6 +1719,10 @@ this._handlers = [];
1624
1719
  _marshalAttributes: function () {
1625
1720
  this._takeAttributesToModel(this._config);
1626
1721
  },
1722
+ _attributeChangedImpl: function (name) {
1723
+ var model = this._clientsReadied ? this : this._config;
1724
+ this._setAttributeToProperty(model, name);
1725
+ },
1627
1726
  _configValue: function (name, value) {
1628
1727
  this._config[name] = value;
1629
1728
  },
@@ -1903,36 +2002,56 @@ var array = this.get(path);
1903
2002
  var args = Array.prototype.slice.call(arguments, 1);
1904
2003
  var len = array.length;
1905
2004
  var ret = array.push.apply(array, args);
2005
+ if (args.length) {
1906
2006
  this._notifySplice(array, path, len, args.length, []);
2007
+ }
1907
2008
  return ret;
1908
2009
  },
1909
2010
  pop: function (path) {
1910
2011
  var array = this.get(path);
2012
+ var hadLength = Boolean(array.length);
1911
2013
  var args = Array.prototype.slice.call(arguments, 1);
1912
- var rem = array.slice(-1);
1913
2014
  var ret = array.pop.apply(array, args);
1914
- this._notifySplice(array, path, array.length, 0, rem);
2015
+ if (hadLength) {
2016
+ this._notifySplice(array, path, array.length, 0, [ret]);
2017
+ }
1915
2018
  return ret;
1916
2019
  },
1917
2020
  splice: function (path, start, deleteCount) {
1918
2021
  var array = this.get(path);
2022
+ if (start < 0) {
2023
+ start = array.length - Math.floor(-start);
2024
+ } else {
2025
+ start = Math.floor(start);
2026
+ }
2027
+ if (!start) {
2028
+ start = 0;
2029
+ }
1919
2030
  var args = Array.prototype.slice.call(arguments, 1);
1920
2031
  var ret = array.splice.apply(array, args);
1921
- this._notifySplice(array, path, start, args.length - 2, ret);
2032
+ var addedCount = Math.max(args.length - 2, 0);
2033
+ if (addedCount || ret.length) {
2034
+ this._notifySplice(array, path, start, addedCount, ret);
2035
+ }
1922
2036
  return ret;
1923
2037
  },
1924
2038
  shift: function (path) {
1925
2039
  var array = this.get(path);
2040
+ var hadLength = Boolean(array.length);
1926
2041
  var args = Array.prototype.slice.call(arguments, 1);
1927
2042
  var ret = array.shift.apply(array, args);
2043
+ if (hadLength) {
1928
2044
  this._notifySplice(array, path, 0, 0, [ret]);
2045
+ }
1929
2046
  return ret;
1930
2047
  },
1931
2048
  unshift: function (path) {
1932
2049
  var array = this.get(path);
1933
2050
  var args = Array.prototype.slice.call(arguments, 1);
1934
2051
  var ret = array.unshift.apply(array, args);
2052
+ if (args.length) {
1935
2053
  this._notifySplice(array, path, 0, args.length, []);
2054
+ }
1936
2055
  return ret;
1937
2056
  }
1938
2057
  });
@@ -1955,7 +2074,7 @@ text = this._clean(text);
1955
2074
  return this._parseCss(this._lex(text), text);
1956
2075
  },
1957
2076
  _clean: function (cssText) {
1958
- return cssText.replace(rx.comments, '').replace(rx.port, '');
2077
+ return cssText.replace(this._rx.comments, '').replace(this._rx.port, '');
1959
2078
  },
1960
2079
  _lex: function (text) {
1961
2080
  var root = {
@@ -1994,15 +2113,15 @@ var ss = node.previous ? node.previous.end : node.parent.start;
1994
2113
  t = text.substring(ss, node.start - 1);
1995
2114
  t = t.substring(t.lastIndexOf(';') + 1);
1996
2115
  var s = node.parsedSelector = node.selector = t.trim();
1997
- node.atRule = s.indexOf(AT_START) === 0;
2116
+ node.atRule = s.indexOf(this.AT_START) === 0;
1998
2117
  if (node.atRule) {
1999
- if (s.indexOf(MEDIA_START) === 0) {
2118
+ if (s.indexOf(this.MEDIA_START) === 0) {
2000
2119
  node.type = this.types.MEDIA_RULE;
2001
- } else if (s.match(rx.keyframesRule)) {
2120
+ } else if (s.match(this._rx.keyframesRule)) {
2002
2121
  node.type = this.types.KEYFRAMES_RULE;
2003
2122
  }
2004
2123
  } else {
2005
- if (s.indexOf(VAR_START) === 0) {
2124
+ if (s.indexOf(this.VAR_START) === 0) {
2006
2125
  node.type = this.types.MIXIN_RULE;
2007
2126
  } else {
2008
2127
  node.type = this.types.STYLE_RULE;
@@ -2022,12 +2141,12 @@ text = text || '';
2022
2141
  var cssText = '';
2023
2142
  if (node.cssText || node.rules) {
2024
2143
  var r$ = node.rules;
2025
- if (r$ && (preserveProperties || !hasMixinRules(r$))) {
2144
+ if (r$ && (preserveProperties || !this._hasMixinRules(r$))) {
2026
2145
  for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) {
2027
2146
  cssText = this.stringify(r, preserveProperties, cssText);
2028
2147
  }
2029
2148
  } else {
2030
- cssText = preserveProperties ? node.cssText : removeCustomProps(node.cssText);
2149
+ cssText = preserveProperties ? node.cssText : this.removeCustomProps(node.cssText);
2031
2150
  cssText = cssText.trim();
2032
2151
  if (cssText) {
2033
2152
  cssText = ' ' + cssText + '\n';
@@ -2045,6 +2164,19 @@ text += this.CLOSE_BRACE + '\n\n';
2045
2164
  }
2046
2165
  return text;
2047
2166
  },
2167
+ _hasMixinRules: function (rules) {
2168
+ return rules[0].selector.indexOf(this.VAR_START) >= 0;
2169
+ },
2170
+ removeCustomProps: function (cssText) {
2171
+ cssText = this.removeCustomPropAssignment(cssText);
2172
+ return this.removeCustomPropApply(cssText);
2173
+ },
2174
+ removeCustomPropAssignment: function (cssText) {
2175
+ return cssText.replace(this._rx.customProp, '').replace(this._rx.mixinProp, '');
2176
+ },
2177
+ removeCustomPropApply: function (cssText) {
2178
+ return cssText.replace(this._rx.mixinApply, '').replace(this._rx.varApply, '');
2179
+ },
2048
2180
  types: {
2049
2181
  STYLE_RULE: 1,
2050
2182
  KEYFRAMES_RULE: 7,
@@ -2052,31 +2184,26 @@ MEDIA_RULE: 4,
2052
2184
  MIXIN_RULE: 1000
2053
2185
  },
2054
2186
  OPEN_BRACE: '{',
2055
- CLOSE_BRACE: '}'
2056
- };
2057
- function hasMixinRules(rules) {
2058
- return rules[0].selector.indexOf(VAR_START) >= 0;
2059
- }
2060
- function removeCustomProps(cssText) {
2061
- return cssText.replace(rx.customProp, '').replace(rx.mixinProp, '').replace(rx.mixinApply, '').replace(rx.varApply, '');
2062
- }
2063
- var VAR_START = '--';
2064
- var MEDIA_START = '@media';
2065
- var AT_START = '@';
2066
- var rx = {
2067
- comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,
2187
+ CLOSE_BRACE: '}',
2188
+ _rx: {
2189
+ comments: /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
2068
2190
  port: /@import[^;]*;/gim,
2069
2191
  customProp: /(?:^|[\s;])--[^;{]*?:[^{};]*?(?:[;\n]|$)/gim,
2070
2192
  mixinProp: /(?:^|[\s;])--[^;{]*?:[^{;]*?{[^}]*?}(?:[;\n]|$)?/gim,
2071
2193
  mixinApply: /@apply[\s]*\([^)]*?\)[\s]*(?:[;\n]|$)?/gim,
2072
2194
  varApply: /[^;:]*?:[^;]*var[^;]*(?:[;\n]|$)?/gim,
2073
2195
  keyframesRule: /^@[^\s]*keyframes/
2196
+ },
2197
+ VAR_START: '--',
2198
+ MEDIA_START: '@media',
2199
+ AT_START: '@'
2074
2200
  };
2075
2201
  return api;
2076
2202
  }();
2077
2203
  Polymer.StyleUtil = function () {
2078
2204
  return {
2079
- MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css]',
2205
+ MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css], template',
2206
+ INCLUDE_ATTR: 'include',
2080
2207
  toCssText: function (rules, callback, preserveProperties) {
2081
2208
  if (typeof rules === 'string') {
2082
2209
  rules = this.parser.parse(rules);
@@ -2103,7 +2230,7 @@ clearStyleRules: function (style) {
2103
2230
  style.__cssRules = null;
2104
2231
  },
2105
2232
  forEachStyleRule: function (node, callback) {
2106
- var s = node.selector;
2233
+ var s = node.parsedSelector;
2107
2234
  var skipRules = false;
2108
2235
  if (node.type === this.ruleTypes.STYLE_RULE) {
2109
2236
  callback(node);
@@ -2131,27 +2258,52 @@ afterNode = n$[n$.length - 1];
2131
2258
  target.insertBefore(style, afterNode && afterNode.nextSibling || target.firstChild);
2132
2259
  return style;
2133
2260
  },
2261
+ cssFromModules: function (moduleIds) {
2262
+ var modules = moduleIds.trim().split(' ');
2263
+ var cssText = '';
2264
+ for (var i = 0; i < modules.length; i++) {
2265
+ cssText += this.cssFromModule(modules[i]);
2266
+ }
2267
+ return cssText;
2268
+ },
2134
2269
  cssFromModule: function (moduleId) {
2135
2270
  var m = Polymer.DomModule.import(moduleId);
2136
2271
  if (m && !m._cssText) {
2272
+ m._cssText = this._cssFromElement(m);
2273
+ }
2274
+ return m && m._cssText || '';
2275
+ },
2276
+ _cssFromElement: function (element) {
2137
2277
  var cssText = '';
2138
- var e$ = Array.prototype.slice.call(m.querySelectorAll(this.MODULE_STYLES_SELECTOR));
2139
- for (var i = 0, e; i < e$.length; i++) {
2278
+ var content = element.content || element;
2279
+ var sourceDoc = element.ownerDocument;
2280
+ var e$ = Array.prototype.slice.call(content.querySelectorAll(this.MODULE_STYLES_SELECTOR));
2281
+ for (var i = 0, e, resolveDoc, addModule; i < e$.length; i++) {
2140
2282
  e = e$[i];
2283
+ resolveDoc = sourceDoc;
2284
+ addModule = null;
2285
+ if (e.localName === 'template') {
2286
+ cssText += this._cssFromElement(e);
2287
+ } else {
2141
2288
  if (e.localName === 'style') {
2289
+ addModule = e.getAttribute(this.INCLUDE_ATTR);
2142
2290
  e = e.__appliedElement || e;
2143
2291
  e.parentNode.removeChild(e);
2144
2292
  } else {
2145
2293
  e = e.import && e.import.body;
2294
+ resolveDoc = e.ownerDocument;
2146
2295
  }
2147
2296
  if (e) {
2148
- cssText += Polymer.ResolveUrl.resolveCss(e.textContent, e.ownerDocument);
2297
+ cssText += this.resolveCss(e.textContent, resolveDoc);
2149
2298
  }
2150
2299
  }
2151
- m._cssText = cssText;
2300
+ if (addModule) {
2301
+ cssText += this.cssFromModules(addModule);
2152
2302
  }
2153
- return m && m._cssText || '';
2303
+ }
2304
+ return cssText;
2154
2305
  },
2306
+ resolveCss: Polymer.ResolveUrl.resolveCss,
2155
2307
  parser: Polymer.CssParse,
2156
2308
  ruleTypes: Polymer.CssParse.types
2157
2309
  };
@@ -2243,7 +2395,7 @@ var p$ = rule.selector.split(COMPLEX_SELECTOR_SEP);
2243
2395
  for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) {
2244
2396
  p$[i] = transformer.call(this, p, scope, hostScope);
2245
2397
  }
2246
- rule.selector = p$.join(COMPLEX_SELECTOR_SEP);
2398
+ rule.selector = rule.transformedSelector = p$.join(COMPLEX_SELECTOR_SEP);
2247
2399
  },
2248
2400
  _transformComplexSelector: function (selector, scope, hostScope) {
2249
2401
  var stop = false;
@@ -2598,7 +2750,8 @@ return property && property.trim() || '';
2598
2750
  },
2599
2751
  valueForProperties: function (property, props) {
2600
2752
  var parts = property.split(';');
2601
- for (var i = 0, p, m; i < parts.length && (p = parts[i]); i++) {
2753
+ for (var i = 0, p, m; i < parts.length; i++) {
2754
+ if (p = parts[i]) {
2602
2755
  m = p.match(this.rx.MIXIN_MATCH);
2603
2756
  if (m) {
2604
2757
  p = this.valueForProperty(props[m[1]], props);
@@ -2612,6 +2765,7 @@ p = pp.join(':');
2612
2765
  }
2613
2766
  parts[i] = p && p.lastIndexOf(';') === p.length - 1 ? p.slice(0, -1) : p || '';
2614
2767
  }
2768
+ }
2615
2769
  return parts.join(';');
2616
2770
  },
2617
2771
  applyProperties: function (rule, props) {
@@ -2631,7 +2785,7 @@ styleUtil.forRulesInStyles(styles, function (rule) {
2631
2785
  if (!rule.propertyInfo) {
2632
2786
  self.decorateRule(rule);
2633
2787
  }
2634
- if (element && rule.propertyInfo.properties && matchesSelector.call(element, rule.selector)) {
2788
+ if (element && rule.propertyInfo.properties && matchesSelector.call(element, rule.transformedSelector || rule.parsedSelector)) {
2635
2789
  self.collectProperties(rule, props);
2636
2790
  addToBitMask(i, o);
2637
2791
  }
@@ -3029,9 +3183,9 @@ this._pushHost();
3029
3183
  this._stampTemplate();
3030
3184
  this._popHost();
3031
3185
  this._marshalAnnotationReferences();
3032
- this._marshalHostAttributes();
3033
3186
  this._setupDebouncers();
3034
3187
  this._marshalInstanceEffects();
3188
+ this._marshalHostAttributes();
3035
3189
  this._marshalBehaviors();
3036
3190
  this._marshalAttributes();
3037
3191
  this._tryReady();
@@ -3044,12 +3198,14 @@ this._listenListeners(b.listeners);
3044
3198
  var nativeShadow = Polymer.Settings.useNativeShadow;
3045
3199
  var propertyUtils = Polymer.StyleProperties;
3046
3200
  var styleUtil = Polymer.StyleUtil;
3201
+ var cssParse = Polymer.CssParse;
3047
3202
  var styleDefaults = Polymer.StyleDefaults;
3048
3203
  var styleTransformer = Polymer.StyleTransformer;
3049
3204
  Polymer({
3050
3205
  is: 'custom-style',
3051
3206
  extends: 'style',
3052
- created: function () {
3207
+ properties: { include: String },
3208
+ ready: function () {
3053
3209
  this._tryApply();
3054
3210
  },
3055
3211
  attached: function () {
@@ -3061,7 +3217,7 @@ if (this.parentNode && this.parentNode.localName !== 'dom-module') {
3061
3217
  this._appliesToDocument = true;
3062
3218
  var e = this.__appliedElement || this;
3063
3219
  styleDefaults.addStyle(e);
3064
- if (e.textContent) {
3220
+ if (e.textContent || this.include) {
3065
3221
  this._apply();
3066
3222
  } else {
3067
3223
  var observer = new MutationObserver(function () {
@@ -3075,13 +3231,16 @@ observer.observe(e, { childList: true });
3075
3231
  },
3076
3232
  _apply: function () {
3077
3233
  var e = this.__appliedElement || this;
3234
+ if (this.include) {
3235
+ e.textContent += styleUtil.cssFromModules(this.include);
3236
+ }
3078
3237
  this._computeStyleProperties();
3079
3238
  var props = this._styleProperties;
3080
3239
  var self = this;
3081
3240
  e.textContent = styleUtil.toCssText(styleUtil.rulesForStyle(e), function (rule) {
3082
3241
  var css = rule.cssText = rule.parsedCssText;
3083
3242
  if (rule.propertyInfo && rule.propertyInfo.cssText) {
3084
- css = css.replace(propertyUtils.rx.VAR_ASSIGN, '');
3243
+ css = cssParse.removeCustomPropAssignment(css);
3085
3244
  rule.cssText = propertyUtils.valueForProperties(css, props);
3086
3245
  }
3087
3246
  styleTransformer.documentRule(rule);
@@ -3129,10 +3288,24 @@ _showHideChildrenImpl: function (hide) {
3129
3288
  var c = this._children;
3130
3289
  for (var i = 0; i < c.length; i++) {
3131
3290
  var n = c[i];
3132
- if (n.style) {
3133
- n.style.display = hide ? 'none' : '';
3134
- n.__hideTemplateChildren__ = hide;
3291
+ if (Boolean(hide) != Boolean(n.__hideTemplateChildren__)) {
3292
+ if (n.nodeType === Node.TEXT_NODE) {
3293
+ if (hide) {
3294
+ n.__polymerTextContent__ = n.textContent;
3295
+ n.textContent = '';
3296
+ } else {
3297
+ n.textContent = n.__polymerTextContent__;
3135
3298
  }
3299
+ } else if (n.style) {
3300
+ if (hide) {
3301
+ n.__polymerDisplay__ = n.style.display;
3302
+ n.style.display = 'none';
3303
+ } else {
3304
+ n.style.display = n.__polymerDisplay__;
3305
+ }
3306
+ }
3307
+ }
3308
+ n.__hideTemplateChildren__ = hide;
3136
3309
  }
3137
3310
  },
3138
3311
  _debounceTemplate: function (fn) {
@@ -3398,29 +3571,36 @@ items.push(store[key]);
3398
3571
  return items;
3399
3572
  },
3400
3573
  _applySplices: function (splices) {
3401
- var keySplices = [];
3402
- for (var i = 0; i < splices.length; i++) {
3403
- var j, o, key, s = splices[i];
3574
+ var keyMap = {}, key, i;
3575
+ splices.forEach(function (s) {
3576
+ s.addedKeys = [];
3577
+ for (i = 0; i < s.removed.length; i++) {
3578
+ key = this.getKey(s.removed[i]);
3579
+ keyMap[key] = keyMap[key] ? null : -1;
3580
+ }
3581
+ for (i = 0; i < s.addedCount; i++) {
3582
+ var item = this.userArray[s.index + i];
3583
+ key = this.getKey(item);
3584
+ key = key === undefined ? this.add(item) : key;
3585
+ keyMap[key] = keyMap[key] ? null : 1;
3586
+ s.addedKeys.push(key);
3587
+ }
3588
+ }, this);
3404
3589
  var removed = [];
3405
- for (j = 0; j < s.removed.length; j++) {
3406
- o = s.removed[j];
3407
- key = this.remove(o);
3590
+ var added = [];
3591
+ for (var key in keyMap) {
3592
+ if (keyMap[key] < 0) {
3593
+ this.removeKey(key);
3408
3594
  removed.push(key);
3409
3595
  }
3410
- var added = [];
3411
- for (j = 0; j < s.addedCount; j++) {
3412
- o = this.userArray[s.index + j];
3413
- key = this.add(o);
3596
+ if (keyMap[key] > 0) {
3414
3597
  added.push(key);
3415
3598
  }
3416
- keySplices.push({
3417
- index: s.index,
3599
+ }
3600
+ return [{
3418
3601
  removed: removed,
3419
- removedItems: s.removed,
3420
3602
  added: added
3421
- });
3422
- }
3423
- return keySplices;
3603
+ }];
3424
3604
  }
3425
3605
  };
3426
3606
  Polymer.Collection.get = function (userArray) {
@@ -3515,11 +3695,13 @@ this.collection = null;
3515
3695
  } else {
3516
3696
  this._error(this._logf('dom-repeat', 'expected array for `items`,' + ' found', this.items));
3517
3697
  }
3518
- this._splices = [];
3698
+ this._keySplices = [];
3699
+ this._indexSplices = [];
3519
3700
  this._needFullRefresh = true;
3520
3701
  this._debounceTemplate(this._render);
3521
3702
  } else if (change.path == 'items.splices') {
3522
- this._splices = this._splices.concat(change.value.keySplices);
3703
+ this._keySplices = this._keySplices.concat(change.value.keySplices);
3704
+ this._indexSplices = this._indexSplices.concat(change.value.indexSplices);
3523
3705
  this._debounceTemplate(this._render);
3524
3706
  } else {
3525
3707
  var subpath = change.path.slice(6);
@@ -3556,16 +3738,17 @@ this._applyFullRefresh();
3556
3738
  this._needFullRefresh = false;
3557
3739
  } else {
3558
3740
  if (this._sortFn) {
3559
- this._applySplicesUserSort(this._splices);
3741
+ this._applySplicesUserSort(this._keySplices);
3560
3742
  } else {
3561
3743
  if (this._filterFn) {
3562
3744
  this._applyFullRefresh();
3563
3745
  } else {
3564
- this._applySplicesArrayOrder(this._splices);
3746
+ this._applySplicesArrayOrder(this._indexSplices);
3565
3747
  }
3566
3748
  }
3567
3749
  }
3568
- this._splices = [];
3750
+ this._keySplices = [];
3751
+ this._indexSplices = [];
3569
3752
  var keyToIdx = this._keyToInstIdx = {};
3570
3753
  for (var i = 0; i < this._instances.length; i++) {
3571
3754
  var inst = this._instances[i];
@@ -3703,10 +3886,10 @@ pool.push(inst);
3703
3886
  }
3704
3887
  }
3705
3888
  this._instances.splice(s.index, s.removed.length);
3706
- for (var i = 0; i < s.added.length; i++) {
3889
+ for (var i = 0; i < s.addedKeys.length; i++) {
3707
3890
  var inst = {
3708
3891
  isPlaceholder: true,
3709
- key: s.added[i]
3892
+ key: s.addedKeys[i]
3710
3893
  };
3711
3894
  this._instances.splice(s.index + i, 0, inst);
3712
3895
  }
@@ -3815,16 +3998,23 @@ is: 'array-selector',
3815
3998
  properties: {
3816
3999
  items: {
3817
4000
  type: Array,
3818
- observer: '_itemsChanged'
4001
+ observer: 'clearSelection'
4002
+ },
4003
+ multi: {
4004
+ type: Boolean,
4005
+ value: false,
4006
+ observer: 'clearSelection'
3819
4007
  },
3820
4008
  selected: {
3821
4009
  type: Object,
3822
4010
  notify: true
3823
4011
  },
3824
- toggle: Boolean,
3825
- multi: Boolean
4012
+ toggle: {
4013
+ type: Boolean,
4014
+ value: false
4015
+ }
3826
4016
  },
3827
- _itemsChanged: function () {
4017
+ clearSelection: function () {
3828
4018
  if (Array.isArray(this.selected)) {
3829
4019
  for (var i = 0; i < this.selected.length; i++) {
3830
4020
  this.unlinkPaths('selected.' + i);
@@ -3833,20 +4023,28 @@ this.unlinkPaths('selected.' + i);
3833
4023
  this.unlinkPaths('selected');
3834
4024
  }
3835
4025
  if (this.multi) {
4026
+ if (!this.selected || this.selected.length) {
3836
4027
  this.selected = [];
4028
+ this._selectedColl = Polymer.Collection.get(this.selected);
4029
+ }
3837
4030
  } else {
3838
4031
  this.selected = null;
4032
+ this._selectedColl = null;
4033
+ }
4034
+ },
4035
+ isSelected: function (item) {
4036
+ if (this.multi) {
4037
+ return this._selectedColl.getKey(item) !== undefined;
4038
+ } else {
4039
+ return this.selected == item;
3839
4040
  }
3840
4041
  },
3841
4042
  deselect: function (item) {
3842
4043
  if (this.multi) {
3843
- var scol = Polymer.Collection.get(this.selected);
3844
- var sidx = this.selected.indexOf(item);
3845
- if (sidx >= 0) {
3846
- var skey = scol.getKey(item);
3847
- this.splice('selected', sidx, 1);
4044
+ if (this.isSelected(item)) {
4045
+ var skey = this._selectedColl.getKey(item);
4046
+ this.arrayDelete('selected', item);
3848
4047
  this.unlinkPaths('selected.' + skey);
3849
- return true;
3850
4048
  }
3851
4049
  } else {
3852
4050
  this.selected = null;
@@ -3857,18 +4055,14 @@ select: function (item) {
3857
4055
  var icol = Polymer.Collection.get(this.items);
3858
4056
  var key = icol.getKey(item);
3859
4057
  if (this.multi) {
3860
- var scol = Polymer.Collection.get(this.selected);
3861
- var skey = scol.getKey(item);
3862
- if (skey >= 0) {
4058
+ if (this.isSelected(item)) {
3863
4059
  if (this.toggle) {
3864
4060
  this.deselect(item);
3865
4061
  }
3866
4062
  } else {
3867
4063
  this.push('selected', item);
3868
- this.async(function () {
3869
- skey = scol.getKey(item);
4064
+ skey = this._selectedColl.getKey(item);
3870
4065
  this.linkPaths('selected.' + skey, 'items.' + key);
3871
- });
3872
4066
  }
3873
4067
  } else {
3874
4068
  if (this.toggle && item == this.selected) {
@@ -3913,7 +4107,6 @@ this._flushTemplates();
3913
4107
  _render: function () {
3914
4108
  if (this.if) {
3915
4109
  if (!this.ctor) {
3916
- this._wrapTextNodes(this._content || this.content);
3917
4110
  this.templatize(this);
3918
4111
  }
3919
4112
  this._ensureInstance();
@@ -3949,16 +4142,6 @@ parent.removeChild(n);
3949
4142
  this._instance = null;
3950
4143
  }
3951
4144
  },
3952
- _wrapTextNodes: function (root) {
3953
- for (var n = root.firstChild; n; n = n.nextSibling) {
3954
- if (n.nodeType === Node.TEXT_NODE && n.textContent.trim()) {
3955
- var s = document.createElement('span');
3956
- root.insertBefore(s, n);
3957
- s.appendChild(n);
3958
- n = s;
3959
- }
3960
- }
3961
- },
3962
4145
  _showHideChildren: function () {
3963
4146
  var hidden = this.__hideTemplateChildren__ || !this.if;
3964
4147
  if (this._instance) {
@@ -3976,37 +4159,11 @@ this._instance.notifyPath(path, value, true);
3976
4159
  }
3977
4160
  }
3978
4161
  });
3979
- Polymer.ImportStatus = {
3980
- _ready: false,
3981
- _callbacks: [],
3982
- whenLoaded: function (cb) {
3983
- if (this._ready) {
3984
- cb();
3985
- } else {
3986
- this._callbacks.push(cb);
3987
- }
3988
- },
3989
- _importsLoaded: function () {
3990
- this._ready = true;
3991
- this._callbacks.forEach(function (cb) {
3992
- cb();
3993
- });
3994
- this._callbacks = [];
3995
- }
3996
- };
3997
- window.addEventListener('load', function () {
3998
- Polymer.ImportStatus._importsLoaded();
3999
- });
4000
- if (window.HTMLImports) {
4001
- HTMLImports.whenReady(function () {
4002
- Polymer.ImportStatus._importsLoaded();
4003
- });
4004
- }
4005
4162
  Polymer({
4006
4163
  is: 'dom-bind',
4007
4164
  extends: 'template',
4008
4165
  created: function () {
4009
- Polymer.ImportStatus.whenLoaded(this._markImportsReady.bind(this));
4166
+ Polymer.RenderStatus.whenReady(this._markImportsReady.bind(this));
4010
4167
  },
4011
4168
  _ensureReady: function () {
4012
4169
  if (!this._readied) {