Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / polymer / components / core-meta / core-meta.html
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.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
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>