| Index: third_party/polymer/v1_0/components/polymer/polymer.html
|
| diff --git a/third_party/polymer/v1_0/components/polymer/polymer.html b/third_party/polymer/v1_0/components/polymer/polymer.html
|
| index cb08dbb49a5f08e811d42c1f010a529db6a437d5..9d7e47c61da2bc209393e8278857ed7ec5bc603f 100644
|
| --- a/third_party/polymer/v1_0/components/polymer/polymer.html
|
| +++ b/third_party/polymer/v1_0/components/polymer/polymer.html
|
| @@ -54,6 +54,9 @@ var annote = {
|
| bindings: [],
|
| events: []
|
| };
|
| +if (element.localName === 'content') {
|
| +list._hasContent = true;
|
| +}
|
| this._parseChildNodesAnnotations(element, annote, list);
|
| if (element.attributes) {
|
| this._parseNodeAttributeAnnotations(element, annote, list);
|
| @@ -181,6 +184,9 @@ at.value = a === 'style' ? resolveCss(v, ownerDocument) : resolve(v, ownerDocume
|
| }
|
| }
|
| function resolve(url, ownerDocument) {
|
| +if (url && url[0] === '#') {
|
| +return url;
|
| +}
|
| var resolver = getUrlResolver(ownerDocument);
|
| resolver.href = url;
|
| return resolver.href || url;
|
| @@ -341,18 +347,57 @@ this.listen(node, name, listeners[key]);
|
| listen: function (node, eventName, methodName) {
|
| this._listen(node, eventName, this._createEventHandler(node, eventName, methodName));
|
| },
|
| +_boundListenerKey: function (eventName, methodName) {
|
| +return eventName + ':' + methodName;
|
| +},
|
| +_recordEventHandler: function (host, eventName, target, methodName, handler) {
|
| +var hbl = host.__boundListeners;
|
| +if (!hbl) {
|
| +hbl = host.__boundListeners = new WeakMap();
|
| +}
|
| +var bl = hbl.get(target);
|
| +if (!bl) {
|
| +bl = {};
|
| +hbl.set(target, bl);
|
| +}
|
| +var key = this._boundListenerKey(eventName, methodName);
|
| +bl[key] = handler;
|
| +},
|
| +_recallEventHandler: function (host, eventName, target, methodName) {
|
| +var hbl = host.__boundListeners;
|
| +if (!hbl) {
|
| +return;
|
| +}
|
| +var bl = hbl.get(target);
|
| +if (!bl) {
|
| +return;
|
| +}
|
| +var key = this._boundListenerKey(eventName, methodName);
|
| +return bl[key];
|
| +},
|
| _createEventHandler: function (node, eventName, methodName) {
|
| var host = this;
|
| -return function (e) {
|
| +var handler = function (e) {
|
| if (host[methodName]) {
|
| host[methodName](e, e.detail);
|
| } else {
|
| host._warn(host._logf('_createEventHandler', 'listener method `' + methodName + '` not defined'));
|
| }
|
| };
|
| +this._recordEventHandler(host, eventName, node, methodName, handler);
|
| +return handler;
|
| +},
|
| +unlisten: function (node, eventName, methodName) {
|
| +var handler = this._recallEventHandler(this, eventName, node, methodName);
|
| +if (handler) {
|
| +this._unlisten(node, eventName, handler);
|
| +}
|
| },
|
| _listen: function (node, eventName, handler) {
|
| node.addEventListener(eventName, handler);
|
| +},
|
| +_unlisten: function (node, eventName, handler) {
|
| +node.removeEventListener(eventName, handler);
|
| }
|
| });
|
| (function () {
|
| @@ -406,7 +451,6 @@ POINTERSTATE.mouse.mouseIgnoreJob = null;
|
| POINTERSTATE.mouse.mouseIgnoreJob = Polymer.Debounce(POINTERSTATE.mouse.mouseIgnoreJob, unset, MOUSE_TIMEOUT);
|
| }
|
| var POINTERSTATE = {
|
| -tapPrevented: false,
|
| mouse: {
|
| target: null,
|
| mouseIgnoreJob: null
|
| @@ -540,12 +584,43 @@ if (recognizer.touchAction) {
|
| this.setTouchAction(node, recognizer.touchAction);
|
| }
|
| },
|
| +remove: function (node, evType, handler) {
|
| +var recognizer = this.gestures[evType];
|
| +var deps = recognizer.deps;
|
| +var name = recognizer.name;
|
| +var gobj = node[GESTURE_KEY];
|
| +if (gobj) {
|
| +for (var i = 0, dep, gd; i < deps.length; i++) {
|
| +dep = deps[i];
|
| +gd = gobj[dep];
|
| +if (gd && gd[name]) {
|
| +gd[name] = (gd[name] || 1) - 1;
|
| +if (gd[name] === 0) {
|
| +node.removeEventListener(dep, this.handleNative);
|
| +}
|
| +}
|
| +}
|
| +}
|
| +node.removeEventListener(evType, handler);
|
| +},
|
| register: function (recog) {
|
| this.recognizers.push(recog);
|
| for (var i = 0; i < recog.emits.length; i++) {
|
| this.gestures[recog.emits[i]] = recog;
|
| }
|
| },
|
| +findRecognizerByEvent: function (evName) {
|
| +for (var i = 0, r; i < this.recognizers.length; i++) {
|
| +r = this.recognizers[i];
|
| +for (var j = 0, n; j < r.emits.length; j++) {
|
| +n = r.emits[j];
|
| +if (n === evName) {
|
| +return r;
|
| +}
|
| +}
|
| +}
|
| +return null;
|
| +},
|
| setTouchAction: function (node, value) {
|
| if (HAS_NATIVE_TA) {
|
| node.style.touchAction = value;
|
| @@ -553,12 +628,23 @@ node.style.touchAction = value;
|
| node[TOUCH_ACTION] = value;
|
| },
|
| fire: function (target, type, detail) {
|
| -var ev = new CustomEvent(type, {
|
| -detail: detail,
|
| +var ev = Polymer.Base.fire(type, detail, {
|
| +node: target,
|
| bubbles: true,
|
| cancelable: true
|
| });
|
| -target.dispatchEvent(ev);
|
| +if (ev.defaultPrevented) {
|
| +var se = detail.sourceEvent;
|
| +if (se && se.preventDefault) {
|
| +se.preventDefault();
|
| +}
|
| +}
|
| +},
|
| +prevent: function (evName) {
|
| +var recognizer = this.findRecognizerByEvent(evName);
|
| +if (recognizer.info) {
|
| +recognizer.info.prevent = true;
|
| +}
|
| }
|
| };
|
| Gestures.register({
|
| @@ -589,10 +675,12 @@ touchend: function (e) {
|
| this.fire('up', e.currentTarget, e.changedTouches[0]);
|
| },
|
| fire: function (type, target, event) {
|
| +var self = this;
|
| Gestures.fire(target, type, {
|
| x: event.clientX,
|
| y: event.clientY,
|
| -sourceEvent: event
|
| +sourceEvent: event,
|
| +prevent: Gestures.prevent.bind(Gestures)
|
| });
|
| }
|
| });
|
| @@ -617,7 +705,8 @@ if (this.moves.length > TRACK_LENGTH) {
|
| this.moves.shift();
|
| }
|
| this.moves.push(move);
|
| -}
|
| +},
|
| +prevent: false
|
| },
|
| clearInfo: function () {
|
| this.info.state = 'start';
|
| @@ -625,8 +714,12 @@ this.info.started = false;
|
| this.info.moves = [];
|
| this.info.x = 0;
|
| this.info.y = 0;
|
| +this.info.prevent = false;
|
| },
|
| hasMovedEnough: function (x, y) {
|
| +if (this.info.prevent) {
|
| +return false;
|
| +}
|
| if (this.info.started) {
|
| return true;
|
| }
|
| @@ -646,13 +739,12 @@ x: x,
|
| y: y
|
| });
|
| self.fire(t, e);
|
| -e.preventDefault();
|
| self.info.started = true;
|
| }
|
| };
|
| var upfn = function upfn(e) {
|
| if (self.info.started) {
|
| -POINTERSTATE.tapPrevented = true;
|
| +Gestures.prevent('tap');
|
| movefn(e);
|
| }
|
| self.clearInfo();
|
| @@ -687,7 +779,7 @@ touchend: function (e) {
|
| var t = e.currentTarget;
|
| var ct = e.changedTouches[0];
|
| if (this.info.started) {
|
| -POINTERSTATE.tapPrevented = true;
|
| +Gestures.prevent('tap');
|
| this.info.state = 'end';
|
| this.info.addMove({
|
| x: ct.clientX,
|
| @@ -731,37 +823,37 @@ deps: [
|
| 'touchend'
|
| ],
|
| emits: ['tap'],
|
| -start: {
|
| +info: {
|
| x: NaN,
|
| -y: NaN
|
| +y: NaN,
|
| +prevent: false
|
| },
|
| reset: function () {
|
| -this.start.x = NaN;
|
| -this.start.y = NaN;
|
| +this.info.x = NaN;
|
| +this.info.y = NaN;
|
| +this.info.prevent = false;
|
| },
|
| save: function (e) {
|
| -this.start.x = e.clientX;
|
| -this.start.y = e.clientY;
|
| +this.info.x = e.clientX;
|
| +this.info.y = e.clientY;
|
| },
|
| mousedown: function (e) {
|
| -POINTERSTATE.tapPrevented = false;
|
| this.save(e);
|
| },
|
| click: function (e) {
|
| this.forward(e);
|
| },
|
| touchstart: function (e) {
|
| -POINTERSTATE.tapPrevented = false;
|
| this.save(e.changedTouches[0]);
|
| },
|
| touchend: function (e) {
|
| this.forward(e.changedTouches[0]);
|
| },
|
| forward: function (e) {
|
| -var dx = Math.abs(e.clientX - this.start.x);
|
| -var dy = Math.abs(e.clientY - this.start.y);
|
| +var dx = Math.abs(e.clientX - this.info.x);
|
| +var dy = Math.abs(e.clientY - this.info.y);
|
| if (isNaN(dx) || isNaN(dy) || dx <= TAP_DISTANCE && dy <= TAP_DISTANCE) {
|
| -if (!POINTERSTATE.tapPrevented) {
|
| +if (!this.info.prevent) {
|
| Gestures.fire(e.target, 'tap', {
|
| x: e.clientX,
|
| y: e.clientY,
|
| @@ -786,6 +878,13 @@ Gestures.add(node, eventName, handler);
|
| node.addEventListener(eventName, handler);
|
| }
|
| },
|
| +_unlisten: function (node, eventName, handler) {
|
| +if (Gestures.gestures[eventName]) {
|
| +Gestures.remove(node, eventName, handler);
|
| +} else {
|
| +node.removeEventListener(eventName, handler);
|
| +}
|
| +},
|
| setScrollDirection: function (direction, node) {
|
| node = node || this;
|
| Gestures.setTouchAction(node, DIRECTION_MAP[direction] || 'auto');
|
| @@ -793,50 +892,55 @@ Gestures.setTouchAction(node, DIRECTION_MAP[direction] || 'auto');
|
| });
|
| Polymer.Gestures = Gestures;
|
| }());
|
| -Polymer.Async = function () {
|
| -var currVal = 0;
|
| -var lastVal = 0;
|
| -var callbacks = [];
|
| -var twiddle = document.createTextNode('');
|
| -function runAsync(callback, waitTime) {
|
| +Polymer.Async = {
|
| +_currVal: 0,
|
| +_lastVal: 0,
|
| +_callbacks: [],
|
| +_twiddleContent: 0,
|
| +_twiddle: document.createTextNode(''),
|
| +run: function (callback, waitTime) {
|
| if (waitTime > 0) {
|
| return ~setTimeout(callback, waitTime);
|
| } else {
|
| -twiddle.textContent = currVal++;
|
| -callbacks.push(callback);
|
| -return currVal - 1;
|
| -}
|
| +this._twiddle.textContent = this._twiddleContent++;
|
| +this._callbacks.push(callback);
|
| +return this._currVal++;
|
| }
|
| -function cancelAsync(handle) {
|
| +},
|
| +cancel: function (handle) {
|
| if (handle < 0) {
|
| clearTimeout(~handle);
|
| } else {
|
| -var idx = handle - lastVal;
|
| +var idx = handle - this._lastVal;
|
| if (idx >= 0) {
|
| -if (!callbacks[idx]) {
|
| +if (!this._callbacks[idx]) {
|
| throw 'invalid async handle: ' + handle;
|
| }
|
| -callbacks[idx] = null;
|
| -}
|
| +this._callbacks[idx] = null;
|
| }
|
| }
|
| -function atEndOfMicrotask() {
|
| -var len = callbacks.length;
|
| +},
|
| +_atEndOfMicrotask: function () {
|
| +var len = this._callbacks.length;
|
| for (var i = 0; i < len; i++) {
|
| -var cb = callbacks[i];
|
| +var cb = this._callbacks[i];
|
| if (cb) {
|
| +try {
|
| cb();
|
| +} catch (e) {
|
| +i++;
|
| +this._callbacks.splice(0, i);
|
| +this._lastVal += i;
|
| +this._twiddle.textContent = this._twiddleContent++;
|
| +throw e;
|
| }
|
| }
|
| -callbacks.splice(0, len);
|
| -lastVal += len;
|
| }
|
| -new (window.MutationObserver || JsMutationObserver)(atEndOfMicrotask).observe(twiddle, { characterData: true });
|
| -return {
|
| -run: runAsync,
|
| -cancel: cancelAsync
|
| +this._callbacks.splice(0, len);
|
| +this._lastVal += len;
|
| +}
|
| };
|
| -}();
|
| +new (window.MutationObserver || JsMutationObserver)(Polymer.Async._atEndOfMicrotask.bind(Polymer.Async)).observe(Polymer.Async._twiddle, { characterData: true });
|
| Polymer.Debounce = function () {
|
| var Async = Polymer.Async;
|
| var Debouncer = function (context) {
|
| @@ -931,9 +1035,10 @@ options = options || Polymer.nob;
|
| var node = options.node || this;
|
| var detail = detail === null || detail === undefined ? Polymer.nob : detail;
|
| var bubbles = options.bubbles === undefined ? true : options.bubbles;
|
| +var cancelable = Boolean(options.cancelable);
|
| var event = new CustomEvent(type, {
|
| bubbles: Boolean(bubbles),
|
| -cancelable: Boolean(options.cancelable),
|
| +cancelable: cancelable,
|
| detail: detail
|
| });
|
| node.dispatchEvent(event);
|
| @@ -990,11 +1095,6 @@ elt[n] = props[n];
|
| }
|
| }
|
| return elt;
|
| -},
|
| -mixin: function (target, source) {
|
| -for (var i in source) {
|
| -target[i] = source[i];
|
| -}
|
| }
|
| });
|
| Polymer.Bind = {
|
| @@ -1011,9 +1111,9 @@ _notifyChange: function (property) {
|
| var eventName = Polymer.CaseMap.camelToDashCase(property) + '-changed';
|
| this.fire(eventName, { value: this[property] }, { bubbles: false });
|
| },
|
| -_propertySet: function (property, value, effects) {
|
| +_propertySetter: function (property, value, effects, fromAbove) {
|
| var old = this.__data__[property];
|
| -if (old !== value) {
|
| +if (old !== value && (old === old || value === value)) {
|
| this.__data__[property] = value;
|
| if (typeof value == 'object') {
|
| this._clearPath(property);
|
| @@ -1022,16 +1122,25 @@ if (this._propertyChanged) {
|
| this._propertyChanged(property, value, old);
|
| }
|
| if (effects) {
|
| -this._effectEffects(property, value, effects, old);
|
| +this._effectEffects(property, value, effects, old, fromAbove);
|
| }
|
| }
|
| return old;
|
| },
|
| -_effectEffects: function (property, value, effects, old) {
|
| +__setProperty: function (property, value, quiet, node) {
|
| +node = node || this;
|
| +var effects = node._propertyEffects && node._propertyEffects[property];
|
| +if (effects) {
|
| +node._propertySetter(property, value, effects, quiet);
|
| +} else {
|
| +node[property] = value;
|
| +}
|
| +},
|
| +_effectEffects: function (property, value, effects, old, fromAbove) {
|
| effects.forEach(function (fx) {
|
| var fn = Polymer.Bind['_' + fx.kind + 'Effect'];
|
| if (fn) {
|
| -fn.call(this, property, value, fx.effect, old);
|
| +fn.call(this, property, value, fx.effect, old, fromAbove);
|
| }
|
| }, this);
|
| },
|
| @@ -1089,7 +1198,7 @@ return this.__data__[property];
|
| }
|
| };
|
| var setter = function (value) {
|
| -this._propertySet(property, value, effects);
|
| +this._propertySetter(property, value, effects);
|
| };
|
| if (model.getPropertyInfo && model.getPropertyInfo(property).readOnly) {
|
| model['_set' + this.upper(property)] = setter;
|
| @@ -1163,11 +1272,13 @@ return this._applyEffectValue(calc, effect);
|
| _reflectEffect: function (source) {
|
| this.reflectPropertyToAttribute(source);
|
| },
|
| -_notifyEffect: function (source) {
|
| +_notifyEffect: function (source, value, effect, old, fromAbove) {
|
| +if (!fromAbove) {
|
| this._notifyChange(source);
|
| +}
|
| },
|
| -_functionEffect: function (source, value, fn, old) {
|
| -fn.call(this, source, value, old);
|
| +_functionEffect: function (source, value, fn, old, fromAbove) {
|
| +fn.call(this, source, value, old, fromAbove);
|
| },
|
| _observerEffect: function (source, value, effect, old) {
|
| var fn = this[effect.method];
|
| @@ -1193,7 +1304,7 @@ var args = Polymer.Bind._marshalArgs(this.__data__, effect, source, value);
|
| if (args) {
|
| var fn = this[effect.method];
|
| if (fn) {
|
| -this[effect.property] = fn.apply(this, args);
|
| +this.__setProperty(effect.property, fn.apply(this, args));
|
| } else {
|
| this._warn(this._logf('_computeEffect', 'compute method `' + effect.method + '` not defined'));
|
| }
|
| @@ -1266,6 +1377,7 @@ if (prop.observer) {
|
| this._addObserverEffect(p, prop.observer);
|
| }
|
| if (prop.computed) {
|
| +prop.readOnly = true;
|
| this._addComputedEffect(p, prop.computed);
|
| }
|
| if (prop.notify) {
|
| @@ -1456,12 +1568,13 @@ this._configure();
|
| },
|
| _configure: function () {
|
| this._configureAnnotationReferences();
|
| +this._aboveConfig = this.mixin({}, this._config);
|
| var config = {};
|
| this.behaviors.forEach(function (b) {
|
| this._configureProperties(b.properties, config);
|
| }, this);
|
| this._configureProperties(this.properties, config);
|
| -this._mixinConfigure(config, this._config);
|
| +this._mixinConfigure(config, this._aboveConfig);
|
| this._config = config;
|
| this._distributeConfig(this._config);
|
| },
|
| @@ -1505,18 +1618,13 @@ node._configValue(x.effect.name, value);
|
| },
|
| _afterClientsReady: function () {
|
| this._executeStaticEffects();
|
| -this._applyConfig(this._config);
|
| +this._applyConfig(this._config, this._aboveConfig);
|
| this._flushHandlers();
|
| },
|
| -_applyConfig: function (config) {
|
| +_applyConfig: function (config, aboveConfig) {
|
| for (var n in config) {
|
| if (this[n] === undefined) {
|
| -var effects = this._propertyEffects[n];
|
| -if (effects) {
|
| -this._propertySet(n, config[n], effects);
|
| -} else {
|
| -this[n] = config[n];
|
| -}
|
| +this.__setProperty(n, config[n], n in aboveConfig);
|
| }
|
| }
|
| },
|
| @@ -1545,8 +1653,8 @@ h[0].call(this, h[1], h[2]);
|
| 'use strict';
|
| Polymer.Base._addFeature({
|
| notifyPath: function (path, value, fromAbove) {
|
| -var old = this._propertySet(path, value);
|
| -if (old !== value) {
|
| +var old = this._propertySetter(path, value);
|
| +if (old !== value && (old === old || value === value)) {
|
| this._pathEffector(path, value);
|
| if (!fromAbove) {
|
| this._notifyPath(path, value);
|
| @@ -1583,6 +1691,15 @@ return;
|
| }
|
| array = Array.isArray(prop) ? prop : null;
|
| }
|
| +if (array) {
|
| +var coll = Polymer.Collection.get(array);
|
| +var old = prop[last];
|
| +var key = coll.getKey(old);
|
| +if (key) {
|
| +parts[i] = key;
|
| +coll.setItem(key, value);
|
| +}
|
| +}
|
| prop[last] = value;
|
| if (!root) {
|
| this.notifyPath(parts.join('.'), value);
|
| @@ -1707,7 +1824,7 @@ object: array,
|
| type: 'splice'
|
| }];
|
| var change = {
|
| -keySplices: Polymer.Collection.get(array).applySplices(splices),
|
| +keySplices: Polymer.Collection.applySplices(array, splices),
|
| indexSplices: splices
|
| };
|
| this.set(path + '.splices', change);
|
| @@ -1736,9 +1853,8 @@ return ret;
|
| splice: function (path, start, deleteCount) {
|
| var array = this.get(path);
|
| var args = Array.prototype.slice.call(arguments, 1);
|
| -var rem = array.slice(start, start + deleteCount);
|
| var ret = array.splice.apply(array, args);
|
| -this._notifySplice(array, path, start, args.length - 2, rem);
|
| +this._notifySplice(array, path, start, args.length - 2, ret);
|
| return ret;
|
| },
|
| shift: function (path) {
|
| @@ -1884,12 +2000,12 @@ var VAR_START = '--';
|
| var MEDIA_START = '@media';
|
| var AT_START = '@';
|
| var rx = {
|
| -comments: /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,
|
| +comments: /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
|
| port: /@import[^;]*;/gim,
|
| -customProp: /(?:^|[\s;])--[^;{]*?:[^{};]*?;/gim,
|
| -mixinProp: /(?:^|[\s;])--[^;{]*?:[^{;]*?{[^}]*?};?/gim,
|
| -mixinApply: /@apply[\s]*\([^)]*?\)[\s]*;/gim,
|
| -varApply: /[^;:]*?:[^;]*var[^;]*;/gim,
|
| +customProp: /(?:^|[\s;])--[^;{]*?:[^{};]*?(?:[;\n]|$)/gim,
|
| +mixinProp: /(?:^|[\s;])--[^;{]*?:[^{;]*?{[^}]*?}(?:[;\n]|$)?/gim,
|
| +mixinApply: /@apply[\s]*\([^)]*?\)[\s]*(?:[;\n]|$)?/gim,
|
| +varApply: /[^;:]*?:[^;]*var[^;]*(?:[;\n]|$)?/gim,
|
| keyframesRule: /^@[^\s]*keyframes/
|
| };
|
| return api;
|
| @@ -1912,7 +2028,7 @@ this.forEachStyleRule(this.rulesForStyle(s), callback);
|
| }
|
| },
|
| rulesForStyle: function (style) {
|
| -if (!style.__cssRules) {
|
| +if (!style.__cssRules && style.textContent) {
|
| style.__cssRules = this.parser.parse(style.textContent);
|
| }
|
| return style.__cssRules;
|
| @@ -2065,23 +2181,33 @@ rule.selector = p$.join(COMPLEX_SELECTOR_SEP);
|
| },
|
| _transformComplexSelector: function (selector, scope, hostScope) {
|
| var stop = false;
|
| +var hostContext = false;
|
| var self = this;
|
| selector = selector.replace(SIMPLE_SELECTOR_SEP, function (m, c, s) {
|
| if (!stop) {
|
| -var o = self._transformCompoundSelector(s, c, scope, hostScope);
|
| -if (o.stop) {
|
| -stop = true;
|
| -}
|
| -c = o.combinator;
|
| -s = o.value;
|
| +var info = self._transformCompoundSelector(s, c, scope, hostScope);
|
| +stop = stop || info.stop;
|
| +hostContext = hostContext || info.hostContext;
|
| +c = info.combinator;
|
| +s = info.value;
|
| +} else {
|
| +s = s.replace(SCOPE_JUMP, ' ');
|
| }
|
| return c + s;
|
| });
|
| +if (hostContext) {
|
| +selector = selector.replace(HOST_CONTEXT_PAREN, function (m, pre, paren, post) {
|
| +return pre + paren + ' ' + hostScope + post + COMPLEX_SELECTOR_SEP + ' ' + pre + hostScope + paren + post;
|
| +});
|
| +}
|
| return selector;
|
| },
|
| _transformCompoundSelector: function (selector, combinator, scope, hostScope) {
|
| var jumpIndex = selector.search(SCOPE_JUMP);
|
| -if (selector.indexOf(HOST) >= 0) {
|
| +var hostContext = false;
|
| +if (selector.indexOf(HOST_CONTEXT) >= 0) {
|
| +hostContext = true;
|
| +} else if (selector.indexOf(HOST) >= 0) {
|
| selector = selector.replace(HOST_PAREN, function (m, host, paren) {
|
| return hostScope + paren;
|
| });
|
| @@ -2100,7 +2226,8 @@ stop = true;
|
| return {
|
| value: selector,
|
| combinator: combinator,
|
| -stop: stop
|
| +stop: stop,
|
| +hostContext: hostContext
|
| };
|
| },
|
| _transformSimpleSelector: function (selector, scope) {
|
| @@ -2108,20 +2235,32 @@ var p$ = selector.split(PSEUDO_PREFIX);
|
| p$[0] += scope;
|
| return p$.join(PSEUDO_PREFIX);
|
| },
|
| -rootRule: function (rule) {
|
| -this._transformRule(rule, this._transformRootSelector);
|
| +documentRule: function (rule) {
|
| +rule.selector = rule.parsedSelector;
|
| +this.normalizeRootSelector(rule);
|
| +if (!nativeShadow) {
|
| +this._transformRule(rule, this._transformDocumentSelector);
|
| +}
|
| +},
|
| +normalizeRootSelector: function (rule) {
|
| +if (rule.selector === ROOT) {
|
| +rule.selector = 'body';
|
| +}
|
| },
|
| -_transformRootSelector: function (selector) {
|
| -return selector.match(SCOPE_JUMP) ? this._transformComplexSelector(selector) : selector.trim() + SCOPE_ROOT_SELECTOR;
|
| +_transformDocumentSelector: function (selector) {
|
| +return selector.match(SCOPE_JUMP) ? this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR) : this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);
|
| },
|
| SCOPE_NAME: 'style-scope'
|
| };
|
| var SCOPE_NAME = api.SCOPE_NAME;
|
| -var SCOPE_ROOT_SELECTOR = ':not([' + SCOPE_NAME + '])' + ':not(.' + SCOPE_NAME + ')';
|
| +var SCOPE_DOC_SELECTOR = ':not([' + SCOPE_NAME + '])' + ':not(.' + SCOPE_NAME + ')';
|
| var COMPLEX_SELECTOR_SEP = ',';
|
| var SIMPLE_SELECTOR_SEP = /(^|[\s>+~]+)([^\s>+~]+)/g;
|
| var HOST = ':host';
|
| +var ROOT = ':root';
|
| var HOST_PAREN = /(\:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/g;
|
| +var HOST_CONTEXT = ':host-context';
|
| +var HOST_CONTEXT_PAREN = /(.*)(?:\:host-context)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))(.*)/;
|
| var CONTENT = '::content';
|
| var SCOPE_JUMP = /\:\:content|\:\:shadow|\/deep\//;
|
| var CSS_CLASS_PREFIX = '.';
|
| @@ -2296,6 +2435,7 @@ return mo;
|
| });
|
| }());
|
| Polymer.StyleProperties = function () {
|
| +'use strict';
|
| var nativeShadow = Polymer.Settings.useNativeShadow;
|
| var matchesSelector = Polymer.DomApi.matchesSelector;
|
| var styleUtil = Polymer.StyleUtil;
|
| @@ -2362,6 +2502,10 @@ collectPropertiesInCssText: function (cssText, props) {
|
| var m;
|
| while (m = this.rx.VAR_CAPTURE.exec(cssText)) {
|
| props[m[1]] = true;
|
| +var def = m[2];
|
| +if (def && def.match(this.rx.IS_VAR)) {
|
| +props[def] = true;
|
| +}
|
| }
|
| },
|
| reify: function (props) {
|
| @@ -2461,27 +2605,29 @@ return props;
|
| },
|
| transformStyles: function (element, properties, scopeSelector) {
|
| var self = this;
|
| -var hostRx = new RegExp(this.rx.HOST_PREFIX + element.is + this.rx.HOST_SUFFIX);
|
| +var hostSelector = styleTransformer._calcHostScope(element.is, element.extends);
|
| +var rxHostSelector = element.extends ? '\\' + hostSelector.slice(0, -1) + '\\]' : hostSelector;
|
| +var hostRx = new RegExp(this.rx.HOST_PREFIX + rxHostSelector + this.rx.HOST_SUFFIX);
|
| return styleTransformer.elementStyles(element, function (rule) {
|
| self.applyProperties(rule, properties);
|
| if (rule.cssText && !nativeShadow) {
|
| -self._scopeSelector(rule, hostRx, element.is, element._scopeCssViaAttr, scopeSelector);
|
| +self._scopeSelector(rule, hostRx, hostSelector, element._scopeCssViaAttr, scopeSelector);
|
| }
|
| });
|
| },
|
| -_scopeSelector: function (rule, hostRx, is, viaAttr, scopeId) {
|
| +_scopeSelector: function (rule, hostRx, hostSelector, viaAttr, scopeId) {
|
| rule.transformedSelector = rule.transformedSelector || rule.selector;
|
| var selector = rule.transformedSelector;
|
| var scope = viaAttr ? '[' + styleTransformer.SCOPE_NAME + '~=' + scopeId + ']' : '.' + scopeId;
|
| var parts = selector.split(',');
|
| for (var i = 0, l = parts.length, p; i < l && (p = parts[i]); i++) {
|
| -parts[i] = p.match(hostRx) ? p.replace(is, is + scope) : scope + ' ' + p;
|
| +parts[i] = p.match(hostRx) ? p.replace(hostSelector, hostSelector + scope) : scope + ' ' + p;
|
| }
|
| rule.selector = parts.join(',');
|
| },
|
| applyElementScopeSelector: function (element, selector, old, viaAttr) {
|
| var c = viaAttr ? element.getAttribute(styleTransformer.SCOPE_NAME) : element.className;
|
| -v = old ? c.replace(old, selector) : (c ? c + ' ' : '') + this.XSCOPE_NAME + ' ' + selector;
|
| +var v = old ? c.replace(old, selector) : (c ? c + ' ' : '') + this.XSCOPE_NAME + ' ' + selector;
|
| if (c !== v) {
|
| if (viaAttr) {
|
| element.setAttribute(styleTransformer.SCOPE_NAME, v);
|
| @@ -2495,7 +2641,7 @@ var cssText = style ? style.textContent || '' : this.transformStyles(element, pr
|
| var s = element._customStyle;
|
| if (s && !nativeShadow && s !== style) {
|
| s._useCount--;
|
| -if (s._useCount <= 0) {
|
| +if (s._useCount <= 0 && s.parentNode) {
|
| s.parentNode.removeChild(s);
|
| }
|
| }
|
| @@ -2516,13 +2662,23 @@ element._customStyle = style;
|
| }
|
| return style;
|
| },
|
| +mixinCustomStyle: function (props, customStyle) {
|
| +var v;
|
| +for (var i in customStyle) {
|
| +v = customStyle[i];
|
| +if (v || v === 0) {
|
| +props[i] = v;
|
| +}
|
| +}
|
| +},
|
| rx: {
|
| -VAR_ASSIGN: /(?:^|;\s*)(--[^\:;]*?):\s*?(?:([^;{]*?)|{([^}]*)})(?=;)/gim,
|
| -MIXIN_MATCH: /(?:^|\W+)@apply[\s]*\(([^)]*)\);?/im,
|
| +VAR_ASSIGN: /(?:^|[;\n]\s*)(--[\w-]*?):\s*?(?:([^;{]*?)|{([^}]*)})(?:(?=[;\n])|$)/gim,
|
| +MIXIN_MATCH: /(?:^|\W+)@apply[\s]*\(([^)]*)\)/im,
|
| VAR_MATCH: /(^|\W+)var\([\s]*([^,)]*)[\s]*,?[\s]*((?:[^,)]*)|(?:[^;]*\([^;)]*\)))[\s]*?\)/gim,
|
| VAR_CAPTURE: /\([\s]*(--[^,\s)]*)(?:,[\s]*(--[^,\s)]*))?(?:\)|,)/gim,
|
| +IS_VAR: /^--/,
|
| BRACKETED: /\{[^}]*\}/g,
|
| -HOST_PREFIX: '(?:^|[^.])',
|
| +HOST_PREFIX: '(?:^|[^.#[:])',
|
| HOST_SUFFIX: '($|[.:[\\s>+~])'
|
| },
|
| HOST_SELECTORS: [':host'],
|
| @@ -2535,35 +2691,6 @@ var v = 1 << n % 32;
|
| bits[o] = (bits[o] || 0) | v;
|
| }
|
| }();
|
| -Polymer.StyleDefaults = function () {
|
| -var styleProperties = Polymer.StyleProperties;
|
| -var styleUtil = Polymer.StyleUtil;
|
| -var style = document.createElement('style');
|
| -var api = {
|
| -style: style,
|
| -_styles: [style],
|
| -_properties: null,
|
| -applyCss: function (cssText) {
|
| -this.style.textContent += cssText;
|
| -styleUtil.clearStyleRules(this.style);
|
| -this._properties = null;
|
| -},
|
| -get _styleProperties() {
|
| -if (!this._properties) {
|
| -styleProperties.decorateStyles(this._styles);
|
| -this._styles._scopeStyleProperties = null;
|
| -this._properties = styleProperties.scopePropertiesFromStyles(this._styles);
|
| -}
|
| -return this._properties;
|
| -},
|
| -_needsStyleProperties: function () {
|
| -},
|
| -_computeStyleProperties: function () {
|
| -return this._styleProperties;
|
| -}
|
| -};
|
| -return api;
|
| -}();
|
| (function () {
|
| Polymer.StyleCache = function () {
|
| this.cache = {};
|
| @@ -2594,8 +2721,10 @@ clear: function () {
|
| this.cache = {};
|
| },
|
| _objectsEqual: function (target, source) {
|
| +var t, s;
|
| for (var i in target) {
|
| -if (target[i] !== source[i]) {
|
| +t = target[i], s = source[i];
|
| +if (!(typeof t === 'object' && t ? this._objectsStrictlyEqual(t, s) : t === s)) {
|
| return false;
|
| }
|
| }
|
| @@ -2603,10 +2732,57 @@ if (Array.isArray(target)) {
|
| return target.length === source.length;
|
| }
|
| return true;
|
| +},
|
| +_objectsStrictlyEqual: function (target, source) {
|
| +return this._objectsEqual(target, source) && this._objectsEqual(source, target);
|
| }
|
| };
|
| }());
|
| +Polymer.StyleDefaults = function () {
|
| +var styleProperties = Polymer.StyleProperties;
|
| +var styleUtil = Polymer.StyleUtil;
|
| +var StyleCache = Polymer.StyleCache;
|
| +var api = {
|
| +_styles: [],
|
| +_properties: null,
|
| +customStyle: {},
|
| +_styleCache: new StyleCache(),
|
| +addStyle: function (style) {
|
| +this._styles.push(style);
|
| +this._properties = null;
|
| +},
|
| +get _styleProperties() {
|
| +if (!this._properties) {
|
| +styleProperties.decorateStyles(this._styles);
|
| +this._styles._scopeStyleProperties = null;
|
| +this._properties = styleProperties.scopePropertiesFromStyles(this._styles);
|
| +styleProperties.mixinCustomStyle(this._properties, this.customStyle);
|
| +styleProperties.reify(this._properties);
|
| +}
|
| +return this._properties;
|
| +},
|
| +_needsStyleProperties: function () {
|
| +},
|
| +_computeStyleProperties: function () {
|
| +return this._styleProperties;
|
| +},
|
| +updateStyles: function (properties) {
|
| +this._properties = null;
|
| +if (properties) {
|
| +Polymer.Base.mixin(this.customStyle, properties);
|
| +}
|
| +this._styleCache.clear();
|
| +for (var i = 0, s; i < this._styles.length; i++) {
|
| +s = this._styles[i];
|
| +s = s.__importElement || s;
|
| +s._apply();
|
| +}
|
| +}
|
| +};
|
| +return api;
|
| +}();
|
| (function () {
|
| +'use strict';
|
| var serializeValueToAttribute = Polymer.Base.serializeValueToAttribute;
|
| var propertyUtils = Polymer.StyleProperties;
|
| var styleTransformer = Polymer.StyleTransformer;
|
| @@ -2634,6 +2810,7 @@ if (!scope._styleCache) {
|
| scope._styleCache = new Polymer.StyleCache();
|
| }
|
| var scopeData = propertyUtils.propertyDataFromStyles(scope._styles, this);
|
| +scopeData.key.customStyle = this.customStyle;
|
| info = scope._styleCache.retrieve(this.is, scopeData.key, this._styles);
|
| var scopeCached = Boolean(info);
|
| if (scopeCached) {
|
| @@ -2646,17 +2823,16 @@ if (!scopeCached) {
|
| info = styleCache.retrieve(this.is, this._ownStyleProperties, this._styles);
|
| }
|
| var globalCached = Boolean(info) && !scopeCached;
|
| -style = this._applyStyleProperties(info);
|
| +var style = this._applyStyleProperties(info);
|
| if (!scopeCached) {
|
| -var cacheableStyle = style;
|
| -if (nativeShadow) {
|
| -cacheableStyle = style.cloneNode ? style.cloneNode(true) : Object.create(style || null);
|
| -}
|
| +style = style && nativeShadow ? style.cloneNode(true) : style;
|
| info = {
|
| -style: cacheableStyle,
|
| +style: style,
|
| _scopeSelector: this._scopeSelector,
|
| _styleProperties: this._styleProperties
|
| };
|
| +scopeData.key.customStyle = {};
|
| +this.mixin(scopeData.key.customStyle, this.customStyle);
|
| scope._styleCache.store(this.is, info, scopeData.key, this._styles);
|
| if (!globalCached) {
|
| styleCache.store(this.is, Object.create(info), this._ownStyleProperties, this._styles);
|
| @@ -2673,7 +2849,7 @@ this.mixin(props, propertyUtils.hostPropertiesFromStyles(this._styles));
|
| scopeProps = scopeProps || propertyUtils.propertyDataFromStyles(scope._styles, this).properties;
|
| this.mixin(props, scopeProps);
|
| this.mixin(props, propertyUtils.scopePropertiesFromStyles(this._styles));
|
| -this.mixin(props, this.customStyle);
|
| +propertyUtils.mixinCustomStyle(props, this.customStyle);
|
| propertyUtils.reify(props);
|
| this._styleProperties = props;
|
| },
|
| @@ -2689,11 +2865,11 @@ _scopeCount: 0,
|
| _applyStyleProperties: function (info) {
|
| var oldScopeSelector = this._scopeSelector;
|
| this._scopeSelector = info ? info._scopeSelector : this.is + '-' + this.__proto__._scopeCount++;
|
| -style = propertyUtils.applyElementStyle(this, this._styleProperties, this._scopeSelector, info && info.style);
|
| -if ((style || oldScopeSelector) && !nativeShadow) {
|
| +var style = propertyUtils.applyElementStyle(this, this._styleProperties, this._scopeSelector, info && info.style);
|
| +if (!nativeShadow) {
|
| propertyUtils.applyElementScopeSelector(this, this._scopeSelector, oldScopeSelector, this._scopeCssViaAttr);
|
| }
|
| -return style || {};
|
| +return style;
|
| },
|
| serializeValueToAttribute: function (value, attribute, node) {
|
| node = node || this;
|
| @@ -2712,8 +2888,11 @@ selector += (selector ? ' ' : '') + SCOPE_NAME + ' ' + this.is + (element._scope
|
| }
|
| return selector;
|
| },
|
| -updateStyles: function () {
|
| +updateStyles: function (properties) {
|
| if (this.isAttached) {
|
| +if (properties) {
|
| +this.mixin(this.customStyle, properties);
|
| +}
|
| if (this._needsStyleProperties()) {
|
| this._updateStyleProperties();
|
| } else {
|
| @@ -2737,8 +2916,8 @@ c.updateStyles();
|
| }
|
| }
|
| });
|
| -Polymer.updateStyles = function () {
|
| -styleDefaults._styleCache.clear();
|
| +Polymer.updateStyles = function (properties) {
|
| +styleDefaults.updateStyles(properties);
|
| Polymer.Base._updateRootStyles(document);
|
| };
|
| var styleCache = new Polymer.StyleCache();
|
| @@ -2790,48 +2969,47 @@ var nativeShadow = Polymer.Settings.useNativeShadow;
|
| var propertyUtils = Polymer.StyleProperties;
|
| var styleUtil = Polymer.StyleUtil;
|
| var styleDefaults = Polymer.StyleDefaults;
|
| +var styleTransformer = Polymer.StyleTransformer;
|
| Polymer({
|
| is: 'custom-style',
|
| extends: 'style',
|
| created: function () {
|
| -this._appliesToDocument = this.parentNode.localName !== 'dom-module';
|
| -if (this._appliesToDocument) {
|
| +this._tryApply();
|
| +},
|
| +attached: function () {
|
| +this._tryApply();
|
| +},
|
| +_tryApply: function () {
|
| +if (!this._appliesToDocument) {
|
| +if (this.parentNode && this.parentNode.localName !== 'dom-module') {
|
| +this._appliesToDocument = true;
|
| var e = this.__appliedElement || this;
|
| -var rules = styleUtil.rulesForStyle(e);
|
| -propertyUtils.decorateStyles([e]);
|
| -this._rulesToDefaultProperties(rules);
|
| -this.async(this._applyStyle);
|
| +styleDefaults.addStyle(e);
|
| +if (e.textContent) {
|
| +this._apply();
|
| +} else {
|
| +var observer = new MutationObserver(function () {
|
| +observer.disconnect();
|
| +this._apply();
|
| +}.bind(this));
|
| +observer.observe(e, { childList: true });
|
| +}
|
| +}
|
| }
|
| },
|
| -_applyStyle: function () {
|
| +_apply: function () {
|
| var e = this.__appliedElement || this;
|
| this._computeStyleProperties();
|
| var props = this._styleProperties;
|
| var self = this;
|
| e.textContent = styleUtil.toCssText(styleUtil.rulesForStyle(e), function (rule) {
|
| -if (rule.selector === ':root') {
|
| -rule.selector = 'body';
|
| -}
|
| var css = rule.cssText = rule.parsedCssText;
|
| if (rule.propertyInfo && rule.propertyInfo.cssText) {
|
| css = css.replace(propertyUtils.rx.VAR_ASSIGN, '');
|
| rule.cssText = propertyUtils.valueForProperties(css, props);
|
| }
|
| -if (!nativeShadow) {
|
| -Polymer.StyleTransformer.rootRule(rule);
|
| -}
|
| +styleTransformer.documentRule(rule);
|
| });
|
| -},
|
| -_rulesToDefaultProperties: function (rules) {
|
| -styleUtil.forEachStyleRule(rules, function (rule) {
|
| -if (!rule.propertyInfo.properties) {
|
| -rule.cssText = '';
|
| -}
|
| -});
|
| -var cssText = styleUtil.parser.stringify(rules, true);
|
| -if (cssText) {
|
| -styleDefaults.applyCss(cssText);
|
| -}
|
| }
|
| });
|
| }());
|
| @@ -2900,6 +3078,9 @@ var parentProps = archetype._parentProps;
|
| for (var prop in parentProps) {
|
| archetype._addPropertyEffect(prop, 'function', this._createHostPropEffector(prop));
|
| }
|
| +for (var prop in this._instanceProps) {
|
| +archetype._addPropertyEffect(prop, 'function', this._createInstancePropEffector(prop));
|
| +}
|
| },
|
| _customPrepAnnotations: function (archetype, template) {
|
| archetype._template = template;
|
| @@ -2958,18 +3139,27 @@ return function (source, value) {
|
| this.dataHost['_parent_' + prop] = value;
|
| };
|
| },
|
| +_createInstancePropEffector: function (prop) {
|
| +return function (source, value, old, fromAbove) {
|
| +if (!fromAbove) {
|
| +this.dataHost._forwardInstanceProp(this, prop, value);
|
| +}
|
| +};
|
| +},
|
| _extendTemplate: function (template, proto) {
|
| Object.getOwnPropertyNames(proto).forEach(function (n) {
|
| var val = template[n];
|
| var pd = Object.getOwnPropertyDescriptor(proto, n);
|
| Object.defineProperty(template, n, pd);
|
| if (val !== undefined) {
|
| -template._propertySet(n, val);
|
| +template._propertySetter(n, val);
|
| }
|
| });
|
| },
|
| _forwardInstancePath: function (inst, path, value) {
|
| },
|
| +_forwardInstanceProp: function (inst, prop, value) {
|
| +},
|
| _notifyPathImpl: function (path, value) {
|
| var dataHost = this.dataHost;
|
| var dot = path.indexOf('.');
|
| @@ -2992,6 +3182,7 @@ this._rootDataHost = host._getRootDataHost();
|
| this._setupConfigure(model);
|
| this._pushHost(host);
|
| this.root = this.instanceTemplate(this._template);
|
| +this.root.__noContent = !this._notes._hasContent;
|
| this.root.__styleScoped = true;
|
| this._popHost();
|
| this._marshalAnnotatedNodes();
|
| @@ -3096,8 +3287,17 @@ return this.pmap[item];
|
| getKeys: function () {
|
| return Object.keys(this.store);
|
| },
|
| -setItem: function (key, value) {
|
| -this.store[key] = value;
|
| +setItem: function (key, item) {
|
| +var old = this.store[key];
|
| +if (old) {
|
| +this._removeFromMap(old);
|
| +}
|
| +if (item && typeof item == 'object') {
|
| +this.omap.set(item, key);
|
| +} else {
|
| +this.pmap[item] = key;
|
| +}
|
| +this.store[key] = item;
|
| },
|
| getItem: function (key) {
|
| return this.store[key];
|
| @@ -3109,7 +3309,7 @@ items.push(store[key]);
|
| }
|
| return items;
|
| },
|
| -applySplices: function (splices) {
|
| +_applySplices: function (splices) {
|
| var keySplices = [];
|
| for (var i = 0; i < splices.length; i++) {
|
| var j, o, key, s = splices[i];
|
| @@ -3138,6 +3338,10 @@ return keySplices;
|
| Polymer.Collection.get = function (userArray) {
|
| return Polymer._collections.get(userArray) || new Polymer.Collection(userArray);
|
| };
|
| +Polymer.Collection.applySplices = function (userArray, splices) {
|
| +var coll = Polymer._collections.get(userArray);
|
| +return coll ? coll._applySplices(splices) : null;
|
| +};
|
| Polymer({
|
| is: 'dom-repeat',
|
| extends: 'template',
|
| @@ -3255,7 +3459,7 @@ return;
|
| },
|
| render: function () {
|
| this._fullRefresh = true;
|
| -this.debounce('render', this._render);
|
| +this._debounceTemplate(this._render);
|
| this._flushTemplates();
|
| },
|
| _render: function () {
|
| @@ -3287,9 +3491,9 @@ rowForKey[key] = i;
|
| if (!row) {
|
| this.rows.push(row = this._insertRow(i, null, item));
|
| }
|
| -row[this.as] = item;
|
| -row.__key__ = key;
|
| -row[this.indexAs] = i;
|
| +row.__setProperty(this.as, item, true);
|
| +row.__setProperty('__key__', key, true);
|
| +row.__setProperty(this.indexAs, i, true);
|
| }
|
| for (; i < this.rows.length; i++) {
|
| this._detachRow(i);
|
| @@ -3454,16 +3658,26 @@ c._hideTemplateChildren = hidden;
|
| }
|
| }
|
| },
|
| +_forwardInstanceProp: function (row, prop, value) {
|
| +if (prop == this.as) {
|
| +var idx;
|
| +if (this._sortFn || this._filterFn) {
|
| +idx = this.items.indexOf(this.collection.getItem(row.__key__));
|
| +} else {
|
| +idx = row[this.indexAs];
|
| +}
|
| +this.set('items.' + idx, value);
|
| +}
|
| +},
|
| _forwardInstancePath: function (row, path, value) {
|
| if (path.indexOf(this.as + '.') === 0) {
|
| this.notifyPath('items.' + row.__key__ + '.' + path.slice(this.as.length + 1), value);
|
| -return true;
|
| }
|
| },
|
| _forwardParentProp: function (prop, value) {
|
| if (this.rows) {
|
| this.rows.forEach(function (row) {
|
| -row[prop] = value;
|
| +row.__setProperty(prop, value, true);
|
| }, this);
|
| }
|
| },
|
| @@ -3485,7 +3699,7 @@ if (dot >= 0) {
|
| path = this.as + '.' + path.substring(dot + 1);
|
| row.notifyPath(path, value, true);
|
| } else {
|
| -row[this.as] = value;
|
| +row.__setProperty(this.as, value, true);
|
| }
|
| }
|
| }
|
| @@ -3567,8 +3781,10 @@ if (this.multi) {
|
| var scol = Polymer.Collection.get(this.selected);
|
| var skey = scol.getKey(item);
|
| if (skey >= 0) {
|
| +if (this.toggle) {
|
| this.deselect(item);
|
| -} else if (this.toggle) {
|
| +}
|
| +} else {
|
| this.push('selected', item);
|
| this.async(function () {
|
| skey = scol.getKey(item);
|
| @@ -3591,15 +3807,16 @@ extends: 'template',
|
| properties: {
|
| 'if': {
|
| type: Boolean,
|
| -value: false
|
| +value: false,
|
| +observer: '_queueRender'
|
| },
|
| restamp: {
|
| type: Boolean,
|
| -value: false
|
| +value: false,
|
| +observer: '_queueRender'
|
| }
|
| },
|
| behaviors: [Polymer.Templatizer],
|
| -observers: ['_queueRender(if, restamp)'],
|
| _queueRender: function () {
|
| this._debounceTemplate(this._render);
|
| },
|
|
|