Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Side by Side Diff: third_party/polymer/components/polymer/polymer.html

Issue 2113853002: Run bower update (Closed) Base URL: https://github.com/catapult-project/catapult@polymer10-migration
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!-- 1 <!--
2 @license 2 @license
3 Copyright (c) 2015 The Polymer Project Authors. All rights reserved. 3 Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
4 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt 4 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt
5 The complete set of authors may be found at http://polymer.github.io/AUTHORS.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/CONTRI BUTORS.txt 6 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt
7 Code distributed by Google as part of the polymer project is also 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/PATEN TS.txt 8 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt
9 --><!-- 9 --><!--
10 @license 10 @license
11 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. 11 Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
12 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt 12 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt
13 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 13 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
14 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt 14 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt
15 Code distributed by Google as part of the polymer project is also 15 Code distributed by Google as part of the polymer project is also
16 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt 16 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt
17 --><link rel="import" href="polymer-mini.html"> 17 --><link rel="import" href="polymer-mini.html">
18 18
19
20
21 <script>Polymer.nar = []; 19 <script>Polymer.nar = [];
22 Polymer.Annotations = { 20 Polymer.Annotations = {
23 parseAnnotations: function (template) { 21 parseAnnotations: function (template) {
24 var list = []; 22 var list = [];
25 var content = template._content || template.content; 23 var content = template._content || template.content;
26 this._parseNodeAnnotations(content, list, template.hasAttribute('strip-whitespac e')); 24 this._parseNodeAnnotations(content, list, template.hasAttribute('strip-whitespac e'));
27 return list; 25 return list;
28 }, 26 },
29 _parseNodeAnnotations: function (node, list, stripWhiteSpace) { 27 _parseNodeAnnotations: function (node, list, stripWhiteSpace) {
30 return node.nodeType === Node.TEXT_NODE ? this._parseTextNodeAnnotation(node, li st) : this._parseElementAnnotations(node, list, stripWhiteSpace); 28 return node.nodeType === Node.TEXT_NODE ? this._parseTextNodeAnnotation(node, li st) : this._parseElementAnnotations(node, list, stripWhiteSpace);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 if (parent) { 226 if (parent) {
229 for (var n = parent.firstChild, i = 0; n; n = n.nextSibling) { 227 for (var n = parent.firstChild, i = 0; n; n = n.nextSibling) {
230 if (annote.index === i++) { 228 if (annote.index === i++) {
231 return n; 229 return n;
232 } 230 }
233 } 231 }
234 } else { 232 } else {
235 return root; 233 return root;
236 } 234 }
237 } 235 }
238 }; 236 };(function () {
239 (function () {
240 function resolveCss(cssText, ownerDocument) { 237 function resolveCss(cssText, ownerDocument) {
241 return cssText.replace(CSS_URL_RX, function (m, pre, url, post) { 238 return cssText.replace(CSS_URL_RX, function (m, pre, url, post) {
242 return pre + '\'' + resolve(url.replace(/["']/g, ''), ownerDocument) + '\'' + po st; 239 return pre + '\'' + resolve(url.replace(/["']/g, ''), ownerDocument) + '\'' + po st;
243 }); 240 });
244 } 241 }
245 function resolveAttrs(element, ownerDocument) { 242 function resolveAttrs(element, ownerDocument) {
246 for (var name in URL_ATTRS) { 243 for (var name in URL_ATTRS) {
247 var a$ = URL_ATTRS[name]; 244 var a$ = URL_ATTRS[name];
248 for (var i = 0, l = a$.length, a, at, v; i < l && (a = a$[i]); i++) { 245 for (var i = 0, l = a$.length, a, at, v; i < l && (a = a$[i]); i++) {
249 if (name === '*' || element.localName === name) { 246 if (name === '*' || element.localName === name) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 'url' 284 'url'
288 ], 285 ],
289 form: ['action'] 286 form: ['action']
290 }; 287 };
291 var BINDING_RX = /\{\{|\[\[/; 288 var BINDING_RX = /\{\{|\[\[/;
292 Polymer.ResolveUrl = { 289 Polymer.ResolveUrl = {
293 resolveCss: resolveCss, 290 resolveCss: resolveCss,
294 resolveAttrs: resolveAttrs, 291 resolveAttrs: resolveAttrs,
295 resolveUrl: resolveUrl 292 resolveUrl: resolveUrl
296 }; 293 };
297 }()); 294 }());Polymer.Base._addFeature({
298 Polymer.Base._addFeature({
299 _prepAnnotations: function () { 295 _prepAnnotations: function () {
300 if (!this._template) { 296 if (!this._template) {
301 this._notes = []; 297 this._notes = [];
302 } else { 298 } else {
303 var self = this; 299 var self = this;
304 Polymer.Annotations.prepElement = function (element) { 300 Polymer.Annotations.prepElement = function (element) {
305 self._prepElement(element); 301 self._prepElement(element);
306 }; 302 };
307 if (this._template._content && this._template._content._notes) { 303 if (this._template._content && this._template._content._notes) {
308 this._notes = this._template._content._notes; 304 this._notes = this._template._content._notes;
(...skipping 19 matching lines...) Expand all
328 p.model = this._modelForPath(p.value); 324 p.model = this._modelForPath(p.value);
329 } 325 }
330 } 326 }
331 } 327 }
332 } 328 }
333 if (note.templateContent) { 329 if (note.templateContent) {
334 this._processAnnotations(note.templateContent._notes); 330 this._processAnnotations(note.templateContent._notes);
335 var pp = note.templateContent._parentProps = this._discoverTemplateParentProps(n ote.templateContent._notes); 331 var pp = note.templateContent._parentProps = this._discoverTemplateParentProps(n ote.templateContent._notes);
336 var bindings = []; 332 var bindings = [];
337 for (var prop in pp) { 333 for (var prop in pp) {
334 var name = '_parent_' + prop;
338 bindings.push({ 335 bindings.push({
339 index: note.index, 336 index: note.index,
340 kind: 'property', 337 kind: 'property',
341 name: '_parent_' + prop, 338 name: name,
339 propertyName: name,
342 parts: [{ 340 parts: [{
343 mode: '{', 341 mode: '{',
344 model: prop, 342 model: prop,
345 value: prop 343 value: prop
346 }] 344 }]
347 }); 345 });
348 } 346 }
349 note.bindings = note.bindings.concat(bindings); 347 note.bindings = note.bindings.concat(bindings);
350 } 348 }
351 } 349 }
352 }, 350 },
353 _discoverTemplateParentProps: function (notes) { 351 _discoverTemplateParentProps: function (notes) {
354 var pp = {}; 352 var pp = {};
355 for (var i = 0, n; i < notes.length && (n = notes[i]); i++) { 353 for (var i = 0, n; i < notes.length && (n = notes[i]); i++) {
356 for (var j = 0, b$ = n.bindings, b; j < b$.length && (b = b$[j]); j++) { 354 for (var j = 0, b$ = n.bindings, b; j < b$.length && (b = b$[j]); j++) {
357 for (var k = 0, p$ = b.parts, p; k < p$.length && (p = p$[k]); k++) { 355 for (var k = 0, p$ = b.parts, p; k < p$.length && (p = p$[k]); k++) {
358 if (p.signature) { 356 if (p.signature) {
359 var args = p.signature.args; 357 var args = p.signature.args;
360 for (var kk = 0; kk < args.length; kk++) { 358 for (var kk = 0; kk < args.length; kk++) {
361 var model = args[kk].model; 359 var model = args[kk].model;
362 if (model) { 360 if (model) {
363 pp[model] = true; 361 pp[model] = true;
364 } 362 }
365 } 363 }
364 if (p.signature.dynamicFn) {
365 pp[p.signature.method] = true;
366 }
366 } else { 367 } else {
367 if (p.model) { 368 if (p.model) {
368 pp[p.model] = true; 369 pp[p.model] = true;
369 } 370 }
370 } 371 }
371 } 372 }
372 } 373 }
373 if (n.templateContent) { 374 if (n.templateContent) {
374 var tpp = n.templateContent._parentProps; 375 var tpp = n.templateContent._parentProps;
375 Polymer.Base.mixin(pp, tpp); 376 Polymer.Base.mixin(pp, tpp);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 _marshalAnnotatedListeners: function () { 447 _marshalAnnotatedListeners: function () {
447 for (var i = 0, l = this._notes.length, a; i < l && (a = this._notes[i]); i++) { 448 for (var i = 0, l = this._notes.length, a; i < l && (a = this._notes[i]); i++) {
448 if (a.events && a.events.length) { 449 if (a.events && a.events.length) {
449 var node = this._findAnnotatedNode(this.root, a); 450 var node = this._findAnnotatedNode(this.root, a);
450 for (var j = 0, e$ = a.events, e; j < e$.length && (e = e$[j]); j++) { 451 for (var j = 0, e$ = a.events, e; j < e$.length && (e = e$[j]); j++) {
451 this.listen(node, e.name, e.value); 452 this.listen(node, e.name, e.value);
452 } 453 }
453 } 454 }
454 } 455 }
455 } 456 }
456 }); 457 });Polymer.Base._addFeature({
457 Polymer.Base._addFeature({
458 listeners: {}, 458 listeners: {},
459 _listenListeners: function (listeners) { 459 _listenListeners: function (listeners) {
460 var node, name, eventName; 460 var node, name, eventName;
461 for (eventName in listeners) { 461 for (eventName in listeners) {
462 if (eventName.indexOf('.') < 0) { 462 if (eventName.indexOf('.') < 0) {
463 node = this; 463 node = this;
464 name = eventName; 464 name = eventName;
465 } else { 465 } else {
466 name = eventName.split('.'); 466 name = eventName.split('.');
467 node = this.$[name[0]]; 467 node = this.$[name[0]];
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 this._unlisten(node, eventName, handler); 528 this._unlisten(node, eventName, handler);
529 handler._listening = false; 529 handler._listening = false;
530 } 530 }
531 }, 531 },
532 _listen: function (node, eventName, handler) { 532 _listen: function (node, eventName, handler) {
533 node.addEventListener(eventName, handler); 533 node.addEventListener(eventName, handler);
534 }, 534 },
535 _unlisten: function (node, eventName, handler) { 535 _unlisten: function (node, eventName, handler) {
536 node.removeEventListener(eventName, handler); 536 node.removeEventListener(eventName, handler);
537 } 537 }
538 }); 538 });(function () {
539 (function () {
540 'use strict'; 539 'use strict';
541 var wrap = Polymer.DomApi.wrap; 540 var wrap = Polymer.DomApi.wrap;
542 var HAS_NATIVE_TA = typeof document.head.style.touchAction === 'string'; 541 var HAS_NATIVE_TA = typeof document.head.style.touchAction === 'string';
543 var GESTURE_KEY = '__polymerGestures'; 542 var GESTURE_KEY = '__polymerGestures';
544 var HANDLED_OBJ = '__polymerGesturesHandled'; 543 var HANDLED_OBJ = '__polymerGesturesHandled';
545 var TOUCH_ACTION = '__polymerGesturesTouchAction'; 544 var TOUCH_ACTION = '__polymerGesturesTouchAction';
546 var TAP_DISTANCE = 25; 545 var TAP_DISTANCE = 25;
547 var TRACK_DISTANCE = 5; 546 var TRACK_DISTANCE = 5;
548 var TRACK_LENGTH = 2; 547 var TRACK_LENGTH = 2;
549 var MOUSE_TIMEOUT = 2500; 548 var MOUSE_TIMEOUT = 2500;
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 709 }
711 } 710 }
712 if (POINTERSTATE.touch.id !== t.identifier) { 711 if (POINTERSTATE.touch.id !== t.identifier) {
713 return; 712 return;
714 } 713 }
715 if (!HAS_NATIVE_TA) { 714 if (!HAS_NATIVE_TA) {
716 if (type === 'touchstart' || type === 'touchmove') { 715 if (type === 'touchstart' || type === 'touchmove') {
717 Gestures.handleTouchAction(ev); 716 Gestures.handleTouchAction(ev);
718 } 717 }
719 } 718 }
720 if (type === 'touchend' && !ev.__polymerSimulatedTouch) { 719 if (type === 'touchend') {
721 POINTERSTATE.mouse.target = Polymer.dom(ev).rootTarget; 720 POINTERSTATE.mouse.target = Polymer.dom(ev).rootTarget;
722 ignoreMouse(true); 721 ignoreMouse();
723 } 722 }
724 } 723 }
725 } 724 }
726 handled = ev[HANDLED_OBJ]; 725 handled = ev[HANDLED_OBJ];
727 if (handled.skip) { 726 if (handled.skip) {
728 return; 727 return;
729 } 728 }
730 var recognizers = Gestures.recognizers; 729 var recognizers = Gestures.recognizers;
731 for (var i = 0, r; i < recognizers.length; i++) { 730 for (var i = 0, r; i < recognizers.length; i++) {
732 r = recognizers[i]; 731 r = recognizers[i];
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 } 848 }
850 node[TOUCH_ACTION] = value; 849 node[TOUCH_ACTION] = value;
851 }, 850 },
852 fire: function (target, type, detail) { 851 fire: function (target, type, detail) {
853 var ev = Polymer.Base.fire(type, detail, { 852 var ev = Polymer.Base.fire(type, detail, {
854 node: target, 853 node: target,
855 bubbles: true, 854 bubbles: true,
856 cancelable: true 855 cancelable: true
857 }); 856 });
858 if (ev.defaultPrevented) { 857 if (ev.defaultPrevented) {
859 var se = detail.sourceEvent; 858 var preventer = detail.preventer || detail.sourceEvent;
860 if (se && se.preventDefault) { 859 if (preventer && preventer.preventDefault) {
861 se.preventDefault(); 860 preventer.preventDefault();
862 } 861 }
863 } 862 }
864 }, 863 },
865 prevent: function (evName) { 864 prevent: function (evName) {
866 var recognizer = this.findRecognizerByEvent(evName); 865 var recognizer = this.findRecognizerByEvent(evName);
867 if (recognizer.info) { 866 if (recognizer.info) {
868 recognizer.info.prevent = true; 867 recognizer.info.prevent = true;
869 } 868 }
869 },
870 resetMouseCanceller: function () {
871 if (POINTERSTATE.mouse.mouseIgnoreJob) {
872 POINTERSTATE.mouse.mouseIgnoreJob.complete();
873 }
870 } 874 }
871 }; 875 };
872 Gestures.register({ 876 Gestures.register({
873 name: 'downup', 877 name: 'downup',
874 deps: [ 878 deps: [
875 'mousedown', 879 'mousedown',
876 'touchstart', 880 'touchstart',
877 'touchend' 881 'touchend'
878 ], 882 ],
879 flow: { 883 flow: {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 var upfn = function upfn(e) { 916 var upfn = function upfn(e) {
913 if (hasLeftMouseButton(e)) { 917 if (hasLeftMouseButton(e)) {
914 self.fire('up', t, e); 918 self.fire('up', t, e);
915 } 919 }
916 untrackDocument(self.info); 920 untrackDocument(self.info);
917 }; 921 };
918 trackDocument(this.info, movefn, upfn); 922 trackDocument(this.info, movefn, upfn);
919 this.fire('down', t, e); 923 this.fire('down', t, e);
920 }, 924 },
921 touchstart: function (e) { 925 touchstart: function (e) {
922 this.fire('down', Gestures.findOriginalTarget(e), e.changedTouches[0]); 926 this.fire('down', Gestures.findOriginalTarget(e), e.changedTouches[0], e);
923 }, 927 },
924 touchend: function (e) { 928 touchend: function (e) {
925 this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0]); 929 this.fire('up', Gestures.findOriginalTarget(e), e.changedTouches[0], e);
926 }, 930 },
927 fire: function (type, target, event) { 931 fire: function (type, target, event, preventer) {
928 Gestures.fire(target, type, { 932 Gestures.fire(target, type, {
929 x: event.clientX, 933 x: event.clientX,
930 y: event.clientY, 934 y: event.clientY,
931 sourceEvent: event, 935 sourceEvent: event,
936 preventer: preventer,
932 prevent: function (e) { 937 prevent: function (e) {
933 return Gestures.prevent(e); 938 return Gestures.prevent(e);
934 } 939 }
935 }); 940 });
936 } 941 }
937 }); 942 });
938 Gestures.register({ 943 Gestures.register({
939 name: 'track', 944 name: 'track',
940 touchAction: 'none', 945 touchAction: 'none',
941 deps: [ 946 deps: [
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 }, 1055 },
1051 touchend: function (e) { 1056 touchend: function (e) {
1052 var t = Gestures.findOriginalTarget(e); 1057 var t = Gestures.findOriginalTarget(e);
1053 var ct = e.changedTouches[0]; 1058 var ct = e.changedTouches[0];
1054 if (this.info.started) { 1059 if (this.info.started) {
1055 this.info.state = 'end'; 1060 this.info.state = 'end';
1056 this.info.addMove({ 1061 this.info.addMove({
1057 x: ct.clientX, 1062 x: ct.clientX,
1058 y: ct.clientY 1063 y: ct.clientY
1059 }); 1064 });
1060 this.fire(t, ct); 1065 this.fire(t, ct, e);
1061 } 1066 }
1062 }, 1067 },
1063 fire: function (target, touch) { 1068 fire: function (target, touch, preventer) {
1064 var secondlast = this.info.moves[this.info.moves.length - 2]; 1069 var secondlast = this.info.moves[this.info.moves.length - 2];
1065 var lastmove = this.info.moves[this.info.moves.length - 1]; 1070 var lastmove = this.info.moves[this.info.moves.length - 1];
1066 var dx = lastmove.x - this.info.x; 1071 var dx = lastmove.x - this.info.x;
1067 var dy = lastmove.y - this.info.y; 1072 var dy = lastmove.y - this.info.y;
1068 var ddx, ddy = 0; 1073 var ddx, ddy = 0;
1069 if (secondlast) { 1074 if (secondlast) {
1070 ddx = lastmove.x - secondlast.x; 1075 ddx = lastmove.x - secondlast.x;
1071 ddy = lastmove.y - secondlast.y; 1076 ddy = lastmove.y - secondlast.y;
1072 } 1077 }
1073 return Gestures.fire(target, 'track', { 1078 return Gestures.fire(target, 'track', {
1074 state: this.info.state, 1079 state: this.info.state,
1075 x: touch.clientX, 1080 x: touch.clientX,
1076 y: touch.clientY, 1081 y: touch.clientY,
1077 dx: dx, 1082 dx: dx,
1078 dy: dy, 1083 dy: dy,
1079 ddx: ddx, 1084 ddx: ddx,
1080 ddy: ddy, 1085 ddy: ddy,
1081 sourceEvent: touch, 1086 sourceEvent: touch,
1087 preventer: preventer,
1082 hover: function () { 1088 hover: function () {
1083 return Gestures.deepTargetFind(touch.clientX, touch.clientY); 1089 return Gestures.deepTargetFind(touch.clientX, touch.clientY);
1084 } 1090 }
1085 }); 1091 });
1086 } 1092 }
1087 }); 1093 });
1088 Gestures.register({ 1094 Gestures.register({
1089 name: 'tap', 1095 name: 'tap',
1090 deps: [ 1096 deps: [
1091 'mousedown', 1097 'mousedown',
(...skipping 30 matching lines...) Expand all
1122 if (hasLeftMouseButton(e)) { 1128 if (hasLeftMouseButton(e)) {
1123 this.save(e); 1129 this.save(e);
1124 } 1130 }
1125 }, 1131 },
1126 click: function (e) { 1132 click: function (e) {
1127 if (hasLeftMouseButton(e)) { 1133 if (hasLeftMouseButton(e)) {
1128 this.forward(e); 1134 this.forward(e);
1129 } 1135 }
1130 }, 1136 },
1131 touchstart: function (e) { 1137 touchstart: function (e) {
1132 this.save(e.changedTouches[0]); 1138 this.save(e.changedTouches[0], e);
1133 }, 1139 },
1134 touchend: function (e) { 1140 touchend: function (e) {
1135 this.forward(e.changedTouches[0]); 1141 this.forward(e.changedTouches[0], e);
1136 }, 1142 },
1137 forward: function (e) { 1143 forward: function (e, preventer) {
1138 var dx = Math.abs(e.clientX - this.info.x); 1144 var dx = Math.abs(e.clientX - this.info.x);
1139 var dy = Math.abs(e.clientY - this.info.y); 1145 var dy = Math.abs(e.clientY - this.info.y);
1140 var t = Gestures.findOriginalTarget(e); 1146 var t = Gestures.findOriginalTarget(e);
1141 if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE || isSynt heticClick(e)) { 1147 if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE || isSynt heticClick(e)) {
1142 if (!this.info.prevent) { 1148 if (!this.info.prevent) {
1143 Gestures.fire(t, 'tap', { 1149 Gestures.fire(t, 'tap', {
1144 x: e.clientX, 1150 x: e.clientX,
1145 y: e.clientY, 1151 y: e.clientY,
1146 sourceEvent: e 1152 sourceEvent: e,
1153 preventer: preventer
1147 }); 1154 });
1148 } 1155 }
1149 } 1156 }
1150 } 1157 }
1151 }); 1158 });
1152 var DIRECTION_MAP = { 1159 var DIRECTION_MAP = {
1153 x: 'pan-x', 1160 x: 'pan-x',
1154 y: 'pan-y', 1161 y: 'pan-y',
1155 none: 'none', 1162 none: 'none',
1156 all: 'auto' 1163 all: 'auto'
(...skipping 15 matching lines...) Expand all
1172 } else { 1179 } else {
1173 node.removeEventListener(eventName, handler); 1180 node.removeEventListener(eventName, handler);
1174 } 1181 }
1175 }, 1182 },
1176 setScrollDirection: function (direction, node) { 1183 setScrollDirection: function (direction, node) {
1177 node = node || this; 1184 node = node || this;
1178 Gestures.setTouchAction(node, DIRECTION_MAP[direction] || 'auto'); 1185 Gestures.setTouchAction(node, DIRECTION_MAP[direction] || 'auto');
1179 } 1186 }
1180 }); 1187 });
1181 Polymer.Gestures = Gestures; 1188 Polymer.Gestures = Gestures;
1182 }()); 1189 }());(function () {
1190 'use strict';
1183 Polymer.Base._addFeature({ 1191 Polymer.Base._addFeature({
1184 $$: function (slctr) { 1192 $$: function (slctr) {
1185 return Polymer.dom(this.root).querySelector(slctr); 1193 return Polymer.dom(this.root).querySelector(slctr);
1186 }, 1194 },
1187 toggleClass: function (name, bool, node) { 1195 toggleClass: function (name, bool, node) {
1188 node = node || this; 1196 node = node || this;
1189 if (arguments.length == 1) { 1197 if (arguments.length == 1) {
1190 bool = !node.classList.contains(name); 1198 bool = !node.classList.contains(name);
1191 } 1199 }
1192 if (bool) { 1200 if (bool) {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 transform: function (transform, node) { 1321 transform: function (transform, node) {
1314 node = node || this; 1322 node = node || this;
1315 node.style.webkitTransform = transform; 1323 node.style.webkitTransform = transform;
1316 node.style.transform = transform; 1324 node.style.transform = transform;
1317 }, 1325 },
1318 translate3d: function (x, y, z, node) { 1326 translate3d: function (x, y, z, node) {
1319 node = node || this; 1327 node = node || this;
1320 this.transform('translate3d(' + x + ',' + y + ',' + z + ')', node); 1328 this.transform('translate3d(' + x + ',' + y + ',' + z + ')', node);
1321 }, 1329 },
1322 importHref: function (href, onload, onerror, optAsync) { 1330 importHref: function (href, onload, onerror, optAsync) {
1323 var l = document.createElement('link'); 1331 var link = document.createElement('link');
1324 l.rel = 'import'; 1332 link.rel = 'import';
1325 l.href = href; 1333 link.href = href;
1334 var list = Polymer.Base.importHref.imported = Polymer.Base.importHref.imported | | {};
1335 var cached = list[link.href];
1336 var imprt = cached || link;
1337 var self = this;
1338 if (onload) {
1339 var loadListener = function (e) {
1340 e.target.__firedLoad = true;
1341 e.target.removeEventListener('load', loadListener);
1342 return onload.call(self, e);
1343 };
1344 imprt.addEventListener('load', loadListener);
1345 }
1346 if (onerror) {
1347 var errorListener = function (e) {
1348 e.target.__firedError = true;
1349 e.target.removeEventListener('error', errorListener);
1350 return onerror.call(self, e);
1351 };
1352 imprt.addEventListener('error', errorListener);
1353 }
1354 if (cached) {
1355 if (cached.__firedLoad) {
1356 cached.dispatchEvent(new Event('load'));
1357 }
1358 if (cached.__firedError) {
1359 cached.dispatchEvent(new Event('error'));
1360 }
1361 } else {
1362 list[link.href] = link;
1326 optAsync = Boolean(optAsync); 1363 optAsync = Boolean(optAsync);
1327 if (optAsync) { 1364 if (optAsync) {
1328 l.setAttribute('async', ''); 1365 link.setAttribute('async', '');
1329 } 1366 }
1330 var self = this; 1367 document.head.appendChild(link);
1331 if (onload) {
1332 l.onload = function (e) {
1333 return onload.call(self, e);
1334 };
1335 } 1368 }
1336 if (onerror) { 1369 return imprt;
1337 l.onerror = function (e) {
1338 return onerror.call(self, e);
1339 };
1340 }
1341 document.head.appendChild(l);
1342 return l;
1343 }, 1370 },
1344 create: function (tag, props) { 1371 create: function (tag, props) {
1345 var elt = document.createElement(tag); 1372 var elt = document.createElement(tag);
1346 if (props) { 1373 if (props) {
1347 for (var n in props) { 1374 for (var n in props) {
1348 elt[n] = props[n]; 1375 elt[n] = props[n];
1349 } 1376 }
1350 } 1377 }
1351 return elt; 1378 return elt;
1352 }, 1379 },
1353 isLightDescendant: function (node) { 1380 isLightDescendant: function (node) {
1354 return this !== node && this.contains(node) && Polymer.dom(this).getOwnerRoot() === Polymer.dom(node).getOwnerRoot(); 1381 return this !== node && this.contains(node) && Polymer.dom(this).getOwnerRoot() === Polymer.dom(node).getOwnerRoot();
1355 }, 1382 },
1356 isLocalDescendant: function (node) { 1383 isLocalDescendant: function (node) {
1357 return this.root === Polymer.dom(node).getOwnerRoot(); 1384 return this.root === Polymer.dom(node).getOwnerRoot();
1358 } 1385 }
1359 }); 1386 });
1360 Polymer.Bind = { 1387 if (!Polymer.Settings.useNativeCustomElements) {
1361 _dataEventCache: {}, 1388 var importHref = Polymer.Base.importHref;
1389 Polymer.Base.importHref = function (href, onload, onerror, optAsync) {
1390 CustomElements.ready = false;
1391 var loadFn = function (e) {
1392 CustomElements.upgradeDocumentTree(document);
1393 CustomElements.ready = true;
1394 if (onload) {
1395 return onload.call(this, e);
1396 }
1397 };
1398 return importHref.call(this, href, loadFn, onerror, optAsync);
1399 };
1400 }
1401 }());Polymer.Bind = {
1362 prepareModel: function (model) { 1402 prepareModel: function (model) {
1363 Polymer.Base.mixin(model, this._modelApi); 1403 Polymer.Base.mixin(model, this._modelApi);
1364 }, 1404 },
1365 _modelApi: { 1405 _modelApi: {
1366 _notifyChange: function (source, event, value) { 1406 _notifyChange: function (source, event, value) {
1367 value = value === undefined ? this[source] : value; 1407 value = value === undefined ? this[source] : value;
1368 event = event || Polymer.CaseMap.camelToDashCase(source) + '-changed'; 1408 event = event || Polymer.CaseMap.camelToDashCase(source) + '-changed';
1369 this.fire(event, { value: value }, { 1409 this.fire(event, { value: value }, {
1370 bubbles: false, 1410 bubbles: false,
1371 cancelable: false, 1411 cancelable: false,
(...skipping 20 matching lines...) Expand all
1392 node = node || this; 1432 node = node || this;
1393 var effects = node._propertyEffects && node._propertyEffects[property]; 1433 var effects = node._propertyEffects && node._propertyEffects[property];
1394 if (effects) { 1434 if (effects) {
1395 node._propertySetter(property, value, effects, quiet); 1435 node._propertySetter(property, value, effects, quiet);
1396 } else { 1436 } else {
1397 node[property] = value; 1437 node[property] = value;
1398 } 1438 }
1399 }, 1439 },
1400 _effectEffects: function (property, value, effects, old, fromAbove) { 1440 _effectEffects: function (property, value, effects, old, fromAbove) {
1401 for (var i = 0, l = effects.length, fx; i < l && (fx = effects[i]); i++) { 1441 for (var i = 0, l = effects.length, fx; i < l && (fx = effects[i]); i++) {
1402 fx.fn.call(this, property, value, fx.effect, old, fromAbove); 1442 fx.fn.call(this, property, this[property], fx.effect, old, fromAbove);
1403 } 1443 }
1404 }, 1444 },
1405 _clearPath: function (path) { 1445 _clearPath: function (path) {
1406 for (var prop in this.__data__) { 1446 for (var prop in this.__data__) {
1407 if (prop.indexOf(path + '.') === 0) { 1447 if (prop.indexOf(path + '.') === 0) {
1408 this.__data__[prop] = undefined; 1448 this.__data__[prop] = undefined;
1409 } 1449 }
1410 } 1450 }
1411 } 1451 }
1412 }, 1452 },
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1524 for (var i = 0, l = b$.length, info; i < l && (info = b$[i]); i++) { 1564 for (var i = 0, l = b$.length, info; i < l && (info = b$[i]); i++) {
1525 var node = inst._nodes[info.index]; 1565 var node = inst._nodes[info.index];
1526 this._addNotifyListener(node, inst, info.event, info.changedFn); 1566 this._addNotifyListener(node, inst, info.event, info.changedFn);
1527 } 1567 }
1528 }, 1568 },
1529 _addNotifyListener: function (element, context, event, changedFn) { 1569 _addNotifyListener: function (element, context, event, changedFn) {
1530 element.addEventListener(event, function (e) { 1570 element.addEventListener(event, function (e) {
1531 return context._notifyListener(changedFn, e); 1571 return context._notifyListener(changedFn, e);
1532 }); 1572 });
1533 } 1573 }
1534 }; 1574 };Polymer.Base.extend(Polymer.Bind, {
1535 Polymer.Base.extend(Polymer.Bind, {
1536 _shouldAddListener: function (effect) { 1575 _shouldAddListener: function (effect) {
1537 return effect.name && effect.kind != 'attribute' && effect.kind != 'text' && !ef fect.isCompound && effect.parts[0].mode === '{'; 1576 return effect.name && effect.kind != 'attribute' && effect.kind != 'text' && !ef fect.isCompound && effect.parts[0].mode === '{';
1538 }, 1577 },
1539 _annotationEffect: function (source, value, effect) { 1578 _annotationEffect: function (source, value, effect) {
1540 if (source != effect.value) { 1579 if (source != effect.value) {
1541 value = this._get(effect.value); 1580 value = this._get(effect.value);
1542 this.__data__[effect.value] = value; 1581 this.__data__[effect.value] = value;
1543 } 1582 }
1544 var calc = effect.negate ? !value : value; 1583 this._applyEffectValue(effect, value);
1545 if (!effect.customEvent || this._nodes[effect.index][effect.name] !== calc) {
1546 return this._applyEffectValue(effect, calc);
1547 }
1548 }, 1584 },
1549 _reflectEffect: function (source, value, effect) { 1585 _reflectEffect: function (source, value, effect) {
1550 this.reflectPropertyToAttribute(source, effect.attribute, value); 1586 this.reflectPropertyToAttribute(source, effect.attribute, value);
1551 }, 1587 },
1552 _notifyEffect: function (source, value, effect, old, fromAbove) { 1588 _notifyEffect: function (source, value, effect, old, fromAbove) {
1553 if (!fromAbove) { 1589 if (!fromAbove) {
1554 this._notifyChange(source, effect.event, value); 1590 this._notifyChange(source, effect.event, value);
1555 } 1591 }
1556 }, 1592 },
1557 _functionEffect: function (source, value, fn, old, fromAbove) { 1593 _functionEffect: function (source, value, fn, old, fromAbove) {
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 this._warn(this._logf('_computeEffect', 'compute method `' + effect.method + '` not defined')); 1626 this._warn(this._logf('_computeEffect', 'compute method `' + effect.method + '` not defined'));
1591 } 1627 }
1592 }, 1628 },
1593 _annotatedComputationEffect: function (source, value, effect) { 1629 _annotatedComputationEffect: function (source, value, effect) {
1594 var computedHost = this._rootDataHost || this; 1630 var computedHost = this._rootDataHost || this;
1595 var fn = computedHost[effect.method]; 1631 var fn = computedHost[effect.method];
1596 if (fn) { 1632 if (fn) {
1597 var args = Polymer.Bind._marshalArgs(this.__data__, effect, source, value); 1633 var args = Polymer.Bind._marshalArgs(this.__data__, effect, source, value);
1598 if (args) { 1634 if (args) {
1599 var computedvalue = fn.apply(computedHost, args); 1635 var computedvalue = fn.apply(computedHost, args);
1600 if (effect.negate) {
1601 computedvalue = !computedvalue;
1602 }
1603 this._applyEffectValue(effect, computedvalue); 1636 this._applyEffectValue(effect, computedvalue);
1604 } 1637 }
1605 } else if (effect.dynamicFn) { 1638 } else if (effect.dynamicFn) {
1606 } else { 1639 } else {
1607 computedHost._warn(computedHost._logf('_annotatedComputationEffect', 'compute me thod `' + effect.method + '` not defined')); 1640 computedHost._warn(computedHost._logf('_annotatedComputationEffect', 'compute me thod `' + effect.method + '` not defined'));
1608 } 1641 }
1609 }, 1642 },
1610 _marshalArgs: function (model, effect, path, value) { 1643 _marshalArgs: function (model, effect, path, value) {
1611 var values = []; 1644 var values = [];
1612 var args = effect.args; 1645 var args = effect.args;
1613 var bailoutEarly = args.length > 1 || effect.dynamicFn; 1646 var bailoutEarly = args.length > 1 || effect.dynamicFn;
1614 for (var i = 0, l = args.length; i < l; i++) { 1647 for (var i = 0, l = args.length; i < l; i++) {
1615 var arg = args[i]; 1648 var arg = args[i];
1616 var name = arg.name; 1649 var name = arg.name;
1617 var v; 1650 var v;
1618 if (arg.literal) { 1651 if (arg.literal) {
1619 v = arg.value; 1652 v = arg.value;
1620 } else if (arg.structured) { 1653 } else if (path === name) {
1621 v = Polymer.Base._get(name, model); 1654 v = value;
1622 } else { 1655 } else {
1623 v = model[name]; 1656 v = model[name];
1657 if (v === undefined && arg.structured) {
1658 v = Polymer.Base._get(name, model);
1659 }
1624 } 1660 }
1625 if (bailoutEarly && v === undefined) { 1661 if (bailoutEarly && v === undefined) {
1626 return; 1662 return;
1627 } 1663 }
1628 if (arg.wildcard) { 1664 if (arg.wildcard) {
1629 var baseChanged = name.indexOf(path + '.') === 0; 1665 var matches = path.indexOf(name + '.') === 0;
1630 var matches = effect.trigger.name.indexOf(name) === 0 && !baseChanged;
1631 values[i] = { 1666 values[i] = {
1632 path: matches ? path : name, 1667 path: matches ? path : name,
1633 value: matches ? value : v, 1668 value: matches ? value : v,
1634 base: v 1669 base: v
1635 }; 1670 };
1636 } else { 1671 } else {
1637 values[i] = v; 1672 values[i] = v;
1638 } 1673 }
1639 } 1674 }
1640 return values; 1675 return values;
1641 } 1676 }
1642 }); 1677 });Polymer.Base._addFeature({
1643 Polymer.Base._addFeature({
1644 _addPropertyEffect: function (property, kind, effect) { 1678 _addPropertyEffect: function (property, kind, effect) {
1645 var prop = Polymer.Bind.addPropertyEffect(this, property, kind, effect); 1679 var prop = Polymer.Bind.addPropertyEffect(this, property, kind, effect);
1646 prop.pathFn = this['_' + prop.kind + 'PathEffect']; 1680 prop.pathFn = this['_' + prop.kind + 'PathEffect'];
1647 }, 1681 },
1648 _prepEffects: function () { 1682 _prepEffects: function () {
1649 Polymer.Bind.prepareModel(this); 1683 Polymer.Bind.prepareModel(this);
1650 this._addAnnotationEffects(this._notes); 1684 this._addAnnotationEffects(this._notes);
1651 }, 1685 },
1652 _prepBindings: function () { 1686 _prepBindings: function () {
1653 Polymer.Bind.createBindings(this); 1687 Polymer.Bind.createBindings(this);
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1868 }, 1902 },
1869 _marshalInstanceEffects: function () { 1903 _marshalInstanceEffects: function () {
1870 Polymer.Bind.prepareInstance(this); 1904 Polymer.Bind.prepareInstance(this);
1871 if (this._bindListeners) { 1905 if (this._bindListeners) {
1872 Polymer.Bind.setupBindListeners(this); 1906 Polymer.Bind.setupBindListeners(this);
1873 } 1907 }
1874 }, 1908 },
1875 _applyEffectValue: function (info, value) { 1909 _applyEffectValue: function (info, value) {
1876 var node = this._nodes[info.index]; 1910 var node = this._nodes[info.index];
1877 var property = info.name; 1911 var property = info.name;
1912 value = this._computeFinalAnnotationValue(node, property, value, info);
1913 if (info.customEvent && node[property] === value) {
1914 return;
1915 }
1916 if (info.kind == 'attribute') {
1917 this.serializeValueToAttribute(value, property, node);
1918 } else {
1919 var pinfo = node._propertyInfo && node._propertyInfo[property];
1920 if (pinfo && pinfo.readOnly) {
1921 return;
1922 }
1923 this.__setProperty(property, value, false, node);
1924 }
1925 },
1926 _computeFinalAnnotationValue: function (node, property, value, info) {
1927 if (info.negate) {
1928 value = !value;
1929 }
1878 if (info.isCompound) { 1930 if (info.isCompound) {
1879 var storage = node.__compoundStorage__[property]; 1931 var storage = node.__compoundStorage__[property];
1880 storage[info.compoundIndex] = value; 1932 storage[info.compoundIndex] = value;
1881 value = storage.join(''); 1933 value = storage.join('');
1882 } 1934 }
1883 if (info.kind == 'attribute') { 1935 if (info.kind !== 'attribute') {
1884 this.serializeValueToAttribute(value, property, node);
1885 } else {
1886 if (property === 'className') { 1936 if (property === 'className') {
1887 value = this._scopeElementClass(node, value); 1937 value = this._scopeElementClass(node, value);
1888 } 1938 }
1889 if (property === 'textContent' || node.localName == 'input' && property == 'valu e') { 1939 if (property === 'textContent' || node.localName == 'input' && property == 'valu e') {
1890 value = value == undefined ? '' : value; 1940 value = value == undefined ? '' : value;
1891 } 1941 }
1892 var pinfo;
1893 if (!node._propertyInfo || !(pinfo = node._propertyInfo[property]) || !pinfo.rea dOnly) {
1894 this.__setProperty(property, value, false, node);
1895 } 1942 }
1896 } 1943 return value;
1897 }, 1944 },
1898 _executeStaticEffects: function () { 1945 _executeStaticEffects: function () {
1899 if (this._propertyEffects && this._propertyEffects.__static__) { 1946 if (this._propertyEffects && this._propertyEffects.__static__) {
1900 this._effectEffects('__static__', null, this._propertyEffects.__static__); 1947 this._effectEffects('__static__', null, this._propertyEffects.__static__);
1901 } 1948 }
1902 } 1949 }
1903 }); 1950 });(function () {
1904 (function () {
1905 var usePolyfillProto = Polymer.Settings.usePolyfillProto; 1951 var usePolyfillProto = Polymer.Settings.usePolyfillProto;
1906 Polymer.Base._addFeature({ 1952 Polymer.Base._addFeature({
1907 _setupConfigure: function (initialConfig) { 1953 _setupConfigure: function (initialConfig) {
1908 this._config = {}; 1954 this._config = {};
1909 this._handlers = []; 1955 this._handlers = [];
1910 this._aboveConfig = null; 1956 this._aboveConfig = null;
1911 if (initialConfig) { 1957 if (initialConfig) {
1912 for (var i in initialConfig) { 1958 for (var i in initialConfig) {
1913 if (initialConfig[i] !== undefined) { 1959 if (initialConfig[i] !== undefined) {
1914 this._config[i] = initialConfig[i]; 1960 this._config[i] = initialConfig[i];
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1961 } 2007 }
1962 } 2008 }
1963 }, 2009 },
1964 _distributeConfig: function (config) { 2010 _distributeConfig: function (config) {
1965 var fx$ = this._propertyEffects; 2011 var fx$ = this._propertyEffects;
1966 if (fx$) { 2012 if (fx$) {
1967 for (var p in config) { 2013 for (var p in config) {
1968 var fx = fx$[p]; 2014 var fx = fx$[p];
1969 if (fx) { 2015 if (fx) {
1970 for (var i = 0, l = fx.length, x; i < l && (x = fx[i]); i++) { 2016 for (var i = 0, l = fx.length, x; i < l && (x = fx[i]); i++) {
1971 if (x.kind === 'annotation' && !x.isCompound) { 2017 if (x.kind === 'annotation') {
1972 var node = this._nodes[x.effect.index]; 2018 var node = this._nodes[x.effect.index];
1973 var name = x.effect.propertyName; 2019 var name = x.effect.propertyName;
1974 var isAttr = x.effect.kind == 'attribute'; 2020 var isAttr = x.effect.kind == 'attribute';
1975 var hasEffect = node._propertyEffects && node._propertyEffects[name]; 2021 var hasEffect = node._propertyEffects && node._propertyEffects[name];
1976 if (node._configValue && (hasEffect || !isAttr)) { 2022 if (node._configValue && (hasEffect || !isAttr)) {
1977 var value = p === x.effect.value ? config[p] : this._get(x.effect.value, config) ; 2023 var value = p === x.effect.value ? config[p] : this._get(x.effect.value, config) ;
2024 value = this._computeFinalAnnotationValue(node, name, value, x.effect);
1978 if (isAttr) { 2025 if (isAttr) {
1979 value = node.deserialize(this.serialize(value), node._propertyInfo[name].type); 2026 value = node.deserialize(this.serialize(value), node._propertyInfo[name].type);
1980 } 2027 }
1981 node._configValue(name, value); 2028 node._configValue(name, value);
1982 } 2029 }
1983 } 2030 }
1984 } 2031 }
1985 } 2032 }
1986 } 2033 }
1987 } 2034 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2021 this._handlers.push(args); 2068 this._handlers.push(args);
2022 }, 2069 },
2023 _flushHandlers: function () { 2070 _flushHandlers: function () {
2024 var h$ = this._handlers; 2071 var h$ = this._handlers;
2025 for (var i = 0, l = h$.length, h; i < l && (h = h$[i]); i++) { 2072 for (var i = 0, l = h$.length, h; i < l && (h = h$[i]); i++) {
2026 h[0].call(this, h[1], h[2], h[3]); 2073 h[0].call(this, h[1], h[2], h[3]);
2027 } 2074 }
2028 this._handlers = []; 2075 this._handlers = [];
2029 } 2076 }
2030 }); 2077 });
2031 }()); 2078 }());(function () {
2032 (function () {
2033 'use strict'; 2079 'use strict';
2034 Polymer.Base._addFeature({ 2080 Polymer.Base._addFeature({
2035 notifyPath: function (path, value, fromAbove) { 2081 notifyPath: function (path, value, fromAbove) {
2036 var info = {}; 2082 var info = {};
2037 this._get(path, this, info); 2083 var v = this._get(path, this, info);
2084 if (arguments.length === 1) {
2085 value = v;
2086 }
2038 if (info.path) { 2087 if (info.path) {
2039 this._notifyPath(info.path, value, fromAbove); 2088 this._notifyPath(info.path, value, fromAbove);
2040 } 2089 }
2041 }, 2090 },
2042 _notifyPath: function (path, value, fromAbove) { 2091 _notifyPath: function (path, value, fromAbove) {
2043 var old = this._propertySetter(path, value); 2092 var old = this._propertySetter(path, value);
2044 if (old !== value && (old === old || value === value)) { 2093 if (old !== value && (old === old || value === value)) {
2045 this._pathEffector(path, value); 2094 this._pathEffector(path, value);
2046 if (!fromAbove) { 2095 if (!fromAbove) {
2047 this._notifyPathUp(path, value); 2096 this._notifyPathUp(path, value);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
2170 Polymer.Bind._computeEffect.call(this, path, value, effect); 2219 Polymer.Bind._computeEffect.call(this, path, value, effect);
2171 } 2220 }
2172 }, 2221 },
2173 _annotatedComputationPathEffect: function (path, value, effect) { 2222 _annotatedComputationPathEffect: function (path, value, effect) {
2174 if (this._pathMatchesEffect(path, effect)) { 2223 if (this._pathMatchesEffect(path, effect)) {
2175 Polymer.Bind._annotatedComputationEffect.call(this, path, value, effect); 2224 Polymer.Bind._annotatedComputationEffect.call(this, path, value, effect);
2176 } 2225 }
2177 }, 2226 },
2178 _pathMatchesEffect: function (path, effect) { 2227 _pathMatchesEffect: function (path, effect) {
2179 var effectArg = effect.trigger.name; 2228 var effectArg = effect.trigger.name;
2180 return effectArg == path || effectArg.indexOf(path + '.') === 0 || effect.trigge r.wildcard && path.indexOf(effectArg) === 0; 2229 return effectArg == path || effectArg.indexOf(path + '.') === 0 || effect.trigge r.wildcard && path.indexOf(effectArg + '.') === 0;
2181 }, 2230 },
2182 linkPaths: function (to, from) { 2231 linkPaths: function (to, from) {
2183 this._boundPaths = this._boundPaths || {}; 2232 this._boundPaths = this._boundPaths || {};
2184 if (from) { 2233 if (from) {
2185 this._boundPaths[to] = from; 2234 this._boundPaths[to] = from;
2186 } else { 2235 } else {
2187 this.unlinkPaths(to); 2236 this.unlinkPaths(to);
2188 } 2237 }
2189 }, 2238 },
2190 unlinkPaths: function (path) { 2239 unlinkPaths: function (path) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
2225 notifySplices: function (path, splices) { 2274 notifySplices: function (path, splices) {
2226 var info = {}; 2275 var info = {};
2227 var array = this._get(path, this, info); 2276 var array = this._get(path, this, info);
2228 this._notifySplices(array, info.path, splices); 2277 this._notifySplices(array, info.path, splices);
2229 }, 2278 },
2230 _notifySplices: function (array, path, splices) { 2279 _notifySplices: function (array, path, splices) {
2231 var change = { 2280 var change = {
2232 keySplices: Polymer.Collection.applySplices(array, splices), 2281 keySplices: Polymer.Collection.applySplices(array, splices),
2233 indexSplices: splices 2282 indexSplices: splices
2234 }; 2283 };
2235 if (!array.hasOwnProperty('splices')) { 2284 var splicesPath = path + '.splices';
2236 Object.defineProperty(array, 'splices', { 2285 this._notifyPath(splicesPath, change);
2237 configurable: true,
2238 writable: true
2239 });
2240 }
2241 array.splices = change;
2242 this._notifyPath(path + '.splices', change);
2243 this._notifyPath(path + '.length', array.length); 2286 this._notifyPath(path + '.length', array.length);
2244 change.keySplices = null; 2287 this.__data__[splicesPath] = {
2245 change.indexSplices = null; 2288 keySplices: null,
2289 indexSplices: null
2290 };
2246 }, 2291 },
2247 _notifySplice: function (array, path, index, added, removed) { 2292 _notifySplice: function (array, path, index, added, removed) {
2248 this._notifySplices(array, path, [{ 2293 this._notifySplices(array, path, [{
2249 index: index, 2294 index: index,
2250 addedCount: added, 2295 addedCount: added,
2251 removed: removed, 2296 removed: removed,
2252 object: array, 2297 object: array,
2253 type: 'splice' 2298 type: 'splice'
2254 }]); 2299 }]);
2255 }, 2300 },
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2330 _complexObserverPathEffect: Polymer.Base._complexObserverPathEffect, 2375 _complexObserverPathEffect: Polymer.Base._complexObserverPathEffect,
2331 _annotatedComputationPathEffect: Polymer.Base._annotatedComputationPathEffect, 2376 _annotatedComputationPathEffect: Polymer.Base._annotatedComputationPathEffect,
2332 _computePathEffect: Polymer.Base._computePathEffect, 2377 _computePathEffect: Polymer.Base._computePathEffect,
2333 _modelForPath: Polymer.Base._modelForPath, 2378 _modelForPath: Polymer.Base._modelForPath,
2334 _pathMatchesEffect: Polymer.Base._pathMatchesEffect, 2379 _pathMatchesEffect: Polymer.Base._pathMatchesEffect,
2335 _notifyBoundPaths: Polymer.Base._notifyBoundPaths, 2380 _notifyBoundPaths: Polymer.Base._notifyBoundPaths,
2336 _getPathParts: Polymer.Base._getPathParts 2381 _getPathParts: Polymer.Base._getPathParts
2337 }); 2382 });
2338 } 2383 }
2339 }); 2384 });
2340 }()); 2385 }());Polymer.Base._addFeature({
2341 Polymer.Base._addFeature({
2342 resolveUrl: function (url) { 2386 resolveUrl: function (url) {
2343 var module = Polymer.DomModule.import(this.is); 2387 var module = Polymer.DomModule.import(this.is);
2344 var root = ''; 2388 var root = '';
2345 if (module) { 2389 if (module) {
2346 var assetPath = module.getAttribute('assetpath') || ''; 2390 var assetPath = module.getAttribute('assetpath') || '';
2347 root = Polymer.ResolveUrl.resolveUrl(assetPath, module.ownerDocument.baseURI); 2391 root = Polymer.ResolveUrl.resolveUrl(assetPath, module.ownerDocument.baseURI);
2348 } 2392 }
2349 return Polymer.ResolveUrl.resolveUrl(url, root); 2393 return Polymer.ResolveUrl.resolveUrl(url, root);
2350 } 2394 }
2351 }); 2395 });Polymer.CssParse = function () {
2352 Polymer.CssParse = function () {
2353 return { 2396 return {
2354 parse: function (text) { 2397 parse: function (text) {
2355 text = this._clean(text); 2398 text = this._clean(text);
2356 return this._parseCss(this._lex(text), text); 2399 return this._parseCss(this._lex(text), text);
2357 }, 2400 },
2358 _clean: function (cssText) { 2401 _clean: function (cssText) {
2359 return cssText.replace(this._rx.comments, '').replace(this._rx.port, ''); 2402 return cssText.replace(this._rx.comments, '').replace(this._rx.port, '');
2360 }, 2403 },
2361 _lex: function (text) { 2404 _lex: function (text) {
2362 var root = { 2405 var root = {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2428 code = '0' + code; 2471 code = '0' + code;
2429 } 2472 }
2430 return '\\' + code; 2473 return '\\' + code;
2431 }); 2474 });
2432 }, 2475 },
2433 stringify: function (node, preserveProperties, text) { 2476 stringify: function (node, preserveProperties, text) {
2434 text = text || ''; 2477 text = text || '';
2435 var cssText = ''; 2478 var cssText = '';
2436 if (node.cssText || node.rules) { 2479 if (node.cssText || node.rules) {
2437 var r$ = node.rules; 2480 var r$ = node.rules;
2438 if (r$ && (preserveProperties || !this._hasMixinRules(r$))) { 2481 if (r$ && !this._hasMixinRules(r$)) {
2439 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) { 2482 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) {
2440 cssText = this.stringify(r, preserveProperties, cssText); 2483 cssText = this.stringify(r, preserveProperties, cssText);
2441 } 2484 }
2442 } else { 2485 } else {
2443 cssText = preserveProperties ? node.cssText : this.removeCustomProps(node.cssTex t); 2486 cssText = preserveProperties ? node.cssText : this.removeCustomProps(node.cssTex t);
2444 cssText = cssText.trim(); 2487 cssText = cssText.trim();
2445 if (cssText) { 2488 if (cssText) {
2446 cssText = ' ' + cssText + '\n'; 2489 cssText = ' ' + cssText + '\n';
2447 } 2490 }
2448 } 2491 }
(...skipping 28 matching lines...) Expand all
2477 MEDIA_RULE: 4, 2520 MEDIA_RULE: 4,
2478 MIXIN_RULE: 1000 2521 MIXIN_RULE: 1000
2479 }, 2522 },
2480 OPEN_BRACE: '{', 2523 OPEN_BRACE: '{',
2481 CLOSE_BRACE: '}', 2524 CLOSE_BRACE: '}',
2482 _rx: { 2525 _rx: {
2483 comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim, 2526 comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,
2484 port: /@import[^;]*;/gim, 2527 port: /@import[^;]*;/gim,
2485 customProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim, 2528 customProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\n]|$)/gim,
2486 mixinProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim, 2529 mixinProp: /(?:^[^;\-\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\n]|$)?/gim,
2487 mixinApply: /@apply[\s]*\([^)]*?\)[\s]*(?:[;\n]|$)?/gim, 2530 mixinApply: /@apply\s*\(?[^);]*\)?\s*(?:[;\n]|$)?/gim,
2488 varApply: /[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim, 2531 varApply: /[^;:]*?:[^;]*?var\([^;]*\)(?:[;\n]|$)?/gim,
2489 keyframesRule: /^@[^\s]*keyframes/, 2532 keyframesRule: /^@[^\s]*keyframes/,
2490 multipleSpaces: /\s+/g 2533 multipleSpaces: /\s+/g
2491 }, 2534 },
2492 VAR_START: '--', 2535 VAR_START: '--',
2493 MEDIA_START: '@media', 2536 MEDIA_START: '@media',
2494 AT_START: '@' 2537 AT_START: '@'
2495 }; 2538 };
2496 }(); 2539 }();Polymer.StyleUtil = function () {
2497 Polymer.StyleUtil = function () { 2540 var settings = Polymer.Settings;
2498 return { 2541 return {
2542 NATIVE_VARIABLES: Polymer.Settings.useNativeCSSProperties,
2499 MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css], template', 2543 MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css], template',
2500 INCLUDE_ATTR: 'include', 2544 INCLUDE_ATTR: 'include',
2501 toCssText: function (rules, callback, preserveProperties) { 2545 toCssText: function (rules, callback) {
2502 if (typeof rules === 'string') { 2546 if (typeof rules === 'string') {
2503 rules = this.parser.parse(rules); 2547 rules = this.parser.parse(rules);
2504 } 2548 }
2505 if (callback) { 2549 if (callback) {
2506 this.forEachRule(rules, callback); 2550 this.forEachRule(rules, callback);
2507 } 2551 }
2508 return this.parser.stringify(rules, preserveProperties); 2552 return this.parser.stringify(rules, this.NATIVE_VARIABLES);
2509 }, 2553 },
2510 forRulesInStyles: function (styles, styleRuleCallback, keyframesRuleCallback) { 2554 forRulesInStyles: function (styles, styleRuleCallback, keyframesRuleCallback) {
2511 if (styles) { 2555 if (styles) {
2512 for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) { 2556 for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
2513 this.forEachRule(this.rulesForStyle(s), styleRuleCallback, keyframesRuleCallback ); 2557 this.forEachRuleInStyle(s, styleRuleCallback, keyframesRuleCallback);
2514 } 2558 }
2515 } 2559 }
2516 }, 2560 },
2561 forActiveRulesInStyles: function (styles, styleRuleCallback, keyframesRuleCallba ck) {
2562 if (styles) {
2563 for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
2564 this.forEachRuleInStyle(s, styleRuleCallback, keyframesRuleCallback, true);
2565 }
2566 }
2567 },
2517 rulesForStyle: function (style) { 2568 rulesForStyle: function (style) {
2518 if (!style.__cssRules && style.textContent) { 2569 if (!style.__cssRules && style.textContent) {
2519 style.__cssRules = this.parser.parse(style.textContent); 2570 style.__cssRules = this.parser.parse(style.textContent);
2520 } 2571 }
2521 return style.__cssRules; 2572 return style.__cssRules;
2522 }, 2573 },
2523 isKeyframesSelector: function (rule) { 2574 isKeyframesSelector: function (rule) {
2524 return rule.parent && rule.parent.type === this.ruleTypes.KEYFRAMES_RULE; 2575 return rule.parent && rule.parent.type === this.ruleTypes.KEYFRAMES_RULE;
2525 }, 2576 },
2526 forEachRule: function (node, styleRuleCallback, keyframesRuleCallback) { 2577 forEachRuleInStyle: function (style, styleRuleCallback, keyframesRuleCallback, o nlyActiveRules) {
2578 var rules = this.rulesForStyle(style);
2579 var styleCallback, keyframeCallback;
2580 if (styleRuleCallback) {
2581 styleCallback = function (rule) {
2582 styleRuleCallback(rule, style);
2583 };
2584 }
2585 if (keyframesRuleCallback) {
2586 keyframeCallback = function (rule) {
2587 keyframesRuleCallback(rule, style);
2588 };
2589 }
2590 this.forEachRule(rules, styleCallback, keyframeCallback, onlyActiveRules);
2591 },
2592 forEachRule: function (node, styleRuleCallback, keyframesRuleCallback, onlyActiv eRules) {
2527 if (!node) { 2593 if (!node) {
2528 return; 2594 return;
2529 } 2595 }
2530 var skipRules = false; 2596 var skipRules = false;
2597 if (onlyActiveRules) {
2598 if (node.type === this.ruleTypes.MEDIA_RULE) {
2599 var matchMedia = node.selector.match(this.rx.MEDIA_MATCH);
2600 if (matchMedia) {
2601 if (!window.matchMedia(matchMedia[1]).matches) {
2602 skipRules = true;
2603 }
2604 }
2605 }
2606 }
2531 if (node.type === this.ruleTypes.STYLE_RULE) { 2607 if (node.type === this.ruleTypes.STYLE_RULE) {
2532 styleRuleCallback(node); 2608 styleRuleCallback(node);
2533 } else if (keyframesRuleCallback && node.type === this.ruleTypes.KEYFRAMES_RULE) { 2609 } else if (keyframesRuleCallback && node.type === this.ruleTypes.KEYFRAMES_RULE) {
2534 keyframesRuleCallback(node); 2610 keyframesRuleCallback(node);
2535 } else if (node.type === this.ruleTypes.MIXIN_RULE) { 2611 } else if (node.type === this.ruleTypes.MIXIN_RULE) {
2536 skipRules = true; 2612 skipRules = true;
2537 } 2613 }
2538 var r$ = node.rules; 2614 var r$ = node.rules;
2539 if (r$ && !skipRules) { 2615 if (r$ && !skipRules) {
2540 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) { 2616 for (var i = 0, l = r$.length, r; i < l && (r = r$[i]); i++) {
2541 this.forEachRule(r, styleRuleCallback, keyframesRuleCallback); 2617 this.forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);
2542 } 2618 }
2543 } 2619 }
2544 }, 2620 },
2545 applyCss: function (cssText, moniker, target, contextNode) { 2621 applyCss: function (cssText, moniker, target, contextNode) {
2546 var style = this.createScopeStyle(cssText, moniker); 2622 var style = this.createScopeStyle(cssText, moniker);
2623 return this.applyStyle(style, target, contextNode);
2624 },
2625 applyStyle: function (style, target, contextNode) {
2547 target = target || document.head; 2626 target = target || document.head;
2548 var after = contextNode && contextNode.nextSibling || target.firstChild; 2627 var after = contextNode && contextNode.nextSibling || target.firstChild;
2549 this.__lastHeadApplyNode = style; 2628 this.__lastHeadApplyNode = style;
2550 return target.insertBefore(style, after); 2629 return target.insertBefore(style, after);
2551 }, 2630 },
2552 createScopeStyle: function (cssText, moniker) { 2631 createScopeStyle: function (cssText, moniker) {
2553 var style = document.createElement('style'); 2632 var style = document.createElement('style');
2554 if (moniker) { 2633 if (moniker) {
2555 style.setAttribute('scope', moniker); 2634 style.setAttribute('scope', moniker);
2556 } 2635 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2601 e = e.__appliedElement || e; 2680 e = e.__appliedElement || e;
2602 e.parentNode.removeChild(e); 2681 e.parentNode.removeChild(e);
2603 cssText += this.resolveCss(e.textContent, element.ownerDocument); 2682 cssText += this.resolveCss(e.textContent, element.ownerDocument);
2604 } else if (e.import && e.import.body) { 2683 } else if (e.import && e.import.body) {
2605 cssText += this.resolveCss(e.import.body.textContent, e.import); 2684 cssText += this.resolveCss(e.import.body.textContent, e.import);
2606 } 2685 }
2607 } 2686 }
2608 } 2687 }
2609 return cssText; 2688 return cssText;
2610 }, 2689 },
2690 isTargetedBuild: function (buildType) {
2691 return settings.useNativeShadow ? buildType === 'shadow' : buildType === 'shady' ;
2692 },
2693 cssBuildTypeForModule: function (module) {
2694 var dm = Polymer.DomModule.import(module);
2695 if (dm) {
2696 return this.getCssBuildType(dm);
2697 }
2698 },
2699 getCssBuildType: function (element) {
2700 return element.getAttribute('css-build');
2701 },
2702 rx: {
2703 VAR_ASSIGN: /(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:([^;{]*)|{([^}]*)})(?:(?=[;\s}] )|$)/gi,
2704 MIXIN_MATCH: /(?:^|\W+)@apply\s*\(?([^);\n]*)\)?/gi,
2705 VAR_MATCH: /(^|\W+)var\([\s]*([^,)]*)[\s]*,?[\s]*((?:[^,()]*)|(?:[^;()]*\([^;)]* \)+))[\s]*?\)/gi,
2706 VAR_CONSUMED: /(--[\w-]+)\s*([:,;)]|$)/gi,
2707 ANIMATION_MATCH: /(animation\s*:)|(animation-name\s*:)/,
2708 MEDIA_MATCH: /@media[^(]*(\([^)]*\))/,
2709 IS_VAR: /^--/,
2710 BRACKETED: /\{[^}]*\}/g,
2711 HOST_PREFIX: '(?:^|[^.#[:])',
2712 HOST_SUFFIX: '($|[.:[\\s>+~])'
2713 },
2611 resolveCss: Polymer.ResolveUrl.resolveCss, 2714 resolveCss: Polymer.ResolveUrl.resolveCss,
2612 parser: Polymer.CssParse, 2715 parser: Polymer.CssParse,
2613 ruleTypes: Polymer.CssParse.types 2716 ruleTypes: Polymer.CssParse.types
2614 }; 2717 };
2615 }(); 2718 }();Polymer.StyleTransformer = function () {
2616 Polymer.StyleTransformer = function () {
2617 var nativeShadow = Polymer.Settings.useNativeShadow;
2618 var styleUtil = Polymer.StyleUtil; 2719 var styleUtil = Polymer.StyleUtil;
2720 var settings = Polymer.Settings;
2619 var api = { 2721 var api = {
2620 dom: function (node, scope, useAttr, shouldRemoveScope) { 2722 dom: function (node, scope, useAttr, shouldRemoveScope) {
2621 this._transformDom(node, scope || '', useAttr, shouldRemoveScope); 2723 this._transformDom(node, scope || '', useAttr, shouldRemoveScope);
2622 }, 2724 },
2623 _transformDom: function (node, selector, useAttr, shouldRemoveScope) { 2725 _transformDom: function (node, selector, useAttr, shouldRemoveScope) {
2624 if (node.setAttribute) { 2726 if (node.setAttribute) {
2625 this.element(node, selector, useAttr, shouldRemoveScope); 2727 this.element(node, selector, useAttr, shouldRemoveScope);
2626 } 2728 }
2627 var c$ = Polymer.dom(node).childNodes; 2729 var c$ = Polymer.dom(node).childNodes;
2628 for (var i = 0; i < c$.length; i++) { 2730 for (var i = 0; i < c$.length; i++) {
(...skipping 26 matching lines...) Expand all
2655 } else { 2757 } else {
2656 element.setAttribute(CLASS, (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope); 2758 element.setAttribute(CLASS, (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope);
2657 } 2759 }
2658 } 2760 }
2659 } 2761 }
2660 } 2762 }
2661 }, 2763 },
2662 elementStyles: function (element, callback) { 2764 elementStyles: function (element, callback) {
2663 var styles = element._styles; 2765 var styles = element._styles;
2664 var cssText = ''; 2766 var cssText = '';
2767 var cssBuildType = element.__cssBuild;
2665 for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) { 2768 for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
2666 var rules = styleUtil.rulesForStyle(s); 2769 var rules = styleUtil.rulesForStyle(s);
2667 cssText += nativeShadow ? styleUtil.toCssText(rules, callback) : this.css(rules, element.is, element.extends, callback, element._scopeCssViaAttr) + '\n\n'; 2770 cssText += settings.useNativeShadow || cssBuildType === 'shady' ? styleUtil.toCs sText(rules, callback) : this.css(rules, element.is, element.extends, callback, element._scopeCssViaAttr) + '\n\n';
2668 } 2771 }
2669 return cssText.trim(); 2772 return cssText.trim();
2670 }, 2773 },
2671 css: function (rules, scope, ext, callback, useAttr) { 2774 css: function (rules, scope, ext, callback, useAttr) {
2672 var hostScope = this._calcHostScope(scope, ext); 2775 var hostScope = this._calcHostScope(scope, ext);
2673 scope = this._calcElementScope(scope, useAttr); 2776 scope = this._calcElementScope(scope, useAttr);
2674 var self = this; 2777 var self = this;
2675 return styleUtil.toCssText(rules, function (rule) { 2778 return styleUtil.toCssText(rules, function (rule) {
2676 if (!rule.isScoped) { 2779 if (!rule.isScoped) {
2677 self.rule(rule, scope, hostScope); 2780 self.rule(rule, scope, hostScope);
(...skipping 11 matching lines...) Expand all
2689 return ''; 2792 return '';
2690 } 2793 }
2691 }, 2794 },
2692 _calcHostScope: function (scope, ext) { 2795 _calcHostScope: function (scope, ext) {
2693 return ext ? '[is=' + scope + ']' : scope; 2796 return ext ? '[is=' + scope + ']' : scope;
2694 }, 2797 },
2695 rule: function (rule, scope, hostScope) { 2798 rule: function (rule, scope, hostScope) {
2696 this._transformRule(rule, this._transformComplexSelector, scope, hostScope); 2799 this._transformRule(rule, this._transformComplexSelector, scope, hostScope);
2697 }, 2800 },
2698 _transformRule: function (rule, transformer, scope, hostScope) { 2801 _transformRule: function (rule, transformer, scope, hostScope) {
2802 rule.selector = rule.transformedSelector = this._transformRuleCss(rule, transfor mer, scope, hostScope);
2803 },
2804 _transformRuleCss: function (rule, transformer, scope, hostScope) {
2699 var p$ = rule.selector.split(COMPLEX_SELECTOR_SEP); 2805 var p$ = rule.selector.split(COMPLEX_SELECTOR_SEP);
2700 if (!styleUtil.isKeyframesSelector(rule)) { 2806 if (!styleUtil.isKeyframesSelector(rule)) {
2701 for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) { 2807 for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) {
2702 p$[i] = transformer.call(this, p, scope, hostScope); 2808 p$[i] = transformer.call(this, p, scope, hostScope);
2703 } 2809 }
2704 } 2810 }
2705 rule.selector = rule.transformedSelector = p$.join(COMPLEX_SELECTOR_SEP); 2811 return p$.join(COMPLEX_SELECTOR_SEP);
2706 }, 2812 },
2707 _transformComplexSelector: function (selector, scope, hostScope) { 2813 _transformComplexSelector: function (selector, scope, hostScope) {
2708 var stop = false; 2814 var stop = false;
2709 var hostContext = false; 2815 var hostContext = false;
2710 var self = this; 2816 var self = this;
2817 selector = selector.trim();
2711 selector = selector.replace(CONTENT_START, HOST + ' $1'); 2818 selector = selector.replace(CONTENT_START, HOST + ' $1');
2712 selector = selector.replace(SIMPLE_SELECTOR_SEP, function (m, c, s) { 2819 selector = selector.replace(SIMPLE_SELECTOR_SEP, function (m, c, s) {
2713 if (!stop) { 2820 if (!stop) {
2714 var info = self._transformCompoundSelector(s, c, scope, hostScope); 2821 var info = self._transformCompoundSelector(s, c, scope, hostScope);
2715 stop = stop || info.stop; 2822 stop = stop || info.stop;
2716 hostContext = hostContext || info.hostContext; 2823 hostContext = hostContext || info.hostContext;
2717 c = info.combinator; 2824 c = info.combinator;
2718 s = info.value; 2825 s = info.value;
2719 } else { 2826 } else {
2720 s = s.replace(SCOPE_JUMP, ' '); 2827 s = s.replace(SCOPE_JUMP, ' ');
2721 } 2828 }
2722 return c + s; 2829 return c + s;
2723 }); 2830 });
2724 if (hostContext) { 2831 if (hostContext) {
2725 selector = selector.replace(HOST_CONTEXT_PAREN, function (m, pre, paren, post) { 2832 selector = selector.replace(HOST_CONTEXT_PAREN, function (m, pre, paren, post) {
2726 return pre + paren + ' ' + hostScope + post + COMPLEX_SELECTOR_SEP + ' ' + pre + hostScope + paren + post; 2833 return pre + paren + ' ' + hostScope + post + COMPLEX_SELECTOR_SEP + ' ' + pre + hostScope + paren + post;
2727 }); 2834 });
2728 } 2835 }
2729 return selector; 2836 return selector;
2730 }, 2837 },
2731 _transformCompoundSelector: function (selector, combinator, scope, hostScope) { 2838 _transformCompoundSelector: function (selector, combinator, scope, hostScope) {
2732 var jumpIndex = selector.search(SCOPE_JUMP); 2839 var jumpIndex = selector.search(SCOPE_JUMP);
2733 var hostContext = false; 2840 var hostContext = false;
2734 if (selector.indexOf(HOST_CONTEXT) >= 0) { 2841 if (selector.indexOf(HOST_CONTEXT) >= 0) {
2735 hostContext = true; 2842 hostContext = true;
2736 } else if (selector.indexOf(HOST) >= 0) { 2843 } else if (selector.indexOf(HOST) >= 0) {
2737 selector = selector.replace(HOST_PAREN, function (m, host, paren) { 2844 selector = this._transformHostSelector(selector, hostScope);
2738 return hostScope + paren;
2739 });
2740 selector = selector.replace(HOST, hostScope);
2741 } else if (jumpIndex !== 0) { 2845 } else if (jumpIndex !== 0) {
2742 selector = scope ? this._transformSimpleSelector(selector, scope) : selector; 2846 selector = scope ? this._transformSimpleSelector(selector, scope) : selector;
2743 } 2847 }
2744 if (selector.indexOf(CONTENT) >= 0) { 2848 if (selector.indexOf(CONTENT) >= 0) {
2745 combinator = ''; 2849 combinator = '';
2746 } 2850 }
2747 var stop; 2851 var stop;
2748 if (jumpIndex >= 0) { 2852 if (jumpIndex >= 0) {
2749 selector = selector.replace(SCOPE_JUMP, ' '); 2853 selector = selector.replace(SCOPE_JUMP, ' ');
2750 stop = true; 2854 stop = true;
2751 } 2855 }
2752 return { 2856 return {
2753 value: selector, 2857 value: selector,
2754 combinator: combinator, 2858 combinator: combinator,
2755 stop: stop, 2859 stop: stop,
2756 hostContext: hostContext 2860 hostContext: hostContext
2757 }; 2861 };
2758 }, 2862 },
2759 _transformSimpleSelector: function (selector, scope) { 2863 _transformSimpleSelector: function (selector, scope) {
2760 var p$ = selector.split(PSEUDO_PREFIX); 2864 var p$ = selector.split(PSEUDO_PREFIX);
2761 p$[0] += scope; 2865 p$[0] += scope;
2762 return p$.join(PSEUDO_PREFIX); 2866 return p$.join(PSEUDO_PREFIX);
2763 }, 2867 },
2868 _transformHostSelector: function (selector, hostScope) {
2869 var m = selector.match(HOST_PAREN);
2870 var paren = m && m[2].trim() || '';
2871 if (paren) {
2872 if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {
2873 var typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];
2874 if (typeSelector === hostScope) {
2875 return paren;
2876 } else {
2877 return SELECTOR_NO_MATCH;
2878 }
2879 } else {
2880 return selector.replace(HOST_PAREN, function (m, host, paren) {
2881 return hostScope + paren;
2882 });
2883 }
2884 } else {
2885 return selector.replace(HOST, hostScope);
2886 }
2887 },
2764 documentRule: function (rule) { 2888 documentRule: function (rule) {
2765 rule.selector = rule.parsedSelector; 2889 rule.selector = rule.parsedSelector;
2766 this.normalizeRootSelector(rule); 2890 this.normalizeRootSelector(rule);
2767 if (!nativeShadow) { 2891 if (!settings.useNativeShadow) {
2768 this._transformRule(rule, this._transformDocumentSelector); 2892 this._transformRule(rule, this._transformDocumentSelector);
2769 } 2893 }
2770 }, 2894 },
2771 normalizeRootSelector: function (rule) { 2895 normalizeRootSelector: function (rule) {
2772 if (rule.selector === ROOT) { 2896 if (rule.selector === ROOT) {
2773 rule.selector = 'body'; 2897 rule.selector = 'html';
2774 } 2898 }
2775 }, 2899 },
2776 _transformDocumentSelector: function (selector) { 2900 _transformDocumentSelector: function (selector) {
2777 return selector.match(SCOPE_JUMP) ? this._transformComplexSelector(selector, SCO PE_DOC_SELECTOR) : this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELE CTOR); 2901 return selector.match(SCOPE_JUMP) ? this._transformComplexSelector(selector, SCO PE_DOC_SELECTOR) : this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELE CTOR);
2778 }, 2902 },
2779 SCOPE_NAME: 'style-scope' 2903 SCOPE_NAME: 'style-scope'
2780 }; 2904 };
2781 var SCOPE_NAME = api.SCOPE_NAME; 2905 var SCOPE_NAME = api.SCOPE_NAME;
2782 var SCOPE_DOC_SELECTOR = ':not([' + SCOPE_NAME + '])' + ':not(.' + SCOPE_NAME + ')'; 2906 var SCOPE_DOC_SELECTOR = ':not([' + SCOPE_NAME + '])' + ':not(.' + SCOPE_NAME + ')';
2783 var COMPLEX_SELECTOR_SEP = ','; 2907 var COMPLEX_SELECTOR_SEP = ',';
2784 var SIMPLE_SELECTOR_SEP = /(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=\[])+)/g; 2908 var SIMPLE_SELECTOR_SEP = /(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=\[])+)/g;
2909 var SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;
2785 var HOST = ':host'; 2910 var HOST = ':host';
2786 var ROOT = ':root'; 2911 var ROOT = ':root';
2787 var HOST_PAREN = /(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g; 2912 var HOST_PAREN = /(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/;
2788 var HOST_CONTEXT = ':host-context'; 2913 var HOST_CONTEXT = ':host-context';
2789 var HOST_CONTEXT_PAREN = /(.*)(?::host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\)) (.*)/; 2914 var HOST_CONTEXT_PAREN = /(.*)(?::host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\)) (.*)/;
2790 var CONTENT = '::content'; 2915 var CONTENT = '::content';
2791 var SCOPE_JUMP = /::content|::shadow|\/deep\//; 2916 var SCOPE_JUMP = /::content|::shadow|\/deep\//;
2792 var CSS_CLASS_PREFIX = '.'; 2917 var CSS_CLASS_PREFIX = '.';
2793 var CSS_ATTR_PREFIX = '[' + SCOPE_NAME + '~='; 2918 var CSS_ATTR_PREFIX = '[' + SCOPE_NAME + '~=';
2794 var CSS_ATTR_SUFFIX = ']'; 2919 var CSS_ATTR_SUFFIX = ']';
2795 var PSEUDO_PREFIX = ':'; 2920 var PSEUDO_PREFIX = ':';
2796 var CLASS = 'class'; 2921 var CLASS = 'class';
2797 var CONTENT_START = new RegExp('^(' + CONTENT + ')'); 2922 var CONTENT_START = new RegExp('^(' + CONTENT + ')');
2923 var SELECTOR_NO_MATCH = 'should_not_match';
2798 return api; 2924 return api;
2799 }(); 2925 }();Polymer.StyleExtends = function () {
2800 Polymer.StyleExtends = function () {
2801 var styleUtil = Polymer.StyleUtil; 2926 var styleUtil = Polymer.StyleUtil;
2802 return { 2927 return {
2803 hasExtends: function (cssText) { 2928 hasExtends: function (cssText) {
2804 return Boolean(cssText.match(this.rx.EXTEND)); 2929 return Boolean(cssText.match(this.rx.EXTEND));
2805 }, 2930 },
2806 transform: function (style) { 2931 transform: function (style) {
2807 var rules = styleUtil.rulesForStyle(style); 2932 var rules = styleUtil.rulesForStyle(style);
2808 var self = this; 2933 var self = this;
2809 styleUtil.forEachRule(rules, function (rule) { 2934 styleUtil.forEachRule(rules, function (rule) {
2810 self._mapRuleOntoParent(rule); 2935 self._mapRuleOntoParent(rule);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2860 if (rule.extends) { 2985 if (rule.extends) {
2861 rule.extends = rule.extends.slice(); 2986 rule.extends = rule.extends.slice();
2862 } 2987 }
2863 parent.rules.push(rule); 2988 parent.rules.push(rule);
2864 }, 2989 },
2865 rx: { 2990 rx: {
2866 EXTEND: /@extends\(([^)]*)\)\s*?;/gim, 2991 EXTEND: /@extends\(([^)]*)\)\s*?;/gim,
2867 STRIP: /%[^,]*$/ 2992 STRIP: /%[^,]*$/
2868 } 2993 }
2869 }; 2994 };
2870 }(); 2995 }();Polymer.ApplyShim = function () {
2871 (function () { 2996 'use strict';
2997 var styleUtil = Polymer.StyleUtil;
2998 var MIXIN_MATCH = styleUtil.rx.MIXIN_MATCH;
2999 var VAR_ASSIGN = styleUtil.rx.VAR_ASSIGN;
3000 var VAR_MATCH = styleUtil.rx.VAR_MATCH;
3001 var APPLY_NAME_CLEAN = /;\s*/m;
3002 var MIXIN_VAR_SEP = '_-_';
3003 var mixinMap = {};
3004 function mapSet(name, prop) {
3005 name = name.trim();
3006 mixinMap[name] = prop;
3007 }
3008 function mapGet(name) {
3009 name = name.trim();
3010 return mixinMap[name];
3011 }
3012 function cssTextToMap(text) {
3013 var props = text.split(';');
3014 var out = {};
3015 for (var i = 0, p, sp; i < props.length; i++) {
3016 p = props[i];
3017 if (p) {
3018 sp = p.split(':');
3019 if (sp.length > 1) {
3020 out[sp[0].trim()] = sp.slice(1).join(':');
3021 }
3022 }
3023 }
3024 return out;
3025 }
3026 function produceCssProperties(matchText, propertyName, valueProperty, valueMixin ) {
3027 if (valueProperty) {
3028 VAR_MATCH.lastIndex = 0;
3029 var m = VAR_MATCH.exec(valueProperty);
3030 if (m) {
3031 var value = m[2];
3032 if (mapGet(value)) {
3033 valueMixin = '@apply ' + value + ';';
3034 }
3035 }
3036 }
3037 if (!valueMixin) {
3038 return matchText;
3039 }
3040 var mixinAsProperties = consumeCssProperties(valueMixin);
3041 var prefix = matchText.slice(0, matchText.indexOf('--'));
3042 var mixinValues = cssTextToMap(mixinAsProperties);
3043 var oldProperties = mapGet(propertyName);
3044 var combinedProps = mixinValues;
3045 if (oldProperties) {
3046 combinedProps = Polymer.Base.mixin(oldProperties, mixinValues);
3047 } else {
3048 mapSet(propertyName, combinedProps);
3049 }
3050 var out = [];
3051 var p, v;
3052 for (p in combinedProps) {
3053 v = mixinValues[p];
3054 if (v === undefined) {
3055 v = 'initial';
3056 }
3057 out.push(propertyName + MIXIN_VAR_SEP + p + ': ' + v);
3058 }
3059 return prefix + out.join('; ') + ';';
3060 }
3061 function fixVars(matchText, prefix, value, fallback) {
3062 if (!fallback || fallback.indexOf('--') !== 0) {
3063 return matchText;
3064 }
3065 return [
3066 prefix,
3067 'var(',
3068 value,
3069 ', var(',
3070 fallback,
3071 '));'
3072 ].join('');
3073 }
3074 function atApplyToCssProperties(mixinName, fallbacks) {
3075 mixinName = mixinName.replace(APPLY_NAME_CLEAN, '');
3076 var vars = [];
3077 var mixinProperties = mapGet(mixinName);
3078 if (mixinProperties) {
3079 var p, parts, f;
3080 for (p in mixinProperties) {
3081 f = fallbacks && fallbacks[p];
3082 parts = [
3083 p,
3084 ': var(',
3085 mixinName,
3086 MIXIN_VAR_SEP,
3087 p
3088 ];
3089 if (f) {
3090 parts.push(',', f);
3091 }
3092 parts.push(')');
3093 vars.push(parts.join(''));
3094 }
3095 }
3096 return vars.join('; ');
3097 }
3098 function consumeCssProperties(text) {
3099 var m;
3100 while (m = MIXIN_MATCH.exec(text)) {
3101 var matchText = m[0];
3102 var mixinName = m[1];
3103 var idx = m.index;
3104 var applyPos = idx + matchText.indexOf('@apply');
3105 var afterApplyPos = idx + matchText.length;
3106 var textBeforeApply = text.slice(0, applyPos);
3107 var textAfterApply = text.slice(afterApplyPos);
3108 var defaults = cssTextToMap(textBeforeApply);
3109 var replacement = atApplyToCssProperties(mixinName, defaults);
3110 text = [
3111 textBeforeApply,
3112 replacement,
3113 textAfterApply
3114 ].join('');
3115 MIXIN_MATCH.lastIndex = idx + replacement.length;
3116 }
3117 return text;
3118 }
3119 var ApplyShim = {
3120 _map: mixinMap,
3121 _separator: MIXIN_VAR_SEP,
3122 transform: function (styles) {
3123 styleUtil.forRulesInStyles(styles, this._boundTransformRule);
3124 },
3125 transformRule: function (rule) {
3126 rule.cssText = this.transformCssText(rule.parsedCssText);
3127 if (rule.selector === ':root') {
3128 rule.selector = ':host > *';
3129 }
3130 },
3131 transformCssText: function (cssText) {
3132 cssText = cssText.replace(VAR_MATCH, fixVars);
3133 cssText = cssText.replace(VAR_ASSIGN, produceCssProperties);
3134 return consumeCssProperties(cssText);
3135 }
3136 };
3137 ApplyShim._boundTransformRule = ApplyShim.transformRule.bind(ApplyShim);
3138 return ApplyShim;
3139 }();(function () {
2872 var prepElement = Polymer.Base._prepElement; 3140 var prepElement = Polymer.Base._prepElement;
2873 var nativeShadow = Polymer.Settings.useNativeShadow; 3141 var nativeShadow = Polymer.Settings.useNativeShadow;
2874 var styleUtil = Polymer.StyleUtil; 3142 var styleUtil = Polymer.StyleUtil;
2875 var styleTransformer = Polymer.StyleTransformer; 3143 var styleTransformer = Polymer.StyleTransformer;
2876 var styleExtends = Polymer.StyleExtends; 3144 var styleExtends = Polymer.StyleExtends;
3145 var applyShim = Polymer.ApplyShim;
3146 var settings = Polymer.Settings;
2877 Polymer.Base._addFeature({ 3147 Polymer.Base._addFeature({
2878 _prepElement: function (element) { 3148 _prepElement: function (element) {
2879 if (this._encapsulateStyle) { 3149 if (this._encapsulateStyle && this.__cssBuild !== 'shady') {
2880 styleTransformer.element(element, this.is, this._scopeCssViaAttr); 3150 styleTransformer.element(element, this.is, this._scopeCssViaAttr);
2881 } 3151 }
2882 prepElement.call(this, element); 3152 prepElement.call(this, element);
2883 }, 3153 },
2884 _prepStyles: function () { 3154 _prepStyles: function () {
3155 if (this._encapsulateStyle === undefined) {
3156 this._encapsulateStyle = !nativeShadow;
3157 }
2885 if (!nativeShadow) { 3158 if (!nativeShadow) {
2886 this._scopeStyle = styleUtil.applyStylePlaceHolder(this.is); 3159 this._scopeStyle = styleUtil.applyStylePlaceHolder(this.is);
2887 } 3160 }
3161 this.__cssBuild = styleUtil.cssBuildTypeForModule(this.is);
2888 }, 3162 },
2889 _prepShimStyles: function () { 3163 _prepShimStyles: function () {
2890 if (this._template) { 3164 if (this._template) {
2891 if (this._encapsulateStyle === undefined) { 3165 var hasTargetedCssBuild = styleUtil.isTargetedBuild(this.__cssBuild);
2892 this._encapsulateStyle = !nativeShadow; 3166 if (settings.useNativeCSSProperties && this.__cssBuild === 'shadow' && hasTarget edCssBuild) {
3167 return;
2893 } 3168 }
2894 this._styles = this._collectStyles(); 3169 this._styles = this._styles || this._collectStyles();
2895 var cssText = styleTransformer.elementStyles(this); 3170 if (settings.useNativeCSSProperties && !this.__cssBuild) {
3171 applyShim.transform(this._styles);
3172 }
3173 var cssText = settings.useNativeCSSProperties && hasTargetedCssBuild ? this._sty les.length && this._styles[0].textContent.trim() : styleTransformer.elementStyle s(this);
2896 this._prepStyleProperties(); 3174 this._prepStyleProperties();
2897 if (!this._needsStyleProperties() && this._styles.length) { 3175 if (!this._needsStyleProperties() && cssText) {
2898 styleUtil.applyCss(cssText, this.is, nativeShadow ? this._template.content : nul l, this._scopeStyle); 3176 styleUtil.applyCss(cssText, this.is, nativeShadow ? this._template.content : nul l, this._scopeStyle);
2899 } 3177 }
2900 } else { 3178 } else {
2901 this._styles = []; 3179 this._styles = [];
2902 } 3180 }
2903 }, 3181 },
2904 _collectStyles: function () { 3182 _collectStyles: function () {
2905 var styles = []; 3183 var styles = [];
2906 var cssText = '', m$ = this.styleModules; 3184 var cssText = '', m$ = this.styleModules;
2907 if (m$) { 3185 if (m$) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
2966 } 3244 }
2967 }); 3245 });
2968 mo.observe(container, { 3246 mo.observe(container, {
2969 childList: true, 3247 childList: true,
2970 subtree: true 3248 subtree: true
2971 }); 3249 });
2972 return mo; 3250 return mo;
2973 } 3251 }
2974 } 3252 }
2975 }); 3253 });
2976 }()); 3254 }());Polymer.StyleProperties = function () {
2977 Polymer.StyleProperties = function () {
2978 'use strict'; 3255 'use strict';
2979 var nativeShadow = Polymer.Settings.useNativeShadow;
2980 var matchesSelector = Polymer.DomApi.matchesSelector; 3256 var matchesSelector = Polymer.DomApi.matchesSelector;
2981 var styleUtil = Polymer.StyleUtil; 3257 var styleUtil = Polymer.StyleUtil;
2982 var styleTransformer = Polymer.StyleTransformer; 3258 var styleTransformer = Polymer.StyleTransformer;
3259 var settings = Polymer.Settings;
2983 return { 3260 return {
2984 decorateStyles: function (styles) { 3261 decorateStyles: function (styles, scope) {
2985 var self = this, props = {}, keyframes = []; 3262 var self = this, props = {}, keyframes = [], ruleIndex = 0;
2986 styleUtil.forRulesInStyles(styles, function (rule) { 3263 var scopeSelector = styleTransformer._calcHostScope(scope.is, scope.extends);
3264 styleUtil.forRulesInStyles(styles, function (rule, style) {
2987 self.decorateRule(rule); 3265 self.decorateRule(rule);
3266 rule.index = ruleIndex++;
3267 self.whenHostOrRootRule(scope, rule, style, function (info) {
3268 if (rule.parent.type === styleUtil.ruleTypes.MEDIA_RULE) {
3269 scope.__notStyleScopeCacheable = true;
3270 }
3271 if (info.isHost) {
3272 var hostContextOrFunction = info.selector.split(' ').some(function (s) {
3273 return s.indexOf(scopeSelector) === 0 && s.length !== scopeSelector.length;
3274 });
3275 scope.__notStyleScopeCacheable = scope.__notStyleScopeCacheable || hostContextOr Function;
3276 }
3277 });
2988 self.collectPropertiesInCssText(rule.propertyInfo.cssText, props); 3278 self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);
2989 }, function onKeyframesRule(rule) { 3279 }, function onKeyframesRule(rule) {
2990 keyframes.push(rule); 3280 keyframes.push(rule);
2991 }); 3281 });
2992 styles._keyframes = keyframes; 3282 styles._keyframes = keyframes;
2993 var names = []; 3283 var names = [];
2994 for (var i in props) { 3284 for (var i in props) {
2995 names.push(i); 3285 names.push(i);
2996 } 3286 }
2997 return names; 3287 return names;
(...skipping 17 matching lines...) Expand all
3015 if (info) { 3305 if (info) {
3016 if (info.properties) { 3306 if (info.properties) {
3017 Polymer.Base.mixin(properties, info.properties); 3307 Polymer.Base.mixin(properties, info.properties);
3018 return true; 3308 return true;
3019 } 3309 }
3020 } else { 3310 } else {
3021 var m, rx = this.rx.VAR_ASSIGN; 3311 var m, rx = this.rx.VAR_ASSIGN;
3022 var cssText = rule.parsedCssText; 3312 var cssText = rule.parsedCssText;
3023 var any; 3313 var any;
3024 while (m = rx.exec(cssText)) { 3314 while (m = rx.exec(cssText)) {
3025 properties[m[1]] = (m[2] || m[3]).trim(); 3315 properties[m[1].trim()] = (m[2] || m[3]).trim();
3026 any = true; 3316 any = true;
3027 } 3317 }
3028 return any; 3318 return any;
3029 } 3319 }
3030 }, 3320 },
3031 collectCssText: function (rule) { 3321 collectCssText: function (rule) {
3032 return this.collectConsumingCssText(rule.parsedCssText); 3322 return this.collectConsumingCssText(rule.parsedCssText);
3033 }, 3323 },
3034 collectConsumingCssText: function (cssText) { 3324 collectConsumingCssText: function (cssText) {
3035 return cssText.replace(this.rx.BRACKETED, '').replace(this.rx.VAR_ASSIGN, ''); 3325 return cssText.replace(this.rx.BRACKETED, '').replace(this.rx.VAR_ASSIGN, '');
3036 }, 3326 },
3037 collectPropertiesInCssText: function (cssText, props) { 3327 collectPropertiesInCssText: function (cssText, props) {
3038 var m; 3328 var m;
3039 while (m = this.rx.VAR_CAPTURE.exec(cssText)) { 3329 while (m = this.rx.VAR_CONSUMED.exec(cssText)) {
3040 props[m[1]] = true; 3330 var name = m[1];
3041 var def = m[2]; 3331 if (m[2] !== ':') {
3042 if (def && def.match(this.rx.IS_VAR)) { 3332 props[name] = true;
3043 props[def] = true;
3044 } 3333 }
3045 } 3334 }
3046 }, 3335 },
3047 reify: function (props) { 3336 reify: function (props) {
3048 var names = Object.getOwnPropertyNames(props); 3337 var names = Object.getOwnPropertyNames(props);
3049 for (var i = 0, n; i < names.length; i++) { 3338 for (var i = 0, n; i < names.length; i++) {
3050 n = names[i]; 3339 n = names[i];
3051 props[n] = this.valueForProperty(props[n], props); 3340 props[n] = this.valueForProperty(props[n], props);
3052 } 3341 }
3053 }, 3342 },
3054 valueForProperty: function (property, props) { 3343 valueForProperty: function (property, props) {
3055 if (property) { 3344 if (property) {
3056 if (property.indexOf(';') >= 0) { 3345 if (property.indexOf(';') >= 0) {
3057 property = this.valueForProperties(property, props); 3346 property = this.valueForProperties(property, props);
3058 } else { 3347 } else {
3059 var self = this; 3348 var self = this;
3060 var fn = function (all, prefix, value, fallback) { 3349 var fn = function (all, prefix, value, fallback) {
3061 var propertyValue = self.valueForProperty(props[value], props) || (props[fallbac k] ? self.valueForProperty(props[fallback], props) : fallback); 3350 var propertyValue = self.valueForProperty(props[value], props) || self.valueForP roperty(props[fallback] || fallback, props) || fallback;
3062 return prefix + (propertyValue || ''); 3351 return prefix + (propertyValue || '');
3063 }; 3352 };
3064 property = property.replace(this.rx.VAR_MATCH, fn); 3353 property = property.replace(this.rx.VAR_MATCH, fn);
3065 } 3354 }
3066 } 3355 }
3067 return property && property.trim() || ''; 3356 return property && property.trim() || '';
3068 }, 3357 },
3069 valueForProperties: function (property, props) { 3358 valueForProperties: function (property, props) {
3070 var parts = property.split(';'); 3359 var parts = property.split(';');
3071 for (var i = 0, p, m; i < parts.length; i++) { 3360 for (var i = 0, p, m; i < parts.length; i++) {
3072 if (p = parts[i]) { 3361 if (p = parts[i]) {
3073 m = p.match(this.rx.MIXIN_MATCH); 3362 this.rx.MIXIN_MATCH.lastIndex = 0;
3363 m = this.rx.MIXIN_MATCH.exec(p);
3074 if (m) { 3364 if (m) {
3075 p = this.valueForProperty(props[m[1]], props); 3365 p = this.valueForProperty(props[m[1]], props);
3076 } else { 3366 } else {
3077 var colon = p.indexOf(':'); 3367 var colon = p.indexOf(':');
3078 if (colon !== -1) { 3368 if (colon !== -1) {
3079 var pp = p.substring(colon); 3369 var pp = p.substring(colon);
3080 pp = pp.trim(); 3370 pp = pp.trim();
3081 pp = this.valueForProperty(pp, props) || pp; 3371 pp = this.valueForProperty(pp, props) || pp;
3082 p = p.substring(0, colon) + pp; 3372 p = p.substring(0, colon) + pp;
3083 } 3373 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3120 transform = keyframeTransforms[rule.keyframeNamesToTransform[i]]; 3410 transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];
3121 input = transform(input); 3411 input = transform(input);
3122 } 3412 }
3123 output = input; 3413 output = input;
3124 } 3414 }
3125 } 3415 }
3126 rule.cssText = output; 3416 rule.cssText = output;
3127 }, 3417 },
3128 propertyDataFromStyles: function (styles, element) { 3418 propertyDataFromStyles: function (styles, element) {
3129 var props = {}, self = this; 3419 var props = {}, self = this;
3130 var o = [], i = 0; 3420 var o = [];
3131 styleUtil.forRulesInStyles(styles, function (rule) { 3421 styleUtil.forActiveRulesInStyles(styles, function (rule) {
3132 if (!rule.propertyInfo) { 3422 if (!rule.propertyInfo) {
3133 self.decorateRule(rule); 3423 self.decorateRule(rule);
3134 } 3424 }
3135 if (element && rule.propertyInfo.properties && matchesSelector.call(element, rul e.transformedSelector || rule.parsedSelector)) { 3425 var selectorToMatch = rule.transformedSelector || rule.parsedSelector;
3426 if (element && rule.propertyInfo.properties && selectorToMatch) {
3427 if (matchesSelector.call(element, selectorToMatch)) {
3136 self.collectProperties(rule, props); 3428 self.collectProperties(rule, props);
3137 addToBitMask(i, o); 3429 addToBitMask(rule.index, o);
3138 } 3430 }
3139 i++; 3431 }
3140 }); 3432 });
3141 return { 3433 return {
3142 properties: props, 3434 properties: props,
3143 key: o 3435 key: o
3144 }; 3436 };
3145 }, 3437 },
3146 scopePropertiesFromStyles: function (styles) { 3438 whenHostOrRootRule: function (scope, rule, style, callback) {
3147 if (!styles._scopeStyleProperties) {
3148 styles._scopeStyleProperties = this.selectedPropertiesFromStyles(styles, this.SC OPE_SELECTORS);
3149 }
3150 return styles._scopeStyleProperties;
3151 },
3152 hostPropertiesFromStyles: function (styles) {
3153 if (!styles._hostStyleProperties) {
3154 styles._hostStyleProperties = this.selectedPropertiesFromStyles(styles, this.HOS T_SELECTORS);
3155 }
3156 return styles._hostStyleProperties;
3157 },
3158 selectedPropertiesFromStyles: function (styles, selectors) {
3159 var props = {}, self = this;
3160 styleUtil.forRulesInStyles(styles, function (rule) {
3161 if (!rule.propertyInfo) { 3439 if (!rule.propertyInfo) {
3162 self.decorateRule(rule); 3440 self.decorateRule(rule);
3163 } 3441 }
3164 for (var i = 0; i < selectors.length; i++) { 3442 if (!rule.propertyInfo.properties) {
3165 if (rule.parsedSelector === selectors[i]) {
3166 self.collectProperties(rule, props);
3167 return; 3443 return;
3168 } 3444 }
3445 var hostScope = scope.is ? styleTransformer._calcHostScope(scope.is, scope.exten ds) : 'html';
3446 var parsedSelector = rule.parsedSelector;
3447 var isRoot = parsedSelector === ':root';
3448 var isHost = parsedSelector.indexOf(':host') === 0;
3449 var cssBuild = scope.__cssBuild || style.__cssBuild;
3450 if (cssBuild === 'shady') {
3451 isRoot = parsedSelector === hostScope + '> *.' + hostScope || parsedSelector.ind exOf('html') !== -1;
3452 isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;
3453 }
3454 if (cssBuild === 'shadow') {
3455 isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';
3456 isHost = isHost && !isRoot;
3457 }
3458 if (!isRoot && !isHost) {
3459 return;
3460 }
3461 var selectorToMatch = hostScope;
3462 if (isHost) {
3463 if (settings.useNativeShadow && !rule.transformedSelector) {
3464 rule.transformedSelector = styleTransformer._transformRuleCss(rule, styleTransfo rmer._transformComplexSelector, scope.is, hostScope);
3465 }
3466 selectorToMatch = rule.transformedSelector || hostScope;
3467 }
3468 callback({
3469 selector: selectorToMatch,
3470 isHost: isHost,
3471 isRoot: isRoot
3472 });
3473 },
3474 hostAndRootPropertiesForScope: function (scope) {
3475 var hostProps = {}, rootProps = {}, self = this;
3476 styleUtil.forActiveRulesInStyles(scope._styles, function (rule, style) {
3477 self.whenHostOrRootRule(scope, rule, style, function (info) {
3478 var element = scope._element || scope;
3479 if (matchesSelector.call(element, info.selector)) {
3480 if (info.isHost) {
3481 self.collectProperties(rule, hostProps);
3482 } else {
3483 self.collectProperties(rule, rootProps);
3484 }
3169 } 3485 }
3170 }); 3486 });
3171 return props; 3487 });
3488 return {
3489 rootProps: rootProps,
3490 hostProps: hostProps
3491 };
3172 }, 3492 },
3173 transformStyles: function (element, properties, scopeSelector) { 3493 transformStyles: function (element, properties, scopeSelector) {
3174 var self = this; 3494 var self = this;
3175 var hostSelector = styleTransformer._calcHostScope(element.is, element.extends); 3495 var hostSelector = styleTransformer._calcHostScope(element.is, element.extends);
3176 var rxHostSelector = element.extends ? '\\' + hostSelector.slice(0, -1) + '\\]' : hostSelector; 3496 var rxHostSelector = element.extends ? '\\' + hostSelector.slice(0, -1) + '\\]' : hostSelector;
3177 var hostRx = new RegExp(this.rx.HOST_PREFIX + rxHostSelector + this.rx.HOST_SUFF IX); 3497 var hostRx = new RegExp(this.rx.HOST_PREFIX + rxHostSelector + this.rx.HOST_SUFF IX);
3178 var keyframeTransforms = this._elementKeyframeTransforms(element, scopeSelector) ; 3498 var keyframeTransforms = this._elementKeyframeTransforms(element, scopeSelector) ;
3179 return styleTransformer.elementStyles(element, function (rule) { 3499 return styleTransformer.elementStyles(element, function (rule) {
3180 self.applyProperties(rule, properties); 3500 self.applyProperties(rule, properties);
3181 if (!nativeShadow && !Polymer.StyleUtil.isKeyframesSelector(rule) && rule.cssTex t) { 3501 if (!settings.useNativeShadow && !Polymer.StyleUtil.isKeyframesSelector(rule) && rule.cssText) {
3182 self.applyKeyframeTransforms(rule, keyframeTransforms); 3502 self.applyKeyframeTransforms(rule, keyframeTransforms);
3183 self._scopeSelector(rule, hostRx, hostSelector, element._scopeCssViaAttr, scopeS elector); 3503 self._scopeSelector(rule, hostRx, hostSelector, element._scopeCssViaAttr, scopeS elector);
3184 } 3504 }
3185 }); 3505 });
3186 }, 3506 },
3187 _elementKeyframeTransforms: function (element, scopeSelector) { 3507 _elementKeyframeTransforms: function (element, scopeSelector) {
3188 var keyframesRules = element._styles._keyframes; 3508 var keyframesRules = element._styles._keyframes;
3189 var keyframeTransforms = {}; 3509 var keyframeTransforms = {};
3190 if (!nativeShadow && keyframesRules) { 3510 if (!settings.useNativeShadow && keyframesRules) {
3191 for (var i = 0, keyframesRule = keyframesRules[i]; i < keyframesRules.length; ke yframesRule = keyframesRules[++i]) { 3511 for (var i = 0, keyframesRule = keyframesRules[i]; i < keyframesRules.length; ke yframesRule = keyframesRules[++i]) {
3192 this._scopeKeyframes(keyframesRule, scopeSelector); 3512 this._scopeKeyframes(keyframesRule, scopeSelector);
3193 keyframeTransforms[keyframesRule.keyframesName] = this._keyframesRuleTransformer (keyframesRule); 3513 keyframeTransforms[keyframesRule.keyframesName] = this._keyframesRuleTransformer (keyframesRule);
3194 } 3514 }
3195 } 3515 }
3196 return keyframeTransforms; 3516 return keyframeTransforms;
3197 }, 3517 },
3198 _keyframesRuleTransformer: function (keyframesRule) { 3518 _keyframesRuleTransformer: function (keyframesRule) {
3199 return function (cssText) { 3519 return function (cssText) {
3200 return cssText.replace(keyframesRule.keyframesNameRx, keyframesRule.transformedK eyframesName); 3520 return cssText.replace(keyframesRule.keyframesNameRx, keyframesRule.transformedK eyframesName);
(...skipping 22 matching lines...) Expand all
3223 if (viaAttr) { 3543 if (viaAttr) {
3224 element.setAttribute(styleTransformer.SCOPE_NAME, v); 3544 element.setAttribute(styleTransformer.SCOPE_NAME, v);
3225 } else { 3545 } else {
3226 element.setAttribute('class', v); 3546 element.setAttribute('class', v);
3227 } 3547 }
3228 } 3548 }
3229 }, 3549 },
3230 applyElementStyle: function (element, properties, selector, style) { 3550 applyElementStyle: function (element, properties, selector, style) {
3231 var cssText = style ? style.textContent || '' : this.transformStyles(element, pr operties, selector); 3551 var cssText = style ? style.textContent || '' : this.transformStyles(element, pr operties, selector);
3232 var s = element._customStyle; 3552 var s = element._customStyle;
3233 if (s && !nativeShadow && s !== style) { 3553 if (s && !settings.useNativeShadow && s !== style) {
3234 s._useCount--; 3554 s._useCount--;
3235 if (s._useCount <= 0 && s.parentNode) { 3555 if (s._useCount <= 0 && s.parentNode) {
3236 s.parentNode.removeChild(s); 3556 s.parentNode.removeChild(s);
3237 } 3557 }
3238 } 3558 }
3239 if (nativeShadow || (!style || !style.parentNode)) { 3559 if (settings.useNativeShadow) {
3240 if (nativeShadow && element._customStyle) { 3560 if (element._customStyle) {
3241 element._customStyle.textContent = cssText; 3561 element._customStyle.textContent = cssText;
3242 style = element._customStyle; 3562 style = element._customStyle;
3243 } else if (cssText) { 3563 } else if (cssText) {
3244 style = styleUtil.applyCss(cssText, selector, nativeShadow ? element.root : null , element._scopeStyle); 3564 style = styleUtil.applyCss(cssText, selector, element.root, element._scopeStyle) ;
3565 }
3566 } else {
3567 if (!style) {
3568 if (cssText) {
3569 style = styleUtil.applyCss(cssText, selector, null, element._scopeStyle);
3570 }
3571 } else if (!style.parentNode) {
3572 styleUtil.applyStyle(style, null, element._scopeStyle);
3245 } 3573 }
3246 } 3574 }
3247 if (style) { 3575 if (style) {
3248 style._useCount = style._useCount || 0; 3576 style._useCount = style._useCount || 0;
3249 if (element._customStyle != style) { 3577 if (element._customStyle != style) {
3250 style._useCount++; 3578 style._useCount++;
3251 } 3579 }
3252 element._customStyle = style; 3580 element._customStyle = style;
3253 } 3581 }
3254 return style; 3582 return style;
3255 }, 3583 },
3256 mixinCustomStyle: function (props, customStyle) { 3584 mixinCustomStyle: function (props, customStyle) {
3257 var v; 3585 var v;
3258 for (var i in customStyle) { 3586 for (var i in customStyle) {
3259 v = customStyle[i]; 3587 v = customStyle[i];
3260 if (v || v === 0) { 3588 if (v || v === 0) {
3261 props[i] = v; 3589 props[i] = v;
3262 } 3590 }
3263 } 3591 }
3264 }, 3592 },
3265 rx: { 3593 updateNativeStyleProperties: function (element, properties) {
3266 VAR_ASSIGN: /(?:^|[;\s{]\s*)(--[\w-]*?)\s*:\s*(?:([^;{]*)|{([^}]*)})(?:(?=[;\s}] )|$)/gi, 3594 for (var i = 0; i < element.style.length; i++) {
3267 MIXIN_MATCH: /(?:^|\W+)@apply[\s]*\(([^)]*)\)/i, 3595 element.style.removeProperty(element.style[i]);
3268 VAR_MATCH: /(^|\W+)var\([\s]*([^,)]*)[\s]*,?[\s]*((?:[^,()]*)|(?:[^;()]*\([^;)]* \)))[\s]*?\)/gi, 3596 }
3269 VAR_CAPTURE: /\([\s]*(--[^,\s)]*)(?:,[\s]*(--[^,\s)]*))?(?:\)|,)/gi, 3597 for (var p in properties) {
3270 ANIMATION_MATCH: /(animation\s*:)|(animation-name\s*:)/, 3598 if (properties[p] !== null) {
3271 IS_VAR: /^--/, 3599 element.style.setProperty(p, properties[p]);
3272 BRACKETED: /\{[^}]*\}/g, 3600 }
3273 HOST_PREFIX: '(?:^|[^.#[:])', 3601 }
3274 HOST_SUFFIX: '($|[.:[\\s>+~])'
3275 }, 3602 },
3276 HOST_SELECTORS: [':host'], 3603 rx: styleUtil.rx,
3277 SCOPE_SELECTORS: [':root'],
3278 XSCOPE_NAME: 'x-scope' 3604 XSCOPE_NAME: 'x-scope'
3279 }; 3605 };
3280 function addToBitMask(n, bits) { 3606 function addToBitMask(n, bits) {
3281 var o = parseInt(n / 32); 3607 var o = parseInt(n / 32);
3282 var v = 1 << n % 32; 3608 var v = 1 << n % 32;
3283 bits[o] = (bits[o] || 0) | v; 3609 bits[o] = (bits[o] || 0) | v;
3284 } 3610 }
3285 }(); 3611 }();(function () {
3286 (function () {
3287 Polymer.StyleCache = function () { 3612 Polymer.StyleCache = function () {
3288 this.cache = {}; 3613 this.cache = {};
3289 }; 3614 };
3290 Polymer.StyleCache.prototype = { 3615 Polymer.StyleCache.prototype = {
3291 MAX: 100, 3616 MAX: 100,
3292 store: function (is, data, keyValues, keyStyles) { 3617 store: function (is, data, keyValues, keyStyles) {
3293 data.keyValues = keyValues; 3618 data.keyValues = keyValues;
3294 data.styles = keyStyles; 3619 data.styles = keyStyles;
3295 var s$ = this.cache[is] = this.cache[is] || []; 3620 var s$ = this.cache[is] = this.cache[is] || [];
3296 s$.push(data); 3621 s$.push(data);
(...skipping 25 matching lines...) Expand all
3322 } 3647 }
3323 if (Array.isArray(target)) { 3648 if (Array.isArray(target)) {
3324 return target.length === source.length; 3649 return target.length === source.length;
3325 } 3650 }
3326 return true; 3651 return true;
3327 }, 3652 },
3328 _objectsStrictlyEqual: function (target, source) { 3653 _objectsStrictlyEqual: function (target, source) {
3329 return this._objectsEqual(target, source) && this._objectsEqual(source, target); 3654 return this._objectsEqual(target, source) && this._objectsEqual(source, target);
3330 } 3655 }
3331 }; 3656 };
3332 }()); 3657 }());Polymer.StyleDefaults = function () {
3333 Polymer.StyleDefaults = function () {
3334 var styleProperties = Polymer.StyleProperties; 3658 var styleProperties = Polymer.StyleProperties;
3335 var StyleCache = Polymer.StyleCache; 3659 var StyleCache = Polymer.StyleCache;
3660 var nativeVariables = Polymer.Settings.useNativeCSSProperties;
3336 var api = { 3661 var api = {
3337 _styles: [], 3662 _styles: [],
3338 _properties: null, 3663 _properties: null,
3339 customStyle: {}, 3664 customStyle: {},
3340 _styleCache: new StyleCache(), 3665 _styleCache: new StyleCache(),
3666 _element: Polymer.DomApi.wrap(document.documentElement),
3341 addStyle: function (style) { 3667 addStyle: function (style) {
3342 this._styles.push(style); 3668 this._styles.push(style);
3343 this._properties = null; 3669 this._properties = null;
3344 }, 3670 },
3345 get _styleProperties() { 3671 get _styleProperties() {
3346 if (!this._properties) { 3672 if (!this._properties) {
3347 styleProperties.decorateStyles(this._styles); 3673 styleProperties.decorateStyles(this._styles, this);
3348 this._styles._scopeStyleProperties = null; 3674 this._styles._scopeStyleProperties = null;
3349 this._properties = styleProperties.scopePropertiesFromStyles(this._styles); 3675 this._properties = styleProperties.hostAndRootPropertiesForScope(this).rootProps ;
3350 styleProperties.mixinCustomStyle(this._properties, this.customStyle); 3676 styleProperties.mixinCustomStyle(this._properties, this.customStyle);
3351 styleProperties.reify(this._properties); 3677 styleProperties.reify(this._properties);
3352 } 3678 }
3353 return this._properties; 3679 return this._properties;
3354 }, 3680 },
3681 hasStyleProperties: function () {
3682 return Boolean(this._properties);
3683 },
3355 _needsStyleProperties: function () { 3684 _needsStyleProperties: function () {
3356 }, 3685 },
3357 _computeStyleProperties: function () { 3686 _computeStyleProperties: function () {
3358 return this._styleProperties; 3687 return this._styleProperties;
3359 }, 3688 },
3360 updateStyles: function (properties) { 3689 updateStyles: function (properties) {
3361 this._properties = null; 3690 this._properties = null;
3362 if (properties) { 3691 if (properties) {
3363 Polymer.Base.mixin(this.customStyle, properties); 3692 Polymer.Base.mixin(this.customStyle, properties);
3364 } 3693 }
3365 this._styleCache.clear(); 3694 this._styleCache.clear();
3366 for (var i = 0, s; i < this._styles.length; i++) { 3695 for (var i = 0, s; i < this._styles.length; i++) {
3367 s = this._styles[i]; 3696 s = this._styles[i];
3368 s = s.__importElement || s; 3697 s = s.__importElement || s;
3369 s._apply(); 3698 s._apply();
3370 } 3699 }
3700 if (nativeVariables) {
3701 styleProperties.updateNativeStyleProperties(document.documentElement, this.custo mStyle);
3702 }
3371 } 3703 }
3372 }; 3704 };
3373 return api; 3705 return api;
3374 }(); 3706 }();(function () {
3375 (function () {
3376 'use strict'; 3707 'use strict';
3377 var serializeValueToAttribute = Polymer.Base.serializeValueToAttribute; 3708 var serializeValueToAttribute = Polymer.Base.serializeValueToAttribute;
3378 var propertyUtils = Polymer.StyleProperties; 3709 var propertyUtils = Polymer.StyleProperties;
3379 var styleTransformer = Polymer.StyleTransformer; 3710 var styleTransformer = Polymer.StyleTransformer;
3380 var styleDefaults = Polymer.StyleDefaults; 3711 var styleDefaults = Polymer.StyleDefaults;
3381 var nativeShadow = Polymer.Settings.useNativeShadow; 3712 var nativeShadow = Polymer.Settings.useNativeShadow;
3713 var nativeVariables = Polymer.Settings.useNativeCSSProperties;
3382 Polymer.Base._addFeature({ 3714 Polymer.Base._addFeature({
3383 _prepStyleProperties: function () { 3715 _prepStyleProperties: function () {
3384 this._ownStylePropertyNames = this._styles && this._styles.length ? propertyUtil s.decorateStyles(this._styles) : null; 3716 if (!nativeVariables) {
3717 this._ownStylePropertyNames = this._styles && this._styles.length ? propertyUtil s.decorateStyles(this._styles, this) : null;
3718 }
3385 }, 3719 },
3386 customStyle: null, 3720 customStyle: null,
3387 getComputedStyleValue: function (property) { 3721 getComputedStyleValue: function (property) {
3388 return this._styleProperties && this._styleProperties[property] || getComputedSt yle(this).getPropertyValue(property); 3722 return !nativeVariables && this._styleProperties && this._styleProperties[proper ty] || getComputedStyle(this).getPropertyValue(property);
3389 }, 3723 },
3390 _setupStyleProperties: function () { 3724 _setupStyleProperties: function () {
3391 this.customStyle = {}; 3725 this.customStyle = {};
3392 this._styleCache = null; 3726 this._styleCache = null;
3393 this._styleProperties = null; 3727 this._styleProperties = null;
3394 this._scopeSelector = null; 3728 this._scopeSelector = null;
3395 this._ownStyleProperties = null; 3729 this._ownStyleProperties = null;
3396 this._customStyle = null; 3730 this._customStyle = null;
3397 }, 3731 },
3398 _needsStyleProperties: function () { 3732 _needsStyleProperties: function () {
3399 return Boolean(this._ownStylePropertyNames && this._ownStylePropertyNames.length ); 3733 return Boolean(!nativeVariables && this._ownStylePropertyNames && this._ownStyle PropertyNames.length);
3400 }, 3734 },
3401 _beforeAttached: function () { 3735 _beforeAttached: function () {
3402 if (!this._scopeSelector && this._needsStyleProperties()) { 3736 if ((!this._scopeSelector || this.__stylePropertiesInvalid) && this._needsStyleP roperties()) {
3737 this.__stylePropertiesInvalid = false;
3403 this._updateStyleProperties(); 3738 this._updateStyleProperties();
3404 } 3739 }
3405 }, 3740 },
3406 _findStyleHost: function () { 3741 _findStyleHost: function () {
3407 var e = this, root; 3742 var e = this, root;
3408 while (root = Polymer.dom(e).getOwnerRoot()) { 3743 while (root = Polymer.dom(e).getOwnerRoot()) {
3409 if (Polymer.isInstance(root.host)) { 3744 if (Polymer.isInstance(root.host)) {
3410 return root.host; 3745 return root.host;
3411 } 3746 }
3412 e = root.host; 3747 e = root.host;
3413 } 3748 }
3414 return styleDefaults; 3749 return styleDefaults;
3415 }, 3750 },
3416 _updateStyleProperties: function () { 3751 _updateStyleProperties: function () {
3417 var info, scope = this._findStyleHost(); 3752 var info, scope = this._findStyleHost();
3418 if (!scope._styleCache) { 3753 if (!scope._styleCache) {
3419 scope._styleCache = new Polymer.StyleCache(); 3754 scope._styleCache = new Polymer.StyleCache();
3420 } 3755 }
3421 var scopeData = propertyUtils.propertyDataFromStyles(scope._styles, this); 3756 var scopeData = propertyUtils.propertyDataFromStyles(scope._styles, this);
3757 var scopeCacheable = !this.__notStyleScopeCacheable;
3758 if (scopeCacheable) {
3422 scopeData.key.customStyle = this.customStyle; 3759 scopeData.key.customStyle = this.customStyle;
3423 info = scope._styleCache.retrieve(this.is, scopeData.key, this._styles); 3760 info = scope._styleCache.retrieve(this.is, scopeData.key, this._styles);
3761 }
3424 var scopeCached = Boolean(info); 3762 var scopeCached = Boolean(info);
3425 if (scopeCached) { 3763 if (scopeCached) {
3426 this._styleProperties = info._styleProperties; 3764 this._styleProperties = info._styleProperties;
3427 } else { 3765 } else {
3428 this._computeStyleProperties(scopeData.properties); 3766 this._computeStyleProperties(scopeData.properties);
3429 } 3767 }
3430 this._computeOwnStyleProperties(); 3768 this._computeOwnStyleProperties();
3431 if (!scopeCached) { 3769 if (!scopeCached) {
3432 info = styleCache.retrieve(this.is, this._ownStyleProperties, this._styles); 3770 info = styleCache.retrieve(this.is, this._ownStyleProperties, this._styles);
3433 } 3771 }
3434 var globalCached = Boolean(info) && !scopeCached; 3772 var globalCached = Boolean(info) && !scopeCached;
3435 var style = this._applyStyleProperties(info); 3773 var style = this._applyStyleProperties(info);
3436 if (!scopeCached) { 3774 if (!scopeCached) {
3437 style = style && nativeShadow ? style.cloneNode(true) : style; 3775 style = style && nativeShadow ? style.cloneNode(true) : style;
3438 info = { 3776 info = {
3439 style: style, 3777 style: style,
3440 _scopeSelector: this._scopeSelector, 3778 _scopeSelector: this._scopeSelector,
3441 _styleProperties: this._styleProperties 3779 _styleProperties: this._styleProperties
3442 }; 3780 };
3781 if (scopeCacheable) {
3443 scopeData.key.customStyle = {}; 3782 scopeData.key.customStyle = {};
3444 this.mixin(scopeData.key.customStyle, this.customStyle); 3783 this.mixin(scopeData.key.customStyle, this.customStyle);
3445 scope._styleCache.store(this.is, info, scopeData.key, this._styles); 3784 scope._styleCache.store(this.is, info, scopeData.key, this._styles);
3785 }
3446 if (!globalCached) { 3786 if (!globalCached) {
3447 styleCache.store(this.is, Object.create(info), this._ownStyleProperties, this._s tyles); 3787 styleCache.store(this.is, Object.create(info), this._ownStyleProperties, this._s tyles);
3448 } 3788 }
3449 } 3789 }
3450 }, 3790 },
3451 _computeStyleProperties: function (scopeProps) { 3791 _computeStyleProperties: function (scopeProps) {
3452 var scope = this._findStyleHost(); 3792 var scope = this._findStyleHost();
3453 if (!scope._styleProperties) { 3793 if (!scope._styleProperties) {
3454 scope._computeStyleProperties(); 3794 scope._computeStyleProperties();
3455 } 3795 }
3456 var props = Object.create(scope._styleProperties); 3796 var props = Object.create(scope._styleProperties);
3457 this.mixin(props, propertyUtils.hostPropertiesFromStyles(this._styles)); 3797 var hostAndRootProps = propertyUtils.hostAndRootPropertiesForScope(this);
3798 this.mixin(props, hostAndRootProps.hostProps);
3458 scopeProps = scopeProps || propertyUtils.propertyDataFromStyles(scope._styles, t his).properties; 3799 scopeProps = scopeProps || propertyUtils.propertyDataFromStyles(scope._styles, t his).properties;
3459 this.mixin(props, scopeProps); 3800 this.mixin(props, scopeProps);
3460 this.mixin(props, propertyUtils.scopePropertiesFromStyles(this._styles)); 3801 this.mixin(props, hostAndRootProps.rootProps);
3461 propertyUtils.mixinCustomStyle(props, this.customStyle); 3802 propertyUtils.mixinCustomStyle(props, this.customStyle);
3462 propertyUtils.reify(props); 3803 propertyUtils.reify(props);
3463 this._styleProperties = props; 3804 this._styleProperties = props;
3464 }, 3805 },
3465 _computeOwnStyleProperties: function () { 3806 _computeOwnStyleProperties: function () {
3466 var props = {}; 3807 var props = {};
3467 for (var i = 0, n; i < this._ownStylePropertyNames.length; i++) { 3808 for (var i = 0, n; i < this._ownStylePropertyNames.length; i++) {
3468 n = this._ownStylePropertyNames[i]; 3809 n = this._ownStylePropertyNames[i];
3469 props[n] = this._styleProperties[n]; 3810 props[n] = this._styleProperties[n];
3470 } 3811 }
(...skipping 20 matching lines...) Expand all
3491 node = this.shadyRoot && this.shadyRoot._hasDistributed ? Polymer.dom(node) : no de; 3832 node = this.shadyRoot && this.shadyRoot._hasDistributed ? Polymer.dom(node) : no de;
3492 serializeValueToAttribute.call(this, value, attribute, node); 3833 serializeValueToAttribute.call(this, value, attribute, node);
3493 }, 3834 },
3494 _scopeElementClass: function (element, selector) { 3835 _scopeElementClass: function (element, selector) {
3495 if (!nativeShadow && !this._scopeCssViaAttr) { 3836 if (!nativeShadow && !this._scopeCssViaAttr) {
3496 selector = (selector ? selector + ' ' : '') + SCOPE_NAME + ' ' + this.is + (elem ent._scopeSelector ? ' ' + XSCOPE_NAME + ' ' + element._scopeSelector : ''); 3837 selector = (selector ? selector + ' ' : '') + SCOPE_NAME + ' ' + this.is + (elem ent._scopeSelector ? ' ' + XSCOPE_NAME + ' ' + element._scopeSelector : '');
3497 } 3838 }
3498 return selector; 3839 return selector;
3499 }, 3840 },
3500 updateStyles: function (properties) { 3841 updateStyles: function (properties) {
3501 if (this.isAttached) {
3502 if (properties) { 3842 if (properties) {
3503 this.mixin(this.customStyle, properties); 3843 this.mixin(this.customStyle, properties);
3504 } 3844 }
3845 if (nativeVariables) {
3846 propertyUtils.updateNativeStyleProperties(this, this.customStyle);
3847 } else {
3848 if (this.isAttached) {
3505 if (this._needsStyleProperties()) { 3849 if (this._needsStyleProperties()) {
3506 this._updateStyleProperties(); 3850 this._updateStyleProperties();
3507 } else { 3851 } else {
3508 this._styleProperties = null; 3852 this._styleProperties = null;
3509 } 3853 }
3854 } else {
3855 this.__stylePropertiesInvalid = true;
3856 }
3510 if (this._styleCache) { 3857 if (this._styleCache) {
3511 this._styleCache.clear(); 3858 this._styleCache.clear();
3512 } 3859 }
3513 this._updateRootStyles(); 3860 this._updateRootStyles();
3514 } 3861 }
3515 }, 3862 },
3516 _updateRootStyles: function (root) { 3863 _updateRootStyles: function (root) {
3517 root = root || this.root; 3864 root = root || this.root;
3518 var c$ = Polymer.dom(root)._query(function (e) { 3865 var c$ = Polymer.dom(root)._query(function (e) {
3519 return e.shadyRoot || e.shadowRoot; 3866 return e.shadyRoot || e.shadowRoot;
3520 }); 3867 });
3521 for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) { 3868 for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
3522 if (c.updateStyles) { 3869 if (c.updateStyles) {
3523 c.updateStyles(); 3870 c.updateStyles();
3524 } 3871 }
3525 } 3872 }
3526 } 3873 }
3527 }); 3874 });
3528 Polymer.updateStyles = function (properties) { 3875 Polymer.updateStyles = function (properties) {
3529 styleDefaults.updateStyles(properties); 3876 styleDefaults.updateStyles(properties);
3530 Polymer.Base._updateRootStyles(document); 3877 Polymer.Base._updateRootStyles(document);
3531 }; 3878 };
3532 var styleCache = new Polymer.StyleCache(); 3879 var styleCache = new Polymer.StyleCache();
3533 Polymer.customStyleCache = styleCache; 3880 Polymer.customStyleCache = styleCache;
3534 var SCOPE_NAME = styleTransformer.SCOPE_NAME; 3881 var SCOPE_NAME = styleTransformer.SCOPE_NAME;
3535 var XSCOPE_NAME = propertyUtils.XSCOPE_NAME; 3882 var XSCOPE_NAME = propertyUtils.XSCOPE_NAME;
3536 }()); 3883 }());Polymer.Base._addFeature({
3537 Polymer.Base._addFeature({
3538 _registerFeatures: function () { 3884 _registerFeatures: function () {
3539 this._prepIs(); 3885 this._prepIs();
3540 this._prepConstructor(); 3886 this._prepConstructor();
3541 this._prepStyles(); 3887 this._prepStyles();
3542 }, 3888 },
3543 _finishRegisterFeatures: function () { 3889 _finishRegisterFeatures: function () {
3544 this._prepTemplate(); 3890 this._prepTemplate();
3545 this._prepShimStyles(); 3891 this._prepShimStyles();
3546 this._prepAnnotations(); 3892 this._prepAnnotations();
3547 this._prepEffects(); 3893 this._prepEffects();
(...skipping 25 matching lines...) Expand all
3573 this._marshalBehaviors(); 3919 this._marshalBehaviors();
3574 this._marshalHostAttributes(); 3920 this._marshalHostAttributes();
3575 this._marshalAttributes(); 3921 this._marshalAttributes();
3576 this._tryReady(); 3922 this._tryReady();
3577 }, 3923 },
3578 _marshalBehavior: function (b) { 3924 _marshalBehavior: function (b) {
3579 if (b.listeners) { 3925 if (b.listeners) {
3580 this._listenListeners(b.listeners); 3926 this._listenListeners(b.listeners);
3581 } 3927 }
3582 } 3928 }
3583 }); 3929 });(function () {
3584 (function () {
3585 var propertyUtils = Polymer.StyleProperties; 3930 var propertyUtils = Polymer.StyleProperties;
3586 var styleUtil = Polymer.StyleUtil; 3931 var styleUtil = Polymer.StyleUtil;
3587 var cssParse = Polymer.CssParse; 3932 var cssParse = Polymer.CssParse;
3588 var styleDefaults = Polymer.StyleDefaults; 3933 var styleDefaults = Polymer.StyleDefaults;
3589 var styleTransformer = Polymer.StyleTransformer; 3934 var styleTransformer = Polymer.StyleTransformer;
3935 var applyShim = Polymer.ApplyShim;
3936 var debounce = Polymer.Debounce;
3937 var settings = Polymer.Settings;
3938 var updateDebouncer;
3590 Polymer({ 3939 Polymer({
3591 is: 'custom-style', 3940 is: 'custom-style',
3592 extends: 'style', 3941 extends: 'style',
3593 _template: null, 3942 _template: null,
3594 properties: { include: String }, 3943 properties: { include: String },
3595 ready: function () { 3944 ready: function () {
3945 this.__appliedElement = this.__appliedElement || this;
3946 this.__cssBuild = styleUtil.getCssBuildType(this);
3947 if (this.__appliedElement !== this) {
3948 this.__appliedElement.__cssBuild = this.__cssBuild;
3949 }
3596 this._tryApply(); 3950 this._tryApply();
3597 }, 3951 },
3598 attached: function () { 3952 attached: function () {
3599 this._tryApply(); 3953 this._tryApply();
3600 }, 3954 },
3601 _tryApply: function () { 3955 _tryApply: function () {
3602 if (!this._appliesToDocument) { 3956 if (!this._appliesToDocument) {
3603 if (this.parentNode && this.parentNode.localName !== 'dom-module') { 3957 if (this.parentNode && this.parentNode.localName !== 'dom-module') {
3604 this._appliesToDocument = true; 3958 this._appliesToDocument = true;
3605 var e = this.__appliedElement || this; 3959 var e = this.__appliedElement;
3960 if (!settings.useNativeCSSProperties) {
3961 this.__needsUpdateStyles = styleDefaults.hasStyleProperties();
3606 styleDefaults.addStyle(e); 3962 styleDefaults.addStyle(e);
3963 }
3607 if (e.textContent || this.include) { 3964 if (e.textContent || this.include) {
3608 this._apply(true); 3965 this._apply(true);
3609 } else { 3966 } else {
3610 var self = this; 3967 var self = this;
3611 var observer = new MutationObserver(function () { 3968 var observer = new MutationObserver(function () {
3612 observer.disconnect(); 3969 observer.disconnect();
3613 self._apply(true); 3970 self._apply(true);
3614 }); 3971 });
3615 observer.observe(e, { childList: true }); 3972 observer.observe(e, { childList: true });
3616 } 3973 }
3617 } 3974 }
3618 } 3975 }
3619 }, 3976 },
3620 _apply: function (deferProperties) { 3977 _updateStyles: function () {
3621 var e = this.__appliedElement || this; 3978 Polymer.updateStyles();
3979 },
3980 _apply: function (initialApply) {
3981 var e = this.__appliedElement;
3622 if (this.include) { 3982 if (this.include) {
3623 e.textContent = styleUtil.cssFromModules(this.include, true) + e.textContent; 3983 e.textContent = styleUtil.cssFromModules(this.include, true) + e.textContent;
3624 } 3984 }
3625 if (e.textContent) { 3985 if (!e.textContent) {
3626 styleUtil.forEachRule(styleUtil.rulesForStyle(e), function (rule) { 3986 return;
3987 }
3988 var buildType = this.__cssBuild;
3989 var targetedBuild = styleUtil.isTargetedBuild(buildType);
3990 if (settings.useNativeCSSProperties && targetedBuild) {
3991 return;
3992 }
3993 var styleRules = styleUtil.rulesForStyle(e);
3994 if (!targetedBuild) {
3995 styleUtil.forEachRule(styleRules, function (rule) {
3627 styleTransformer.documentRule(rule); 3996 styleTransformer.documentRule(rule);
3997 if (settings.useNativeCSSProperties && !buildType) {
3998 applyShim.transformRule(rule);
3999 }
3628 }); 4000 });
4001 }
4002 if (settings.useNativeCSSProperties) {
4003 e.textContent = styleUtil.toCssText(styleRules);
4004 } else {
3629 var self = this; 4005 var self = this;
3630 var fn = function fn() { 4006 var fn = function fn() {
3631 self._applyCustomProperties(e); 4007 self._flushCustomProperties();
3632 }; 4008 };
3633 if (this._pendingApplyProperties) { 4009 if (initialApply) {
3634 cancelAnimationFrame(this._pendingApplyProperties); 4010 Polymer.RenderStatus.whenReady(fn);
3635 this._pendingApplyProperties = null;
3636 }
3637 if (deferProperties) {
3638 this._pendingApplyProperties = requestAnimationFrame(fn);
3639 } else { 4011 } else {
3640 fn(); 4012 fn();
3641 } 4013 }
3642 } 4014 }
3643 }, 4015 },
3644 _applyCustomProperties: function (element) { 4016 _flushCustomProperties: function () {
4017 if (this.__needsUpdateStyles) {
4018 this.__needsUpdateStyles = false;
4019 updateDebouncer = debounce(updateDebouncer, this._updateStyles);
4020 } else {
4021 this._applyCustomProperties();
4022 }
4023 },
4024 _applyCustomProperties: function () {
4025 var element = this.__appliedElement;
3645 this._computeStyleProperties(); 4026 this._computeStyleProperties();
3646 var props = this._styleProperties; 4027 var props = this._styleProperties;
3647 var rules = styleUtil.rulesForStyle(element); 4028 var rules = styleUtil.rulesForStyle(element);
4029 if (!rules) {
4030 return;
4031 }
3648 element.textContent = styleUtil.toCssText(rules, function (rule) { 4032 element.textContent = styleUtil.toCssText(rules, function (rule) {
3649 var css = rule.cssText = rule.parsedCssText; 4033 var css = rule.cssText = rule.parsedCssText;
3650 if (rule.propertyInfo && rule.propertyInfo.cssText) { 4034 if (rule.propertyInfo && rule.propertyInfo.cssText) {
3651 css = cssParse.removeCustomPropAssignment(css); 4035 css = cssParse.removeCustomPropAssignment(css);
3652 rule.cssText = propertyUtils.valueForProperties(css, props); 4036 rule.cssText = propertyUtils.valueForProperties(css, props);
3653 } 4037 }
3654 }); 4038 });
3655 } 4039 }
3656 }); 4040 });
3657 }()); 4041 }());Polymer.Templatizer = {
3658 Polymer.Templatizer = {
3659 properties: { __hideTemplateChildren__: { observer: '_showHideChildren' } }, 4042 properties: { __hideTemplateChildren__: { observer: '_showHideChildren' } },
3660 _instanceProps: Polymer.nob, 4043 _instanceProps: Polymer.nob,
3661 _parentPropPrefix: '_parent_', 4044 _parentPropPrefix: '_parent_',
3662 templatize: function (template) { 4045 templatize: function (template) {
3663 this._templatized = template; 4046 this._templatized = template;
3664 if (!template._content) { 4047 if (!template._content) {
3665 template._content = template.content; 4048 template._content = template.content;
3666 } 4049 }
3667 if (template._content._ctor) { 4050 if (template._content._ctor) {
3668 this.ctor = template._content._ctor; 4051 this.ctor = template._content._ctor;
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
3838 _forwardInstancePath: function (inst, path, value) { 4221 _forwardInstancePath: function (inst, path, value) {
3839 }, 4222 },
3840 _forwardInstanceProp: function (inst, prop, value) { 4223 _forwardInstanceProp: function (inst, prop, value) {
3841 }, 4224 },
3842 _notifyPathUpImpl: function (path, value) { 4225 _notifyPathUpImpl: function (path, value) {
3843 var dataHost = this.dataHost; 4226 var dataHost = this.dataHost;
3844 var dot = path.indexOf('.'); 4227 var dot = path.indexOf('.');
3845 var root = dot < 0 ? path : path.slice(0, dot); 4228 var root = dot < 0 ? path : path.slice(0, dot);
3846 dataHost._forwardInstancePath.call(dataHost, this, path, value); 4229 dataHost._forwardInstancePath.call(dataHost, this, path, value);
3847 if (root in dataHost._parentProps) { 4230 if (root in dataHost._parentProps) {
3848 dataHost._templatized.notifyPath(dataHost._parentPropPrefix + path, value); 4231 dataHost._templatized._notifyPath(dataHost._parentPropPrefix + path, value);
3849 } 4232 }
3850 }, 4233 },
3851 _pathEffectorImpl: function (path, value, fromAbove) { 4234 _pathEffectorImpl: function (path, value, fromAbove) {
3852 if (this._forwardParentPath) { 4235 if (this._forwardParentPath) {
3853 if (path.indexOf(this._parentPropPrefix) === 0) { 4236 if (path.indexOf(this._parentPropPrefix) === 0) {
3854 var subPath = path.substring(this._parentPropPrefix.length); 4237 var subPath = path.substring(this._parentPropPrefix.length);
3855 var model = this._modelForPath(subPath); 4238 var model = this._modelForPath(subPath);
3856 if (model in this._parentProps) { 4239 if (model in this._parentProps) {
3857 this._forwardParentPath(subPath, value); 4240 this._forwardParentPath(subPath, value);
3858 } 4241 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3891 e.model = model; 4274 e.model = model;
3892 handler(e); 4275 handler(e);
3893 }; 4276 };
3894 host._listen(node, eventName, decorated); 4277 host._listen(node, eventName, decorated);
3895 }, 4278 },
3896 _scopeElementClassImpl: function (node, value) { 4279 _scopeElementClassImpl: function (node, value) {
3897 var host = this._rootDataHost; 4280 var host = this._rootDataHost;
3898 if (host) { 4281 if (host) {
3899 return host._scopeElementClass(node, value); 4282 return host._scopeElementClass(node, value);
3900 } 4283 }
4284 return value;
3901 }, 4285 },
3902 stamp: function (model) { 4286 stamp: function (model) {
3903 model = model || {}; 4287 model = model || {};
3904 if (this._parentProps) { 4288 if (this._parentProps) {
3905 var templatized = this._templatized; 4289 var templatized = this._templatized;
3906 for (var prop in this._parentProps) { 4290 for (var prop in this._parentProps) {
3907 if (model[prop] === undefined) { 4291 if (model[prop] === undefined) {
3908 model[prop] = templatized[this._parentPropPrefix + prop]; 4292 model[prop] = templatized[this._parentPropPrefix + prop];
3909 } 4293 }
3910 } 4294 }
3911 } 4295 }
3912 return new this.ctor(model, this); 4296 return new this.ctor(model, this);
3913 }, 4297 },
3914 modelForElement: function (el) { 4298 modelForElement: function (el) {
3915 var model; 4299 var model;
3916 while (el) { 4300 while (el) {
3917 if (model = el._templateInstance) { 4301 if (model = el._templateInstance) {
3918 if (model.dataHost != this) { 4302 if (model.dataHost != this) {
3919 el = model.dataHost; 4303 el = model.dataHost;
3920 } else { 4304 } else {
3921 return model; 4305 return model;
3922 } 4306 }
3923 } else { 4307 } else {
3924 el = el.parentNode; 4308 el = el.parentNode;
3925 } 4309 }
3926 } 4310 }
3927 } 4311 }
3928 }; 4312 };Polymer({
3929 Polymer({
3930 is: 'dom-template', 4313 is: 'dom-template',
3931 extends: 'template', 4314 extends: 'template',
3932 _template: null, 4315 _template: null,
3933 behaviors: [Polymer.Templatizer], 4316 behaviors: [Polymer.Templatizer],
3934 ready: function () { 4317 ready: function () {
3935 this.templatize(this); 4318 this.templatize(this);
3936 } 4319 }
3937 }); 4320 });Polymer._collections = new WeakMap();
3938 Polymer._collections = new WeakMap();
3939 Polymer.Collection = function (userArray) { 4321 Polymer.Collection = function (userArray) {
3940 Polymer._collections.set(userArray, this); 4322 Polymer._collections.set(userArray, this);
3941 this.userArray = userArray; 4323 this.userArray = userArray;
3942 this.store = userArray.slice(); 4324 this.store = userArray.slice();
3943 this.initMap(); 4325 this.initMap();
3944 }; 4326 };
3945 Polymer.Collection.prototype = { 4327 Polymer.Collection.prototype = {
3946 constructor: Polymer.Collection, 4328 constructor: Polymer.Collection,
3947 initMap: function () { 4329 initMap: function () {
3948 var omap = this.omap = new WeakMap(); 4330 var omap = this.omap = new WeakMap();
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
4063 added: added 4445 added: added
4064 }]; 4446 }];
4065 } 4447 }
4066 }; 4448 };
4067 Polymer.Collection.get = function (userArray) { 4449 Polymer.Collection.get = function (userArray) {
4068 return Polymer._collections.get(userArray) || new Polymer.Collection(userArray); 4450 return Polymer._collections.get(userArray) || new Polymer.Collection(userArray);
4069 }; 4451 };
4070 Polymer.Collection.applySplices = function (userArray, splices) { 4452 Polymer.Collection.applySplices = function (userArray, splices) {
4071 var coll = Polymer._collections.get(userArray); 4453 var coll = Polymer._collections.get(userArray);
4072 return coll ? coll._applySplices(splices) : null; 4454 return coll ? coll._applySplices(splices) : null;
4073 }; 4455 };Polymer({
4074 Polymer({
4075 is: 'dom-repeat', 4456 is: 'dom-repeat',
4076 extends: 'template', 4457 extends: 'template',
4077 _template: null, 4458 _template: null,
4078 properties: { 4459 properties: {
4079 items: { type: Array }, 4460 items: { type: Array },
4080 as: { 4461 as: {
4081 type: String, 4462 type: String,
4082 value: 'item' 4463 value: 'item'
4083 }, 4464 },
4084 indexAs: { 4465 indexAs: {
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
4530 return instance && instance[this.as]; 4911 return instance && instance[this.as];
4531 }, 4912 },
4532 keyForElement: function (el) { 4913 keyForElement: function (el) {
4533 var instance = this.modelForElement(el); 4914 var instance = this.modelForElement(el);
4534 return instance && instance.__key__; 4915 return instance && instance.__key__;
4535 }, 4916 },
4536 indexForElement: function (el) { 4917 indexForElement: function (el) {
4537 var instance = this.modelForElement(el); 4918 var instance = this.modelForElement(el);
4538 return instance && instance[this.indexAs]; 4919 return instance && instance[this.indexAs];
4539 } 4920 }
4540 }); 4921 });Polymer({
4541 Polymer({
4542 is: 'array-selector', 4922 is: 'array-selector',
4543 _template: null, 4923 _template: null,
4544 properties: { 4924 properties: {
4545 items: { 4925 items: {
4546 type: Array, 4926 type: Array,
4547 observer: 'clearSelection' 4927 observer: 'clearSelection'
4548 }, 4928 },
4549 multi: { 4929 multi: {
4550 type: Boolean, 4930 type: Boolean,
4551 value: false, 4931 value: false,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
4622 if (this.toggle && item == this.selected) { 5002 if (this.toggle && item == this.selected) {
4623 this.deselect(); 5003 this.deselect();
4624 } else { 5004 } else {
4625 this.selected = item; 5005 this.selected = item;
4626 this.selectedItem = item; 5006 this.selectedItem = item;
4627 this.linkPaths('selected', 'items.' + key); 5007 this.linkPaths('selected', 'items.' + key);
4628 this.linkPaths('selectedItem', 'items.' + key); 5008 this.linkPaths('selectedItem', 'items.' + key);
4629 } 5009 }
4630 } 5010 }
4631 } 5011 }
4632 }); 5012 });Polymer({
4633 Polymer({
4634 is: 'dom-if', 5013 is: 'dom-if',
4635 extends: 'template', 5014 extends: 'template',
4636 _template: null, 5015 _template: null,
4637 properties: { 5016 properties: {
4638 'if': { 5017 'if': {
4639 type: Boolean, 5018 type: Boolean,
4640 value: false, 5019 value: false,
4641 observer: '_queueRender' 5020 observer: '_queueRender'
4642 }, 5021 },
4643 restamp: { 5022 restamp: {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
4723 _forwardParentProp: function (prop, value) { 5102 _forwardParentProp: function (prop, value) {
4724 if (this._instance) { 5103 if (this._instance) {
4725 this._instance[prop] = value; 5104 this._instance[prop] = value;
4726 } 5105 }
4727 }, 5106 },
4728 _forwardParentPath: function (path, value) { 5107 _forwardParentPath: function (path, value) {
4729 if (this._instance) { 5108 if (this._instance) {
4730 this._instance._notifyPath(path, value, true); 5109 this._instance._notifyPath(path, value, true);
4731 } 5110 }
4732 } 5111 }
4733 }); 5112 });Polymer({
4734 Polymer({
4735 is: 'dom-bind', 5113 is: 'dom-bind',
4736 extends: 'template', 5114 extends: 'template',
4737 _template: null, 5115 _template: null,
4738 created: function () { 5116 created: function () {
4739 var self = this; 5117 var self = this;
4740 Polymer.RenderStatus.whenReady(function () { 5118 Polymer.RenderStatus.whenReady(function () {
4741 if (document.readyState == 'loading') { 5119 if (document.readyState == 'loading') {
4742 document.addEventListener('DOMContentLoaded', function () { 5120 document.addEventListener('DOMContentLoaded', function () {
4743 self._markImportsReady(); 5121 self._markImportsReady();
4744 }); 5122 });
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
4807 this._prepConfigure(); 5185 this._prepConfigure();
4808 this._prepBindings(); 5186 this._prepBindings();
4809 this._prepPropertyInfo(); 5187 this._prepPropertyInfo();
4810 Polymer.Base._initFeatures.call(this); 5188 Polymer.Base._initFeatures.call(this);
4811 this._children = Polymer.TreeApi.arrayCopyChildNodes(this.root); 5189 this._children = Polymer.TreeApi.arrayCopyChildNodes(this.root);
4812 } 5190 }
4813 this._insertChildren(); 5191 this._insertChildren();
4814 this.fire('dom-change'); 5192 this.fire('dom-change');
4815 } 5193 }
4816 });</script> 5194 });</script>
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
OLDNEW
« no previous file with comments | « third_party/polymer/components/polymer/build.log ('k') | third_party/polymer/components/polymer/polymer-micro.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698