Index: third_party/polymer/components/core-meta/core-meta.html |
diff --git a/third_party/polymer/components/core-meta/core-meta.html b/third_party/polymer/components/core-meta/core-meta.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c008dd5691aca7ab079c07617174b6c4793055e1 |
--- /dev/null |
+++ b/third_party/polymer/components/core-meta/core-meta.html |
@@ -0,0 +1,145 @@ |
+<!-- |
+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 |
+--> |
+ |
+<!-- |
+`core-meta` provides a method of constructing a self-organizing database. |
+It is useful to collate element meta-data for things like catalogs and for |
+designer. |
+ |
+Example, an element folder has a `metadata.html` file in it, that contains a |
+`core-meta`, something like this: |
+ |
+ <core-meta id="my-element" label="My Element"> |
+ <property name="color" value="blue"></property> |
+ </core-meta> |
+ |
+An application can import as many of these files as it wants, and then use |
+`core-meta` again to access the collected data. |
+ |
+ <script> |
+ var meta = document.createElement('core-meta'); |
+ console.log(meta.list); // dump a list of all meta-data elements that have been created |
+ </script> |
+ |
+Use `byId(id)` to retrive a specific core-meta. |
+ |
+ <script> |
+ var meta = document.createElement('core-meta'); |
+ console.log(meta.byId('my-element')); |
+ </script> |
+ |
+By default all meta-data are stored in a single databse. If your meta-data |
+have different types and want them to be stored separately, use `type` to |
+differentiate them. |
+ |
+Example: |
+ |
+ <core-meta id="x-foo" type="xElt"></core-meta> |
+ <core-meta id="x-bar" type="xElt"></core-meta> |
+ <core-meta id="y-bar" type="yElt"></core-meta> |
+ |
+ <script> |
+ var meta = document.createElement('core-meta'); |
+ meta.type = 'xElt'; |
+ console.log(meta.list); |
+ </script> |
+ |
+@group Polymer Core Elements |
+@element core-meta |
+@homepage github.io |
+--> |
+ |
+<link rel="import" href="../polymer/polymer.html"> |
+ |
+<polymer-element name="core-meta" attributes="label type" hidden> |
+<script> |
+ |
+ (function() { |
+ |
+ var SKIP_ID = 'meta'; |
+ var metaData = {}, metaArray = {}; |
+ |
+ Polymer('core-meta', { |
+ |
+ /** |
+ * The type of meta-data. All meta-data with the same type with be |
+ * stored together. |
+ * |
+ * @attribute type |
+ * @type string |
+ * @default 'default' |
+ */ |
+ type: 'default', |
+ |
+ alwaysPrepare: true, |
+ |
+ ready: function() { |
+ this.register(this.id); |
+ }, |
+ |
+ get metaArray() { |
+ var t = this.type; |
+ if (!metaArray[t]) { |
+ metaArray[t] = []; |
+ } |
+ return metaArray[t]; |
+ }, |
+ |
+ get metaData() { |
+ var t = this.type; |
+ if (!metaData[t]) { |
+ metaData[t] = {}; |
+ } |
+ return metaData[t]; |
+ }, |
+ |
+ register: function(id, old) { |
+ if (id && id !== SKIP_ID) { |
+ this.unregister(this, old); |
+ this.metaData[id] = this; |
+ this.metaArray.push(this); |
+ } |
+ }, |
+ |
+ unregister: function(meta, id) { |
+ delete this.metaData[id || meta.id]; |
+ var i = this.metaArray.indexOf(meta); |
+ if (i >= 0) { |
+ this.metaArray.splice(i, 1); |
+ } |
+ }, |
+ |
+ /** |
+ * Returns a list of all meta-data elements with the same type. |
+ * |
+ * @property list |
+ * @type array |
+ * @default [] |
+ */ |
+ get list() { |
+ return this.metaArray; |
+ }, |
+ |
+ /** |
+ * Retrieves meta-data by ID. |
+ * |
+ * @method byId |
+ * @param {String} id The ID of the meta-data to be returned. |
+ * @returns Returns meta-data. |
+ */ |
+ byId: function(id) { |
+ return this.metaData[id]; |
+ } |
+ |
+ }); |
+ |
+ })(); |
+ |
+</script> |
+</polymer-element> |