mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update polymer
This commit is contained in:
parent
6825ae319e
commit
2d53ff29c5
106 changed files with 3070 additions and 1567 deletions
|
@ -270,61 +270,6 @@ return currentValue === previousValue;
|
|||
};
|
||||
return new ArraySplice();
|
||||
}();
|
||||
Polymer.EventApi = function () {
|
||||
var Settings = Polymer.Settings;
|
||||
var EventApi = function (event) {
|
||||
this.event = event;
|
||||
};
|
||||
if (Settings.useShadow) {
|
||||
EventApi.prototype = {
|
||||
get rootTarget() {
|
||||
return this.event.path[0];
|
||||
},
|
||||
get localTarget() {
|
||||
return this.event.target;
|
||||
},
|
||||
get path() {
|
||||
return this.event.path;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
EventApi.prototype = {
|
||||
get rootTarget() {
|
||||
return this.event.target;
|
||||
},
|
||||
get localTarget() {
|
||||
var current = this.event.currentTarget;
|
||||
var currentRoot = current && Polymer.dom(current).getOwnerRoot();
|
||||
var p$ = this.path;
|
||||
for (var i = 0; i < p$.length; i++) {
|
||||
if (Polymer.dom(p$[i]).getOwnerRoot() === currentRoot) {
|
||||
return p$[i];
|
||||
}
|
||||
}
|
||||
},
|
||||
get path() {
|
||||
if (!this.event._path) {
|
||||
var path = [];
|
||||
var o = this.rootTarget;
|
||||
while (o) {
|
||||
path.push(o);
|
||||
o = Polymer.dom(o).parentNode || o.host;
|
||||
}
|
||||
path.push(window);
|
||||
this.event._path = path;
|
||||
}
|
||||
return this.event._path;
|
||||
}
|
||||
};
|
||||
}
|
||||
var factory = function (event) {
|
||||
if (!event.__eventApi) {
|
||||
event.__eventApi = new EventApi(event);
|
||||
}
|
||||
return event.__eventApi;
|
||||
};
|
||||
return { factory: factory };
|
||||
}();
|
||||
Polymer.domInnerHTML = function () {
|
||||
var escapeAttrRegExp = /[&\u00A0"]/g;
|
||||
var escapeDataRegExp = /[&\u00A0<>]/g;
|
||||
|
@ -463,7 +408,7 @@ insertBefore: function (node, ref_node) {
|
|||
return this._addNode(node, ref_node);
|
||||
},
|
||||
_addNode: function (node, ref_node) {
|
||||
this._removeNodeFromHost(node, true);
|
||||
this._removeNodeFromParent(node);
|
||||
var addedInsertionPoint;
|
||||
var root = this.getOwnerRoot();
|
||||
if (root) {
|
||||
|
@ -495,6 +440,7 @@ nativeAppendChild.call(container, node);
|
|||
if (addedInsertionPoint) {
|
||||
this._updateInsertionPoints(root.host);
|
||||
}
|
||||
this.notifyObserver();
|
||||
return node;
|
||||
},
|
||||
removeChild: function (node) {
|
||||
|
@ -509,6 +455,7 @@ removeFromComposedParent(container, node);
|
|||
nativeRemoveChild.call(container, node);
|
||||
}
|
||||
}
|
||||
this.notifyObserver();
|
||||
return node;
|
||||
},
|
||||
replaceChild: function (node, ref_node) {
|
||||
|
@ -601,6 +548,13 @@ return Boolean(node._lightChildren !== undefined);
|
|||
_parentNeedsDistribution: function (parent) {
|
||||
return parent && parent.shadyRoot && hasInsertionPoint(parent.shadyRoot);
|
||||
},
|
||||
_removeNodeFromParent: function (node) {
|
||||
var parent = node._lightParent || node.parentNode;
|
||||
if (parent && hasDomApi(parent)) {
|
||||
factory(parent).notifyObserver();
|
||||
}
|
||||
this._removeNodeFromHost(node, true);
|
||||
},
|
||||
_removeNodeFromHost: function (node, ensureComposedRemoval) {
|
||||
var hostNeedsDist;
|
||||
var root;
|
||||
|
@ -612,7 +566,7 @@ if (root) {
|
|||
root.host._elementRemove(node);
|
||||
hostNeedsDist = this._removeDistributedChildren(root, node);
|
||||
}
|
||||
this._removeLogicalInfo(node, node._lightParent);
|
||||
this._removeLogicalInfo(node, parent);
|
||||
}
|
||||
this._removeOwnerShadyRoot(node);
|
||||
if (root && hostNeedsDist) {
|
||||
|
@ -731,24 +685,29 @@ getDistributedNodes: function () {
|
|||
return this.node._distributedNodes || [];
|
||||
},
|
||||
queryDistributedElements: function (selector) {
|
||||
var c$ = this.childNodes;
|
||||
var c$ = this.getEffectiveChildNodes();
|
||||
var list = [];
|
||||
this._distributedFilter(selector, c$, list);
|
||||
for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
|
||||
if (c.localName === CONTENT) {
|
||||
this._distributedFilter(selector, factory(c).getDistributedNodes(), list);
|
||||
if (c.nodeType === Node.ELEMENT_NODE && matchesSelector.call(c, selector)) {
|
||||
list.push(c);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
},
|
||||
_distributedFilter: function (selector, list, results) {
|
||||
results = results || [];
|
||||
for (var i = 0, l = list.length, d; i < l && (d = list[i]); i++) {
|
||||
if (d.nodeType === Node.ELEMENT_NODE && d.localName !== CONTENT && matchesSelector.call(d, selector)) {
|
||||
results.push(d);
|
||||
getEffectiveChildNodes: function () {
|
||||
var list = [];
|
||||
var c$ = this.childNodes;
|
||||
for (var i = 0, l = c$.length, c; i < l && (c = c$[i]); i++) {
|
||||
if (c.localName === CONTENT) {
|
||||
var d$ = factory(c).getDistributedNodes();
|
||||
for (var j = 0; j < d$.length; j++) {
|
||||
list.push(d$[j]);
|
||||
}
|
||||
} else {
|
||||
list.push(c);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
return list;
|
||||
},
|
||||
_clear: function () {
|
||||
while (this.childNodes.length) {
|
||||
|
@ -792,36 +751,24 @@ d.appendChild(nc);
|
|||
}
|
||||
}
|
||||
return n;
|
||||
},
|
||||
observeNodes: function (callback) {
|
||||
if (callback) {
|
||||
if (!this.observer) {
|
||||
this.observer = this.node.localName === CONTENT ? new DomApi.DistributedNodesObserver(this) : new DomApi.EffectiveNodesObserver(this);
|
||||
}
|
||||
};
|
||||
Object.defineProperty(DomApi.prototype, 'classList', {
|
||||
get: function () {
|
||||
if (!this._classList) {
|
||||
this._classList = new DomApi.ClassList(this);
|
||||
return this.observer.addListener(callback);
|
||||
}
|
||||
return this._classList;
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
DomApi.ClassList = function (host) {
|
||||
this.domApi = host;
|
||||
this.node = host.node;
|
||||
};
|
||||
DomApi.ClassList.prototype = {
|
||||
add: function () {
|
||||
this.node.classList.add.apply(this.node.classList, arguments);
|
||||
this.domApi._distributeParent();
|
||||
unobserveNodes: function (handle) {
|
||||
if (this.observer) {
|
||||
this.observer.removeListener(handle);
|
||||
}
|
||||
},
|
||||
remove: function () {
|
||||
this.node.classList.remove.apply(this.node.classList, arguments);
|
||||
this.domApi._distributeParent();
|
||||
},
|
||||
toggle: function () {
|
||||
this.node.classList.toggle.apply(this.node.classList, arguments);
|
||||
this.domApi._distributeParent();
|
||||
},
|
||||
contains: function () {
|
||||
return this.node.classList.contains.apply(this.node.classList, arguments);
|
||||
notifyObserver: function () {
|
||||
if (this.observer) {
|
||||
this.observer.notify();
|
||||
}
|
||||
}
|
||||
};
|
||||
if (!Settings.useShadow) {
|
||||
|
@ -1003,6 +950,17 @@ return n$ ? Array.prototype.slice.call(n$) : [];
|
|||
};
|
||||
DomApi.prototype._distributeParent = function () {
|
||||
};
|
||||
var nativeForwards = [
|
||||
'appendChild',
|
||||
'insertBefore',
|
||||
'removeChild',
|
||||
'replaceChild'
|
||||
];
|
||||
nativeForwards.forEach(function (forward) {
|
||||
DomApi.prototype[forward] = function () {
|
||||
return this.node[forward].apply(this.node, arguments);
|
||||
};
|
||||
});
|
||||
Object.defineProperties(DomApi.prototype, {
|
||||
childNodes: {
|
||||
get: function () {
|
||||
|
@ -1056,13 +1014,17 @@ configurable: true
|
|||
});
|
||||
}
|
||||
var CONTENT = 'content';
|
||||
var factory = function (node, patch) {
|
||||
function factory(node, patch) {
|
||||
node = node || document;
|
||||
if (!node.__domApi) {
|
||||
node.__domApi = new DomApi(node, patch);
|
||||
}
|
||||
return node.__domApi;
|
||||
};
|
||||
}
|
||||
;
|
||||
function hasDomApi(node) {
|
||||
return Boolean(node.__domApi);
|
||||
}
|
||||
Polymer.dom = function (obj, patch) {
|
||||
if (obj instanceof Event) {
|
||||
return Polymer.EventApi.factory(obj);
|
||||
|
@ -1070,43 +1032,6 @@ return Polymer.EventApi.factory(obj);
|
|||
return factory(obj, patch);
|
||||
}
|
||||
};
|
||||
Polymer.Base.extend(Polymer.dom, {
|
||||
_flushGuard: 0,
|
||||
_FLUSH_MAX: 100,
|
||||
_needsTakeRecords: !Polymer.Settings.useNativeCustomElements,
|
||||
_debouncers: [],
|
||||
_finishDebouncer: null,
|
||||
flush: function () {
|
||||
for (var i = 0; i < this._debouncers.length; i++) {
|
||||
this._debouncers[i].complete();
|
||||
}
|
||||
if (this._finishDebouncer) {
|
||||
this._finishDebouncer.complete();
|
||||
}
|
||||
this._flushPolyfills();
|
||||
if (this._debouncers.length && this._flushGuard < this._FLUSH_MAX) {
|
||||
this._flushGuard++;
|
||||
this.flush();
|
||||
} else {
|
||||
if (this._flushGuard >= this._FLUSH_MAX) {
|
||||
console.warn('Polymer.dom.flush aborted. Flush may not be complete.');
|
||||
}
|
||||
this._flushGuard = 0;
|
||||
}
|
||||
},
|
||||
_flushPolyfills: function () {
|
||||
if (this._needsTakeRecords) {
|
||||
CustomElements.takeRecords();
|
||||
}
|
||||
},
|
||||
addDebouncer: function (debouncer) {
|
||||
this._debouncers.push(debouncer);
|
||||
this._finishDebouncer = Polymer.Debounce(this._finishDebouncer, this._finishFlush);
|
||||
},
|
||||
_finishFlush: function () {
|
||||
Polymer.dom._debouncers = [];
|
||||
}
|
||||
});
|
||||
function getLightChildren(node) {
|
||||
var children = node._lightChildren;
|
||||
return children ? children : node.childNodes;
|
||||
|
@ -1170,10 +1095,399 @@ saveLightChildrenIfNeeded: saveLightChildrenIfNeeded,
|
|||
matchesSelector: matchesSelector,
|
||||
hasInsertionPoint: hasInsertionPoint,
|
||||
ctor: DomApi,
|
||||
factory: factory
|
||||
factory: factory,
|
||||
hasDomApi: hasDomApi
|
||||
};
|
||||
}();
|
||||
Polymer.Base.extend(Polymer.dom, {
|
||||
_flushGuard: 0,
|
||||
_FLUSH_MAX: 100,
|
||||
_needsTakeRecords: !Polymer.Settings.useNativeCustomElements,
|
||||
_debouncers: [],
|
||||
_staticFlushList: [],
|
||||
_finishDebouncer: null,
|
||||
flush: function () {
|
||||
this._flushGuard = 0;
|
||||
this._prepareFlush();
|
||||
while (this._debouncers.length && this._flushGuard < this._FLUSH_MAX) {
|
||||
for (var i = 0; i < this._debouncers.length; i++) {
|
||||
this._debouncers[i].complete();
|
||||
}
|
||||
if (this._finishDebouncer) {
|
||||
this._finishDebouncer.complete();
|
||||
}
|
||||
this._prepareFlush();
|
||||
this._flushGuard++;
|
||||
}
|
||||
if (this._flushGuard >= this._FLUSH_MAX) {
|
||||
console.warn('Polymer.dom.flush aborted. Flush may not be complete.');
|
||||
}
|
||||
},
|
||||
_prepareFlush: function () {
|
||||
if (this._needsTakeRecords) {
|
||||
CustomElements.takeRecords();
|
||||
}
|
||||
for (var i = 0; i < this._staticFlushList.length; i++) {
|
||||
this._staticFlushList[i]();
|
||||
}
|
||||
},
|
||||
addStaticFlush: function (fn) {
|
||||
this._staticFlushList.push(fn);
|
||||
},
|
||||
removeStaticFlush: function (fn) {
|
||||
var i = this._staticFlushList.indexOf(fn);
|
||||
if (i >= 0) {
|
||||
this._staticFlushList.splice(i, 1);
|
||||
}
|
||||
},
|
||||
addDebouncer: function (debouncer) {
|
||||
this._debouncers.push(debouncer);
|
||||
this._finishDebouncer = Polymer.Debounce(this._finishDebouncer, this._finishFlush);
|
||||
},
|
||||
_finishFlush: function () {
|
||||
Polymer.dom._debouncers = [];
|
||||
}
|
||||
});
|
||||
Polymer.EventApi = function () {
|
||||
'use strict';
|
||||
var DomApi = Polymer.DomApi.ctor;
|
||||
var Settings = Polymer.Settings;
|
||||
DomApi.Event = function (event) {
|
||||
this.event = event;
|
||||
};
|
||||
if (Settings.useShadow) {
|
||||
DomApi.Event.prototype = {
|
||||
get rootTarget() {
|
||||
return this.event.path[0];
|
||||
},
|
||||
get localTarget() {
|
||||
return this.event.target;
|
||||
},
|
||||
get path() {
|
||||
return this.event.path;
|
||||
}
|
||||
};
|
||||
} else {
|
||||
DomApi.Event.prototype = {
|
||||
get rootTarget() {
|
||||
return this.event.target;
|
||||
},
|
||||
get localTarget() {
|
||||
var current = this.event.currentTarget;
|
||||
var currentRoot = current && Polymer.dom(current).getOwnerRoot();
|
||||
var p$ = this.path;
|
||||
for (var i = 0; i < p$.length; i++) {
|
||||
if (Polymer.dom(p$[i]).getOwnerRoot() === currentRoot) {
|
||||
return p$[i];
|
||||
}
|
||||
}
|
||||
},
|
||||
get path() {
|
||||
if (!this.event._path) {
|
||||
var path = [];
|
||||
var o = this.rootTarget;
|
||||
while (o) {
|
||||
path.push(o);
|
||||
o = Polymer.dom(o).parentNode || o.host;
|
||||
}
|
||||
path.push(window);
|
||||
this.event._path = path;
|
||||
}
|
||||
return this.event._path;
|
||||
}
|
||||
};
|
||||
}
|
||||
var factory = function (event) {
|
||||
if (!event.__eventApi) {
|
||||
event.__eventApi = new DomApi.Event(event);
|
||||
}
|
||||
return event.__eventApi;
|
||||
};
|
||||
return { factory: factory };
|
||||
}();
|
||||
(function () {
|
||||
'use strict';
|
||||
var DomApi = Polymer.DomApi.ctor;
|
||||
Object.defineProperty(DomApi.prototype, 'classList', {
|
||||
get: function () {
|
||||
if (!this._classList) {
|
||||
this._classList = new DomApi.ClassList(this);
|
||||
}
|
||||
return this._classList;
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
DomApi.ClassList = function (host) {
|
||||
this.domApi = host;
|
||||
this.node = host.node;
|
||||
};
|
||||
DomApi.ClassList.prototype = {
|
||||
add: function () {
|
||||
this.node.classList.add.apply(this.node.classList, arguments);
|
||||
this.domApi._distributeParent();
|
||||
},
|
||||
remove: function () {
|
||||
this.node.classList.remove.apply(this.node.classList, arguments);
|
||||
this.domApi._distributeParent();
|
||||
},
|
||||
toggle: function () {
|
||||
this.node.classList.toggle.apply(this.node.classList, arguments);
|
||||
this.domApi._distributeParent();
|
||||
},
|
||||
contains: function () {
|
||||
return this.node.classList.contains.apply(this.node.classList, arguments);
|
||||
}
|
||||
};
|
||||
}());
|
||||
(function () {
|
||||
'use strict';
|
||||
var DomApi = Polymer.DomApi.ctor;
|
||||
var Settings = Polymer.Settings;
|
||||
var hasDomApi = Polymer.DomApi.hasDomApi;
|
||||
DomApi.EffectiveNodesObserver = function (domApi) {
|
||||
this.domApi = domApi;
|
||||
this.node = this.domApi.node;
|
||||
this._listeners = [];
|
||||
};
|
||||
DomApi.EffectiveNodesObserver.prototype = {
|
||||
addListener: function (callback) {
|
||||
if (!this._isSetup) {
|
||||
this._setup();
|
||||
this._isSetup = true;
|
||||
}
|
||||
var listener = {
|
||||
fn: callback,
|
||||
_nodes: []
|
||||
};
|
||||
this._listeners.push(listener);
|
||||
this._scheduleNotify();
|
||||
return listener;
|
||||
},
|
||||
removeListener: function (handle) {
|
||||
var i = this._listeners.indexOf(handle);
|
||||
if (i >= 0) {
|
||||
this._listeners.splice(i, 1);
|
||||
handle._nodes = [];
|
||||
}
|
||||
if (!this._hasListeners()) {
|
||||
this._cleanup();
|
||||
this._isSetup = false;
|
||||
}
|
||||
},
|
||||
_setup: function () {
|
||||
this._observeContentElements(this.domApi.childNodes);
|
||||
},
|
||||
_cleanup: function () {
|
||||
this._unobserveContentElements(this.domApi.childNodes);
|
||||
},
|
||||
_hasListeners: function () {
|
||||
return Boolean(this._listeners.length);
|
||||
},
|
||||
_scheduleNotify: function () {
|
||||
if (this._debouncer) {
|
||||
this._debouncer.stop();
|
||||
}
|
||||
this._debouncer = Polymer.Debounce(this._debouncer, this._notify);
|
||||
this._debouncer.context = this;
|
||||
Polymer.dom.addDebouncer(this._debouncer);
|
||||
},
|
||||
notify: function () {
|
||||
if (this._hasListeners()) {
|
||||
this._scheduleNotify();
|
||||
}
|
||||
},
|
||||
_notify: function (mxns) {
|
||||
this._beforeCallListeners();
|
||||
this._callListeners();
|
||||
},
|
||||
_beforeCallListeners: function () {
|
||||
this._updateContentElements();
|
||||
},
|
||||
_updateContentElements: function () {
|
||||
this._observeContentElements(this.domApi.childNodes);
|
||||
},
|
||||
_observeContentElements: function (elements) {
|
||||
for (var i = 0, n; i < elements.length && (n = elements[i]); i++) {
|
||||
if (this._isContent(n)) {
|
||||
n.__observeNodesMap = n.__observeNodesMap || new WeakMap();
|
||||
if (!n.__observeNodesMap.has(this)) {
|
||||
n.__observeNodesMap.set(this, this._observeContent(n));
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
_observeContent: function (content) {
|
||||
var h = Polymer.dom(content).observeNodes(this._scheduleNotify.bind(this));
|
||||
h._avoidChangeCalculation = true;
|
||||
return h;
|
||||
},
|
||||
_unobserveContentElements: function (elements) {
|
||||
for (var i = 0, n, h; i < elements.length && (n = elements[i]); i++) {
|
||||
if (this._isContent(n)) {
|
||||
h = n.__observeNodesMap.get(this);
|
||||
if (h) {
|
||||
Polymer.dom(n).unobserveNodes(h);
|
||||
n.__observeNodesMap.delete(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
_isContent: function (node) {
|
||||
return node.localName === 'content';
|
||||
},
|
||||
_callListeners: function () {
|
||||
var o$ = this._listeners;
|
||||
var nodes = this._getEffectiveNodes();
|
||||
for (var i = 0, o; i < o$.length && (o = o$[i]); i++) {
|
||||
var info = this._generateListenerInfo(o, nodes);
|
||||
if (info || o._alwaysNotify) {
|
||||
this._callListener(o, info);
|
||||
}
|
||||
}
|
||||
},
|
||||
_getEffectiveNodes: function () {
|
||||
return this.domApi.getEffectiveChildNodes();
|
||||
},
|
||||
_generateListenerInfo: function (listener, newNodes) {
|
||||
if (listener._avoidChangeCalculation) {
|
||||
return true;
|
||||
}
|
||||
var oldNodes = listener._nodes;
|
||||
var info = {
|
||||
target: this.node,
|
||||
addedNodes: [],
|
||||
removedNodes: []
|
||||
};
|
||||
var splices = Polymer.ArraySplice.calculateSplices(newNodes, oldNodes);
|
||||
for (var i = 0, s; i < splices.length && (s = splices[i]); i++) {
|
||||
for (var j = 0, n; j < s.removed.length && (n = s.removed[j]); j++) {
|
||||
info.removedNodes.push(n);
|
||||
}
|
||||
}
|
||||
for (var i = 0, s; i < splices.length && (s = splices[i]); i++) {
|
||||
for (var j = s.index; j < s.index + s.addedCount; j++) {
|
||||
info.addedNodes.push(newNodes[j]);
|
||||
}
|
||||
}
|
||||
listener._nodes = newNodes;
|
||||
if (info.addedNodes.length || info.removedNodes.length) {
|
||||
return info;
|
||||
}
|
||||
},
|
||||
_callListener: function (listener, info) {
|
||||
return listener.fn.call(this.node, info);
|
||||
},
|
||||
enableShadowAttributeTracking: function () {
|
||||
}
|
||||
};
|
||||
if (Settings.useShadow) {
|
||||
var baseSetup = DomApi.EffectiveNodesObserver.prototype._setup;
|
||||
var baseCleanup = DomApi.EffectiveNodesObserver.prototype._cleanup;
|
||||
var beforeCallListeners = DomApi.EffectiveNodesObserver.prototype._beforeCallListeners;
|
||||
Polymer.Base.extend(DomApi.EffectiveNodesObserver.prototype, {
|
||||
_setup: function () {
|
||||
if (!this._observer) {
|
||||
var self = this;
|
||||
this._mutationHandler = function (mxns) {
|
||||
if (mxns && mxns.length) {
|
||||
self._scheduleNotify();
|
||||
}
|
||||
};
|
||||
this._observer = new MutationObserver(this._mutationHandler);
|
||||
this._boundFlush = this._flush.bind(this);
|
||||
Polymer.dom.addStaticFlush(this._boundFlush);
|
||||
this._observer.observe(this.node, { childList: true });
|
||||
}
|
||||
baseSetup.call(this);
|
||||
},
|
||||
_cleanup: function () {
|
||||
this._observer.disconnect();
|
||||
this._observer = null;
|
||||
this._mutationHandler = null;
|
||||
Polymer.dom.removeStaticFlush(this._boundFlush);
|
||||
baseCleanup.call(this);
|
||||
},
|
||||
_flush: function () {
|
||||
if (this._observer) {
|
||||
this._mutationHandler(this._observer.takeRecords());
|
||||
}
|
||||
},
|
||||
enableShadowAttributeTracking: function () {
|
||||
if (this._observer) {
|
||||
this._makeContentListenersAlwaysNotify();
|
||||
this._observer.disconnect();
|
||||
this._observer.observe(this.node, {
|
||||
childList: true,
|
||||
attributes: true,
|
||||
subtree: true
|
||||
});
|
||||
var root = this.domApi.getOwnerRoot();
|
||||
var host = root && root.host;
|
||||
if (host && Polymer.dom(host).observer) {
|
||||
Polymer.dom(host).observer.enableShadowAttributeTracking();
|
||||
}
|
||||
}
|
||||
},
|
||||
_makeContentListenersAlwaysNotify: function () {
|
||||
for (var i = 0, h; i < this._listeners.length; i++) {
|
||||
h = this._listeners[i];
|
||||
h._alwaysNotify = h._isContentListener;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}());
|
||||
(function () {
|
||||
'use strict';
|
||||
var DomApi = Polymer.DomApi.ctor;
|
||||
var Settings = Polymer.Settings;
|
||||
DomApi.DistributedNodesObserver = function (domApi) {
|
||||
DomApi.EffectiveNodesObserver.call(this, domApi);
|
||||
};
|
||||
DomApi.DistributedNodesObserver.prototype = Object.create(DomApi.EffectiveNodesObserver.prototype);
|
||||
Polymer.Base.extend(DomApi.DistributedNodesObserver.prototype, {
|
||||
_setup: function () {
|
||||
},
|
||||
_cleanup: function () {
|
||||
},
|
||||
_beforeCallListeners: function () {
|
||||
},
|
||||
_getEffectiveNodes: function () {
|
||||
return this.domApi.getDistributedNodes();
|
||||
}
|
||||
});
|
||||
if (Settings.useShadow) {
|
||||
Polymer.Base.extend(DomApi.DistributedNodesObserver.prototype, {
|
||||
_setup: function () {
|
||||
if (!this._observer) {
|
||||
var root = this.domApi.getOwnerRoot();
|
||||
var host = root && root.host;
|
||||
if (host) {
|
||||
this._observer = Polymer.dom(host).observeNodes(this._scheduleNotify.bind(this));
|
||||
this._observer._isContentListener = true;
|
||||
if (this._hasAttrSelect()) {
|
||||
Polymer.dom(host).observer.enableShadowAttributeTracking();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
_hasAttrSelect: function () {
|
||||
var select = this.node.getAttribute('select');
|
||||
return select && select.match(/[[.]+/);
|
||||
},
|
||||
_cleanup: function () {
|
||||
var root = this.domApi.getOwnerRoot();
|
||||
var host = root && root.host;
|
||||
if (host) {
|
||||
Polymer.dom(host).unobserveNodes(this._observer);
|
||||
}
|
||||
this._observer = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}());
|
||||
(function () {
|
||||
var hasDomApi = Polymer.DomApi.hasDomApi;
|
||||
Polymer.Base._addFeature({
|
||||
_prepShady: function () {
|
||||
this._useContent = this._useContent || Boolean(this._template);
|
||||
|
@ -1244,6 +1558,7 @@ if (this._useContent) {
|
|||
this.shadyRoot._distributionClean = true;
|
||||
if (hasInsertionPoint(this.shadyRoot)) {
|
||||
this._composeTree();
|
||||
notifyContentObservers(this.shadyRoot);
|
||||
} else {
|
||||
if (!this.shadyRoot._hasDistributed) {
|
||||
this.textContent = '';
|
||||
|
@ -1254,6 +1569,9 @@ var children = this._composeNode(this);
|
|||
this._updateChildNodes(this, children);
|
||||
}
|
||||
}
|
||||
if (!this.shadyRoot._hasDistributed) {
|
||||
notifyInitialDistribution(this);
|
||||
}
|
||||
this.shadyRoot._hasDistributed = true;
|
||||
}
|
||||
},
|
||||
|
@ -1471,6 +1789,19 @@ return host.domHost;
|
|||
}
|
||||
}
|
||||
}
|
||||
function notifyContentObservers(root) {
|
||||
for (var i = 0, c; i < root._insertionPoints.length; i++) {
|
||||
c = root._insertionPoints[i];
|
||||
if (hasDomApi(c)) {
|
||||
Polymer.dom(c).notifyObserver();
|
||||
}
|
||||
}
|
||||
}
|
||||
function notifyInitialDistribution(host) {
|
||||
if (hasDomApi(host)) {
|
||||
Polymer.dom(host).notifyObserver();
|
||||
}
|
||||
}
|
||||
var needsUpgrade = window.CustomElements && !CustomElements.useNative;
|
||||
function upgradeLightChildren(children) {
|
||||
if (needsUpgrade && children) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue