Mercurial > hg > MPIWGThesaurus
comparison jquery-ui/development-bundle/external/jquery.metadata.js @ 0:b2e4605f20b2
beta version
author | dwinter |
---|---|
date | Thu, 30 Jun 2011 09:07:49 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:b2e4605f20b2 |
---|---|
1 /* | |
2 * Metadata - jQuery plugin for parsing metadata from elements | |
3 * | |
4 * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan | |
5 * | |
6 * Dual licensed under the MIT and GPL licenses: | |
7 * http://www.opensource.org/licenses/mit-license.php | |
8 * http://www.gnu.org/licenses/gpl.html | |
9 * | |
10 * Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $ | |
11 * | |
12 */ | |
13 | |
14 /** | |
15 * Sets the type of metadata to use. Metadata is encoded in JSON, and each property | |
16 * in the JSON will become a property of the element itself. | |
17 * | |
18 * There are three supported types of metadata storage: | |
19 * | |
20 * attr: Inside an attribute. The name parameter indicates *which* attribute. | |
21 * | |
22 * class: Inside the class attribute, wrapped in curly braces: { } | |
23 * | |
24 * elem: Inside a child element (e.g. a script tag). The | |
25 * name parameter indicates *which* element. | |
26 * | |
27 * The metadata for an element is loaded the first time the element is accessed via jQuery. | |
28 * | |
29 * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements | |
30 * matched by expr, then redefine the metadata type and run another $(expr) for other elements. | |
31 * | |
32 * @name $.metadata.setType | |
33 * | |
34 * @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p> | |
35 * @before $.metadata.setType("class") | |
36 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" | |
37 * @desc Reads metadata from the class attribute | |
38 * | |
39 * @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p> | |
40 * @before $.metadata.setType("attr", "data") | |
41 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" | |
42 * @desc Reads metadata from a "data" attribute | |
43 * | |
44 * @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p> | |
45 * @before $.metadata.setType("elem", "script") | |
46 * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" | |
47 * @desc Reads metadata from a nested script element | |
48 * | |
49 * @param String type The encoding type | |
50 * @param String name The name of the attribute to be used to get metadata (optional) | |
51 * @cat Plugins/Metadata | |
52 * @descr Sets the type of encoding to be used when loading metadata for the first time | |
53 * @type undefined | |
54 * @see metadata() | |
55 */ | |
56 | |
57 (function($) { | |
58 | |
59 $.extend({ | |
60 metadata : { | |
61 defaults : { | |
62 type: 'class', | |
63 name: 'metadata', | |
64 cre: /({.*})/, | |
65 single: 'metadata' | |
66 }, | |
67 setType: function( type, name ){ | |
68 this.defaults.type = type; | |
69 this.defaults.name = name; | |
70 }, | |
71 get: function( elem, opts ){ | |
72 var settings = $.extend({},this.defaults,opts); | |
73 // check for empty string in single property | |
74 if ( !settings.single.length ) settings.single = 'metadata'; | |
75 | |
76 var data = $.data(elem, settings.single); | |
77 // returned cached data if it already exists | |
78 if ( data ) return data; | |
79 | |
80 data = "{}"; | |
81 | |
82 if ( settings.type == "class" ) { | |
83 var m = settings.cre.exec( elem.className ); | |
84 if ( m ) | |
85 data = m[1]; | |
86 } else if ( settings.type == "elem" ) { | |
87 if( !elem.getElementsByTagName ) | |
88 return undefined; | |
89 var e = elem.getElementsByTagName(settings.name); | |
90 if ( e.length ) | |
91 data = $.trim(e[0].innerHTML); | |
92 } else if ( elem.getAttribute != undefined ) { | |
93 var attr = elem.getAttribute( settings.name ); | |
94 if ( attr ) | |
95 data = attr; | |
96 } | |
97 | |
98 if ( data.indexOf( '{' ) <0 ) | |
99 data = "{" + data + "}"; | |
100 | |
101 data = eval("(" + data + ")"); | |
102 | |
103 $.data( elem, settings.single, data ); | |
104 return data; | |
105 } | |
106 } | |
107 }); | |
108 | |
109 /** | |
110 * Returns the metadata object for the first member of the jQuery object. | |
111 * | |
112 * @name metadata | |
113 * @descr Returns element's metadata object | |
114 * @param Object opts An object contianing settings to override the defaults | |
115 * @type jQuery | |
116 * @cat Plugins/Metadata | |
117 */ | |
118 $.fn.metadata = function( opts ){ | |
119 return $.metadata.get( this[0], opts ); | |
120 }; | |
121 | |
122 })(jQuery); |