From 91cfbe03b39e3428ab283d078f49a55a7dac860d Mon Sep 17 00:00:00 2001
From: Richard Brown
Date: Mon, 30 Apr 2012 19:59:44 +0100
Subject: [PATCH 1/2] Initial commit
---
Makefile | 10 +++++-----
js/jquery.mobile.event.js | 2 +-
js/jquery.swipeevents.js | 7 +++++++
3 files changed, 13 insertions(+), 6 deletions(-)
create mode 100644 js/jquery.swipeevents.js
diff --git a/Makefile b/Makefile
index 4858619e79c..2e197b167e3 100644
--- a/Makefile
+++ b/Makefile
@@ -8,17 +8,17 @@ SED_VER_REPLACE = 's/__version__/"${VER_OFFICIAL}"/g'
SED_VER_API = sed ${SED_VER_REPLACE}
SED_INPLACE_EXT = "whyunowork"
deploy: VER = sed "s/v@VERSION/${VER_OFFICIAL} ${HEAD_SHA}/"
-deploy: VER_MIN = "/*! jQuery Mobile v${VER_OFFICIAL} ${HEAD_SHA} jquerymobile.com | jquery.org/license */"
+deploy: VER_MIN = "/*! jQuery Swipe Events v${VER_OFFICIAL} ${HEAD_SHA} jQuery mobile fork - jquerymobile.com | jquery.org/license */"
# The output folder for the finished files
OUTPUT = compiled
# The name of the files
-NAME = jquery.mobile
-BASE_NAME = jquery.mobile
+NAME = jquery.swipeevents
+BASE_NAME = jquery.swipeevents
THEME_FILENAME = jquery.mobile.theme
STRUCTURE = jquery.mobile.structure
-deploy: NAME = jquery.mobile-${VER_OFFICIAL}
+deploy: NAME = jquery.swipeevents-${VER_OFFICIAL}
deploy: THEME_FILENAME = jquery.mobile.theme-${VER_OFFICIAL}
deploy: STRUCTURE = jquery.mobile.structure-${VER_OFFICIAL}
@@ -125,7 +125,7 @@ js: init
${RUN_JS} \
external/r.js/dist/r.js \
-o baseUrl="js" \
- name=jquery.mobile \
+ name=jquery.swipeevents \
exclude=jquery,../external/requirejs/order,../external/requirejs/depend,../external/requirejs/text,../external/requirejs/text!../version.txt \
out=${OUTPUT}/${NAME}.compiled.js \
pragmasOnSave.jqmBuildExclude=true \
diff --git a/js/jquery.mobile.event.js b/js/jquery.mobile.event.js
index f9d1744e482..f5d6c4eecc1 100644
--- a/js/jquery.mobile.event.js
+++ b/js/jquery.mobile.event.js
@@ -4,7 +4,7 @@
//>>group: Core
//>>required: true
-define( [ "jquery", "./jquery.mobile.core", "./jquery.mobile.support", "./jquery.mobile.vmouse" ], function( $ ) {
+define( [ "./jquery.mobile.support", "./jquery.mobile.vmouse" ], function( $ ) {
//>>excludeEnd("jqmBuildExclude");
(function( $, window, undefined ) {
diff --git a/js/jquery.swipeevents.js b/js/jquery.swipeevents.js
new file mode 100644
index 00000000000..69d5d4e4d3b
--- /dev/null
+++ b/js/jquery.swipeevents.js
@@ -0,0 +1,7 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>group: exclude
+
+define([
+ './jquery.mobile.event',
+]);
+//>>excludeEnd("jqmBuildExclude");
From 5b90a50fa950a8951a56a0e5eb01f30c01b5602e Mon Sep 17 00:00:00 2001
From: Richard Brown
Date: Sat, 8 Dec 2012 19:55:30 +0000
Subject: [PATCH 2/2] Remove unneeded javascript
---
js/events/orientationchange.js | 154 --
js/events/throttledresize.js | 47 -
js/index.php | 91 --
js/jquery.hashchange.js | 379 -----
js/jquery.mobile.buttonMarkup.js | 281 ----
js/jquery.mobile.core.js | 343 -----
js/jquery.mobile.define.js | 5 -
js/jquery.mobile.degradeInputs.js | 61 -
js/jquery.mobile.docs.js | 5 -
js/jquery.mobile.events.js | 2 +-
js/jquery.mobile.fieldContain.js | 29 -
js/jquery.mobile.grid.js | 59 -
js/jquery.mobile.init.js | 150 --
js/jquery.mobile.js | 35 +-
js/jquery.mobile.links.js | 26 -
js/jquery.mobile.media.js | 53 -
js/jquery.mobile.navigation.js | 1622 --------------------
js/jquery.mobile.navigation.pushstate.js | 158 --
js/jquery.mobile.nojs.js | 18 -
js/jquery.mobile.support.js | 197 ---
js/jquery.mobile.support.orientation.js | 15 -
js/jquery.mobile.transition.js | 177 ---
js/jquery.mobile.transitions.js | 19 -
js/jquery.mobile.widget.js | 75 -
js/jquery.mobile.zoom.iosorientationfix.js | 43 -
js/jquery.mobile.zoom.js | 43 -
js/jquery.swipeevents.js | 7 -
js/jquery.tag.inserter.js | 26 -
js/jquery.ui.widget.js | 516 -------
js/transitions/flip.js | 20 -
js/transitions/flow.js | 20 -
js/transitions/pop.js | 20 -
js/transitions/slide.js | 24 -
js/transitions/slidedown.js | 20 -
js/transitions/slidefade.js | 21 -
js/transitions/slideup.js | 20 -
js/transitions/turn.js | 20 -
js/widgets/addFirstLastClasses.js | 38 -
js/widgets/collapsible.js | 168 --
js/widgets/collapsibleSet.js | 93 --
js/widgets/controlgroup.js | 120 --
js/widgets/dialog.js | 145 --
js/widgets/fixedToolbar.js | 317 ----
js/widgets/fixedToolbar.workarounds.js | 104 --
js/widgets/forms/button.js | 168 --
js/widgets/forms/checkboxradio.js | 216 ---
js/widgets/forms/reset.js | 23 -
js/widgets/forms/select.custom.js | 562 -------
js/widgets/forms/select.js | 296 ----
js/widgets/forms/slider.js | 490 ------
js/widgets/forms/textinput.js | 188 ---
js/widgets/listview.autodividers.js | 67 -
js/widgets/listview.filter.js | 139 --
js/widgets/listview.js | 393 -----
js/widgets/loader.js | 185 ---
js/widgets/navbar.js | 62 -
js/widgets/page.js | 62 -
js/widgets/page.sections.js | 100 --
js/widgets/popup.js | 874 -----------
js/widgets/table.columntoggle.js | 106 --
js/widgets/table.js | 77 -
js/widgets/table.reflow.js | 68 -
62 files changed, 3 insertions(+), 9859 deletions(-)
delete mode 100644 js/events/orientationchange.js
delete mode 100644 js/events/throttledresize.js
delete mode 100644 js/index.php
delete mode 100644 js/jquery.hashchange.js
delete mode 100644 js/jquery.mobile.buttonMarkup.js
delete mode 100644 js/jquery.mobile.core.js
delete mode 100644 js/jquery.mobile.define.js
delete mode 100644 js/jquery.mobile.degradeInputs.js
delete mode 100644 js/jquery.mobile.docs.js
delete mode 100644 js/jquery.mobile.fieldContain.js
delete mode 100644 js/jquery.mobile.grid.js
delete mode 100644 js/jquery.mobile.init.js
delete mode 100644 js/jquery.mobile.links.js
delete mode 100644 js/jquery.mobile.media.js
delete mode 100644 js/jquery.mobile.navigation.js
delete mode 100644 js/jquery.mobile.navigation.pushstate.js
delete mode 100644 js/jquery.mobile.nojs.js
delete mode 100644 js/jquery.mobile.support.js
delete mode 100644 js/jquery.mobile.support.orientation.js
delete mode 100644 js/jquery.mobile.transition.js
delete mode 100644 js/jquery.mobile.transitions.js
delete mode 100644 js/jquery.mobile.widget.js
delete mode 100644 js/jquery.mobile.zoom.iosorientationfix.js
delete mode 100644 js/jquery.mobile.zoom.js
delete mode 100644 js/jquery.swipeevents.js
delete mode 100644 js/jquery.tag.inserter.js
delete mode 100644 js/jquery.ui.widget.js
delete mode 100644 js/transitions/flip.js
delete mode 100644 js/transitions/flow.js
delete mode 100644 js/transitions/pop.js
delete mode 100644 js/transitions/slide.js
delete mode 100644 js/transitions/slidedown.js
delete mode 100644 js/transitions/slidefade.js
delete mode 100644 js/transitions/slideup.js
delete mode 100644 js/transitions/turn.js
delete mode 100644 js/widgets/addFirstLastClasses.js
delete mode 100644 js/widgets/collapsible.js
delete mode 100644 js/widgets/collapsibleSet.js
delete mode 100644 js/widgets/controlgroup.js
delete mode 100644 js/widgets/dialog.js
delete mode 100644 js/widgets/fixedToolbar.js
delete mode 100644 js/widgets/fixedToolbar.workarounds.js
delete mode 100644 js/widgets/forms/button.js
delete mode 100644 js/widgets/forms/checkboxradio.js
delete mode 100644 js/widgets/forms/reset.js
delete mode 100644 js/widgets/forms/select.custom.js
delete mode 100644 js/widgets/forms/select.js
delete mode 100644 js/widgets/forms/slider.js
delete mode 100644 js/widgets/forms/textinput.js
delete mode 100644 js/widgets/listview.autodividers.js
delete mode 100644 js/widgets/listview.filter.js
delete mode 100644 js/widgets/listview.js
delete mode 100644 js/widgets/loader.js
delete mode 100644 js/widgets/navbar.js
delete mode 100644 js/widgets/page.js
delete mode 100644 js/widgets/page.sections.js
delete mode 100644 js/widgets/popup.js
delete mode 100644 js/widgets/table.columntoggle.js
delete mode 100644 js/widgets/table.js
delete mode 100644 js/widgets/table.reflow.js
diff --git a/js/events/orientationchange.js b/js/events/orientationchange.js
deleted file mode 100644
index 95674f3b747..00000000000
--- a/js/events/orientationchange.js
+++ /dev/null
@@ -1,154 +0,0 @@
-//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
-//>>description: Orientation change event
-//>>label: orientationchange
-//>>group: Events
-
-define( [ "jquery", "../jquery.mobile.support.orientation", "./throttledresize" ], function( jQuery ) {
-//>>excludeEnd("jqmBuildExclude");
-
-(function( $, window ) {
- var win = $( window ),
- event_name = "orientationchange",
- special_event,
- get_orientation,
- last_orientation,
- initial_orientation_is_landscape,
- initial_orientation_is_default,
- portrait_map = { "0": true, "180": true };
-
- // It seems that some device/browser vendors use window.orientation values 0 and 180 to
- // denote the "default" orientation. For iOS devices, and most other smart-phones tested,
- // the default orientation is always "portrait", but in some Android and RIM based tablets,
- // the default orientation is "landscape". The following code attempts to use the window
- // dimensions to figure out what the current orientation is, and then makes adjustments
- // to the to the portrait_map if necessary, so that we can properly decode the
- // window.orientation value whenever get_orientation() is called.
- //
- // Note that we used to use a media query to figure out what the orientation the browser
- // thinks it is in:
- //
- // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
- //
- // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
- // where the browser *ALWAYS* applied the landscape media query. This bug does not
- // happen on iPad.
-
- if ( $.support.orientation ) {
-
- // Check the window width and height to figure out what the current orientation
- // of the device is at this moment. Note that we've initialized the portrait map
- // values to 0 and 180, *AND* we purposely check for landscape so that if we guess
- // wrong, , we default to the assumption that portrait is the default orientation.
- // We use a threshold check below because on some platforms like iOS, the iPhone
- // form-factor can report a larger width than height if the user turns on the
- // developer console. The actual threshold value is somewhat arbitrary, we just
- // need to make sure it is large enough to exclude the developer console case.
-
- var ww = window.innerWidth || $( window ).width(),
- wh = window.innerHeight || $( window ).height(),
- landscape_threshold = 50;
-
- initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
-
-
- // Now check to see if the current window.orientation is 0 or 180.
- initial_orientation_is_default = portrait_map[ window.orientation ];
-
- // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
- // if the initial orientation is portrait, but window.orientation reports 90 or -90, we
- // need to flip our portrait_map values because landscape is the default orientation for
- // this device/browser.
- if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
- portrait_map = { "-90": true, "90": true };
- }
- }
-
- $.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, {
- setup: function() {
- // If the event is supported natively, return false so that jQuery
- // will bind to the event using DOM methods.
- if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
- return false;
- }
-
- // Get the current orientation to avoid initial double-triggering.
- last_orientation = get_orientation();
-
- // Because the orientationchange event doesn't exist, simulate the
- // event by testing window dimensions on resize.
- win.bind( "throttledresize", handler );
- },
- teardown: function() {
- // If the event is not supported natively, return false so that
- // jQuery will unbind the event using DOM methods.
- if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
- return false;
- }
-
- // Because the orientationchange event doesn't exist, unbind the
- // resize event handler.
- win.unbind( "throttledresize", handler );
- },
- add: function( handleObj ) {
- // Save a reference to the bound event handler.
- var old_handler = handleObj.handler;
-
-
- handleObj.handler = function( event ) {
- // Modify event object, adding the .orientation property.
- event.orientation = get_orientation();
-
- // Call the originally-bound event handler and return its result.
- return old_handler.apply( this, arguments );
- };
- }
- });
-
- // If the event is not supported natively, this handler will be bound to
- // the window resize event to simulate the orientationchange event.
- function handler() {
- // Get the current orientation.
- var orientation = get_orientation();
-
- if ( orientation !== last_orientation ) {
- // The orientation has changed, so trigger the orientationchange event.
- last_orientation = orientation;
- win.trigger( event_name );
- }
- }
-
- // Get the current page orientation. This method is exposed publicly, should it
- // be needed, as jQuery.event.special.orientationchange.orientation()
- $.event.special.orientationchange.orientation = get_orientation = function() {
- var isPortrait = true, elem = document.documentElement;
-
- // prefer window orientation to the calculation based on screensize as
- // the actual screen resize takes place before or after the orientation change event
- // has been fired depending on implementation (eg android 2.3 is before, iphone after).
- // More testing is required to determine if a more reliable method of determining the new screensize
- // is possible when orientationchange is fired. (eg, use media queries + element + opacity)
- if ( $.support.orientation ) {
- // if the window orientation registers as 0 or 180 degrees report
- // portrait, otherwise landscape
- isPortrait = portrait_map[ window.orientation ];
- } else {
- isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
- }
-
- return isPortrait ? "portrait" : "landscape";
- };
-
- $.fn[ event_name ] = function( fn ) {
- return fn ? this.bind( event_name, fn ) : this.trigger( event_name );
- };
-
- // jQuery < 1.8
- if ( $.attrFn ) {
- $.attrFn[ event_name ] = true;
- }
-
-}( jQuery, this ));
-
-//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
-});
-//>>excludeEnd("jqmBuildExclude");
\ No newline at end of file
diff --git a/js/events/throttledresize.js b/js/events/throttledresize.js
deleted file mode 100644
index 3efeb46a460..00000000000
--- a/js/events/throttledresize.js
+++ /dev/null
@@ -1,47 +0,0 @@
-//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
-//>>description: Throttled resize event
-//>>label: throttledresize
-//>>group: Events
-
-define( [ "jquery" ], function( jQuery ) {
-//>>excludeEnd("jqmBuildExclude");
-
- // throttled resize event
- (function( $ ) {
- $.event.special.throttledresize = {
- setup: function() {
- $( this ).bind( "resize", handler );
- },
- teardown: function() {
- $( this ).unbind( "resize", handler );
- }
- };
-
- var throttle = 250,
- handler = function() {
- curr = ( new Date() ).getTime();
- diff = curr - lastCall;
-
- if ( diff >= throttle ) {
-
- lastCall = curr;
- $( this ).trigger( "throttledresize" );
-
- } else {
-
- if ( heldCall ) {
- clearTimeout( heldCall );
- }
-
- // Promise a held call will still execute
- heldCall = setTimeout( handler, throttle - diff );
- }
- },
- lastCall = 0,
- heldCall,
- curr,
- diff;
- })( jQuery );
-//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
-});
-//>>excludeEnd("jqmBuildExclude");
\ No newline at end of file
diff --git a/js/index.php b/js/index.php
deleted file mode 100644
index 3440edea2bb..00000000000
--- a/js/index.php
+++ /dev/null
@@ -1,91 +0,0 @@
- 1 ) {
- $log = explode( " ", $logs[ $n_logs - 2 ] );
- if ( count( $log ) > 1 ) {
- return $log[ 1 ];
- }
- }
- }
-
- return false;
-}
-
-$comment = getCommitId();
-if ( !$comment ) {
- unset( $comment );
-} else {
- $comment = "/* git commitid " . $comment . " */\n";
-}
-
-require_once('../combine.php');
diff --git a/js/jquery.hashchange.js b/js/jquery.hashchange.js
deleted file mode 100644
index 0747c407776..00000000000
--- a/js/jquery.hashchange.js
+++ /dev/null
@@ -1,379 +0,0 @@
-// Script: jQuery hashchange event
-//
-// *Version: 1.3, Last updated: 7/21/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 (0.8kb gzipped)
-//
-// About: License
-//
-// Copyright (c) 2010 "Cowboy" Ben Alman,
-// Dual licensed under the MIT and GPL licenses.
-// http://benalman.com/about/license/
-//
-// About: Examples
-//
-// These working examples, complete with fully commented code, illustrate a few
-// ways in which this plugin can be used.
-//
-// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/
-// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/
-//
-// 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.2.6, 1.3.2, 1.4.1, 1.4.2
-// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5,
-// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5.
-// 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/
-// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/
-//
-// Also note that should a browser natively support the window.onhashchange
-// event, but not report that it does, the fallback polling loop will be used.
-//
-// About: Release History
-//
-// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more
-// "removable" for mobile-only development. Added IE6/7 document.title
-// support. Attempted to make Iframe as hidden as possible by using
-// techniques from http://www.paciellogroup.com/blog/?p=604. Added
-// support for the "shortcut" format $(window).hashchange( fn ) and
-// $(window).hashchange() like jQuery provides for built-in events.
-// Renamed jQuery.hashchangeDelay to and
-// lowered its default value to 50. Added
-// and properties plus document-domain.html
-// file to address access denied issues when setting document.domain in
-// IE6/7.
-// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin
-// from a page on another domain would cause an error in Safari 4. Also,
-// IE6/7 Iframe is now inserted after the body (this actually works),
-// which prevents the page from scrolling when the event is first bound.
-// Event can also now be bound before DOM ready, but it won't be usable
-// before then in IE6/7.
-// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug
-// where browser version is incorrectly reported as 8.0, despite
-// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag.
-// 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, undefined ) {
- // Reused string.
- var str_hashchange = 'hashchange',
-
- // Method / object references.
- doc = document,
- fake_onhashchange,
- special = $.event.special,
-
- // Does the browser support window.onhashchange? Note that IE8 running in
- // IE7 compatibility mode reports true for 'onhashchange' in window, even
- // though the event isn't supported, so also test document.documentMode.
- doc_mode = doc.documentMode,
- supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 );
-
- // Get location.hash (or what you'd expect location.hash to be) sans any
- // leading #. Thanks for making this necessary, Firefox!
- function get_fragment( url ) {
- url = url || location.href;
- return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' );
- };
-
- // Method: jQuery.fn.hashchange
- //
- // Bind a handler to the window.onhashchange event or trigger all bound
- // window.onhashchange event handlers. This behavior is consistent with
- // jQuery's built-in event handlers.
- //
- // Usage:
- //
- // > jQuery(window).hashchange( [ handler ] );
- //
- // Arguments:
- //
- // handler - (Function) Optional handler to be bound to the hashchange
- // event. This is a "shortcut" for the more verbose form:
- // jQuery(window).bind( 'hashchange', handler ). If handler is omitted,
- // all bound window.onhashchange event handlers will be triggered. This
- // is a shortcut for the more verbose
- // jQuery(window).trigger( 'hashchange' ). These forms are described in
- // the section.
- //
- // Returns:
- //
- // (jQuery) The initial jQuery collection of elements.
-
- // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and
- // $(elem).hashchange() for triggering, like jQuery does for built-in events.
- $.fn[ str_hashchange ] = function( fn ) {
- return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange );
- };
-
- // Property: jQuery.fn.hashchange.delay
- //
- // The numeric interval (in milliseconds) at which the
- // polling loop executes. Defaults to 50.
-
- // Property: jQuery.fn.hashchange.domain
- //
- // If you're setting document.domain in your JavaScript, and you want hash
- // history to work in IE6/7, not only must this property be set, but you must
- // also set document.domain BEFORE jQuery is loaded into the page. This
- // property is only applicable if you are supporting IE6/7 (or IE8 operating
- // in "IE7 compatibility" mode).
- //
- // In addition, the property must be set to the
- // path of the included "document-domain.html" file, which can be renamed or
- // modified if necessary (note that the document.domain specified must be the
- // same in both your main JavaScript as well as in this file).
- //
- // Usage:
- //
- // jQuery.fn.hashchange.domain = document.domain;
-
- // Property: jQuery.fn.hashchange.src
- //
- // If, for some reason, you need to specify an Iframe src file (for example,
- // when setting document.domain as in ), you can
- // do so using this property. Note that when using this property, history
- // won't be recorded in IE6/7 until the Iframe src file loads. This property
- // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7
- // compatibility" mode).
- //
- // Usage:
- //
- // jQuery.fn.hashchange.src = 'path/to/file.html';
-
- $.fn[ str_hashchange ].delay = 50;
- /*
- $.fn[ str_hashchange ].domain = null;
- $.fn[ str_hashchange ].src = null;
- */
-
- // Event: hashchange event
- //
- // Fired when location.hash changes. In browsers that support it, the native
- // HTML5 window.onhashchange event is used, otherwise a polling loop is
- // initialized, running every milliseconds to
- // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7
- // compatibility" mode), a hidden Iframe is created to allow the back button
- // and hash-based history to work.
- //
- // Usage as described in :
- //
- // > // Bind an event handler.
- // > jQuery(window).hashchange( function(e) {
- // > var hash = location.hash;
- // > ...
- // > });
- // >
- // > // Manually trigger the event handler.
- // > jQuery(window).hashchange();
- //
- // A more verbose usage that allows for event namespacing:
- //
- // > // Bind an event handler.
- // > jQuery(window).bind( 'hashchange', function(e) {
- // > var hash = location.hash;
- // > ...
- // > });
- // >
- // > // Manually trigger the event handler.
- // > jQuery(window).trigger( 'hashchange' );
- //
- // Additional Notes:
- //
- // * The polling loop and Iframe are not created until at least one handler
- // is actually bound to the 'hashchange' event.
- // * If you need the bound handler(s) to execute immediately, in cases where
- // a location.hash exists on page load, via bookmark or page refresh for
- // example, use jQuery(window).hashchange() or the more verbose
- // jQuery(window).trigger( 'hashchange' ).
- // * The event can be bound before DOM ready, but since it won't be usable
- // before then in IE6/7 (due to the necessary Iframe), recommended usage is
- // to bind it inside a DOM ready handler.
-
- // Override existing $.event.special.hashchange methods (allowing this plugin
- // to be defined after jQuery BBQ in BBQ's source code).
- special[ str_hashchange ] = $.extend( special[ str_hashchange ], {
-
- // Called only when the first 'hashchange' event is bound to window.
- setup: function() {
- // If window.onhashchange is supported natively, there's nothing to do..
- if ( supports_onhashchange ) { return false; }
-
- // Otherwise, we need to create our own. And we don't want to call this
- // until the user binds to the event, just in case they never do, since it
- // will create a polling loop and possibly even a hidden Iframe.
- $( fake_onhashchange.start );
- },
-
- // Called only when the last 'hashchange' event is unbound from window.
- teardown: function() {
- // If window.onhashchange is supported natively, there's nothing to do..
- if ( supports_onhashchange ) { return false; }
-
- // Otherwise, we need to stop ours (if possible).
- $( fake_onhashchange.stop );
- }
-
- });
-
- // fake_onhashchange does all the work of triggering the window.onhashchange
- // event for browsers that don't natively support it, including creating a
- // polling loop to watch for hash changes and in IE 6/7 creating a hidden
- // Iframe to enable back and forward.
- fake_onhashchange = (function() {
- var self = {},
- timeout_id,
-
- // Remember the initial hash so it doesn't get triggered immediately.
- last_hash = get_fragment(),
-
- fn_retval = function( val ) { return val; },
- history_set = fn_retval,
- history_get = fn_retval;
-
- // Start the polling loop.
- self.start = function() {
- timeout_id || poll();
- };
-
- // Stop the polling loop.
- self.stop = function() {
- timeout_id && clearTimeout( timeout_id );
- timeout_id = undefined;
- };
-
- // This polling loop checks every $.fn.hashchange.delay milliseconds to see
- // if location.hash has changed, and triggers the 'hashchange' event on
- // window when necessary.
- function poll() {
- var hash = get_fragment(),
- history_hash = history_get( last_hash );
-
- if ( hash !== last_hash ) {
- history_set( last_hash = hash, history_hash );
-
- $(window).trigger( str_hashchange );
-
- } else if ( history_hash !== last_hash ) {
- location.href = location.href.replace( /#.*/, '' ) + history_hash;
- }
-
- timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay );
- };
-
- // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
- // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
- // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
- window.attachEvent && !window.addEventListener && !supports_onhashchange && (function() {
- // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
- // when running in "IE7 compatibility" mode.
-
- var iframe,
- iframe_src;
-
- // When the event is bound and polling starts in IE 6/7, create a hidden
- // Iframe for history handling.
- self.start = function() {
- if ( !iframe ) {
- iframe_src = $.fn[ str_hashchange ].src;
- iframe_src = iframe_src && iframe_src + get_fragment();
-
- // Create hidden Iframe. Attempt to make Iframe as hidden as possible
- // by using techniques from http://www.paciellogroup.com/blog/?p=604.
- iframe = $('