OLD | NEW |
(Empty) | |
| 1 <!-- |
| 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. |
| 3 This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt |
| 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
| 5 The complete set of contributors may be found at http://polymer.github.io/CONTRI
BUTORS.txt |
| 6 Code distributed by Google as part of the polymer project is also |
| 7 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt |
| 8 --> |
| 9 |
| 10 <!-- |
| 11 `core-meta` provides a method of constructing a self-organizing database. |
| 12 It is useful to collate element meta-data for things like catalogs and for |
| 13 designer. |
| 14 |
| 15 Example, an element folder has a `metadata.html` file in it, that contains a |
| 16 `core-meta`, something like this: |
| 17 |
| 18 <core-meta id="my-element" label="My Element"> |
| 19 <property name="color" value="blue"></property> |
| 20 </core-meta> |
| 21 |
| 22 An application can import as many of these files as it wants, and then use |
| 23 `core-meta` again to access the collected data. |
| 24 |
| 25 <script> |
| 26 var meta = document.createElement('core-meta'); |
| 27 console.log(meta.list); // dump a list of all meta-data elements that have
been created |
| 28 </script> |
| 29 |
| 30 Use `byId(id)` to retrive a specific core-meta. |
| 31 |
| 32 <script> |
| 33 var meta = document.createElement('core-meta'); |
| 34 console.log(meta.byId('my-element')); |
| 35 </script> |
| 36 |
| 37 By default all meta-data are stored in a single databse. If your meta-data |
| 38 have different types and want them to be stored separately, use `type` to |
| 39 differentiate them. |
| 40 |
| 41 Example: |
| 42 |
| 43 <core-meta id="x-foo" type="xElt"></core-meta> |
| 44 <core-meta id="x-bar" type="xElt"></core-meta> |
| 45 <core-meta id="y-bar" type="yElt"></core-meta> |
| 46 |
| 47 <script> |
| 48 var meta = document.createElement('core-meta'); |
| 49 meta.type = 'xElt'; |
| 50 console.log(meta.list); |
| 51 </script> |
| 52 |
| 53 @group Polymer Core Elements |
| 54 @element core-meta |
| 55 @homepage github.io |
| 56 --> |
| 57 |
| 58 <link rel="import" href="../polymer/polymer.html"> |
| 59 |
| 60 <polymer-element name="core-meta" attributes="label type" hidden> |
| 61 <script> |
| 62 |
| 63 (function() { |
| 64 |
| 65 var SKIP_ID = 'meta'; |
| 66 var metaData = {}, metaArray = {}; |
| 67 |
| 68 Polymer('core-meta', { |
| 69 |
| 70 /** |
| 71 * The type of meta-data. All meta-data with the same type with be |
| 72 * stored together. |
| 73 * |
| 74 * @attribute type |
| 75 * @type string |
| 76 * @default 'default' |
| 77 */ |
| 78 type: 'default', |
| 79 |
| 80 alwaysPrepare: true, |
| 81 |
| 82 ready: function() { |
| 83 this.register(this.id); |
| 84 }, |
| 85 |
| 86 get metaArray() { |
| 87 var t = this.type; |
| 88 if (!metaArray[t]) { |
| 89 metaArray[t] = []; |
| 90 } |
| 91 return metaArray[t]; |
| 92 }, |
| 93 |
| 94 get metaData() { |
| 95 var t = this.type; |
| 96 if (!metaData[t]) { |
| 97 metaData[t] = {}; |
| 98 } |
| 99 return metaData[t]; |
| 100 }, |
| 101 |
| 102 register: function(id, old) { |
| 103 if (id && id !== SKIP_ID) { |
| 104 this.unregister(this, old); |
| 105 this.metaData[id] = this; |
| 106 this.metaArray.push(this); |
| 107 } |
| 108 }, |
| 109 |
| 110 unregister: function(meta, id) { |
| 111 delete this.metaData[id || meta.id]; |
| 112 var i = this.metaArray.indexOf(meta); |
| 113 if (i >= 0) { |
| 114 this.metaArray.splice(i, 1); |
| 115 } |
| 116 }, |
| 117 |
| 118 /** |
| 119 * Returns a list of all meta-data elements with the same type. |
| 120 * |
| 121 * @property list |
| 122 * @type array |
| 123 * @default [] |
| 124 */ |
| 125 get list() { |
| 126 return this.metaArray; |
| 127 }, |
| 128 |
| 129 /** |
| 130 * Retrieves meta-data by ID. |
| 131 * |
| 132 * @method byId |
| 133 * @param {String} id The ID of the meta-data to be returned. |
| 134 * @returns Returns meta-data. |
| 135 */ |
| 136 byId: function(id) { |
| 137 return this.metaData[id]; |
| 138 } |
| 139 |
| 140 }); |
| 141 |
| 142 })(); |
| 143 |
| 144 </script> |
| 145 </polymer-element> |
OLD | NEW |