Skip to content
Browse files

adding ajaxCrawlable (code name: fragbango) functionality. code and u…

…nit tests are done, just needs documentation and examples.
  • Loading branch information...
1 parent aa12c92 commit 8a8530f26e2398cd65aef6a044f0438233ca3dd6 @cowboy committed
View
4 README.markdown
@@ -1,7 +1,7 @@
# jQuery BBQ: Back Button & Query Library #
[http://benalman.com/projects/jquery-bbq-plugin/](http://benalman.com/projects/jquery-bbq-plugin/)
-Version: 1.3pre, Last updated: 8/20/2010
+Version: 1.3pre, Last updated: 8/26/2010
jQuery BBQ enables simple, yet powerful bookmarkable #hash history via a cross-browser window.onhashchange event. In addition, jQuery BBQ provides a full jQuery.deparam() method, along with both fragment and query string parse and merge utility methods.
@@ -54,7 +54,7 @@ Safari: Back Button from a different domain
## Release History ##
-1.3pre - (8/20/2010) Integrated jQuery hashchange event v1.3, which adds document.title and document.domain support in IE6/7, BlackBerry support, better Iframe hiding for accessibility reasons, and the new jQuery.fn.hashchange "shortcut" method. Added the jQuery.param.sorted method which reduces the possibility of extraneous hashchange event triggering.
+1.3pre - (8/26/2010) Integrated jQuery hashchange event v1.3, which adds document.title and document.domain support in IE6/7, BlackBerry support, better Iframe hiding for accessibility reasons, and the new jQuery.fn.hashchange "shortcut" method. Added the jQuery.param.sorted method which reduces the possibility of extraneous hashchange event triggering. Added the jQuery.param.fragment.ajaxCrawlable method which can be used to enable Google "AJAX Crawlable mode."
1.2.1 - (2/17/2010) Actually fixed the stale window.location Safari bug from jQuery hashchange event in BBQ, which was the main reason for the previous release!
1.2 - (2/16/2010) Integrated jQuery hashchange event v1.2, which fixes a Safari bug, the event can now be bound before DOM ready, and IE6/7 page should no longer scroll when the event is first bound. Also added the jQuery.param.fragment.noEscape method, and reworked the hashchange event (BBQ) internal "add" method to be compatible with changes made to the jQuery 1.4.2 special events API.
1.1.1 - (1/22/2010) Integrated jQuery hashchange event v1.1, which fixes an obscure IE8 EmulateIE7 meta tag compatibility mode bug.
View
42 docs/files/jquery-ba-bbq-js.html
22 additions, 20 deletions not shown because the diff is too large. Please use a local Git client to view these changes.
View
2 docs/index/Files.html
@@ -13,7 +13,7 @@
<div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_hashchange_event" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>jQuery hashchange event</a></td></tr></table>
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFile><b>Version: 1.3pre, Last updated: 8/20/2010</b></div></div><div class=CToolTip id="tt2"><div class=CFile><b>Version: 1.3, Last updated: 7/21/2010</b></div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFile><b>Version: 1.3pre, Last updated: 8/26/2010</b></div></div><div class=CToolTip id="tt2"><div class=CFile><b>Version: 1.3, Last updated: 7/21/2010</b></div></div><!--END_ND_TOOLTIPS-->
</div><!--Index-->
View
26 docs/index/Functions.html
@@ -11,45 +11,49 @@
-<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; I &middot; J &middot; K &middot; L &middot; M &middot; <a href="#N">N</a> &middot; O &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>deparam</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.elemUrlAttr" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>elemUrlAttr</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fragment</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.fragment" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.fragment" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment(build_url)" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>fragment(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.getState" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>getState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>hashchange</a>, <span class=IParent>jQuery.fn</span></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.noEscape" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>noEscape</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pushState" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>pushState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>querystring</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.querystring" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring(build_url)" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>querystring(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.removeState" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.sorted" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>sorted</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr></table>
+<div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; I &middot; J &middot; K &middot; L &middot; M &middot; <a href="#N">N</a> &middot; O &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.ajaxCrawlable" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>ajaxCrawlable</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>deparam</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.elemUrlAttr" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>elemUrlAttr</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fragment</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.fragment" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.fragment" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment(build_url)" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>fragment(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.getState" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>getState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>hashchange</a>, <span class=IParent>jQuery.fn</span></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.noEscape" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>noEscape</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pushState" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>pushState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>querystring</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.querystring" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring(build_url)" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>querystring(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.removeState" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.sorted" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>sorted</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction>Deserialize a params string into an object, optionally coercing numbers, booleans, null and undefined values; this method is the counterpart to the internal jQuery.param method.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction>TODO: DESCRIBE</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2"><div class=CFunction>Get the internal &ldquo;Default URL attribute per tag&rdquo; list, or augment the list with additional tag-attribute pairs, in case the defaults are insufficient.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt2"><div class=CFunction>Deserialize a params string into an object, optionally coercing numbers, booleans, null and undefined values; this method is the counterpart to the internal jQuery.param method.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3"><div class=CFunction>Parse the fragment (hash) from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt4"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing fragment/hash params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt5"><div class=CFunction>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt6"><div class=CFunction>Merge a URL, with or without pre-existing fragment (hash) params, plus any object, params string or URL containing fragment (hash) params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt3"><div class=CFunction>Get the internal &ldquo;Default URL attribute per tag&rdquo; list, or augment the list with additional tag-attribute pairs, in case the defaults are insufficient.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt7"><div class=CFunction>Retrieves the current &lsquo;state&rsquo; from the browser history, parsing location.hash for a specific key or returning an object containing the entire state, optionally coercing numbers, booleans, null and undefined values.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt4"><div class=CFunction>Parse the fragment (hash) from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt5"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing fragment/hash params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt6"><div class=CFunction>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt7"><div class=CFunction>Merge a URL, with or without pre-existing fragment (hash) params, plus any object, params string or URL containing fragment (hash) params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt8"><div class=CFunction>Bind a handler to the window.onhashchange event or trigger all bound window.onhashchange event handlers. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt8"><div class=CFunction>Retrieves the current &lsquo;state&rsquo; from the browser history, parsing location.hash for a specific key or returning an object containing the entire state, optionally coercing numbers, booleans, null and undefined values.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt9"><div class=CFunction>Specify characters that will be left unescaped when fragments are created or merged using jQuery.param.fragment, or when the fragment is modified using jQuery.bbq.pushState. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt9"><div class=CFunction>Bind a handler to the window.onhashchange event or trigger all bound window.onhashchange event handlers. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CFunction>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt10"><div class=CFunction>Specify characters that will be left unescaped when fragments are created or merged using jQuery.param.fragment, or when the fragment is modified using jQuery.bbq.pushState. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt11"><div class=CFunction>Parse the query string from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt12"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing query string params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt13"><div class=CFunction>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt14"><div class=CFunction>Merge a URL, with or without pre-existing query string params, plus any object, params string or URL containing query string params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt11"><div class=CFunction>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt15"><div class=CFunction>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt12"><div class=CFunction>Parse the query string from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt13"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing query string params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt14"><div class=CFunction>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt15"><div class=CFunction>Merge a URL, with or without pre-existing query string params, plus any object, params string or URL containing query string params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt16"><div class=CFunction>Returns a params string equivalent to that returned by the internal jQuery.param method, but sorted, which makes it suitable for use as a cache key.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt16"><div class=CFunction>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt17"><div class=CFunction>Returns a params string equivalent to that returned by the internal jQuery.param method, but sorted, which makes it suitable for use as a cache key.</div></div><!--END_ND_TOOLTIPS-->
</div><!--Index-->
View
32 docs/index/General.html
@@ -11,57 +11,61 @@
-<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; I &middot; <a href="#J">J</a> &middot; <a href="#K">K</a> &middot; <a href="#L">L</a> &middot; M &middot; <a href="#N">N</a> &middot; O &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange.delay" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>delay</a>, <span class=IParent>jQuery.<wbr>fn.<wbr>hashchange</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>deparam</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Deparam(from_string)" class=ISymbol>Deparam(from string)</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange.domain" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>domain</a>, <span class=IParent>jQuery.<wbr>fn.<wbr>hashchange</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Element_manipulation" class=ISymbol>Element manipulation</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.elemUrlAttr" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>elemUrlAttr</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Events" class=ISymbol>Events</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Examples" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>Examples</a></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Files" class=ISymbol>Files</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fragment</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.fragment" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.fragment" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment(build_url)" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>fragment(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Functions" class=ISymbol>Functions</a></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.getState" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>getState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>hashchange</a>, <span class=IParent>jQuery.fn</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#hashchange_event" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>hashchange event</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#hashchange_event(BBQ)" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>hashchange event(BBQ)</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#History,hashchange_event" class=ISymbol>History,hashchange event</a></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_hashchange_event" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>jQuery hashchange event</a></td></tr><tr><td class=IHeading><a name="K"></a>K</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Known_issues" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>Known issues</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#License" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>License</a></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.noEscape" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>noEscape</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Param(to_string)" class=ISymbol>Param(to string)</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Properties" class=ISymbol>Properties</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pushState" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>pushState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>querystring</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.querystring" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring(build_url)" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>querystring(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Release_History" class=ISymbol>Release History</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.removeState" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.sorted" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>sorted</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange.src" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=ISymbol>src</a>, <span class=IParent>jQuery.<wbr>fn.<wbr>hashchange</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Support_and_Testing" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>Support and Testing</a></td></tr></table>
+<div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; I &middot; <a href="#J">J</a> &middot; <a href="#K">K</a> &middot; <a href="#L">L</a> &middot; M &middot; <a href="#N">N</a> &middot; O &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.ajaxCrawlable" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>ajaxCrawlable</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange.delay" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>delay</a>, <span class=IParent>jQuery.<wbr>fn.<wbr>hashchange</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>deparam</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Deparam(from_string)" class=ISymbol>Deparam(from string)</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange.domain" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>domain</a>, <span class=IParent>jQuery.<wbr>fn.<wbr>hashchange</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Element_manipulation" class=ISymbol>Element manipulation</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.elemUrlAttr" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>elemUrlAttr</a>, <span class=IParent>jQuery</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Events" class=ISymbol>Events</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Examples" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>Examples</a></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Files" class=ISymbol>Files</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fragment</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.fragment" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.fragment" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment(build_url)" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>fragment(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Functions" class=ISymbol>Functions</a></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.getState" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>getState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>hashchange</a>, <span class=IParent>jQuery.fn</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#hashchange_event" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>hashchange event</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#hashchange_event(BBQ)" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>hashchange event(BBQ)</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#History,hashchange_event" class=ISymbol>History,hashchange event</a></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_hashchange_event" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>jQuery hashchange event</a></td></tr><tr><td class=IHeading><a name="K"></a>K</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Known_issues" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>Known issues</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#License" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>License</a></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.noEscape" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>noEscape</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Param(to_string)" class=ISymbol>Param(to string)</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Properties" class=ISymbol>Properties</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pushState" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>pushState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>querystring</span><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.querystring" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=IParent>jQuery.<wbr>param</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring(build_url)" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>querystring(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Release_History" class=ISymbol>Release History</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.removeState" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.sorted" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=ISymbol>sorted</a>, <span class=IParent>jQuery.<wbr>param</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.hashchange.src" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>src</a>, <span class=IParent>jQuery.<wbr>fn.<wbr>hashchange</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#Support_and_Testing" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>Support and Testing</a></td></tr></table>
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty>The numeric interval (in milliseconds) at which the hashchange event polling loop executes. </div></div><div class=CToolTip id="tt2"><div class=CFunction>Deserialize a params string into an object, optionally coercing numbers, booleans, null and undefined values; this method is the counterpart to the internal jQuery.param method.</div></div><div class=CToolTip id="tt3"><div class=CProperty>If you&rsquo;re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFunction>TODO: DESCRIBE</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt4"><div class=CFunction>Get the internal &ldquo;Default URL attribute per tag&rdquo; list, or augment the list with additional tag-attribute pairs, in case the defaults are insufficient.</div></div><div class=CToolTip id="tt5"><div class=CGeneric>These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt2"><div class=CProperty>The numeric interval (in milliseconds) at which the hashchange event polling loop executes. </div></div><div class=CToolTip id="tt3"><div class=CFunction>Deserialize a params string into an object, optionally coercing numbers, booleans, null and undefined values; this method is the counterpart to the internal jQuery.param method.</div></div><div class=CToolTip id="tt4"><div class=CProperty>If you&rsquo;re setting document.domain in your JavaScript, and you want hash history to work in IE6/7, not only must this property be set, but you must also set document.domain BEFORE jQuery is loaded into the page. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt6"><div class=CFunction>Parse the fragment (hash) from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt7"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing fragment/hash params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt8"><div class=CFunction>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt9"><div class=CFunction>Merge a URL, with or without pre-existing fragment (hash) params, plus any object, params string or URL containing fragment (hash) params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt5"><div class=CFunction>Get the internal &ldquo;Default URL attribute per tag&rdquo; list, or augment the list with additional tag-attribute pairs, in case the defaults are insufficient.</div></div><div class=CToolTip id="tt6"><div class=CGeneric>These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CFunction>Retrieves the current &lsquo;state&rsquo; from the browser history, parsing location.hash for a specific key or returning an object containing the entire state, optionally coercing numbers, booleans, null and undefined values.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt7"><div class=CFunction>Parse the fragment (hash) from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt8"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing fragment/hash params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt9"><div class=CFunction>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt10"><div class=CFunction>Merge a URL, with or without pre-existing fragment (hash) params, plus any object, params string or URL containing fragment (hash) params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt11"><div class=CFunction>Bind a handler to the window.onhashchange event or trigger all bound window.onhashchange event handlers. </div></div><div class=CToolTip id="tt12"><div class=CEvent>Fired when location.hash changes. </div></div><div class=CToolTip id="tt13"><div class=CEvent>In jQuery 1.4 and newer, the event object passed into any hashchange event callback is augmented with a copy of the location.hash fragment at the time the event was triggered as its event.fragment property. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt11"><div class=CFunction>Retrieves the current &lsquo;state&rsquo; from the browser history, parsing location.hash for a specific key or returning an object containing the entire state, optionally coercing numbers, booleans, null and undefined values.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt14"><div class=CFile><b>Version: 1.3pre, Last updated: 8/20/2010</b></div></div><div class=CToolTip id="tt15"><div class=CFile><b>Version: 1.3, Last updated: 7/21/2010</b></div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt12"><div class=CFunction>Bind a handler to the window.onhashchange event or trigger all bound window.onhashchange event handlers. </div></div><div class=CToolTip id="tt13"><div class=CEvent>Fired when location.hash changes. </div></div><div class=CToolTip id="tt14"><div class=CEvent>In jQuery 1.4 and newer, the event object passed into any hashchange event callback is augmented with a copy of the location.hash fragment at the time the event was triggered as its event.fragment property. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt16"><div class=CGeneric>While this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt15"><div class=CFile><b>Version: 1.3pre, Last updated: 8/26/2010</b></div></div><div class=CToolTip id="tt16"><div class=CFile><b>Version: 1.3, Last updated: 7/21/2010</b></div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt17"><div class=CGeneric>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt17"><div class=CGeneric>While this jQuery hashchange event implementation is quite stable and robust, there are a few unfortunate browser bugs surrounding expected hashchange event-based behaviors, independent of any JavaScript window.onhashchange abstraction. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt18"><div class=CFunction>Specify characters that will be left unescaped when fragments are created or merged using jQuery.param.fragment, or when the fragment is modified using jQuery.bbq.pushState. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt18"><div class=CGeneric>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt19"><div class=CFunction>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt19"><div class=CFunction>Specify characters that will be left unescaped when fragments are created or merged using jQuery.param.fragment, or when the fragment is modified using jQuery.bbq.pushState. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt20"><div class=CFunction>Parse the query string from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt21"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing query string params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt22"><div class=CFunction>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt23"><div class=CFunction>Merge a URL, with or without pre-existing query string params, plus any object, params string or URL containing query string params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt20"><div class=CFunction>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt24"><div class=CFunction>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt21"><div class=CFunction>Parse the query string from a URL or the current window.location, deserializing it into an object, optionally coercing numbers, booleans, null and undefined values.</div></div><div class=CToolTip id="tt22"><div class=CFunction>Update URL attribute in one or more elements, merging the current URL (with or without pre-existing query string params) plus any params object or string into a new URL, which is then set into that attribute. </div></div><div class=CToolTip id="tt23"><div class=CFunction>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</div></div><div class=CToolTip id="tt24"><div class=CFunction>Merge a URL, with or without pre-existing query string params, plus any object, params string or URL containing query string params into a new URL.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt25"><div class=CFunction>Returns a params string equivalent to that returned by the internal jQuery.param method, but sorted, which makes it suitable for use as a cache key.</div></div><div class=CToolTip id="tt26"><div class=CProperty>If, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.fn.hashchange.domain), you can do so using this property. </div></div><div class=CToolTip id="tt27"><div class=CGeneric>Information about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt25"><div class=CFunction>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound hashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt26"><div class=CFunction>Returns a params string equivalent to that returned by the internal jQuery.param method, but sorted, which makes it suitable for use as a cache key.</div></div><div class=CToolTip id="tt27"><div class=CProperty>If, for some reason, you need to specify an Iframe src file (for example, when setting document.domain as in jQuery.fn.hashchange.domain), you can do so using this property. </div></div><div class=CToolTip id="tt28"><div class=CGeneric>Information about what version or versions of jQuery this plugin has been tested with, what browsers it has been tested in, and where the unit tests reside (so you can test it yourself).</div></div><!--END_ND_TOOLTIPS-->
</div><!--Index-->
View
2 docs/javascript/searchdata.js
@@ -32,7 +32,7 @@ var indexSectionsWithContent = {
"Functions": {
"Symbols": false,
"Numbers": false,
- "A": false,
+ "A": true,
"B": false,
"C": false,
"D": true,
View
4 docs/nd/Data/FileInfo.nd
@@ -1,4 +1,4 @@
1.4
JavaScript
-/srv/projects/jquery-bbq-dev/jquery.ba-bbq.js 1282314036 1 jQuery BBQ: Back Button & Query Library
-/srv/projects/jquery-bbq-dev/jquery.ba-bbq.min.js 1282316475 0 /srv/projects/jquery-bbq-dev/jquery.ba-bbq.min.js
+/srv/projects/jquery-bbq-dev/jquery.ba-bbq.js 1282876144 1 jQuery BBQ: Back Button & Query Library
+/srv/projects/jquery-bbq-dev/jquery.ba-bbq.min.js 1282876213 0 /srv/projects/jquery-bbq-dev/jquery.ba-bbq.min.js
View
BIN docs/nd/Data/IndexInfo.nd
Binary file not shown.
View
BIN docs/nd/Data/SymbolTable.nd
Binary file not shown.
View
20 docs/search/FunctionsA.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ajaxCrawlable><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.ajaxCrawlable" target=_parent class=ISymbol>ajaxCrawlable</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
View
20 docs/search/GeneralA.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+
+<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
+if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
+
+<!-- Generated by Natural Docs, version 1.4 -->
+<!-- http://www.naturaldocs.org -->
+
+<!-- saved from url=(0026)http://www.naturaldocs.org -->
+
+
+
+
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_ajaxCrawlable><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment.ajaxCrawlable" target=_parent class=ISymbol>ajaxCrawlable</a>, <span class=IParent>jQuery.<wbr>param.<wbr>fragment</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults", "HTML");
+searchResults.Search();
+--></script></div><script language=JavaScript><!--
+if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html>
View
75 jquery.ba-bbq.js
@@ -1,5 +1,5 @@
/*!
- * jQuery BBQ: Back Button & Query Library - v1.3pre - 8/20/2010
+ * jQuery BBQ: Back Button & Query Library - v1.3pre - 8/26/2010
* http://benalman.com/projects/jquery-bbq-plugin/
*
* Copyright (c) 2010 "Cowboy" Ben Alman
@@ -9,7 +9,7 @@
// Script: jQuery BBQ: Back Button & Query Library
//
-// *Version: 1.3pre, Last updated: 8/20/2010*
+// *Version: 1.3pre, Last updated: 8/26/2010*
//
// Project Home - http://benalman.com/projects/jquery-bbq-plugin/
// GitHub - http://github.com/cowboy/jquery-bbq/
@@ -45,12 +45,14 @@
//
// About: Release History
//
-// 1.3pre - (8/20/2010) Integrated <jQuery hashchange event> v1.3, which adds
+// 1.3pre - (8/26/2010) Integrated <jQuery hashchange event> v1.3, which adds
// document.title and document.domain support in IE6/7, BlackBerry
// support, better Iframe hiding for accessibility reasons, and the new
// <jQuery.fn.hashchange> "shortcut" method. Added the
// <jQuery.param.sorted> method which reduces the possibility of
-// extraneous hashchange event triggering.
+// extraneous hashchange event triggering. Added the
+// <jQuery.param.fragment.ajaxCrawlable> method which can be used to
+// enable Google "AJAX Crawlable mode."
// 1.2.1 - (2/17/2010) Actually fixed the stale window.location Safari bug from
// <jQuery hashchange event> in BBQ, which was the main reason for the
// previous release!
@@ -108,15 +110,18 @@
str_querystring = 'querystring',
str_fragment = 'fragment',
str_elemUrlAttr = 'elemUrlAttr',
- str_location = 'location',
str_href = 'href',
str_src = 'src',
// Reused RegExp.
- re_trim_querystring = /^.*\?|#.*$/g,
- re_trim_fragment = /^.*\#/,
+ re_params_querystring = /^.*\?|#.*$/g,
+ re_params_fragment,
+ re_fragment,
re_no_escape,
+ ajax_crawlable,
+ fragment_prefix,
+
// Used by jQuery.elemUrlAttr.
elemUrlAttr_cache = {};
@@ -139,7 +144,7 @@
// Get location.hash (or what you'd expect location.hash to be) sans any
// leading #. Thanks for making this necessary, Firefox!
function get_fragment( url ) {
- return url.replace( /^[^#]*#?(.*)$/, '$1' );
+ return url.replace( re_fragment, '$2' );
};
// Get location.search (or what you'd expect location.search to be) sans any
@@ -259,7 +264,7 @@
// matches[1] = url part that precedes params, not including trailing ?/#
// matches[2] = params, not including leading ?/#
// matches[3] = if in 'querystring' mode, hash including leading #, otherwise ''
- matches = url.match( is_fragment ? /^([^#]*)\#?(.*)$/ : /^([^#?]*)\??([^#]*)(#?.*)/ );
+ matches = url.match( is_fragment ? re_fragment : /^([^#?]*)\??([^#]*)(#?.*)/ );
// Get the hash if in 'querystring' mode, and it exists.
hash = matches[3] || '';
@@ -267,7 +272,7 @@
if ( merge_mode === 2 && is_string( params ) ) {
// If merge_mode is 2 and params is a string, merge the fragment / query
// string into the URL wholesale, without converting it into an object.
- qs = params.replace( is_fragment ? re_trim_fragment : re_trim_querystring, '' );
+ qs = params.replace( is_fragment ? re_params_fragment : re_params_querystring, '' );
} else {
// Convert relevant params in url to object.
@@ -299,12 +304,12 @@
// Build URL from the base url, querystring and hash. In 'querystring'
// mode, ? is only added if a query string exists. In 'fragment' mode, #
// is always added.
- result = matches[1] + ( is_fragment ? '#' : qs || !matches[1] ? '?' : '' ) + qs + hash;
+ result = matches[1] + ( is_fragment ? fragment_prefix : qs || !matches[1] ? '?' : '' ) + qs + hash;
} else {
// If URL was passed in, parse params from URL string, otherwise parse
// params from window.location.
- result = get_func( url !== undefined ? url : window[ str_location ][ str_href ] );
+ result = get_func( url !== undefined ? url : location.href );
}
return result;
@@ -401,6 +406,41 @@
// "uglifying up the URL" the most.
jq_param_fragment.noEscape( ',/' );
+ // Method: jQuery.param.fragment.ajaxCrawlable
+ //
+ // TODO: DESCRIBE
+ //
+ // Usage:
+ //
+ // > jQuery.param.fragment.ajaxCrawlable( [ state ] );
+ //
+ // Arguments:
+ //
+ // state - (Boolean) TODO: DESCRIBE
+ //
+ // Returns:
+ //
+ // (Boolean) The current ajaxCrawlable state.
+
+ jq_param_fragment.ajaxCrawlable = function( state ) {
+ if ( state !== undefined ) {
+ if ( state ) {
+ re_params_fragment = /^.*(?:#!|#)/;
+ re_fragment = /^([^#]*)(?:#!|#)?(.*)$/;
+ fragment_prefix = '#!';
+ } else {
+ re_params_fragment = /^.*#/;
+ re_fragment = /^([^#]*)#?(.*)$/;
+ fragment_prefix = '#';
+ }
+ ajax_crawlable = !!state;
+ }
+
+ return ajax_crawlable;
+ };
+
+ jq_param_fragment.ajaxCrawlable( 0 );
+
// Section: Deparam (from string)
//
// Method: jQuery.deparam
@@ -566,7 +606,7 @@
url_or_params = jq_param[ is_fragment ? str_fragment : str_querystring ]();
} else {
url_or_params = is_string( url_or_params )
- ? url_or_params.replace( is_fragment ? re_trim_fragment : re_trim_querystring, '' )
+ ? url_or_params.replace( is_fragment ? re_params_fragment : re_params_querystring, '' )
: url_or_params;
}
@@ -770,13 +810,12 @@
var has_args = params !== undefined,
// Merge params into window.location using $.param.fragment.
- url = jq_param_fragment( window[ str_location ][ str_href ],
+ url = jq_param_fragment( location.href,
has_args ? params : {}, has_args ? merge_mode : 2 );
- // Set new window.location.href. If hash is empty, use just # to prevent
- // browser from reloading the page. Note that Safari 3 & Chrome barf on
- // location.hash = '#'.
- window[ str_location ][ str_href ] = url + ( /#/.test( url ) ? '' : '#' );
+ // Set new window.location.href. Note that Safari 3 & Chrome barf on
+ // location.hash = '#' so the entire URL is set.
+ location.href = url;
};
// Method: jQuery.bbq.getState
View
4 jquery.ba-bbq.min.js
@@ -1,12 +1,12 @@
/*
- * jQuery BBQ: Back Button & Query Library - v1.3pre - 8/20/2010
+ * jQuery BBQ: Back Button & Query Library - v1.3pre - 8/26/2010
* http://benalman.com/projects/jquery-bbq-plugin/
*
* Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
-(function($,q){var i,n=Array.prototype.slice,s=decodeURIComponent,a=$.param,j,c,m,w,b=$.bbq=$.bbq||{},r,v,k,e=$.event.special,d="hashchange",B="querystring",E="fragment",z="elemUrlAttr",g="location",l="href",u="src",y=/^.*\?|#.*$/g,x=/^.*\#/,h,D={};function F(G){return typeof G==="string"}function C(H){var G=n.call(arguments,1);return function(){return H.apply(this,G.concat(n.call(arguments)))}}function o(G){return G.replace(/^[^#]*#?(.*)$/,"$1")}function p(G){return G.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(I,N,G,J,H){var P,M,L,O,K;if(J!==i){L=G.match(I?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);K=L[3]||"";if(H===2&&F(J)){M=J.replace(I?x:y,"")}else{O=m(L[2]);J=F(J)?m[I?E:B](J):J;M=H===2?J:H===1?$.extend({},J,O):$.extend({},O,J);M=j(M);if(I){M=M.replace(h,s)}}P=L[1]+(I?"#":M||!L[1]?"?":"")+M+K}else{P=N(G!==i?G:q[g][l])}return P}a[B]=C(f,0,p);a[E]=c=C(f,1,o);a.sorted=j=function(H,I){var G=[],J={};$.each(a(H,I).split("&"),function(N,K){var M=K.replace(/(?:%5B|=).*$/,""),L=J[M];if(!L){L=J[M]=[];G.push(M)}L.push(K)});return $.map(G.sort(),function(K){return J[K]}).join("&")};c.noEscape=function(H){H=H||"";var G=$.map(H.split(""),encodeURIComponent);h=new RegExp(G.join("|"),"g")};c.noEscape(",/");$.deparam=m=function(J,G){var I={},H={"true":!0,"false":!1,"null":null};$.each(J.replace(/\+/g," ").split("&"),function(M,R){var L=R.split("="),Q=s(L[0]),K,P=I,N=0,S=Q.split("]["),O=S.length-1;if(/\[/.test(S[0])&&/\]$/.test(S[O])){S[O]=S[O].replace(/\]$/,"");S=S.shift().split("[").concat(S);O=S.length-1}else{O=0}if(L.length===2){K=s(L[1]);if(G){K=K&&!isNaN(K)?+K:K==="undefined"?i:H[K]!==i?H[K]:K}if(O){for(;N<=O;N++){Q=S[N]===""?P.length:S[N];P=P[Q]=N<O?P[Q]||(S[N+1]&&isNaN(S[N+1])?{}:[]):K}}else{if($.isArray(I[Q])){I[Q].push(K)}else{if(I[Q]!==i){I[Q]=[I[Q],K]}else{I[Q]=K}}}}else{if(Q){I[Q]=G?i:""}}});return I};function A(I,G,H){if(G===i||typeof G==="boolean"){H=G;G=a[I?E:B]()}else{G=F(G)?G.replace(I?x:y,""):G}return m(G,H)}m[B]=C(A,0);m[E]=w=C(A,1);$[z]||($[z]=function(G){return $.extend(D,G)})({a:l,base:l,iframe:u,img:u,input:u,form:"action",link:l,script:u});k=$[z];function t(J,H,I,G){if(!F(I)&&typeof I!=="object"){G=I;I=H;H=i}return this.each(function(){var M=$(this),K=H||k()[(this.nodeName||"").toLowerCase()]||"",L=K&&M.attr(K)||"";M.attr(K,a[J](L,I,G))})}$.fn[B]=C(t,B);$.fn[E]=C(t,E);b.pushState=r=function(J,G){if(F(J)&&/^#/.test(J)&&G===i){G=2}var I=J!==i,H=c(q[g][l],I?J:{},I?G:2);q[g][l]=H+(/#/.test(H)?"":"#")};b.getState=v=function(G,H){return G===i||typeof G==="boolean"?w(G):w(H)[G]};b.removeState=function(G){var H={};if(G!==i){H=v();$.each($.isArray(G)?G:arguments,function(J,I){delete H[I]})}r(H,2)};e[d]=$.extend(e[d],{add:function(G){var I;function H(K){var J=K[E]=c();K.getState=function(L,M){return L===i||typeof L==="boolean"?m(J,L):m(J,M)[L]};I.apply(this,arguments)}if($.isFunction(G)){I=G;return H}else{I=G.handler;G.handler=H}}})})(jQuery,this);
+(function($,r){var h,n=Array.prototype.slice,t=decodeURIComponent,a=$.param,j,c,m,y,b=$.bbq=$.bbq||{},s,x,k,e=$.event.special,d="hashchange",B="querystring",F="fragment",z="elemUrlAttr",l="href",w="src",p=/^.*\?|#.*$/g,u,H,g,i,C,E={};function G(I){return typeof I==="string"}function D(J){var I=n.call(arguments,1);return function(){return J.apply(this,I.concat(n.call(arguments)))}}function o(I){return I.replace(H,"$2")}function q(I){return I.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(K,P,I,L,J){var R,O,N,Q,M;if(L!==h){N=I.match(K?H:/^([^#?]*)\??([^#]*)(#?.*)/);M=N[3]||"";if(J===2&&G(L)){O=L.replace(K?u:p,"")}else{Q=m(N[2]);L=G(L)?m[K?F:B](L):L;O=J===2?L:J===1?$.extend({},L,Q):$.extend({},Q,L);O=j(O);if(K){O=O.replace(g,t)}}R=N[1]+(K?C:O||!N[1]?"?":"")+O+M}else{R=P(I!==h?I:location.href)}return R}a[B]=D(f,0,q);a[F]=c=D(f,1,o);a.sorted=j=function(J,K){var I=[],L={};$.each(a(J,K).split("&"),function(P,M){var O=M.replace(/(?:%5B|=).*$/,""),N=L[O];if(!N){N=L[O]=[];I.push(O)}N.push(M)});return $.map(I.sort(),function(M){return L[M]}).join("&")};c.noEscape=function(J){J=J||"";var I=$.map(J.split(""),encodeURIComponent);g=new RegExp(I.join("|"),"g")};c.noEscape(",/");c.ajaxCrawlable=function(I){if(I!==h){if(I){u=/^.*(?:#!|#)/;H=/^([^#]*)(?:#!|#)?(.*)$/;C="#!"}else{u=/^.*#/;H=/^([^#]*)#?(.*)$/;C="#"}i=!!I}return i};c.ajaxCrawlable(0);$.deparam=m=function(L,I){var K={},J={"true":!0,"false":!1,"null":null};$.each(L.replace(/\+/g," ").split("&"),function(O,T){var N=T.split("="),S=t(N[0]),M,R=K,P=0,U=S.split("]["),Q=U.length-1;if(/\[/.test(U[0])&&/\]$/.test(U[Q])){U[Q]=U[Q].replace(/\]$/,"");U=U.shift().split("[").concat(U);Q=U.length-1}else{Q=0}if(N.length===2){M=t(N[1]);if(I){M=M&&!isNaN(M)?+M:M==="undefined"?h:J[M]!==h?J[M]:M}if(Q){for(;P<=Q;P++){S=U[P]===""?R.length:U[P];R=R[S]=P<Q?R[S]||(U[P+1]&&isNaN(U[P+1])?{}:[]):M}}else{if($.isArray(K[S])){K[S].push(M)}else{if(K[S]!==h){K[S]=[K[S],M]}else{K[S]=M}}}}else{if(S){K[S]=I?h:""}}});return K};function A(K,I,J){if(I===h||typeof I==="boolean"){J=I;I=a[K?F:B]()}else{I=G(I)?I.replace(K?u:p,""):I}return m(I,J)}m[B]=D(A,0);m[F]=y=D(A,1);$[z]||($[z]=function(I){return $.extend(E,I)})({a:l,base:l,iframe:w,img:w,input:w,form:"action",link:l,script:w});k=$[z];function v(L,J,K,I){if(!G(K)&&typeof K!=="object"){I=K;K=J;J=h}return this.each(function(){var O=$(this),M=J||k()[(this.nodeName||"").toLowerCase()]||"",N=M&&O.attr(M)||"";O.attr(M,a[L](N,K,I))})}$.fn[B]=D(v,B);$.fn[F]=D(v,F);b.pushState=s=function(L,I){if(G(L)&&/^#/.test(L)&&I===h){I=2}var K=L!==h,J=c(location.href,K?L:{},K?I:2);location.href=J};b.getState=x=function(I,J){return I===h||typeof I==="boolean"?y(I):y(J)[I]};b.removeState=function(I){var J={};if(I!==h){J=x();$.each($.isArray(I)?I:arguments,function(L,K){delete J[K]})}s(J,2)};e[d]=$.extend(e[d],{add:function(I){var K;function J(M){var L=M[F]=c();M.getState=function(N,O){return N===h||typeof N==="boolean"?m(L,N):m(L,O)[N]};K.apply(this,arguments)}if($.isFunction(I)){K=I;return J}else{K=I.handler;I.handler=J}}})})(jQuery,this);
/*
* jQuery hashchange event - v1.3 - 7/21/2010
* http://benalman.com/projects/jquery-hashchange-plugin/
View
292 unit/unit.js
@@ -7,7 +7,8 @@ $(function(){ // START CLOSURE
var old_jquery = $.fn.jquery < '1.4',
is_chrome = /chrome/i.test( navigator.userAgent ),
params_init = 'a[]=4&a[]=5&a[]=6&b[x][]=7&b[y]=8&b[z][]=9&b[z][]=0&b[z][]=true&b[z][]=false&b[z][]=undefined&b[z][]=&c=1',
- init_url
+ init_url,
+ ajaxcrawlable_init = $.param.fragment.ajaxCrawlable(),
aps = Array.prototype.slice;
if ( $.param.querystring() !== params_init || $.param.fragment() !== params_init ) {
@@ -70,7 +71,12 @@ module( 'jQuery.param' );
var params_obj = { a:['4','5','6'], b:{x:['7'], y:'8', z:['9','0','true','false','undefined','']}, c:'1' },
params_obj_coerce = { a:[4,5,6], b:{x:[7], y:8, z:[9,0,true,false,undefined,'']}, c:1 },
params_str = params_init,
- params_str_old = 'a=4&a=5&a=6&b=[object+Object]&c=1';
+ params_str_old = 'a=4&a=5&a=6&b=[object+Object]&c=1',
+
+ // If a params fragment starts with ! and BBQ is not in ajaxCrawlable mode,
+ // things can get very ugly, very quickly.
+ params_obj_bang = { "!a":['4'], a:['5','6'], b:{x:['7'], y:'8', z:['9','0','true','false','undefined','']}, c:'1' },
+ params_obj_bang_coerce = { "!a":[4], a:[5,6], b:{x:[7], y:8, z:[9,0,true,false,undefined,'']}, c:1 };
test( 'jQuery.param.sorted', function() {
var tests = [
@@ -108,7 +114,7 @@ test( 'jQuery.param.sorted', function() {
});
}
- expect( tests.length * 2 );
+ expect( tests.length * 2 + 6 );
$.each( tests, function(i,test){
var unsorted = $.param( test.obj, test.traditional ),
@@ -117,6 +123,14 @@ test( 'jQuery.param.sorted', function() {
equals( decodeURIComponent( sorted ), old_jquery && test.expected_old || test.expected, 'params should be sorted' );
same( $.deparam( unsorted, true ), $.deparam( sorted, true ), 'sorted params should deparam the same as unsorted params' )
});
+
+ equals( $.param.fragment( 'foo', '#b=2&a=1' ), 'foo#a=1&b=2', 'params should be sorted' );
+ equals( $.param.fragment( 'foo', '#b=2&a=1', 1 ), 'foo#a=1&b=2', 'params should be sorted' );
+ equals( $.param.fragment( 'foo', '#b=2&a=1', 2 ), 'foo#b=2&a=1', 'params should NOT be sorted' );
+ equals( $.param.fragment( 'foo#c=3&a=4', '#b=2&a=1' ), 'foo#a=1&b=2&c=3', 'params should be sorted' );
+ equals( $.param.fragment( 'foo#c=3&a=4', '#b=2&a=1', 1 ), 'foo#a=4&b=2&c=3', 'params should be sorted' );
+ equals( $.param.fragment( 'foo#c=3&a=4', '#b=2&a=1', 2 ), 'foo#b=2&a=1', 'params should NOT be sorted' );
+
});
test( 'jQuery.param.querystring', function() {
@@ -136,25 +150,6 @@ test( 'jQuery.param.querystring', function() {
equals( $.param.querystring( 'http://a:b@example.com:1234/foo.html?' + params_str + '#bippity-boppity-boo' ), params_str, 'params string from url' );
});
-test( 'jQuery.param.fragment', function() {
- expect( 12 );
-
- equals( $.param.fragment( 'http://example.com/' ), '', 'properly identifying params' );
- equals( $.param.fragment( 'http://example.com/?foo' ),'', 'properly identifying params' );
- equals( $.param.fragment( 'http://example.com/?foo#bar' ),'bar', 'properly identifying params' );
- equals( $.param.fragment( 'http://example.com/?foo#bar?baz' ),'bar?baz', 'properly identifying params' );
- equals( $.param.fragment( 'http://example.com/#foo' ),'foo', 'properly identifying params' );
- equals( $.param.fragment( 'http://example.com/#foo?bar' ),'foo?bar', 'properly identifying params' );
-
- equals( $.param.fragment(), params_str, 'params string from window.location' );
- equals( $.param.fragment( '#' + params_str ), params_str, 'params string from url' );
- equals( $.param.fragment( 'foo.html#' + params_str ), params_str, 'params string from url' );
- equals( $.param.fragment( 'http://a:b@example.com:1234/foo.html#' + params_str ), params_str, 'params string from url' );
- equals( $.param.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#' + params_str ), params_str, 'params string from url' );
-
- equals( $.param.fragment( '#', { foo: '/a,b@c$d+e&f=g h' } ), '#foo=/a,b%40c%24d%2Be%26f%3Dg+h', '/, should be unescaped, everything else but space (+) should be urlencoded' );
-});
-
test( 'jQuery.param.querystring - build URL', function() {
expect( 10 );
@@ -255,8 +250,51 @@ test( 'jQuery.param.querystring - build URL', function() {
});
+test( 'jQuery.param.fragment', function() {
+ expect( 29 );
+
+ equals( $.param.fragment( 'http://example.com/' ), '', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo' ),'', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#bar' ),'bar', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#bar?baz' ),'bar?baz', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#foo' ),'foo', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#foo?bar' ),'foo?bar', 'properly identifying params' );
+
+ equals( $.param.fragment( 'http://example.com/' ), '', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo' ),'', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#!bar' ),'!bar', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#!bar?baz' ),'!bar?baz', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#!foo' ),'!foo', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#!foo?bar' ),'!foo?bar', 'properly identifying params' );
+
+ equals( $.param.fragment(), params_str, 'params string from window.location' );
+ equals( $.param.fragment( '#' + params_str ), params_str, 'params string from url' );
+ equals( $.param.fragment( 'foo.html#' + params_str ), params_str, 'params string from url' );
+ equals( $.param.fragment( 'http://a:b@example.com:1234/foo.html#' + params_str ), params_str, 'params string from url' );
+ equals( $.param.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#' + params_str ), params_str, 'params string from url' );
+
+ $.param.fragment.ajaxCrawlable( true );
+
+ equals( $.param.fragment( 'http://example.com/' ), '', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo' ),'', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#bar' ),'bar', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#bar?baz' ),'bar?baz', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#foo' ),'foo', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#foo?bar' ),'foo?bar', 'properly identifying params' );
+
+ equals( $.param.fragment( 'http://example.com/' ), '', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo' ),'', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#!bar' ),'bar', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/?foo#!bar?baz' ),'bar?baz', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#!foo' ),'foo', 'properly identifying params' );
+ equals( $.param.fragment( 'http://example.com/#!foo?bar' ),'foo?bar', 'properly identifying params' );
+
+ $.param.fragment.ajaxCrawlable( false );
+
+});
+
test( 'jQuery.param.fragment - build URL', function() {
- expect( 10 );
+ expect( 40 );
function fake_encode( params_str ) {
return '#' + $.map( params_str.split('&'), encodeURIComponent ).join('&').replace( /%3D/g, '=' ).replace( /%2B/g, '+' );
@@ -352,8 +390,72 @@ test( 'jQuery.param.fragment - build URL', function() {
);
+ $.param.fragment.ajaxCrawlable( true );
+
+ equals( $.param.fragment( 'foo', {} ) , 'foo#!', '$.param.fragment( url, Object )' );
+ equals( $.param.fragment( 'foo', { b:2, a:1 } ) , 'foo#!a=1&b=2', '$.param.fragment( url, Object )' );
+ equals( $.param.fragment( 'foo#', { b:2, a:1 } ) , 'foo#!a=1&b=2', '$.param.fragment( url, Object )' );
+ equals( $.param.fragment( 'foo#!', { b:2, a:1 } ) , 'foo#!a=1&b=2', '$.param.fragment( url, Object )' );
+ equals( $.param.fragment( 'foo#c=3&a=4', { b:2, a:1 } ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, Object )' );
+ equals( $.param.fragment( 'foo#!c=3&a=4', { b:2, a:1 } ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, Object )' );
+
+ equals( $.param.fragment( 'foo', '' ) , 'foo#!', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo', 'b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#', 'b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!', 'b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#c=3&a=4', 'b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!c=3&a=4', 'b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, String )' );
+
+ equals( $.param.fragment( 'foo', '#' ) , 'foo#!', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo', '#b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#', '#b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!', '#b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#c=3&a=4', '#b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!c=3&a=4', '#b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, String )' );
+
+ equals( $.param.fragment( 'foo', '#!' ) , 'foo#!', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo', '#!b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#', '#!b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!', '#!b=2&a=1' ) , 'foo#!a=1&b=2', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#c=3&a=4', '#!b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!c=3&a=4', '#!b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.param.fragment( url, String )' );
+
+ $.param.fragment.ajaxCrawlable( false );
+
+ // If a params fragment starts with ! and BBQ is not in ajaxCrawlable mode,
+ // things can get very ugly, very quickly.
+ equals( $.param.fragment( 'foo', '#!' ) , 'foo#!=', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo', '#!b=2&a=1' ) , 'foo#!b=2&a=1', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#', '#!b=2&a=1' ) , 'foo#!b=2&a=1', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!', '#!b=2&a=1' ) , 'foo#!=&!b=2&a=1', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#c=3&a=4', '#!b=2&a=1' ) , 'foo#!b=2&a=1&c=3', '$.param.fragment( url, String )' );
+ equals( $.param.fragment( 'foo#!c=3&a=4', '#!b=2&a=1' ) , 'foo#!b=2&!c=3&a=1', '$.param.fragment( url, String )' );
+
});
+test( 'jQuery.param.fragment.ajaxCrawlable', function() {
+ expect( 5 );
+
+ equals( ajaxcrawlable_init, false, 'ajaxCrawlable is disabled by default' );
+ equals( $.param.fragment.ajaxCrawlable( true ), true, 'enabling ajaxCrawlable should return true' );
+ equals( $.param.fragment.ajaxCrawlable(), true, 'ajaxCrawlable is now enabled' );
+ equals( $.param.fragment.ajaxCrawlable( false ), false, 'disabling ajaxCrawlable should return false' );
+ equals( $.param.fragment.ajaxCrawlable(), false, 'ajaxCrawlable is now disabled' );
+});
+
+test( 'jQuery.param.fragment.noEscape', function() {
+ expect( 2 );
+
+ equals( $.param.fragment( '#', { foo: '/a,b@c$d+e&f=g h!' } ), '#foo=/a,b%40c%24d%2Be%26f%3Dg+h!', '/, should be unescaped, everything else but space (+) should be urlencoded' );
+
+ $.param.fragment.ajaxCrawlable( true );
+
+ equals( $.param.fragment( '#', { foo: '/a,b@c$d+e&f=g h!' } ), '#!foo=/a,b%40c%24d%2Be%26f%3Dg+h!', '/, should be unescaped, everything else but ! and space (+) should be urlencoded' );
+
+ $.param.fragment.ajaxCrawlable( false );
+});
+
+
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
@@ -394,12 +496,13 @@ test( 'jQuery.deparam.querystring', function() {
});
test( 'jQuery.deparam.fragment', function() {
- expect( 12 );
+ expect( 36 );
same( $.deparam.fragment(), params_obj, 'params obj from window.location' );
same( $.deparam.fragment( true ), params_obj_coerce, 'params obj from window.location, coerced' );
same( $.deparam.fragment( params_str ), params_obj, 'params obj from string' );
same( $.deparam.fragment( params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+
same( $.deparam.fragment( '#' + params_str ), params_obj, 'params obj from string' );
same( $.deparam.fragment( '#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
same( $.deparam.fragment( 'foo.html#' + params_str ), params_obj, 'params obj from string' );
@@ -408,6 +511,39 @@ test( 'jQuery.deparam.fragment', function() {
same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#' + params_str ), params_obj, 'params obj from string' );
same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+
+ // If a params fragment starts with ! and BBQ is not in ajaxCrawlable mode,
+ // things can get very ugly, very quickly.
+ same( $.deparam.fragment( '#!' + params_str ), params_obj_bang, 'params obj from string' );
+ same( $.deparam.fragment( '#!' + params_str, true ), params_obj_bang_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'foo.html#!' + params_str ), params_obj_bang, 'params obj from string' );
+ same( $.deparam.fragment( 'foo.html#!' + params_str, true ), params_obj_bang_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#!' + params_str ), params_obj_bang, 'params obj from string' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#!' + params_str, true ), params_obj_bang_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#!' + params_str ), params_obj_bang, 'params obj from string' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#!' + params_str, true ), params_obj_bang_coerce, 'params obj from string, coerced' );
+
+ $.param.fragment.ajaxCrawlable( true );
+
+ same( $.deparam.fragment( '#' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( '#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'foo.html#' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( 'foo.html#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+
+ same( $.deparam.fragment( '#!' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( '#!' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'foo.html#!' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( 'foo.html#!' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#!' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html#!' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#!' + params_str ), params_obj, 'params obj from string' );
+ same( $.deparam.fragment( 'http://a:b@example.com:1234/foo.html?bippity-boppity-boo#!' + params_str, true ), params_obj_coerce, 'params obj from string, coerced' );
+
+ $.param.fragment.ajaxCrawlable( false );
});
////////////////////////////////////////////////////////////////////////////////
@@ -561,7 +697,7 @@ test( 'jQuery.fn.querystring', function() {
});
test( 'jQuery.fn.fragment', function() {
- expect( 60 );
+ expect( 240 );
function fake_encode( params_str ) {
return '#' + $.map( params_str.split('&'), encodeURIComponent ).join('&').replace( /%3D/g, '=' ).replace( /%2B/g, '+' );
@@ -573,25 +709,8 @@ test( 'jQuery.fn.fragment', function() {
run_many_tests(
// execute this for each array item
- function(){
- var container,
- elems;
-
- container = init_url_attr( container, current_url );
- elems = container.children('span');
- equals( elems.length, 1, 'select the correct elements' );
- equals( elems.fragment.apply( elems, [ 'arbitrary_attr' ].concat( aps.call( arguments ) ) ), elems, 'pass fragment' );
-
- container = init_url_attr( container, current_url );
- elems = container.children('a, link');
- equals( elems.length, 2, 'select the correct elements' );
- equals( elems.fragment.apply( elems, [ 'href' ].concat( aps.call( arguments ) ) ), elems, 'pass fragment' );
-
- container = init_url_attr( container, current_url );
- elems = container.children();
- equals( elems.fragment.apply( elems, aps.call( arguments ) ), elems, 'pass fragment' );
-
- current_url = test_url_attr( container );
+ function( params, merge_mode ){
+ current_url = test_fn_fragment( current_url, params, merge_mode );
},
// tests:
@@ -674,6 +793,68 @@ test( 'jQuery.fn.fragment', function() {
);
+ $.param.fragment.ajaxCrawlable( true );
+
+ function test_fn_fragment( url, params, merge_mode ) {
+ var container,
+ elems;
+
+ container = init_url_attr( container, url );
+ elems = container.children('span');
+ equals( elems.length, 1, 'select the correct elements' );
+ equals( elems.fragment( 'arbitrary_attr', params, merge_mode ), elems, 'pass fragment' );
+
+ container = init_url_attr( container, url );
+ elems = container.children('a, link');
+ equals( elems.length, 2, 'select the correct elements' );
+ equals( elems.fragment( params, merge_mode ), elems, 'pass fragment' );
+
+ container = init_url_attr( container, url );
+ elems = container.children();
+ equals( elems.fragment( params, merge_mode ), elems, 'pass fragment' );
+
+ return test_url_attr( container );
+ };
+
+ equals( test_fn_fragment( 'foo', {} ) , 'foo#!', '$.fn.fragment( url, Object )' );
+ equals( test_fn_fragment( 'foo', { b:2, a:1 } ) , 'foo#!a=1&b=2', '$.fn.fragment( url, Object )' );
+ equals( test_fn_fragment( 'foo#', { b:2, a:1 } ) , 'foo#!a=1&b=2', '$.fn.fragment( url, Object )' );
+ equals( test_fn_fragment( 'foo#!', { b:2, a:1 } ) , 'foo#!a=1&b=2', '$.fn.fragment( url, Object )' );
+ equals( test_fn_fragment( 'foo#c=3&a=4', { b:2, a:1 } ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, Object )' );
+ equals( test_fn_fragment( 'foo#!c=3&a=4', { b:2, a:1 } ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, Object )' );
+
+ equals( test_fn_fragment( 'foo', '' ) , 'foo#!', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo', 'b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#', 'b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!', 'b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#c=3&a=4', 'b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!c=3&a=4', 'b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, String )' );
+
+ equals( test_fn_fragment( 'foo', '#' ) , 'foo#!', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo', '#b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#', '#b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!', '#b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#c=3&a=4', '#b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!c=3&a=4', '#b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, String )' );
+
+ equals( test_fn_fragment( 'foo', '#!' ) , 'foo#!', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo', '#!b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#', '#!b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!', '#!b=2&a=1' ) , 'foo#!a=1&b=2', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#c=3&a=4', '#!b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!c=3&a=4', '#!b=2&a=1' ) , 'foo#!a=1&b=2&c=3', '$.fn.fragment( url, String )' );
+
+ $.param.fragment.ajaxCrawlable( false );
+
+ // If a params fragment starts with ! and BBQ is not in ajaxCrawlable mode,
+ // things can get very ugly, very quickly.
+ equals( test_fn_fragment( 'foo', '#!' ) , 'foo#!=', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo', '#!b=2&a=1' ) , 'foo#!b=2&a=1', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#', '#!b=2&a=1' ) , 'foo#!b=2&a=1', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!', '#!b=2&a=1' ) , 'foo#!=&!b=2&a=1', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#c=3&a=4', '#!b=2&a=1' ) , 'foo#!b=2&a=1&c=3', '$.fn.fragment( url, String )' );
+ equals( test_fn_fragment( 'foo#!c=3&a=4', '#!b=2&a=1' ) , 'foo#!b=2&!c=3&a=1', '$.fn.fragment( url, String )' );
+
});
////////////////////////////////////////////////////////////////////////////////
@@ -682,9 +863,9 @@ test( 'jQuery.fn.fragment', function() {
module( 'jQuery.bbq' );
test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(), window.onhashchange', function() {
- expect( old_jquery ? 85 : 157 );
+ expect( old_jquery ? 95 : 167 );
- var a, b, c, d, e, f, x, y, hash, obj, event, msg = 'Testing window.onhashchange and history';
+ var a, b, c, d, e, f, x, y, hash, hash_actual, obj, event, msg = 'Testing window.onhashchange and history';
$.bbq.pushState();
equals( window.location.hash.replace( /^#/, ''), '', 'window.location hash should be empty' );
@@ -699,6 +880,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
event = evt;
hash = $.param.fragment();
+ hash_actual = location.hash;
obj = { str: $.bbq.getState(), coerce: $.bbq.getState( true ) };
a = { str: $.bbq.getState( 'a' ), coerce: $.bbq.getState( 'a', true ) };
b = { str: $.bbq.getState( 'b' ), coerce: $.bbq.getState( 'b', true ) };
@@ -741,6 +923,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
[ { a:'2' } ],
function(result){
+ equals( hash_actual, '#' + hash, 'hash should begin with #!' );
same( obj.str, { a:'2', b:'1' }, '$.bbq.getState()' );
same( obj.coerce, { a:2, b:1 }, '$.bbq.getState( true )' );
equals( a.str, '2', '$.bbq.getState( "a" )' );
@@ -756,6 +939,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
[ { b:'2' } ],
function(result){
+ equals( hash_actual, '#' + hash, 'hash should begin with #!' );
same( obj.str, { a:'2', b:'2' }, '$.bbq.getState()' );
same( obj.coerce, { a:2, b:2 }, '$.bbq.getState( true )' );
equals( b.str, '2', '$.bbq.getState( "b" )' );
@@ -771,6 +955,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
[ { c:true, d:false, e:'undefined', f:'' } ],
function(result){
+ equals( hash_actual, '#' + hash, 'hash should begin with #!' );
same( obj.str, { a:'2', b:'2', c:'true', d:'false', e:'undefined', f:'' }, '$.bbq.getState()' );
same( obj.coerce, { a:2, b:2, c:true, d:false, e:undefined, f:'' }, '$.bbq.getState( true )' );
equals( c.str, 'true', '$.bbq.getState( "c" )' );
@@ -796,10 +981,15 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
},
function(result){
+ $.param.fragment.ajaxCrawlable( true );
+ },
+
+ function(result){
$.bbq.removeState( 'c' );
},
function(result){
+ equals( hash_actual, '#!' + hash, 'hash should begin with #!' );
same( obj.str, { a:'2', b:'2', d:'false', e:'undefined', f:'' }, '$.bbq.getState()' );
same( obj.coerce, { a:2, b:2, d:false, e:undefined, f:'' }, '$.bbq.getState( true )' );
equals( a.str, '2', '$.bbq.getState( "a" )' );
@@ -837,6 +1027,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
},
function(result){
+ equals( hash_actual, '#!' + hash, 'hash should begin with #!' );
same( obj.str, { a:'2', b:'2' }, '$.bbq.getState()' );
same( obj.coerce, { a:2, b:2 }, '$.bbq.getState( true )' );
equals( a.str, '2', '$.bbq.getState( "a" )' );
@@ -874,6 +1065,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
},
function(result){
+ equals( hash_actual, '#!', 'hash should just be #!' );
same( obj.str, {}, '$.bbq.getState()' );
same( obj.coerce, {}, '$.bbq.getState( true )' );
equals( a.str, undefined, '$.bbq.getState( "a" )' );
@@ -918,6 +1110,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
? '[object Object]'
: {x:[7], y:8, z:[9,0,true,false,undefined,'']};
+ equals( hash_actual, '#!' + hash, 'hash should begin with #!' );
same( obj.str, { a:['4','5','6'], b:b_str }, '$.bbq.getState()' );
same( obj.coerce, { a:[4,5,6], b:b_coerce }, '$.bbq.getState( true )' );
same( a.str, ['4','5','6'], '$.bbq.getState( "a" )' );
@@ -940,6 +1133,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
? '[object Object]'
: {x:[7], y:8, z:[9,0,true,false,undefined,'']};
+ equals( hash_actual, '#!' + hash, 'hash should begin with #!' );
same( obj.str, { a:['4','5','6'], b:b_str, c:'2' }, '$.bbq.getState()' );
same( obj.coerce, { a:[4,5,6], b:b_coerce, c:2 }, '$.bbq.getState( true )' );
if ( !old_jquery ) {
@@ -951,6 +1145,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
[ '#/path/to/file.php', 2 ],
function(result){
+ equals( hash_actual, '#!' + hash, 'hash should begin with #!' );
equals( hash, '/path/to/file.php', '$.param.fragment()' );
if ( !old_jquery ) {
equals( event.fragment, '/path/to/file.php', 'event.fragment' );
@@ -960,6 +1155,7 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
[],
function(result){
+ equals( hash_actual, '#!', 'hash should just be #!' );
equals( hash, '', '$.param.fragment()' );
if ( !old_jquery ) {
equals( event.fragment, '', 'event.fragment' );
@@ -1039,6 +1235,10 @@ test( 'jQuery.bbq.pushState(), jQuery.bbq.getState(), jQuery.bbq.removeState(),
ok( !events || !events.hashchange, 'hashchange event unbound' );
},
+ function(result){
+ $.param.fragment.ajaxCrawlable( false );
+ },
+
[ '#all_done' ]
);

0 comments on commit 8a8530f

Please sign in to comment.
Something went wrong with that request. Please try again.