polymer-rails 1.0.6 → 1.0.7

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: 34b3a9b27e37403a1b24f10c0af3fb503784a9bc
4
- data.tar.gz: 33e91cef11bad49853814766cec2690a346d5a4b
3
+ metadata.gz: 6e60e9c03cbc73a2ba56357a90887b2d8da9ee08
4
+ data.tar.gz: 831baa1eb5c10b24d86eaa5a2b93198360f07216
5
5
  SHA512:
6
- metadata.gz: 4ef26bbb7540e7aafe2a16fba3a4d431b2eee367576a543763dcceb6b7ed3d82040ecf40f002bfb2030cb5487b1c2540f760505c498cacf02eb8883fe9d8315a
7
- data.tar.gz: 4737d13cacccdee39fbdeb5d1dbbb6379312960486ed08cbdd81f6cffc4d2c5e7a13fdae8d2724400cf68599b56df43a23a0e148d39fa19721ffaf0d27709c8f
6
+ metadata.gz: 454c524339c884bf208ade8fbc372c1c00288779edfa124181c9ae7feb0b91ce7bf6b44b1fed7912ec6683331d3f16afa763c1f014b73c33e55a42ec093656b1
7
+ data.tar.gz: 0a6d85f444772d21f214f39db74b9c476aff97c3ab4536169fd32c411f12880ae491b6b3cfea73a57b599048a93f8d6639221bd0ad58c4756ddfb5dd3e5ea2cc
@@ -13,21 +13,6 @@ document.body.removeAttribute('unresolved');
13
13
  if (window.WebComponents) {
14
14
  addEventListener('WebComponentsReady', resolve);
15
15
  } else {
16
- if (document.readyState =<!--
17
- @license
18
- Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
19
- This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
20
- The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
21
- The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
22
- Code distributed by Google as part of the polymer project is also
23
- subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
24
- --><script>(function () {
25
- function resolve() {
26
- document.body.removeAttribute('unresolved');
27
- }
28
- if (window.WebComponents) {
29
- addEventListener('WebComponentsReady', resolve);
30
- } else {
31
16
  if (document.readyState === 'interactive' || document.readyState === 'complete') {
32
17
  resolve();
33
18
  } else {
@@ -74,7 +59,11 @@ document.registerElement(prototype.is, options);
74
59
  return ctor;
75
60
  };
76
61
  var desugar = function (prototype) {
77
- prototype = Polymer.Base.chainObject(prototype, Polymer.Base);
62
+ var base = Polymer.Base;
63
+ if (prototype.extends) {
64
+ base = Polymer.Base._getExtendedPrototype(prototype.extends);
65
+ }
66
+ prototype = Polymer.Base.chainObject(prototype, base);
78
67
  prototype.registerCallback();
79
68
  return prototype.constructor;
80
69
  };
@@ -107,6 +96,7 @@ return (document._currentScript || document.currentScript).ownerDocument;
107
96
  }
108
97
  });
109
98
  Polymer.Base = {
99
+ __isPolymerInstance__: true,
110
100
  _addFeature: function (feature) {
111
101
  this.extend(this, feature);
112
102
  },
@@ -176,6 +166,16 @@ object.__proto__ = inherited;
176
166
  return object;
177
167
  };
178
168
  Polymer.Base = Polymer.Base.chainObject(Polymer.Base, HTMLElement.prototype);
169
+ if (window.CustomElements) {
170
+ Polymer.instanceof = CustomElements.instanceof;
171
+ } else {
172
+ Polymer.instanceof = function (obj, ctor) {
173
+ return obj instanceof ctor;
174
+ };
175
+ }
176
+ Polymer.isInstance = function (obj) {
177
+ return Boolean(obj && obj.__isPolymerInstance__);
178
+ };
179
179
  Polymer.telemetry.instanceCount = 0;
180
180
  (function () {
181
181
  var modules = {};
@@ -304,525 +304,6 @@ this._marshalBehavior(this);
304
304
  }
305
305
  });
306
306
  Polymer.Base._addFeature({
307
- _prepExtends: function () {
308
- if (this.extends) {
309
- this.__proto__ = this._getExtendedPrototype(this.extends);
310
- }
311
- },
312
- _getExtendedPrototype: function (tag) {
313
- return this._getExtendedNativePrototype(tag);
314
- },
315
- _nativePrototypes: {},
316
- _getExtendedNativePrototype: function (tag) {
317
- var p = this._nativePrototypes[tag];
318
- if (!p) {
319
- var np = this.getNativePrototype(tag);
320
- p = this.extend(Object.create(np), Polymer.Base);
321
- this._nativePrototypes[tag] = p;
322
- }
323
- return p;
324
- },
325
- getNativePrototype: function (tag) {
326
- return Object.getPrototypeOf(document.createElement(tag));
327
- }
328
- });
329
- Polymer.Base._addFeature({
330
- _prepConstructor: function () {
331
- this._factoryArgs = this.extends ? [
332
- this.extends,
333
- this.is
334
- ] : [this.is];
335
- var ctor = function () {
336
- return this._factory(arguments);
337
- };
338
- if (this.hasOwnProperty('extends')) {
339
- ctor.extends = this.extends;
340
- }
341
- Object.defineProperty(this, 'constructor', {
342
- value: ctor,
343
- writable: true,
344
- configurable: true
345
- });
346
- ctor.prototype = this;
347
- },
348
- _factory: function (args) {
349
- var elt = document.createElement.apply(document, this._factoryArgs);
350
- if (this.factoryImpl) {
351
- this.factoryImpl.apply(elt, args);
352
- }
353
- return elt;
354
- }
355
- });
356
- Polymer.nob = Object.create(null);
357
- Polymer.Base._addFeature({
358
- properties: {},
359
- getPropertyInfo: function (property) {
360
- var info = this._getPropertyInfo(property, this.properties);
361
- if (!info) {
362
- this.behaviors.some(function (b) {
363
- return info = this._getPropertyInfo(property, b.properties);
364
- }, this);
365
- }
366
- return info || Polymer.nob;
367
- },
368
- _getPropertyInfo: function (property, properties) {
369
- var p = properties && properties[property];
370
- if (typeof p === 'function') {
371
- p = properties[property] = { type: p };
372
- }
373
- if (p) {
374
- p.defined = true;
375
- }
376
- return p;
377
- }
378
- });
379
- Polymer.CaseMap = {
380
- _caseMap: {},
381
- dashToCamelCase: function (dash) {
382
- var mapped = Polymer.CaseMap._caseMap[dash];
383
- if (mapped) {
384
- return mapped;
385
- }
386
- if (dash.indexOf('-') < 0) {
387
- return Polymer.CaseMap._caseMap[dash] = dash;
388
- }
389
- return Polymer.CaseMap._caseMap[dash] = dash.replace(/-([a-z])/g, function (m) {
390
- return m[1].toUpperCase();
391
- });
392
- },
393
- camelToDashCase: function (camel) {
394
- var mapped = Polymer.CaseMap._caseMap[camel];
395
- if (mapped) {
396
- return mapped;
397
- }
398
- return Polymer.CaseMap._caseMap[camel] = camel.replace(/([a-z][A-Z])/g, function (g) {
399
- return g[0] + '-' + g[1].toLowerCase();
400
- });
401
- }
402
- };
403
- Polymer.Base._addFeature({
404
- _prepAttributes: function () {
405
- this._aggregatedAttributes = {};
406
- },
407
- _addHostAttributes: function (attributes) {
408
- if (attributes) {
409
- this.mixin(this._aggregatedAttributes, attributes);
410
- }
411
- },
412
- _marshalHostAttributes: function () {
413
- this._applyAttributes(this, this._aggregatedAttributes);
414
- },
415
- _applyAttributes: function (node, attr$) {
416
- for (var n in attr$) {
417
- if (!this.hasAttribute(n) && n !== 'class') {
418
- this.serializeValueToAttribute(attr$[n], n, this);
419
- }
420
- }
421
- },
422
- _marshalAttributes: function () {
423
- this._takeAttributesToModel(this);
424
- },
425
- _takeAttributesToModel: function (model) {
426
- for (var i = 0, l = this.attributes.length; i < l; i++) {
427
- this._setAttributeToProperty(model, this.attributes[i].name);
428
- }
429
- },
430
- _setAttributeToProperty: function (model, attrName) {
431
- if (!this._serializing) {
432
- var propName = Polymer.CaseMap.dashToCamelCase(attrName);
433
- var info = this.getPropertyInfo(propName);
434
- if (info.defined || this._propertyEffects && this._propertyEffects[propName]) {
435
- var val = this.getAttribute(attrName);
436
- model[propName] = this.deserialize(val, info.type);
437
- }
438
- }
439
- },
440
- _serializing: false,
441
- reflectPropertyToAttribute: function (name) {
442
- this._serializing = true;
443
- this.serializeValueToAttribute(this[name], Polymer.CaseMap.camelToDashCase(name));
444
- this._serializing = false;
445
- },
446
- serializeValueToAttribute: function (value, attribute, node) {
447
- var str = this.serialize(value);
448
- (node || this)[str === undefined ? 'removeAttribute' : 'setAttribute'](attribute, str);
449
- },
450
- deserialize: function (value, type) {
451
- switch (type) {
452
- case Number:
453
- value = Number(value);
454
- break;
455
- case Boolean:
456
- value = value !== null;
457
- break;
458
- case Object:
459
- try {
460
- value = JSON.parse(value);
461
- } catch (x) {
462
- }
463
- break;
464
- case Array:
465
- try {
466
- value = JSON.parse(value);
467
- } catch (x) {
468
- value = null;
469
- console.warn('Polymer::Attributes: couldn`t decode Array as JSON');
470
- }
471
- break;
472
- case Date:
473
- value = new Date(value);
474
- break;
475
- case String:
476
- default:
477
- break;
478
- }
479
- return value;
480
- },
481
- serialize: function (value) {
482
- switch (typeof value) {
483
- case 'boolean':
484
- return value ? '' : undefined;
485
- case 'object':
486
- if (value instanceof Date) {
487
- return value;
488
- } else if (value) {
489
- try {
490
- return JSON.stringify(value);
491
- } catch (x) {
492
- return '';
493
- }
494
- }
495
- default:
496
- return value != null ? value : undefined;
497
- }
498
- }
499
- });
500
- Polymer.Base._addFeature({
501
- _setupDebouncers: function () {
502
- this._debouncers = {};
503
- },
504
- debounce: function (jobName, callback, wait) {
505
- this._debouncers[jobName] = Polymer.Debounce.call(this, this._debouncers[jobName], callback, wait);
506
- },
507
- isDebouncerActive: function (jobName) {
508
- var debouncer = this._debouncers[jobName];
509
- return debouncer && debouncer.finish;
510
- },
511
- flushDebouncer: function (jobName) {
512
- var debouncer = this._debouncers[jobName];
513
- if (debouncer) {
514
- debouncer.complete();
515
- }
516
- },
517
- cancelDebouncer: function (jobName) {
518
- var debouncer = this._debouncers[jobName];
519
- if (debouncer) {
520
- debouncer.stop();
521
- }
522
- }
523
- });
524
- Polymer.version = '1.0.6';
525
- Polymer.Base._addFeature({
526
- _registerFeatures: function () {
527
- this._prepIs();
528
- this._prepAttributes();
529
- this._prepBehaviors();
530
- this._prepExtends();
531
- this._prepConstructor();
532
- },
533
- _prepBehavior: function (b) {
534
- this._addHostAttributes(b.hostAttributes);
535
- },
536
- _marshalBehavior: function (b) {
537
- },
538
- _initFeatures: function () {
539
- this._marshalHostAttributes();
540
- this._setupDebouncers();
541
- this._marshalBehaviors();
542
- }
543
- });</script>
544
-
545
- == 'interactive' || document.readyState === 'complete') {
546
- resolve();
547
- } else {
548
- addEventListener('DOMContentLoaded', resolve);
549
- }
550
- }
551
- }());
552
- Polymer = {
553
- Settings: function () {
554
- var user = window.Polymer || {};
555
- location.search.slice(1).split('&').forEach(function (o) {
556
- o = o.split('=');
557
- o[0] && (user[o[0]] = o[1] || true);
558
- });
559
- var wantShadow = user.dom === 'shadow';
560
- var hasShadow = Boolean(Element.prototype.createShadowRoot);
561
- var nativeShadow = hasShadow && !window.ShadowDOMPolyfill;
562
- var useShadow = wantShadow && hasShadow;
563
- var hasNativeImports = Boolean('import' in document.createElement('link'));
564
- var useNativeImports = hasNativeImports;
565
- var useNativeCustomElements = !window.CustomElements || window.CustomElements.useNative;
566
- return {
567
- wantShadow: wantShadow,
568
- hasShadow: hasShadow,
569
- nativeShadow: nativeShadow,
570
- useShadow: useShadow,
571
- useNativeShadow: useShadow && nativeShadow,
572
- useNativeImports: useNativeImports,
573
- useNativeCustomElements: useNativeCustomElements
574
- };
575
- }()
576
- };
577
- (function () {
578
- var userPolymer = window.Polymer;
579
- window.Polymer = function (prototype) {
580
- var ctor = desugar(prototype);
581
- prototype = ctor.prototype;
582
- var options = { prototype: prototype };
583
- if (prototype.extends) {
584
- options.extends = prototype.extends;
585
- }
586
- Polymer.telemetry._registrate(prototype);
587
- document.registerElement(prototype.is, options);
588
- return ctor;
589
- };
590
- var desugar = function (prototype) {
591
- prototype = Polymer.Base.chainObject(prototype, Polymer.Base);
592
- prototype.registerCallback();
593
- return prototype.constructor;
594
- };
595
- window.Polymer = Polymer;
596
- if (userPolymer) {
597
- for (var i in userPolymer) {
598
- Polymer[i] = userPolymer[i];
599
- }
600
- }
601
- Polymer.Class = desugar;
602
- }());
603
- Polymer.telemetry = {
604
- registrations: [],
605
- _regLog: function (prototype) {
606
- console.log('[' + prototype.is + ']: registered');
607
- },
608
- _registrate: function (prototype) {
609
- this.registrations.push(prototype);
610
- Polymer.log && this._regLog(prototype);
611
- },
612
- dumpRegistrations: function () {
613
- this.registrations.forEach(this._regLog);
614
- }
615
- };
616
- Object.defineProperty(window, 'currentImport', {
617
- enumerable: true,
618
- configurable: true,
619
- get: function () {
620
- return (document._currentScript || document.currentScript).ownerDocument;
621
- }
622
- });
623
- Polymer.Base = {
624
- _addFeature: function (feature) {
625
- this.extend(this, feature);
626
- },
627
- registerCallback: function () {
628
- this._registerFeatures();
629
- this._doBehavior('registered');
630
- },
631
- createdCallback: function () {
632
- Polymer.telemetry.instanceCount++;
633
- this.root = this;
634
- this._doBehavior('created');
635
- this._initFeatures();
636
- },
637
- attachedCallback: function () {
638
- this.isAttached = true;
639
- this._doBehavior('attached');
640
- },
641
- detachedCallback: function () {
642
- this.isAttached = false;
643
- this._doBehavior('detached');
644
- },
645
- attributeChangedCallback: function (name) {
646
- this._setAttributeToProperty(this, name);
647
- this._doBehavior('attributeChanged', arguments);
648
- },
649
- extend: function (prototype, api) {
650
- if (prototype && api) {
651
- Object.getOwnPropertyNames(api).forEach(function (n) {
652
- this.copyOwnProperty(n, api, prototype);
653
- }, this);
654
- }
655
- return prototype || api;
656
- },
657
- mixin: function (target, source) {
658
- for (var i in source) {
659
- target[i] = source[i];
660
- }
661
- return target;
662
- },
663
- copyOwnProperty: function (name, source, target) {
664
- var pd = Object.getOwnPropertyDescriptor(source, name);
665
- if (pd) {
666
- Object.defineProperty(target, name, pd);
667
- }
668
- },
669
- _log: console.log.apply.bind(console.log, console),
670
- _warn: console.warn.apply.bind(console.warn, console),
671
- _error: console.error.apply.bind(console.error, console),
672
- _logf: function () {
673
- return this._logPrefix.concat([this.is]).concat(Array.prototype.slice.call(arguments, 0));
674
- }
675
- };
676
- Polymer.Base._logPrefix = function () {
677
- var color = window.chrome || /firefox/i.test(navigator.userAgent);
678
- return color ? [
679
- '%c[%s::%s]:',
680
- 'font-weight: bold; background-color:#EEEE00;'
681
- ] : ['[%s::%s]:'];
682
- }();
683
- Polymer.Base.chainObject = function (object, inherited) {
684
- if (object && inherited && object !== inherited) {
685
- if (!Object.__proto__) {
686
- object = Polymer.Base.extend(Object.create(inherited), object);
687
- }
688
- object.__proto__ = inherited;
689
- }
690
- return object;
691
- };
692
- Polymer.Base = Polymer.Base.chainObject(Polymer.Base, HTMLElement.prototype);
693
- Polymer.telemetry.instanceCount = 0;
694
- (function () {
695
- var modules = {};
696
- var DomModule = function () {
697
- return document.createElement('dom-module');
698
- };
699
- DomModule.prototype = Object.create(HTMLElement.prototype);
700
- DomModule.prototype.constructor = DomModule;
701
- DomModule.prototype.createdCallback = function () {
702
- var id = this.id || this.getAttribute('name') || this.getAttribute('is');
703
- if (id) {
704
- this.id = id;
705
- modules[id] = this;
706
- }
707
- };
708
- DomModule.prototype.import = function (id, slctr) {
709
- var m = modules[id];
710
- if (!m) {
711
- forceDocumentUpgrade();
712
- m = modules[id];
713
- }
714
- if (m && slctr) {
715
- m = m.querySelector(slctr);
716
- }
717
- return m;
718
- };
719
- var cePolyfill = window.CustomElements && !CustomElements.useNative;
720
- if (cePolyfill) {
721
- var ready = CustomElements.ready;
722
- CustomElements.ready = true;
723
- }
724
- document.registerElement('dom-module', DomModule);
725
- if (cePolyfill) {
726
- CustomElements.ready = ready;
727
- }
728
- function forceDocumentUpgrade() {
729
- if (cePolyfill) {
730
- var script = document._currentScript || document.currentScript;
731
- if (script) {
732
- CustomElements.upgradeAll(script.ownerDocument);
733
- }
734
- }
735
- }
736
- }());
737
- Polymer.Base._addFeature({
738
- _prepIs: function () {
739
- if (!this.is) {
740
- var module = (document._currentScript || document.currentScript).parentNode;
741
- if (module.localName === 'dom-module') {
742
- var id = module.id || module.getAttribute('name') || module.getAttribute('is');
743
- this.is = id;
744
- }
745
- }
746
- }
747
- });
748
- Polymer.Base._addFeature({
749
- behaviors: [],
750
- _prepBehaviors: function () {
751
- if (this.behaviors.length) {
752
- this.behaviors = this._flattenBehaviorsList(this.behaviors);
753
- }
754
- this._prepAllBehaviors(this.behaviors);
755
- },
756
- _flattenBehaviorsList: function (behaviors) {
757
- var flat = [];
758
- behaviors.forEach(function (b) {
759
- if (b instanceof Array) {
760
- flat = flat.concat(this._flattenBehaviorsList(b));
761
- } else if (b) {
762
- flat.push(b);
763
- } else {
764
- this._warn(this._logf('_flattenBehaviorsList', 'behavior is null, check for missing or 404 import'));
765
- }
766
- }, this);
767
- return flat;
768
- },
769
- _prepAllBehaviors: function (behaviors) {
770
- for (var i = behaviors.length - 1; i >= 0; i--) {
771
- this._mixinBehavior(behaviors[i]);
772
- }
773
- for (var i = 0, l = behaviors.length; i < l; i++) {
774
- this._prepBehavior(behaviors[i]);
775
- }
776
- this._prepBehavior(this);
777
- },
778
- _mixinBehavior: function (b) {
779
- Object.getOwnPropertyNames(b).forEach(function (n) {
780
- switch (n) {
781
- case 'hostAttributes':
782
- case 'registered':
783
- case 'properties':
784
- case 'observers':
785
- case 'listeners':
786
- case 'created':
787
- case 'attached':
788
- case 'detached':
789
- case 'attributeChanged':
790
- case 'configure':
791
- case 'ready':
792
- break;
793
- default:
794
- if (!this.hasOwnProperty(n)) {
795
- this.copyOwnProperty(n, b, this);
796
- }
797
- break;
798
- }
799
- }, this);
800
- },
801
- _doBehavior: function (name, args) {
802
- this.behaviors.forEach(function (b) {
803
- this._invokeBehavior(b, name, args);
804
- }, this);
805
- this._invokeBehavior(this, name, args);
806
- },
807
- _invokeBehavior: function (b, name, args) {
808
- var fn = b[name];
809
- if (fn) {
810
- fn.apply(this, args || Polymer.nar);
811
- }
812
- },
813
- _marshalBehaviors: function () {
814
- this.behaviors.forEach(function (b) {
815
- this._marshalBehavior(b);
816
- }, this);
817
- this._marshalBehavior(this);
818
- }
819
- });
820
- Polymer.Base._addFeature({
821
- _prepExtends: function () {
822
- if (this.extends) {
823
- this.__proto__ = this._getExtendedPrototype(this.extends);
824
- }
825
- },
826
307
  _getExtendedPrototype: function (tag) {
827
308
  return this._getExtendedNativePrototype(tag);
828
309
  },
@@ -1035,13 +516,12 @@ debouncer.stop();
1035
516
  }
1036
517
  }
1037
518
  });
1038
- Polymer.version = '1.0.5';
519
+ Polymer.version = '1.0.7';
1039
520
  Polymer.Base._addFeature({
1040
521
  _registerFeatures: function () {
1041
522
  this._prepIs();
1042
523
  this._prepAttributes();
1043
524
  this._prepBehaviors();
1044
- this._prepExtends();
1045
525
  this._prepConstructor();
1046
526
  },
1047
527
  _prepBehavior: function (b) {
@@ -753,7 +753,7 @@ d.appendChild(nc);
753
753
  return n;
754
754
  },
755
755
  importNode: function (externalNode, deep) {
756
- var doc = this.node instanceof HTMLDocument ? this.node : this.node.ownerDocument;
756
+ var doc = this.node instanceof Document ? this.node : this.node.ownerDocument;
757
757
  var n = nativeImportNode.call(doc, externalNode, false);
758
758
  if (deep) {
759
759
  var c$ = factory(externalNode).childNodes;
@@ -941,15 +941,15 @@ DomApi.prototype.cloneNode = function (deep) {
941
941
  return this.node.cloneNode(deep);
942
942
  };
943
943
  DomApi.prototype.importNode = function (externalNode, deep) {
944
- var doc = this.node instanceof HTMLDocument ? this.node : this.node.ownerDocument;
944
+ var doc = this.node instanceof Document ? this.node : this.node.ownerDocument;
945
945
  return doc.importNode(externalNode, deep);
946
946
  };
947
947
  DomApi.prototype.getDestinationInsertionPoints = function () {
948
- var n$ = this.node.getDestinationInsertionPoints();
948
+ var n$ = this.node.getDestinationInsertionPoints && this.node.getDestinationInsertionPoints();
949
949
  return n$ ? Array.prototype.slice.call(n$) : [];
950
950
  };
951
951
  DomApi.prototype.getDistributedNodes = function () {
952
- var n$ = this.node.getDistributedNodes();
952
+ var n$ = this.node.getDistributedNodes && this.node.getDistributedNodes();
953
953
  return n$ ? Array.prototype.slice.call(n$) : [];
954
954
  };
955
955
  DomApi.prototype._distributeParent = function () {
@@ -1407,7 +1407,6 @@ _registerFeatures: function () {
1407
1407
  this._prepIs();
1408
1408
  this._prepAttributes();
1409
1409
  this._prepBehaviors();
1410
- this._prepExtends();
1411
1410
  this._prepConstructor();
1412
1411
  this._prepTemplate();
1413
1412
  this._prepShady();
@@ -75,6 +75,14 @@ for (var i = 0, node = root.firstChild; node; node = node.nextSibling, i++) {
75
75
  if (node.localName === 'template' && !node.hasAttribute('preserve-content')) {
76
76
  this._parseTemplate(node, i, list, annote);
77
77
  }
78
+ if (node.nodeType === Node.TEXT_NODE) {
79
+ var n = node.nextSibling;
80
+ while (n && n.nodeType === Node.TEXT_NODE) {
81
+ node.textContent += n.textContent;
82
+ root.removeChild(n);
83
+ n = n.nextSibling;
84
+ }
85
+ }
78
86
  var childAnnotation = this._parseNodeAnnotations(node, list, callback);
79
87
  if (childAnnotation) {
80
88
  childAnnotation.parent = annote;
@@ -1041,7 +1049,8 @@ Polymer.dom(toElement).setAttribute(name, '');
1041
1049
  }
1042
1050
  },
1043
1051
  getContentChildNodes: function (slctr) {
1044
- return Polymer.dom(Polymer.dom(this.root).querySelector(slctr || 'content')).getDistributedNodes();
1052
+ var content = Polymer.dom(this.root).querySelector(slctr || 'content');
1053
+ return content ? Polymer.dom(content).getDistributedNodes() : [];
1045
1054
  },
1046
1055
  getContentChildren: function (slctr) {
1047
1056
  return this.getContentChildNodes(slctr).filter(function (n) {
@@ -2045,9 +2054,11 @@ this.forEachStyleRule(rules, callback);
2045
2054
  return this.parser.stringify(rules, preserveProperties);
2046
2055
  },
2047
2056
  forRulesInStyles: function (styles, callback) {
2057
+ if (styles) {
2048
2058
  for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
2049
2059
  this.forEachStyleRule(this.rulesForStyle(s), callback);
2050
2060
  }
2061
+ }
2051
2062
  },
2052
2063
  rulesForStyle: function (style) {
2053
2064
  if (!style.__cssRules && style.textContent) {
@@ -2826,8 +2837,18 @@ if (!this._scopeSelector && this._needsStyleProperties()) {
2826
2837
  this._updateStyleProperties();
2827
2838
  }
2828
2839
  },
2840
+ _findStyleHost: function () {
2841
+ var e = this, root;
2842
+ while (root = Polymer.dom(e).getOwnerRoot()) {
2843
+ if (Polymer.isInstance(root.host)) {
2844
+ return root.host;
2845
+ }
2846
+ e = root.host;
2847
+ }
2848
+ return styleDefaults;
2849
+ },
2829
2850
  _updateStyleProperties: function () {
2830
- var info, scope = this.domHost || styleDefaults;
2851
+ var info, scope = this._findStyleHost();
2831
2852
  if (!scope._styleCache) {
2832
2853
  scope._styleCache = new Polymer.StyleCache();
2833
2854
  }
@@ -2862,7 +2883,7 @@ styleCache.store(this.is, Object.create(info), this._ownStyleProperties, this._s
2862
2883
  }
2863
2884
  },
2864
2885
  _computeStyleProperties: function (scopeProps) {
2865
- var scope = this.domHost || styleDefaults;
2886
+ var scope = this._findStyleHost();
2866
2887
  if (!scope._styleProperties) {
2867
2888
  scope._computeStyleProperties();
2868
2889
  }
@@ -2895,7 +2916,7 @@ return style;
2895
2916
  },
2896
2917
  serializeValueToAttribute: function (value, attribute, node) {
2897
2918
  node = node || this;
2898
- if (attribute === 'class') {
2919
+ if (attribute === 'class' && !nativeShadow) {
2899
2920
  var host = node === this ? this.domHost || this.dataHost : this;
2900
2921
  if (host) {
2901
2922
  value = host._scopeElementClass(node, value);
@@ -2951,7 +2972,6 @@ Polymer.Base._addFeature({
2951
2972
  _registerFeatures: function () {
2952
2973
  this._prepIs();
2953
2974
  this._prepAttributes();
2954
- this._prepExtends();
2955
2975
  this._prepConstructor();
2956
2976
  this._prepTemplate();
2957
2977
  this._prepStyles();
@@ -3421,19 +3441,18 @@ delay: Number
3421
3441
  },
3422
3442
  behaviors: [Polymer.Templatizer],
3423
3443
  observers: ['_itemsChanged(items.*)'],
3444
+ created: function () {
3445
+ this._instances = [];
3446
+ },
3424
3447
  detached: function () {
3425
- if (this.rows) {
3426
- for (var i = 0; i < this.rows.length; i++) {
3448
+ for (var i = 0; i < this._instances.length; i++) {
3427
3449
  this._detachRow(i);
3428
3450
  }
3429
- }
3430
3451
  },
3431
3452
  attached: function () {
3432
- if (this.rows) {
3433
3453
  var parentNode = Polymer.dom(this).parentNode;
3434
- for (var i = 0; i < this.rows.length; i++) {
3435
- Polymer.dom(parentNode).insertBefore(this.rows[i].root, this);
3436
- }
3454
+ for (var i = 0; i < this._instances.length; i++) {
3455
+ Polymer.dom(parentNode).insertBefore(this._instances[i].root, this);
3437
3456
  }
3438
3457
  },
3439
3458
  ready: function () {
@@ -3450,7 +3469,7 @@ var sort = this.sort;
3450
3469
  this._sortFn = sort && (typeof sort == 'function' ? sort : function () {
3451
3470
  return dataHost[sort].apply(dataHost, arguments);
3452
3471
  });
3453
- this._fullRefresh = true;
3472
+ this._needFullRefresh = true;
3454
3473
  if (this.items) {
3455
3474
  this._debounceTemplate(this._render);
3456
3475
  }
@@ -3461,7 +3480,7 @@ var filter = this.filter;
3461
3480
  this._filterFn = filter && (typeof filter == 'function' ? filter : function () {
3462
3481
  return dataHost[filter].apply(dataHost, arguments);
3463
3482
  });
3464
- this._fullRefresh = true;
3483
+ this._needFullRefresh = true;
3465
3484
  if (this.items) {
3466
3485
  this._debounceTemplate(this._render);
3467
3486
  }
@@ -3479,7 +3498,7 @@ this.collection = null;
3479
3498
  this._error(this._logf('dom-repeat', 'expected array for `items`,' + ' found', this.items));
3480
3499
  }
3481
3500
  this._splices = [];
3482
- this._fullRefresh = true;
3501
+ this._needFullRefresh = true;
3483
3502
  this._debounceTemplate(this._render);
3484
3503
  } else if (change.path == 'items.splices') {
3485
3504
  this._splices = this._splices.concat(change.value.keySplices);
@@ -3496,7 +3515,7 @@ path = path.substring(path.indexOf('.') + 1);
3496
3515
  var paths = this._observePaths;
3497
3516
  for (var i = 0; i < paths.length; i++) {
3498
3517
  if (path.indexOf(paths[i]) === 0) {
3499
- this._fullRefresh = true;
3518
+ this._needFullRefresh = true;
3500
3519
  if (this.delay) {
3501
3520
  this.debounce('render', this._render, this.delay);
3502
3521
  } else {
@@ -3508,102 +3527,111 @@ return;
3508
3527
  }
3509
3528
  },
3510
3529
  render: function () {
3511
- this._fullRefresh = true;
3530
+ this._needFullRefresh = true;
3512
3531
  this._debounceTemplate(this._render);
3513
3532
  this._flushTemplates();
3514
3533
  },
3515
3534
  _render: function () {
3516
3535
  var c = this.collection;
3517
- if (!this._fullRefresh) {
3536
+ if (this._needFullRefresh) {
3537
+ this._applyFullRefresh();
3538
+ this._needFullRefresh = false;
3539
+ } else {
3518
3540
  if (this._sortFn) {
3519
- this._applySplicesViewSort(this._splices);
3541
+ this._applySplicesUserSort(this._splices);
3520
3542
  } else {
3521
3543
  if (this._filterFn) {
3522
- this._fullRefresh = true;
3544
+ this._applyFullRefresh();
3523
3545
  } else {
3524
- this._applySplicesArraySort(this._splices);
3525
- }
3546
+ this._applySplicesArrayOrder(this._splices);
3526
3547
  }
3527
3548
  }
3528
- if (this._fullRefresh) {
3529
- this._sortAndFilter();
3530
- this._fullRefresh = false;
3531
3549
  }
3532
3550
  this._splices = [];
3533
- var rowForKey = this._rowForKey = {};
3534
- var keys = this._orderedKeys;
3535
- this.rows = this.rows || [];
3536
- for (var i = 0; i < keys.length; i++) {
3537
- var key = keys[i];
3538
- var item = c.getItem(key);
3539
- var row = this.rows[i];
3540
- rowForKey[key] = i;
3541
- if (!row) {
3542
- this.rows.push(row = this._insertRow(i, null, item));
3551
+ var keyToIdx = this._keyToInstIdx = {};
3552
+ for (var i = 0; i < this._instances.length; i++) {
3553
+ var inst = this._instances[i];
3554
+ keyToIdx[inst.__key__] = i;
3555
+ inst.__setProperty(this.indexAs, i, true);
3543
3556
  }
3544
- row.__setProperty(this.as, item, true);
3545
- row.__setProperty('__key__', key, true);
3546
- row.__setProperty(this.indexAs, i, true);
3547
- }
3548
- for (; i < this.rows.length; i++) {
3549
- this._detachRow(i);
3550
- }
3551
- this.rows.splice(keys.length, this.rows.length - keys.length);
3552
3557
  this.fire('dom-change');
3553
3558
  },
3554
- _sortAndFilter: function () {
3559
+ _applyFullRefresh: function () {
3555
3560
  var c = this.collection;
3556
- if (!this._sortFn) {
3557
- this._orderedKeys = [];
3561
+ var keys;
3562
+ if (this._sortFn) {
3563
+ keys = c ? c.getKeys() : [];
3564
+ } else {
3565
+ keys = [];
3558
3566
  var items = this.items;
3559
3567
  if (items) {
3560
3568
  for (var i = 0; i < items.length; i++) {
3561
- this._orderedKeys.push(c.getKey(items[i]));
3569
+ keys.push(c.getKey(items[i]));
3562
3570
  }
3563
3571
  }
3564
- } else {
3565
- this._orderedKeys = c ? c.getKeys() : [];
3566
3572
  }
3567
3573
  if (this._filterFn) {
3568
- this._orderedKeys = this._orderedKeys.filter(function (a) {
3574
+ keys = keys.filter(function (a) {
3569
3575
  return this._filterFn(c.getItem(a));
3570
3576
  }, this);
3571
3577
  }
3572
3578
  if (this._sortFn) {
3573
- this._orderedKeys.sort(function (a, b) {
3579
+ keys.sort(function (a, b) {
3574
3580
  return this._sortFn(c.getItem(a), c.getItem(b));
3575
3581
  }.bind(this));
3576
3582
  }
3583
+ for (var i = 0; i < keys.length; i++) {
3584
+ var key = keys[i];
3585
+ var inst = this._instances[i];
3586
+ if (inst) {
3587
+ inst.__setProperty('__key__', key, true);
3588
+ inst.__setProperty(this.as, c.getItem(key), true);
3589
+ } else {
3590
+ this._instances.push(this._insertRow(i, key));
3591
+ }
3592
+ }
3593
+ for (; i < this._instances.length; i++) {
3594
+ this._detachRow(i);
3595
+ }
3596
+ this._instances.splice(keys.length, this._instances.length - keys.length);
3577
3597
  },
3578
3598
  _keySort: function (a, b) {
3579
3599
  return this.collection.getKey(a) - this.collection.getKey(b);
3580
3600
  },
3581
- _applySplicesViewSort: function (splices) {
3601
+ _applySplicesUserSort: function (splices) {
3582
3602
  var c = this.collection;
3583
- var keys = this._orderedKeys;
3584
- var rows = this.rows;
3585
- var removedRows = [];
3586
- var addedKeys = [];
3603
+ var instances = this._instances;
3604
+ var keyMap = {};
3587
3605
  var pool = [];
3588
3606
  var sortFn = this._sortFn || this._keySort.bind(this);
3589
3607
  splices.forEach(function (s) {
3590
3608
  for (var i = 0; i < s.removed.length; i++) {
3591
- var idx = this._rowForKey[s.removed[i]];
3592
- if (idx != null) {
3593
- removedRows.push(idx);
3594
- }
3609
+ var key = s.removed[i];
3610
+ keyMap[key] = keyMap[key] ? null : -1;
3595
3611
  }
3596
3612
  for (var i = 0; i < s.added.length; i++) {
3597
- addedKeys.push(s.added[i]);
3613
+ var key = s.added[i];
3614
+ keyMap[key] = keyMap[key] ? null : 1;
3598
3615
  }
3599
3616
  }, this);
3600
- if (removedRows.length) {
3601
- removedRows.sort();
3602
- for (var i = removedRows.length - 1; i >= 0; i--) {
3603
- var idx = removedRows[i];
3617
+ var removedIdxs = [];
3618
+ var addedKeys = [];
3619
+ for (var key in keyMap) {
3620
+ if (keyMap[key] === -1) {
3621
+ removedIdxs.push(this._keyToInstIdx[key]);
3622
+ }
3623
+ if (keyMap[key] === 1) {
3624
+ addedKeys.push(key);
3625
+ }
3626
+ }
3627
+ if (removedIdxs.length) {
3628
+ removedIdxs.sort();
3629
+ for (var i = removedIdxs.length - 1; i >= 0; i--) {
3630
+ var idx = removedIdxs[i];
3631
+ if (idx !== undefined) {
3604
3632
  pool.push(this._detachRow(idx));
3605
- rows.splice(idx, 1);
3606
- keys.splice(idx, 1);
3633
+ instances.splice(idx, 1);
3634
+ }
3607
3635
  }
3608
3636
  }
3609
3637
  if (addedKeys.length) {
@@ -3617,19 +3645,19 @@ return this._sortFn(c.getItem(a), c.getItem(b));
3617
3645
  }.bind(this));
3618
3646
  var start = 0;
3619
3647
  for (var i = 0; i < addedKeys.length; i++) {
3620
- start = this._insertRowIntoViewSort(start, addedKeys[i], pool);
3648
+ start = this._insertRowUserSort(start, addedKeys[i], pool);
3621
3649
  }
3622
3650
  }
3623
3651
  },
3624
- _insertRowIntoViewSort: function (start, key, pool) {
3652
+ _insertRowUserSort: function (start, key, pool) {
3625
3653
  var c = this.collection;
3626
3654
  var item = c.getItem(key);
3627
- var end = this.rows.length - 1;
3655
+ var end = this._instances.length - 1;
3628
3656
  var idx = -1;
3629
3657
  var sortFn = this._sortFn || this._keySort.bind(this);
3630
3658
  while (start <= end) {
3631
3659
  var mid = start + end >> 1;
3632
- var midKey = this._orderedKeys[mid];
3660
+ var midKey = this._instances[mid].__key__;
3633
3661
  var cmp = sortFn(c.getItem(midKey), item);
3634
3662
  if (cmp < 0) {
3635
3663
  start = mid + 1;
@@ -3643,106 +3671,110 @@ break;
3643
3671
  if (idx < 0) {
3644
3672
  idx = end + 1;
3645
3673
  }
3646
- this._orderedKeys.splice(idx, 0, key);
3647
- this.rows.splice(idx, 0, this._insertRow(idx, pool, c.getItem(key)));
3674
+ this._instances.splice(idx, 0, this._insertRow(idx, key, pool));
3648
3675
  return idx;
3649
3676
  },
3650
- _applySplicesArraySort: function (splices) {
3651
- var keys = this._orderedKeys;
3677
+ _applySplicesArrayOrder: function (splices) {
3652
3678
  var pool = [];
3679
+ var c = this.collection;
3653
3680
  splices.forEach(function (s) {
3654
3681
  for (var i = 0; i < s.removed.length; i++) {
3655
- pool.push(this._detachRow(s.index + i));
3682
+ var inst = this._detachRow(s.index + i);
3683
+ if (!inst.isPlaceholder) {
3684
+ pool.push(inst);
3656
3685
  }
3657
- this.rows.splice(s.index, s.removed.length);
3658
- }, this);
3659
- var c = this.collection;
3660
- splices.forEach(function (s) {
3661
- var args = [
3662
- s.index,
3663
- s.removed.length
3664
- ].concat(s.added);
3665
- keys.splice.apply(keys, args);
3686
+ }
3687
+ this._instances.splice(s.index, s.removed.length);
3666
3688
  for (var i = 0; i < s.added.length; i++) {
3667
- var item = c.getItem(s.added[i]);
3668
- var row = this._insertRow(s.index + i, pool, item);
3669
- this.rows.splice(s.index + i, 0, row);
3689
+ var inst = {
3690
+ isPlaceholder: true,
3691
+ key: s.added[i]
3692
+ };
3693
+ this._instances.splice(s.index + i, 0, inst);
3670
3694
  }
3671
3695
  }, this);
3696
+ for (var i = this._instances.length - 1; i >= 0; i--) {
3697
+ var inst = this._instances[i];
3698
+ if (inst.isPlaceholder) {
3699
+ this._instances[i] = this._insertRow(i, inst.key, pool, true);
3700
+ }
3701
+ }
3672
3702
  },
3673
3703
  _detachRow: function (idx) {
3674
- var row = this.rows[idx];
3704
+ var inst = this._instances[idx];
3705
+ if (!inst.isPlaceholder) {
3675
3706
  var parentNode = Polymer.dom(this).parentNode;
3676
- for (var i = 0; i < row._children.length; i++) {
3677
- var el = row._children[i];
3678
- Polymer.dom(row.root).appendChild(el);
3707
+ for (var i = 0; i < inst._children.length; i++) {
3708
+ var el = inst._children[i];
3709
+ Polymer.dom(inst.root).appendChild(el);
3710
+ }
3679
3711
  }
3680
- return row;
3712
+ return inst;
3681
3713
  },
3682
- _insertRow: function (idx, pool, item) {
3683
- var row = pool && pool.pop() || this._generateRow(idx, item);
3684
- var beforeRow = this.rows[idx];
3714
+ _insertRow: function (idx, key, pool, replace) {
3715
+ var inst;
3716
+ if (inst = pool && pool.pop()) {
3717
+ inst.__setProperty(this.as, this.collection.getItem(key), true);
3718
+ inst.__setProperty('__key__', key, true);
3719
+ } else {
3720
+ inst = this._generateRow(idx, key);
3721
+ }
3722
+ var beforeRow = this._instances[replace ? idx + 1 : idx];
3685
3723
  var beforeNode = beforeRow ? beforeRow._children[0] : this;
3686
3724
  var parentNode = Polymer.dom(this).parentNode;
3687
- Polymer.dom(parentNode).insertBefore(row.root, beforeNode);
3688
- return row;
3725
+ Polymer.dom(parentNode).insertBefore(inst.root, beforeNode);
3726
+ return inst;
3689
3727
  },
3690
- _generateRow: function (idx, item) {
3691
- var model = { __key__: this.collection.getKey(item) };
3692
- model[this.as] = item;
3728
+ _generateRow: function (idx, key) {
3729
+ var model = { __key__: key };
3730
+ model[this.as] = this.collection.getItem(key);
3693
3731
  model[this.indexAs] = idx;
3694
- var row = this.stamp(model);
3695
- return row;
3732
+ var inst = this.stamp(model);
3733
+ return inst;
3696
3734
  },
3697
3735
  _showHideChildren: function (hidden) {
3698
- if (this.rows) {
3699
- for (var i = 0; i < this.rows.length; i++) {
3700
- this.rows[i]._showHideChildren(hidden);
3701
- }
3736
+ for (var i = 0; i < this._instances.length; i++) {
3737
+ this._instances[i]._showHideChildren(hidden);
3702
3738
  }
3703
3739
  },
3704
- _forwardInstanceProp: function (row, prop, value) {
3740
+ _forwardInstanceProp: function (inst, prop, value) {
3705
3741
  if (prop == this.as) {
3706
3742
  var idx;
3707
3743
  if (this._sortFn || this._filterFn) {
3708
- idx = this.items.indexOf(this.collection.getItem(row.__key__));
3744
+ idx = this.items.indexOf(this.collection.getItem(inst.__key__));
3709
3745
  } else {
3710
- idx = row[this.indexAs];
3746
+ idx = inst[this.indexAs];
3711
3747
  }
3712
3748
  this.set('items.' + idx, value);
3713
3749
  }
3714
3750
  },
3715
- _forwardInstancePath: function (row, path, value) {
3751
+ _forwardInstancePath: function (inst, path, value) {
3716
3752
  if (path.indexOf(this.as + '.') === 0) {
3717
- this.notifyPath('items.' + row.__key__ + '.' + path.slice(this.as.length + 1), value);
3753
+ this.notifyPath('items.' + inst.__key__ + '.' + path.slice(this.as.length + 1), value);
3718
3754
  }
3719
3755
  },
3720
3756
  _forwardParentProp: function (prop, value) {
3721
- if (this.rows) {
3722
- this.rows.forEach(function (row) {
3723
- row.__setProperty(prop, value, true);
3757
+ this._instances.forEach(function (inst) {
3758
+ inst.__setProperty(prop, value, true);
3724
3759
  }, this);
3725
- }
3726
3760
  },
3727
3761
  _forwardParentPath: function (path, value) {
3728
- if (this.rows) {
3729
- this.rows.forEach(function (row) {
3730
- row.notifyPath(path, value, true);
3762
+ this._instances.forEach(function (inst) {
3763
+ inst.notifyPath(path, value, true);
3731
3764
  }, this);
3732
- }
3733
3765
  },
3734
3766
  _forwardItemPath: function (path, value) {
3735
- if (this._rowForKey) {
3767
+ if (this._keyToInstIdx) {
3736
3768
  var dot = path.indexOf('.');
3737
3769
  var key = path.substring(0, dot < 0 ? path.length : dot);
3738
- var idx = this._rowForKey[key];
3739
- var row = this.rows[idx];
3740
- if (row) {
3770
+ var idx = this._keyToInstIdx[key];
3771
+ var inst = this._instances[idx];
3772
+ if (inst) {
3741
3773
  if (dot >= 0) {
3742
3774
  path = this.as + '.' + path.substring(dot + 1);
3743
- row.notifyPath(path, value, true);
3775
+ inst.notifyPath(path, value, true);
3744
3776
  } else {
3745
- row.__setProperty(this.as, value, true);
3777
+ inst.__setProperty(this.as, value, true);
3746
3778
  }
3747
3779
  }
3748
3780
  }
@@ -3959,7 +3991,6 @@ created: function () {
3959
3991
  Polymer.ImportStatus.whenLoaded(this._readySelf.bind(this));
3960
3992
  },
3961
3993
  _registerFeatures: function () {
3962
- this._prepExtends();
3963
3994
  this._prepConstructor();
3964
3995
  },
3965
3996
  _insertChildren: function () {
@@ -1,5 +1,5 @@
1
1
  module Polymer
2
2
  module Rails
3
- VERSION = "1.0.6"
3
+ VERSION = "1.0.7"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymer-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Chaplinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-11 00:00:00.000000000 Z
11
+ date: 2015-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails