| Index: third_party/polymer/components/core-overlay/core-overlay-layer.html
|
| diff --git a/third_party/polymer/components/core-overlay/core-overlay-layer.html b/third_party/polymer/components/core-overlay/core-overlay-layer.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c75ce3abd3ae78d7644937d0fb8119bdbffbdc4b
|
| --- /dev/null
|
| +++ b/third_party/polymer/components/core-overlay/core-overlay-layer.html
|
| @@ -0,0 +1,112 @@
|
| +<!--
|
| +Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
| +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
| +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
| +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
| +Code distributed by Google as part of the polymer project is also
|
| +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
| +-->
|
| +
|
| +<polymer-element name="core-overlay-layer">
|
| +<template>
|
| + <style>
|
| + :host {
|
| + position: fixed;
|
| + top: 0;
|
| + left: 0;
|
| + z-index: 1000;
|
| + display: none;
|
| + }
|
| +
|
| + :host(.core-opened) {
|
| + display: block;
|
| + }
|
| + </style>
|
| + <content></content>
|
| +</template>
|
| +<script>
|
| +(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;
|
| + }
|
| + });
|
| +
|
| +})();
|
| +</script>
|
| +</polymer-element>
|
|
|