|
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