| Index: polymer_1.0.4/bower_components/iron-iconset/iron-iconset.html
|
| diff --git a/polymer_1.0.4/bower_components/iron-iconset/iron-iconset.html b/polymer_1.0.4/bower_components/iron-iconset/iron-iconset.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fc21d99ef1b0d4c6af7d38738dfdf6f75c34dcbc
|
| --- /dev/null
|
| +++ b/polymer_1.0.4/bower_components/iron-iconset/iron-iconset.html
|
| @@ -0,0 +1,336 @@
|
| +<!--
|
| +@license
|
| +Copyright (c) 2015 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
|
| +-->
|
| +
|
| +<link rel="import" href="../polymer/polymer.html">
|
| +<link rel="import" href="../iron-meta/iron-meta.html">
|
| +
|
| +<!--
|
| +The `iron-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 `size`
|
| +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 `iron-iconset` elements are available for use by other `iron-iconset`
|
| +elements via a database keyed by id. Typically, an element author that wants
|
| +to support a set of custom icons uses a `iron-iconset` to retrieve
|
| +and use another, user-defined iconset.
|
| +
|
| +Example:
|
| +
|
| + <iron-iconset id="my-icons" src="my-icons.png" width="96" size="24"
|
| + icons="location place starta stopb bus car train walk">
|
| + </iron-iconset>
|
| +
|
| +This will automatically register the icon set "my-icons" to the iconset
|
| +database. To use these icons from within another element, make a
|
| +`iron-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 `iron-iconset` can contain child
|
| +`property` elements that specify a theme with an offsetX and offsetY of the
|
| +theme within the icon resource. For example.
|
| +
|
| + <iron-iconset id="my-icons" src="my-icons.png" width="96" size="24"
|
| + icons="location place starta stopb bus car train walk">
|
| + <property theme="special" offsetX="256" offsetY="24"></property>
|
| + </iron-iconset>
|
| +
|
| +Then a themed icon can be applied like this:
|
| +
|
| + iconset.applyIcon(iconNode, 'car', 'special');
|
| +
|
| +@element iron-iconset
|
| +@demo demo/index.html
|
| +-->
|
| +
|
| +<script>
|
| +
|
| + Polymer({
|
| +
|
| + is: 'iron-iconset',
|
| +
|
| + properties: {
|
| +
|
| + /**
|
| + * The URL of the iconset image.
|
| + *
|
| + * @attribute src
|
| + * @type string
|
| + * @default ''
|
| + */
|
| + src: {
|
| + type: String,
|
| + observer: '_srcChanged'
|
| + },
|
| +
|
| + /**
|
| + * The name of the iconset.
|
| + *
|
| + * @attribute name
|
| + * @type string
|
| + * @default 'no-name'
|
| + */
|
| + name: {
|
| + type: String,
|
| + observer: '_nameChanged'
|
| + },
|
| +
|
| + /**
|
| + * 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: {
|
| + type: Number,
|
| + value: 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: {
|
| + type: String
|
| + },
|
| +
|
| + /**
|
| + * The size of an individual icon. Note that icons must be square.
|
| + *
|
| + * @attribute size
|
| + * @type number
|
| + * @default 24
|
| + */
|
| + size: {
|
| + type: Number,
|
| + value: 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 offset-x
|
| + * @type number
|
| + * @default 0
|
| + */
|
| + _offsetX: {
|
| + type: Number,
|
| + value: 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 offset-y
|
| + * @type number
|
| + * @default 0
|
| + */
|
| + _offsetY: {
|
| + type: Number,
|
| + value: 0
|
| + },
|
| +
|
| + /**
|
| + * Array of fully-qualified names of icons in this set.
|
| + */
|
| + iconNames: {
|
| + type: Array,
|
| + notify: true
|
| + }
|
| +
|
| + },
|
| +
|
| + hostAttributes: {
|
| + // non-visual
|
| + style: 'display: none;'
|
| + },
|
| +
|
| + ready: function() {
|
| + // theme data must exist at ready-time
|
| + this._themes = this._mapThemes();
|
| + },
|
| +
|
| + /**
|
| + * Applies an icon to the given element as a css background image. This
|
| + * method does not size the element, and it's usually 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 icon is applied.
|
| + * @param {String|Number} icon The name or index of the icon to apply.
|
| + * @param {String} theme (optional) The name or index of the icon to apply.
|
| + * @param {Number} scale (optional, defaults to 1) Icon scaling factor.
|
| + */
|
| + applyIcon: function(element, icon, theme, scale) {
|
| + this._validateIconMap();
|
| + var offset = this._getThemedOffset(icon, theme);
|
| + if (element && offset) {
|
| + this._addIconStyles(element, this._srcUrl, offset, scale || 1,
|
| + this.size, this.width);
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Remove an icon from the given element by undoing the changes effected
|
| + * by `applyIcon`.
|
| + *
|
| + * @param {Element} element The element from which the icon is removed.
|
| + */
|
| + removeIcon: function(element) {
|
| + this._removeIconStyles(element.style);
|
| + },
|
| +
|
| + _mapThemes: function() {
|
| + var themes = Object.create(null);
|
| + Polymer.dom(this).querySelectorAll('property[theme]')
|
| + .forEach(function(property) {
|
| + var offsetX = window.parseInt(
|
| + property.getAttribute('offset-x'), 10
|
| + ) || 0;
|
| + var offsetY = window.parseInt(
|
| + property.getAttribute('offset-y'), 10
|
| + ) || 0;
|
| + themes[property.getAttribute('theme')] = {
|
| + offsetX: offsetX,
|
| + offsetY: offsetY
|
| + };
|
| + });
|
| + return themes;
|
| + },
|
| +
|
| + _srcChanged: function(src) {
|
| + // ensure `srcUrl` is always relative to the main document
|
| + this._srcUrl = this.ownerDocument !== document
|
| + ? this.resolveUrl(src) : src;
|
| + this._prepareIconset();
|
| + },
|
| +
|
| + _nameChanged: function(name) {
|
| + this._prepareIconset();
|
| + },
|
| +
|
| + _prepareIconset: function() {
|
| + new Polymer.IronMeta({type: 'iconset', key: this.name, value: this});
|
| + },
|
| +
|
| + _invalidateIconMap: function() {
|
| + this._iconMapValid = false;
|
| + },
|
| +
|
| + _validateIconMap: function() {
|
| + if (!this._iconMapValid) {
|
| + this._recomputeIconMap();
|
| + this._iconMapValid = true;
|
| + }
|
| + },
|
| +
|
| + _recomputeIconMap: function() {
|
| + this.iconNames = this._computeIconNames(this.icons);
|
| + this.iconMap = this._computeIconMap(this._offsetX, this._offsetY,
|
| + this.size, this.width, this.iconNames);
|
| + },
|
| +
|
| + _computeIconNames: function(icons) {
|
| + return icons.split(/\s+/g);
|
| + },
|
| +
|
| + _computeIconMap: function(offsetX, offsetY, size, width, iconNames) {
|
| + var iconMap = {};
|
| + if (offsetX !== undefined && offsetY !== undefined) {
|
| + var x0 = offsetX;
|
| + iconNames.forEach(function(iconName) {
|
| + iconMap[iconName] = {
|
| + offsetX: offsetX,
|
| + offsetY: offsetY
|
| + };
|
| + if ((offsetX + size) < width) {
|
| + offsetX += size;
|
| + } else {
|
| + offsetX = x0;
|
| + offsetY += size;
|
| + }
|
| + }, this);
|
| + }
|
| + return iconMap;
|
| + },
|
| +
|
| + /**
|
| + * Returns an object containing `offsetX` and `offsetY` properties which
|
| + * specify the pixel location 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 getThemedOffset
|
| + * @param {String|Number} identifier 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.
|
| + */
|
| + _getThemedOffset: function(identifier, theme) {
|
| + var iconOffset = this._getIconOffset(identifier);
|
| + var themeOffset = this._themes[theme];
|
| + if (iconOffset && themeOffset) {
|
| + return {
|
| + offsetX: iconOffset.offsetX + themeOffset.offsetX,
|
| + offsetY: iconOffset.offsetY + themeOffset.offsetY
|
| + };
|
| + }
|
| + return iconOffset;
|
| + },
|
| +
|
| + _getIconOffset: function(identifier) {
|
| + // TODO(sjmiles): consider creating offsetArray (indexed by Number)
|
| + // and having iconMap map names to indices, then and index is just
|
| + // iconMap[identifier] || identifier (be careful of zero, store indices
|
| + // as 1-based)
|
| + return this.iconMap[identifier] ||
|
| + this.iconMap[this.iconNames[Number(identifier)]];
|
| + },
|
| +
|
| + _addIconStyles: function(element, url, offset, scale, size, width) {
|
| + var style = element.style;
|
| + style.backgroundImage = 'url(' + url + ')';
|
| + style.backgroundPosition =
|
| + (-offset.offsetX * scale + 'px') + ' ' +
|
| + (-offset.offsetY * scale + 'px');
|
| + style.backgroundSize = (scale === 1) ? 'auto' : width * scale + 'px';
|
| + style.width = size + 'px';
|
| + style.height = size + 'px';
|
| + element.setAttribute('role', 'img');
|
| + },
|
| +
|
| + _removeIconStyles: function(style) {
|
| + style.background = '';
|
| + }
|
| +
|
| + });
|
| +
|
| +</script>
|
|
|