Index: third_party/polymer/components-chromium/core-overlay/core-overlay-layer-extracted.js |
diff --git a/third_party/polymer/components-chromium/core-overlay/core-overlay-layer-extracted.js b/third_party/polymer/components-chromium/core-overlay/core-overlay-layer-extracted.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3f98964025494f12347b1eec06622269b5ee555f |
--- /dev/null |
+++ b/third_party/polymer/components-chromium/core-overlay/core-overlay-layer-extracted.js |
@@ -0,0 +1,84 @@ |
+ |
+(function() { |
+ |
+ Polymer('core-overlay-layer', { |
+ publish: { |
+ opened: false |
+ }, |
+ openedChanged: function() { |
+ this.classList.toggle('core-opened', this.opened); |
+ }, |
+ /** |
+ * Adds an element to the overlay layer |
+ */ |
+ addElement: function(element) { |
+ if (!this.parentNode) { |
+ document.querySelector('body').appendChild(this); |
+ } |
+ if (element.parentNode !== this) { |
+ element.__contents = []; |
+ var ip$ = element.querySelectorAll('content'); |
+ for (var i=0, l=ip$.length, n; (i<l) && (n = ip$[i]); i++) { |
+ this.moveInsertedElements(n); |
+ this.cacheDomLocation(n); |
+ n.parentNode.removeChild(n); |
+ element.__contents.push(n); |
+ } |
+ this.cacheDomLocation(element); |
+ this.updateEventController(element); |
+ var h = this.makeHost(); |
+ h.shadowRoot.appendChild(element); |
+ element.__host = h; |
+ } |
+ }, |
+ makeHost: function() { |
+ var h = document.createElement('overlay-host'); |
+ h.createShadowRoot(); |
+ this.appendChild(h); |
+ return h; |
+ }, |
+ moveInsertedElements: function(insertionPoint) { |
+ var n$ = insertionPoint.getDistributedNodes(); |
+ var parent = insertionPoint.parentNode; |
+ insertionPoint.__contents = []; |
+ for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) { |
+ this.cacheDomLocation(n); |
+ this.updateEventController(n); |
+ insertionPoint.__contents.push(n); |
+ parent.appendChild(n); |
+ } |
+ }, |
+ updateEventController: function(element) { |
+ element.eventController = this.element.findController(element); |
+ }, |
+ /** |
+ * Removes an element from the overlay layer |
+ */ |
+ removeElement: function(element) { |
+ element.eventController = null; |
+ this.replaceElement(element); |
+ var h = element.__host; |
+ if (h) { |
+ h.parentNode.removeChild(h); |
+ } |
+ }, |
+ replaceElement: function(element) { |
+ if (element.__contents) { |
+ for (var i=0, c$=element.__contents, c; (c=c$[i]); i++) { |
+ this.replaceElement(c); |
+ } |
+ element.__contents = null; |
+ } |
+ if (element.__parentNode) { |
+ var n = element.__nextElementSibling && element.__nextElementSibling |
+ === element.__parentNode ? element.__nextElementSibling : null; |
+ element.__parentNode.insertBefore(element, n); |
+ } |
+ }, |
+ cacheDomLocation: function(element) { |
+ element.__nextElementSibling = element.nextElementSibling; |
+ element.__parentNode = element.parentNode; |
+ } |
+ }); |
+ |
+})(); |