polymer-rails 1.0.0 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,40 +17,39 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
17
17
  --><link rel="import" href="polymer-mini.html">
18
18
 
19
19
  <script>Polymer.nar = [];
20
-
21
20
  Polymer.Annotations = {
22
- parseAnnotations: function(template) {
21
+ parseAnnotations: function (template) {
23
22
  var list = [];
24
23
  var content = template._content || template.content;
25
24
  this._parseNodeAnnotations(content, list);
26
25
  return list;
27
26
  },
28
- _parseNodeAnnotations: function(node, list) {
27
+ _parseNodeAnnotations: function (node, list) {
29
28
  return node.nodeType === Node.TEXT_NODE ? this._parseTextNodeAnnotation(node, list) : this._parseElementAnnotations(node, list);
30
29
  },
31
- _testEscape: function(value) {
30
+ _testEscape: function (value) {
32
31
  var escape = value.slice(0, 2);
33
- if (escape === "{{" || escape === "[[") {
32
+ if (escape === '{{' || escape === '[[') {
34
33
  return escape;
35
34
  }
36
35
  },
37
- _parseTextNodeAnnotation: function(node, list) {
36
+ _parseTextNodeAnnotation: function (node, list) {
38
37
  var v = node.textContent;
39
38
  var escape = this._testEscape(v);
40
39
  if (escape) {
41
- node.textContent = " ";
40
+ node.textContent = ' ';
42
41
  var annote = {
43
- bindings: [ {
44
- kind: "text",
42
+ bindings: [{
43
+ kind: 'text',
45
44
  mode: escape[0],
46
45
  value: v.slice(2, -2).trim()
47
- } ]
46
+ }]
48
47
  };
49
48
  list.push(annote);
50
49
  return annote;
51
50
  }
52
51
  },
53
- _parseElementAnnotations: function(element, list) {
52
+ _parseElementAnnotations: function (element, list) {
54
53
  var annote = {
55
54
  bindings: [],
56
55
  events: []
@@ -67,10 +66,10 @@ list.push(annote);
67
66
  }
68
67
  return annote;
69
68
  },
70
- _parseChildNodesAnnotations: function(root, annote, list, callback) {
69
+ _parseChildNodesAnnotations: function (root, annote, list, callback) {
71
70
  if (root.firstChild) {
72
71
  for (var i = 0, node = root.firstChild; node; node = node.nextSibling, i++) {
73
- if (node.localName === "template" && !node.hasAttribute("preserve-content")) {
72
+ if (node.localName === 'template' && !node.hasAttribute('preserve-content')) {
74
73
  this._parseTemplate(node, i, list, annote);
75
74
  }
76
75
  var childAnnotation = this._parseNodeAnnotations(node, list, callback);
@@ -81,7 +80,7 @@ childAnnotation.index = i;
81
80
  }
82
81
  }
83
82
  },
84
- _parseTemplate: function(node, index, list, parent) {
83
+ _parseTemplate: function (node, index, list, parent) {
85
84
  var content = document.createDocumentFragment();
86
85
  content._notes = this.parseAnnotations(node);
87
86
  content.appendChild(node.content);
@@ -93,12 +92,12 @@ parent: parent,
93
92
  index: index
94
93
  });
95
94
  },
96
- _parseNodeAttributeAnnotations: function(node, annotation) {
95
+ _parseNodeAttributeAnnotations: function (node, annotation) {
97
96
  for (var i = node.attributes.length - 1, a; a = node.attributes[i]; i--) {
98
97
  var n = a.name, v = a.value;
99
- if (n === "id" && !this._testEscape(v)) {
98
+ if (n === 'id' && !this._testEscape(v)) {
100
99
  annotation.id = v;
101
- } else if (n.slice(0, 3) === "on-") {
100
+ } else if (n.slice(0, 3) === 'on-') {
102
101
  node.removeAttribute(n);
103
102
  annotation.events.push({
104
103
  name: n.slice(3),
@@ -112,7 +111,7 @@ annotation.bindings.push(b);
112
111
  }
113
112
  }
114
113
  },
115
- _parseNodeAttributeAnnotation: function(node, n, v) {
114
+ _parseNodeAttributeAnnotation: function (node, n, v) {
116
115
  var escape = this._testEscape(v);
117
116
  if (escape) {
118
117
  var customEvent;
@@ -120,26 +119,26 @@ var name = n;
120
119
  var mode = escape[0];
121
120
  v = v.slice(2, -2).trim();
122
121
  var not = false;
123
- if (v[0] == "!") {
122
+ if (v[0] == '!') {
124
123
  v = v.substring(1);
125
124
  not = true;
126
125
  }
127
- var kind = "property";
128
- if (n[n.length - 1] == "$") {
126
+ var kind = 'property';
127
+ if (n[n.length - 1] == '$') {
129
128
  name = n.slice(0, -1);
130
- kind = "attribute";
129
+ kind = 'attribute';
131
130
  }
132
131
  var notifyEvent, colon;
133
- if (mode == "{" && (colon = v.indexOf("::")) > 0) {
132
+ if (mode == '{' && (colon = v.indexOf('::')) > 0) {
134
133
  notifyEvent = v.substring(colon + 2);
135
134
  v = v.substring(0, colon);
136
135
  customEvent = true;
137
136
  }
138
- if (node.localName == "input" && n == "value") {
139
- node.setAttribute(n, "");
137
+ if (node.localName == 'input' && n == 'value') {
138
+ node.setAttribute(n, '');
140
139
  }
141
140
  node.removeAttribute(n);
142
- if (kind === "property") {
141
+ if (kind === 'property') {
143
142
  name = Polymer.CaseMap.dashToCamelCase(name);
144
143
  }
145
144
  return {
@@ -153,30 +152,29 @@ customEvent: customEvent
153
152
  };
154
153
  }
155
154
  },
156
- _localSubTree: function(node, host) {
155
+ _localSubTree: function (node, host) {
157
156
  return node === host ? node.childNodes : node._lightChildren || node.childNodes;
158
157
  },
159
- findAnnotatedNode: function(root, annote) {
158
+ findAnnotatedNode: function (root, annote) {
160
159
  var parent = annote.parent && Polymer.Annotations.findAnnotatedNode(root, annote.parent);
161
160
  return !parent ? root : Polymer.Annotations._localSubTree(parent, root)[annote.index];
162
161
  }
163
162
  };
164
-
165
- (function() {
163
+ (function () {
166
164
  function resolveCss(cssText, ownerDocument) {
167
- return cssText.replace(CSS_URL_RX, function(m, pre, url, post) {
168
- return pre + "'" + resolve(url.replace(/["']/g, ""), ownerDocument) + "'" + post;
165
+ return cssText.replace(CSS_URL_RX, function (m, pre, url, post) {
166
+ return pre + '\'' + resolve(url.replace(/["']/g, ''), ownerDocument) + '\'' + post;
169
167
  });
170
168
  }
171
169
  function resolveAttrs(element, ownerDocument) {
172
170
  for (var name in URL_ATTRS) {
173
171
  var a$ = URL_ATTRS[name];
174
172
  for (var i = 0, l = a$.length, a, at, v; i < l && (a = a$[i]); i++) {
175
- if (name === "*" || element.localName === name) {
173
+ if (name === '*' || element.localName === name) {
176
174
  at = element.attributes[a];
177
175
  v = at && at.value;
178
176
  if (v && v.search(BINDING_RX) < 0) {
179
- at.value = a === "style" ? resolveCss(v, ownerDocument) : resolve(v, ownerDocument);
177
+ at.value = a === 'style' ? resolveCss(v, ownerDocument) : resolve(v, ownerDocument);
180
178
  }
181
179
  }
182
180
  }
@@ -191,20 +189,25 @@ var tempDoc;
191
189
  var tempDocBase;
192
190
  function resolveUrl(url, baseUri) {
193
191
  if (!tempDoc) {
194
- tempDoc = document.implementation.createHTMLDocument("temp");
195
- tempDocBase = tempDoc.createElement("base");
192
+ tempDoc = document.implementation.createHTMLDocument('temp');
193
+ tempDocBase = tempDoc.createElement('base');
196
194
  tempDoc.head.appendChild(tempDocBase);
197
195
  }
198
196
  tempDocBase.href = baseUri;
199
197
  return resolve(url, tempDoc);
200
198
  }
201
199
  function getUrlResolver(ownerDocument) {
202
- return ownerDocument.__urlResolver || (ownerDocument.__urlResolver = ownerDocument.createElement("a"));
200
+ return ownerDocument.__urlResolver || (ownerDocument.__urlResolver = ownerDocument.createElement('a'));
203
201
  }
204
202
  var CSS_URL_RX = /(url\()([^)]*)(\))/g;
205
203
  var URL_ATTRS = {
206
- "*": [ "href", "src", "style", "url" ],
207
- form: [ "action" ]
204
+ '*': [
205
+ 'href',
206
+ 'src',
207
+ 'style',
208
+ 'url'
209
+ ],
210
+ form: ['action']
208
211
  };
209
212
  var BINDING_RX = /\{\{|\[\[/;
210
213
  Polymer.ResolveUrl = {
@@ -212,10 +215,9 @@ resolveCss: resolveCss,
212
215
  resolveAttrs: resolveAttrs,
213
216
  resolveUrl: resolveUrl
214
217
  };
215
- })();
216
-
218
+ }());
217
219
  Polymer.Base._addFeature({
218
- _prepAnnotations: function() {
220
+ _prepAnnotations: function () {
219
221
  if (!this._template) {
220
222
  this._notes = [];
221
223
  } else {
@@ -225,7 +227,7 @@ this._processAnnotations(this._notes);
225
227
  Polymer.Annotations.prepElement = null;
226
228
  }
227
229
  },
228
- _processAnnotations: function(notes) {
230
+ _processAnnotations: function (notes) {
229
231
  for (var i = 0; i < notes.length; i++) {
230
232
  var note = notes[i];
231
233
  for (var j = 0; j < note.bindings.length; j++) {
@@ -242,9 +244,9 @@ var bindings = [];
242
244
  for (var prop in pp) {
243
245
  bindings.push({
244
246
  index: note.index,
245
- kind: "property",
246
- mode: "{",
247
- name: "_parent_" + prop,
247
+ kind: 'property',
248
+ mode: '{',
249
+ name: '_parent_' + prop,
248
250
  model: prop,
249
251
  value: prop
250
252
  });
@@ -253,10 +255,10 @@ note.bindings = note.bindings.concat(bindings);
253
255
  }
254
256
  }
255
257
  },
256
- _discoverTemplateParentProps: function(notes) {
258
+ _discoverTemplateParentProps: function (notes) {
257
259
  var pp = {};
258
- notes.forEach(function(n) {
259
- n.bindings.forEach(function(b) {
260
+ notes.forEach(function (n) {
261
+ n.bindings.forEach(function (b) {
260
262
  if (b.signature) {
261
263
  var args = b.signature.args;
262
264
  for (var k = 0; k < args.length; k++) {
@@ -273,104 +275,105 @@ Polymer.Base.mixin(pp, tpp);
273
275
  });
274
276
  return pp;
275
277
  },
276
- _prepElement: function(element) {
278
+ _prepElement: function (element) {
277
279
  Polymer.ResolveUrl.resolveAttrs(element, this._template.ownerDocument);
278
280
  },
279
281
  _findAnnotatedNode: Polymer.Annotations.findAnnotatedNode,
280
- _marshalAnnotationReferences: function() {
282
+ _marshalAnnotationReferences: function () {
281
283
  if (this._template) {
282
284
  this._marshalIdNodes();
283
285
  this._marshalAnnotatedNodes();
284
286
  this._marshalAnnotatedListeners();
285
287
  }
286
288
  },
287
- _configureAnnotationReferences: function() {
289
+ _configureAnnotationReferences: function () {
288
290
  this._configureTemplateContent();
289
291
  },
290
- _configureTemplateContent: function() {
291
- this._notes.forEach(function(note, i) {
292
+ _configureTemplateContent: function () {
293
+ this._notes.forEach(function (note, i) {
292
294
  if (note.templateContent) {
293
295
  this._nodes[i]._content = note.templateContent;
294
296
  }
295
297
  }, this);
296
298
  },
297
- _marshalIdNodes: function() {
299
+ _marshalIdNodes: function () {
298
300
  this.$ = {};
299
- this._notes.forEach(function(a) {
301
+ this._notes.forEach(function (a) {
300
302
  if (a.id) {
301
303
  this.$[a.id] = this._findAnnotatedNode(this.root, a);
302
304
  }
303
305
  }, this);
304
306
  },
305
- _marshalAnnotatedNodes: function() {
307
+ _marshalAnnotatedNodes: function () {
306
308
  if (this._nodes) {
307
- this._nodes = this._nodes.map(function(a) {
309
+ this._nodes = this._nodes.map(function (a) {
308
310
  return this._findAnnotatedNode(this.root, a);
309
311
  }, this);
310
312
  }
311
313
  },
312
- _marshalAnnotatedListeners: function() {
313
- this._notes.forEach(function(a) {
314
+ _marshalAnnotatedListeners: function () {
315
+ this._notes.forEach(function (a) {
314
316
  if (a.events && a.events.length) {
315
317
  var node = this._findAnnotatedNode(this.root, a);
316
- a.events.forEach(function(e) {
318
+ a.events.forEach(function (e) {
317
319
  this.listen(node, e.name, e.value);
318
320
  }, this);
319
321
  }
320
322
  }, this);
321
323
  }
322
324
  });
323
-
324
325
  Polymer.Base._addFeature({
325
326
  listeners: {},
326
- _listenListeners: function(listeners) {
327
+ _listenListeners: function (listeners) {
327
328
  var node, name, key;
328
329
  for (key in listeners) {
329
- if (key.indexOf(".") < 0) {
330
+ if (key.indexOf('.') < 0) {
330
331
  node = this;
331
332
  name = key;
332
333
  } else {
333
- name = key.split(".");
334
+ name = key.split('.');
334
335
  node = this.$[name[0]];
335
336
  name = name[1];
336
337
  }
337
338
  this.listen(node, name, listeners[key]);
338
339
  }
339
340
  },
340
- listen: function(node, eventName, methodName) {
341
+ listen: function (node, eventName, methodName) {
341
342
  this._listen(node, eventName, this._createEventHandler(node, eventName, methodName));
342
343
  },
343
- _createEventHandler: function(node, eventName, methodName) {
344
+ _createEventHandler: function (node, eventName, methodName) {
344
345
  var host = this;
345
- return function(e) {
346
+ return function (e) {
346
347
  if (host[methodName]) {
347
348
  host[methodName](e, e.detail);
348
349
  } else {
349
- host._warn(host._logf("_createEventHandler", "listener method `" + methodName + "` not defined"));
350
+ host._warn(host._logf('_createEventHandler', 'listener method `' + methodName + '` not defined'));
350
351
  }
351
352
  };
352
353
  },
353
- _listen: function(node, eventName, handler) {
354
+ _listen: function (node, eventName, handler) {
354
355
  node.addEventListener(eventName, handler);
355
356
  }
356
357
  });
357
-
358
- (function() {
359
- "use strict";
360
- var HAS_NATIVE_TA = typeof document.head.style.touchAction === "string";
361
- var GESTURE_KEY = "__polymerGestures";
362
- var HANDLED_OBJ = "__polymerGesturesHandled";
363
- var TOUCH_ACTION = "__polymerGesturesTouchAction";
358
+ (function () {
359
+ 'use strict';
360
+ var HAS_NATIVE_TA = typeof document.head.style.touchAction === 'string';
361
+ var GESTURE_KEY = '__polymerGestures';
362
+ var HANDLED_OBJ = '__polymerGesturesHandled';
363
+ var TOUCH_ACTION = '__polymerGesturesTouchAction';
364
364
  var TAP_DISTANCE = 25;
365
365
  var TRACK_DISTANCE = 5;
366
366
  var TRACK_LENGTH = 2;
367
367
  var MOUSE_TIMEOUT = 2500;
368
- var MOUSE_EVENTS = [ "mousedown", "mousemove", "mouseup", "click" ];
369
- var mouseCanceller = function(mouseEvent) {
370
- mouseEvent[HANDLED_OBJ] = {
371
- skip: true
372
- };
373
- if (mouseEvent.type === "click") {
368
+ var MOUSE_EVENTS = [
369
+ 'mousedown',
370
+ 'mousemove',
371
+ 'mouseup',
372
+ 'click'
373
+ ];
374
+ var mouseCanceller = function (mouseEvent) {
375
+ mouseEvent[HANDLED_OBJ] = { skip: true };
376
+ if (mouseEvent.type === 'click') {
374
377
  var path = Polymer.dom(mouseEvent).path;
375
378
  for (var i = 0; i < path.length; i++) {
376
379
  if (path[i] === POINTERSTATE.mouse.target) {
@@ -395,7 +398,7 @@ function ignoreMouse() {
395
398
  if (!POINTERSTATE.mouse.mouseIgnoreJob) {
396
399
  setupTeardownMouseCanceller(true);
397
400
  }
398
- var unset = function() {
401
+ var unset = function () {
399
402
  setupTeardownMouseCanceller();
400
403
  POINTERSTATE.mouse.target = null;
401
404
  POINTERSTATE.mouse.mouseIgnoreJob = null;
@@ -417,7 +420,7 @@ scrollDecided: false
417
420
  };
418
421
  function firstTouchAction(ev) {
419
422
  var path = Polymer.dom(ev).path;
420
- var ta = "auto";
423
+ var ta = 'auto';
421
424
  for (var i = 0, n; i < path.length; i++) {
422
425
  n = path[i];
423
426
  if (n[TOUCH_ACTION]) {
@@ -430,7 +433,7 @@ return ta;
430
433
  var Gestures = {
431
434
  gestures: {},
432
435
  recognizers: [],
433
- deepTargetFind: function(x, y) {
436
+ deepTargetFind: function (x, y) {
434
437
  var node = document.elementFromPoint(x, y);
435
438
  var next = node;
436
439
  while (next && next.shadowRoot) {
@@ -441,7 +444,7 @@ node = next;
441
444
  }
442
445
  return node;
443
446
  },
444
- handleNative: function(ev) {
447
+ handleNative: function (ev) {
445
448
  var handled;
446
449
  var type = ev.type;
447
450
  var node = ev.currentTarget;
@@ -452,9 +455,9 @@ return;
452
455
  }
453
456
  if (!ev[HANDLED_OBJ]) {
454
457
  ev[HANDLED_OBJ] = {};
455
- if (type.slice(0, 5) === "touch") {
458
+ if (type.slice(0, 5) === 'touch') {
456
459
  var t = ev.changedTouches[0];
457
- if (type === "touchstart") {
460
+ if (type === 'touchstart') {
458
461
  if (ev.touches.length === 1) {
459
462
  POINTERSTATE.touch.id = t.identifier;
460
463
  }
@@ -463,11 +466,11 @@ if (POINTERSTATE.touch.id !== t.identifier) {
463
466
  return;
464
467
  }
465
468
  if (!HAS_NATIVE_TA) {
466
- if (type === "touchstart" || type === "touchmove") {
469
+ if (type === 'touchstart' || type === 'touchmove') {
467
470
  Gestures.handleTouchAction(ev);
468
471
  }
469
472
  }
470
- if (type === "touchend") {
473
+ if (type === 'touchend') {
471
474
  POINTERSTATE.mouse.target = Polymer.dom(ev).rootTarget;
472
475
  ignoreMouse(true);
473
476
  }
@@ -486,14 +489,14 @@ r[type](ev);
486
489
  }
487
490
  }
488
491
  },
489
- handleTouchAction: function(ev) {
492
+ handleTouchAction: function (ev) {
490
493
  var t = ev.changedTouches[0];
491
494
  var type = ev.type;
492
- if (type === "touchstart") {
495
+ if (type === 'touchstart') {
493
496
  POINTERSTATE.touch.x = t.clientX;
494
497
  POINTERSTATE.touch.y = t.clientY;
495
498
  POINTERSTATE.touch.scrollDecided = false;
496
- } else if (type === "touchmove") {
499
+ } else if (type === 'touchmove') {
497
500
  if (POINTERSTATE.touch.scrollDecided) {
498
501
  return;
499
502
  }
@@ -502,11 +505,12 @@ var ta = firstTouchAction(ev);
502
505
  var prevent = false;
503
506
  var dx = Math.abs(POINTERSTATE.touch.x - t.clientX);
504
507
  var dy = Math.abs(POINTERSTATE.touch.y - t.clientY);
505
- if (!ev.cancelable) {} else if (ta === "none") {
508
+ if (!ev.cancelable) {
509
+ } else if (ta === 'none') {
506
510
  prevent = true;
507
- } else if (ta === "pan-x") {
511
+ } else if (ta === 'pan-x') {
508
512
  prevent = dy > dx;
509
- } else if (ta === "pan-y") {
513
+ } else if (ta === 'pan-y') {
510
514
  prevent = dx > dy;
511
515
  }
512
516
  if (prevent) {
@@ -514,7 +518,7 @@ ev.preventDefault();
514
518
  }
515
519
  }
516
520
  },
517
- add: function(node, evType, handler) {
521
+ add: function (node, evType, handler) {
518
522
  var recognizer = this.gestures[evType];
519
523
  var deps = recognizer.deps;
520
524
  var name = recognizer.name;
@@ -536,19 +540,19 @@ if (recognizer.touchAction) {
536
540
  this.setTouchAction(node, recognizer.touchAction);
537
541
  }
538
542
  },
539
- register: function(recog) {
543
+ register: function (recog) {
540
544
  this.recognizers.push(recog);
541
545
  for (var i = 0; i < recog.emits.length; i++) {
542
546
  this.gestures[recog.emits[i]] = recog;
543
547
  }
544
548
  },
545
- setTouchAction: function(node, value) {
549
+ setTouchAction: function (node, value) {
546
550
  if (HAS_NATIVE_TA) {
547
551
  node.style.touchAction = value;
548
552
  }
549
553
  node[TOUCH_ACTION] = value;
550
554
  },
551
- fire: function(target, type, detail) {
555
+ fire: function (target, type, detail) {
552
556
  var ev = new CustomEvent(type, {
553
557
  detail: detail,
554
558
  bubbles: true,
@@ -558,26 +562,33 @@ target.dispatchEvent(ev);
558
562
  }
559
563
  };
560
564
  Gestures.register({
561
- name: "downup",
562
- deps: [ "mousedown", "touchstart", "touchend" ],
563
- emits: [ "down", "up" ],
564
- mousedown: function(e) {
565
+ name: 'downup',
566
+ deps: [
567
+ 'mousedown',
568
+ 'touchstart',
569
+ 'touchend'
570
+ ],
571
+ emits: [
572
+ 'down',
573
+ 'up'
574
+ ],
575
+ mousedown: function (e) {
565
576
  var t = e.currentTarget;
566
577
  var self = this;
567
578
  var upfn = function upfn(e) {
568
- self.fire("up", t, e);
569
- document.removeEventListener("mouseup", upfn);
579
+ self.fire('up', t, e);
580
+ document.removeEventListener('mouseup', upfn);
570
581
  };
571
- document.addEventListener("mouseup", upfn);
572
- this.fire("down", t, e);
582
+ document.addEventListener('mouseup', upfn);
583
+ this.fire('down', t, e);
573
584
  },
574
- touchstart: function(e) {
575
- this.fire("down", e.currentTarget, e.changedTouches[0]);
585
+ touchstart: function (e) {
586
+ this.fire('down', e.currentTarget, e.changedTouches[0]);
576
587
  },
577
- touchend: function(e) {
578
- this.fire("up", e.currentTarget, e.changedTouches[0]);
588
+ touchend: function (e) {
589
+ this.fire('up', e.currentTarget, e.changedTouches[0]);
579
590
  },
580
- fire: function(type, target, event) {
591
+ fire: function (type, target, event) {
581
592
  Gestures.fire(target, type, {
582
593
  x: event.clientX,
583
594
  y: event.clientY,
@@ -586,31 +597,36 @@ sourceEvent: event
586
597
  }
587
598
  });
588
599
  Gestures.register({
589
- name: "track",
590
- touchAction: "none",
591
- deps: [ "mousedown", "touchstart", "touchmove", "touchend" ],
592
- emits: [ "track" ],
600
+ name: 'track',
601
+ touchAction: 'none',
602
+ deps: [
603
+ 'mousedown',
604
+ 'touchstart',
605
+ 'touchmove',
606
+ 'touchend'
607
+ ],
608
+ emits: ['track'],
593
609
  info: {
594
610
  x: 0,
595
611
  y: 0,
596
- state: "start",
612
+ state: 'start',
597
613
  started: false,
598
614
  moves: [],
599
- addMove: function(move) {
615
+ addMove: function (move) {
600
616
  if (this.moves.length > TRACK_LENGTH) {
601
617
  this.moves.shift();
602
618
  }
603
619
  this.moves.push(move);
604
620
  }
605
621
  },
606
- clearInfo: function() {
607
- this.info.state = "start";
622
+ clearInfo: function () {
623
+ this.info.state = 'start';
608
624
  this.info.started = false;
609
625
  this.info.moves = [];
610
626
  this.info.x = 0;
611
627
  this.info.y = 0;
612
628
  },
613
- hasMovedEnough: function(x, y) {
629
+ hasMovedEnough: function (x, y) {
614
630
  if (this.info.started) {
615
631
  return true;
616
632
  }
@@ -618,13 +634,13 @@ var dx = Math.abs(this.info.x - x);
618
634
  var dy = Math.abs(this.info.y - y);
619
635
  return dx >= TRACK_DISTANCE || dy >= TRACK_DISTANCE;
620
636
  },
621
- mousedown: function(e) {
637
+ mousedown: function (e) {
622
638
  var t = e.currentTarget;
623
639
  var self = this;
624
640
  var movefn = function movefn(e) {
625
641
  var x = e.clientX, y = e.clientY;
626
642
  if (self.hasMovedEnough(x, y)) {
627
- self.info.state = self.info.started ? e.type === "mouseup" ? "end" : "track" : "start";
643
+ self.info.state = self.info.started ? e.type === 'mouseup' ? 'end' : 'track' : 'start';
628
644
  self.info.addMove({
629
645
  x: x,
630
646
  y: y
@@ -640,20 +656,20 @@ POINTERSTATE.tapPrevented = true;
640
656
  movefn(e);
641
657
  }
642
658
  self.clearInfo();
643
- document.removeEventListener("mousemove", movefn);
644
- document.removeEventListener("mouseup", upfn);
659
+ document.removeEventListener('mousemove', movefn);
660
+ document.removeEventListener('mouseup', upfn);
645
661
  };
646
- document.addEventListener("mousemove", movefn);
647
- document.addEventListener("mouseup", upfn);
662
+ document.addEventListener('mousemove', movefn);
663
+ document.addEventListener('mouseup', upfn);
648
664
  this.info.x = e.clientX;
649
665
  this.info.y = e.clientY;
650
666
  },
651
- touchstart: function(e) {
667
+ touchstart: function (e) {
652
668
  var ct = e.changedTouches[0];
653
669
  this.info.x = ct.clientX;
654
670
  this.info.y = ct.clientY;
655
671
  },
656
- touchmove: function(e) {
672
+ touchmove: function (e) {
657
673
  var t = e.currentTarget;
658
674
  var ct = e.changedTouches[0];
659
675
  var x = ct.clientX, y = ct.clientY;
@@ -663,16 +679,16 @@ x: x,
663
679
  y: y
664
680
  });
665
681
  this.fire(t, ct);
666
- this.info.state = "track";
682
+ this.info.state = 'track';
667
683
  this.info.started = true;
668
684
  }
669
685
  },
670
- touchend: function(e) {
686
+ touchend: function (e) {
671
687
  var t = e.currentTarget;
672
688
  var ct = e.changedTouches[0];
673
689
  if (this.info.started) {
674
690
  POINTERSTATE.tapPrevented = true;
675
- this.info.state = "end";
691
+ this.info.state = 'end';
676
692
  this.info.addMove({
677
693
  x: ct.clientX,
678
694
  y: ct.clientY
@@ -681,7 +697,7 @@ this.fire(t, ct);
681
697
  }
682
698
  this.clearInfo();
683
699
  },
684
- fire: function(target, touch) {
700
+ fire: function (target, touch) {
685
701
  var secondlast = this.info.moves[this.info.moves.length - 2];
686
702
  var lastmove = this.info.moves[this.info.moves.length - 1];
687
703
  var dx = lastmove.x - this.info.x;
@@ -691,7 +707,7 @@ if (secondlast) {
691
707
  ddx = lastmove.x - secondlast.x;
692
708
  ddy = lastmove.y - secondlast.y;
693
709
  }
694
- return Gestures.fire(target, "track", {
710
+ return Gestures.fire(target, 'track', {
695
711
  state: this.info.state,
696
712
  x: touch.clientX,
697
713
  y: touch.clientY,
@@ -700,48 +716,53 @@ dy: dy,
700
716
  ddx: ddx,
701
717
  ddy: ddy,
702
718
  sourceEvent: touch,
703
- hover: function() {
719
+ hover: function () {
704
720
  return Gestures.deepTargetFind(touch.clientX, touch.clientY);
705
721
  }
706
722
  });
707
723
  }
708
724
  });
709
725
  Gestures.register({
710
- name: "tap",
711
- deps: [ "mousedown", "click", "touchstart", "touchend" ],
712
- emits: [ "tap" ],
726
+ name: 'tap',
727
+ deps: [
728
+ 'mousedown',
729
+ 'click',
730
+ 'touchstart',
731
+ 'touchend'
732
+ ],
733
+ emits: ['tap'],
713
734
  start: {
714
735
  x: NaN,
715
736
  y: NaN
716
737
  },
717
- reset: function() {
738
+ reset: function () {
718
739
  this.start.x = NaN;
719
740
  this.start.y = NaN;
720
741
  },
721
- save: function(e) {
742
+ save: function (e) {
722
743
  this.start.x = e.clientX;
723
744
  this.start.y = e.clientY;
724
745
  },
725
- mousedown: function(e) {
746
+ mousedown: function (e) {
726
747
  POINTERSTATE.tapPrevented = false;
727
748
  this.save(e);
728
749
  },
729
- click: function(e) {
750
+ click: function (e) {
730
751
  this.forward(e);
731
752
  },
732
- touchstart: function(e) {
753
+ touchstart: function (e) {
733
754
  POINTERSTATE.tapPrevented = false;
734
755
  this.save(e.changedTouches[0]);
735
756
  },
736
- touchend: function(e) {
757
+ touchend: function (e) {
737
758
  this.forward(e.changedTouches[0]);
738
759
  },
739
- forward: function(e) {
760
+ forward: function (e) {
740
761
  var dx = Math.abs(e.clientX - this.start.x);
741
762
  var dy = Math.abs(e.clientY - this.start.y);
742
763
  if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE) {
743
764
  if (!POINTERSTATE.tapPrevented) {
744
- Gestures.fire(e.target, "tap", {
765
+ Gestures.fire(e.target, 'tap', {
745
766
  x: e.clientX,
746
767
  y: e.clientY,
747
768
  sourceEvent: e
@@ -752,32 +773,31 @@ this.reset();
752
773
  }
753
774
  });
754
775
  var DIRECTION_MAP = {
755
- x: "pan-x",
756
- y: "pan-y",
757
- none: "none",
758
- all: "auto"
776
+ x: 'pan-x',
777
+ y: 'pan-y',
778
+ none: 'none',
779
+ all: 'auto'
759
780
  };
760
781
  Polymer.Base._addFeature({
761
- _listen: function(node, eventName, handler) {
782
+ _listen: function (node, eventName, handler) {
762
783
  if (Gestures.gestures[eventName]) {
763
784
  Gestures.add(node, eventName, handler);
764
785
  } else {
765
786
  node.addEventListener(eventName, handler);
766
787
  }
767
788
  },
768
- setScrollDirection: function(direction, node) {
789
+ setScrollDirection: function (direction, node) {
769
790
  node = node || this;
770
- Gestures.setTouchAction(node, DIRECTION_MAP[direction] || "auto");
791
+ Gestures.setTouchAction(node, DIRECTION_MAP[direction] || 'auto');
771
792
  }
772
793
  });
773
794
  Polymer.Gestures = Gestures;
774
- })();
775
-
776
- Polymer.Async = function() {
795
+ }());
796
+ Polymer.Async = function () {
777
797
  var currVal = 0;
778
798
  var lastVal = 0;
779
799
  var callbacks = [];
780
- var twiddle = document.createTextNode("");
800
+ var twiddle = document.createTextNode('');
781
801
  function runAsync(callback, waitTime) {
782
802
  if (waitTime > 0) {
783
803
  return ~setTimeout(callback, waitTime);
@@ -794,7 +814,7 @@ clearTimeout(~handle);
794
814
  var idx = handle - lastVal;
795
815
  if (idx >= 0) {
796
816
  if (!callbacks[idx]) {
797
- throw "invalid async handle: " + handle;
817
+ throw 'invalid async handle: ' + handle;
798
818
  }
799
819
  callbacks[idx] = null;
800
820
  }
@@ -811,37 +831,34 @@ cb();
811
831
  callbacks.splice(0, len);
812
832
  lastVal += len;
813
833
  }
814
- new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask).observe(twiddle, {
815
- characterData: true
816
- });
834
+ new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask).observe(twiddle, { characterData: true });
817
835
  return {
818
836
  run: runAsync,
819
837
  cancel: cancelAsync
820
838
  };
821
839
  }();
822
-
823
- Polymer.Debounce = function() {
840
+ Polymer.Debounce = function () {
824
841
  var Async = Polymer.Async;
825
- var Debouncer = function(context) {
842
+ var Debouncer = function (context) {
826
843
  this.context = context;
827
844
  this.boundComplete = this.complete.bind(this);
828
845
  };
829
846
  Debouncer.prototype = {
830
- go: function(callback, wait) {
847
+ go: function (callback, wait) {
831
848
  var h;
832
- this.finish = function() {
849
+ this.finish = function () {
833
850
  Async.cancel(h);
834
851
  };
835
852
  h = Async.run(this.boundComplete, wait);
836
853
  this.callback = callback;
837
854
  },
838
- stop: function() {
855
+ stop: function () {
839
856
  if (this.finish) {
840
857
  this.finish();
841
858
  this.finish = null;
842
859
  }
843
860
  },
844
- complete: function() {
861
+ complete: function () {
845
862
  if (this.finish) {
846
863
  this.stop();
847
864
  this.callback.call(this.context);
@@ -859,12 +876,11 @@ return debouncer;
859
876
  }
860
877
  return debounce;
861
878
  }();
862
-
863
879
  Polymer.Base._addFeature({
864
- $$: function(slctr) {
880
+ $$: function (slctr) {
865
881
  return Polymer.dom(this.root).querySelector(slctr);
866
882
  },
867
- toggleClass: function(name, bool, node) {
883
+ toggleClass: function (name, bool, node) {
868
884
  node = node || this;
869
885
  if (arguments.length == 1) {
870
886
  bool = !node.classList.contains(name);
@@ -875,18 +891,18 @@ Polymer.dom(node).classList.add(name);
875
891
  Polymer.dom(node).classList.remove(name);
876
892
  }
877
893
  },
878
- toggleAttribute: function(name, bool, node) {
894
+ toggleAttribute: function (name, bool, node) {
879
895
  node = node || this;
880
896
  if (arguments.length == 1) {
881
897
  bool = !node.hasAttribute(name);
882
898
  }
883
899
  if (bool) {
884
- Polymer.dom(node).setAttribute(name, "");
900
+ Polymer.dom(node).setAttribute(name, '');
885
901
  } else {
886
902
  Polymer.dom(node).removeAttribute(name);
887
903
  }
888
904
  },
889
- classFollows: function(name, toElement, fromElement) {
905
+ classFollows: function (name, toElement, fromElement) {
890
906
  if (fromElement) {
891
907
  Polymer.dom(fromElement).classList.remove(name);
892
908
  }
@@ -894,23 +910,23 @@ if (toElement) {
894
910
  Polymer.dom(toElement).classList.add(name);
895
911
  }
896
912
  },
897
- attributeFollows: function(name, toElement, fromElement) {
913
+ attributeFollows: function (name, toElement, fromElement) {
898
914
  if (fromElement) {
899
915
  Polymer.dom(fromElement).removeAttribute(name);
900
916
  }
901
917
  if (toElement) {
902
- Polymer.dom(toElement).setAttribute(name, "");
918
+ Polymer.dom(toElement).setAttribute(name, '');
903
919
  }
904
920
  },
905
- getContentChildNodes: function(slctr) {
906
- return Polymer.dom(Polymer.dom(this.root).querySelector(slctr || "content")).getDistributedNodes();
921
+ getContentChildNodes: function (slctr) {
922
+ return Polymer.dom(Polymer.dom(this.root).querySelector(slctr || 'content')).getDistributedNodes();
907
923
  },
908
- getContentChildren: function(slctr) {
909
- return this.getContentChildNodes(slctr).filter(function(n) {
924
+ getContentChildren: function (slctr) {
925
+ return this.getContentChildNodes(slctr).filter(function (n) {
910
926
  return n.nodeType === Node.ELEMENT_NODE;
911
927
  });
912
928
  },
913
- fire: function(type, detail, options) {
929
+ fire: function (type, detail, options) {
914
930
  options = options || Polymer.nob;
915
931
  var node = options.node || this;
916
932
  var detail = detail === null || detail === undefined ? Polymer.nob : detail;
@@ -923,13 +939,13 @@ detail: detail
923
939
  node.dispatchEvent(event);
924
940
  return event;
925
941
  },
926
- async: function(callback, waitTime) {
942
+ async: function (callback, waitTime) {
927
943
  return Polymer.Async.run(callback.bind(this), waitTime);
928
944
  },
929
- cancelAsync: function(handle) {
945
+ cancelAsync: function (handle) {
930
946
  Polymer.Async.cancel(handle);
931
947
  },
932
- arrayDelete: function(path, item) {
948
+ arrayDelete: function (path, item) {
933
949
  var index;
934
950
  if (Array.isArray(path)) {
935
951
  index = path.indexOf(item);
@@ -944,18 +960,18 @@ return this.splice(path, index, 1);
944
960
  }
945
961
  }
946
962
  },
947
- transform: function(transform, node) {
963
+ transform: function (transform, node) {
948
964
  node = node || this;
949
965
  node.style.webkitTransform = transform;
950
966
  node.style.transform = transform;
951
967
  },
952
- translate3d: function(x, y, z, node) {
968
+ translate3d: function (x, y, z, node) {
953
969
  node = node || this;
954
- this.transform("translate3d(" + x + "," + y + "," + z + ")", node);
970
+ this.transform('translate3d(' + x + ',' + y + ',' + z + ')', node);
955
971
  },
956
- importHref: function(href, onload, onerror) {
957
- var l = document.createElement("link");
958
- l.rel = "import";
972
+ importHref: function (href, onload, onerror) {
973
+ var l = document.createElement('link');
974
+ l.rel = 'import';
959
975
  l.href = href;
960
976
  if (onload) {
961
977
  l.onload = onload.bind(this);
@@ -966,7 +982,7 @@ l.onerror = onerror.bind(this);
966
982
  document.head.appendChild(l);
967
983
  return l;
968
984
  },
969
- create: function(tag, props) {
985
+ create: function (tag, props) {
970
986
  var elt = document.createElement(tag);
971
987
  if (props) {
972
988
  for (var n in props) {
@@ -975,15 +991,14 @@ elt[n] = props[n];
975
991
  }
976
992
  return elt;
977
993
  },
978
- mixin: function(target, source) {
994
+ mixin: function (target, source) {
979
995
  for (var i in source) {
980
996
  target[i] = source[i];
981
997
  }
982
998
  }
983
999
  });
984
-
985
1000
  Polymer.Bind = {
986
- prepareModel: function(model) {
1001
+ prepareModel: function (model) {
987
1002
  model._propertyEffects = {};
988
1003
  model._bindListeners = [];
989
1004
  var api = this._modelApi;
@@ -992,19 +1007,15 @@ model[n] = api[n];
992
1007
  }
993
1008
  },
994
1009
  _modelApi: {
995
- _notifyChange: function(property) {
996
- var eventName = Polymer.CaseMap.camelToDashCase(property) + "-changed";
997
- this.fire(eventName, {
998
- value: this[property]
999
- }, {
1000
- bubbles: false
1001
- });
1010
+ _notifyChange: function (property) {
1011
+ var eventName = Polymer.CaseMap.camelToDashCase(property) + '-changed';
1012
+ this.fire(eventName, { value: this[property] }, { bubbles: false });
1002
1013
  },
1003
- _propertySet: function(property, value, effects) {
1014
+ _propertySet: function (property, value, effects) {
1004
1015
  var old = this.__data__[property];
1005
1016
  if (old !== value) {
1006
1017
  this.__data__[property] = value;
1007
- if (typeof value == "object") {
1018
+ if (typeof value == 'object') {
1008
1019
  this._clearPath(property);
1009
1020
  }
1010
1021
  if (this._propertyChanged) {
@@ -1016,37 +1027,37 @@ this._effectEffects(property, value, effects, old);
1016
1027
  }
1017
1028
  return old;
1018
1029
  },
1019
- _effectEffects: function(property, value, effects, old) {
1020
- effects.forEach(function(fx) {
1021
- var fn = Polymer.Bind["_" + fx.kind + "Effect"];
1030
+ _effectEffects: function (property, value, effects, old) {
1031
+ effects.forEach(function (fx) {
1032
+ var fn = Polymer.Bind['_' + fx.kind + 'Effect'];
1022
1033
  if (fn) {
1023
1034
  fn.call(this, property, value, fx.effect, old);
1024
1035
  }
1025
1036
  }, this);
1026
1037
  },
1027
- _clearPath: function(path) {
1038
+ _clearPath: function (path) {
1028
1039
  for (var prop in this.__data__) {
1029
- if (prop.indexOf(path + ".") === 0) {
1040
+ if (prop.indexOf(path + '.') === 0) {
1030
1041
  this.__data__[prop] = undefined;
1031
1042
  }
1032
1043
  }
1033
1044
  }
1034
1045
  },
1035
- ensurePropertyEffects: function(model, property) {
1046
+ ensurePropertyEffects: function (model, property) {
1036
1047
  var fx = model._propertyEffects[property];
1037
1048
  if (!fx) {
1038
1049
  fx = model._propertyEffects[property] = [];
1039
1050
  }
1040
1051
  return fx;
1041
1052
  },
1042
- addPropertyEffect: function(model, property, kind, effect) {
1053
+ addPropertyEffect: function (model, property, kind, effect) {
1043
1054
  var fx = this.ensurePropertyEffects(model, property);
1044
1055
  fx.push({
1045
1056
  kind: kind,
1046
1057
  effect: effect
1047
1058
  });
1048
1059
  },
1049
- createBindings: function(model) {
1060
+ createBindings: function (model) {
1050
1061
  var fx$ = model._propertyEffects;
1051
1062
  if (fx$) {
1052
1063
  for (var n in fx$) {
@@ -1056,43 +1067,43 @@ this._createAccessors(model, n, fx);
1056
1067
  }
1057
1068
  }
1058
1069
  },
1059
- _sortPropertyEffects: function() {
1070
+ _sortPropertyEffects: function () {
1060
1071
  var EFFECT_ORDER = {
1061
- compute: 0,
1062
- annotation: 1,
1063
- computedAnnotation: 2,
1064
- reflect: 3,
1065
- notify: 4,
1066
- observer: 5,
1067
- complexObserver: 6,
1068
- "function": 7
1072
+ 'compute': 0,
1073
+ 'annotation': 1,
1074
+ 'computedAnnotation': 2,
1075
+ 'reflect': 3,
1076
+ 'notify': 4,
1077
+ 'observer': 5,
1078
+ 'complexObserver': 6,
1079
+ 'function': 7
1069
1080
  };
1070
- return function(a, b) {
1081
+ return function (a, b) {
1071
1082
  return EFFECT_ORDER[a.kind] - EFFECT_ORDER[b.kind];
1072
1083
  };
1073
1084
  }(),
1074
- _createAccessors: function(model, property, effects) {
1085
+ _createAccessors: function (model, property, effects) {
1075
1086
  var defun = {
1076
- get: function() {
1087
+ get: function () {
1077
1088
  return this.__data__[property];
1078
1089
  }
1079
1090
  };
1080
- var setter = function(value) {
1091
+ var setter = function (value) {
1081
1092
  this._propertySet(property, value, effects);
1082
1093
  };
1083
1094
  if (model.getPropertyInfo && model.getPropertyInfo(property).readOnly) {
1084
- model["_set" + this.upper(property)] = setter;
1095
+ model['_set' + this.upper(property)] = setter;
1085
1096
  } else {
1086
1097
  defun.set = setter;
1087
1098
  }
1088
1099
  Object.defineProperty(model, property, defun);
1089
1100
  },
1090
- upper: function(name) {
1101
+ upper: function (name) {
1091
1102
  return name[0].toUpperCase() + name.substring(1);
1092
1103
  },
1093
- _addAnnotatedListener: function(model, index, property, path, event) {
1104
+ _addAnnotatedListener: function (model, index, property, path, event) {
1094
1105
  var fn = this._notedListenerFactory(property, path, this._isStructured(path), this._isEventBogus);
1095
- var eventName = event || Polymer.CaseMap.camelToDashCase(property) + "-changed";
1106
+ var eventName = event || Polymer.CaseMap.camelToDashCase(property) + '-changed';
1096
1107
  model._bindListeners.push({
1097
1108
  index: index,
1098
1109
  property: property,
@@ -1101,14 +1112,14 @@ changedFn: fn,
1101
1112
  event: eventName
1102
1113
  });
1103
1114
  },
1104
- _isStructured: function(path) {
1105
- return path.indexOf(".") > 0;
1115
+ _isStructured: function (path) {
1116
+ return path.indexOf('.') > 0;
1106
1117
  },
1107
- _isEventBogus: function(e, target) {
1118
+ _isEventBogus: function (e, target) {
1108
1119
  return e.path && e.path[0] !== target;
1109
1120
  },
1110
- _notedListenerFactory: function(property, path, isStructured, bogusTest) {
1111
- return function(e, target) {
1121
+ _notedListenerFactory: function (property, path, isStructured, bogusTest) {
1122
+ return function (e, target) {
1112
1123
  if (!bogusTest(e, target)) {
1113
1124
  if (e.detail && e.detail.path) {
1114
1125
  this.notifyPath(this._fixPath(path, property, e.detail.path), e.detail.value);
@@ -1125,22 +1136,21 @@ this.set(path, value);
1125
1136
  }
1126
1137
  };
1127
1138
  },
1128
- prepareInstance: function(inst) {
1139
+ prepareInstance: function (inst) {
1129
1140
  inst.__data__ = Object.create(null);
1130
1141
  },
1131
- setupBindListeners: function(inst) {
1132
- inst._bindListeners.forEach(function(info) {
1142
+ setupBindListeners: function (inst) {
1143
+ inst._bindListeners.forEach(function (info) {
1133
1144
  var node = inst._nodes[info.index];
1134
1145
  node.addEventListener(info.event, inst._notifyListener.bind(inst, info.changedFn));
1135
1146
  });
1136
1147
  }
1137
1148
  };
1138
-
1139
1149
  Polymer.Base.extend(Polymer.Bind, {
1140
- _shouldAddListener: function(effect) {
1141
- return effect.name && effect.mode === "{" && !effect.negate && effect.kind != "attribute";
1150
+ _shouldAddListener: function (effect) {
1151
+ return effect.name && effect.mode === '{' && !effect.negate && effect.kind != 'attribute';
1142
1152
  },
1143
- _annotationEffect: function(source, value, effect) {
1153
+ _annotationEffect: function (source, value, effect) {
1144
1154
  if (source != effect.value) {
1145
1155
  value = this.get(effect.value);
1146
1156
  this.__data__[effect.value] = value;
@@ -1150,24 +1160,24 @@ if (!effect.customEvent || this._nodes[effect.index][effect.name] !== calc) {
1150
1160
  return this._applyEffectValue(calc, effect);
1151
1161
  }
1152
1162
  },
1153
- _reflectEffect: function(source) {
1163
+ _reflectEffect: function (source) {
1154
1164
  this.reflectPropertyToAttribute(source);
1155
1165
  },
1156
- _notifyEffect: function(source) {
1166
+ _notifyEffect: function (source) {
1157
1167
  this._notifyChange(source);
1158
1168
  },
1159
- _functionEffect: function(source, value, fn, old) {
1169
+ _functionEffect: function (source, value, fn, old) {
1160
1170
  fn.call(this, source, value, old);
1161
1171
  },
1162
- _observerEffect: function(source, value, effect, old) {
1172
+ _observerEffect: function (source, value, effect, old) {
1163
1173
  var fn = this[effect.method];
1164
1174
  if (fn) {
1165
1175
  fn.call(this, value, old);
1166
1176
  } else {
1167
- this._warn(this._logf("_observerEffect", "observer method `" + effect.method + "` not defined"));
1177
+ this._warn(this._logf('_observerEffect', 'observer method `' + effect.method + '` not defined'));
1168
1178
  }
1169
1179
  },
1170
- _complexObserverEffect: function(source, value, effect) {
1180
+ _complexObserverEffect: function (source, value, effect) {
1171
1181
  var fn = this[effect.method];
1172
1182
  if (fn) {
1173
1183
  var args = Polymer.Bind._marshalArgs(this.__data__, effect, source, value);
@@ -1175,21 +1185,21 @@ if (args) {
1175
1185
  fn.apply(this, args);
1176
1186
  }
1177
1187
  } else {
1178
- this._warn(this._logf("_complexObserverEffect", "observer method `" + effect.method + "` not defined"));
1188
+ this._warn(this._logf('_complexObserverEffect', 'observer method `' + effect.method + '` not defined'));
1179
1189
  }
1180
1190
  },
1181
- _computeEffect: function(source, value, effect) {
1191
+ _computeEffect: function (source, value, effect) {
1182
1192
  var args = Polymer.Bind._marshalArgs(this.__data__, effect, source, value);
1183
1193
  if (args) {
1184
1194
  var fn = this[effect.method];
1185
1195
  if (fn) {
1186
1196
  this[effect.property] = fn.apply(this, args);
1187
1197
  } else {
1188
- this._warn(this._logf("_computeEffect", "compute method `" + effect.method + "` not defined"));
1198
+ this._warn(this._logf('_computeEffect', 'compute method `' + effect.method + '` not defined'));
1189
1199
  }
1190
1200
  }
1191
1201
  },
1192
- _annotatedComputationEffect: function(source, value, effect) {
1202
+ _annotatedComputationEffect: function (source, value, effect) {
1193
1203
  var computedHost = this._rootDataHost || this;
1194
1204
  var fn = computedHost[effect.method];
1195
1205
  if (fn) {
@@ -1202,15 +1212,16 @@ computedvalue = !computedvalue;
1202
1212
  this._applyEffectValue(computedvalue, effect);
1203
1213
  }
1204
1214
  } else {
1205
- computedHost._warn(computedHost._logf("_annotatedComputationEffect", "compute method `" + effect.method + "` not defined"));
1215
+ computedHost._warn(computedHost._logf('_annotatedComputationEffect', 'compute method `' + effect.method + '` not defined'));
1206
1216
  }
1207
1217
  },
1208
- _marshalArgs: function(model, effect, path, value) {
1218
+ _marshalArgs: function (model, effect, path, value) {
1209
1219
  var values = [];
1210
1220
  var args = effect.args;
1211
1221
  for (var i = 0, l = args.length; i < l; i++) {
1212
1222
  var arg = args[i];
1213
1223
  var name = arg.name;
1224
+ var v;
1214
1225
  if (arg.literal) {
1215
1226
  v = arg.value;
1216
1227
  } else if (arg.structured) {
@@ -1222,7 +1233,7 @@ if (args.length > 1 && v === undefined) {
1222
1233
  return;
1223
1234
  }
1224
1235
  if (arg.wildcard) {
1225
- var baseChanged = name.indexOf(path + ".") === 0;
1236
+ var baseChanged = name.indexOf(path + '.') === 0;
1226
1237
  var matches = effect.trigger.name.indexOf(name) === 0 && !baseChanged;
1227
1238
  values[i] = {
1228
1239
  path: matches ? path : name,
@@ -1236,19 +1247,18 @@ values[i] = v;
1236
1247
  return values;
1237
1248
  }
1238
1249
  });
1239
-
1240
1250
  Polymer.Base._addFeature({
1241
- _addPropertyEffect: function(property, kind, effect) {
1251
+ _addPropertyEffect: function (property, kind, effect) {
1242
1252
  Polymer.Bind.addPropertyEffect(this, property, kind, effect);
1243
1253
  },
1244
- _prepEffects: function() {
1254
+ _prepEffects: function () {
1245
1255
  Polymer.Bind.prepareModel(this);
1246
1256
  this._addAnnotationEffects(this._notes);
1247
1257
  },
1248
- _prepBindings: function() {
1258
+ _prepBindings: function () {
1249
1259
  Polymer.Bind.createBindings(this);
1250
1260
  },
1251
- _addPropertyEffects: function(properties) {
1261
+ _addPropertyEffects: function (properties) {
1252
1262
  if (properties) {
1253
1263
  for (var p in properties) {
1254
1264
  var prop = properties[p];
@@ -1259,10 +1269,10 @@ if (prop.computed) {
1259
1269
  this._addComputedEffect(p, prop.computed);
1260
1270
  }
1261
1271
  if (prop.notify) {
1262
- this._addPropertyEffect(p, "notify");
1272
+ this._addPropertyEffect(p, 'notify');
1263
1273
  }
1264
1274
  if (prop.reflectToAttribute) {
1265
- this._addPropertyEffect(p, "reflect");
1275
+ this._addPropertyEffect(p, 'reflect');
1266
1276
  }
1267
1277
  if (prop.readOnly) {
1268
1278
  Polymer.Bind.ensurePropertyEffects(this, p);
@@ -1270,10 +1280,10 @@ Polymer.Bind.ensurePropertyEffects(this, p);
1270
1280
  }
1271
1281
  }
1272
1282
  },
1273
- _addComputedEffect: function(name, expression) {
1283
+ _addComputedEffect: function (name, expression) {
1274
1284
  var sig = this._parseMethod(expression);
1275
- sig.args.forEach(function(arg) {
1276
- this._addPropertyEffect(arg.model, "compute", {
1285
+ sig.args.forEach(function (arg) {
1286
+ this._addPropertyEffect(arg.model, 'compute', {
1277
1287
  method: sig.method,
1278
1288
  args: sig.args,
1279
1289
  trigger: arg,
@@ -1281,39 +1291,39 @@ property: name
1281
1291
  });
1282
1292
  }, this);
1283
1293
  },
1284
- _addObserverEffect: function(property, observer) {
1285
- this._addPropertyEffect(property, "observer", {
1294
+ _addObserverEffect: function (property, observer) {
1295
+ this._addPropertyEffect(property, 'observer', {
1286
1296
  method: observer,
1287
1297
  property: property
1288
1298
  });
1289
1299
  },
1290
- _addComplexObserverEffects: function(observers) {
1300
+ _addComplexObserverEffects: function (observers) {
1291
1301
  if (observers) {
1292
- observers.forEach(function(observer) {
1302
+ observers.forEach(function (observer) {
1293
1303
  this._addComplexObserverEffect(observer);
1294
1304
  }, this);
1295
1305
  }
1296
1306
  },
1297
- _addComplexObserverEffect: function(observer) {
1307
+ _addComplexObserverEffect: function (observer) {
1298
1308
  var sig = this._parseMethod(observer);
1299
- sig.args.forEach(function(arg) {
1300
- this._addPropertyEffect(arg.model, "complexObserver", {
1309
+ sig.args.forEach(function (arg) {
1310
+ this._addPropertyEffect(arg.model, 'complexObserver', {
1301
1311
  method: sig.method,
1302
1312
  args: sig.args,
1303
1313
  trigger: arg
1304
1314
  });
1305
1315
  }, this);
1306
1316
  },
1307
- _addAnnotationEffects: function(notes) {
1317
+ _addAnnotationEffects: function (notes) {
1308
1318
  this._nodes = [];
1309
- notes.forEach(function(note) {
1319
+ notes.forEach(function (note) {
1310
1320
  var index = this._nodes.push(note) - 1;
1311
- note.bindings.forEach(function(binding) {
1321
+ note.bindings.forEach(function (binding) {
1312
1322
  this._addAnnotationEffect(binding, index);
1313
1323
  }, this);
1314
1324
  }, this);
1315
1325
  },
1316
- _addAnnotationEffect: function(note, index) {
1326
+ _addAnnotationEffect: function (note, index) {
1317
1327
  if (Polymer.Bind._shouldAddListener(note)) {
1318
1328
  Polymer.Bind._addAnnotatedListener(this, index, note.name, note.value, note.event);
1319
1329
  }
@@ -1321,23 +1331,23 @@ if (note.signature) {
1321
1331
  this._addAnnotatedComputationEffect(note, index);
1322
1332
  } else {
1323
1333
  note.index = index;
1324
- this._addPropertyEffect(note.model, "annotation", note);
1334
+ this._addPropertyEffect(note.model, 'annotation', note);
1325
1335
  }
1326
1336
  },
1327
- _addAnnotatedComputationEffect: function(note, index) {
1337
+ _addAnnotatedComputationEffect: function (note, index) {
1328
1338
  var sig = note.signature;
1329
1339
  if (sig.static) {
1330
- this.__addAnnotatedComputationEffect("__static__", index, note, sig, null);
1340
+ this.__addAnnotatedComputationEffect('__static__', index, note, sig, null);
1331
1341
  } else {
1332
- sig.args.forEach(function(arg) {
1342
+ sig.args.forEach(function (arg) {
1333
1343
  if (!arg.literal) {
1334
1344
  this.__addAnnotatedComputationEffect(arg.model, index, note, sig, arg);
1335
1345
  }
1336
1346
  }, this);
1337
1347
  }
1338
1348
  },
1339
- __addAnnotatedComputationEffect: function(property, index, note, sig, trigger) {
1340
- this._addPropertyEffect(property, "annotatedComputation", {
1349
+ __addAnnotatedComputationEffect: function (property, index, note, sig, trigger) {
1350
+ this._addPropertyEffect(property, 'annotatedComputation', {
1341
1351
  index: index,
1342
1352
  kind: note.kind,
1343
1353
  property: note.name,
@@ -1347,15 +1357,15 @@ args: sig.args,
1347
1357
  trigger: trigger
1348
1358
  });
1349
1359
  },
1350
- _parseMethod: function(expression) {
1360
+ _parseMethod: function (expression) {
1351
1361
  var m = expression.match(/(\w*)\((.*)\)/);
1352
1362
  if (m) {
1353
1363
  var sig = {
1354
1364
  method: m[1],
1355
- "static": true
1365
+ static: true
1356
1366
  };
1357
1367
  if (m[2].trim()) {
1358
- var args = m[2].replace(/\\,/g, "&comma;").split(",");
1368
+ var args = m[2].replace(/\\,/g, '&comma;').split(',');
1359
1369
  return this._parseArgs(args, sig);
1360
1370
  } else {
1361
1371
  sig.args = Polymer.nar;
@@ -1363,8 +1373,8 @@ return sig;
1363
1373
  }
1364
1374
  }
1365
1375
  },
1366
- _parseArgs: function(argList, sig) {
1367
- sig.args = argList.map(function(rawArg) {
1376
+ _parseArgs: function (argList, sig) {
1377
+ sig.args = argList.map(function (rawArg) {
1368
1378
  var arg = this._parseArg(rawArg);
1369
1379
  if (!arg.literal) {
1370
1380
  sig.static = false;
@@ -1373,32 +1383,31 @@ return arg;
1373
1383
  }, this);
1374
1384
  return sig;
1375
1385
  },
1376
- _parseArg: function(rawArg) {
1377
- var arg = rawArg.trim().replace(/&comma;/g, ",").replace(/\\(.)/g, "$1");
1386
+ _parseArg: function (rawArg) {
1387
+ var arg = rawArg.trim().replace(/&comma;/g, ',').replace(/\\(.)/g, '$1');
1378
1388
  var a = {
1379
1389
  name: arg,
1380
1390
  model: this._modelForPath(arg)
1381
1391
  };
1382
1392
  var fc = arg[0];
1383
- if (fc >= "0" && fc <= "9") {
1384
- fc = "#";
1393
+ if (fc >= '0' && fc <= '9') {
1394
+ fc = '#';
1385
1395
  }
1386
1396
  switch (fc) {
1387
- case "'":
1397
+ case '\'':
1388
1398
  case '"':
1389
1399
  a.value = arg.slice(1, -1);
1390
1400
  a.literal = true;
1391
1401
  break;
1392
-
1393
- case "#":
1402
+ case '#':
1394
1403
  a.value = Number(arg);
1395
1404
  a.literal = true;
1396
1405
  break;
1397
1406
  }
1398
1407
  if (!a.literal) {
1399
- a.structured = arg.indexOf(".") > 0;
1408
+ a.structured = arg.indexOf('.') > 0;
1400
1409
  if (a.structured) {
1401
- a.wildcard = arg.slice(-2) == ".*";
1410
+ a.wildcard = arg.slice(-2) == '.*';
1402
1411
  if (a.wildcard) {
1403
1412
  a.name = arg.slice(0, -2);
1404
1413
  }
@@ -1406,50 +1415,49 @@ a.name = arg.slice(0, -2);
1406
1415
  }
1407
1416
  return a;
1408
1417
  },
1409
- _marshalInstanceEffects: function() {
1418
+ _marshalInstanceEffects: function () {
1410
1419
  Polymer.Bind.prepareInstance(this);
1411
1420
  Polymer.Bind.setupBindListeners(this);
1412
1421
  },
1413
- _applyEffectValue: function(value, info) {
1422
+ _applyEffectValue: function (value, info) {
1414
1423
  var node = this._nodes[info.index];
1415
- var property = info.property || info.name || "textContent";
1416
- if (info.kind == "attribute") {
1424
+ var property = info.property || info.name || 'textContent';
1425
+ if (info.kind == 'attribute') {
1417
1426
  this.serializeValueToAttribute(value, property, node);
1418
1427
  } else {
1419
- if (property === "className") {
1428
+ if (property === 'className') {
1420
1429
  value = this._scopeElementClass(node, value);
1421
1430
  }
1422
- if (property === "textContent" || node.localName == "input" && property == "value") {
1423
- value = value == undefined ? "" : value;
1431
+ if (property === 'textContent' || node.localName == 'input' && property == 'value') {
1432
+ value = value == undefined ? '' : value;
1424
1433
  }
1425
1434
  return node[property] = value;
1426
1435
  }
1427
1436
  },
1428
- _executeStaticEffects: function() {
1437
+ _executeStaticEffects: function () {
1429
1438
  if (this._propertyEffects.__static__) {
1430
- this._effectEffects("__static__", null, this._propertyEffects.__static__);
1439
+ this._effectEffects('__static__', null, this._propertyEffects.__static__);
1431
1440
  }
1432
1441
  }
1433
1442
  });
1434
-
1435
1443
  Polymer.Base._addFeature({
1436
- _setupConfigure: function(initialConfig) {
1444
+ _setupConfigure: function (initialConfig) {
1437
1445
  this._config = initialConfig || {};
1438
1446
  this._handlers = [];
1439
1447
  },
1440
- _marshalAttributes: function() {
1448
+ _marshalAttributes: function () {
1441
1449
  this._takeAttributesToModel(this._config);
1442
1450
  },
1443
- _configValue: function(name, value) {
1451
+ _configValue: function (name, value) {
1444
1452
  this._config[name] = value;
1445
1453
  },
1446
- _beforeClientsReady: function() {
1454
+ _beforeClientsReady: function () {
1447
1455
  this._configure();
1448
1456
  },
1449
- _configure: function() {
1457
+ _configure: function () {
1450
1458
  this._configureAnnotationReferences();
1451
1459
  var config = {};
1452
- this.behaviors.forEach(function(b) {
1460
+ this.behaviors.forEach(function (b) {
1453
1461
  this._configureProperties(b.properties, config);
1454
1462
  }, this);
1455
1463
  this._configureProperties(this.properties, config);
@@ -1457,33 +1465,33 @@ this._mixinConfigure(config, this._config);
1457
1465
  this._config = config;
1458
1466
  this._distributeConfig(this._config);
1459
1467
  },
1460
- _configureProperties: function(properties, config) {
1468
+ _configureProperties: function (properties, config) {
1461
1469
  for (var i in properties) {
1462
1470
  var c = properties[i];
1463
1471
  if (c.value !== undefined) {
1464
1472
  var value = c.value;
1465
- if (typeof value == "function") {
1473
+ if (typeof value == 'function') {
1466
1474
  value = value.call(this, this._config);
1467
1475
  }
1468
1476
  config[i] = value;
1469
1477
  }
1470
1478
  }
1471
1479
  },
1472
- _mixinConfigure: function(a, b) {
1480
+ _mixinConfigure: function (a, b) {
1473
1481
  for (var prop in b) {
1474
1482
  if (!this.getPropertyInfo(prop).readOnly) {
1475
1483
  a[prop] = b[prop];
1476
1484
  }
1477
1485
  }
1478
1486
  },
1479
- _distributeConfig: function(config) {
1487
+ _distributeConfig: function (config) {
1480
1488
  var fx$ = this._propertyEffects;
1481
1489
  if (fx$) {
1482
1490
  for (var p in config) {
1483
1491
  var fx = fx$[p];
1484
1492
  if (fx) {
1485
1493
  for (var i = 0, l = fx.length, x; i < l && (x = fx[i]); i++) {
1486
- if (x.kind === "annotation") {
1494
+ if (x.kind === 'annotation') {
1487
1495
  var node = this._nodes[x.effect.index];
1488
1496
  if (node._configValue) {
1489
1497
  var value = p === x.effect.value ? config[p] : this.get(x.effect.value, config);
@@ -1495,12 +1503,12 @@ node._configValue(x.effect.name, value);
1495
1503
  }
1496
1504
  }
1497
1505
  },
1498
- _afterClientsReady: function() {
1506
+ _afterClientsReady: function () {
1499
1507
  this._executeStaticEffects();
1500
1508
  this._applyConfig(this._config);
1501
1509
  this._flushHandlers();
1502
1510
  },
1503
- _applyConfig: function(config) {
1511
+ _applyConfig: function (config) {
1504
1512
  for (var n in config) {
1505
1513
  if (this[n] === undefined) {
1506
1514
  var effects = this._propertyEffects[n];
@@ -1512,28 +1520,31 @@ this[n] = config[n];
1512
1520
  }
1513
1521
  }
1514
1522
  },
1515
- _notifyListener: function(fn, e) {
1523
+ _notifyListener: function (fn, e) {
1516
1524
  if (!this._clientsReadied) {
1517
- this._queueHandler([ fn, e, e.target ]);
1525
+ this._queueHandler([
1526
+ fn,
1527
+ e,
1528
+ e.target
1529
+ ]);
1518
1530
  } else {
1519
1531
  return fn.call(this, e, e.target);
1520
1532
  }
1521
1533
  },
1522
- _queueHandler: function(args) {
1534
+ _queueHandler: function (args) {
1523
1535
  this._handlers.push(args);
1524
1536
  },
1525
- _flushHandlers: function() {
1537
+ _flushHandlers: function () {
1526
1538
  var h$ = this._handlers;
1527
1539
  for (var i = 0, l = h$.length, h; i < l && (h = h$[i]); i++) {
1528
1540
  h[0].call(this, h[1], h[2]);
1529
1541
  }
1530
1542
  }
1531
1543
  });
1532
-
1533
- (function() {
1534
- "use strict";
1544
+ (function () {
1545
+ 'use strict';
1535
1546
  Polymer.Base._addFeature({
1536
- notifyPath: function(path, value, fromAbove) {
1547
+ notifyPath: function (path, value, fromAbove) {
1537
1548
  var old = this._propertySet(path, value);
1538
1549
  if (old !== value) {
1539
1550
  this._pathEffector(path, value);
@@ -1542,21 +1553,21 @@ this._notifyPath(path, value);
1542
1553
  }
1543
1554
  }
1544
1555
  },
1545
- _getPathParts: function(path) {
1556
+ _getPathParts: function (path) {
1546
1557
  if (Array.isArray(path)) {
1547
1558
  var parts = [];
1548
1559
  for (var i = 0; i < path.length; i++) {
1549
- var args = path[i].toString().split(".");
1560
+ var args = path[i].toString().split('.');
1550
1561
  for (var j = 0; j < args.length; j++) {
1551
1562
  parts.push(args[j]);
1552
1563
  }
1553
1564
  }
1554
1565
  return parts;
1555
1566
  } else {
1556
- return path.toString().split(".");
1567
+ return path.toString().split('.');
1557
1568
  }
1558
1569
  },
1559
- set: function(path, value, root) {
1570
+ set: function (path, value, root) {
1560
1571
  var prop = root || this;
1561
1572
  var parts = this._getPathParts(path);
1562
1573
  var array;
@@ -1574,13 +1585,13 @@ array = Array.isArray(prop) ? prop : null;
1574
1585
  }
1575
1586
  prop[last] = value;
1576
1587
  if (!root) {
1577
- this.notifyPath(parts.join("."), value);
1588
+ this.notifyPath(parts.join('.'), value);
1578
1589
  }
1579
1590
  } else {
1580
1591
  prop[path] = value;
1581
1592
  }
1582
1593
  },
1583
- get: function(path, root) {
1594
+ get: function (path, root) {
1584
1595
  var prop = root || this;
1585
1596
  var parts = this._getPathParts(path);
1586
1597
  var last = parts.pop();
@@ -1592,12 +1603,12 @@ return;
1592
1603
  }
1593
1604
  return prop[last];
1594
1605
  },
1595
- _pathEffector: function(path, value) {
1606
+ _pathEffector: function (path, value) {
1596
1607
  var model = this._modelForPath(path);
1597
1608
  var fx$ = this._propertyEffects[model];
1598
1609
  if (fx$) {
1599
- fx$.forEach(function(fx) {
1600
- var fxFn = this["_" + fx.kind + "PathEffect"];
1610
+ fx$.forEach(function (fx) {
1611
+ var fxFn = this['_' + fx.kind + 'PathEffect'];
1601
1612
  if (fxFn) {
1602
1613
  fxFn.call(this, path, value, fx.effect);
1603
1614
  }
@@ -1607,10 +1618,10 @@ if (this._boundPaths) {
1607
1618
  this._notifyBoundPaths(path, value);
1608
1619
  }
1609
1620
  },
1610
- _annotationPathEffect: function(path, value, effect) {
1611
- if (effect.value === path || effect.value.indexOf(path + ".") === 0) {
1621
+ _annotationPathEffect: function (path, value, effect) {
1622
+ if (effect.value === path || effect.value.indexOf(path + '.') === 0) {
1612
1623
  Polymer.Bind._annotationEffect.call(this, path, value, effect);
1613
- } else if (path.indexOf(effect.value + ".") === 0 && !effect.negate) {
1624
+ } else if (path.indexOf(effect.value + '.') === 0 && !effect.negate) {
1614
1625
  var node = this._nodes[effect.index];
1615
1626
  if (node && node.notifyPath) {
1616
1627
  var p = this._fixPath(effect.name, effect.value, path);
@@ -1618,26 +1629,26 @@ node.notifyPath(p, value, true);
1618
1629
  }
1619
1630
  }
1620
1631
  },
1621
- _complexObserverPathEffect: function(path, value, effect) {
1632
+ _complexObserverPathEffect: function (path, value, effect) {
1622
1633
  if (this._pathMatchesEffect(path, effect)) {
1623
1634
  Polymer.Bind._complexObserverEffect.call(this, path, value, effect);
1624
1635
  }
1625
1636
  },
1626
- _computePathEffect: function(path, value, effect) {
1637
+ _computePathEffect: function (path, value, effect) {
1627
1638
  if (this._pathMatchesEffect(path, effect)) {
1628
1639
  Polymer.Bind._computeEffect.call(this, path, value, effect);
1629
1640
  }
1630
1641
  },
1631
- _annotatedComputationPathEffect: function(path, value, effect) {
1642
+ _annotatedComputationPathEffect: function (path, value, effect) {
1632
1643
  if (this._pathMatchesEffect(path, effect)) {
1633
1644
  Polymer.Bind._annotatedComputationEffect.call(this, path, value, effect);
1634
1645
  }
1635
1646
  },
1636
- _pathMatchesEffect: function(path, effect) {
1647
+ _pathMatchesEffect: function (path, effect) {
1637
1648
  var effectArg = effect.trigger.name;
1638
- return effectArg == path || effectArg.indexOf(path + ".") === 0 || effect.trigger.wildcard && path.indexOf(effectArg) === 0;
1649
+ return effectArg == path || effectArg.indexOf(path + '.') === 0 || effect.trigger.wildcard && path.indexOf(effectArg) === 0;
1639
1650
  },
1640
- linkPaths: function(to, from) {
1651
+ linkPaths: function (to, from) {
1641
1652
  this._boundPaths = this._boundPaths || {};
1642
1653
  if (from) {
1643
1654
  this._boundPaths[to] = from;
@@ -1645,21 +1656,21 @@ this._boundPaths[to] = from;
1645
1656
  this.unbindPath(to);
1646
1657
  }
1647
1658
  },
1648
- unlinkPaths: function(path) {
1659
+ unlinkPaths: function (path) {
1649
1660
  if (this._boundPaths) {
1650
1661
  delete this._boundPaths[path];
1651
1662
  }
1652
1663
  },
1653
- _notifyBoundPaths: function(path, value) {
1664
+ _notifyBoundPaths: function (path, value) {
1654
1665
  var from, to;
1655
1666
  for (var a in this._boundPaths) {
1656
1667
  var b = this._boundPaths[a];
1657
- if (path.indexOf(a + ".") == 0) {
1668
+ if (path.indexOf(a + '.') == 0) {
1658
1669
  from = a;
1659
1670
  to = b;
1660
1671
  break;
1661
1672
  }
1662
- if (path.indexOf(b + ".") == 0) {
1673
+ if (path.indexOf(b + '.') == 0) {
1663
1674
  from = b;
1664
1675
  to = a;
1665
1676
  break;
@@ -1670,45 +1681,43 @@ var p = this._fixPath(to, from, path);
1670
1681
  this.notifyPath(p, value);
1671
1682
  }
1672
1683
  },
1673
- _fixPath: function(property, root, path) {
1684
+ _fixPath: function (property, root, path) {
1674
1685
  return property + path.slice(root.length);
1675
1686
  },
1676
- _notifyPath: function(path, value) {
1687
+ _notifyPath: function (path, value) {
1677
1688
  var rootName = this._modelForPath(path);
1678
1689
  var dashCaseName = Polymer.CaseMap.camelToDashCase(rootName);
1679
1690
  var eventName = dashCaseName + this._EVENT_CHANGED;
1680
1691
  this.fire(eventName, {
1681
1692
  path: path,
1682
1693
  value: value
1683
- }, {
1684
- bubbles: false
1685
- });
1694
+ }, { bubbles: false });
1686
1695
  },
1687
- _modelForPath: function(path) {
1688
- var dot = path.indexOf(".");
1696
+ _modelForPath: function (path) {
1697
+ var dot = path.indexOf('.');
1689
1698
  return dot < 0 ? path : path.slice(0, dot);
1690
1699
  },
1691
- _EVENT_CHANGED: "-changed",
1692
- _notifySplice: function(array, path, index, added, removed) {
1693
- var splices = [ {
1700
+ _EVENT_CHANGED: '-changed',
1701
+ _notifySplice: function (array, path, index, added, removed) {
1702
+ var splices = [{
1694
1703
  index: index,
1695
1704
  addedCount: added,
1696
1705
  removed: removed,
1697
1706
  object: array,
1698
- type: "splice"
1699
- } ];
1707
+ type: 'splice'
1708
+ }];
1700
1709
  var change = {
1701
1710
  keySplices: Polymer.Collection.get(array).applySplices(splices),
1702
1711
  indexSplices: splices
1703
1712
  };
1704
- this.set(path + ".splices", change);
1713
+ this.set(path + '.splices', change);
1705
1714
  if (added != removed.length) {
1706
- this.notifyPath(path + ".length", array.length);
1715
+ this.notifyPath(path + '.length', array.length);
1707
1716
  }
1708
1717
  change.keySplices = null;
1709
1718
  change.indexSplices = null;
1710
1719
  },
1711
- push: function(path) {
1720
+ push: function (path) {
1712
1721
  var array = this.get(path);
1713
1722
  var args = Array.prototype.slice.call(arguments, 1);
1714
1723
  var len = array.length;
@@ -1716,7 +1725,7 @@ var ret = array.push.apply(array, args);
1716
1725
  this._notifySplice(array, path, len, args.length, []);
1717
1726
  return ret;
1718
1727
  },
1719
- pop: function(path) {
1728
+ pop: function (path) {
1720
1729
  var array = this.get(path);
1721
1730
  var args = Array.prototype.slice.call(arguments, 1);
1722
1731
  var rem = array.slice(-1);
@@ -1724,7 +1733,7 @@ var ret = array.pop.apply(array, args);
1724
1733
  this._notifySplice(array, path, array.length, 0, rem);
1725
1734
  return ret;
1726
1735
  },
1727
- splice: function(path, start, deleteCount) {
1736
+ splice: function (path, start, deleteCount) {
1728
1737
  var array = this.get(path);
1729
1738
  var args = Array.prototype.slice.call(arguments, 1);
1730
1739
  var rem = array.slice(start, start + deleteCount);
@@ -1732,14 +1741,14 @@ var ret = array.splice.apply(array, args);
1732
1741
  this._notifySplice(array, path, start, args.length - 2, rem);
1733
1742
  return ret;
1734
1743
  },
1735
- shift: function(path) {
1744
+ shift: function (path) {
1736
1745
  var array = this.get(path);
1737
1746
  var args = Array.prototype.slice.call(arguments, 1);
1738
1747
  var ret = array.shift.apply(array, args);
1739
- this._notifySplice(array, path, 0, 0, [ ret ]);
1748
+ this._notifySplice(array, path, 0, 0, [ret]);
1740
1749
  return ret;
1741
1750
  },
1742
- unshift: function(path) {
1751
+ unshift: function (path) {
1743
1752
  var array = this.get(path);
1744
1753
  var args = Array.prototype.slice.call(arguments, 1);
1745
1754
  var ret = array.unshift.apply(array, args);
@@ -1747,30 +1756,28 @@ this._notifySplice(array, path, 0, args.length, []);
1747
1756
  return ret;
1748
1757
  }
1749
1758
  });
1750
- })();
1751
-
1759
+ }());
1752
1760
  Polymer.Base._addFeature({
1753
- resolveUrl: function(url) {
1761
+ resolveUrl: function (url) {
1754
1762
  var module = Polymer.DomModule.import(this.is);
1755
- var root = "";
1763
+ var root = '';
1756
1764
  if (module) {
1757
- var assetPath = module.getAttribute("assetpath") || "";
1765
+ var assetPath = module.getAttribute('assetpath') || '';
1758
1766
  root = Polymer.ResolveUrl.resolveUrl(assetPath, module.ownerDocument.baseURI);
1759
1767
  }
1760
1768
  return Polymer.ResolveUrl.resolveUrl(url, root);
1761
1769
  }
1762
1770
  });
1763
-
1764
- Polymer.CssParse = function() {
1771
+ Polymer.CssParse = function () {
1765
1772
  var api = {
1766
- parse: function(text) {
1773
+ parse: function (text) {
1767
1774
  text = this._clean(text);
1768
1775
  return this._parseCss(this._lex(text), text);
1769
1776
  },
1770
- _clean: function(cssText) {
1771
- return cssText.replace(rx.comments, "").replace(rx.port, "");
1777
+ _clean: function (cssText) {
1778
+ return cssText.replace(rx.comments, '').replace(rx.port, '');
1772
1779
  },
1773
- _lex: function(text) {
1780
+ _lex: function (text) {
1774
1781
  var root = {
1775
1782
  start: 0,
1776
1783
  end: text.length
@@ -1791,7 +1798,6 @@ previous: previous
1791
1798
  };
1792
1799
  p.rules.push(n);
1793
1800
  break;
1794
-
1795
1801
  case this.CLOSE_BRACE:
1796
1802
  n.end = i + 1;
1797
1803
  n = n.parent || root;
@@ -1800,13 +1806,13 @@ break;
1800
1806
  }
1801
1807
  return root;
1802
1808
  },
1803
- _parseCss: function(node, text) {
1809
+ _parseCss: function (node, text) {
1804
1810
  var t = text.substring(node.start, node.end - 1);
1805
1811
  node.parsedCssText = node.cssText = t.trim();
1806
1812
  if (node.parent) {
1807
1813
  var ss = node.previous ? node.previous.end : node.parent.start;
1808
1814
  t = text.substring(ss, node.start - 1);
1809
- t = t.substring(t.lastIndexOf(";") + 1);
1815
+ t = t.substring(t.lastIndexOf(';') + 1);
1810
1816
  var s = node.parsedSelector = node.selector = t.trim();
1811
1817
  node.atRule = s.indexOf(AT_START) === 0;
1812
1818
  if (node.atRule) {
@@ -1831,9 +1837,9 @@ this._parseCss(r, text);
1831
1837
  }
1832
1838
  return node;
1833
1839
  },
1834
- stringify: function(node, preserveProperties, text) {
1835
- text = text || "";
1836
- var cssText = "";
1840
+ stringify: function (node, preserveProperties, text) {
1841
+ text = text || '';
1842
+ var cssText = '';
1837
1843
  if (node.cssText || node.rules) {
1838
1844
  var r$ = node.rules;
1839
1845
  if (r$ && (preserveProperties || !hasMixinRules(r$))) {
@@ -1844,17 +1850,17 @@ cssText = this.stringify(r, preserveProperties, cssText);
1844
1850
  cssText = preserveProperties ? node.cssText : removeCustomProps(node.cssText);
1845
1851
  cssText = cssText.trim();
1846
1852
  if (cssText) {
1847
- cssText = " " + cssText + "\n";
1853
+ cssText = ' ' + cssText + '\n';
1848
1854
  }
1849
1855
  }
1850
1856
  }
1851
1857
  if (cssText) {
1852
1858
  if (node.selector) {
1853
- text += node.selector + " " + this.OPEN_BRACE + "\n";
1859
+ text += node.selector + ' ' + this.OPEN_BRACE + '\n';
1854
1860
  }
1855
1861
  text += cssText;
1856
1862
  if (node.selector) {
1857
- text += this.CLOSE_BRACE + "\n\n";
1863
+ text += this.CLOSE_BRACE + '\n\n';
1858
1864
  }
1859
1865
  }
1860
1866
  return text;
@@ -1863,20 +1869,20 @@ types: {
1863
1869
  STYLE_RULE: 1,
1864
1870
  KEYFRAMES_RULE: 7,
1865
1871
  MEDIA_RULE: 4,
1866
- MIXIN_RULE: 1e3
1872
+ MIXIN_RULE: 1000
1867
1873
  },
1868
- OPEN_BRACE: "{",
1869
- CLOSE_BRACE: "}"
1874
+ OPEN_BRACE: '{',
1875
+ CLOSE_BRACE: '}'
1870
1876
  };
1871
1877
  function hasMixinRules(rules) {
1872
1878
  return rules[0].selector.indexOf(VAR_START) >= 0;
1873
1879
  }
1874
1880
  function removeCustomProps(cssText) {
1875
- return cssText.replace(rx.customProp, "").replace(rx.mixinProp, "").replace(rx.mixinApply, "").replace(rx.varApply, "");
1881
+ return cssText.replace(rx.customProp, '').replace(rx.mixinProp, '').replace(rx.mixinApply, '').replace(rx.varApply, '');
1876
1882
  }
1877
- var VAR_START = "--";
1878
- var MEDIA_START = "@media";
1879
- var AT_START = "@";
1883
+ var VAR_START = '--';
1884
+ var MEDIA_START = '@media';
1885
+ var AT_START = '@';
1880
1886
  var rx = {
1881
1887
  comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,
1882
1888
  port: /@import[^;]*;/gim,
@@ -1888,12 +1894,11 @@ keyframesRule: /^@[^\s]*keyframes/
1888
1894
  };
1889
1895
  return api;
1890
1896
  }();
1891
-
1892
- Polymer.StyleUtil = function() {
1897
+ Polymer.StyleUtil = function () {
1893
1898
  return {
1894
- MODULE_STYLES_SELECTOR: "style, link[rel=import][type~=css]",
1895
- toCssText: function(rules, callback, preserveProperties) {
1896
- if (typeof rules === "string") {
1899
+ MODULE_STYLES_SELECTOR: 'style, link[rel=import][type~=css]',
1900
+ toCssText: function (rules, callback, preserveProperties) {
1901
+ if (typeof rules === 'string') {
1897
1902
  rules = this.parser.parse(rules);
1898
1903
  }
1899
1904
  if (callback) {
@@ -1901,21 +1906,21 @@ this.forEachStyleRule(rules, callback);
1901
1906
  }
1902
1907
  return this.parser.stringify(rules, preserveProperties);
1903
1908
  },
1904
- forRulesInStyles: function(styles, callback) {
1909
+ forRulesInStyles: function (styles, callback) {
1905
1910
  for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) {
1906
1911
  this.forEachStyleRule(this.rulesForStyle(s), callback);
1907
1912
  }
1908
1913
  },
1909
- rulesForStyle: function(style) {
1914
+ rulesForStyle: function (style) {
1910
1915
  if (!style.__cssRules) {
1911
1916
  style.__cssRules = this.parser.parse(style.textContent);
1912
1917
  }
1913
1918
  return style.__cssRules;
1914
1919
  },
1915
- clearStyleRules: function(style) {
1920
+ clearStyleRules: function (style) {
1916
1921
  style.__cssRules = null;
1917
1922
  },
1918
- forEachStyleRule: function(node, callback) {
1923
+ forEachStyleRule: function (node, callback) {
1919
1924
  var s = node.selector;
1920
1925
  var skipRules = false;
1921
1926
  if (node.type === this.ruleTypes.STYLE_RULE) {
@@ -1930,28 +1935,28 @@ this.forEachStyleRule(r, callback);
1930
1935
  }
1931
1936
  }
1932
1937
  },
1933
- applyCss: function(cssText, moniker, target, afterNode) {
1934
- var style = document.createElement("style");
1938
+ applyCss: function (cssText, moniker, target, afterNode) {
1939
+ var style = document.createElement('style');
1935
1940
  if (moniker) {
1936
- style.setAttribute("scope", moniker);
1941
+ style.setAttribute('scope', moniker);
1937
1942
  }
1938
1943
  style.textContent = cssText;
1939
1944
  target = target || document.head;
1940
1945
  if (!afterNode) {
1941
- var n$ = target.querySelectorAll("style[scope]");
1946
+ var n$ = target.querySelectorAll('style[scope]');
1942
1947
  afterNode = n$[n$.length - 1];
1943
1948
  }
1944
1949
  target.insertBefore(style, afterNode && afterNode.nextSibling || target.firstChild);
1945
1950
  return style;
1946
1951
  },
1947
- cssFromModule: function(moduleId) {
1952
+ cssFromModule: function (moduleId) {
1948
1953
  var m = Polymer.DomModule.import(moduleId);
1949
1954
  if (m && !m._cssText) {
1950
- var cssText = "";
1955
+ var cssText = '';
1951
1956
  var e$ = Array.prototype.slice.call(m.querySelectorAll(this.MODULE_STYLES_SELECTOR));
1952
1957
  for (var i = 0, e; i < e$.length; i++) {
1953
1958
  e = e$[i];
1954
- if (e.localName === "style") {
1959
+ if (e.localName === 'style') {
1955
1960
  e = e.__appliedElement || e;
1956
1961
  e.parentNode.removeChild(e);
1957
1962
  } else {
@@ -1963,21 +1968,20 @@ cssText += Polymer.ResolveUrl.resolveCss(e.textContent, e.ownerDocument);
1963
1968
  }
1964
1969
  m._cssText = cssText;
1965
1970
  }
1966
- return m && m._cssText || "";
1971
+ return m && m._cssText || '';
1967
1972
  },
1968
1973
  parser: Polymer.CssParse,
1969
1974
  ruleTypes: Polymer.CssParse.types
1970
1975
  };
1971
1976
  }();
1972
-
1973
- Polymer.StyleTransformer = function() {
1977
+ Polymer.StyleTransformer = function () {
1974
1978
  var nativeShadow = Polymer.Settings.useNativeShadow;
1975
1979
  var styleUtil = Polymer.StyleUtil;
1976
1980
  var api = {
1977
- dom: function(node, scope, useAttr, shouldRemoveScope) {
1978
- this._transformDom(node, scope || "", useAttr, shouldRemoveScope);
1981
+ dom: function (node, scope, useAttr, shouldRemoveScope) {
1982
+ this._transformDom(node, scope || '', useAttr, shouldRemoveScope);
1979
1983
  },
1980
- _transformDom: function(node, selector, useAttr, shouldRemoveScope) {
1984
+ _transformDom: function (node, selector, useAttr, shouldRemoveScope) {
1981
1985
  if (node.setAttribute) {
1982
1986
  this.element(node, selector, useAttr, shouldRemoveScope);
1983
1987
  }
@@ -1986,7 +1990,7 @@ for (var i = 0; i < c$.length; i++) {
1986
1990
  this._transformDom(c$[i], selector, useAttr, shouldRemoveScope);
1987
1991
  }
1988
1992
  },
1989
- element: function(element, scope, useAttr, shouldRemoveScope) {
1993
+ element: function (element, scope, useAttr, shouldRemoveScope) {
1990
1994
  if (useAttr) {
1991
1995
  if (shouldRemoveScope) {
1992
1996
  element.removeAttribute(SCOPE_NAME);
@@ -2007,29 +2011,29 @@ element.classList.add(scope);
2007
2011
  var c = element.getAttribute(CLASS);
2008
2012
  if (shouldRemoveScope) {
2009
2013
  if (c) {
2010
- element.setAttribute(CLASS, c.replace(SCOPE_NAME, "").replace(scope, ""));
2014
+ element.setAttribute(CLASS, c.replace(SCOPE_NAME, '').replace(scope, ''));
2011
2015
  }
2012
2016
  } else {
2013
- element.setAttribute(CLASS, c + (c ? " " : "") + SCOPE_NAME + " " + scope);
2017
+ element.setAttribute(CLASS, c + (c ? ' ' : '') + SCOPE_NAME + ' ' + scope);
2014
2018
  }
2015
2019
  }
2016
2020
  }
2017
2021
  }
2018
2022
  },
2019
- elementStyles: function(element, callback) {
2023
+ elementStyles: function (element, callback) {
2020
2024
  var styles = element._styles;
2021
- var cssText = "";
2025
+ var cssText = '';
2022
2026
  for (var i = 0, l = styles.length, s, text; i < l && (s = styles[i]); i++) {
2023
2027
  var rules = styleUtil.rulesForStyle(s);
2024
- cssText += nativeShadow ? styleUtil.toCssText(rules, callback) : this.css(rules, element.is, element.extends, callback, element._scopeCssViaAttr) + "\n\n";
2028
+ cssText += nativeShadow ? styleUtil.toCssText(rules, callback) : this.css(rules, element.is, element.extends, callback, element._scopeCssViaAttr) + '\n\n';
2025
2029
  }
2026
2030
  return cssText.trim();
2027
2031
  },
2028
- css: function(rules, scope, ext, callback, useAttr) {
2032
+ css: function (rules, scope, ext, callback, useAttr) {
2029
2033
  var hostScope = this._calcHostScope(scope, ext);
2030
2034
  scope = this._calcElementScope(scope, useAttr);
2031
2035
  var self = this;
2032
- return styleUtil.toCssText(rules, function(rule) {
2036
+ return styleUtil.toCssText(rules, function (rule) {
2033
2037
  if (!rule.isScoped) {
2034
2038
  self.rule(rule, scope, hostScope);
2035
2039
  rule.isScoped = true;
@@ -2039,30 +2043,30 @@ callback(rule, scope, hostScope);
2039
2043
  }
2040
2044
  });
2041
2045
  },
2042
- _calcElementScope: function(scope, useAttr) {
2046
+ _calcElementScope: function (scope, useAttr) {
2043
2047
  if (scope) {
2044
2048
  return useAttr ? CSS_ATTR_PREFIX + scope + CSS_ATTR_SUFFIX : CSS_CLASS_PREFIX + scope;
2045
2049
  } else {
2046
- return "";
2050
+ return '';
2047
2051
  }
2048
2052
  },
2049
- _calcHostScope: function(scope, ext) {
2050
- return ext ? "[is=" + scope + "]" : scope;
2053
+ _calcHostScope: function (scope, ext) {
2054
+ return ext ? '[is=' + scope + ']' : scope;
2051
2055
  },
2052
- rule: function(rule, scope, hostScope) {
2056
+ rule: function (rule, scope, hostScope) {
2053
2057
  this._transformRule(rule, this._transformComplexSelector, scope, hostScope);
2054
2058
  },
2055
- _transformRule: function(rule, transformer, scope, hostScope) {
2059
+ _transformRule: function (rule, transformer, scope, hostScope) {
2056
2060
  var p$ = rule.selector.split(COMPLEX_SELECTOR_SEP);
2057
2061
  for (var i = 0, l = p$.length, p; i < l && (p = p$[i]); i++) {
2058
2062
  p$[i] = transformer.call(this, p, scope, hostScope);
2059
2063
  }
2060
2064
  rule.selector = p$.join(COMPLEX_SELECTOR_SEP);
2061
2065
  },
2062
- _transformComplexSelector: function(selector, scope, hostScope) {
2066
+ _transformComplexSelector: function (selector, scope, hostScope) {
2063
2067
  var stop = false;
2064
2068
  var self = this;
2065
- selector = selector.replace(SIMPLE_SELECTOR_SEP, function(m, c, s) {
2069
+ selector = selector.replace(SIMPLE_SELECTOR_SEP, function (m, c, s) {
2066
2070
  if (!stop) {
2067
2071
  var o = self._transformCompoundSelector(s, c, scope, hostScope);
2068
2072
  if (o.stop) {
@@ -2075,10 +2079,10 @@ return c + s;
2075
2079
  });
2076
2080
  return selector;
2077
2081
  },
2078
- _transformCompoundSelector: function(selector, combinator, scope, hostScope) {
2082
+ _transformCompoundSelector: function (selector, combinator, scope, hostScope) {
2079
2083
  var jumpIndex = selector.search(SCOPE_JUMP);
2080
2084
  if (selector.indexOf(HOST) >= 0) {
2081
- selector = selector.replace(HOST_PAREN, function(m, host, paren) {
2085
+ selector = selector.replace(HOST_PAREN, function (m, host, paren) {
2082
2086
  return hostScope + paren;
2083
2087
  });
2084
2088
  selector = selector.replace(HOST, hostScope);
@@ -2086,11 +2090,11 @@ selector = selector.replace(HOST, hostScope);
2086
2090
  selector = scope ? this._transformSimpleSelector(selector, scope) : selector;
2087
2091
  }
2088
2092
  if (selector.indexOf(CONTENT) >= 0) {
2089
- combinator = "";
2093
+ combinator = '';
2090
2094
  }
2091
2095
  var stop;
2092
2096
  if (jumpIndex >= 0) {
2093
- selector = selector.replace(SCOPE_JUMP, " ");
2097
+ selector = selector.replace(SCOPE_JUMP, ' ');
2094
2098
  stop = true;
2095
2099
  }
2096
2100
  return {
@@ -2099,45 +2103,44 @@ combinator: combinator,
2099
2103
  stop: stop
2100
2104
  };
2101
2105
  },
2102
- _transformSimpleSelector: function(selector, scope) {
2106
+ _transformSimpleSelector: function (selector, scope) {
2103
2107
  var p$ = selector.split(PSEUDO_PREFIX);
2104
2108
  p$[0] += scope;
2105
2109
  return p$.join(PSEUDO_PREFIX);
2106
2110
  },
2107
- rootRule: function(rule) {
2111
+ rootRule: function (rule) {
2108
2112
  this._transformRule(rule, this._transformRootSelector);
2109
2113
  },
2110
- _transformRootSelector: function(selector) {
2114
+ _transformRootSelector: function (selector) {
2111
2115
  return selector.match(SCOPE_JUMP) ? this._transformComplexSelector(selector) : selector.trim() + SCOPE_ROOT_SELECTOR;
2112
2116
  },
2113
- SCOPE_NAME: "style-scope"
2117
+ SCOPE_NAME: 'style-scope'
2114
2118
  };
2115
2119
  var SCOPE_NAME = api.SCOPE_NAME;
2116
- var SCOPE_ROOT_SELECTOR = ":not([" + SCOPE_NAME + "])" + ":not(." + SCOPE_NAME + ")";
2117
- var COMPLEX_SELECTOR_SEP = ",";
2120
+ var SCOPE_ROOT_SELECTOR = ':not([' + SCOPE_NAME + '])' + ':not(.' + SCOPE_NAME + ')';
2121
+ var COMPLEX_SELECTOR_SEP = ',';
2118
2122
  var SIMPLE_SELECTOR_SEP = /(^|[\s>+~]+)([^\s>+~]+)/g;
2119
- var HOST = ":host";
2123
+ var HOST = ':host';
2120
2124
  var HOST_PAREN = /(\:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g;
2121
- var CONTENT = "::content";
2125
+ var CONTENT = '::content';
2122
2126
  var SCOPE_JUMP = /\:\:content|\:\:shadow|\/deep\//;
2123
- var CSS_CLASS_PREFIX = ".";
2124
- var CSS_ATTR_PREFIX = "[" + SCOPE_NAME + "~=";
2125
- var CSS_ATTR_SUFFIX = "]";
2126
- var PSEUDO_PREFIX = ":";
2127
- var CLASS = "class";
2127
+ var CSS_CLASS_PREFIX = '.';
2128
+ var CSS_ATTR_PREFIX = '[' + SCOPE_NAME + '~=';
2129
+ var CSS_ATTR_SUFFIX = ']';
2130
+ var PSEUDO_PREFIX = ':';
2131
+ var CLASS = 'class';
2128
2132
  return api;
2129
2133
  }();
2130
-
2131
- Polymer.StyleExtends = function() {
2134
+ Polymer.StyleExtends = function () {
2132
2135
  var styleUtil = Polymer.StyleUtil;
2133
2136
  return {
2134
- hasExtends: function(cssText) {
2137
+ hasExtends: function (cssText) {
2135
2138
  return Boolean(cssText.match(this.rx.EXTEND));
2136
2139
  },
2137
- transform: function(style) {
2140
+ transform: function (style) {
2138
2141
  var rules = styleUtil.rulesForStyle(style);
2139
2142
  var self = this;
2140
- styleUtil.forEachStyleRule(rules, function(rule) {
2143
+ styleUtil.forEachStyleRule(rules, function (rule) {
2141
2144
  var map = self._mapRule(rule);
2142
2145
  if (rule.parent) {
2143
2146
  var m;
@@ -2149,18 +2152,18 @@ self._extendRule(rule, extendor);
2149
2152
  }
2150
2153
  }
2151
2154
  }
2152
- rule.cssText = rule.cssText.replace(self.rx.EXTEND, "");
2155
+ rule.cssText = rule.cssText.replace(self.rx.EXTEND, '');
2153
2156
  });
2154
- return styleUtil.toCssText(rules, function(rule) {
2157
+ return styleUtil.toCssText(rules, function (rule) {
2155
2158
  if (rule.selector.match(self.rx.STRIP)) {
2156
- rule.cssText = "";
2159
+ rule.cssText = '';
2157
2160
  }
2158
2161
  }, true);
2159
2162
  },
2160
- _mapRule: function(rule) {
2163
+ _mapRule: function (rule) {
2161
2164
  if (rule.parent) {
2162
2165
  var map = rule.parent.map || (rule.parent.map = {});
2163
- var parts = rule.selector.split(",");
2166
+ var parts = rule.selector.split(',');
2164
2167
  for (var i = 0, p; i < parts.length; i++) {
2165
2168
  p = parts[i];
2166
2169
  map[p.trim()] = rule;
@@ -2168,24 +2171,24 @@ map[p.trim()] = rule;
2168
2171
  return map;
2169
2172
  }
2170
2173
  },
2171
- _findExtendor: function(extend, rule) {
2174
+ _findExtendor: function (extend, rule) {
2172
2175
  return rule.parent && rule.parent.map && rule.parent.map[extend] || this._findExtendor(extend, rule.parent);
2173
2176
  },
2174
- _extendRule: function(target, source) {
2177
+ _extendRule: function (target, source) {
2175
2178
  if (target.parent !== source.parent) {
2176
2179
  this._cloneAndAddRuleToParent(source, target.parent);
2177
2180
  }
2178
2181
  target.extends = target.extends || (target.extends = []);
2179
2182
  target.extends.push(source);
2180
- source.selector = source.selector.replace(this.rx.STRIP, "");
2181
- source.selector = (source.selector && source.selector + ",\n") + target.selector;
2183
+ source.selector = source.selector.replace(this.rx.STRIP, '');
2184
+ source.selector = (source.selector && source.selector + ',\n') + target.selector;
2182
2185
  if (source.extends) {
2183
- source.extends.forEach(function(e) {
2186
+ source.extends.forEach(function (e) {
2184
2187
  this._extendRule(target, e);
2185
2188
  }, this);
2186
2189
  }
2187
2190
  },
2188
- _cloneAndAddRuleToParent: function(rule, parent) {
2191
+ _cloneAndAddRuleToParent: function (rule, parent) {
2189
2192
  rule = Object.create(rule);
2190
2193
  rule.parent = parent;
2191
2194
  if (rule.extends) {
@@ -2199,21 +2202,20 @@ STRIP: /%[^,]*$/
2199
2202
  }
2200
2203
  };
2201
2204
  }();
2202
-
2203
- (function() {
2205
+ (function () {
2204
2206
  var prepElement = Polymer.Base._prepElement;
2205
2207
  var nativeShadow = Polymer.Settings.useNativeShadow;
2206
2208
  var styleUtil = Polymer.StyleUtil;
2207
2209
  var styleTransformer = Polymer.StyleTransformer;
2208
2210
  var styleExtends = Polymer.StyleExtends;
2209
2211
  Polymer.Base._addFeature({
2210
- _prepElement: function(element) {
2212
+ _prepElement: function (element) {
2211
2213
  if (this._encapsulateStyle) {
2212
2214
  styleTransformer.element(element, this.is, this._scopeCssViaAttr);
2213
2215
  }
2214
2216
  prepElement.call(this, element);
2215
2217
  },
2216
- _prepStyles: function() {
2218
+ _prepStyles: function () {
2217
2219
  if (this._encapsulateStyle === undefined) {
2218
2220
  this._encapsulateStyle = !nativeShadow && Boolean(this._template);
2219
2221
  }
@@ -2226,9 +2228,9 @@ this._scopeStyle = style;
2226
2228
  }
2227
2229
  }
2228
2230
  },
2229
- _collectStyles: function() {
2231
+ _collectStyles: function () {
2230
2232
  var styles = [];
2231
- var cssText = "", m$ = this.styleModules;
2233
+ var cssText = '', m$ = this.styleModules;
2232
2234
  if (m$) {
2233
2235
  for (var i = 0, l = m$.length, m; i < l && (m = m$[i]); i++) {
2234
2236
  cssText += styleUtil.cssFromModule(m);
@@ -2236,7 +2238,7 @@ cssText += styleUtil.cssFromModule(m);
2236
2238
  }
2237
2239
  cssText += styleUtil.cssFromModule(this.is);
2238
2240
  if (cssText) {
2239
- var style = document.createElement("style");
2241
+ var style = document.createElement('style');
2240
2242
  style.textContent = cssText;
2241
2243
  if (styleExtends.hasExtends(style.textContent)) {
2242
2244
  cssText = styleExtends.transform(style);
@@ -2245,34 +2247,38 @@ styles.push(style);
2245
2247
  }
2246
2248
  return styles;
2247
2249
  },
2248
- _elementAdd: function(node) {
2249
- if (this._encapsulateStyle && !node.__styleScoped) {
2250
+ _elementAdd: function (node) {
2251
+ if (this._encapsulateStyle) {
2252
+ if (node.__styleScoped) {
2253
+ node.__styleScoped = false;
2254
+ } else {
2250
2255
  styleTransformer.dom(node, this.is, this._scopeCssViaAttr);
2251
2256
  }
2257
+ }
2252
2258
  },
2253
- _elementRemove: function(node) {
2259
+ _elementRemove: function (node) {
2254
2260
  if (this._encapsulateStyle) {
2255
2261
  styleTransformer.dom(node, this.is, this._scopeCssViaAttr, true);
2256
2262
  }
2257
2263
  },
2258
- scopeSubtree: function(container, shouldObserve) {
2264
+ scopeSubtree: function (container, shouldObserve) {
2259
2265
  if (nativeShadow) {
2260
2266
  return;
2261
2267
  }
2262
2268
  var self = this;
2263
- var scopify = function(node) {
2269
+ var scopify = function (node) {
2264
2270
  if (node.nodeType === Node.ELEMENT_NODE) {
2265
2271
  node.className = self._scopeElementClass(node, node.className);
2266
- var n$ = node.querySelectorAll("*");
2267
- Array.prototype.forEach.call(n$, function(n) {
2272
+ var n$ = node.querySelectorAll('*');
2273
+ Array.prototype.forEach.call(n$, function (n) {
2268
2274
  n.className = self._scopeElementClass(n, n.className);
2269
2275
  });
2270
2276
  }
2271
2277
  };
2272
2278
  scopify(container);
2273
2279
  if (shouldObserve) {
2274
- var mo = new MutationObserver(function(mxns) {
2275
- mxns.forEach(function(m) {
2280
+ var mo = new MutationObserver(function (mxns) {
2281
+ mxns.forEach(function (m) {
2276
2282
  if (m.addedNodes) {
2277
2283
  for (var i = 0; i < m.addedNodes.length; i++) {
2278
2284
  scopify(m.addedNodes[i]);
@@ -2288,17 +2294,16 @@ return mo;
2288
2294
  }
2289
2295
  }
2290
2296
  });
2291
- })();
2292
-
2293
- Polymer.StyleProperties = function() {
2297
+ }());
2298
+ Polymer.StyleProperties = function () {
2294
2299
  var nativeShadow = Polymer.Settings.useNativeShadow;
2295
2300
  var matchesSelector = Polymer.DomApi.matchesSelector;
2296
2301
  var styleUtil = Polymer.StyleUtil;
2297
2302
  var styleTransformer = Polymer.StyleTransformer;
2298
2303
  return {
2299
- decorateStyles: function(styles) {
2304
+ decorateStyles: function (styles) {
2300
2305
  var self = this, props = {};
2301
- styleUtil.forRulesInStyles(styles, function(rule) {
2306
+ styleUtil.forRulesInStyles(styles, function (rule) {
2302
2307
  self.decorateRule(rule);
2303
2308
  self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);
2304
2309
  });
@@ -2308,7 +2313,7 @@ names.push(i);
2308
2313
  }
2309
2314
  return names;
2310
2315
  },
2311
- decorateRule: function(rule) {
2316
+ decorateRule: function (rule) {
2312
2317
  if (rule.propertyInfo) {
2313
2318
  return rule.propertyInfo;
2314
2319
  }
@@ -2322,7 +2327,7 @@ info.cssText = this.collectCssText(rule);
2322
2327
  rule.propertyInfo = info;
2323
2328
  return info;
2324
2329
  },
2325
- collectProperties: function(rule, properties) {
2330
+ collectProperties: function (rule, properties) {
2326
2331
  var info = rule.propertyInfo;
2327
2332
  if (info) {
2328
2333
  if (info.properties) {
@@ -2340,68 +2345,68 @@ any = true;
2340
2345
  return any;
2341
2346
  }
2342
2347
  },
2343
- collectCssText: function(rule) {
2344
- var customCssText = "";
2348
+ collectCssText: function (rule) {
2349
+ var customCssText = '';
2345
2350
  var cssText = rule.parsedCssText;
2346
- cssText = cssText.replace(this.rx.BRACKETED, "").replace(this.rx.VAR_ASSIGN, "");
2347
- var parts = cssText.split(";");
2351
+ cssText = cssText.replace(this.rx.BRACKETED, '').replace(this.rx.VAR_ASSIGN, '');
2352
+ var parts = cssText.split(';');
2348
2353
  for (var i = 0, p; i < parts.length; i++) {
2349
2354
  p = parts[i];
2350
2355
  if (p.match(this.rx.MIXIN_MATCH) || p.match(this.rx.VAR_MATCH)) {
2351
- customCssText += p + ";\n";
2356
+ customCssText += p + ';\n';
2352
2357
  }
2353
2358
  }
2354
2359
  return customCssText;
2355
2360
  },
2356
- collectPropertiesInCssText: function(cssText, props) {
2361
+ collectPropertiesInCssText: function (cssText, props) {
2357
2362
  var m;
2358
2363
  while (m = this.rx.VAR_CAPTURE.exec(cssText)) {
2359
2364
  props[m[1]] = true;
2360
2365
  }
2361
2366
  },
2362
- reify: function(props) {
2367
+ reify: function (props) {
2363
2368
  var names = Object.getOwnPropertyNames(props);
2364
2369
  for (var i = 0, n; i < names.length; i++) {
2365
2370
  n = names[i];
2366
2371
  props[n] = this.valueForProperty(props[n], props);
2367
2372
  }
2368
2373
  },
2369
- valueForProperty: function(property, props) {
2374
+ valueForProperty: function (property, props) {
2370
2375
  if (property) {
2371
- if (property.indexOf(";") >= 0) {
2376
+ if (property.indexOf(';') >= 0) {
2372
2377
  property = this.valueForProperties(property, props);
2373
2378
  } else {
2374
2379
  var self = this;
2375
- var fn = function(all, prefix, value, fallback) {
2380
+ var fn = function (all, prefix, value, fallback) {
2376
2381
  var propertyValue = self.valueForProperty(props[value], props) || (props[fallback] ? self.valueForProperty(props[fallback], props) : fallback);
2377
- return prefix + (propertyValue || "");
2382
+ return prefix + (propertyValue || '');
2378
2383
  };
2379
2384
  property = property.replace(this.rx.VAR_MATCH, fn);
2380
2385
  }
2381
2386
  }
2382
- return property && property.trim() || "";
2387
+ return property && property.trim() || '';
2383
2388
  },
2384
- valueForProperties: function(property, props) {
2385
- var parts = property.split(";");
2389
+ valueForProperties: function (property, props) {
2390
+ var parts = property.split(';');
2386
2391
  for (var i = 0, p, m; i < parts.length && (p = parts[i]); i++) {
2387
2392
  m = p.match(this.rx.MIXIN_MATCH);
2388
2393
  if (m) {
2389
2394
  p = this.valueForProperty(props[m[1]], props);
2390
2395
  } else {
2391
- var pp = p.split(":");
2396
+ var pp = p.split(':');
2392
2397
  if (pp[1]) {
2393
2398
  pp[1] = pp[1].trim();
2394
2399
  pp[1] = this.valueForProperty(pp[1], props) || pp[1];
2395
2400
  }
2396
- p = pp.join(":");
2401
+ p = pp.join(':');
2397
2402
  }
2398
- parts[i] = p && p.lastIndexOf(";") === p.length - 1 ? p.slice(0, -1) : p || "";
2403
+ parts[i] = p && p.lastIndexOf(';') === p.length - 1 ? p.slice(0, -1) : p || '';
2399
2404
  }
2400
- return parts.join(";");
2405
+ return parts.join(';');
2401
2406
  },
2402
- applyProperties: function(rule, props) {
2403
- var output = "";
2404
- if (!rule.properties) {
2407
+ applyProperties: function (rule, props) {
2408
+ var output = '';
2409
+ if (!rule.propertyInfo) {
2405
2410
  this.decorateRule(rule);
2406
2411
  }
2407
2412
  if (rule.propertyInfo.cssText) {
@@ -2409,10 +2414,10 @@ output = this.valueForProperties(rule.propertyInfo.cssText, props);
2409
2414
  }
2410
2415
  rule.cssText = output;
2411
2416
  },
2412
- propertyDataFromStyles: function(styles, element) {
2417
+ propertyDataFromStyles: function (styles, element) {
2413
2418
  var props = {}, self = this;
2414
2419
  var o = [], i = 0;
2415
- styleUtil.forRulesInStyles(styles, function(rule) {
2420
+ styleUtil.forRulesInStyles(styles, function (rule) {
2416
2421
  if (!rule.propertyInfo) {
2417
2422
  self.decorateRule(rule);
2418
2423
  }
@@ -2427,21 +2432,21 @@ properties: props,
2427
2432
  key: o
2428
2433
  };
2429
2434
  },
2430
- scopePropertiesFromStyles: function(styles) {
2435
+ scopePropertiesFromStyles: function (styles) {
2431
2436
  if (!styles._scopeStyleProperties) {
2432
2437
  styles._scopeStyleProperties = this.selectedPropertiesFromStyles(styles, this.SCOPE_SELECTORS);
2433
2438
  }
2434
2439
  return styles._scopeStyleProperties;
2435
2440
  },
2436
- hostPropertiesFromStyles: function(styles) {
2441
+ hostPropertiesFromStyles: function (styles) {
2437
2442
  if (!styles._hostStyleProperties) {
2438
2443
  styles._hostStyleProperties = this.selectedPropertiesFromStyles(styles, this.HOST_SELECTORS);
2439
2444
  }
2440
2445
  return styles._hostStyleProperties;
2441
2446
  },
2442
- selectedPropertiesFromStyles: function(styles, selectors) {
2447
+ selectedPropertiesFromStyles: function (styles, selectors) {
2443
2448
  var props = {}, self = this;
2444
- styleUtil.forRulesInStyles(styles, function(rule) {
2449
+ styleUtil.forRulesInStyles(styles, function (rule) {
2445
2450
  if (!rule.propertyInfo) {
2446
2451
  self.decorateRule(rule);
2447
2452
  }
@@ -2454,29 +2459,29 @@ return;
2454
2459
  });
2455
2460
  return props;
2456
2461
  },
2457
- transformStyles: function(element, properties, scopeSelector) {
2462
+ transformStyles: function (element, properties, scopeSelector) {
2458
2463
  var self = this;
2459
2464
  var hostRx = new RegExp(this.rx.HOST_PREFIX + element.is + this.rx.HOST_SUFFIX);
2460
- return styleTransformer.elementStyles(element, function(rule) {
2465
+ return styleTransformer.elementStyles(element, function (rule) {
2461
2466
  self.applyProperties(rule, properties);
2462
2467
  if (rule.cssText && !nativeShadow) {
2463
2468
  self._scopeSelector(rule, hostRx, element.is, element._scopeCssViaAttr, scopeSelector);
2464
2469
  }
2465
2470
  });
2466
2471
  },
2467
- _scopeSelector: function(rule, hostRx, is, viaAttr, scopeId) {
2472
+ _scopeSelector: function (rule, hostRx, is, viaAttr, scopeId) {
2468
2473
  rule.transformedSelector = rule.transformedSelector || rule.selector;
2469
2474
  var selector = rule.transformedSelector;
2470
- var scope = viaAttr ? "[" + styleTransformer.SCOPE_NAME + "~=" + scopeId + "]" : "." + scopeId;
2471
- var parts = selector.split(",");
2475
+ var scope = viaAttr ? '[' + styleTransformer.SCOPE_NAME + '~=' + scopeId + ']' : '.' + scopeId;
2476
+ var parts = selector.split(',');
2472
2477
  for (var i = 0, l = parts.length, p; i < l && (p = parts[i]); i++) {
2473
- parts[i] = p.match(hostRx) ? p.replace(is, is + scope) : scope + " " + p;
2478
+ parts[i] = p.match(hostRx) ? p.replace(is, is + scope) : scope + ' ' + p;
2474
2479
  }
2475
- rule.selector = parts.join(",");
2480
+ rule.selector = parts.join(',');
2476
2481
  },
2477
- applyElementScopeSelector: function(element, selector, old, viaAttr) {
2482
+ applyElementScopeSelector: function (element, selector, old, viaAttr) {
2478
2483
  var c = viaAttr ? element.getAttribute(styleTransformer.SCOPE_NAME) : element.className;
2479
- v = old ? c.replace(old, selector) : (c ? c + " " : "") + this.XSCOPE_NAME + " " + selector;
2484
+ v = old ? c.replace(old, selector) : (c ? c + ' ' : '') + this.XSCOPE_NAME + ' ' + selector;
2480
2485
  if (c !== v) {
2481
2486
  if (viaAttr) {
2482
2487
  element.setAttribute(styleTransformer.SCOPE_NAME, v);
@@ -2485,8 +2490,8 @@ element.className = v;
2485
2490
  }
2486
2491
  }
2487
2492
  },
2488
- applyElementStyle: function(element, properties, selector, style) {
2489
- var cssText = style ? style.textContent || "" : this.transformStyles(element, properties, selector);
2493
+ applyElementStyle: function (element, properties, selector, style) {
2494
+ var cssText = style ? style.textContent || '' : this.transformStyles(element, properties, selector);
2490
2495
  var s = element._customStyle;
2491
2496
  if (s && !nativeShadow && s !== style) {
2492
2497
  s._useCount--;
@@ -2517,12 +2522,12 @@ MIXIN_MATCH: /(?:^|\W+)@apply[\s]*\(([^)]*)\);?/im,
2517
2522
  VAR_MATCH: /(^|\W+)var\([\s]*([^,)]*)[\s]*,?[\s]*((?:[^,)]*)|(?:[^;]*\([^;)]*\)))[\s]*?\)/gim,
2518
2523
  VAR_CAPTURE: /\([\s]*(--[^,\s)]*)(?:,[\s]*(--[^,\s)]*))?(?:\)|,)/gim,
2519
2524
  BRACKETED: /\{[^}]*\}/g,
2520
- HOST_PREFIX: "(?:^|[^.])",
2521
- HOST_SUFFIX: "($|[.:[\\s>+~])"
2525
+ HOST_PREFIX: '(?:^|[^.])',
2526
+ HOST_SUFFIX: '($|[.:[\\s>+~])'
2522
2527
  },
2523
- HOST_SELECTORS: [ ":host" ],
2524
- SCOPE_SELECTORS: [ ":root" ],
2525
- XSCOPE_NAME: "x-scope"
2528
+ HOST_SELECTORS: [':host'],
2529
+ SCOPE_SELECTORS: [':root'],
2530
+ XSCOPE_NAME: 'x-scope'
2526
2531
  };
2527
2532
  function addToBitMask(n, bits) {
2528
2533
  var o = parseInt(n / 32);
@@ -2530,16 +2535,15 @@ var v = 1 << n % 32;
2530
2535
  bits[o] = (bits[o] || 0) | v;
2531
2536
  }
2532
2537
  }();
2533
-
2534
- Polymer.StyleDefaults = function() {
2538
+ Polymer.StyleDefaults = function () {
2535
2539
  var styleProperties = Polymer.StyleProperties;
2536
2540
  var styleUtil = Polymer.StyleUtil;
2537
- var style = document.createElement("style");
2541
+ var style = document.createElement('style');
2538
2542
  var api = {
2539
2543
  style: style,
2540
- _styles: [ style ],
2544
+ _styles: [style],
2541
2545
  _properties: null,
2542
- applyCss: function(cssText) {
2546
+ applyCss: function (cssText) {
2543
2547
  this.style.textContent += cssText;
2544
2548
  styleUtil.clearStyleRules(this.style);
2545
2549
  this._properties = null;
@@ -2552,21 +2556,21 @@ this._properties = styleProperties.scopePropertiesFromStyles(this._styles);
2552
2556
  }
2553
2557
  return this._properties;
2554
2558
  },
2555
- _needsStyleProperties: function() {},
2556
- _computeStyleProperties: function() {
2559
+ _needsStyleProperties: function () {
2560
+ },
2561
+ _computeStyleProperties: function () {
2557
2562
  return this._styleProperties;
2558
2563
  }
2559
2564
  };
2560
2565
  return api;
2561
2566
  }();
2562
-
2563
- (function() {
2564
- Polymer.StyleCache = function() {
2567
+ (function () {
2568
+ Polymer.StyleCache = function () {
2565
2569
  this.cache = {};
2566
2570
  };
2567
2571
  Polymer.StyleCache.prototype = {
2568
2572
  MAX: 100,
2569
- store: function(is, data, keyValues, keyStyles) {
2573
+ store: function (is, data, keyValues, keyStyles) {
2570
2574
  data.keyValues = keyValues;
2571
2575
  data.styles = keyStyles;
2572
2576
  var s$ = this.cache[is] = this.cache[is] || [];
@@ -2575,7 +2579,7 @@ if (s$.length > this.MAX) {
2575
2579
  s$.shift();
2576
2580
  }
2577
2581
  },
2578
- retrieve: function(is, keyValues, keyStyles) {
2582
+ retrieve: function (is, keyValues, keyStyles) {
2579
2583
  var cache = this.cache[is];
2580
2584
  if (cache) {
2581
2585
  for (var i = cache.length - 1, data; i >= 0; i--) {
@@ -2586,10 +2590,10 @@ return data;
2586
2590
  }
2587
2591
  }
2588
2592
  },
2589
- clear: function() {
2593
+ clear: function () {
2590
2594
  this.cache = {};
2591
2595
  },
2592
- _objectsEqual: function(target, source) {
2596
+ _objectsEqual: function (target, source) {
2593
2597
  for (var i in target) {
2594
2598
  if (target[i] !== source[i]) {
2595
2599
  return false;
@@ -2601,9 +2605,8 @@ return target.length === source.length;
2601
2605
  return true;
2602
2606
  }
2603
2607
  };
2604
- })();
2605
-
2606
- (function() {
2608
+ }());
2609
+ (function () {
2607
2610
  var serializeValueToAttribute = Polymer.Base.serializeValueToAttribute;
2608
2611
  var propertyUtils = Polymer.StyleProperties;
2609
2612
  var styleTransformer = Polymer.StyleTransformer;
@@ -2611,21 +2614,21 @@ var styleUtil = Polymer.StyleUtil;
2611
2614
  var styleDefaults = Polymer.StyleDefaults;
2612
2615
  var nativeShadow = Polymer.Settings.useNativeShadow;
2613
2616
  Polymer.Base._addFeature({
2614
- _prepStyleProperties: function() {
2617
+ _prepStyleProperties: function () {
2615
2618
  this._ownStylePropertyNames = this._styles ? propertyUtils.decorateStyles(this._styles) : [];
2616
2619
  },
2617
- _setupStyleProperties: function() {
2620
+ _setupStyleProperties: function () {
2618
2621
  this.customStyle = {};
2619
2622
  },
2620
- _needsStyleProperties: function() {
2623
+ _needsStyleProperties: function () {
2621
2624
  return Boolean(this._ownStylePropertyNames && this._ownStylePropertyNames.length);
2622
2625
  },
2623
- _beforeAttached: function() {
2626
+ _beforeAttached: function () {
2624
2627
  if (!this._scopeSelector && this._needsStyleProperties()) {
2625
2628
  this._updateStyleProperties();
2626
2629
  }
2627
2630
  },
2628
- _updateStyleProperties: function() {
2631
+ _updateStyleProperties: function () {
2629
2632
  var info, scope = this.domHost || styleDefaults;
2630
2633
  if (!scope._styleCache) {
2631
2634
  scope._styleCache = new Polymer.StyleCache();
@@ -2660,7 +2663,7 @@ styleCache.store(this.is, Object.create(info), this._ownStyleProperties, this._s
2660
2663
  }
2661
2664
  }
2662
2665
  },
2663
- _computeStyleProperties: function(scopeProps) {
2666
+ _computeStyleProperties: function (scopeProps) {
2664
2667
  var scope = this.domHost || styleDefaults;
2665
2668
  if (!scope._styleProperties) {
2666
2669
  scope._computeStyleProperties();
@@ -2674,7 +2677,7 @@ this.mixin(props, this.customStyle);
2674
2677
  propertyUtils.reify(props);
2675
2678
  this._styleProperties = props;
2676
2679
  },
2677
- _computeOwnStyleProperties: function() {
2680
+ _computeOwnStyleProperties: function () {
2678
2681
  var props = {};
2679
2682
  for (var i = 0, n; i < this._ownStylePropertyNames.length; i++) {
2680
2683
  n = this._ownStylePropertyNames[i];
@@ -2683,18 +2686,18 @@ props[n] = this._styleProperties[n];
2683
2686
  this._ownStyleProperties = props;
2684
2687
  },
2685
2688
  _scopeCount: 0,
2686
- _applyStyleProperties: function(info) {
2689
+ _applyStyleProperties: function (info) {
2687
2690
  var oldScopeSelector = this._scopeSelector;
2688
- this._scopeSelector = info ? info._scopeSelector : this.is + "-" + this.__proto__._scopeCount++;
2691
+ this._scopeSelector = info ? info._scopeSelector : this.is + '-' + this.__proto__._scopeCount++;
2689
2692
  style = propertyUtils.applyElementStyle(this, this._styleProperties, this._scopeSelector, info && info.style);
2690
2693
  if ((style || oldScopeSelector) && !nativeShadow) {
2691
2694
  propertyUtils.applyElementScopeSelector(this, this._scopeSelector, oldScopeSelector, this._scopeCssViaAttr);
2692
2695
  }
2693
2696
  return style || {};
2694
2697
  },
2695
- serializeValueToAttribute: function(value, attribute, node) {
2698
+ serializeValueToAttribute: function (value, attribute, node) {
2696
2699
  node = node || this;
2697
- if (attribute === "class") {
2700
+ if (attribute === 'class') {
2698
2701
  var host = node === this ? this.domHost || this.dataHost : this;
2699
2702
  if (host) {
2700
2703
  value = host._scopeElementClass(node, value);
@@ -2703,13 +2706,13 @@ value = host._scopeElementClass(node, value);
2703
2706
  node = Polymer.dom(node);
2704
2707
  serializeValueToAttribute.call(this, value, attribute, node);
2705
2708
  },
2706
- _scopeElementClass: function(element, selector) {
2709
+ _scopeElementClass: function (element, selector) {
2707
2710
  if (!nativeShadow && !this._scopeCssViaAttr) {
2708
- selector += (selector ? " " : "") + SCOPE_NAME + " " + this.is + (element._scopeSelector ? " " + XSCOPE_NAME + " " + element._scopeSelector : "");
2711
+ selector += (selector ? ' ' : '') + SCOPE_NAME + ' ' + this.is + (element._scopeSelector ? ' ' + XSCOPE_NAME + ' ' + element._scopeSelector : '');
2709
2712
  }
2710
2713
  return selector;
2711
2714
  },
2712
- updateStyles: function() {
2715
+ updateStyles: function () {
2713
2716
  if (this.isAttached) {
2714
2717
  if (this._needsStyleProperties()) {
2715
2718
  this._updateStyleProperties();
@@ -2722,9 +2725,9 @@ this._styleCache.clear();
2722
2725
  this._updateRootStyles();
2723
2726
  }
2724
2727
  },
2725
- _updateRootStyles: function(root) {
2728
+ _updateRootStyles: function (root) {
2726
2729
  root = root || this.root;
2727
- var c$ = Polymer.dom(root)._query(function(e) {
2730
+ var c$ = Polymer.dom(root)._query(function (e) {
2728
2731
  return e.shadyRoot || e.shadowRoot;
2729
2732
  });
2730
2733
  for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
@@ -2734,7 +2737,7 @@ c.updateStyles();
2734
2737
  }
2735
2738
  }
2736
2739
  });
2737
- Polymer.updateStyles = function() {
2740
+ Polymer.updateStyles = function () {
2738
2741
  styleDefaults._styleCache.clear();
2739
2742
  Polymer.Base._updateRootStyles(document);
2740
2743
  };
@@ -2742,10 +2745,9 @@ var styleCache = new Polymer.StyleCache();
2742
2745
  Polymer.customStyleCache = styleCache;
2743
2746
  var SCOPE_NAME = styleTransformer.SCOPE_NAME;
2744
2747
  var XSCOPE_NAME = propertyUtils.XSCOPE_NAME;
2745
- })();
2746
-
2748
+ }());
2747
2749
  Polymer.Base._addFeature({
2748
- _registerFeatures: function() {
2750
+ _registerFeatures: function () {
2749
2751
  this._prepIs();
2750
2752
  this._prepAttributes();
2751
2753
  this._prepExtends();
@@ -2759,12 +2761,12 @@ this._prepBehaviors();
2759
2761
  this._prepBindings();
2760
2762
  this._prepShady();
2761
2763
  },
2762
- _prepBehavior: function(b) {
2764
+ _prepBehavior: function (b) {
2763
2765
  this._addPropertyEffects(b.properties);
2764
2766
  this._addComplexObserverEffects(b.observers);
2765
2767
  this._addHostAttributes(b.hostAttributes);
2766
2768
  },
2767
- _initFeatures: function() {
2769
+ _initFeatures: function () {
2768
2770
  this._poolContent();
2769
2771
  this._setupConfigure();
2770
2772
  this._setupStyleProperties();
@@ -2779,41 +2781,40 @@ this._marshalBehaviors();
2779
2781
  this._marshalAttributes();
2780
2782
  this._tryReady();
2781
2783
  },
2782
- _marshalBehavior: function(b) {
2784
+ _marshalBehavior: function (b) {
2783
2785
  this._listenListeners(b.listeners);
2784
2786
  }
2785
2787
  });
2786
-
2787
- (function() {
2788
+ (function () {
2788
2789
  var nativeShadow = Polymer.Settings.useNativeShadow;
2789
2790
  var propertyUtils = Polymer.StyleProperties;
2790
2791
  var styleUtil = Polymer.StyleUtil;
2791
2792
  var styleDefaults = Polymer.StyleDefaults;
2792
2793
  Polymer({
2793
- is: "custom-style",
2794
- "extends": "style",
2795
- created: function() {
2796
- this._appliesToDocument = this.parentNode.localName !== "dom-module";
2794
+ is: 'custom-style',
2795
+ extends: 'style',
2796
+ created: function () {
2797
+ this._appliesToDocument = this.parentNode.localName !== 'dom-module';
2797
2798
  if (this._appliesToDocument) {
2798
2799
  var e = this.__appliedElement || this;
2799
2800
  var rules = styleUtil.rulesForStyle(e);
2800
- propertyUtils.decorateStyles([ e ]);
2801
+ propertyUtils.decorateStyles([e]);
2801
2802
  this._rulesToDefaultProperties(rules);
2802
2803
  this.async(this._applyStyle);
2803
2804
  }
2804
2805
  },
2805
- _applyStyle: function() {
2806
+ _applyStyle: function () {
2806
2807
  var e = this.__appliedElement || this;
2807
2808
  this._computeStyleProperties();
2808
2809
  var props = this._styleProperties;
2809
2810
  var self = this;
2810
- e.textContent = styleUtil.toCssText(styleUtil.rulesForStyle(e), function(rule) {
2811
- if (rule.selector === ":root") {
2812
- rule.selector = "body";
2811
+ e.textContent = styleUtil.toCssText(styleUtil.rulesForStyle(e), function (rule) {
2812
+ if (rule.selector === ':root') {
2813
+ rule.selector = 'body';
2813
2814
  }
2814
2815
  var css = rule.cssText = rule.parsedCssText;
2815
- if (rule.propertyInfo.cssText) {
2816
- css = css.replace(propertyUtils.rx.VAR_ASSIGN, "");
2816
+ if (rule.propertyInfo && rule.propertyInfo.cssText) {
2817
+ css = css.replace(propertyUtils.rx.VAR_ASSIGN, '');
2817
2818
  rule.cssText = propertyUtils.valueForProperties(css, props);
2818
2819
  }
2819
2820
  if (!nativeShadow) {
@@ -2821,10 +2822,10 @@ Polymer.StyleTransformer.rootRule(rule);
2821
2822
  }
2822
2823
  });
2823
2824
  },
2824
- _rulesToDefaultProperties: function(rules) {
2825
- styleUtil.forEachStyleRule(rules, function(rule) {
2825
+ _rulesToDefaultProperties: function (rules) {
2826
+ styleUtil.forEachStyleRule(rules, function (rule) {
2826
2827
  if (!rule.propertyInfo.properties) {
2827
- rule.cssText = "";
2828
+ rule.cssText = '';
2828
2829
  }
2829
2830
  });
2830
2831
  var cssText = styleUtil.parser.stringify(rules, true);
@@ -2833,24 +2834,19 @@ styleDefaults.applyCss(cssText);
2833
2834
  }
2834
2835
  }
2835
2836
  });
2836
- })();
2837
-
2837
+ }());
2838
2838
  Polymer.Templatizer = {
2839
- properties: {
2840
- _hideTemplateChildren: {
2841
- observer: "_hideTemplateChildrenChanged"
2842
- }
2843
- },
2839
+ properties: { _hideTemplateChildren: { observer: '_showHideChildren' } },
2844
2840
  _templatizerStatic: {
2845
2841
  count: 0,
2846
2842
  callbacks: {},
2847
2843
  debouncer: null
2848
2844
  },
2849
2845
  _instanceProps: Polymer.nob,
2850
- created: function() {
2846
+ created: function () {
2851
2847
  this._templatizerId = this._templatizerStatic.count++;
2852
2848
  },
2853
- templatize: function(template) {
2849
+ templatize: function (template) {
2854
2850
  if (!template._content) {
2855
2851
  template._content = template.content;
2856
2852
  }
@@ -2878,19 +2874,16 @@ archetype.constructor = ctor;
2878
2874
  template._content._ctor = ctor;
2879
2875
  this.ctor = ctor;
2880
2876
  },
2881
- _getRootDataHost: function() {
2877
+ _getRootDataHost: function () {
2882
2878
  return this.dataHost && this.dataHost._rootDataHost || this.dataHost;
2883
2879
  },
2884
- _hideTemplateChildrenChanged: function(hidden) {
2885
- if (this._hideChildren) {
2886
- this._hideChildren(hidden);
2887
- }
2880
+ _showHideChildren: function (hidden) {
2888
2881
  },
2889
- _debounceTemplate: function(fn) {
2882
+ _debounceTemplate: function (fn) {
2890
2883
  this._templatizerStatic.callbacks[this._templatizerId] = fn.bind(this);
2891
2884
  this._templatizerStatic.debouncer = Polymer.Debounce(this._templatizerStatic.debouncer, this._flushTemplates.bind(this, true));
2892
2885
  },
2893
- _flushTemplates: function(debouncerExpired) {
2886
+ _flushTemplates: function (debouncerExpired) {
2894
2887
  var db = this._templatizerStatic.debouncer;
2895
2888
  while (debouncerExpired || db && db.finish) {
2896
2889
  db.stop();
@@ -2902,13 +2895,13 @@ cbs[id]();
2902
2895
  debouncerExpired = false;
2903
2896
  }
2904
2897
  },
2905
- _customPrepEffects: function(archetype) {
2898
+ _customPrepEffects: function (archetype) {
2906
2899
  var parentProps = archetype._parentProps;
2907
2900
  for (var prop in parentProps) {
2908
- archetype._addPropertyEffect(prop, "function", this._createHostPropEffector(prop));
2901
+ archetype._addPropertyEffect(prop, 'function', this._createHostPropEffector(prop));
2909
2902
  }
2910
2903
  },
2911
- _customPrepAnnotations: function(archetype, template) {
2904
+ _customPrepAnnotations: function (archetype, template) {
2912
2905
  archetype._template = template;
2913
2906
  var c = template._content;
2914
2907
  if (!c._notes) {
@@ -2923,7 +2916,7 @@ this._processAnnotations(c._notes);
2923
2916
  archetype._notes = c._notes;
2924
2917
  archetype._parentProps = c._parentProps;
2925
2918
  },
2926
- _prepParentProperties: function(archetype, template) {
2919
+ _prepParentProperties: function (archetype, template) {
2927
2920
  var parentProps = this._parentProps = archetype._parentProps;
2928
2921
  if (this._forwardParentProp && parentProps) {
2929
2922
  var proto = archetype._parentPropProto;
@@ -2937,13 +2930,14 @@ if (template != this) {
2937
2930
  Polymer.Bind.prepareModel(proto);
2938
2931
  }
2939
2932
  for (prop in parentProps) {
2940
- var parentProp = "_parent_" + prop;
2941
- var effects = [ {
2942
- kind: "function",
2933
+ var parentProp = '_parent_' + prop;
2934
+ var effects = [
2935
+ {
2936
+ kind: 'function',
2943
2937
  effect: this._createForwardPropEffector(prop)
2944
- }, {
2945
- kind: "notify"
2946
- } ];
2938
+ },
2939
+ { kind: 'notify' }
2940
+ ];
2947
2941
  Polymer.Bind._createAccessors(proto, parentProp, effects);
2948
2942
  }
2949
2943
  }
@@ -2954,18 +2948,18 @@ template._forwardParentProp = this._forwardParentProp.bind(this);
2954
2948
  this._extendTemplate(template, proto);
2955
2949
  }
2956
2950
  },
2957
- _createForwardPropEffector: function(prop) {
2958
- return function(source, value) {
2951
+ _createForwardPropEffector: function (prop) {
2952
+ return function (source, value) {
2959
2953
  this._forwardParentProp(prop, value);
2960
2954
  };
2961
2955
  },
2962
- _createHostPropEffector: function(prop) {
2963
- return function(source, value) {
2964
- this.dataHost["_parent_" + prop] = value;
2956
+ _createHostPropEffector: function (prop) {
2957
+ return function (source, value) {
2958
+ this.dataHost['_parent_' + prop] = value;
2965
2959
  };
2966
2960
  },
2967
- _extendTemplate: function(template, proto) {
2968
- Object.getOwnPropertyNames(proto).forEach(function(n) {
2961
+ _extendTemplate: function (template, proto) {
2962
+ Object.getOwnPropertyNames(proto).forEach(function (n) {
2969
2963
  var val = template[n];
2970
2964
  var pd = Object.getOwnPropertyDescriptor(proto, n);
2971
2965
  Object.defineProperty(template, n, pd);
@@ -2974,25 +2968,26 @@ template._propertySet(n, val);
2974
2968
  }
2975
2969
  });
2976
2970
  },
2977
- _forwardInstancePath: function(inst, path, value) {},
2978
- _notifyPathImpl: function(path, value) {
2971
+ _forwardInstancePath: function (inst, path, value) {
2972
+ },
2973
+ _notifyPathImpl: function (path, value) {
2979
2974
  var dataHost = this.dataHost;
2980
- var dot = path.indexOf(".");
2975
+ var dot = path.indexOf('.');
2981
2976
  var root = dot < 0 ? path : path.slice(0, dot);
2982
2977
  dataHost._forwardInstancePath.call(dataHost, this, path, value);
2983
2978
  if (root in dataHost._parentProps) {
2984
- dataHost.notifyPath("_parent_" + path, value);
2979
+ dataHost.notifyPath('_parent_' + path, value);
2985
2980
  }
2986
2981
  },
2987
- _pathEffector: function(path, value, fromAbove) {
2982
+ _pathEffector: function (path, value, fromAbove) {
2988
2983
  if (this._forwardParentPath) {
2989
- if (path.indexOf("_parent_") === 0) {
2984
+ if (path.indexOf('_parent_') === 0) {
2990
2985
  this._forwardParentPath(path.substring(8), value);
2991
2986
  }
2992
2987
  }
2993
2988
  Polymer.Base._pathEffector.apply(this, arguments);
2994
2989
  },
2995
- _constructorImpl: function(model, host) {
2990
+ _constructorImpl: function (model, host) {
2996
2991
  this._rootDataHost = host._getRootDataHost();
2997
2992
  this._setupConfigure(model);
2998
2993
  this._pushHost(host);
@@ -3010,115 +3005,111 @@ n._templateInstance = this;
3010
3005
  this._children = children;
3011
3006
  this._tryReady();
3012
3007
  },
3013
- _listenImpl: function(node, eventName, methodName) {
3008
+ _listenImpl: function (node, eventName, methodName) {
3014
3009
  var model = this;
3015
3010
  var host = this._rootDataHost;
3016
3011
  var handler = host._createEventHandler(node, eventName, methodName);
3017
- var decorated = function(e) {
3012
+ var decorated = function (e) {
3018
3013
  e.model = model;
3019
3014
  handler(e);
3020
3015
  };
3021
3016
  host._listen(node, eventName, decorated);
3022
3017
  },
3023
- _scopeElementClassImpl: function(node, value) {
3018
+ _scopeElementClassImpl: function (node, value) {
3024
3019
  var host = this._rootDataHost;
3025
3020
  if (host) {
3026
3021
  return host._scopeElementClass(node, value);
3027
3022
  }
3028
3023
  },
3029
- stamp: function(model) {
3024
+ stamp: function (model) {
3030
3025
  model = model || {};
3031
3026
  if (this._parentProps) {
3032
3027
  for (var prop in this._parentProps) {
3033
- model[prop] = this["_parent_" + prop];
3028
+ model[prop] = this['_parent_' + prop];
3034
3029
  }
3035
3030
  }
3036
3031
  return new this.ctor(model, this);
3037
3032
  }
3038
3033
  };
3039
-
3040
3034
  Polymer({
3041
- is: "dom-template",
3042
- "extends": "template",
3043
- behaviors: [ Polymer.Templatizer ],
3044
- ready: function() {
3035
+ is: 'dom-template',
3036
+ extends: 'template',
3037
+ behaviors: [Polymer.Templatizer],
3038
+ ready: function () {
3045
3039
  this.templatize(this);
3046
3040
  }
3047
3041
  });
3048
-
3049
3042
  Polymer._collections = new WeakMap();
3050
-
3051
- Polymer.Collection = function(userArray) {
3043
+ Polymer.Collection = function (userArray) {
3052
3044
  Polymer._collections.set(userArray, this);
3053
3045
  this.userArray = userArray;
3054
3046
  this.store = userArray.slice();
3055
3047
  this.initMap();
3056
3048
  };
3057
-
3058
3049
  Polymer.Collection.prototype = {
3059
3050
  constructor: Polymer.Collection,
3060
- initMap: function() {
3051
+ initMap: function () {
3061
3052
  var omap = this.omap = new WeakMap();
3062
3053
  var pmap = this.pmap = {};
3063
3054
  var s = this.store;
3064
3055
  for (var i = 0; i < s.length; i++) {
3065
3056
  var item = s[i];
3066
- if (item && typeof item == "object") {
3057
+ if (item && typeof item == 'object') {
3067
3058
  omap.set(item, i);
3068
3059
  } else {
3069
3060
  pmap[item] = i;
3070
3061
  }
3071
3062
  }
3072
3063
  },
3073
- add: function(item) {
3064
+ add: function (item) {
3074
3065
  var key = this.store.push(item) - 1;
3075
- if (item && typeof item == "object") {
3066
+ if (item && typeof item == 'object') {
3076
3067
  this.omap.set(item, key);
3077
3068
  } else {
3078
3069
  this.pmap[item] = key;
3079
3070
  }
3080
3071
  return key;
3081
3072
  },
3082
- removeKey: function(key) {
3073
+ removeKey: function (key) {
3083
3074
  this._removeFromMap(this.store[key]);
3084
3075
  delete this.store[key];
3085
3076
  },
3086
- _removeFromMap: function(item) {
3087
- if (typeof item == "object") {
3077
+ _removeFromMap: function (item) {
3078
+ if (typeof item == 'object') {
3088
3079
  this.omap.delete(item);
3089
3080
  } else {
3090
3081
  delete this.pmap[item];
3091
3082
  }
3092
3083
  },
3093
- remove: function(item) {
3084
+ remove: function (item) {
3094
3085
  var key = this.getKey(item);
3095
3086
  this.removeKey(key);
3096
3087
  return key;
3097
3088
  },
3098
- getKey: function(item) {
3099
- if (typeof item == "object") {
3089
+ getKey: function (item) {
3090
+ if (typeof item == 'object') {
3100
3091
  return this.omap.get(item);
3101
3092
  } else {
3102
3093
  return this.pmap[item];
3103
3094
  }
3104
3095
  },
3105
- getKeys: function() {
3096
+ getKeys: function () {
3106
3097
  return Object.keys(this.store);
3107
3098
  },
3108
- setItem: function(key, value) {
3099
+ setItem: function (key, value) {
3109
3100
  this.store[key] = value;
3110
3101
  },
3111
- getItem: function(key) {
3102
+ getItem: function (key) {
3112
3103
  return this.store[key];
3113
3104
  },
3114
- getItems: function() {
3105
+ getItems: function () {
3115
3106
  var items = [], store = this.store;
3116
3107
  for (var key in store) {
3117
3108
  items.push(store[key]);
3118
3109
  }
3119
3110
  return items;
3120
3111
  },
3121
- applySplices: function(splices) {
3112
+ applySplices: function (splices) {
3122
3113
  var keySplices = [];
3123
3114
  for (var i = 0; i < splices.length; i++) {
3124
3115
  var j, o, key, s = splices[i];
@@ -3144,64 +3135,65 @@ added: added
3144
3135
  return keySplices;
3145
3136
  }
3146
3137
  };
3147
-
3148
- Polymer.Collection.get = function(userArray) {
3138
+ Polymer.Collection.get = function (userArray) {
3149
3139
  return Polymer._collections.get(userArray) || new Polymer.Collection(userArray);
3150
3140
  };
3151
-
3152
3141
  Polymer({
3153
- is: "dom-repeat",
3154
- "extends": "template",
3142
+ is: 'dom-repeat',
3143
+ extends: 'template',
3155
3144
  properties: {
3156
- items: {
3157
- type: Array
3158
- },
3145
+ items: { type: Array },
3159
3146
  as: {
3160
3147
  type: String,
3161
- value: "item"
3148
+ value: 'item'
3162
3149
  },
3163
3150
  indexAs: {
3164
3151
  type: String,
3165
- value: "index"
3152
+ value: 'index'
3166
3153
  },
3167
3154
  sort: {
3168
3155
  type: Function,
3169
- observer: "_sortChanged"
3156
+ observer: '_sortChanged'
3170
3157
  },
3171
3158
  filter: {
3172
3159
  type: Function,
3173
- observer: "_filterChanged"
3160
+ observer: '_filterChanged'
3174
3161
  },
3175
3162
  observe: {
3176
3163
  type: String,
3177
- observer: "_observeChanged"
3164
+ observer: '_observeChanged'
3178
3165
  },
3179
3166
  delay: Number
3180
3167
  },
3181
- behaviors: [ Polymer.Templatizer ],
3182
- observers: [ "_itemsChanged(items.*)" ],
3183
- detached: function() {
3168
+ behaviors: [Polymer.Templatizer],
3169
+ observers: ['_itemsChanged(items.*)'],
3170
+ detached: function () {
3184
3171
  if (this.rows) {
3185
3172
  for (var i = 0; i < this.rows.length; i++) {
3186
3173
  this._detachRow(i);
3187
3174
  }
3188
3175
  }
3189
- this.rows = null;
3190
3176
  },
3191
- ready: function() {
3192
- this._instanceProps = {
3193
- __key__: true
3194
- };
3177
+ attached: function () {
3178
+ if (this.rows) {
3179
+ var parentNode = Polymer.dom(this).parentNode;
3180
+ for (var i = 0; i < this.rows.length; i++) {
3181
+ Polymer.dom(parentNode).insertBefore(this.rows[i].root, this);
3182
+ }
3183
+ }
3184
+ },
3185
+ ready: function () {
3186
+ this._instanceProps = { __key__: true };
3195
3187
  this._instanceProps[this.as] = true;
3196
3188
  this._instanceProps[this.indexAs] = true;
3197
3189
  if (!this.ctor) {
3198
3190
  this.templatize(this);
3199
3191
  }
3200
3192
  },
3201
- _sortChanged: function() {
3193
+ _sortChanged: function () {
3202
3194
  var dataHost = this._getRootDataHost();
3203
3195
  var sort = this.sort;
3204
- this._sortFn = sort && (typeof sort == "function" ? sort : function() {
3196
+ this._sortFn = sort && (typeof sort == 'function' ? sort : function () {
3205
3197
  return dataHost[sort].apply(dataHost, arguments);
3206
3198
  });
3207
3199
  this._fullRefresh = true;
@@ -3209,10 +3201,10 @@ if (this.items) {
3209
3201
  this._debounceTemplate(this._render);
3210
3202
  }
3211
3203
  },
3212
- _filterChanged: function() {
3204
+ _filterChanged: function () {
3213
3205
  var dataHost = this._getRootDataHost();
3214
3206
  var filter = this.filter;
3215
- this._filterFn = filter && (typeof filter == "function" ? filter : function() {
3207
+ this._filterFn = filter && (typeof filter == 'function' ? filter : function () {
3216
3208
  return dataHost[filter].apply(dataHost, arguments);
3217
3209
  });
3218
3210
  this._fullRefresh = true;
@@ -3220,22 +3212,22 @@ if (this.items) {
3220
3212
  this._debounceTemplate(this._render);
3221
3213
  }
3222
3214
  },
3223
- _observeChanged: function() {
3224
- this._observePaths = this.observe && this.observe.replace(".*", ".").split(" ");
3215
+ _observeChanged: function () {
3216
+ this._observePaths = this.observe && this.observe.replace('.*', '.').split(' ');
3225
3217
  },
3226
- _itemsChanged: function(change) {
3227
- if (change.path == "items") {
3218
+ _itemsChanged: function (change) {
3219
+ if (change.path == 'items') {
3228
3220
  if (Array.isArray(this.items)) {
3229
3221
  this.collection = Polymer.Collection.get(this.items);
3230
3222
  } else if (!this.items) {
3231
3223
  this.collection = null;
3232
3224
  } else {
3233
- this._error(this._logf("dom-repeat", "expected array for `items`," + " found", this.items));
3225
+ this._error(this._logf('dom-repeat', 'expected array for `items`,' + ' found', this.items));
3234
3226
  }
3235
3227
  this._splices = [];
3236
3228
  this._fullRefresh = true;
3237
3229
  this._debounceTemplate(this._render);
3238
- } else if (change.path == "items.splices") {
3230
+ } else if (change.path == 'items.splices') {
3239
3231
  this._splices = this._splices.concat(change.value.keySplices);
3240
3232
  this._debounceTemplate(this._render);
3241
3233
  } else {
@@ -3244,15 +3236,15 @@ this._forwardItemPath(subpath, change.value);
3244
3236
  this._checkObservedPaths(subpath);
3245
3237
  }
3246
3238
  },
3247
- _checkObservedPaths: function(path) {
3239
+ _checkObservedPaths: function (path) {
3248
3240
  if (this._observePaths) {
3249
- path = path.substring(path.indexOf(".") + 1);
3241
+ path = path.substring(path.indexOf('.') + 1);
3250
3242
  var paths = this._observePaths;
3251
3243
  for (var i = 0; i < paths.length; i++) {
3252
3244
  if (path.indexOf(paths[i]) === 0) {
3253
3245
  this._fullRefresh = true;
3254
3246
  if (this.delay) {
3255
- this.debounce("render", this._render, this.delay);
3247
+ this.debounce('render', this._render, this.delay);
3256
3248
  } else {
3257
3249
  this._debounceTemplate(this._render);
3258
3250
  }
@@ -3261,12 +3253,12 @@ return;
3261
3253
  }
3262
3254
  }
3263
3255
  },
3264
- render: function() {
3256
+ render: function () {
3265
3257
  this._fullRefresh = true;
3266
- this.debounce("render", this._render);
3258
+ this.debounce('render', this._render);
3267
3259
  this._flushTemplates();
3268
3260
  },
3269
- _render: function() {
3261
+ _render: function () {
3270
3262
  var c = this.collection;
3271
3263
  if (!this._fullRefresh) {
3272
3264
  if (this._sortFn) {
@@ -3299,13 +3291,13 @@ row[this.as] = item;
3299
3291
  row.__key__ = key;
3300
3292
  row[this.indexAs] = i;
3301
3293
  }
3302
- for (;i < this.rows.length; i++) {
3294
+ for (; i < this.rows.length; i++) {
3303
3295
  this._detachRow(i);
3304
3296
  }
3305
3297
  this.rows.splice(keys.length, this.rows.length - keys.length);
3306
- this.fire("dom-change");
3298
+ this.fire('dom-change');
3307
3299
  },
3308
- _sortAndFilter: function() {
3300
+ _sortAndFilter: function () {
3309
3301
  var c = this.collection;
3310
3302
  if (!this._sortFn) {
3311
3303
  this._orderedKeys = [];
@@ -3319,20 +3311,20 @@ this._orderedKeys.push(c.getKey(items[i]));
3319
3311
  this._orderedKeys = c ? c.getKeys() : [];
3320
3312
  }
3321
3313
  if (this._filterFn) {
3322
- this._orderedKeys = this._orderedKeys.filter(function(a) {
3314
+ this._orderedKeys = this._orderedKeys.filter(function (a) {
3323
3315
  return this._filterFn(c.getItem(a));
3324
3316
  }, this);
3325
3317
  }
3326
3318
  if (this._sortFn) {
3327
- this._orderedKeys.sort(function(a, b) {
3319
+ this._orderedKeys.sort(function (a, b) {
3328
3320
  return this._sortFn(c.getItem(a), c.getItem(b));
3329
3321
  }.bind(this));
3330
3322
  }
3331
3323
  },
3332
- _keySort: function(a, b) {
3324
+ _keySort: function (a, b) {
3333
3325
  return this.collection.getKey(a) - this.collection.getKey(b);
3334
3326
  },
3335
- _applySplicesViewSort: function(splices) {
3327
+ _applySplicesViewSort: function (splices) {
3336
3328
  var c = this.collection;
3337
3329
  var keys = this._orderedKeys;
3338
3330
  var rows = this.rows;
@@ -3340,7 +3332,7 @@ var removedRows = [];
3340
3332
  var addedKeys = [];
3341
3333
  var pool = [];
3342
3334
  var sortFn = this._sortFn || this._keySort.bind(this);
3343
- splices.forEach(function(s) {
3335
+ splices.forEach(function (s) {
3344
3336
  for (var i = 0; i < s.removed.length; i++) {
3345
3337
  var idx = this._rowForKey[s.removed[i]];
3346
3338
  if (idx != null) {
@@ -3362,11 +3354,11 @@ keys.splice(idx, 1);
3362
3354
  }
3363
3355
  if (addedKeys.length) {
3364
3356
  if (this._filterFn) {
3365
- addedKeys = addedKeys.filter(function(a) {
3357
+ addedKeys = addedKeys.filter(function (a) {
3366
3358
  return this._filterFn(c.getItem(a));
3367
3359
  }, this);
3368
3360
  }
3369
- addedKeys.sort(function(a, b) {
3361
+ addedKeys.sort(function (a, b) {
3370
3362
  return this._sortFn(c.getItem(a), c.getItem(b));
3371
3363
  }.bind(this));
3372
3364
  var start = 0;
@@ -3375,7 +3367,7 @@ start = this._insertRowIntoViewSort(start, addedKeys[i], pool);
3375
3367
  }
3376
3368
  }
3377
3369
  },
3378
- _insertRowIntoViewSort: function(start, key, pool) {
3370
+ _insertRowIntoViewSort: function (start, key, pool) {
3379
3371
  var c = this.collection;
3380
3372
  var item = c.getItem(key);
3381
3373
  var end = this.rows.length - 1;
@@ -3401,18 +3393,21 @@ this._orderedKeys.splice(idx, 0, key);
3401
3393
  this.rows.splice(idx, 0, this._insertRow(idx, pool, c.getItem(key)));
3402
3394
  return idx;
3403
3395
  },
3404
- _applySplicesArraySort: function(splices) {
3396
+ _applySplicesArraySort: function (splices) {
3405
3397
  var keys = this._orderedKeys;
3406
3398
  var pool = [];
3407
- splices.forEach(function(s) {
3399
+ splices.forEach(function (s) {
3408
3400
  for (var i = 0; i < s.removed.length; i++) {
3409
3401
  pool.push(this._detachRow(s.index + i));
3410
3402
  }
3411
3403
  this.rows.splice(s.index, s.removed.length);
3412
3404
  }, this);
3413
3405
  var c = this.collection;
3414
- splices.forEach(function(s) {
3415
- var args = [ s.index, s.removed.length ].concat(s.added);
3406
+ splices.forEach(function (s) {
3407
+ var args = [
3408
+ s.index,
3409
+ s.removed.length
3410
+ ].concat(s.added);
3416
3411
  keys.splice.apply(keys, args);
3417
3412
  for (var i = 0; i < s.added.length; i++) {
3418
3413
  var item = c.getItem(s.added[i]);
@@ -3421,7 +3416,7 @@ this.rows.splice(s.index + i, 0, row);
3421
3416
  }
3422
3417
  }, this);
3423
3418
  },
3424
- _detachRow: function(idx) {
3419
+ _detachRow: function (idx) {
3425
3420
  var row = this.rows[idx];
3426
3421
  var parentNode = Polymer.dom(this).parentNode;
3427
3422
  for (var i = 0; i < row._children.length; i++) {
@@ -3430,7 +3425,7 @@ Polymer.dom(row.root).appendChild(el);
3430
3425
  }
3431
3426
  return row;
3432
3427
  },
3433
- _insertRow: function(idx, pool, item) {
3428
+ _insertRow: function (idx, pool, item) {
3434
3429
  var row = pool && pool.pop() || this._generateRow(idx, item);
3435
3430
  var beforeRow = this.rows[idx];
3436
3431
  var beforeNode = beforeRow ? beforeRow._children[0] : this;
@@ -3438,58 +3433,56 @@ var parentNode = Polymer.dom(this).parentNode;
3438
3433
  Polymer.dom(parentNode).insertBefore(row.root, beforeNode);
3439
3434
  return row;
3440
3435
  },
3441
- _generateRow: function(idx, item) {
3442
- var model = {
3443
- __key__: this.collection.getKey(item)
3444
- };
3436
+ _generateRow: function (idx, item) {
3437
+ var model = { __key__: this.collection.getKey(item) };
3445
3438
  model[this.as] = item;
3446
3439
  model[this.indexAs] = idx;
3447
3440
  var row = this.stamp(model);
3448
3441
  return row;
3449
3442
  },
3450
- _hideChildren: function(hidden) {
3443
+ _showHideChildren: function (hidden) {
3451
3444
  if (this.rows) {
3452
3445
  for (var i = 0; i < this.rows.length; i++) {
3453
3446
  var c$ = this.rows[i]._children;
3454
3447
  for (var j = 0; j < c$.length; j++) {
3455
3448
  var c = c$[j];
3456
3449
  if (c.style) {
3457
- c.style.display = hidden ? "none" : "";
3450
+ c.style.display = hidden ? 'none' : '';
3458
3451
  }
3459
3452
  c._hideTemplateChildren = hidden;
3460
3453
  }
3461
3454
  }
3462
3455
  }
3463
3456
  },
3464
- _forwardInstancePath: function(row, path, value) {
3465
- if (path.indexOf(this.as + ".") === 0) {
3466
- this.notifyPath("items." + row.__key__ + "." + path.slice(this.as.length + 1), value);
3457
+ _forwardInstancePath: function (row, path, value) {
3458
+ if (path.indexOf(this.as + '.') === 0) {
3459
+ this.notifyPath('items.' + row.__key__ + '.' + path.slice(this.as.length + 1), value);
3467
3460
  return true;
3468
3461
  }
3469
3462
  },
3470
- _forwardParentProp: function(prop, value) {
3463
+ _forwardParentProp: function (prop, value) {
3471
3464
  if (this.rows) {
3472
- this.rows.forEach(function(row) {
3465
+ this.rows.forEach(function (row) {
3473
3466
  row[prop] = value;
3474
3467
  }, this);
3475
3468
  }
3476
3469
  },
3477
- _forwardParentPath: function(path, value) {
3470
+ _forwardParentPath: function (path, value) {
3478
3471
  if (this.rows) {
3479
- this.rows.forEach(function(row) {
3472
+ this.rows.forEach(function (row) {
3480
3473
  row.notifyPath(path, value, true);
3481
3474
  }, this);
3482
3475
  }
3483
3476
  },
3484
- _forwardItemPath: function(path, value) {
3477
+ _forwardItemPath: function (path, value) {
3485
3478
  if (this._rowForKey) {
3486
- var dot = path.indexOf(".");
3479
+ var dot = path.indexOf('.');
3487
3480
  var key = path.substring(0, dot < 0 ? path.length : dot);
3488
3481
  var idx = this._rowForKey[key];
3489
3482
  var row = this.rows[idx];
3490
3483
  if (row) {
3491
3484
  if (dot >= 0) {
3492
- path = this.as + "." + path.substring(dot + 1);
3485
+ path = this.as + '.' + path.substring(dot + 1);
3493
3486
  row.notifyPath(path, value, true);
3494
3487
  } else {
3495
3488
  row[this.as] = value;
@@ -3497,7 +3490,7 @@ row[this.as] = value;
3497
3490
  }
3498
3491
  }
3499
3492
  },
3500
- modelForElement: function(el) {
3493
+ modelForElement: function (el) {
3501
3494
  var model;
3502
3495
  while (el) {
3503
3496
  if (model = el._templateInstance) {
@@ -3511,26 +3504,25 @@ el = el.parentNode;
3511
3504
  }
3512
3505
  }
3513
3506
  },
3514
- itemForElement: function(el) {
3507
+ itemForElement: function (el) {
3515
3508
  var instance = this.modelForElement(el);
3516
3509
  return instance && instance[this.as];
3517
3510
  },
3518
- keyForElement: function(el) {
3511
+ keyForElement: function (el) {
3519
3512
  var instance = this.modelForElement(el);
3520
3513
  return instance && instance.__key__;
3521
3514
  },
3522
- indexForElement: function(el) {
3515
+ indexForElement: function (el) {
3523
3516
  var instance = this.modelForElement(el);
3524
3517
  return instance && instance[this.indexAs];
3525
3518
  }
3526
3519
  });
3527
-
3528
3520
  Polymer({
3529
- is: "array-selector",
3521
+ is: 'array-selector',
3530
3522
  properties: {
3531
3523
  items: {
3532
3524
  type: Array,
3533
- observer: "_itemsChanged"
3525
+ observer: '_itemsChanged'
3534
3526
  },
3535
3527
  selected: {
3536
3528
  type: Object,
@@ -3539,13 +3531,13 @@ notify: true
3539
3531
  toggle: Boolean,
3540
3532
  multi: Boolean
3541
3533
  },
3542
- _itemsChanged: function() {
3534
+ _itemsChanged: function () {
3543
3535
  if (Array.isArray(this.selected)) {
3544
3536
  for (var i = 0; i < this.selected.length; i++) {
3545
- this.unlinkPaths("selected." + i);
3537
+ this.unlinkPaths('selected.' + i);
3546
3538
  }
3547
3539
  } else {
3548
- this.unlinkPaths("selected");
3540
+ this.unlinkPaths('selected');
3549
3541
  }
3550
3542
  if (this.multi) {
3551
3543
  this.selected = [];
@@ -3553,22 +3545,22 @@ this.selected = [];
3553
3545
  this.selected = null;
3554
3546
  }
3555
3547
  },
3556
- deselect: function(item) {
3548
+ deselect: function (item) {
3557
3549
  if (this.multi) {
3558
3550
  var scol = Polymer.Collection.get(this.selected);
3559
3551
  var sidx = this.selected.indexOf(item);
3560
3552
  if (sidx >= 0) {
3561
3553
  var skey = scol.getKey(item);
3562
- this.splice("selected", sidx, 1);
3563
- this.unlinkPaths("selected." + skey);
3554
+ this.splice('selected', sidx, 1);
3555
+ this.unlinkPaths('selected.' + skey);
3564
3556
  return true;
3565
3557
  }
3566
3558
  } else {
3567
3559
  this.selected = null;
3568
- this.unlinkPaths("selected");
3560
+ this.unlinkPaths('selected');
3569
3561
  }
3570
3562
  },
3571
- select: function(item) {
3563
+ select: function (item) {
3572
3564
  var icol = Polymer.Collection.get(this.items);
3573
3565
  var key = icol.getKey(item);
3574
3566
  if (this.multi) {
@@ -3577,28 +3569,27 @@ var skey = scol.getKey(item);
3577
3569
  if (skey >= 0) {
3578
3570
  this.deselect(item);
3579
3571
  } else if (this.toggle) {
3580
- this.push("selected", item);
3581
- this.async(function() {
3572
+ this.push('selected', item);
3573
+ this.async(function () {
3582
3574
  skey = scol.getKey(item);
3583
- this.linkPaths("selected." + skey, "items." + key);
3575
+ this.linkPaths('selected.' + skey, 'items.' + key);
3584
3576
  });
3585
3577
  }
3586
3578
  } else {
3587
3579
  if (this.toggle && item == this.selected) {
3588
3580
  this.deselect();
3589
3581
  } else {
3590
- this.linkPaths("selected", "items." + key);
3582
+ this.linkPaths('selected', 'items.' + key);
3591
3583
  this.selected = item;
3592
3584
  }
3593
3585
  }
3594
3586
  }
3595
3587
  });
3596
-
3597
3588
  Polymer({
3598
- is: "dom-if",
3599
- "extends": "template",
3589
+ is: 'dom-if',
3590
+ extends: 'template',
3600
3591
  properties: {
3601
- "if": {
3592
+ 'if': {
3602
3593
  type: Boolean,
3603
3594
  value: false
3604
3595
  },
@@ -3607,42 +3598,42 @@ type: Boolean,
3607
3598
  value: false
3608
3599
  }
3609
3600
  },
3610
- behaviors: [ Polymer.Templatizer ],
3611
- observers: [ "_queueRender(if, restamp)" ],
3612
- _queueRender: function() {
3601
+ behaviors: [Polymer.Templatizer],
3602
+ observers: ['_queueRender(if, restamp)'],
3603
+ _queueRender: function () {
3613
3604
  this._debounceTemplate(this._render);
3614
3605
  },
3615
- detached: function() {
3606
+ detached: function () {
3616
3607
  this._teardownInstance();
3617
3608
  },
3618
- attached: function() {
3609
+ attached: function () {
3619
3610
  if (this.if && this.ctor) {
3620
3611
  this.async(this._ensureInstance);
3621
3612
  }
3622
3613
  },
3623
- render: function() {
3614
+ render: function () {
3624
3615
  this._flushTemplates();
3625
3616
  },
3626
- _render: function() {
3617
+ _render: function () {
3627
3618
  if (this.if) {
3628
3619
  if (!this.ctor) {
3629
3620
  this._wrapTextNodes(this._content || this.content);
3630
3621
  this.templatize(this);
3631
3622
  }
3632
3623
  this._ensureInstance();
3633
- this._hideTemplateChildren = false;
3624
+ this._showHideChildren();
3634
3625
  } else if (this.restamp) {
3635
3626
  this._teardownInstance();
3636
3627
  }
3637
3628
  if (!this.restamp && this._instance) {
3638
- this._hideTemplateChildren = !this.if;
3629
+ this._showHideChildren();
3639
3630
  }
3640
3631
  if (this.if != this._lastIf) {
3641
- this.fire("dom-change");
3632
+ this.fire('dom-change');
3642
3633
  this._lastIf = this.if;
3643
3634
  }
3644
3635
  },
3645
- _ensureInstance: function() {
3636
+ _ensureInstance: function () {
3646
3637
  if (!this._instance) {
3647
3638
  this._instance = this.stamp();
3648
3639
  var root = this._instance.root;
@@ -3650,116 +3641,114 @@ var parent = Polymer.dom(Polymer.dom(this).parentNode);
3650
3641
  parent.insertBefore(root, this);
3651
3642
  }
3652
3643
  },
3653
- _teardownInstance: function() {
3644
+ _teardownInstance: function () {
3654
3645
  if (this._instance) {
3655
3646
  var c = this._instance._children;
3656
3647
  if (c) {
3657
3648
  var parent = Polymer.dom(Polymer.dom(c[0]).parentNode);
3658
- c.forEach(function(n) {
3649
+ c.forEach(function (n) {
3659
3650
  parent.removeChild(n);
3660
3651
  });
3661
3652
  }
3662
3653
  this._instance = null;
3663
3654
  }
3664
3655
  },
3665
- _wrapTextNodes: function(root) {
3656
+ _wrapTextNodes: function (root) {
3666
3657
  for (var n = root.firstChild; n; n = n.nextSibling) {
3667
3658
  if (n.nodeType === Node.TEXT_NODE) {
3668
- var s = document.createElement("span");
3659
+ var s = document.createElement('span');
3669
3660
  root.insertBefore(s, n);
3670
3661
  s.appendChild(n);
3671
3662
  n = s;
3672
3663
  }
3673
3664
  }
3674
3665
  },
3675
- _hideChildren: function(hidden) {
3666
+ _showHideChildren: function () {
3667
+ var hidden = this._hideTemplateChildren || !this.if;
3676
3668
  if (this._instance) {
3677
3669
  var c$ = this._instance._children;
3678
3670
  for (var i = 0; i < c$.length; i++) {
3679
3671
  var c = c$[i];
3680
- c.style.display = hidden ? "none" : "";
3672
+ c.style.display = hidden ? 'none' : '';
3681
3673
  c._hideTemplateChildren = hidden;
3682
3674
  }
3683
3675
  }
3684
3676
  },
3685
- _forwardParentProp: function(prop, value) {
3677
+ _forwardParentProp: function (prop, value) {
3686
3678
  if (this._instance) {
3687
3679
  this._instance[prop] = value;
3688
3680
  }
3689
3681
  },
3690
- _forwardParentPath: function(path, value) {
3682
+ _forwardParentPath: function (path, value) {
3691
3683
  if (this._instance) {
3692
3684
  this._instance.notifyPath(path, value, true);
3693
3685
  }
3694
3686
  }
3695
3687
  });
3696
-
3697
3688
  Polymer.ImportStatus = {
3698
3689
  _ready: false,
3699
3690
  _callbacks: [],
3700
- whenLoaded: function(cb) {
3691
+ whenLoaded: function (cb) {
3701
3692
  if (this._ready) {
3702
3693
  cb();
3703
3694
  } else {
3704
3695
  this._callbacks.push(cb);
3705
3696
  }
3706
3697
  },
3707
- _importsLoaded: function() {
3698
+ _importsLoaded: function () {
3708
3699
  this._ready = true;
3709
- this._callbacks.forEach(function(cb) {
3700
+ this._callbacks.forEach(function (cb) {
3710
3701
  cb();
3711
3702
  });
3712
3703
  this._callbacks = [];
3713
3704
  }
3714
3705
  };
3715
-
3716
- window.addEventListener("load", function() {
3706
+ window.addEventListener('load', function () {
3717
3707
  Polymer.ImportStatus._importsLoaded();
3718
3708
  });
3719
-
3720
3709
  if (window.HTMLImports) {
3721
- HTMLImports.whenReady(function() {
3710
+ HTMLImports.whenReady(function () {
3722
3711
  Polymer.ImportStatus._importsLoaded();
3723
3712
  });
3724
3713
  }
3725
-
3726
3714
  Polymer({
3727
- is: "dom-bind",
3728
- "extends": "template",
3729
- created: function() {
3715
+ is: 'dom-bind',
3716
+ extends: 'template',
3717
+ created: function () {
3730
3718
  Polymer.ImportStatus.whenLoaded(this._readySelf.bind(this));
3731
3719
  },
3732
- _registerFeatures: function() {
3720
+ _registerFeatures: function () {
3733
3721
  this._prepExtends();
3734
3722
  this._prepConstructor();
3735
3723
  },
3736
- _insertChildren: function() {
3724
+ _insertChildren: function () {
3737
3725
  var parentDom = Polymer.dom(Polymer.dom(this).parentNode);
3738
3726
  parentDom.insertBefore(this.root, this);
3739
3727
  },
3740
- _removeChildren: function() {
3728
+ _removeChildren: function () {
3741
3729
  if (this._children) {
3742
3730
  for (var i = 0; i < this._children.length; i++) {
3743
3731
  this.root.appendChild(this._children[i]);
3744
3732
  }
3745
3733
  }
3746
3734
  },
3747
- _initFeatures: function() {},
3748
- _scopeElementClass: function(element, selector) {
3735
+ _initFeatures: function () {
3736
+ },
3737
+ _scopeElementClass: function (element, selector) {
3749
3738
  if (this.dataHost) {
3750
3739
  return this.dataHost._scopeElementClass(element, selector);
3751
3740
  } else {
3752
3741
  return selector;
3753
3742
  }
3754
3743
  },
3755
- _prepConfigure: function() {
3744
+ _prepConfigure: function () {
3756
3745
  var config = {};
3757
3746
  for (var prop in this._propertyEffects) {
3758
3747
  config[prop] = this[prop];
3759
3748
  }
3760
3749
  this._setupConfigure = this._setupConfigure.bind(this, config);
3761
3750
  },
3762
- attached: function() {
3751
+ attached: function () {
3763
3752
  if (!this._children) {
3764
3753
  this._template = this;
3765
3754
  this._prepAnnotations();
@@ -3771,9 +3760,9 @@ Polymer.Base._initFeatures.call(this);
3771
3760
  this._children = Array.prototype.slice.call(this.root.childNodes);
3772
3761
  }
3773
3762
  this._insertChildren();
3774
- this.fire("dom-change");
3763
+ this.fire('dom-change');
3775
3764
  },
3776
- detached: function() {
3765
+ detached: function () {
3777
3766
  this._removeChildren();
3778
3767
  }
3779
3768
  });</script>