| Index: third_party/polymer/components/core-iconset-svg/core-iconset.html
|
| diff --git a/third_party/polymer/components/core-iconset-svg/core-iconset.html b/third_party/polymer/components/core-iconset-svg/core-iconset.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7ab2d34011c1f0fa8481f5d8df1bb08f10a38089
|
| --- /dev/null
|
| +++ b/third_party/polymer/components/core-iconset-svg/core-iconset.html
|
| @@ -0,0 +1,241 @@
|
| +<!--
|
| +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
|
| +-->
|
| +
|
| +<!--
|
| +/**
|
| + * @group Polymer Core Elements
|
| + *
|
| + * The `core-iconset` element allows users to define their own icon sets.
|
| + * The `src` property specifies the url of the icon image. Multiple icons may
|
| + * be included in this image and they may be organized into rows.
|
| + * The `icons` property is a space separated list of names corresponding to the
|
| + * icons. The names must be ordered as the icons are ordered in the icon image.
|
| + * Icons are expected to be square and are the size specified by the `iconSize`
|
| + * property. The `width` property corresponds to the width of the icon image
|
| + * and must be specified if icons are arranged into multiple rows in the image.
|
| + *
|
| + * All `core-iconset` elements are available for use by other `core-iconset`
|
| + * elements via a database keyed by id. Typically, an element author that wants
|
| + * to support a set of custom icons uses a `core-iconset` to retrieve
|
| + * and use another, user-defined iconset.
|
| + *
|
| + * Example:
|
| + *
|
| + * <core-iconset id="my-icons" src="my-icons.png" width="96" iconSize="24"
|
| + * icons="location place starta stopb bus car train walk">
|
| + * </core-iconset>
|
| + *
|
| + * This will automatically register the icon set "my-icons" to the iconset
|
| + * database. To use these icons from within another element, make a
|
| + * `core-iconset` element and call the `byId` method to retrieve a
|
| + * given iconset. To apply a particular icon to an element, use the
|
| + * `applyIcon` method. For example:
|
| + *
|
| + * iconset.applyIcon(iconNode, 'car');
|
| + *
|
| + * Themed icon sets are also supported. The `core-iconset` can contain child
|
| + * `property` elements that specify a theme with an offsetX and offsetY of the
|
| + * theme within the icon resource. For example.
|
| + *
|
| + * <core-iconset id="my-icons" src="my-icons.png" width="96" iconSize="24"
|
| + * icons="location place starta stopb bus car train walk">
|
| + * <property theme="special" offsetX="256" offsetY="24"></property>
|
| + * </core-iconset>
|
| + *
|
| + * Then a themed icon can be applied like this:
|
| + *
|
| + * iconset.applyIcon(iconNode, 'car', 'special');
|
| + *
|
| + * @element core-iconset
|
| + * @extends core-meta
|
| + * @homepage github.io
|
| + */
|
| +-->
|
| +
|
| +<link rel="import" href="../core-meta/core-meta.html">
|
| +
|
| +<polymer-element name="core-iconset" extends="core-meta" attributes="src width icons iconSize">
|
| +
|
| + <script>
|
| +
|
| + Polymer('core-iconset', {
|
| +
|
| + /**
|
| + * The URL of the iconset image.
|
| + *
|
| + * @attribute src
|
| + * @type string
|
| + * @default ''
|
| + */
|
| + src: '',
|
| +
|
| + /**
|
| + * The width of the iconset image. This must only be specified if the
|
| + * icons are arranged into separate rows inside the image.
|
| + *
|
| + * @attribute width
|
| + * @type number
|
| + * @default 0
|
| + */
|
| + width: 0,
|
| +
|
| + /**
|
| + * A space separated list of names corresponding to icons in the iconset
|
| + * image file. This list must be ordered the same as the icon images
|
| + * in the image file.
|
| + *
|
| + * @attribute icons
|
| + * @type string
|
| + * @default ''
|
| + */
|
| + icons: '',
|
| +
|
| + /**
|
| + * The size of an individual icon. Note that icons must be square.
|
| + *
|
| + * @attribute iconSize
|
| + * @type number
|
| + * @default 24
|
| + */
|
| + iconSize: 24,
|
| +
|
| + /**
|
| + * The horizontal offset of the icon images in the inconset src image.
|
| + * This is typically used if the image resource contains additional images
|
| + * beside those intended for the iconset.
|
| + *
|
| + * @attribute offsetX
|
| + * @type number
|
| + * @default 0
|
| + */
|
| + offsetX: 0,
|
| + /**
|
| + * The vertical offset of the icon images in the inconset src image.
|
| + * This is typically used if the image resource contains additional images
|
| + * beside those intended for the iconset.
|
| + *
|
| + * @attribute offsetY
|
| + * @type number
|
| + * @default 0
|
| + */
|
| + offsetY: 0,
|
| + type: 'iconset',
|
| +
|
| + created: function() {
|
| + this.iconMap = {};
|
| + this.iconNames = [];
|
| + this.themes = {};
|
| + },
|
| +
|
| + ready: function() {
|
| + // TODO(sorvell): ensure iconset's src is always relative to the main
|
| + // document
|
| + if (this.src && (this.ownerDocument !== document)) {
|
| + this.src = this.resolvePath(this.src, this.ownerDocument.baseURI);
|
| + }
|
| + this.super();
|
| + this.updateThemes();
|
| + },
|
| +
|
| + iconsChanged: function() {
|
| + var ox = this.offsetX;
|
| + var oy = this.offsetY;
|
| + this.icons && this.icons.split(/\s+/g).forEach(function(name, i) {
|
| + this.iconNames.push(name);
|
| + this.iconMap[name] = {
|
| + offsetX: ox,
|
| + offsetY: oy
|
| + }
|
| + if (ox + this.iconSize < this.width) {
|
| + ox += this.iconSize;
|
| + } else {
|
| + ox = this.offsetX;
|
| + oy += this.iconSize;
|
| + }
|
| + }, this);
|
| + },
|
| +
|
| + updateThemes: function() {
|
| + var ts = this.querySelectorAll('property[theme]');
|
| + ts && ts.array().forEach(function(t) {
|
| + this.themes[t.getAttribute('theme')] = {
|
| + offsetX: parseInt(t.getAttribute('offsetX')) || 0,
|
| + offsetY: parseInt(t.getAttribute('offsetY')) || 0
|
| + };
|
| + }, this);
|
| + },
|
| +
|
| + // TODO(ffu): support retrived by index e.g. getOffset(10);
|
| + /**
|
| + * Returns an object containing `offsetX` and `offsetY` properties which
|
| + * specify the pixel locaion in the iconset's src file for the given
|
| + * `icon` and `theme`. It's uncommon to call this method. It is useful,
|
| + * for example, to manually position a css backgroundImage to the proper
|
| + * offset. It's more common to use the `applyIcon` method.
|
| + *
|
| + * @method getOffset
|
| + * @param {String|Number} icon The name of the icon or the index of the
|
| + * icon within in the icon image.
|
| + * @param {String} theme The name of the theme.
|
| + * @returns {Object} An object specifying the offset of the given icon
|
| + * within the icon resource file; `offsetX` is the horizontal offset and
|
| + * `offsetY` is the vertical offset. Both values are in pixel units.
|
| + */
|
| + getOffset: function(icon, theme) {
|
| + var i = this.iconMap[icon];
|
| + if (!i) {
|
| + var n = this.iconNames[Number(icon)];
|
| + i = this.iconMap[n];
|
| + }
|
| + var t = this.themes[theme];
|
| + if (i && t) {
|
| + return {
|
| + offsetX: i.offsetX + t.offsetX,
|
| + offsetY: i.offsetY + t.offsetY
|
| + }
|
| + }
|
| + return i;
|
| + },
|
| +
|
| + /**
|
| + * Applies an icon to the given element as a css background image. This
|
| + * method does not size the element, and it's often necessary to set
|
| + * the element's height and width so that the background image is visible.
|
| + *
|
| + * @method applyIcon
|
| + * @param {Element} element The element to which the background is
|
| + * applied.
|
| + * @param {String|Number} icon The name or index of the icon to apply.
|
| + * @param {Number} scale (optional, defaults to 1) A scaling factor
|
| + * with which the icon can be magnified.
|
| + * @return {Element} The icon element.
|
| + */
|
| + applyIcon: function(element, icon, scale) {
|
| + var offset = this.getOffset(icon);
|
| + scale = scale || 1;
|
| + if (element && offset) {
|
| + var icon = element._icon || document.createElement('div');
|
| + var style = icon.style;
|
| + style.backgroundImage = 'url(' + this.src + ')';
|
| + style.backgroundPosition = (-offset.offsetX * scale + 'px') +
|
| + ' ' + (-offset.offsetY * scale + 'px');
|
| + style.backgroundSize = scale === 1 ? 'auto' :
|
| + this.width * scale + 'px';
|
| + if (icon.parentNode !== element) {
|
| + element.appendChild(icon);
|
| + }
|
| + return icon;
|
| + }
|
| + }
|
| +
|
| + });
|
| +
|
| + </script>
|
| +
|
| +</polymer-element>
|
|
|