<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  

  

  <head>
    <title>
      /trunk/plugins/metadata/jquery.metadata.js –
      jQuery – Development
    </title>
        <link rel="search" href="/search" />
        <link rel="help" href="/wiki/TracGuide" />
        <link rel="alternate" href="/browser/trunk/plugins/metadata/jquery.metadata.js?rev=3554&amp;format=txt" type="text/plain" title="Plain Text" /><link rel="alternate" href="/export/3554/trunk/plugins/metadata/jquery.metadata.js" type="text/x-javascript; charset=utf-8" title="Original Format" />
        <link rel="up" href="/browser/trunk/plugins/metadata?rev=3554" title="Parent directory" />
        <link rel="start" href="/wiki" />
        <link rel="stylesheet" href="/chrome/common/css/trac.css" type="text/css" /><link rel="stylesheet" href="/chrome/common/css/code.css" type="text/css" /><link rel="stylesheet" href="/chrome/common/css/browser.css" type="text/css" />
        <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
        <link rel="icon" href="/favicon.ico" type="image/x-icon" />
      <link type="application/opensearchdescription+xml" rel="search" href="/search/opensearch" title="Search jQuery" />
    <script type="text/javascript" src="/chrome/common/js/jquery.js"></script><script type="text/javascript" src="/chrome/common/js/trac.js"></script><script type="text/javascript" src="/chrome/common/js/search.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $("#jumploc input").hide();
        $("#jumploc select").change(function () {
          this.parentNode.parentNode.submit();
        })
      });
    </script>
    <link rel="stylesheet" type="text/css" href="http://static.jquery.com/files/design/css/jquery-lite2.css" />
    <link rel="shortcut icon" href="http://static.jquery.com/favicon.ico" type="image/x-icon" />
  </head>
  <body>
<div id="jq-wrapper">
        <div id="jq-header">
                <h1><a href="http://jquery.com/">jQuery: The Write Less, Do More JavaScript Library</a></h1>
                <ul>
                        <li id="jq-download"><a href="http://docs.jquery.com/Downloading_jQuery">Download</a></li>
                        <li><a href="http://docs.jquery.com/">Documentation</a></li>
                        <li><a href="http://jquery.com/plugins/">Plugins</a></li>
                        <li><a href="http://docs.jquery.com/Tutorials">Tutorials</a></li>
                        <li><a href="http://docs.jquery.com/Discussion">Discuss</a></li>
                        <li><a href="http://jquery.com/blog/">Blog</a></li>
                </ul>
        </div>
	<div id="content">
    <div id="banner" style="margin-top: 5px;">
      <!--<div id="header" py:choose="">
        <a py:when="chrome.logo.src" id="logo" href="${chrome.logo.link}"><img
          src="${chrome.logo.src}" alt="${chrome.logo.alt}" /></a>
        <h1 py:otherwise=""><a href="${chrome.logo.link}">${project.name}</a></h1>
      </div>-->
      <!--<form py:if="'SEARCH_VIEW' in perm" id="search"
            action="${href.search()}" method="get" style="float:right;"><div>
        <label for="proj-search">Search:</label>
        <input type="text" id="proj-search" name="q" size="10" accesskey="f" value="" />
        <input type="submit" value="Search" />
        <input type="hidden" name="wiki" value="on" />
        <input type="hidden" name="changeset" value="on" />
        <input type="hidden" name="ticket" value="on" />
      </div></form>-->
      <div id="metanav" class="nav">
    <ul>
      <li class="first"><a href="/login">Login</a></li><li><a href="/about">About Trac</a></li><li><a href="/prefs">Preferences</a></li><li><a href="/wiki/TracGuide">Help/Guide</a></li><li class="last"><a href="/register">Register</a></li>
    </ul>
  </div>
    </div>
    <div id="mainnav" class="nav">
    <ul>
      <li class="first"><a href="/wiki">Wiki</a></li><li><a href="/roadmap">Roadmap</a></li><li class="active"><a href="/browser">Browse Source</a></li><li><a href="/report">View Tickets</a></li><li><a href="/search">Search</a></li><li class="last"><a href="/timeline">Timeline</a></li>
    </ul>
  </div>
    <div id="main">
    <div id="ctxtnav" class="nav">
      <ul>
        <li class="first"><a href="/changeset/3554/trunk/plugins/metadata/jquery.metadata.js">Last Change</a></li>
        <li>
          <a href="/browser/trunk/plugins/metadata/jquery.metadata.js?annotate=True&amp;rev=3554" title="Annotate each line with the last changed revision. This can be time consuming...">
            Annotate
          </a>
        </li>
        <li class="last"><a href="/log/trunk/plugins/metadata/jquery.metadata.js?rev=3554">Revision Log</a></li>
      </ul>
    </div>
    <div id="content" class="browser">
      <h1>
        <a class="first" title="Go to root directory" href="/browser?rev=3554">root</a>
        <span class="sep">/</span>
        <a title="View trunk" href="/browser/trunk?rev=3554">trunk</a>
        <span class="sep">/</span>
        <a title="View plugins" href="/browser/trunk/plugins?rev=3554">plugins</a>
        <span class="sep">/</span>
        <a title="View metadata" href="/browser/trunk/plugins/metadata?rev=3554">metadata</a>
        <span class="sep">/</span>
        <a title="View jquery.metadata.js" href="/browser/trunk/plugins/metadata/jquery.metadata.js?rev=3554">jquery.metadata.js</a>
    <span class="sep">@</span>
      <a href="/changeset/3554" title="View changeset 3554">3554</a>
  </h1>
      <div id="jumprev">
        <form action="" method="get">
          <div>
            <label for="rev">
              View revision:</label>
            <input type="text" id="rev" name="rev" value="3554" size="6" />
          </div>
        </form>
      </div>
      <div id="jumploc">
        <form action="" method="get">
          <div class="buttons">
            <label for="preselected">Visit:</label>
            <select id="preselected" name="preselected">
              <option selected="selected"></option>
              <optgroup label="branches">
                <option value="/browser/trunk">trunk</option><option value="/browser/branches/1.2">branches/1.2</option><option value="/browser/branches/1.2-fx">branches/1.2-fx</option><option value="/browser/branches/event_enhancements">branches/event_enhancements</option><option value="/browser/branches/jake-dev">branches/jake-dev</option><option value="/browser/branches/joern-dev">branches/joern-dev</option><option value="/browser/branches/john-dev">branches/john-dev</option><option value="/browser/branches/kelvin-dev">branches/kelvin-dev</option><option value="/browser/branches/paul-dev">branches/paul-dev</option><option value="/browser/branches/paulm-dev">branches/paulm-dev</option><option value="/browser/branches/plugins">branches/plugins</option><option value="/browser/branches/richard-dev">branches/richard-dev</option><option value="/browser/branches/sean-dev">branches/sean-dev</option><option value="/browser/branches/stefan-dev">branches/stefan-dev</option><option value="/browser/branches/tane-dev">branches/tane-dev</option><option value="/browser/branches/yehuda-dev">branches/yehuda-dev</option>
              </optgroup><optgroup label="tags">
                <option value="/browser/tags/1.0?rev=509">tags/1.0</option><option value="/browser/tags/1.0.1?rev=509">tags/1.0.1</option><option value="/browser/tags/1.0.2?rev=481">tags/1.0.2</option><option value="/browser/tags/1.0.3?rev=506">tags/1.0.3</option><option value="/browser/tags/1.0.4?rev=697">tags/1.0.4</option><option value="/browser/tags/1.1?rev=1075">tags/1.1</option><option value="/browser/tags/1.1.1?rev=1156">tags/1.1.1</option><option value="/browser/tags/1.1.2?rev=1465">tags/1.1.2</option><option value="/browser/tags/1.1.3?rev=2200">tags/1.1.3</option><option value="/browser/tags/1.1.3.1?rev=2243">tags/1.1.3.1</option><option value="/browser/tags/1.1.3a?rev=1938">tags/1.1.3a</option><option value="/browser/tags/1.1.4?rev=2862">tags/1.1.4</option><option value="/browser/tags/1.1a?rev=932">tags/1.1a</option><option value="/browser/tags/1.1b?rev=996">tags/1.1b</option><option value="/browser/tags/1.2?rev=3219">tags/1.2</option><option value="/browser/tags/1.2.1?rev=3353">tags/1.2.1</option><option value="/browser/tags/plugins?rev=3735">tags/plugins</option>
              </optgroup>
            </select>
            <input type="submit" value="Go!" title="Jump to the chosen preselected path" />
          </div>
        </form>
      </div>
      <table id="info" summary="Revision info">
        <tr>
          <th scope="col">
            Revision <a href="/changeset/3554">3554</a>, <span title="3817 bytes">3.7 kB</span>
            (checked in by joern.zaefferer, <a class="timeline" href="/timeline?from=2007-10-04T20%3A49%3A16Z%2B0000&amp;precision=second" title="2007-10-04T20:49:16Z+0000 in Timeline">2 months</a> ago)
          </th>
        </tr>
        <tr>
          <td class="message searchable">
              <p>
Patches from Will for compability with Firefox 1.0.x and for packed variable shrinking; reanimated testsuite, showing a bug introduced by an optimiazation in jQuery when selecting by ID <br />
</p>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <ul class="props">
              <li>
                  Property <strong>svn:keywords</strong> set to
                    <em><code>Id</code></em>
              </li>
            </ul>
          </td>
        </tr>
      </table>
      <div id="preview" class="searchable">
    <table class="code"><thead><tr><th class="lineno" title="Line numbers">Line</th><th class="content"> </th></tr></thead><tbody><tr><th id="L1"><a href="#L1">1</a></th><td>/*</td></tr><tr><th id="L2"><a href="#L2">2</a></th><td> * Metadata - jQuery plugin for parsing metadata from elements</td></tr><tr><th id="L3"><a href="#L3">3</a></th><td> *</td></tr><tr><th id="L4"><a href="#L4">4</a></th><td> * Copyright (c) 2006 John Resig, Yehuda Katz, J�rn Zaefferer</td></tr><tr><th id="L5"><a href="#L5">5</a></th><td> *</td></tr><tr><th id="L6"><a href="#L6">6</a></th><td> * Dual licensed under the MIT and GPL licenses:</td></tr><tr><th id="L7"><a href="#L7">7</a></th><td> *   http://www.opensource.org/licenses/mit-license.php</td></tr><tr><th id="L8"><a href="#L8">8</a></th><td> *   http://www.gnu.org/licenses/gpl.html</td></tr><tr><th id="L9"><a href="#L9">9</a></th><td> *</td></tr><tr><th id="L10"><a href="#L10">10</a></th><td> * Revision: $Id$</td></tr><tr><th id="L11"><a href="#L11">11</a></th><td> *</td></tr><tr><th id="L12"><a href="#L12">12</a></th><td> */</td></tr><tr><th id="L13"><a href="#L13">13</a></th><td></td></tr><tr><th id="L14"><a href="#L14">14</a></th><td>/**</td></tr><tr><th id="L15"><a href="#L15">15</a></th><td> * Sets the type of metadata to use. Metadata is encoded in JSON, and each property</td></tr><tr><th id="L16"><a href="#L16">16</a></th><td> * in the JSON will become a property of the element itself.</td></tr><tr><th id="L17"><a href="#L17">17</a></th><td> *</td></tr><tr><th id="L18"><a href="#L18">18</a></th><td> * There are three supported types of metadata storage:</td></tr><tr><th id="L19"><a href="#L19">19</a></th><td> *</td></tr><tr><th id="L20"><a href="#L20">20</a></th><td> *   attr:  Inside an attribute. The name parameter indicates *which* attribute.</td></tr><tr><th id="L21"><a href="#L21">21</a></th><td> *          </td></tr><tr><th id="L22"><a href="#L22">22</a></th><td> *   class: Inside the class attribute, wrapped in curly braces: { }</td></tr><tr><th id="L23"><a href="#L23">23</a></th><td> *   </td></tr><tr><th id="L24"><a href="#L24">24</a></th><td> *   elem:  Inside a child element (e.g. a script tag). The</td></tr><tr><th id="L25"><a href="#L25">25</a></th><td> *          name parameter indicates *which* element.</td></tr><tr><th id="L26"><a href="#L26">26</a></th><td> *          </td></tr><tr><th id="L27"><a href="#L27">27</a></th><td> * The metadata for an element is loaded the first time the element is accessed via jQuery.</td></tr><tr><th id="L28"><a href="#L28">28</a></th><td> *</td></tr><tr><th id="L29"><a href="#L29">29</a></th><td> * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements</td></tr><tr><th id="L30"><a href="#L30">30</a></th><td> * matched by expr, then redefine the metadata type and run another $(expr) for other elements.</td></tr><tr><th id="L31"><a href="#L31">31</a></th><td> * </td></tr><tr><th id="L32"><a href="#L32">32</a></th><td> * @name $.meta.setType</td></tr><tr><th id="L33"><a href="#L33">33</a></th><td> *</td></tr><tr><th id="L34"><a href="#L34">34</a></th><td> * @example &lt;p id="one" class="some_class {item_id: 1, item_label: 'Label'}"&gt;This is a p&lt;/p&gt;</td></tr><tr><th id="L35"><a href="#L35">35</a></th><td> * @before $.meta.setType("class")</td></tr><tr><th id="L36"><a href="#L36">36</a></th><td> * @after $("#one").data().item_id == 1; $("#one")[0].item_label == "Label"</td></tr><tr><th id="L37"><a href="#L37">37</a></th><td> * @desc Reads metadata from the class attribute</td></tr><tr><th id="L38"><a href="#L38">38</a></th><td> * </td></tr><tr><th id="L39"><a href="#L39">39</a></th><td> * @example &lt;p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}"&gt;This is a p&lt;/p&gt;</td></tr><tr><th id="L40"><a href="#L40">40</a></th><td> * @before $.meta.setType("attr", "data")</td></tr><tr><th id="L41"><a href="#L41">41</a></th><td> * @after $("#one").data().item_id == 1; $("#one")[0].item_label == "Label"</td></tr><tr><th id="L42"><a href="#L42">42</a></th><td> * @desc Reads metadata from a "data" attribute</td></tr><tr><th id="L43"><a href="#L43">43</a></th><td> * </td></tr><tr><th id="L44"><a href="#L44">44</a></th><td> * @example &lt;p id="one" class="some_class"&gt;&lt;script&gt;{item_id: 1, item_label: 'Label'}&lt;/script&gt;This is a p&lt;/p&gt;</td></tr><tr><th id="L45"><a href="#L45">45</a></th><td> * @before $.meta.setType("elem", "script")</td></tr><tr><th id="L46"><a href="#L46">46</a></th><td> * @after $("#one").data().item_id == 1; $("#one")[0].item_label == "Label"</td></tr><tr><th id="L47"><a href="#L47">47</a></th><td> * @desc Reads metadata from a nested script element</td></tr><tr><th id="L48"><a href="#L48">48</a></th><td> * </td></tr><tr><th id="L49"><a href="#L49">49</a></th><td> * @param String type The encoding type</td></tr><tr><th id="L50"><a href="#L50">50</a></th><td> * @param String name The name of the attribute to be used to get metadata (optional)</td></tr><tr><th id="L51"><a href="#L51">51</a></th><td> * @cat Plugins/Metadata</td></tr><tr><th id="L52"><a href="#L52">52</a></th><td> * @descr Sets the type of encoding to be used when loading metadata for the first time</td></tr><tr><th id="L53"><a href="#L53">53</a></th><td> * @type undefined</td></tr><tr><th id="L54"><a href="#L54">54</a></th><td> * @see data()</td></tr><tr><th id="L55"><a href="#L55">55</a></th><td> */</td></tr><tr><th id="L56"><a href="#L56">56</a></th><td></td></tr><tr><th id="L57"><a href="#L57">57</a></th><td>(function($) {</td></tr><tr><th id="L58"><a href="#L58">58</a></th><td>    // settings</td></tr><tr><th id="L59"><a href="#L59">59</a></th><td>    $.meta = {</td></tr><tr><th id="L60"><a href="#L60">60</a></th><td>      type: "class",</td></tr><tr><th id="L61"><a href="#L61">61</a></th><td>      name: "metadata",</td></tr><tr><th id="L62"><a href="#L62">62</a></th><td>      setType: function(type,name){</td></tr><tr><th id="L63"><a href="#L63">63</a></th><td>        this.type = type;</td></tr><tr><th id="L64"><a href="#L64">64</a></th><td>        this.name = name;</td></tr><tr><th id="L65"><a href="#L65">65</a></th><td>      },</td></tr><tr><th id="L66"><a href="#L66">66</a></th><td>      cre: /({.*})/,</td></tr><tr><th id="L67"><a href="#L67">67</a></th><td>      single: 'metadata'</td></tr><tr><th id="L68"><a href="#L68">68</a></th><td>    };</td></tr><tr><th id="L69"><a href="#L69">69</a></th><td>    </td></tr><tr><th id="L70"><a href="#L70">70</a></th><td>    // reference to original setArray()</td></tr><tr><th id="L71"><a href="#L71">71</a></th><td>    var setArray = $.fn.setArray;</td></tr><tr><th id="L72"><a href="#L72">72</a></th><td>    </td></tr><tr><th id="L73"><a href="#L73">73</a></th><td>    // define new setArray()</td></tr><tr><th id="L74"><a href="#L74">74</a></th><td>    $.fn.setArray = function(arr){</td></tr><tr><th id="L75"><a href="#L75">75</a></th><td>        return setArray.apply( this, arguments ).each(function(){</td></tr><tr><th id="L76"><a href="#L76">76</a></th><td>          if ( this.metaDone || this.nodeType == 9 || $.isXMLDoc(this) ) return;</td></tr><tr><th id="L77"><a href="#L77">77</a></th><td>          </td></tr><tr><th id="L78"><a href="#L78">78</a></th><td>          var data = "{}";</td></tr><tr><th id="L79"><a href="#L79">79</a></th><td>          </td></tr><tr><th id="L80"><a href="#L80">80</a></th><td>          if ( $.meta.type == "class" ) {</td></tr><tr><th id="L81"><a href="#L81">81</a></th><td>            var m = $.meta.cre.exec( this.className );</td></tr><tr><th id="L82"><a href="#L82">82</a></th><td>            if ( m )</td></tr><tr><th id="L83"><a href="#L83">83</a></th><td>              data = m[1];</td></tr><tr><th id="L84"><a href="#L84">84</a></th><td>          } else if ( $.meta.type == "elem" ) {</td></tr><tr><th id="L85"><a href="#L85">85</a></th><td>            if( !this.getElementsByTagName ) return;</td></tr><tr><th id="L86"><a href="#L86">86</a></th><td>            var e = this.getElementsByTagName($.meta.name);</td></tr><tr><th id="L87"><a href="#L87">87</a></th><td>            if ( e.length )</td></tr><tr><th id="L88"><a href="#L88">88</a></th><td>              data = $.trim(e[0].innerHTML);</td></tr><tr><th id="L89"><a href="#L89">89</a></th><td>          } else if ( this.getAttribute != undefined ) {</td></tr><tr><th id="L90"><a href="#L90">90</a></th><td>            var attr = this.getAttribute( $.meta.name );</td></tr><tr><th id="L91"><a href="#L91">91</a></th><td>            if ( attr )</td></tr><tr><th id="L92"><a href="#L92">92</a></th><td>              data = attr;</td></tr><tr><th id="L93"><a href="#L93">93</a></th><td>          }</td></tr><tr><th id="L94"><a href="#L94">94</a></th><td>          </td></tr><tr><th id="L95"><a href="#L95">95</a></th><td>          if ( data.indexOf( '{' ) &lt;0 )</td></tr><tr><th id="L96"><a href="#L96">96</a></th><td>            data = "{" + data + "}";</td></tr><tr><th id="L97"><a href="#L97">97</a></th><td>    </td></tr><tr><th id="L98"><a href="#L98">98</a></th><td>          data = eval("(" + data + ")");</td></tr><tr><th id="L99"><a href="#L99">99</a></th><td>    </td></tr><tr><th id="L100"><a href="#L100">100</a></th><td>          if ( $.meta.single )</td></tr><tr><th id="L101"><a href="#L101">101</a></th><td>            this[ $.meta.single ] = data;</td></tr><tr><th id="L102"><a href="#L102">102</a></th><td>          else</td></tr><tr><th id="L103"><a href="#L103">103</a></th><td>            $.extend( this, data );</td></tr><tr><th id="L104"><a href="#L104">104</a></th><td>          </td></tr><tr><th id="L105"><a href="#L105">105</a></th><td>          this.metaDone = true;</td></tr><tr><th id="L106"><a href="#L106">106</a></th><td>        });</td></tr><tr><th id="L107"><a href="#L107">107</a></th><td>    };</td></tr><tr><th id="L108"><a href="#L108">108</a></th><td>    </td></tr><tr><th id="L109"><a href="#L109">109</a></th><td>    /**</td></tr><tr><th id="L110"><a href="#L110">110</a></th><td>     * Returns the metadata object for the first member of the jQuery object.</td></tr><tr><th id="L111"><a href="#L111">111</a></th><td>     *</td></tr><tr><th id="L112"><a href="#L112">112</a></th><td>     * @name data</td></tr><tr><th id="L113"><a href="#L113">113</a></th><td>     * @descr Returns element's metadata object</td></tr><tr><th id="L114"><a href="#L114">114</a></th><td>     * @type jQuery</td></tr><tr><th id="L115"><a href="#L115">115</a></th><td>     * @cat Plugins/Metadata</td></tr><tr><th id="L116"><a href="#L116">116</a></th><td>     */</td></tr><tr><th id="L117"><a href="#L117">117</a></th><td>    $.fn.data = function() {</td></tr><tr><th id="L118"><a href="#L118">118</a></th><td>      return this[0][$.meta.single];</td></tr><tr><th id="L119"><a href="#L119">119</a></th><td>    };</td></tr><tr><th id="L120"><a href="#L120">120</a></th><td>})(jQuery);</td></tr></tbody></table>
      </div>
      <div id="help">
        <strong>Note:</strong> See <a href="/wiki/TracBrowser">TracBrowser</a>
        for help on using the browser.
      </div>
      <div id="anydiff">
        <form action="/diff" method="get">
          <div class="buttons">
            <input type="hidden" name="new_path" value="/trunk/plugins/metadata/jquery.metadata.js" />
            <input type="hidden" name="old_path" value="/trunk/plugins/metadata/jquery.metadata.js" />
            <input type="hidden" name="new_rev" value="3554" />
            <input type="hidden" name="old_rev" value="3554" />
            <input type="submit" value="View changes..." title="Select paths and revs for Diff" />
          </div>
        </form>
      </div>
    </div>
      <div id="altlinks">
        <h3>Download in other formats:</h3>
        <ul>
          <li class="first">
            <a href="/browser/trunk/plugins/metadata/jquery.metadata.js?rev=3554&amp;format=txt">Plain Text</a>
          </li><li class="last">
            <a href="/export/3554/trunk/plugins/metadata/jquery.metadata.js">Original Format</a>
          </li>
        </ul>
      </div>
    </div>
</div></div>
<div id="jq-footer"><div id="jq-footerwrap">
        <p>© 2007 <a href="http://ejohn.org/">John Resig</a> and the <a href="http://docs.jquery.com/About/Contributors">jQuery team</a>.</p>
        <ul>                <li><a href="http://docs.jquery.com/Downloading_jQuery">Download</a></li>
                <li><a href="http://docs.jquery.com/">Documentation</a></li>
                <li><a href="http://jquery.com/plugins/">Plugins</a></li>
                <li><a href="http://docs.jquery.com/Tutorials">Tutorials</a></li>
                <li><a href="http://jquery.com/discuss/">Discuss</a></li>
                <li><a href="http://jquery.com/blog/">Blog</a></li>
        </ul>
</div></div>
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script><script type="text/javascript">_uacct="UA-1076265-1";urchinTracker();</script>
  </body>
</html>
