|
831 | 831 | // Make sure we have a pageContainer to work with.
|
832 | 832 | settings.pageContainer = settings.pageContainer || $.mobile.pageContainer;
|
833 | 833 |
|
| 834 | + // Make sure we have a fromPage. |
| 835 | + settings.fromPage = settings.fromPage || $.mobile.activePage; |
| 836 | + |
834 | 837 | var mpc = settings.pageContainer,
|
835 |
| - bcpEvent = new $.Event( "beforechangepage" ), |
836 |
| - url = toPage; |
| 838 | + pbcEvent = new $.Event( "pagebeforechange" ), |
| 839 | + triggerData = { toPage: toPage, options: settings }; |
837 | 840 |
|
838 | 841 | // Let listeners know we're about to change the current page.
|
839 |
| - mpc.trigger( bcpEvent, { url: url, settings: settings } ); |
| 842 | + mpc.trigger( pbcEvent, triggerData ); |
| 843 | + |
| 844 | + mpc.trigger( "beforechangepage", triggerData ); // XXX: DEPRECATED for 1.0 |
840 | 845 |
|
841 | 846 | // If the default behavior is prevented, stop here!
|
842 |
| - if( bcpEvent.isDefaultPrevented() ){ |
| 847 | + if( pbcEvent.isDefaultPrevented() ){ |
843 | 848 | return;
|
844 | 849 | }
|
845 |
| - |
| 850 | + |
| 851 | + // We allow "pagebeforechange" observers to modify the toPage in the trigger |
| 852 | + // data to allow for redirects. Make sure our toPage is updated. |
| 853 | + |
| 854 | + toPage = triggerData.toPage; |
| 855 | + |
846 | 856 | // Set the isPageTransitioning flag to prevent any requests from
|
847 | 857 | // entering this method while we are in the midst of loading a page
|
848 | 858 | // or transitioning.
|
|
869 | 879 |
|
870 | 880 | //release transition lock so navigation is free again
|
871 | 881 | releasePageTransitionLock();
|
872 |
| - settings.pageContainer.trigger("changepagefailed"); |
| 882 | + settings.pageContainer.trigger( "pagechangefailed", triggerData ); |
| 883 | + settings.pageContainer.trigger( "changepagefailed", triggerData ); // XXX: DEPRECATED for 1.0 |
873 | 884 | });
|
874 | 885 | return;
|
875 | 886 | }
|
876 | 887 |
|
877 | 888 | // The caller passed us a real page DOM element. Update our
|
878 | 889 | // internal state and then trigger a transition to the page.
|
879 |
| - var fromPage = $.mobile.activePage, |
880 |
| - url = toPage.jqmData( "url" ), |
| 890 | + var fromPage = settings.fromPage, |
| 891 | + url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ), |
881 | 892 | // The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path
|
882 | 893 | pageUrl = url,
|
883 | 894 | fileUrl = path.getFilePath( url ),
|
|
895 | 906 | // to the same page.
|
896 | 907 | if( fromPage && fromPage[0] === toPage[0] ) {
|
897 | 908 | isPageTransitioning = false;
|
898 |
| - mpc.trigger( "changepage" ); |
| 909 | + mpc.trigger( "pagechange", triggerData ); |
| 910 | + mpc.trigger( "changepage", triggerData ); // XXX: DEPRECATED for 1.0 |
899 | 911 | return;
|
900 | 912 | }
|
901 | 913 |
|
|
982 | 994 | releasePageTransitionLock();
|
983 | 995 |
|
984 | 996 | // Let listeners know we're all done changing the current page.
|
985 |
| - mpc.trigger( "changepage" ); |
| 997 | + mpc.trigger( "pagechange", triggerData ); |
| 998 | + |
| 999 | + mpc.trigger( "changepage", triggerData ); // XXX: DEPRECATED for 1.0 |
986 | 1000 | });
|
987 | 1001 | };
|
988 | 1002 |
|
|
994 | 1008 | role: undefined, // By default we rely on the role defined by the @data-role attribute.
|
995 | 1009 | duplicateCachedPage: undefined,
|
996 | 1010 | pageContainer: undefined,
|
997 |
| - showLoadMsg: true //loading message shows by default when pages are being fetched during changePage |
| 1011 | + showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage |
| 1012 | + dataUrl: undefined, |
| 1013 | + fromPage: undefined |
998 | 1014 | };
|
999 | 1015 |
|
1000 | 1016 | /* Event Bindings - hashchange, submit, and click */
|
|
0 commit comments