Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Big changes. Broke out the jQuery BBQ event.special window.onhashchan…

…ge functionality into a separate plugin for users who want just the basic event & back button support, without all the extra awesomeness that BBQ provides. This plugin will be included as part of jQuery BBQ, but also be available separately. See jQuery hashchange event plugin for more information. Also added the $.bbq.removeState method and added additional $.deparam examples.
  • Loading branch information...
commit a1cfc5347057762cdb9fbeb19c0acdd629f569c6 1 parent c7d7232
@cowboy cowboy authored
Showing with 3,797 additions and 4,343 deletions.
  1. +1 −1  LICENSE-MIT
  2. +5 −4 README.markdown
  3. +38 −15 docs/files/jquery-ba-bbq-js.html
  4. +1 −1  docs/index/Events.html
  5. +2 −2 docs/index/Files.html
  6. +5 −1 docs/index/Functions.html
  7. +13 −9 docs/index/General.html
  8. +1 −1  docs/index/Properties.html
  9. +3 −3 docs/javascript/searchdata.js
  10. BIN  docs/nd/Data/ConfigFileInfo.nd
  11. +2 −2 docs/nd/Data/FileInfo.nd
  12. BIN  docs/nd/Data/IndexInfo.nd
  13. BIN  docs/nd/Data/PreviousMenuState.nd
  14. BIN  docs/nd/Data/PreviousSettings.nd
  15. BIN  docs/nd/Data/SymbolTable.nd
  16. +1 −1  docs/search/FilesJ.html
  17. +20 −0 docs/search/FunctionsR.html
  18. +1 −1  docs/search/GeneralF.html
  19. +1 −1  docs/search/GeneralH.html
  20. +1 −1  docs/search/GeneralJ.html
  21. +1 −1  docs/search/{PropertiesP.html → GeneralK.html}
  22. +1 −1  docs/search/GeneralP.html
  23. +1 −1  docs/search/GeneralR.html
  24. +20 −0 docs/search/PropertiesH.html
  25. +0 −161 examples/bug-chrome-back-button/index.php
  26. +0 −223 examples/bug-firefox-remote-xhr/index.php
  27. +0 −183 examples/bug-webkit-hash-iframe/child/index.php
  28. +0 −99 examples/bug-webkit-hash-iframe/index.php
  29. +1 −1  examples/config.php
  30. +23 −7 examples/deparam/index.php
  31. +1 −1  examples/fragment-advanced/index.php
  32. +1 −1  examples/fragment-basic/index.php
  33. +1 −1  examples/fragment-jquery-ui-tabs/index.php
  34. +1 −1  examples/index.php
  35. +220 −60 jquery.ba-bbq.js
  36. +12 −3 jquery.ba-bbq.min.js
  37. +1,152 −786 shared/{jquery-1.4pre.js → jquery-1.4a2.js}
  38. +1,042 −0 shared/qunit.js
  39. +22 −923 unit/index.html
  40. +22 −923 unit/jquery-1.3.2.html
  41. +181 −0 unit/qunit.css
  42. +0 −804 unit/testrunner.js
  43. +0 −120 unit/testsuite.css
  44. +1,000 −0 unit/unit.js
View
2  LICENSE-MIT
@@ -1,4 +1,4 @@
-Copyright (c) 2009 "Cowboy" Ben Alman
+Copyright (c) 2010 "Cowboy" Ben Alman
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
View
9 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.0.3, Last updated: 12/2/2009
+Version: 1.1, Last updated: 1/9/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.
@@ -27,10 +27,10 @@ tested with, what browsers it has been tested in, and where the unit tests
reside (so you can test it yourself).
### jQuery Versions ###
-1.3.2, 1.4pre
+1.3.2, 1.4a2
### Browsers Tested ###
-Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome, Opera 9.6-10.
+Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.1.
### Unit Tests ###
[http://benalman.com/code/projects/jquery-bbq/unit/](http://benalman.com/code/projects/jquery-bbq/unit/)
@@ -38,6 +38,7 @@ Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome, Opera 9.6-10.
## Release History ##
+1.1 - (1/9/2010) Broke out the jQuery BBQ event.special window.onhashchange functionality into a separate plugin for users who want just the basic event & back button support, without all the extra awesomeness that BBQ provides. This plugin will be included as part of jQuery BBQ, but also be available separately. See jQuery hashchange event plugin for more information. Also added the $.bbq.removeState method.
1.0.3 - (12/2/2009) Fixed an issue in IE 6 where location.search and location.hash would report incorrectly if the hash contained the ? character. Also $.param.querystring and $.param.fragment will no longer parse params out of a URL that doesn't contain ? or #, respectively.
1.0.2 - (10/10/2009) Fixed an issue in IE 6/7 where the hidden IFRAME caused a "This page contains both secure and nonsecure items." warning when used on an https:// page.
1.0.1 - (10/7/2009) Fixed an issue in IE 8. Since both "IE7" and "IE8 Compatibility View" modes erroneously report that the browser supports the native window.onhashchange event, a slightly more robust test needed to be added.
@@ -45,6 +46,6 @@ Internet Explorer 6-8, Firefox 2-3.6, Safari 3-4, Chrome, Opera 9.6-10.
## License ##
-Copyright (c) 2009 "Cowboy" Ben Alman
+Copyright (c) 2010 "Cowboy" Ben Alman
Dual licensed under the MIT and GPL licenses.
[http://benalman.com/about/license/](http://benalman.com/about/license/)
View
53 docs/files/jquery-ba-bbq-js.html
@@ -11,15 +11,15 @@
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="jQuery_BBQ:Back_ButtonQuery_Library"></a>jQuery BBQ: Back Button &amp; Query Library</h1><div class=CBody><p><b>Version: 1.0.3, Last updated: 12/2/2009</b></p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Project Home</td><td class=CDLDescription><a href="http://benalman.com/projects/jquery-bbq-plugin/" class=LURL target=_top>http://benalman.com/projects/jquery-bbq-plugin/</a></td></tr><tr><td class=CDLEntry>GitHub</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-bbq/" class=LURL target=_top>http://github.com/cowboy/jquery-bbq/</a></td></tr><tr><td class=CDLEntry>Source</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js" class=LURL target=_top>http://github.com<wbr>/cowboy<wbr>/jquery-bbq<wbr>/raw<wbr>/master<wbr>/jquery.ba-bbq.js</a></td></tr><tr><td class=CDLEntry>(Minified)</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js" class=LURL target=_top>http://github.com<wbr>/cowboy<wbr>/jquery-bbq<wbr>/raw<wbr>/master<wbr>/jquery.ba-bbq.min.js</a> (3.2kb)</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jQuery_BBQ:Back_ButtonQuery_Library" >jQuery BBQ: Back Button &amp; Query Library</a></td><td class=SDescription><b>Version: 1.0.3, Last updated: 12/2/2009</b></td></tr><tr class="SGeneric SMarked"><td class=SEntry><a href="#License" >License</a></td><td class=SDescription>Copyright &copy; 2009 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </td></tr><tr class="SGeneric"><td class=SEntry><a href="#Examples" >Examples</a></td><td class=SDescription>These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.</td></tr><tr class="SGeneric SMarked"><td class=SEntry><a href="#Support_and_Testing" >Support and Testing</a></td><td class=SDescription>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).</td></tr><tr class="SGeneric"><td class=SEntry><a href="#Release_History" >Release History</a></td><td class=SDescription></td></tr><tr class="SSection"><td class=SEntry><a href="#Param(to_string)" >Param (to string)</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.param.querystring" >jQuery.<wbr>param.<wbr>querystring</a></td><td class=SDescription>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.param.querystring(build_url)" >jQuery.<wbr>param.<wbr>querystring (build url)</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.param.fragment" >jQuery.<wbr>param.<wbr>fragment</a></td><td class=SDescription>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.param.fragment(build_url)" >jQuery.<wbr>param.<wbr>fragment (build url)</a></td><td class=SDescription>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.</td></tr><tr class="SSection"><td class=SEntry><a href="#Deparam(from_string)" >Deparam (from string)</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.deparam" >jQuery.<wbr>deparam</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.deparam.querystring" >jQuery.<wbr>deparam.<wbr>querystring</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.deparam.fragment" >jQuery.<wbr>deparam.<wbr>fragment</a></td><td class=SDescription>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.</td></tr><tr class="SSection"><td class=SEntry><a href="#Element_manipulation" >Element manipulation</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.elemUrlAttr" >jQuery.<wbr>elemUrlAttr</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.fn.querystring" >jQuery.<wbr>fn.<wbr>querystring</a></td><td class=SDescription>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. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.fn.fragment" >jQuery.<wbr>fn.<wbr>fragment</a></td><td class=SDescription>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. </td></tr><tr class="SSection"><td class=SEntry><a href="#History,hashchange_event" >History, hashchange event</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.bbq.pushState" >jQuery.<wbr>bbq.<wbr>pushState</a></td><td class=SDescription>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.bbq.getState" >jQuery.<wbr>bbq.<wbr>getState</a></td><td class=SDescription>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.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jQuery.bbq.pollDelay" >jQuery.<wbr>bbq.<wbr>pollDelay</a></td><td class=SDescription>The numeric interval (in milliseconds) at which the <a href="#window.onhashchange" class=LEvent id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">window.onhashchange</a> polling loop executes. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent2 SMarked"><td class=SEntry><a href="#window.onhashchange" >window.<wbr>onhashchange</a></td><td class=SDescription>Fired when window.location.hash changes. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><h1 class=CTitle><a name="jQuery_BBQ:Back_ButtonQuery_Library"></a>jQuery BBQ: Back Button &amp; Query Library</h1><div class=CBody><p><b>Version: 1.1, Last updated: 1/9/2010</b></p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Project Home</td><td class=CDLDescription><a href="http://benalman.com/projects/jquery-bbq-plugin/" class=LURL target=_top>http://benalman.com/projects/jquery-bbq-plugin/</a></td></tr><tr><td class=CDLEntry>GitHub</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-bbq/" class=LURL target=_top>http://github.com/cowboy/jquery-bbq/</a></td></tr><tr><td class=CDLEntry>Source</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js" class=LURL target=_top>http://github.com<wbr>/cowboy<wbr>/jquery-bbq<wbr>/raw<wbr>/master<wbr>/jquery.ba-bbq.js</a></td></tr><tr><td class=CDLEntry>(Minified)</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js" class=LURL target=_top>http://github.com<wbr>/cowboy<wbr>/jquery-bbq<wbr>/raw<wbr>/master<wbr>/jquery.ba-bbq.min.js</a> (3.7kb)</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jQuery_BBQ:Back_ButtonQuery_Library" >jQuery BBQ: Back Button &amp; Query Library</a></td><td class=SDescription><b>Version: 1.1, Last updated: 1/9/2010</b></td></tr><tr class="SGeneric SMarked"><td class=SEntry><a href="#License" >License</a></td><td class=SDescription>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </td></tr><tr class="SGeneric"><td class=SEntry><a href="#Examples" >Examples</a></td><td class=SDescription>These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.</td></tr><tr class="SGeneric SMarked"><td class=SEntry><a href="#Support_and_Testing" >Support and Testing</a></td><td class=SDescription>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).</td></tr><tr class="SGeneric"><td class=SEntry><a href="#Release_History" >Release History</a></td><td class=SDescription></td></tr><tr class="SSection"><td class=SEntry><a href="#Param(to_string)" >Param (to string)</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.param.querystring" >jQuery.<wbr>param.<wbr>querystring</a></td><td class=SDescription>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.param.querystring(build_url)" >jQuery.<wbr>param.<wbr>querystring (build url)</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.param.fragment" >jQuery.<wbr>param.<wbr>fragment</a></td><td class=SDescription>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.param.fragment(build_url)" >jQuery.<wbr>param.<wbr>fragment (build url)</a></td><td class=SDescription>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.</td></tr><tr class="SSection"><td class=SEntry><a href="#Deparam(from_string)" >Deparam (from string)</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.deparam" >jQuery.<wbr>deparam</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.deparam.querystring" >jQuery.<wbr>deparam.<wbr>querystring</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.deparam.fragment" >jQuery.<wbr>deparam.<wbr>fragment</a></td><td class=SDescription>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.</td></tr><tr class="SSection"><td class=SEntry><a href="#Element_manipulation" >Element manipulation</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.elemUrlAttr" >jQuery.<wbr>elemUrlAttr</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.fn.querystring" >jQuery.<wbr>fn.<wbr>querystring</a></td><td class=SDescription>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. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.fn.fragment" >jQuery.<wbr>fn.<wbr>fragment</a></td><td class=SDescription>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. </td></tr><tr class="SSection"><td class=SEntry><a href="#History,hashchange_event" >History, hashchange event</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.bbq.pushState" >jQuery.<wbr>bbq.<wbr>pushState</a></td><td class=SDescription>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jQuery.bbq.getState" >jQuery.<wbr>bbq.<wbr>getState</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jQuery.bbq.removeState" >jQuery.<wbr>bbq.<wbr>removeState</a></td><td class=SDescription>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent2 SMarked"><td class=SEntry><a href="#window.onhashchange" >window.<wbr>onhashchange</a></td><td class=SDescription>In 1.4a2 and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Files" >Files</a></td><td class=SDescription></td></tr><tr class="SFile SIndent2 SMarked"><td class=SEntry><a href="#jQuery_hashchange_event" >jQuery hashchange event</a></td><td class=SDescription><b>Version: 1.0, Last updated: 1/9/2010</b></td></tr><tr class="SGeneric SIndent2"><td class=SEntry><a href="#License" >License</a></td><td class=SDescription>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </td></tr><tr class="SGeneric SIndent2 SMarked"><td class=SEntry><a href="#Examples" >Examples</a></td><td class=SDescription>This working example, complete with fully commented code, illustrate one way in which this plugin can be used.</td></tr><tr class="SGeneric SIndent2"><td class=SEntry><a href="#Support_and_Testing" >Support and Testing</a></td><td class=SDescription>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).</td></tr><tr class="SGeneric SIndent2 SMarked"><td class=SEntry><a href="#Known_issues" >Known issues</a></td><td class=SDescription>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. </td></tr><tr class="SGeneric SIndent2"><td class=SEntry><a href="#Release_History" >Release History</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jQuery.hashchangeDelay" >jQuery.<wbr>hashchangeDelay</a></td><td class=SDescription>The numeric interval (in milliseconds) at which the <a href="#window.onhashchange" class=LEvent id=link3 onMouseOver="ShowTip(event, 'tt1', 'link3')" onMouseOut="HideTip('tt1')">window.onhashchange</a> polling loop executes. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent2 SMarked"><td class=SEntry><a href="#window.onhashchange" >window.<wbr>onhashchange</a></td><td class=SDescription>Fired when window.location.hash changes. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="License"></a>License</h3><div class=CBody><p>Copyright &copy; 2009 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses.&nbsp; <a href="http://benalman.com/about/license/" class=LURL target=_top>http://benalman.com/about/license/</a></p></div></div></div>
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="License"></a>License</h3><div class=CBody><p>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses.&nbsp; <a href="http://benalman.com/about/license/" class=LURL target=_top>http://benalman.com/about/license/</a></p></div></div></div>
<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Examples"></a>Examples</h3><div class=CBody><p>These working examples, complete with fully commented code, illustrate a few ways in which this plugin can be used.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Basic AJAX</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-bbq/examples/fragment-basic/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-bbq<wbr>/examples<wbr>/fragment-basic<wbr>/</a></td></tr><tr><td class=CDLEntry>Advanced AJAX</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-bbq/examples/fragment-advanced/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-bbq<wbr>/examples<wbr>/fragment-advanced<wbr>/</a></td></tr><tr><td class=CDLEntry>jQuery UI Tabs</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-bbq/examples/fragment-jquery-ui-tabs/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-bbq<wbr>/examples<wbr>/fragment-jquery-ui-tabs<wbr>/</a></td></tr><tr><td class=CDLEntry>Deparam</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-bbq/examples/deparam/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-bbq<wbr>/examples<wbr>/deparam<wbr>/</a></td></tr></table></div></div></div>
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Support_and_Testing"></a>Support and Testing</h3><div class=CBody><p>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).</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>jQuery Versions</td><td class=CDLDescription>1.3.2, 1.4pre</td></tr><tr><td class=CDLEntry>Browsers Tested</td><td class=CDLDescription>Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.</td></tr><tr><td class=CDLEntry>Unit Tests</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-bbq/unit/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-bbq<wbr>/unit<wbr>/</a></td></tr></table></div></div></div>
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Support_and_Testing"></a>Support and Testing</h3><div class=CBody><p>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).</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>jQuery Versions</td><td class=CDLDescription>1.3.2, 1.4a2</td></tr><tr><td class=CDLEntry>Browsers Tested</td><td class=CDLDescription>Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.1.</td></tr><tr><td class=CDLEntry>Unit Tests</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-bbq/unit/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-bbq<wbr>/unit<wbr>/</a></td></tr></table></div></div></div>
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Release_History"></a>Release History</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>1.0.3</td><td class=CDLDescription>(12/2/2009) Fixed an issue in IE 6 where location.search and location.hash would report incorrectly if the hash contained the ? character.&nbsp; Also $.param.querystring and $.param.fragment will no longer parse params out of a URL that doesn&rsquo;t contain ? or #, respectively.</td></tr><tr><td class=CDLEntry>1.0.2</td><td class=CDLDescription>(10/10/2009) Fixed an issue in IE 6/7 where the hidden IFRAME caused a &ldquo;This page contains both secure and nonsecure items.&rdquo; warning when used on an <a href="https://" class=LURL target=_top>https://</a> page.</td></tr><tr><td class=CDLEntry>1.0.1</td><td class=CDLDescription>(10/7/2009) Fixed an issue in IE 8.&nbsp; Since both &ldquo;IE7&rdquo; and &ldquo;IE8 Compatibility View&rdquo; modes erroneously report that the browser supports the native window.onhashchange event, a slightly more robust test needed to be added.</td></tr><tr><td class=CDLEntry>1.0</td><td class=CDLDescription>(10/2/2009) Initial release</td></tr></table></div></div></div>
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Release_History"></a>Release History</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>1.1</td><td class=CDLDescription>(1/9/2010) Broke out the jQuery BBQ event.special window.onhashchange functionality into a separate plugin for users who want just the basic event &amp; back button support, without all the extra awesomeness that BBQ provides.&nbsp; This plugin will be included as part of jQuery BBQ, but also be available separately.&nbsp; See <a href="#jQuery_hashchange_event" class=LFile id=link4 onMouseOver="ShowTip(event, 'tt2', 'link4')" onMouseOut="HideTip('tt2')">jQuery hashchange event</a> plugin for more information.&nbsp; Also added the $.bbq.removeState method and added additional $.deparam examples.</td></tr><tr><td class=CDLEntry>1.0.3</td><td class=CDLDescription>(12/2/2009) Fixed an issue in IE 6 where location.search and location.hash would report incorrectly if the hash contained the ? character.&nbsp; Also $.param.querystring and $.param.fragment will no longer parse params out of a URL that doesn&rsquo;t contain ? or #, respectively.</td></tr><tr><td class=CDLEntry>1.0.2</td><td class=CDLDescription>(10/10/2009) Fixed an issue in IE 6/7 where the hidden IFRAME caused a &ldquo;This page contains both secure and nonsecure items.&rdquo; warning when used on an <a href="https://" class=LURL target=_top>https://</a> page.</td></tr><tr><td class=CDLEntry>1.0.1</td><td class=CDLDescription>(10/7/2009) Fixed an issue in IE 8.&nbsp; Since both &ldquo;IE7&rdquo; and &ldquo;IE8 Compatibility View&rdquo; modes erroneously report that the browser supports the native window.onhashchange event, a slightly more robust test needed to be added.</td></tr><tr><td class=CDLEntry>1.0</td><td class=CDLDescription>(10/2/2009) Initial release</td></tr></table></div></div></div>
<div class="CSection"><div class=CTopic><h2 class=CTitle><a name="Param(to_string)"></a>Param (to string)</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jQuery.param.querystring" >jQuery.<wbr>param.<wbr>querystring</a></td><td class=SDescription>Retrieve the query string from a URL or if no arguments are passed, the current window.location.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jQuery.param.querystring(build_url)" >jQuery.<wbr>param.<wbr>querystring (build url)</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jQuery.param.fragment" >jQuery.<wbr>param.<wbr>fragment</a></td><td class=SDescription>Retrieve the fragment (hash) from a URL or if no arguments are passed, the current window.location.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jQuery.param.fragment(build_url)" >jQuery.<wbr>param.<wbr>fragment (build url)</a></td><td class=SDescription>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.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
@@ -47,38 +47,61 @@
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.elemUrlAttr"></a>jQuery.<wbr>elemUrlAttr</h3><div class=CBody><p>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.</p><p>In the <a href="#jQuery.fn.querystring" class=LFunction id=link3 onMouseOver="ShowTip(event, 'tt2', 'link3')" onMouseOut="HideTip('tt2')">jQuery.fn.querystring</a> and <a href="#jQuery.fn.fragment" class=LFunction id=link4 onMouseOver="ShowTip(event, 'tt3', 'link4')" onMouseOut="HideTip('tt3')">jQuery.fn.fragment</a> methods, this list is used to determine which attribute contains the URL to be modified, if an &ldquo;attr&rdquo; param is not specified.</p><h4 class=CHeading>Default Tag-Attribute List</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>a</td><td class=CDLDescription>href</td></tr><tr><td class=CDLEntry>base</td><td class=CDLDescription>href</td></tr><tr><td class=CDLEntry>iframe</td><td class=CDLDescription>src</td></tr><tr><td class=CDLEntry>img</td><td class=CDLDescription>src</td></tr><tr><td class=CDLEntry>input</td><td class=CDLDescription>src</td></tr><tr><td class=CDLEntry>form</td><td class=CDLDescription>action</td></tr><tr><td class=CDLEntry>link</td><td class=CDLDescription>href</td></tr><tr><td class=CDLEntry>script</td><td class=CDLDescription>src</td></tr></table><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery.elemUrlAttr( [ tag_attr ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>tag_attr</td><td class=CDLDescription>(Object) An object containing a list of tag names and their associated default attribute names in the format { tag: &lsquo;attr&rsquo;, ...&nbsp; } to be merged into the internal tag-attribute list.</td></tr></table><h4 class=CHeading>Returns</h4><p>(Object) An object containing all stored tag-attribute values.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.elemUrlAttr"></a>jQuery.<wbr>elemUrlAttr</h3><div class=CBody><p>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.</p><p>In the <a href="#jQuery.fn.querystring" class=LFunction id=link5 onMouseOver="ShowTip(event, 'tt3', 'link5')" onMouseOut="HideTip('tt3')">jQuery.fn.querystring</a> and <a href="#jQuery.fn.fragment" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt4', 'link6')" onMouseOut="HideTip('tt4')">jQuery.fn.fragment</a> methods, this list is used to determine which attribute contains the URL to be modified, if an &ldquo;attr&rdquo; param is not specified.</p><h4 class=CHeading>Default Tag-Attribute List</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>a</td><td class=CDLDescription>href</td></tr><tr><td class=CDLEntry>base</td><td class=CDLDescription>href</td></tr><tr><td class=CDLEntry>iframe</td><td class=CDLDescription>src</td></tr><tr><td class=CDLEntry>img</td><td class=CDLDescription>src</td></tr><tr><td class=CDLEntry>input</td><td class=CDLDescription>src</td></tr><tr><td class=CDLEntry>form</td><td class=CDLDescription>action</td></tr><tr><td class=CDLEntry>link</td><td class=CDLDescription>href</td></tr><tr><td class=CDLEntry>script</td><td class=CDLDescription>src</td></tr></table><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery.elemUrlAttr( [ tag_attr ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>tag_attr</td><td class=CDLDescription>(Object) An object containing a list of tag names and their associated default attribute names in the format { tag: &lsquo;attr&rsquo;, ...&nbsp; } to be merged into the internal tag-attribute list.</td></tr></table><h4 class=CHeading>Returns</h4><p>(Object) An object containing all stored tag-attribute values.</p></div></div></div>
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.fn.querystring"></a>jQuery.<wbr>fn.<wbr>querystring</h3><div class=CBody><p>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.&nbsp; Like <a href="#jQuery.param.querystring(build_url)" class=LFunction id=link5 onMouseOver="ShowTip(event, 'tt4', 'link5')" onMouseOut="HideTip('tt4')">jQuery.param.querystring (build url)</a>, but for all elements in a jQuery collection.</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery('selector').querystring( [ attr, ] params [, merge_mode ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>attr</td><td class=CDLDescription>(String) Optional name of an attribute that will contain a URL to merge params or url into.&nbsp; See <a href="#jQuery.elemUrlAttr" class=LFunction id=link6 onMouseOver="ShowTip(event, 'tt5', 'link6')" onMouseOut="HideTip('tt5')">jQuery.elemUrlAttr</a> for a list of default attributes.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(Object) A params object to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(String) A URL containing query string params, or params string to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>merge_mode</td><td class=CDLDescription>(Number) Merge behavior defaults to 0 if merge_mode is not specified, and is as-follows:</td></tr></table><ul><li>0: params in the params argument will override any params in attr URL.</li><li>1: any params in attr URL will override params in the params argument.</li><li>2: params argument will completely replace any query string in attr URL.</li></ul><h4 class=CHeading>Returns</h4><p>(jQuery) The initial jQuery collection of elements, but with modified URL attribute values.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.fn.querystring"></a>jQuery.<wbr>fn.<wbr>querystring</h3><div class=CBody><p>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.&nbsp; Like <a href="#jQuery.param.querystring(build_url)" class=LFunction id=link7 onMouseOver="ShowTip(event, 'tt5', 'link7')" onMouseOut="HideTip('tt5')">jQuery.param.querystring (build url)</a>, but for all elements in a jQuery collection.</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery('selector').querystring( [ attr, ] params [, merge_mode ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>attr</td><td class=CDLDescription>(String) Optional name of an attribute that will contain a URL to merge params or url into.&nbsp; See <a href="#jQuery.elemUrlAttr" class=LFunction id=link8 onMouseOver="ShowTip(event, 'tt6', 'link8')" onMouseOut="HideTip('tt6')">jQuery.elemUrlAttr</a> for a list of default attributes.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(Object) A params object to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(String) A URL containing query string params, or params string to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>merge_mode</td><td class=CDLDescription>(Number) Merge behavior defaults to 0 if merge_mode is not specified, and is as-follows:</td></tr></table><ul><li>0: params in the params argument will override any params in attr URL.</li><li>1: any params in attr URL will override params in the params argument.</li><li>2: params argument will completely replace any query string in attr URL.</li></ul><h4 class=CHeading>Returns</h4><p>(jQuery) The initial jQuery collection of elements, but with modified URL attribute values.</p></div></div></div>
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.fn.fragment"></a>jQuery.<wbr>fn.<wbr>fragment</h3><div class=CBody><p>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.&nbsp; Like <a href="#jQuery.param.fragment(build_url)" class=LFunction id=link7 onMouseOver="ShowTip(event, 'tt6', 'link7')" onMouseOut="HideTip('tt6')">jQuery.param.fragment (build url)</a>, but for all elements in a jQuery collection.</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery('selector').fragment( [ attr, ] params [, merge_mode ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>attr</td><td class=CDLDescription>(String) Optional name of an attribute that will contain a URL to merge params into.&nbsp; See <a href="#jQuery.elemUrlAttr" class=LFunction id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">jQuery.elemUrlAttr</a> for a list of default attributes.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(Object) A params object to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(String) A URL containing fragment (hash) params, or params string to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>merge_mode</td><td class=CDLDescription>(Number) Merge behavior defaults to 0 if merge_mode is not specified, and is as-follows:</td></tr></table><ul><li>0: params in the params argument will override any params in attr URL.</li><li>1: any params in attr URL will override params in the params argument.</li><li>2: params argument will completely replace any fragment (hash) in attr URL.</li></ul><h4 class=CHeading>Returns</h4><p>(jQuery) The initial jQuery collection of elements, but with modified URL attribute values.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.fn.fragment"></a>jQuery.<wbr>fn.<wbr>fragment</h3><div class=CBody><p>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.&nbsp; Like <a href="#jQuery.param.fragment(build_url)" class=LFunction id=link9 onMouseOver="ShowTip(event, 'tt7', 'link9')" onMouseOut="HideTip('tt7')">jQuery.param.fragment (build url)</a>, but for all elements in a jQuery collection.</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery('selector').fragment( [ attr, ] params [, merge_mode ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>attr</td><td class=CDLDescription>(String) Optional name of an attribute that will contain a URL to merge params into.&nbsp; See <a href="#jQuery.elemUrlAttr" class=LFunction id=link10 onMouseOver="ShowTip(event, 'tt6', 'link10')" onMouseOut="HideTip('tt6')">jQuery.elemUrlAttr</a> for a list of default attributes.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(Object) A params object to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(String) A URL containing fragment (hash) params, or params string to be merged into the URL attribute.</td></tr><tr><td class=CDLEntry>merge_mode</td><td class=CDLDescription>(Number) Merge behavior defaults to 0 if merge_mode is not specified, and is as-follows:</td></tr></table><ul><li>0: params in the params argument will override any params in attr URL.</li><li>1: any params in attr URL will override params in the params argument.</li><li>2: params argument will completely replace any fragment (hash) in attr URL.</li></ul><h4 class=CHeading>Returns</h4><p>(jQuery) The initial jQuery collection of elements, but with modified URL attribute values.</p></div></div></div>
-<div class="CSection"><div class=CTopic><h2 class=CTitle><a name="History,hashchange_event"></a>History, hashchange event</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jQuery.bbq.pushState" >jQuery.<wbr>bbq.<wbr>pushState</a></td><td class=SDescription>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jQuery.bbq.getState" >jQuery.<wbr>bbq.<wbr>getState</a></td><td class=SDescription>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.</td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jQuery.bbq.pollDelay" >jQuery.<wbr>bbq.<wbr>pollDelay</a></td><td class=SDescription>The numeric interval (in milliseconds) at which the <a href="#window.onhashchange" class=LEvent id=link10 onMouseOver="ShowTip(event, 'tt1', 'link10')" onMouseOut="HideTip('tt1')">window.onhashchange</a> polling loop executes. </td></tr><tr class="SGroup"><td class=SEntry><a href="#Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent1 SMarked"><td class=SEntry><a href="#window.onhashchange" >window.<wbr>onhashchange</a></td><td class=SDescription>Fired when window.location.hash changes. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
+<div class="CSection"><div class=CTopic><h2 class=CTitle><a name="History,hashchange_event"></a>History, hashchange event</h2><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jQuery.bbq.pushState" >jQuery.<wbr>bbq.<wbr>pushState</a></td><td class=SDescription>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jQuery.bbq.getState" >jQuery.<wbr>bbq.<wbr>getState</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jQuery.bbq.removeState" >jQuery.<wbr>bbq.<wbr>removeState</a></td><td class=SDescription>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</td></tr><tr class="SGroup"><td class=SEntry><a href="#Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent1 SMarked"><td class=SEntry><a href="#window.onhashchange" >window.<wbr>onhashchange</a></td><td class=SDescription>In 1.4a2 and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</td></tr><tr class="SGroup"><td class=SEntry><a href="#Files" >Files</a></td><td class=SDescription></td></tr><tr class="SFile SIndent1 SMarked"><td class=SEntry><a href="#jQuery_hashchange_event" >jQuery hashchange event</a></td><td class=SDescription><b>Version: 1.0, Last updated: 1/9/2010</b></td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#License" >License</a></td><td class=SDescription>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Examples" >Examples</a></td><td class=SDescription>This working example, complete with fully commented code, illustrate one way in which this plugin can be used.</td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#Support_and_Testing" >Support and Testing</a></td><td class=SDescription>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).</td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Known_issues" >Known issues</a></td><td class=SDescription>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. </td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#Release_History" >Release History</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jQuery.hashchangeDelay" >jQuery.<wbr>hashchangeDelay</a></td><td class=SDescription>The numeric interval (in milliseconds) at which the <a href="#window.onhashchange" class=LEvent id=link13 onMouseOver="ShowTip(event, 'tt1', 'link13')" onMouseOut="HideTip('tt1')">window.onhashchange</a> polling loop executes. </td></tr><tr class="SGroup"><td class=SEntry><a href="#Events" >Events</a></td><td class=SDescription></td></tr><tr class="SEvent SIndent1 SMarked"><td class=SEntry><a href="#window.onhashchange" >window.<wbr>onhashchange</a></td><td class=SDescription>Fired when window.location.hash changes. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Functions"></a>Functions</h3></div></div>
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.bbq.pushState"></a>jQuery.<wbr>bbq.<wbr>pushState</h3><div class=CBody><p>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link11 onMouseOver="ShowTip(event, 'tt1', 'link11')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</p><p>If no arguments are passed, an empty state is created, which is just a shortcut for jQuery.bbq.pushState( {}, 2 ).</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery.bbq.pushState( [ params [, merge_mode ] ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>params</td><td class=CDLDescription>(String) A serialized params string or a hash string beginning with # to merge into location.hash.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(Object) A params object to merge into location.hash.</td></tr><tr><td class=CDLEntry>merge_mode</td><td class=CDLDescription>(Number) Merge behavior defaults to 0 if merge_mode is not specified (unless a hash string beginning with # is specified, in which case merge behavior defaults to 2), and is as-follows:</td></tr></table><ul><li>0: params in the params argument will override any params in the current state.</li><li>1: any params in the current state will override params in the params argument.</li><li>2: params argument will completely replace current state.</li></ul><h4 class=CHeading>Returns</h4><p>Nothing.</p><h4 class=CHeading>Additional Notes</h4><ul><li>Setting an empty state may cause the browser to scroll.</li><li>Unlike the fragment and querystring methods, if a hash string beginning with # is specified as the params agrument, merge_mode defaults to 2.</li></ul></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.bbq.pushState"></a>jQuery.<wbr>bbq.<wbr>pushState</h3><div class=CBody><p>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link14 onMouseOver="ShowTip(event, 'tt1', 'link14')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</p><p>If no arguments are passed, an empty state is created, which is just a shortcut for jQuery.bbq.pushState( {}, 2 ).</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery.bbq.pushState( [ params [, merge_mode ] ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>params</td><td class=CDLDescription>(String) A serialized params string or a hash string beginning with # to merge into location.hash.</td></tr><tr><td class=CDLEntry>params</td><td class=CDLDescription>(Object) A params object to merge into location.hash.</td></tr><tr><td class=CDLEntry>merge_mode</td><td class=CDLDescription>(Number) Merge behavior defaults to 0 if merge_mode is not specified (unless a hash string beginning with # is specified, in which case merge behavior defaults to 2), and is as-follows:</td></tr></table><ul><li>0: params in the params argument will override any params in the current state.</li><li>1: any params in the current state will override params in the params argument.</li><li>2: params argument will completely replace current state.</li></ul><h4 class=CHeading>Returns</h4><p>Nothing.</p><h4 class=CHeading>Additional Notes</h4><ul><li>Setting an empty state may cause the browser to scroll.</li><li>Unlike the fragment and querystring methods, if a hash string beginning with # is specified as the params agrument, merge_mode defaults to 2.</li></ul></div></div></div>
<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.bbq.getState"></a>jQuery.<wbr>bbq.<wbr>getState</h3><div class=CBody><p>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.</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery.bbq.getState( [ key ] [, coerce ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>key</td><td class=CDLDescription>(String) An optional state key for which to return a value.</td></tr><tr><td class=CDLEntry>coerce</td><td class=CDLDescription>(Boolean) If true, coerces any numbers or true, false, null, and undefined to their actual value.&nbsp; Defaults to false.</td></tr></table><h4 class=CHeading>Returns</h4><p>(Anything) If key is passed, returns the value corresponding with that key in the location.hash &lsquo;state&rsquo;, or undefined.&nbsp; If not, an object representing the entire &lsquo;state&rsquo; is returned.</p></div></div></div>
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jQuery.bbq.pollDelay"></a>jQuery.<wbr>bbq.<wbr>pollDelay</h3><div class=CBody><p>The numeric interval (in milliseconds) at which the <a href="#window.onhashchange" class=LEvent id=link12 onMouseOver="ShowTip(event, 'tt1', 'link12')" onMouseOut="HideTip('tt1')">window.onhashchange</a> polling loop executes.&nbsp; Defaults to 100.</p></div></div></div>
+<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jQuery.bbq.removeState"></a>jQuery.<wbr>bbq.<wbr>removeState</h3><div class=CBody><p>Remove one or more keys from the current browser history &lsquo;state&rsquo;, creating a new state, setting location.hash and triggering any bound <a href="#window.onhashchange" class=LEvent id=link15 onMouseOver="ShowTip(event, 'tt1', 'link15')" onMouseOut="HideTip('tt1')">window.onhashchange</a> event callbacks (provided the new state is different than the previous state).</p><p>If no arguments are passed, an empty state is created, which is just a shortcut for jQuery.bbq.pushState( {}, 2 ).</p><h4 class=CHeading>Usage</h4><blockquote><pre>jQuery.bbq.removeState( [ key [, key ... ] ] );</pre></blockquote><h4 class=CHeading>Arguments</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>key</td><td class=CDLDescription>(String) One or more key values to remove from the current state, passed as individual arguments.</td></tr><tr><td class=CDLEntry>key</td><td class=CDLDescription>(Array) A single array argument that contains a list of key values to remove from the current state.</td></tr></table><h4 class=CHeading>Returns</h4><p>Nothing.</p><h4 class=CHeading>Additional Notes</h4><ul><li>Setting an empty state may cause the browser to scroll.</li></ul></div></div></div>
<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Events"></a>Events</h3></div></div>
-<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="window.onhashchange"></a>window.<wbr>onhashchange</h3><div class=CBody><p>Fired when window.location.hash changes.&nbsp; In browsers that support it, the native window.onhashchange event is used (IE8, FF3.6), otherwise a polling loop is initialized, running every <a href="#jQuery.bbq.pollDelay" class=LProperty id=link13 onMouseOver="ShowTip(event, 'tt7', 'link13')" onMouseOut="HideTip('tt7')">jQuery.bbq.pollDelay</a> milliseconds to see if the hash has changed.&nbsp; In IE 6 and 7, a hidden IFRAME is created to allow hash-based history to work.</p><h4 class=CHeading>Usage in 1.4pre and newer</h4><p>In 1.4pre and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</p><p>e.fragment is equivalent to the output of <a href="#jQuery.param.fragment" class=LFunction id=link14 onMouseOver="ShowTip(event, 'tt8', 'link14')" onMouseOut="HideTip('tt8')">jQuery.param.fragment</a>, and e.getState() is equivalent to <a href="#jQuery.bbq.getState" class=LFunction id=link15 onMouseOver="ShowTip(event, 'tt9', 'link15')" onMouseOut="HideTip('tt9')">jQuery.bbq.getState</a>, except that they refer to the event-specific state value stored in the event object, instead of the current window.location, allowing the event object to be referenced later, even if window.location has changed.</p><blockquote><pre>$(window).bind( 'hashchange', function(e) {
+<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="window.onhashchange"></a>window.<wbr>onhashchange</h3><div class=CBody><h4 class=CHeading>Usage in 1.4a2 and newer</h4><p>In 1.4a2 and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</p><p>e.fragment is equivalent to the output of <a href="#jQuery.param.fragment" class=LFunction id=link16 onMouseOver="ShowTip(event, 'tt8', 'link16')" onMouseOut="HideTip('tt8')">jQuery.param.fragment</a>, and e.getState() is equivalent to <a href="#jQuery.bbq.getState" class=LFunction id=link17 onMouseOver="ShowTip(event, 'tt9', 'link17')" onMouseOut="HideTip('tt9')">jQuery.bbq.getState</a>, except that they refer to the event-specific state value stored in the event object, instead of the current window.location, allowing the event object to be referenced later, even if window.location has changed.</p><blockquote><pre>$(window).bind( 'hashchange', function(e) {
var hash_str = e.fragment,
param_obj = e.getState(),
param_val = e.getState( 'param_name' ),
param_val_coerced = e.getState( 'param_name', true );
...
-});</pre></blockquote><h4 class=CHeading>Usage in 1.3.2</h4><p>In 1.3.2, the event object is unable to be augmented as in 1.4pre+, so the fragment state isn&rsquo;t bound to the event object and must instead be parsed using the <a href="#jQuery.param.fragment" class=LFunction id=link16 onMouseOver="ShowTip(event, 'tt8', 'link16')" onMouseOut="HideTip('tt8')">jQuery.param.fragment</a> and <a href="#jQuery.bbq.getState" class=LFunction id=link17 onMouseOver="ShowTip(event, 'tt9', 'link17')" onMouseOut="HideTip('tt9')">jQuery.bbq.getState</a> methods.</p><blockquote><pre>$(window).bind( 'hashchange', function(e) {
+});</pre></blockquote><h4 class=CHeading>Usage in 1.3.2</h4><p>In 1.3.2, the event object is unable to be augmented as in 1.4a2+, so the fragment state isn&rsquo;t bound to the event object and must instead be parsed using the <a href="#jQuery.param.fragment" class=LFunction id=link18 onMouseOver="ShowTip(event, 'tt8', 'link18')" onMouseOut="HideTip('tt8')">jQuery.param.fragment</a> and <a href="#jQuery.bbq.getState" class=LFunction id=link19 onMouseOver="ShowTip(event, 'tt9', 'link19')" onMouseOut="HideTip('tt9')">jQuery.bbq.getState</a> methods.</p><blockquote><pre>$(window).bind( 'hashchange', function(e) {
var hash_str = $.param.fragment(),
param_obj = $.bbq.getState(),
param_val = $.bbq.getState( 'param_name' ),
param_val_coerced = $.bbq.getState( 'param_name', true );
...
+});</pre></blockquote><h4 class=CHeading>Additional Notes</h4><ul><li>See <a href="#jQuery_hashchange_event" class=LFile id=link20 onMouseOver="ShowTip(event, 'tt2', 'link20')" onMouseOut="HideTip('tt2')">jQuery hashchange event</a> for more detailed information.</li></ul></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Files"></a>Files</h3></div></div>
+
+<div class="CFile"><div class=CTopic><h3 class=CTitle><a name="jQuery_hashchange_event"></a>jQuery hashchange event</h3><div class=CBody><p><b>Version: 1.0, Last updated: 1/9/2010</b></p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Project Home</td><td class=CDLDescription><a href="http://benalman.com/projects/jquery-hashchange-plugin/" class=LURL target=_top>http://benalman.com<wbr>/projects<wbr>/jquery-hashchange-plugin<wbr>/</a></td></tr><tr><td class=CDLEntry>GitHub</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-hashchange/" class=LURL target=_top>http://github.com/cowboy/jquery-hashchange/</a></td></tr><tr><td class=CDLEntry>Source</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js" class=LURL target=_top>http://github.com<wbr>/cowboy<wbr>/jquery-hashchange<wbr>/raw<wbr>/master<wbr>/jquery.ba-hashchange.js</a></td></tr><tr><td class=CDLEntry>(Minified)</td><td class=CDLDescription><a href="http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js" class=LURL target=_top>http://github.com<wbr>/cowboy<wbr>/jquery-hashchange<wbr>/raw<wbr>/master<wbr>/jquery.ba-hashchange.min.js</a> (1.1kb)</td></tr></table></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="License"></a>License</h3><div class=CBody><p>Copyright &copy; 2010 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses.&nbsp; <a href="http://benalman.com/about/license/" class=LURL target=_top>http://benalman.com/about/license/</a></p></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Examples"></a>Examples</h3><div class=CBody><p>This working example, complete with fully commented code, illustrate one way in which this plugin can be used.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>hashchange event</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-hashchange<wbr>/examples<wbr>/hashchange<wbr>/</a></td></tr></table></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Support_and_Testing"></a>Support and Testing</h3><div class=CBody><p>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).</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>jQuery Versions</td><td class=CDLDescription>1.3.2, 1.4a2</td></tr><tr><td class=CDLEntry>Browsers Tested</td><td class=CDLDescription>Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.</td></tr><tr><td class=CDLEntry>Unit Tests</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-hashchange/unit/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-hashchange<wbr>/unit<wbr>/</a></td></tr></table></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Known_issues"></a>Known issues</h3><div class=CBody><p>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.&nbsp; See the following examples for more information:</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Chrome: Back Button</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-hashchange<wbr>/examples<wbr>/bug-chrome-back-button<wbr>/</a></td></tr><tr><td class=CDLEntry>Firefox: Remote XMLHttpRequest</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-hashchange<wbr>/examples<wbr>/bug-firefox-remote-xhr<wbr>/</a></td></tr><tr><td class=CDLEntry>WebKit: Back Button in an Iframe</td><td class=CDLDescription><a href="http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/" class=LURL target=_top>http://benalman.com<wbr>/code<wbr>/projects<wbr>/jquery-hashchange<wbr>/examples<wbr>/bug-webkit-hash-iframe<wbr>/</a></td></tr></table></div></div></div>
+
+<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Release_History"></a>Release History</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>1.0</td><td class=CDLDescription>(1/9/2010) Initial Release.&nbsp; Broke out the jQuery BBQ event.special window.onhashchange functionality into a separate plugin for users who want just the basic event &amp; back button support, without all the extra awesomeness that BBQ provides.&nbsp; This plugin will be included as part of jQuery BBQ, but also be available separately.</td></tr></table></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
+
+<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jQuery.hashchangeDelay"></a>jQuery.<wbr>hashchangeDelay</h3><div class=CBody><p>The numeric interval (in milliseconds) at which the <a href="#window.onhashchange" class=LEvent id=link21 onMouseOver="ShowTip(event, 'tt1', 'link21')" onMouseOut="HideTip('tt1')">window.onhashchange</a> polling loop executes.&nbsp; Defaults to 100.</p></div></div></div>
+
+<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Events"></a>Events</h3></div></div>
+
+<div class="CEvent"><div class=CTopic><h3 class=CTitle><a name="window.onhashchange"></a>window.<wbr>onhashchange</h3><div class=CBody><p>Fired when window.location.hash changes.&nbsp; In browsers that support it, the native window.onhashchange event is used (IE8, FF3.6), otherwise a polling loop is initialized, running every <a href="#jQuery.hashchangeDelay" class=LProperty id=link22 onMouseOver="ShowTip(event, 'tt10', 'link22')" onMouseOut="HideTip('tt10')">jQuery.hashchangeDelay</a> milliseconds to see if the hash has changed.&nbsp; In IE 6 and 7, a hidden IFRAME is created to allow the back button and hash-based history to work.</p><h4 class=CHeading>Usage</h4><blockquote><pre>$(window).bind( 'hashchange', function(e) {
+ var hash = location.hash;
+ ...
});</pre></blockquote><h4 class=CHeading>Additional Notes</h4><ul><li>The polling loop and iframe are not created until at least one callback is actually bound to &lsquo;hashchange&rsquo;.</li><li>If you need the bound callback(s) to execute immediately, in cases where the page &lsquo;state&rsquo; exists on page load (via bookmark or page refresh, for example) use $(window).trigger( &lsquo;hashchange&rsquo; );</li></ul></div></div></div>
</div><!--Content-->
@@ -94,7 +117,7 @@
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CEvent>Fired when window.location.hash changes. </div></div><div class=CToolTip id="tt2"><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="tt3"><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="tt4"><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><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=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><div class=CToolTip id="tt7"><div class=CProperty>The numeric interval (in milliseconds) at which the window.onhashchange polling loop executes. </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>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="tt1"><div class=CEvent>In 1.4a2 and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</div></div><div class=CToolTip id="tt2"><div class=CFile><b>Version: 1.0, Last updated: 1/9/2010</b></div></div><div class=CToolTip id="tt3"><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="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>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><div class=CToolTip id="tt6"><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="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><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>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><div class=CToolTip id="tt10"><div class=CProperty>The numeric interval (in milliseconds) at which the window.onhashchange polling loop executes. </div></div><!--END_ND_TOOLTIPS-->
View
2  docs/index/Events.html
@@ -13,7 +13,7 @@
<div id=Index><div class=IPageTitle>Event 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; J &middot; K &middot; L &middot; M &middot; N &middot; <a href="#O">O</a> &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="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#window.onhashchange" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>onhashchange</a>, <span class=IParent>window</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CEvent>Fired when window.location.hash changes. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CEvent>In 1.4a2 and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</div></div><!--END_ND_TOOLTIPS-->
</div><!--Index-->
View
4 docs/index/Files.html
@@ -11,9 +11,9 @@
-<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=IOnlySymbolPrefix>&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></table>
+<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.0.3, Last updated: 12/2/2009</b></div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt1"><div class=CFile><b>Version: 1.1, Last updated: 1/9/2010</b></div></div><div class=CToolTip id="tt2"><div class=CFile><b>Version: 1.0, Last updated: 1/9/2010</b></div></div><!--END_ND_TOOLTIPS-->
</div><!--Index-->
View
6 docs/index/Functions.html
@@ -11,7 +11,7 @@
-<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; H &middot; I &middot; J &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &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="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="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=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" 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=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" 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=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>querystring(build url)</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 &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; H &middot; I &middot; J &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &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="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="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=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" 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=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" 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=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" 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=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</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-->
@@ -35,6 +35,10 @@
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt9"><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="tt10"><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="tt11"><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="tt12"><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="tt13"><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 window.onhashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+
</div><!--Index-->
View
22 docs/index/General.html
@@ -11,7 +11,7 @@
-<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; K &middot; <a href="#L">L</a> &middot; M &middot; N &middot; <a href="#O">O</a> &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.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=ISymbolPrefix id=ILastSymbolPrefix>&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=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=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" 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=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" 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><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>&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=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=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#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=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</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=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>License</a></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#window.onhashchange" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>onhashchange</a>, <span class=IParent>window</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#jQuery.bbq.pollDelay" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>pollDelay</a>, <span class=IParent>jQuery.bbq</span></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=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" 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=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" 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=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" 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#Release_History" class=ISymbol>Release History</a></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#Support_and_Testing" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" 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 &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; N &middot; <a href="#O">O</a> &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.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=ISymbolPrefix id=ILastSymbolPrefix>&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=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=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" 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=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" 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=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>&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=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=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=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.hashchangeDelay" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>hashchangeDelay</a>, <span class=IParent>jQuery</span></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=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" 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=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" 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=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" 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=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>License</a></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jquery-ba-bbq-js.html#window.onhashchange" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>onhashchange</a>, <span class=IParent>window</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=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" 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=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.querystring" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.querystring" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" 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=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" 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=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" 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#Support_and_Testing" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>Support and Testing</a></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-->
@@ -29,35 +29,39 @@
<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt9"><div class=CProperty>The numeric interval (in milliseconds) at which the window.onhashchange polling loop executes. </div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt9"><div class=CFile><b>Version: 1.0.3, Last updated: 12/2/2009</b></div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt10"><div class=CFile><b>Version: 1.1, Last updated: 1/9/2010</b></div></div><div class=CToolTip id="tt11"><div class=CFile><b>Version: 1.0, Last updated: 1/9/2010</b></div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CGeneric>Copyright &copy; 2009 &ldquo;Cowboy&rdquo; Ben Alman, Dual licensed under the MIT and GPL licenses. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt12"><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="tt11"><div class=CEvent>Fired when window.location.hash changes. </div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt13"><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="tt12"><div class=CProperty>The numeric interval (in milliseconds) at which the window.onhashchange polling loop executes. </div></div><div class=CToolTip id="tt13"><div class=CFunction>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound window.onhashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt14"><div class=CEvent>In 1.4a2 and newer, the event object that is passed into the callback is augmented with an additional e.fragment property that contains the current document location.hash state as a string, as well as an e.getState method.</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt14"><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="tt15"><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="tt16"><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="tt17"><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="tt15"><div class=CFunction>Adds a &lsquo;state&rsquo; into the browser history at the current position, setting location.hash and triggering any bound window.onhashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
+<div class=CToolTip id="tt16"><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="tt17"><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="tt18"><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="tt19"><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="tt18"><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="tt20"><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 window.onhashchange event callbacks (provided the new state is different than the previous state).</div></div><!--END_ND_TOOLTIPS-->
+
+
+<!--START_ND_TOOLTIPS-->
+<div class=CToolTip id="tt21"><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/index/Properties.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=IPageTitle>Property 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; J &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &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="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.pollDelay" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>pollDelay</a>, <span class=IParent>jQuery.bbq</span></td></tr></table>
+<div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; <a href="#H">H</a> &middot; I &middot; J &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="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.hashchangeDelay" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>hashchangeDelay</a>, <span class=IParent>jQuery</span></td></tr></table>
<!--START_ND_TOOLTIPS-->
<div class=CToolTip id="tt1"><div class=CProperty>The numeric interval (in milliseconds) at which the window.onhashchange polling loop executes. </div></div><!--END_ND_TOOLTIPS-->
View
6 docs/javascript/searchdata.js
@@ -49,7 +49,7 @@ var indexSectionsWithContent = {
"O": false,
"P": true,
"Q": true,
- "R": false,
+ "R": true,
"S": false,
"T": false,
"U": false,
@@ -129,7 +129,7 @@ var indexSectionsWithContent = {
"E": false,
"F": false,
"G": false,
- "H": false,
+ "H": true,
"I": false,
"J": false,
"K": false,
@@ -137,7 +137,7 @@ var indexSectionsWithContent = {
"M": false,
"N": false,
"O": false,
- "P": true,
+ "P": false,
"Q": false,
"R": false,
"S": false,
View
BIN  docs/nd/Data/ConfigFileInfo.nd
Binary file not shown
View
4 docs/nd/Data/FileInfo.nd
@@ -1,4 +1,4 @@
1.4
JavaScript
-/srv/projects/jquery-bbq/jquery.ba-bbq.min.js 1259815141 0 /srv/projects/jquery-bbq/jquery.ba-bbq.min.js
-/srv/projects/jquery-bbq/jquery.ba-bbq.js 1259815138 1 jQuery BBQ: Back Button & Query Library
+/srv/projects/jquery-bbq2/jquery.ba-bbq.js 1263074809 1 jQuery BBQ: Back Button & Query Library
+/srv/projects/jquery-bbq2/jquery.ba-bbq.min.js 1263074824 0 /srv/projects/jquery-bbq2/jquery.ba-bbq.min.js
View
BIN  docs/nd/Data/IndexInfo.nd
Binary file not shown
View
BIN  docs/nd/Data/PreviousMenuState.nd
Binary file not shown
View
BIN  docs/nd/Data/PreviousSettings.nd
Binary file not shown
View
BIN  docs/nd/Data/SymbolTable.nd
Binary file not shown
View
2  docs/search/FilesJ.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jQuery_spcBBQ_colBack_spcButton_ampQuery_spcLibrary><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" target=_parent class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jQuery_spcBBQ_colBack_spcButton_ampQuery_spcLibrary><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" target=_parent class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></div></div><div class=SRResult id=SR_jQuery_spchashchange_spcevent><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_hashchange_event" target=_parent class=ISymbol>jQuery hashchange event</a></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");
View
20 docs/search/FunctionsR.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_removeState><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.removeState" target=_parent class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</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
2  docs/search/GeneralF.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fragment><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fragment')" class=ISymbol>fragment</a><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.fragment" target=_parent class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.fragment" target=_parent class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment" target=_parent class=IParent>jQuery.<wbr>param</a></div></div></div><div class=SRResult id=SR_fragment_lpabuild_spcurl_rpa><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment(build_url)" target=_parent class=ISymbol>fragment(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Functions" target=_parent class=ISymbol>Functions</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Files><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Files" target=_parent class=ISymbol>Files</a></div></div><div class=SRResult id=SR_fragment><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fragment')" class=ISymbol>fragment</a><div class=ISubIndex><a href="../files/jquery-ba-bbq-js.html#jQuery.deparam.fragment" target=_parent class=IParent>jQuery.<wbr>deparam</a><a href="../files/jquery-ba-bbq-js.html#jQuery.fn.fragment" target=_parent class=IParent>jQuery.fn</a><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment" target=_parent class=IParent>jQuery.<wbr>param</a></div></div></div><div class=SRResult id=SR_fragment_lpabuild_spcurl_rpa><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.param.fragment(build_url)" target=_parent class=ISymbol>fragment(build url)</a>, <span class=IParent>jQuery.<wbr>param</span></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Functions" target=_parent class=ISymbol>Functions</a></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");
View
2  docs/search/GeneralH.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_History_comhashchange_spcevent><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#History,hashchange_event" target=_parent class=ISymbol>History,hashchange event</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hashchangeDelay><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.hashchangeDelay" target=_parent class=ISymbol>hashchangeDelay</a>, <span class=IParent>jQuery</span></div></div><div class=SRResult id=SR_History_comhashchange_spcevent><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#History,hashchange_event" target=_parent class=ISymbol>History,hashchange event</a></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");
View
2  docs/search/GeneralJ.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jQuery_spcBBQ_colBack_spcButton_ampQuery_spcLibrary><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" target=_parent class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jQuery_spcBBQ_colBack_spcButton_ampQuery_spcLibrary><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_BBQ:Back_ButtonQuery_Library" target=_parent class=ISymbol>jQuery BBQ:<wbr>Back Button&amp;Query Library</a></div></div><div class=SRResult id=SR_jQuery_spchashchange_spcevent><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery_hashchange_event" target=_parent class=ISymbol>jQuery hashchange event</a></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");
View
2  docs/search/PropertiesP.html → docs/search/GeneralK.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pollDelay><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pollDelay" target=_parent class=ISymbol>pollDelay</a>, <span class=IParent>jQuery.bbq</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Known_spcissues><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Known_issues" target=_parent class=ISymbol>Known issues</a></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");
View
2  docs/search/GeneralP.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Param_lpato_spcstring_rpa><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Param(to_string)" target=_parent class=ISymbol>Param(to string)</a></div></div><div class=SRResult id=SR_pollDelay><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pollDelay" target=_parent class=ISymbol>pollDelay</a>, <span class=IParent>jQuery.bbq</span></div></div><div class=SRResult id=SR_Properties><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Properties" target=_parent class=ISymbol>Properties</a></div></div><div class=SRResult id=SR_pushState><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pushState" target=_parent class=ISymbol>pushState</a>, <span class=IParent>jQuery.bbq</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Param_lpato_spcstring_rpa><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Param(to_string)" target=_parent class=ISymbol>Param(to string)</a></div></div><div class=SRResult id=SR_Properties><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Properties" target=_parent class=ISymbol>Properties</a></div></div><div class=SRResult id=SR_pushState><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.pushState" target=_parent class=ISymbol>pushState</a>, <span class=IParent>jQuery.bbq</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");
View
2  docs/search/GeneralR.html
@@ -11,7 +11,7 @@
-<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Release_spcHistory><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Release_History" target=_parent class=ISymbol>Release History</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
+<div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Release_spcHistory><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#Release_History" target=_parent class=ISymbol>Release History</a></div></div><div class=SRResult id=SR_removeState><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.bbq.removeState" target=_parent class=ISymbol>removeState</a>, <span class=IParent>jQuery.bbq</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");
View
20 docs/search/PropertiesH.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_hashchangeDelay><div class=IEntry><a href="../files/jquery-ba-bbq-js.html#jQuery.hashchangeDelay" target=_parent class=ISymbol>hashchangeDelay</a>, <span class=IParent>jQuery</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
161 examples/bug-chrome-back-button/index.php
@@ -1,161 +0,0 @@
-<?PHP
-
-include "../index.php";
-
-$shell['title3'] = "Bug in Chrome: Back Button";
-
-$shell['h2'] = 'Wanna see a strange issue in Chrome?';
-
-// ========================================================================== //
-// SUBHEADER
-// ========================================================================== //
-
-ob_start();
-?>
- <a href="http://benalman.com/news/2009/09/chrome-browser-history-buggine/">Read more about the issue here!</a>
-<?
-$shell['h3'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// SCRIPT
-// ========================================================================== //
-
-ob_start();
-?>
-
-var delay = 250;
-
-// Set the browser title.
-function set_title( i ) {
- document.title = document.title.replace( /\s*\d*$/, '' ) + ' ' + i;
-}
-
-// Add new history entries by changing window.location.hash, in an
-// asynchronous loop.
-function add_history_entries( start, end ) {
- (function loopy(){
- window.location.hash = '#' + start;
- set_title( start );
- ++start <= end && setTimeout( loopy, delay );
- })();
-};
-
-// Go back in the history, in an asynchronous loop.
-function go_back( i ) {
- (function loopy(){
- window.history.go(-1);
- --i && setTimeout( loopy, delay );
- })();
-};
-
-// Some window.onhashchange stuff. Not really important here.
-function handler() {
- var i = window.location.hash.replace( /^#/, '' );
- set_title( i );
-};
-
-if ( window.addEventListener ) {
- window.addEventListener( 'hashchange', handler, false );
-} else if ( window.attachEvent ) {
- window.attachEvent( 'onhashchange', handler );
-}
-
-<?
-$shell['script'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML HEAD ADDITIONAL
-// ========================================================================== //
-
-ob_start();
-?>
-<script type="text/javascript" language="javascript">
-
-<?= $shell['script']; ?>
-
-$(function(){
-
- // Syntax highlighter.
- SyntaxHighlighter.highlight();
-
-});
-
-</script>
-<style type="text/css" title="text/css">
-
-/*
-bg: #FDEBDC
-bg1: #FFD6AF
-bg2: #FFAB59
-orange: #FF7F00
-brown: #913D00
-lt. brown: #C4884F
-*/
-
-#page {
- width: 700px;
-}
-
-</style>
-<?
-$shell['html_head'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML BODY
-// ========================================================================== //
-
-ob_start();
-?>
-<?= $shell['donate'] ?>
-
-<p>First, open this page in a new window or tab, to clear any current window or tab history. Make your window wide enough so that you can see the full URL in the address bar, with some extra space left over.</p>
-
-<p>
-<a href="#" onclick="add_history_entries(1,10); return false;">Add ten history entries</a>
-</p>
-
-<ul>
- <li>Hash should change from #1 .. #10, once every 250ms.</li>
- <li>Browser title should change from "Back Button Test 1" .. "Back Button Test 10" at the same time.</li>
- <li>Ten new history entries should be added.</li>
- <li>Verify that pages "Back Button Test 0" .. "Back Button Test 9" are now in the history.</li>
-</ul>
-
-<p>
-<a href="#" onclick="go_back(10); return false;">Go back 10 times</a>
-</p>
-
-<ul>
- <li>Hash should change from #10 .. #1 then disappear.</li>
- <li>Browser title should only change from "Back Button Test 10" .. "Back Button Test 1" if window.onhashchange is supported.</li>
- <li>History entries "Back Button Test 9" .. "Back Button Test 0" should be removed.</li>
-</ul>
-
-<h3>Notes</h3>
-
-<ul>
- <li>No new history entries are added in IE6/7, so there's nothing to "go back" to.</li>
- <li>Only IE8 and FF 3.6 support window.onhashchange.</li>
- <li>Chrome 3 / Chromium randomly "loses" history entries. <a href="http://code.google.com/p/chromium/issues/detail?id=1016">Chromium issue 1016</a></li>
-</ul>
-
-<h3>The code</h3>
-
-<pre class="brush:js">
-<?= htmlspecialchars( $shell['script'] ); ?>
-</pre>
-
-<?
-$shell['html_body'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// DRAW SHELL
-// ========================================================================== //
-
-draw_shell();
-
-?>
View
223 examples/bug-firefox-remote-xhr/index.php
@@ -1,223 +0,0 @@
-<?PHP
-
-include "../index.php";
-
-$shell['title3'] = "Bug in Firefox: Remote XMLHttpRequest";
-
-$shell['h2'] = 'Wanna see a strange issue in Firefox?';
-
-// ========================================================================== //
-// SUBHEADER
-// ========================================================================== //
-
-ob_start();
-?>
- <a href="http://benalman.com/news/2009/11/is-this-a-firefox-remote-xhr-bug/">Read more about the issue here!</a>
-<?
-$shell['h3'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// SCRIPT
-// ========================================================================== //
-
-ob_start();
-?>
-
-$(function(){
-
- // Set the hash the "usual" way.
- function callback_hash( idx ) {
- debug.log( idx );
- window.location.hash = '#done_' + idx;
- };
-
- // Set the hash by re-setting the entire URL.
- function callback_href( idx ) {
- debug.log( idx );
- window.location.href = window.location.href.replace( /#.*$/, '' ) + '#done_' + idx;
- };
-
- // Set the hash by re-setting the entire URL.. asynchronously.
- function callback_href_kluge( idx ) {
- setTimeout(function(){
- callback_href( idx );
- }, 0);
- };
-
- var arr = [
-
- // 1
- [
- 'JSON request, callback sets hash via location.hash',
- {
- url: '../../shared/json_echo.php?a=1',
- success: function(){ callback_hash(1); }
- }
- ],
-
- // 2
- [
- 'JSONP request, callback sets hash via location.hash',
- {
- url: 'http://api.flickr.com/services/feeds/photos_public.gne?id=8395214@N06&format=json',
- dataType: 'jsonp',
- jsonp: 'jsoncallback',
- success: function(){ callback_hash(2); }
- }
- ],
-
- // 3
- [
- 'JSON request, callback sets hash via location.href',
- {
- url: '../../shared/json_echo.php?a=1',
- success: function(){ callback_href(3); }
- }
- ],
-
- // 4
- [
- 'JSONP request, callback sets hash via location.href <i>(FAILS IN FIREFOX)</i>',
- {
- url: 'http://api.flickr.com/services/feeds/photos_public.gne?id=8395214@N06&format=json',
- dataType: 'jsonp',
- jsonp: 'jsoncallback',
- success: function(){ callback_href(4); }
- }
- ],
-
- // 5
- [
- 'JSON request, callback sets hash via location.href, setTimeout kluge used',
- {
- url: '../../shared/json_echo.php?a=1',
- success: function(){ callback_href_kluge(5); }
- }
- ],
-
- // 6
- [
- 'JSONP request, callback sets hash via location.href, setTimeout kluge used',
- {
- url: 'http://api.flickr.com/services/feeds/photos_public.gne?id=8395214@N06&format=json',
- dataType: 'jsonp',
- jsonp: 'jsoncallback',
- success: function(){ callback_href_kluge(6); }
- }
- ]
- ];
-
- $.each( arr, function(i,v){
- var idx = i + 1,
- html = '<p><b>' + v[0] + '<\/b><\/p>'
- + 'Click <a href="#">this link<\/a>.'
- + ' The hash should immediately change to "start_' + idx + '", then "done_' + idx + '"'
- + ' once the callback completes. Once done, press the back button once to see'
- + ' "start_' + idx + '", and again to see an empty hash.';
-
- $('<li/>')
- .html( html )
- .appendTo( '#nav' )
- .find( 'a' )
- .click(function(){
- window.location.hash = '#start_' + idx;
- $.ajax( $.extend({}, v[1]) );
- return false;
- });
- });
-
-});
-<?
-$shell['script'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML HEAD ADDITIONAL
-// ========================================================================== //
-
-ob_start();
-?>
-<script type="text/javascript" language="javascript">
-
-<?= $shell['script']; ?>
-
-$(function(){
-
- // Syntax highlighter.
- SyntaxHighlighter.highlight();
-
-});
-
-</script>
-<style type="text/css" title="text/css">
-
-/*
-bg: #FDEBDC
-bg1: #FFD6AF
-bg2: #FFAB59
-orange: #FF7F00
-brown: #913D00
-lt. brown: #C4884F
-*/
-
-#page {
- width: 700px;
-}
-
-ol li {
- padding-bottom: 1.2em;
-}
-
-ol li p {
- margin-bottom: 0.2em;
-}
-
-ol li i {
- color: #f00;
-}
-
-</style>
-<?
-$shell['html_head'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML BODY
-// ========================================================================== //
-
-ob_start();
-?>
-<?= $shell['donate'] ?>
-
-<p>
- First, open this page in a new window or tab, to clear any current window or tab history. Make your window wide enough so that you can see the full URL in the address bar, with some extra space left over.
-</p>
-
-<p>
- Each link below, when clicked, should immediately change the location hash to "start_N" (where N is the index). Once the associated callback completes, the hash will be changed to "done_N". At this point, you should be able to press the browser "back" button once to see the "start_N" hash, and then a second time to see a completely empty hash.
-</p>
-
-<p>
- Notice how #4 fails in Firefox! All six tests work in IE 8, Opera, Safari and Chrome (of course, Chrome is succeptible to <a href="../bug-chrome-back-button/">a totally separate history bug</a>), but this question remains: <strong>is this intentional Firefox behavior, or a bug?</strong>
-</p>
-
-<ol id="nav"></ol>
-
-<h3>The code</h3>
-
-<pre class="brush:js">
-<?= htmlspecialchars( $shell['script'] ); ?>
-</pre>
-
-<?
-$shell['html_body'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// DRAW SHELL
-// ========================================================================== //
-
-draw_shell();
-
-?>
View
183 examples/bug-webkit-hash-iframe/child/index.php
@@ -1,183 +0,0 @@
-<?PHP
-
-include "../../index.php";
-$base = '../../';
-
-$shell['title3'] = "Bug in WebKit: Back Button in an Iframe";
-
-$shell['h2'] = 'Wanna see a strange issue in WebKit?';
-
-// ========================================================================== //
-// SCRIPT
-// ========================================================================== //
-
-ob_start();
-?>
-$(function(){
-
- // Show the current location.hash.
- setInterval(function(){ $('#status').text( location.hash ); }, 100);
-
-});
-<?
-$shell['script'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML HEAD ADDITIONAL
-// ========================================================================== //
-
-ob_start();
-?>
-<script type="text/javascript" language="javascript">
-
-<?= $shell['script']; ?>
-
-$(function(){
-
- // Syntax highlighter.
- SyntaxHighlighter.highlight();
-
- // Oops?
- if ( window == top ) {
- $('h2').show();
- }
-
- // Set the Iframe height.
- var if_height;
-
- (function loopy(){
-
- var h = $('body').outerHeight( true );
-
- h !== if_height && top.setHeight && top.setHeight( h ) && ( if_height = h );
-
- setTimeout( loopy, 500 );
-
- })();
-
-});
-
-</script>
-<style type="text/css" title="text/css">
-
-/*
-bg: #FDEBDC
-bg1: #FFD6AF
-bg2: #FFAB59
-orange: #FF7F00
-brown: #913D00
-lt. brown: #C4884F
-*/
-
-#page {
- width: auto;
-}
-
-#header, #footer {
- display: none;
-}
-
-html, body {
- background: #eee;
-}
-
-.step {
- color: #fff;
- background: #0a0;
- border: 1px solid #070;
- padding: 0 0.4em;
- font-weight: 700;
- -moz-border-radius: 8px;
- -webkit-border-radius: 8px;
- border-radius: 8px;
-}
-
-</style>
-<?
-$shell['html_head'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML BODY
-// ========================================================================== //
-
-ob_start();
-?>
-<h2 style="display:none">This page is part of a full example. If you didn't see a "step 1", <a href="../">click here to reset!</a></h2>
-
-<p>
- <span class="step">2</span>
- Click these links to change the Iframe location.hash:
- <a href="#middle">#middle</a> and
- <a href="#end">#end</a>.
-</p>
-<p>
- <em>The location.hash should go from #begin → #middle → #end as you click the
- links above.</em>
-</p>
-
-<p><strong>The current Iframe location.hash is: <span id="status"></span></strong></p>
-
-<p>
- Now, in most modern browsers (not IE6 or 7), in an Iframe or not, each hash change
- creates a new history entry, so that the back button becomes enabled and you
- can press it to return to a previous entry.
-</p>
-
-<p>
- <span class="step">3</span>
- After clicking #middle and #end, press the back button twice.
-</p>
-<p>
- <em>The location.hash should go from #end → #middle → #begin as you press the
- back button</em>
-</p>
-
-<p>
- When the #middle or #end links are clicked, and the location.hash is changed, the back button
- should be enabled. In Firefox, IE8 and Opera this works as expected. In Safari and
- Chrome, in an Iframe, the back button stays disabled.. and in the latest WebKit
- nightly (r51669), the back button is enabled, but only partially.
-</p>
-<p>
- For whatever reason, when the location.hash is changed inside an Iframe in Safari
- or Chrome, no new history entries are created (and the back button stays disabled).
- In the latest WebKit nightly, new history entries are created, but not for the initial
- location.hash. Meaning you can go back, but never to #begin.
-</p>
-
-<p>
- <span class="step">4</span>
- <a href="./#begin" target="_top">Click here</a> to load this page in the "top" and
- you'll see that everything works as-expected. Repeat steps 2 and 3 there, and you'll
- see that the location.hash goes from #begin → #middle → #end → #middle → #begin. When
- you're done, press the back button again to return to the "in an Iframe" page.
-</p>
-
-<p>
- <span class="step">5</span>
- Now that you've returned to the "in an Iframe" page, repeat steps 2 and 3 a final time..
- and see that the history now works! Well, almost works, because you still can't
- get to the initial #begin location.hash in Safari, Chrome, or the WebKit nightly.
-</p>
-
-<p>What's up with that, WebKit?</p>
-
-<h3>The code</h3>
-
-<pre class="brush:js">
-<?= htmlspecialchars( $shell['script'] ); ?>
-</pre>
-
-<?
-$shell['html_body'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// DRAW SHELL
-// ========================================================================== //
-
-draw_shell();
-
-?>
View
99 examples/bug-webkit-hash-iframe/index.php
@@ -1,99 +0,0 @@
-<?PHP
-
-include "../index.php";
-
-$shell['title3'] = "Bug in WebKit: Back Button in an Iframe";
-
-$shell['h2'] = 'Wanna see a strange issue in WebKit?';
-
-// ========================================================================== //
-// SUBHEADER
-// ========================================================================== //
-
-ob_start();
-?>
- <a href="http://benalman.com/news/2009/12/webkit-bug-hash-history-iframe/">Read more about the issue here!</a>
-<?
-$shell['h3'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML HEAD ADDITIONAL
-// ========================================================================== //
-
-ob_start();
-?>
-<script type="text/javascript" language="javascript">
-
-top.setHeight = function( h ) {
- return $('iframe').height( h ).length;
-};
-
-</script>
-<style type="text/css" title="text/css">
-
-/*
-bg: #FDEBDC
-bg1: #FFD6AF
-bg2: #FFAB59
-orange: #FF7F00
-brown: #913D00
-lt. brown: #C4884F
-*/
-
-iframe {
- border: 1px solid #000;
-}
-
-.step {
- color: #fff;
- background: #0a0;
- border: 1px solid #070;
- padding: 0 0.4em;
- font-weight: 700;
- -moz-border-radius: 8px;
- -webkit-border-radius: 8px;
- border-radius: 8px;
-}
-
-</style>
-<?
-$shell['html_head'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// HTML BODY
-// ========================================================================== //
-
-ob_start();
-?>
-<?= $shell['donate'] ?>
-
-<p>
- <span class="step">1</span>
- First, open this page in a brand new window (right click <a href="./">this link</a>,
- and select "open link in new window" if necessary) so that there is no browser
- history, and the back button is disabled (if the back button is clickable,
- it will complicate the example).
-</p>
-
-<p><em>Tested in Safari Version 4.0.4 (5531.21.10) / Chrome 3.0.195.33 / WebKit nightly r51669.
-Submitted to WebKit Bugzilla as <a href="https://bugs.webkit.org/show_bug.cgi?id=32156">Bug 32156</a>.</em></p>
-
-<h3>The Iframe</h3>
-
-<div id="iframe" class="clear">
- <iframe src="./child/#begin" width="700" height="400" scrolling="no" frameborder="0"></iframe>
-</div>
-
-<?
-$shell['html_body'] = ob_get_contents();
-ob_end_clean();
-
-// ========================================================================== //
-// DRAW SHELL
-// ========================================================================== //
-
-draw_shell();
-
-?>
View
2  examples/config.php
@@ -13,7 +13,7 @@
ob_end_clean();
$shell['jquery'] = 'jquery-1.3.2.js';
-//$shell['jquery'] = 'jquery-1.4pre.js';
+//$shell['jquery'] = 'jquery-1.4a2.js';
$shell['shBrush'] = array( 'JScript' );
View
30 examples/deparam/index.php
@@ -31,7 +31,7 @@
// Highlight the current sample query string link
var qs = $.param.querystring();
- $('ul a').each(function(){
+ $('li a').each(function(){
if ( $(this).attr( 'href' ) === '?' + qs ) {
$(this).addClass( 'current' );
}
@@ -84,6 +84,10 @@
width: 700px;
}
+#page * {
+ word-wrap: break-word;
+}
+
.deparam {
width: 343px;
}
@@ -101,6 +105,10 @@
text-decoration: none;
}
+li {
+ margin-bottom: 0.6em;
+}
+
</style>
<?
$shell['html_head'] = ob_get_contents();
@@ -120,12 +128,20 @@
<h3>Sample query strings for you to click:</h3>
-<ul>
- <li><a href="?a=1&a=2&a=3&b=4&c=true&d=0">?a=1&a=2&a=3&b=4&c=true&d=0</a> - this won't work in PHP (jQuery 1.3.2 or older $.param)</li>
- <li><a href="?a[]=1&a[]=2&a[]=3&b=4&c=true&d=0">?a[]=1&a[]=2&a[]=3&b=4&c=true&d=0</a> - this will work in PHP (jQuery 1.4 or newer $.param)</li>
- <li><a href="?a=true&b=false&c=undefined&d=&f=1&g=2&h=hello+world">?a=true&b=false&c=undefined&d=&f=1&g=2&h=hello+world</a></li>
- <li><a href="?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">?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</a></li>
-</ul>
+<ol>
+ <li>Arrays encoded like this won't work as-expected in PHP / Rails, but work in BBQ and many older server-side frameworks (jQuery 1.3.2 or older $.param, jQuery 1.4 with $.param.traditional = true):<br>
+ <a href="?a=1&a=2&a=3&b=4&c=true&d=0">?a=1&a=2&a=3&b=4&c=true&d=0</a></li>
+ <li>Arrays encoded like this will work as-expected in PHP / Rails / BBQ (jQuery 1.4 or newer $.param):<br>
+ <a href="?a[]=1&a[]=2&a[]=3&b=4&c=true&d=0">?a[]=1&a[]=2&a[]=3&b=4&c=true&d=0</a></li>
+ <li>jQuery BBQ and PHP can handle non-shallow arrays, but Rails (rack) cannot (jQuery 1.4 or newer $.param):<br>
+ <a href="?a[]=0&a[1][]=1&a[1][]=2&a[2][]=3&a[2][1][]=4&a[2][1][]=5&a[2][2][]=6&a[3][b][]=7&a[3][b][1][]=8&a[3][b][1][]=9&a[3][b][2][0][c]=10&a[3][b][2][0][d]=11&a[3][b][3][0][]=12&a[3][b][4][0][0][]=13&a[3][b][5][e][f][g][]=14&a[3][b][5][e][f][g][1][]=15&a[3][b][]=16&a[]=17">?a[]=0&a[1][]=1&a[1][]=2&a[2][]=3&a[2][1][]=4&a[2][1][]=5&a[2][2][]=6&a[3][b][]=7&a[3][b][1][]=8&a[3][b][1][]=9
+ &a[3][b][2][0][c]=10&a[3][b][2][0][d]=11&a[3][b][3][0][]=12&a[3][b][4][0][0][]=13&a[3][b][5][e][f][g][]=14
+ &a[3][b][5][e][f][g][1][]=15&a[3][b][]=16&a[]=17</a></li>
+ <li>Some simple implicitly non-string values that BBQ can optionally coerce:<br>
+ <a href="?a=true&b=false&c=undefined&d=&f=1&g=2&h=hello+world">?a=true&b=false&c=undefined&d=&f=1&g=2&h=hello+world</a></li>
+ <li>More nested data structures. Since the arrays are shallow, this works in Rails (rack).<br>
+ <a href="?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">?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</a></li>
+</ol>
<h3>Urldecoded query string</h3>
View
2  examples/fragment-advanced/index.php
@@ -2,7 +2,7 @@
include "../index.php";
-$shell['title3'] = "window.onhashchange » Advanced";
+$shell['title3'] = "hashchange » Advanced";
$shell['h2'] = 'Cached AJAX + fragment + history + bookmarking = Tasty!';
View
2  examples/fragment-basic/index.php
@@ -2,7 +2,7 @@
include "../index.php";
-$shell['title3'] = "window.onhashchange » Basic";
+$shell['title3'] = "hashchange » Basic";
$shell['h2'] = 'Cached AJAX + fragment + history + bookmarking = Tasty!';
View
2  examples/fragment-jquery-ui-tabs/index.php
@@ -2,7 +2,7 @@
include "../index.php";
-$shell['title3'] = "window.onhashchange » jQuery UI Tabs";
+$shell['title3'] = "hashchange » jQuery UI Tabs";
$shell['h2'] = 'Multiple jQuery UI Tabs + fragment + history + bookmarking = Tasty!';
View
2  examples/index.php
@@ -89,7 +89,7 @@ function draw_shell() {
If console output is mentioned, but your browser has no console, this example is using <a href="http://benalman.com/projects/javascript-debug-console-log/">JavaScript Debug</a>. Click this bookmarklet: <a href="javascript:if(!window.firebug){window.firebug=document.createElement(&quot;script&quot;);firebug.setAttribute(&quot;src&quot;,&quot;http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js&quot;);document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init()}else{setTimeout(arguments.callee)}})();void (firebug);if(window.debug&&debug.setCallback){(function(){if(window.firebug&&window.firebug.version){debug.setCallback(function(b){var a=Array.prototype.slice.call(arguments,1);firebug.d.console.cmd[b].apply(window,a)},true)}else{setTimeout(arguments.callee,100)}})()}};">Debug + Firebug Lite</a> to add the Firebug lite console to the current page. Syntax highlighting is handled by <a href="http://alexgorbatchev.com/">SyntaxHighlighter</a>.
</p>
<p>
- All original code is Copyright © 2009 "Cowboy" Ben Alman and dual licensed under the MIT and GPL licenses. View the <a href="http://benalman.com/about/license/">license page</a> for more details.
+ All original code is Copyright &copy; 2010 "Cowboy" Ben Alman and dual licensed under the MIT and GPL licenses. View the <a href="http://benalman.com/about/license/">license page</a> for more details.
</p>
</div>
</div>
View
280 jquery.ba-bbq.js
@@ -1,24 +1,24 @@
/*!
- * jQuery BBQ: Back Button & Query Library - v1.0.3 - 12/2/2009
+ * jQuery BBQ: Back Button & Query Library - v1.1 - 1/9/2010
* http://benalman.com/projects/jquery-bbq-plugin/
*
- * Copyright (c) 2009 "Cowboy" Ben Alman
+ * Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
// Script: jQuery BBQ: Back Button & Query Library
//
-// *Version: 1.0.3, Last updated: 12/2/2009*
+// *Version: 1.1, Last updated: 1/9/2010*
//
// Project Home - http://benalman.com/projects/jquery-bbq-plugin/
// GitHub - http://github.com/cowboy/jquery-bbq/
// Source - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js
-// (Minified) - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js (3.2kb)
+// (Minified) - http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.min.js (3.7kb)
//
// About: License
//
-// Copyright (c) 2009 "Cowboy" Ben Alman,
+// Copyright (c) 2010 "Cowboy" Ben Alman,
// Dual licensed under the MIT and GPL licenses.
// http://benalman.com/about/license/
//
@@ -38,12 +38,19 @@
// tested with, what browsers it has been tested in, and where the unit tests
// reside (so you can test it yourself).
//
-// jQuery Versions - 1.3.2, 1.4pre
-// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.
+// jQuery Versions - 1.3.2, 1.4a2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.1.
// Unit Tests - http://benalman.com/code/projects/jquery-bbq/unit/
//
// About: Release History
//
+// 1.1 - (1/9/2010) Broke out the jQuery BBQ event.special window.onhashchange
+// functionality into a separate plugin for users who want just the
+// basic event & back button support, without all the extra awesomeness
+// that BBQ provides. This plugin will be included as part of jQuery BBQ,
+// but also be available separately. See <jQuery hashchange event>
+// plugin for more information. Also added the $.bbq.removeState method
+// and added additional $.deparam examples.
// 1.0.3 - (12/2/2009) Fixed an issue in IE 6 where location.search and
// location.hash would report incorrectly if the hash contained the ?
// character. Also $.param.querystring and $.param.fragment will no
@@ -67,15 +74,16 @@
aps = Array.prototype.slice,
decode = decodeURIComponent,
- // Method references.
+ // Method / object references.
jq_param = $.param,
jq_param_fragment,
jq_deparam,
jq_deparam_fragment,
jq_bbq = $.bbq = $.bbq || {},
jq_bbq_pushState,
+ jq_bbq_getState,
jq_elemUrlAttr,
- fake_onhashchange,
+ jq_event_special = $.event.special,
// Reused strings.
str_hashchange = 'hashchange',
@@ -85,13 +93,6 @@
str_href = 'href',
str_src = 'src',
- browser = $.browser,
- is_old_ie = browser.msie && browser.version < 8,
-
- // Does the browser support window.onhashchange? Test for IE version, since
- // IE8 incorrectly reports this when in "IE7" or "IE8 Compatibility View"!
- supports_onhashchange = 'on' + str_hashchange in window && !is_old_ie,
-
// Reused RegExp.
re_trim_querystring = /^.*\?|#.*$/g,
re_trim_fragment = /^.*\#/,
@@ -664,6 +665,7 @@
loc[ str_href ] = url + ( /#/.test( url ) ? '' : '#' );
};
+
// Method: jQuery.bbq.getState
//
// Retrieves the current 'state' from the browser history, parsing
@@ -687,30 +689,66 @@
// in the location.hash 'state', or undefined. If not, an object
// representing the entire 'state' is returned.
- jq_bbq.getState = function( key, coerce ) {
+ jq_bbq.getState = jq_bbq_getState = function( key, coerce ) {
return key === undefined || typeof key === 'boolean'
? jq_deparam_fragment( key ) // 'key' really means 'coerce' here
: jq_deparam_fragment( coerce )[ key ];
};
- // Property: jQuery.bbq.pollDelay
+ // Method: jQuery.bbq.removeState
//
- // The numeric interval (in milliseconds) at which the <window.onhashchange>
- // polling loop executes. Defaults to 100.
+ // Remove one or more keys from the current browser history 'state', creating
+ // a new state, setting location.hash and triggering any bound
+ // <window.onhashchange> event callbacks (provided the new state is different
+ // than the previous state).
+ //
+ // If no arguments are passed, an empty state is created, which is just a
+ // shortcut for jQuery.bbq.pushState( {}, 2 ).
+ //
+ // Usage:
+ //
+ // > jQuery.bbq.removeState( [ key [, key ... ] ] );
+ //
+ // Arguments:
+ //
+ // key - (String) One or more key values to remove from the current state,
+ // passed as individual arguments.
+ // key - (Array) A single array argument that contains a list of key values
+ // to remove from the current state.
+ //
+ // Returns:
+ //
+ // Nothing.
+ //
+ // Additional Notes:
+ //
+ // * Setting an empty state may cause the browser to scroll.
- jq_bbq.pollDelay = 100;
+ jq_bbq.removeState = function( arr ) {
+ var state = {};
+
+ // If one or more arguments is passed..
+ if ( arr !== undefined ) {
+
+ // Get the current state.
+ state = jq_bbq_getState();
+
+ // For each passed key, delete the corresponding property from the current
+ // state.
+ $.each( $.isArray( arr ) ? arr : arguments, function(i,v){
+ delete state[ v ];
+ });
+ }
+
+ // Set the state, completely overriding any existing state.
+ jq_bbq_pushState( state, 2 );
+ };
// Event: window.onhashchange
//
- // Fired when window.location.hash changes. In browsers that support it, the
- // native window.onhashchange event is used (IE8, FF3.6), otherwise a polling
- // loop is initialized, running every <jQuery.bbq.pollDelay> milliseconds to
- // see if the hash has changed. In IE 6 and 7, a hidden IFRAME is created
- // to allow hash-based history to work.
- //
- // Usage in 1.4pre and newer:
+ // Usage in 1.4a2 and newer:
//
- // In 1.4pre and newer, the event object that is passed into the callback is
+ // In 1.4a2 and newer, the event object that is passed into the callback is
// augmented with an additional e.fragment property that contains the current
// document location.hash state as a string, as well as an e.getState method.
//
@@ -730,7 +768,7 @@
//
// Usage in 1.3.2:
//
- // In 1.3.2, the event object is unable to be augmented as in 1.4pre+, so the
+ // In 1.3.2, the event object is unable to be augmented as in 1.4a2+, so the
// fragment state isn't bound to the event object and must instead be parsed
// using the <jQuery.param.fragment> and <jQuery.bbq.getState> methods.
//
@@ -744,13 +782,155 @@
//
// Additional Notes:
//
+ // * See <jQuery hashchange event> for more detailed information.
+
+ jq_event_special[ str_hashchange ] = $.extend( jq_event_special[ str_hashchange ], {
+
+ // Augmenting the event object with the .fragment property and .getState
+ // method requires jQuery 1.4 or newer. Note: with 1.3.2, everything will
+ // work, but the event won't be augmented)
+ add: function( handler, data, namespaces ) {
+ return function(e) {
+ // e.fragment is set to the value of location.hash (with any leading #
+ // removed) at the time the event is triggered.
+ var hash = e[ str_fragment ] = jq_param_fragment();
+
+ // e.getState() works just like $.bbq.getState(), but uses the
+ // e.fragment property stored on the event object.
+ e.getState = function( key, coerce ) {
+ return key === undefined || typeof key === 'boolean'
+ ? jq_deparam( hash, key ) // 'key' really means 'coerce' here
+ : jq_deparam( hash, coerce )[ key ];
+ };
+
+ handler.apply( this, arguments );
+ };
+ }
+
+ });
+
+})(jQuery,this);
+
+/*!
+ * jQuery hashchange event - v1.0 - 1/9/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+
+// Script: jQuery hashchange event
+//
+// *Version: 1.0, Last updated: 1/9/2010*
+//
+// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/
+// GitHub - http://github.com/cowboy/jquery-hashchange/
+// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js
+// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (1.1kb)
+//
+// About: License
+//
+// Copyright (c) 2010 "Cowboy" Ben Alman,
+// Dual licensed under the MIT and GPL licenses.
+// http://benalman.com/about/license/
+//
+// About: Examples
+//
+// This working example, complete with fully commented code, illustrate one way
+// in which this plugin can be used.
+//
+// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
+//
+// About: Support and Testing
+//
+// 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).
+//
+// jQuery Versions - 1.3.2, 1.4a2
+// Browsers Tested - Internet Explorer 6-8, Firefox 2-3.7, Safari 3-4, Chrome, Opera 9.6-10.
+// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/
+//
+// About: Known issues
+//
+// 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. See the following examples for more information:
+//
+// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/
+// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/
+// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/
+//
+// About: Release History
+//
+// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special
+// window.onhashchange functionality into a separate plugin for users
+// who want just the basic event & back button support, without all the
+// extra awesomeness that BBQ provides. This plugin will be included as
+// part of jQuery BBQ, but also be available separately.
+
+(function($,window){
+ '$:nomunge'; // Used by YUI compressor.
+
+ // A convenient shortcut.
+ var loc = window.location,
+
+ // Method / object references.
+ fake_onhashchange,
+ jq_event_special = $.event.special,
+
+ // Reused strings.
+ str_hashchange = 'hashchange',
+
+ // IE6/7 specifically need some special love when it comes to back-button
+ // support, so let's do a little browser sniffing..
+ browser = $.browser,
+ is_old_ie = browser.msie && browser.version < 8,
+
+ // Does the browser support window.onhashchange? Test for IE version, since
+ // IE8 incorrectly reports this when in "IE7" or "IE8 Compatibility View"!
+ supports_onhashchange = 'on' + str_hashchange in window && !is_old_ie;
+
+ // 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 ) {
+ url = url || loc.href;
+ return url.replace( /^[^#]*#?(.*)$/, '$1' );
+ };
+
+ // Property: jQuery.hashchangeDelay
+ //
+ // The numeric interval (in milliseconds) at which the <window.onhashchange>
+ // polling loop executes. Defaults to 100.
+
+ $[ str_hashchange + 'Delay' ] = 100;
+
+ // Event: window.onhashchange
+ //
+ // Fired when window.location.hash changes. In browsers that support it, the
+ // native window.onhashchange event is used (IE8, FF3.6), otherwise a polling
+ // loop is initialized, running every <jQuery.hashchangeDelay> milliseconds
+ // to see if the hash has changed. In IE 6 and 7, a hidden IFRAME is created
+ // to allow the back button and hash-based history to work.
+ //
+ // Usage:
+ //
+ // > $(window).bind( 'hashchange', function(e) {
+ // > var hash = location.hash;
+ // > ...
+ // > });
+ //
+ // Additional Notes:
+ //
// * The polling loop and iframe are not created until at least one callback
// is actually bound to 'hashchange'.
// * If you need the bound callback(s) to execute immediately, in cases where
// the page 'state' exists on page load (via bookmark or page refresh, for
// example) use $(window).trigger( 'hashchange' );
- $.event.special[ str_hashchange ] = {
+ jq_event_special[ str_hashchange ] = $.extend( jq_event_special[ str_hashchange ], {
// Called only when the first 'hashchange' event is bound to window.
setup: function() {
@@ -770,29 +950,9 @@
// Otherwise, we need to stop ours (if possible).
fake_onhashchange.stop();
- },
-
- // Augmenting the event object with the .fragment property and .getState
- // method requires jQuery 1.4 or newer. Note: with 1.3.2, everything will
- // work, but the event won't be augmented)
- add: function( handler, data, namespaces ) {
- return function(e) {
- // e.fragment is set to the value of location.hash (with any leading #
- // removed) at the time the event is triggered.
- var hash = e[ str_fragment ] = jq_param_fragment();
-
- // e.getState() works just like $.bbq.getState(), but uses the
- // e.fragment property stored on the event object.
- e.getState = function( key, coerce ) {
- return key === undefined || typeof key === 'boolean'
- ? jq_deparam( hash, key ) // 'key' really means 'coerce' here
- : jq_deparam( hash, coerce )[ key ];
- };
-
- handler.apply( this, arguments );
- };
}
- };
+
+ });
// fake_onhashchange does all the work of triggering the window.onhashchange
// event for browsers that don't natively support it, including creating a
@@ -818,7 +978,7 @@
// Get history by looking at the hidden IFRAME's location.hash.
get_history = function() {
- return get_fragment( iframe.document.location[ str_href ] );
+ return get_fragment( iframe.document.location.href );
};
// Set a new history item by opening and then closing the IFRAME
@@ -832,7 +992,7 @@
};
// Set initial history.
- set_history( jq_param_fragment() );
+ set_history( get_fragment() );
}
};