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.github.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/CONTRIBUTORS.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/PATENTS.txt
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
15 Example, an element folder has a `metadata.html` file in it, that contains a
16 `core-meta`, something like this:
18 <core-meta id="my-element" label="My Element">
19 <property name="color" value="blue"></property>
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.
26 var meta = document.createElement('core-meta');
27 console.log(meta.list); // dump a list of all meta-data elements that have been created
30 Use `byId(id)` to retrive a specific core-meta.
33 var meta = document.createElement('core-meta');
34 console.log(meta.byId('my-element'));
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
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>
48 var meta = document.createElement('core-meta');
50 console.log(meta.list);
53 @group Polymer Core Elements
58 <link rel="import" href="../polymer/polymer.html">
60 <polymer-element name="core-meta" attributes="label type" hidden>
66 var metaData = {}, metaArray = {};
68 Polymer('core-meta', {
71 * The type of meta-data. All meta-data with the same type with be
83 this.register(this.id);
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);
110 unregister: function(meta, id) {
111 delete this.metaData[id || meta.id];
112 var i = this.metaArray.indexOf(meta);
114 this.metaArray.splice(i, 1);
119 * Returns a list of all meta-data elements with the same type.
126 return this.metaArray;
130 * Retrieves meta-data by ID.
133 * @param {String} id The ID of the meta-data to be returned.
134 * @returns Returns meta-data.
137 return this.metaData[id];