Commit graph

350 commits

Author SHA1 Message Date
Kin Blas
4f066b7e07 Fix for issue 2503 - User can't specify own error handling logic
- Added the following notifications to $.mobile.loadPage():

	- pagebeforeload
		- Triggered just before loadPage() attempts to dynamically load an external page.
		- Developers can prevent the default loading behavior by calling preventDefault() on the event. If preventDefault() is called, it is up to the developer to call resolve()/reject() on the deferred object passed within the data object (2nd arg to the event callback).

	- pageload
		- Triggered after an external page has been loaded and inserted into the document.

	- pageloadfailed
		- Triggered when the load of an external page fails.
		- Developers can prevent the default behavior (error dialog display) by calling preventDefault() on the event. If preventDefault() is called, it is up to the developer to call resolve()/reject() on the deferred object (2nd arg to the event callback).
2011-09-23 14:12:40 -07:00
scottjehl
be5136198e when a form is submitting via post to a url that already has a page represented in the DOM, replace the current page with the response page of the same url (post params are not passed via q string, so the URLs are identical). 2011-09-23 09:28:43 -04:00
John Bender
e5e269394e remove empty else in nav 2011-09-22 14:40:59 -07:00
John Bender
2086529728 remove extra local var storage 2011-09-22 08:53:53 -07:00
John Bender
f1d63f4f75 simplify calls to bind by wrapping this as a jquery object 2011-09-22 08:52:45 -07:00
John Bender
9182306ccf refactor for clarity and simplicity 2011-09-22 08:52:45 -07:00
John Bender
27b228803a change scroll recording to handle different scroll elements between page changes 2011-09-22 08:52:45 -07:00
John Bender
2f12ff249a refactor setLastScroll to speed it up a tad 2011-09-22 08:52:09 -07:00
John Bender
3e143c8f66 rename getLastScroll and its variables 2011-09-22 08:52:09 -07:00
John Bender
c363864382 use scrolltop to store scroll position
scrolltop as a solution isn't that great but some browsers scroll to the top
of the page to where the element bearing the id matching the hash is located
*before* the hashchange event is fired meaning we don't have an opportunity
in the changepage event lifecycle to record the scrolling properly
2011-09-22 08:52:09 -07:00
Kin Blas
80b0e99798 Fix for issue 1243 - Can't link to dynamically created data-role="page"
- Modified loadPage() so that if the data-url lookup for a given page fails, that it look for the page via id (if it is an embedded page URL). This allows us to find dynamically injected pages that are un-enhanced and missing their data-url attributes.
2011-09-21 15:46:15 -07:00
Kin Blas
9b0bf5252d Removed deprecated "beforechangepage", "changepage", and "changepagefailed" event references in preparation for jQM 1.0 release.
Updated the unit tests to use "pagechange" event instead of "changepage".
2011-09-20 16:59:30 -07:00
Kin Blas
e7a33dbb45 Removed deprecated navigation related properties:
$.mobile.updateHash
	$.mobile.urlstack

in preparation for jQM 1.0.
2011-09-20 16:15:44 -07:00
Kin Blas
14bafc510d Removed support for the alpha signature of $.mobile.changePage() in preparation for jQM 1.0. Folks now how to use the signature that requires the toPage (url or element) as the first arg, and options object as the 2nd. 2011-09-20 15:40:52 -07:00
Kin Blas
0fbea8f8e6 Fix for issue 2451:
Dialog not working if $.mobile.ajaxEnabled = false
https://github.com/jquery/jquery-mobile/issues/2451

related/dup bug 2202:

Dialog loads in new page with ajaxEnabled = false
https://github.com/jquery/jquery-mobile/issues/2202

- Modified the default click handler to check if the href is for an embedded page before bailing when ajaxEnabled = false. This allows us to navigate to internal/embedded pages/dialogs on the click versus waiting for the accidental hashchange that was the result of the browser's default handling of hash fragments.
2011-09-19 11:32:13 -07:00
Kin Blas
320c12126f Merge branch 'master' of https://github.com/jquery/jquery-mobile 2011-09-15 17:00:27 -07:00
Kin Blas
78234976e7 Fix for issue 2050 - URL handling and PlayBook Webworks app
- Modified the url parser regexp so that we can  find the double slash that precedes the authority. This is necessary so we can reconstruct resource urls used on some devices like Rim's Playbook that use urls like:

location:/dir1/dir2/file.html

- Modified makeAbsoluteUrl() so that it uses the new doubleSlash property in the object returned from parseUrl() instead of assuming that it is ok to use a double slash.
2011-09-15 16:56:54 -07:00
John Bender
416b666ca8 prevent clicks on anything but the left mouse button, also adds the which value to the events when its undefined in the vmouse plugin 2011-09-15 10:16:40 -07:00
Kin Blas
56a22727ab Merge branch 'master' of https://github.com/jquery/jquery-mobile 2011-09-13 00:23:33 -07:00
Kin Blas
1a92be0240 Fix for issue 2406 - Navigation from one page back to multi-page template
- Make sure that our hashchange resolves non-path hashes against the documentBase. This prevents the resulting changePath() call from incorrectly resolving against the URL for the current active (external) page.

- Fixed a problem in the push-state code. A hashchange event is *NOT* fired when navigating back (window.history.back()) from an external page to an internal page. This makes sense when you think about it since hashchange is only ever fired when the hash of the current document url changes, not when the document url itself changes. The fix was to make sure that the pushstate hashchange callback always sets a state object, even on embedded page URLs. This allows the hashchange callback to be triggered from within onPopState().
2011-09-13 00:23:03 -07:00
John Bender
c426aefd76 add data attribute tag for pages loaded via ajax Fixes #2432 2011-09-12 14:06:47 -07:00
John Bender
fbd113bad4 whitespace in listview and core nav 2011-09-12 13:58:24 -07:00
scottjehl
b645781f4d implemented native overflow scrolling based on support for -[prefix]-overflow-scrolling: touch. True fixed headers and footers come supported as well. 2011-09-08 12:38:50 -04:00
scottjehl
bc036b91b0 Clock tap is busted, so this logic is here but commented-out 2011-09-08 12:38:50 -04:00
scottjehl
fda71670b4 reset scrollTop to 0, not defaultHomeScroll 2011-09-08 12:38:50 -04:00
scottjehl
1a524756f3 added a pre-transition class to set pages to display: block early and allow for their scrollTop and focus to be set before they are shown. 2011-09-08 12:38:50 -04:00
Kin Blas
78041bc7c9 Added path.isFirstPageUrl() which is now called from loadPage() when trying to determine if the URL being loaded refers to a page that is already in the DOM. This will prevent us from duplicating the first-page in the main application document.
Also checking in the first example of how to use the pagebeforechange notification to allow for dynamically updating and re-using a page that is already in the DOM.
2011-09-08 09:21:31 -07:00
Kin Blas
04623c21cf Merge branch 'master' into changepage-prevent 2011-09-07 18:07:21 -07:00
Kin Blas
6aa8c8f3b0 - Added "fromPage" option to changePage(). This used to be in there before the navigation re-work, I just added it back in.
- Added "dataUrl" option to changePage(). This allows a caller to specify a page element to change to, but specify an alternate URL for location display purposes. This is useful for dynamic applications that re-use and over-write existing page content to avoid overwhelming the DOM.

- Renamed the "beforechangepage" and "changepage" events to "pagebeforechange" and "pagechange" respectively. This was done to match the page widget naming of its notifications. Left the triggers for the old events in place but with DEPRECATED comments.

- Renamed the properties of the data object passed to the page events.
2011-09-07 18:03:38 -07:00
scottjehl
d68d5064bc finished last-scroll remembering implementation across pages in the history stack (regardless of whether they've been removed from the DOM since last appearance). 2011-09-07 08:15:00 -04:00
Kin Blas
701b381cc4 Couple of modifications to changePage():
- Moved the setting of isPageTransitioning *AFTER* the beforechangepage notification.

- Modified the trigger("beforechangepage") call to pass the args to changePage() as an object since trigger only expects one data arg.
2011-09-06 16:56:20 -07:00
scottjehl
0d98b8fad6 changed setting of lastScroll 2011-09-06 14:29:19 -04:00
scottjehl
97539ed3bd focus on title or page div 2011-09-06 12:58:14 -04:00
scottjehl
003505a4b9 changed minscroll to 250, better organization of lastscroll 2011-09-06 12:56:46 -04:00
scottjehl
ac67e92cbb This change sets the "lastScroll" property to each urlHistory item object, allowing us to remember previous scroll distances when returning to a page that has since been removed from the DOM. Before this change, this number was stored in data on the page element, so it is lost when the page is removed after pagehide.
Also, this change removes a reference in memory that we were keeping to the $activeClickedLink on each page. We stored this in attempt to refocus a link after returning to a page. Unfortunately, it doesn't seem that this data can be retained after pages are removed from the DOM, outside of somehow remembering a unique selector string to reach that element again (which could be achieved by adding some overhead, ala http://stackoverflow.com/questions/2068272/getting-a-jquery-selector-for-an-element )
2011-09-06 12:56:46 -04:00
scottjehl
522b48ee84 started on the change to allow default prevention on beforechangepage 2011-09-05 13:05:57 -04:00
gseguin
001e588c92 Fix for issue #2017. Clear active link on vclick so there can be only one active link at a time. 2011-08-31 21:46:39 -07:00
John Bender
f679d30620 added ipv6 support to urlparse regex Fixes #2362 2011-08-30 15:59:46 -07:00
John Bender
bddc8c8ed2 small tweak to directedHashChange to make sure the right value is passed in for isBack 2011-08-29 09:12:39 -07:00
John Bender
6b010492b2 minor refactors in nav and pushstate for clarity 2011-08-27 01:01:54 -07:00
John Bender
82cce1fa60 fix the chrome bug and reduce the number of crazy hash juggles we do 2011-08-27 01:01:54 -07:00
John Bender
328d58b2e9 fixed role retention issue from clearing the dom cache 2011-08-27 01:01:54 -07:00
John Bender
b569c1cc8b fix for dialog and subpage key url issues with replace state 2011-08-26 14:54:27 -07:00
John Bender
44eaf7707b fix broken hash on dialog after initial page load 2011-08-25 10:49:51 -07:00
John Bender
af0e1f5d7e whitepasce in nav 2011-08-25 10:49:51 -07:00
gseguin
9f3836e7b1 Fix for issue #1405: Moved assignment of $activeClickedLink to the vclick handler in charge of adding the active state 2011-08-17 17:32:55 -07:00
scottjehl
ee17b4f05c Ensure that navigating backwards through dialogs works as expected when domCache is false (which is the default now). 2011-07-31 10:03:22 -04:00
scottjehl
be74405b49 Added a configurable timeout to $.mobile.loadPage to give pages that are being fetched from cache a little time to load before a loading message appears. We'll need to tweak this timer based on device testing to determine how long it takes on average to fetch a cached page. If the delay ends up needing to be longer than 300ms or so to suit some devices, it's probably not worth having this feature at all. 2011-07-30 08:33:04 -04:00
scottjehl
bdba60efd5 removed urlHistory references to (and use of) each entry's "page" property, which kept a reference to the DOM elements of each page that had been loaded. This fixes leaking memory on removed pages, and outsources page requests to the browser cache (for real this time :) ). 2011-07-29 19:51:17 -04:00
John Bender
50acf2eb7c fix to use options defined on page widget to determing domCache settings 2011-07-29 12:55:40 -07:00
John Bender
27b4ba1691 ajaxDomCaching -> domCache 2011-07-29 10:10:26 -07:00
John Bender
d716f3e9e7 moved dom cache check above the enhance to let widgets unbind parent page hide behaviour. added parent removal to listview special remove 2011-07-29 10:10:25 -07:00
scottjehl
a8c3859d84 using regular data method to access widget 2011-07-29 10:10:25 -07:00
scottjehl
dc054a10e7 implemented ajax dom caching option of the page plugin, which can be overridden by page options or data attribute. Includes unit test to support feature. 2011-07-29 10:10:25 -07:00
Ghislain Seguin
d1e8083f15 Merge pull request #2152 from webmynd/master
Consider data-role when picking page transition in changePage
2011-07-27 10:04:39 -07:00
Samuel Padou
051855e94d Bug 2064; Add try/catch block to prevent 'Unspecified error' when we use an IFrame on IE9 2011-07-27 14:53:27 +02:00
James Brady
9cf3a60dee Consider data-role when picking page transition.
Re-use existing "isDialog" variable in changePage,
instead of just looking at settings.role.
2011-07-27 12:24:41 +01:00
scottjehl
1a828594f5 default for loadPage should be to not show the loading message, since its default use case is to fetch a page that is not yet active. However, changePage should cause it to show because loadPage is being called during a page change. 2011-07-21 08:04:12 -04:00
scottjehl
259815d480 Make data-role=page elements optional. This change makes the framework more lenient with markup, and will ease integration with existing sites, as well as mashups with external content. Unit tests included. Fixes #2096 2011-07-17 14:52:49 -04:00
scottjehl
f84ceb12ed Merge remote branch 'origin/master' 2011-07-15 16:30:03 -04:00
John Bender
ca173441d0 small refactor the the base url change for readability 2011-07-15 10:47:06 -07:00
scottjehl
a5d0a294e9 Implemented data-prefetch attribute for anchor elements. Presence of this attribute on an anchor will cause the referenced page to be preloaded when the parent page of that anchor is shown. Fixes #1819. 2011-07-15 13:16:31 -04:00
John Bender
d827be3bf2 relative url change per Kin Blas's last pre-vacation request 2011-07-13 16:04:24 -07:00
John Bender
b761496ece moved typeof check to jQuery.type() 2011-07-07 09:22:24 -07:00
John Bender
bf9c071900 whitespace in navigation 2011-07-07 09:19:16 -07:00
Ghislain Seguin
2deeee14d7 More elegant fix for #1990
Re-use $.mobile.allowCrossDomainPages & call deferred.reject to notify caller of failure
2011-06-30 13:40:06 -07:00
Ghislain Seguin
8117f12ad5 Coding standards 2011-06-29 21:03:12 -07:00
Ghislain Seguin
b02e19891a Replace $.noop by function that throws to not fail silently 2011-06-29 21:02:53 -07:00
Ghislain Seguin
5fe310600f Fix for #1990: Introducing $.mobile.ajaxCrossDomainEnabled defaults to false 2011-06-29 20:00:12 -07:00
Kin Blas
2b51355656 Switch back to processing link clicks on the "click" event. It really is the only reliable way across all the devices we support.
Also, remove all references to useFastClick.
2011-06-29 17:38:00 -07:00
Kin Blas
aff87cc9f1 Fix for the mysterious "page is too large" error Todd and Scott were seeing on Blackberry 5 prior to shipping jQM beta 1.
Turns out this little code was enough to invoke the error:

"/dir1/dir2".replace(/\/?/, "");

Rewrote the regexp in path.makePathAbsolute() that was stripping leading slash, and trailing filename/slash. This gets around the problem.

Special thanks to @adambiggs for helping me test 33 iterations when trying to narrow down what in jquery.mobile.navigation.js was choking BB5.
2011-06-27 16:50:01 -07:00
Kin Blas
0d65a0d1c5 - Fixed issue #1923 - url of form is miscalculated
- Added code to calculate whether to choose the documentUrl or the page Url in the case where an action is not specified on a form element.

	- Fixed bug in the navigation "submit" handler where an error was being thrown if "type" was not specified.

	- Fixed typo "diabled" id typos in tests/unit/navigation/index.html.

	- Added tests for form submissions with no action in both base and non-base specified cases.
2011-06-27 10:25:13 -07:00
Martin Sutherland
83973b429b Fix issue 1913 - unnecessary ajax call and duplicate DOM nodes when refreshing a page with a dialog visible 2011-06-23 18:33:06 +02:00
scottjehl
a43ce64db2 moved our form binding into the _registerInternalEvents callback, to ensure it's not bound until after mobilinit. 2011-06-22 11:43:22 -04:00
scottjehl
c227535bd7 removed vclick + click combined event binding, which was in there as a workaround for a not-consistently-occurring bug in Android 2.1. I think the real issue is related to lack of dynamic base tag support, and that occasionally, a relative href click will use default handling in 2.1 and go where it shouldn't (ignoring the base href). Either way, this double binding causes history problems in Safari, so I'm removing it while we search for a better 2.1 workaround. Fixes #1870 2011-06-21 12:43:17 -04:00
scottjehl
ffdfa4e7c2 moved page load event bindings to a post-mobileinit callback so that the useFastClick option can be set before it is used. Unit test included. Fixes #1869 2011-06-21 11:33:38 -04:00
Kin Blas
5890a801be Fixed a couple of errors caught by jshint. 2011-06-20 15:09:54 -07:00
scottjehl
9fffcb6eca bind to click as well, for an edge case in android 2.1 2011-06-20 13:44:33 -04:00
scottjehl
9c9a9ad147 set page min-height using availHeight or availWidth, rather than height (to fine tune height to exclude browser chrome). Also, reset the active page height on throttledresize and pageshow, eliminating some duplicate calls. 2011-06-20 13:31:26 -04:00
scottjehl
45a71ac499 Added global config option "useFastClick", so that the changes we made for automated ajax handling since A4 can be disabled if needed, for whatever reason. When handling clicks and taps automatically with Ajax, this option will use jQuery Mobile's <code>vclick</code> event, enabling page changes to happen slightly sooner on devices that support touch events, and keeping the address bar hidden during page transtions. When disabled, the automatied Ajax handling will use an ordinary <code>click</code> event instead. This option has no effect on non-touch devices, but when enabled, it may interfere with jQuery plugins that bind to click events rather than vclick events. Fixes #1857 2011-06-20 11:35:09 -04:00
scottjehl
823485ce11 Blur other buttons when a new one is clicked and gaining focus. This gets rid of the trail of focus states issue we've been seeing. Fixes #1840. 2011-06-19 14:34:36 -04:00
scottjehl
a09c53eb71 improved the address bar hiding logic to support Android as well by determining up-front which hiding number should be used. Fixes #1673. Fixes #1322. Fixes #1786. 2011-06-19 13:53:27 -04:00
scottjehl
ffa35c0548 improved minheight page logic 2011-06-17 19:19:47 -04:00
scottjehl
fcbfc2f380 added minScrollBack feature to core options. This is the minimum scroll distance that will be jumped-to when returning to a page. By default, the distance is screen.height /2. If you really needed to disable scroll memory altogether, this could be set to Infinity. Note that disabling scroll memory altogether is almost never a good idea for usability, but the option is there. 2011-06-17 19:19:47 -04:00
scottjehl
3bd713c185 added resetActivePage on pagecreate, orientationchange, and after transitions. 2011-06-17 19:19:47 -04:00
scottjehl
690dc66f7c set heights including respective scrolls 2011-06-17 19:19:46 -04:00
scottjehl
aa950ba125 Only call scrollTo if there's a scroll distance we need to go to. If the distance we're jumping to is 20px or less, let it go in for tolerance. Reset toPage height before scrolling, focusing. 2011-06-17 19:19:46 -04:00
scottjehl
df7ac2f642 fix up the page heights during transitions, and min-heights otherwise. 2011-06-17 19:19:46 -04:00
scottjehl
ed7aae1d1c hide address bar during page changes by catching ajax clicks early through binding to touchend, and make pages fit screen height during transitions 2011-06-17 19:19:46 -04:00
scottjehl
722ed2cbbf If ajax is disabled, exit the click handler early and avoid parsing the href at all. Thanks for the idea, @toddparker! Fixes #1846. 2011-06-17 18:33:16 -04:00
Kin Blas
96b3e710d4 Added utility functions $.mobile.getDocumentBase() and $.mobile.getDocumentUrl() so that developers can retrieve the original base and url used when loading the document. 2011-06-16 15:43:40 -07:00
Kin Blas
8b6d14bb03 Fix for issue 1826 - Nightly build - dialog box no longer rounded corners
- Don't set a default value for the 'role' option to loadPage() and changePage(). Instead, rely on the role attribute that is on the element.

- Fixed an error that was happening when a hash change involves going from a dialog back to another dialog. I had recently made changes that assumed the 'to' variable was always going to be a url string, but it turns out in the dialog back to dialog case, it is an actual jQuery collection.
2011-06-16 13:36:39 -07:00
Kin Blas
d2f115349a Fix for issue 1833 - No page transition used when hitting the browser forward button
- Don't use the transition of the initial page on the stack.
2011-06-15 15:28:52 -07:00
jblas@adobe.com
dd69372dd4 Adjusted the urlParserRE regexp to account for double slashes in the directory path to work around a phonegap 0.9.4. 2011-06-15 10:37:08 -07:00
Kin Blas
c011f51f14 Removed unused path.isRelative() function. Replaced unit tests for isRelative() with tests for path.isRelativeUrl. 2011-06-13 16:45:10 -07:00
Kin Blas
e286808391 Rule of thumb ... get your logic right and your code will behave as you expect.
- I should've been using !== instead === when figuring out docBaseDiffers.
2011-06-10 16:13:58 -07:00
Kin Blas
963a84cb18 IE7 returns an empty string for regexp submatches while all other browsers return undefined. Modified the parseUrl() function to normalize all non-matches to an empty string and replaced all strict checks for undefined to strict checks for an empty string. 2011-06-10 15:31:09 -07:00
Kin Blas
244385b9f9 Merge branch 'master' into path-fixes 2011-06-10 10:02:11 -07:00
Kin Blas
b7bcf93620 - We were missing a changepage notification in the case where we were transitioning to the same page.
- Added changepagefailed notification for the case where the load fails. Note we still need beforeloadpage/loadpage notifications.

- Misc fixes to stop the navigation unit tests from seemingly random failures. It seems that the hash resets in setup/teardown of the test modules sometimes interferes with the changePage() requests in the tests. Added code to the setup/teardown functions to wait for the reset to complete before moving on to the tests.
2011-06-10 10:00:25 -07:00
frietsch
d99d096ab7 Bugfix: ":jqmData(ajax='false')" might also match forms, which have neither of "src" or "href". In that case, thisUrl is undefined, and the following replace results in an error. 2011-06-09 08:21:21 -07:00