Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: third_party/polymer/components/paper-shadow/paper-shadow.html

Issue 582873003: Polymer elements added to third_party/polymer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/polymer/components/paper-shadow/paper-shadow.html
diff --git a/third_party/polymer/components/paper-shadow/paper-shadow.html b/third_party/polymer/components/paper-shadow/paper-shadow.html
new file mode 100644
index 0000000000000000000000000000000000000000..6aa4d3b6844fc90456a7b681e43cff06562f49c6
--- /dev/null
+++ b/third_party/polymer/components/paper-shadow/paper-shadow.html
@@ -0,0 +1,213 @@
+<!--
+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
+-->
+
+<!--
+The `paper-shadow` element is a helper to add shadows to elements.
+Paper shadows are composed of two shadows on top of each other. We
+mimic this effect by using two elements on top of each other, each with a
+different drop shadow. You can apply the shadow to an element by assigning
+it as the target. If you do not specify a target, the shadow is applied to
+the `paper-shadow` element's parent element or shadow host element if its
+parent is a shadow root. Alternatively, you can use the CSS classes included
+by this element directly.
+
+Example:
+
+ <div id="myCard" class="card"></div>
+ <paper-shadow id="myShadow" z="1"></div>
+
+ // Assign a target explicitly
+ myShadow.target = document.getElementById('myCard');
+
+ // Auto-assign the target.
+ <div class="card">
+ <paper-shadow z="1"></paper-shadow>
+ </div>
+
+ // Use the classes directly
+ <div class="card paper-shadow-top paper-shadow-top-z-1">
+ <div class="card-inner paper-shadow-bottom paper-shadow-bottom-z-1"></div>
+ </div>
+
+If you assign a target to a `paper-shadow` element, it creates two nodes and inserts
+them as the first children of the target, or the first children of the target's shadow
+root if there is one. This implies:
+
+ 1. If the primary node that drops the shadow has styling that affects its shape,
+ the same styling must be applied to elements with class `paper-shadow`.
+ `border-radius` is a very common property and is inherited automatically.
+
+ 2. The target's overflow property will be set to `overflow: visible` because the
+ shadow is rendered beyond the bounds of its container. Position the shadow as a
+ separate layer and use a different child element for clipping if needed.
+
+@group Paper Elements
+@class paper-shadow
+-->
+
+<link href="../polymer/polymer.html" rel="import">
+
+<polymer-element name="paper-shadow">
+
+ <template>
+
+ <link no-shim href="paper-shadow.css" rel="stylesheet">
+
+ </template>
+
+ <script>
+ Polymer('paper-shadow', {
+
+ publish: {
+ /**
+ * If set, the shadow is applied to this node.
+ *
+ * @attribute target
+ * @type Element
+ * @default null
+ */
+ target: {value: null, reflect: true},
+
+ /**
+ * The z-depth of this shadow, from 0-5.
+ *
+ * @attribute z
+ * @type number
+ * @default 1
+ */
+ z: {value: 1, reflect: true},
+
+ /**
+ * If true, the shadow animates between z-depth changes.
+ *
+ * @attribute animated
+ * @type boolean
+ * @default false
+ */
+ animated: {value: false, reflect: true},
+
+ /**
+ * Workaround: getComputedStyle is wrong sometimes so `paper-shadow`
+ * may overwrite the `position` CSS property. Set this property to
+ * true to prevent this.
+ *
+ * @attribute hasPosition
+ * @type boolean
+ * @default false
+ */
+ hasPosition: {value: false}
+ },
+
+ // NOTE: include template so that styles are loaded, but remove
+ // so that we can decide dynamically what part to include
+ registerCallback: function(polymerElement) {
+ var template = polymerElement.querySelector('template');
+ this._style = template.content.querySelector('style');
+ this._style.removeAttribute('no-shim');
+ },
+
+ fetchTemplate: function() {
+ return null;
+ },
+
+ attached: function() {
+ this.installScopeStyle(this._style);
+
+ // If no target is bound at attach, default the target to the parent
+ // element or shadow host.
+ if (!this.target) {
+ if (!this.parentElement && this.parentNode.host) {
+ this.target = this.parentNode.host;
+ } else if (this.parentElement && (window.ShadowDOMPolyfill ? this.parentElement !== wrap(document.body) : this.parentElement !== document.body)) {
+ this.target = this.parentElement;
+ }
+ }
+ },
+
+ targetChanged: function(old) {
+ if (old) {
+ this.removeShadow(old);
+ }
+ if (this.target) {
+ this.addShadow(this.target);
+ }
+ },
+
+ zChanged: function(old) {
+ if (this.target && this.target._paperShadow) {
+ var shadow = this.target._paperShadow;
+ ['top', 'bottom'].forEach(function(s) {
+ shadow[s].classList.remove('paper-shadow-' + s + '-z-' + old);
+ shadow[s].classList.add('paper-shadow-' + s + '-z-' + this.z);
+ }.bind(this));
+ }
+ },
+
+ animatedChanged: function() {
+ if (this.target && this.target._paperShadow) {
+ var shadow = this.target._paperShadow;
+ ['top', 'bottom'].forEach(function(s) {
+ if (this.animated) {
+ shadow[s].classList.add('paper-shadow-animated');
+ } else {
+ shadow[s].classList.remove('paper-shadow-animated');
+ }
+ }.bind(this));
+ }
+ },
+
+ addShadow: function(node) {
+ if (node._paperShadow) {
+ return;
+ }
+
+ var computed = getComputedStyle(node);
+ if (!this.hasPosition && computed.position === 'static') {
+ node.style.position = 'relative';
+ }
+ node.style.overflow = 'visible';
+
+ // Both the top and bottom shadows are children of the target, so
+ // it does not affect the classes and CSS properties of the target.
+ ['top', 'bottom'].forEach(function(s) {
+ var inner = (node._paperShadow && node._paperShadow[s]) || document.createElement('div');
+ inner.classList.add('paper-shadow');
+ inner.classList.add('paper-shadow-' + s + '-z-' + this.z);
+ if (this.animated) {
+ inner.classList.add('paper-shadow-animated');
+ }
+
+ if (node.shadowRoot) {
+ node.shadowRoot.insertBefore(inner, node.shadowRoot.firstChild);
+ } else {
+ node.insertBefore(inner, node.firstChild);
+ }
+
+ node._paperShadow = node._paperShadow || {};
+ node._paperShadow[s] = inner;
+ }.bind(this));
+
+ },
+
+ removeShadow: function(node) {
+ if (!node._paperShadow) {
+ return;
+ }
+
+ ['top', 'bottom'].forEach(function(s) {
+ node._paperShadow[s].remove();
+ });
+ node._paperShadow = null;
+
+ node.style.position = null;
+ }
+
+ });
+ </script>
+</polymer-element>
« no previous file with comments | « third_party/polymer/components/paper-shadow/paper-shadow.css ('k') | third_party/polymer/components/paper-slider/.bower.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698