OLD | NEW |
| (Empty) |
1 | |
2 (function() { | |
3 | |
4 Polymer('core-overlay-layer', { | |
5 publish: { | |
6 opened: false | |
7 }, | |
8 openedChanged: function() { | |
9 this.classList.toggle('core-opened', this.opened); | |
10 }, | |
11 /** | |
12 * Adds an element to the overlay layer | |
13 */ | |
14 addElement: function(element) { | |
15 if (!this.parentNode) { | |
16 document.querySelector('body').appendChild(this); | |
17 } | |
18 if (element.parentNode !== this) { | |
19 element.__contents = []; | |
20 var ip$ = element.querySelectorAll('content'); | |
21 for (var i=0, l=ip$.length, n; (i<l) && (n = ip$[i]); i++) { | |
22 this.moveInsertedElements(n); | |
23 this.cacheDomLocation(n); | |
24 n.parentNode.removeChild(n); | |
25 element.__contents.push(n); | |
26 } | |
27 this.cacheDomLocation(element); | |
28 this.updateEventController(element); | |
29 var h = this.makeHost(); | |
30 h.shadowRoot.appendChild(element); | |
31 element.__host = h; | |
32 } | |
33 }, | |
34 makeHost: function() { | |
35 var h = document.createElement('overlay-host'); | |
36 h.createShadowRoot(); | |
37 this.appendChild(h); | |
38 return h; | |
39 }, | |
40 moveInsertedElements: function(insertionPoint) { | |
41 var n$ = insertionPoint.getDistributedNodes(); | |
42 var parent = insertionPoint.parentNode; | |
43 insertionPoint.__contents = []; | |
44 for (var i=0, l=n$.length, n; (i<l) && (n=n$[i]); i++) { | |
45 this.cacheDomLocation(n); | |
46 this.updateEventController(n); | |
47 insertionPoint.__contents.push(n); | |
48 parent.appendChild(n); | |
49 } | |
50 }, | |
51 updateEventController: function(element) { | |
52 element.eventController = this.element.findController(element); | |
53 }, | |
54 /** | |
55 * Removes an element from the overlay layer | |
56 */ | |
57 removeElement: function(element) { | |
58 element.eventController = null; | |
59 this.replaceElement(element); | |
60 var h = element.__host; | |
61 if (h) { | |
62 h.parentNode.removeChild(h); | |
63 } | |
64 }, | |
65 replaceElement: function(element) { | |
66 if (element.__contents) { | |
67 for (var i=0, c$=element.__contents, c; (c=c$[i]); i++) { | |
68 this.replaceElement(c); | |
69 } | |
70 element.__contents = null; | |
71 } | |
72 if (element.__parentNode) { | |
73 var n = element.__nextElementSibling && element.__nextElementSibling | |
74 === element.__parentNode ? element.__nextElementSibling : null; | |
75 element.__parentNode.insertBefore(element, n); | |
76 } | |
77 }, | |
78 cacheDomLocation: function(element) { | |
79 element.__nextElementSibling = element.nextElementSibling; | |
80 element.__parentNode = element.parentNode; | |
81 } | |
82 }); | |
83 | |
84 })(); | |
OLD | NEW |