11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci(function() { 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Polymer('core-overlay-layer', { 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci publish: { 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci opened: false 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci openedChanged: function() { 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.classList.toggle('core-opened', this.opened); 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Adds an element to the overlay layer 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci addElement: function(element) { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!this.parentNode) { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci document.querySelector('body').appendChild(this); 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (element.parentNode !== this) { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__contents = []; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var ip$ = element.querySelectorAll('content'); 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var i=0, l=ip$.length, n; (i<l) && (n = ip$[i]); i++) { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.moveInsertedElements(n); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.cacheDomLocation(n); 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci n.parentNode.removeChild(n); 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__contents.push(n); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.cacheDomLocation(element); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.updateEventController(element); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var h = this.makeHost(); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci h.shadowRoot.appendChild(element); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__host = h; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci makeHost: function() { 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var h = document.createElement('overlay-host'); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci h.createShadowRoot(); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.appendChild(h); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return h; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci moveInsertedElements: function(insertionPoint) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var n$ = insertionPoint.getDistributedNodes(); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var parent = insertionPoint.parentNode; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci insertionPoint.__contents = []; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.cacheDomLocation(n); 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.updateEventController(n); 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci insertionPoint.__contents.push(n); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parent.appendChild(n); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateEventController: function(element) { 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.eventController = this.element.findController(element); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci /** 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Removes an element from the overlay layer 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci removeElement: function(element) { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.eventController = null; 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.replaceElement(element); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var h = element.__host; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (h) { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci h.parentNode.removeChild(h); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci replaceElement: function(element) { 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (element.__contents) { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var i=0, c$=element.__contents, c; (c=c$[i]); i++) { 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this.replaceElement(c); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__contents = null; 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (element.__parentNode) { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var n = element.__nextElementSibling && element.__nextElementSibling 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci === element.__parentNode ? element.__nextElementSibling : null; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__parentNode.insertBefore(element, n); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cacheDomLocation: function(element) { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__nextElementSibling = element.nextElementSibling; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci element.__parentNode = element.parentNode; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci})(); 85