Skip to content
This repository was archived by the owner on Jan 16, 2020. It is now read-only.

Commit 0dbb5ec

Browse files
committed
Moving over from the jQuery SVN repository.
0 parents  commit 0dbb5ec

8 files changed

+3986
-0
lines changed

META.json

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"name": "jQuery-Metadata",
3+
"version": 2.0,
4+
"author": [
5+
"John Resig <[email protected]>",
6+
"Jörn Zaefferer <[email protected]>",
7+
"Paul McLanahan <[email protected]>"
8+
],
9+
"abstract": "Quietly extract JSON metadata contained within DOM elements.",
10+
"license": "mit, gpl",
11+
"distribution_type": "extension",
12+
"requires": {
13+
"jQuery": 1.2
14+
},
15+
"build_requires": {
16+
"jQuery-testrunner": 0
17+
},
18+
"provides": {
19+
"jQuery.Metadata": {
20+
"version": 2.0,
21+
"file": "jquery.metadata.js"
22+
}
23+
},
24+
"keywords": [
25+
"data",
26+
"utility"
27+
],
28+
"meta-spec": {
29+
"version": 1.3,
30+
"url": "http://module-build.sourceforge.net/META-spec-v1.3.html"
31+
},
32+
"generated_by": "John Resig"
33+
}

README

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
jQuery Metadata Plugin
2+
3+
By John Resig
4+
5+
This plugin is capable of silently, and automatically, extracting metadata
6+
from classes, random attributes, and child elements.
7+
8+
For example, you can do:
9+
<li class="someclass {some: 'data'} anotherclass">...</li>
10+
OR
11+
<li data="{some:'random', json: 'data'}">...</li>
12+
OR
13+
<li><script type="data">{some:"json",data:true}</script> ...</li>
14+
15+
The default is the first method, but you can always change it by twiddling
16+
the options. This means that there is at least one option here that can
17+
appease you.
18+
19+
There's also a bunch of options (like loading data into a single property
20+
and the ability to ignore braces {}).

jquery.metadata.js

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
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);

test/index.html

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2+
<html>
3+
<head>
4+
<link rel="stylesheet" href="testsuite.css" />
5+
<script type="text/javascript" src="jquery.js"></script>
6+
<script type="text/javascript" src="testrunner.js"></script>
7+
<!-- include metadata plugin two times to make sure that doesn't hurt anyone -->
8+
<script type="text/javascript" src="../jquery.metadata.js"></script>
9+
<script type="text/javascript" src="../jquery.metadata.js"></script>
10+
<script type="text/javascript" src="test.js"></script>
11+
</head>
12+
13+
<body>
14+
<h1>jQuery - Metadata Test Suite</h1>
15+
<h2 id="banner"></h2>
16+
<h2 id="userAgent"></h2>
17+
18+
<div id="main" style="display: none">
19+
<ol id="one">
20+
<li class="test test2" data="foo:'bar', bar:'baz', arr:[1,2]">Some stuff</li>
21+
<li class="test test2" data="{test:'bar', bar:'baz'}">Some stuff</li>
22+
<li class="test test2" data="{zoooo:'bar', bar:{test:'baz'}}">Some stuff</li>
23+
<li class="test test2" data="{number:true, stuff:[2,8]}">Some stuff</li>
24+
</ol>
25+
26+
<ol id="two">
27+
<li class="test {foo:'bar',bar:'baz',arr:[1,2]} test2">Some stuff</li>
28+
<li class="{test:'bar',bar:'baz'} test test2">Some stuff</li>
29+
<li class="test test2 {zoooo:'bar',bar:{test:'baz'}}">Some stuff</li>
30+
<li class="some styles {number:true,stuff:[2,8]}">Some stuff</li>
31+
</ol>
32+
33+
<ol id="three">
34+
<li class="test test2"><script type="data">foo:'bar', bar:'baz', arr:[1,2]</script>Some stuff</li>
35+
<li class="test test2"><script type="data">{test:'bar', bar:'baz'}</script>Some stuff</li>
36+
<li class="test test2"><script type="data">{zoooo:'bar', bar:{test:'baz'}}</script>Some stuff</li>
37+
<li class="test test2"><script type="data">{number:true, stuff:[2,8]}</script>Some stuff</li>
38+
</ol>
39+
<script type="data">test("execute script with type='data'", function() { ok( false, "Script tag with type='data' was executed!"); });</script>
40+
41+
<ol id="four">
42+
<li class="test test2" data="foo:'bar', bar:'baz', arr:[1,2]">Some stuff</li>
43+
<li class="test test2" data="{test:'bar', bar:'baz'}">Some stuff</li>
44+
<li class="test test2" data="{zoooo:'bar', bar:{test:'baz'}}">Some stuff</li>
45+
<li class="test test2" data="{number:true, stuff:[2,8]}">Some stuff</li>
46+
</ol>
47+
48+
<select class="{required:true}" name="meal" id="meal">
49+
<option value="">Please select...</option>
50+
<option value="1">Food</option>
51+
<option value="2">Milk</option>
52+
</select>
53+
</div>
54+
55+
<ol id="tests"></ol>
56+
</body>
57+
58+
</html>

0 commit comments

Comments
 (0)