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

Unified Diff: third_party/polymer/components/core-icon/core-icon.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/core-icon/core-icon.html
diff --git a/third_party/polymer/components/core-icon/core-icon.html b/third_party/polymer/components/core-icon/core-icon.html
new file mode 100644
index 0000000000000000000000000000000000000000..3a0b34480776724c5c821be8779c1e4e050e5e03
--- /dev/null
+++ b/third_party/polymer/components/core-icon/core-icon.html
@@ -0,0 +1,189 @@
+<!--
+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 `core-icon` element displays an icon. By default an icon renders as 24px square.
+
+Example using src:
+
+ <core-icon src="star.png"></core-icon>
+
+Example setting size to 32px x 32px:
+
+ <core-icon class="big" src="big_star.png"></core-icon>
+
+ <style>
+ .big {
+ height: 32px;
+ width: 32px;
+ }
+ </style>
+
+Example using icon from default iconset:
+
+ <core-icon icon="menu"></core-icon>
+
+Example using icon `cherry` from custom iconset `fruit`:
+
+ <core-icon icon="fruit:cherry"></core-icon>
+
+See [core-iconset](#core-iconset) and [core-iconset-svg](#core-iconset-svg) for more information about
+how to use a custom iconset.
+
+See [core-icons](http://www.polymer-project.org/components/core-icons/demo.html) for the default set of icons. To use the default set of icons you'll need to include an import for `core-icons.html`. To use a different built-in set of icons, you'll need to include an import for `core-icons/iconsets/<iconset>.html`.
+
+@group Polymer Core Elements
+@element core-icon
+@homepage polymer.github.io
+-->
+<link rel="import" href="../core-iconset/core-iconset.html">
+
+<link rel="stylesheet" href="core-icon.css" shim-shadowdom>
+
+<polymer-element name="core-icon" attributes="src icon alt">
+<script>
+(function() {
+
+ // mono-state
+ var meta;
+
+ Polymer('core-icon', {
+
+ /**
+ * The URL of an image for the icon. If the src property is specified,
+ * the icon property should not be.
+ *
+ * @attribute src
+ * @type string
+ * @default ''
+ */
+ src: '',
+
+ /**
+ * Specifies the icon name or index in the set of icons available in
+ * the icon's icon set. If the icon property is specified,
+ * the src property should not be.
+ *
+ * @attribute icon
+ * @type string
+ * @default ''
+ */
+ icon: '',
+
+ /**
+ * Alternative text content for accessibility support.
+ * If alt is present and not empty, it will set the element's role to img and add an aria-label whose content matches alt.
+ * If alt is present and is an empty string, '', it will hide the element from the accessibility layer
+ * If alt is not present, it will set the element's role to img and the element will fallback to using the icon attribute for its aria-label.
+ *
+ * @attribute alt
+ * @type string
+ * @default ''
+ */
+ alt: null,
+
+ observe: {
+ 'icon': 'updateIcon',
+ 'alt': 'updateAlt'
+ },
+
+ defaultIconset: 'icons',
+
+ ready: function() {
+ if (!meta) {
+ meta = document.createElement('core-iconset');
+ }
+
+ // Allow user-provided `aria-label` in preference to any other text alternative.
+ if (this.hasAttribute('aria-label')) {
+ // Set `role` if it has not been overridden.
+ if (!this.hasAttribute('role')) {
+ this.setAttribute('role', 'img');
+ }
+ return;
+ }
+ this.updateAlt();
+ },
+
+ srcChanged: function() {
+ var icon = this._icon || document.createElement('div');
+ icon.textContent = '';
+ icon.setAttribute('fit', '');
+ icon.style.backgroundImage = 'url(' + this.src + ')';
+ icon.style.backgroundPosition = 'center';
+ icon.style.backgroundSize = '100%';
+ if (!icon.parentNode) {
+ this.appendChild(icon);
+ }
+ this._icon = icon;
+ },
+
+ getIconset: function(name) {
+ return meta.byId(name || this.defaultIconset);
+ },
+
+ updateIcon: function(oldVal, newVal) {
+ if (!this.icon) {
+ this.updateAlt();
+ return;
+ }
+ var parts = String(this.icon).split(':');
+ var icon = parts.pop();
+ if (icon) {
+ var set = this.getIconset(parts.pop());
+ if (set) {
+ this._icon = set.applyIcon(this, icon);
+ if (this._icon) {
+ this._icon.setAttribute('fit', '');
+ }
+ }
+ }
+ // Check to see if we're using the old icon's name for our a11y fallback
+ if (oldVal) {
+ if (oldVal.split(':').pop() == this.getAttribute('aria-label')) {
+ this.updateAlt();
+ }
+ }
+ },
+
+ updateAlt: function() {
+ // Respect the user's decision to remove this element from
+ // the a11y tree
+ if (this.getAttribute('aria-hidden')) {
+ return;
+ }
+
+ // Remove element from a11y tree if `alt` is empty, otherwise
+ // use `alt` as `aria-label`.
+ if (this.alt === '') {
+ this.setAttribute('aria-hidden', 'true');
+ if (this.hasAttribute('role')) {
+ this.removeAttribute('role');
+ }
+ if (this.hasAttribute('aria-label')) {
+ this.removeAttribute('aria-label');
+ }
+ } else {
+ this.setAttribute('aria-label', this.alt ||
+ this.icon.split(':').pop());
+ if (!this.hasAttribute('role')) {
+ this.setAttribute('role', 'img');
+ }
+ if (this.hasAttribute('aria-hidden')) {
+ this.removeAttribute('aria-hidden');
+ }
+ }
+ }
+
+ });
+
+})();
+</script>
+
+</polymer-element>
« no previous file with comments | « third_party/polymer/components/core-icon/core-icon.css ('k') | third_party/polymer/components/core-icon/demo.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698