mindapp 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +29 -0
  5. data/Rakefile +1 -0
  6. data/lib/generators/mindapp/USAGE +8 -0
  7. data/lib/generators/mindapp/install_generator.rb +134 -0
  8. data/lib/generators/mindapp/templates/app/assets/images/account.png +0 -0
  9. data/lib/generators/mindapp/templates/app/assets/images/add.png +0 -0
  10. data/lib/generators/mindapp/templates/app/assets/images/ajax-loader-circle.gif +0 -0
  11. data/lib/generators/mindapp/templates/app/assets/images/ajax-loader.gif +0 -0
  12. data/lib/generators/mindapp/templates/app/assets/images/anchor.png +0 -0
  13. data/lib/generators/mindapp/templates/app/assets/images/application_double.png +0 -0
  14. data/lib/generators/mindapp/templates/app/assets/images/application_form_edit.png +0 -0
  15. data/lib/generators/mindapp/templates/app/assets/images/arrow_left.png +0 -0
  16. data/lib/generators/mindapp/templates/app/assets/images/arrow_right.png +0 -0
  17. data/lib/generators/mindapp/templates/app/assets/images/arrow_turn_left.png +0 -0
  18. data/lib/generators/mindapp/templates/app/assets/images/arrow_turn_right.png +0 -0
  19. data/lib/generators/mindapp/templates/app/assets/images/calendar.png +0 -0
  20. data/lib/generators/mindapp/templates/app/assets/images/cancel.png +0 -0
  21. data/lib/generators/mindapp/templates/app/assets/images/chart_bar.png +0 -0
  22. data/lib/generators/mindapp/templates/app/assets/images/clock.png +0 -0
  23. data/lib/generators/mindapp/templates/app/assets/images/cog.png +0 -0
  24. data/lib/generators/mindapp/templates/app/assets/images/control_fastforward.png +0 -0
  25. data/lib/generators/mindapp/templates/app/assets/images/control_play.png +0 -0
  26. data/lib/generators/mindapp/templates/app/assets/images/cross.png +0 -0
  27. data/lib/generators/mindapp/templates/app/assets/images/delete.png +0 -0
  28. data/lib/generators/mindapp/templates/app/assets/images/external-link.png +0 -0
  29. data/lib/generators/mindapp/templates/app/assets/images/help.png +0 -0
  30. data/lib/generators/mindapp/templates/app/assets/images/house.png +0 -0
  31. data/lib/generators/mindapp/templates/app/assets/images/logo_mindapp.png +0 -0
  32. data/lib/generators/mindapp/templates/app/assets/images/logout.png +0 -0
  33. data/lib/generators/mindapp/templates/app/assets/images/new.gif +0 -0
  34. data/lib/generators/mindapp/templates/app/assets/images/new.png +0 -0
  35. data/lib/generators/mindapp/templates/app/assets/images/page.png +0 -0
  36. data/lib/generators/mindapp/templates/app/assets/images/page_attach.png +0 -0
  37. data/lib/generators/mindapp/templates/app/assets/images/page_green.png +0 -0
  38. data/lib/generators/mindapp/templates/app/assets/images/page_output.png +0 -0
  39. data/lib/generators/mindapp/templates/app/assets/images/page_pdf.png +0 -0
  40. data/lib/generators/mindapp/templates/app/assets/images/pencil.png +0 -0
  41. data/lib/generators/mindapp/templates/app/assets/images/printer.png +0 -0
  42. data/lib/generators/mindapp/templates/app/assets/images/refresh.png +0 -0
  43. data/lib/generators/mindapp/templates/app/assets/images/report.png +0 -0
  44. data/lib/generators/mindapp/templates/app/assets/images/rssmall.png +0 -0
  45. data/lib/generators/mindapp/templates/app/assets/images/tick.png +0 -0
  46. data/lib/generators/mindapp/templates/app/assets/images/user.png +0 -0
  47. data/lib/generators/mindapp/templates/app/assets/images/view_code.png +0 -0
  48. data/lib/generators/mindapp/templates/app/assets/javascripts/application.js +19 -0
  49. data/lib/generators/mindapp/templates/app/assets/javascripts/disable_enter_key.js +10 -0
  50. data/lib/generators/mindapp/templates/app/assets/javascripts/iscroll-wrapper.js +32 -0
  51. data/lib/generators/mindapp/templates/app/assets/javascripts/iscroll.js +1084 -0
  52. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery-1.7.1.js +9266 -0
  53. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.datebox.js +1772 -0
  54. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.js +7007 -0
  55. data/lib/generators/mindapp/templates/app/assets/javascripts/jquery.mobile.splitview.js +624 -0
  56. data/lib/generators/mindapp/templates/app/assets/javascripts/mindapp.js +14 -0
  57. data/lib/generators/mindapp/templates/app/assets/stylesheets/application.css.scss +18 -0
  58. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.eot +0 -0
  59. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.ttf +0 -0
  60. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun.woff +0 -0
  61. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_bold.ttf +0 -0
  62. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_bolditalic.ttf +0 -0
  63. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/sarabun_italic.ttf +0 -0
  64. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.eot +0 -0
  65. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.ttf +0 -0
  66. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew-webfont.woff +0 -0
  67. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew.css +47 -0
  68. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.eot +0 -0
  69. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.ttf +0 -0
  70. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bold-webfont.woff +0 -0
  71. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.eot +0 -0
  72. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.ttf +0 -0
  73. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_bolditalic-webfont.woff +0 -0
  74. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.eot +0 -0
  75. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.ttf +0 -0
  76. data/lib/generators/mindapp/templates/app/assets/stylesheets/fonts/thsarabunnew_italic-webfont.woff +0 -0
  77. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ajax-loader.png +0 -0
  78. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/bg.png +0 -0
  79. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_black.png +0 -0
  80. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_blue.png +0 -0
  81. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/button_red.png +0 -0
  82. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/cancel.png +0 -0
  83. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/close.png +0 -0
  84. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/del2.png +0 -0
  85. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/deli4.png +0 -0
  86. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/down-left.png +0 -0
  87. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/down-right.png +0 -0
  88. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/fbook.png +0 -0
  89. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ff.png +0 -0
  90. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icon-search-black.png +0 -0
  91. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-18-black.png +0 -0
  92. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-18-white.png +0 -0
  93. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-36-black.png +0 -0
  94. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/icons-36-white.png +0 -0
  95. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/overlay.png +0 -0
  96. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/rss3.png +0 -0
  97. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/rss4.png +0 -0
  98. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/search_bg.png +0 -0
  99. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/stumble2.png +0 -0
  100. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/stumble4.png +0 -0
  101. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tab-left.png +0 -0
  102. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tab-right.png +0 -0
  103. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tech3.png +0 -0
  104. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/tech4.png +0 -0
  105. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/twitter3.png +0 -0
  106. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/twitter4.png +0 -0
  107. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-anim_basic_16x16.gif +0 -0
  108. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  109. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  110. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  111. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  112. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  113. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  114. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  115. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  116. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  117. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  118. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  119. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  120. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  121. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  122. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_217bc0_256x240.png +0 -0
  123. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_222222_256x240.png +0 -0
  124. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_2e83ff_256x240.png +0 -0
  125. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_454545_256x240.png +0 -0
  126. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_469bdd_256x240.png +0 -0
  127. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_6da8d5_256x240.png +0 -0
  128. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_888888_256x240.png +0 -0
  129. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_cd0a0a_256x240.png +0 -0
  130. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_d8e7f3_256x240.png +0 -0
  131. data/lib/generators/mindapp/templates/app/assets/stylesheets/images/ui-icons_f9bd01_256x240.png +0 -0
  132. data/lib/generators/mindapp/templates/app/assets/stylesheets/indicator.gif +0 -0
  133. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.css +1855 -0
  134. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.datebox.css +65 -0
  135. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.grids.collapsible.css +122 -0
  136. data/lib/generators/mindapp/templates/app/assets/stylesheets/jquery.mobile.splitview.css +130 -0
  137. data/lib/generators/mindapp/templates/app/assets/stylesheets/mindapp.css +134 -0
  138. data/lib/generators/mindapp/templates/app/assets/stylesheets/sarabun.css +37 -0
  139. data/lib/generators/mindapp/templates/app/controllers/identities_controller.rb +5 -0
  140. data/lib/generators/mindapp/templates/app/controllers/mindapp_controller.rb +464 -0
  141. data/lib/generators/mindapp/templates/app/controllers/sessions_controller.rb +28 -0
  142. data/lib/generators/mindapp/templates/app/mailers/.gitkeep +0 -0
  143. data/lib/generators/mindapp/templates/app/mailers/mindapp_mailer.rb +7 -0
  144. data/lib/generators/mindapp/templates/app/mindapp/index.mm +85 -0
  145. data/lib/generators/mindapp/templates/app/mindapp/template/view.html.erb +21 -0
  146. data/lib/generators/mindapp/templates/app/models/.gitkeep +0 -0
  147. data/lib/generators/mindapp/templates/app/models/identity.rb +14 -0
  148. data/lib/generators/mindapp/templates/app/models/mindapp/doc.rb +30 -0
  149. data/lib/generators/mindapp/templates/app/models/mindapp/module.rb +10 -0
  150. data/lib/generators/mindapp/templates/app/models/mindapp/notice.rb +11 -0
  151. data/lib/generators/mindapp/templates/app/models/mindapp/role.rb +7 -0
  152. data/lib/generators/mindapp/templates/app/models/mindapp/runseq.rb +24 -0
  153. data/lib/generators/mindapp/templates/app/models/mindapp/service.rb +16 -0
  154. data/lib/generators/mindapp/templates/app/models/mindapp/xmain.rb +38 -0
  155. data/lib/generators/mindapp/templates/app/models/param.rb +41 -0
  156. data/lib/generators/mindapp/templates/app/models/user.rb +30 -0
  157. data/lib/generators/mindapp/templates/app/views/identities/new.html.erb +30 -0
  158. data/lib/generators/mindapp/templates/app/views/layouts/_full.haml +39 -0
  159. data/lib/generators/mindapp/templates/app/views/layouts/_head.html.erb +14 -0
  160. data/lib/generators/mindapp/templates/app/views/layouts/_page.haml +16 -0
  161. data/lib/generators/mindapp/templates/app/views/layouts/_top.html.erb +10 -0
  162. data/lib/generators/mindapp/templates/app/views/layouts/application.haml +4 -0
  163. data/lib/generators/mindapp/templates/app/views/layouts/gmail.html.erb +9 -0
  164. data/lib/generators/mindapp/templates/app/views/layouts/mobile.html.erb +13 -0
  165. data/lib/generators/mindapp/templates/app/views/layouts/mobilejq.html.erb +31 -0
  166. data/lib/generators/mindapp/templates/app/views/layouts/print.html.erb +22 -0
  167. data/lib/generators/mindapp/templates/app/views/layouts/utf8.html.erb +21 -0
  168. data/lib/generators/mindapp/templates/app/views/mindapp/_activity.md +10 -0
  169. data/lib/generators/mindapp/templates/app/views/mindapp/_menu.haml +22 -0
  170. data/lib/generators/mindapp/templates/app/views/mindapp/_menu_mm.haml +30 -0
  171. data/lib/generators/mindapp/templates/app/views/mindapp/_model.md +5 -0
  172. data/lib/generators/mindapp/templates/app/views/mindapp/_modul.md +9 -0
  173. data/lib/generators/mindapp/templates/app/views/mindapp/_pending_home.haml +5 -0
  174. data/lib/generators/mindapp/templates/app/views/mindapp/_pending_page.haml +26 -0
  175. data/lib/generators/mindapp/templates/app/views/mindapp/_service.md +24 -0
  176. data/lib/generators/mindapp/templates/app/views/mindapp/_static.haml +23 -0
  177. data/lib/generators/mindapp/templates/app/views/mindapp/doc.md +37 -0
  178. data/lib/generators/mindapp/templates/app/views/mindapp/feed.rss.builder +27 -0
  179. data/lib/generators/mindapp/templates/app/views/mindapp/help.haml +20 -0
  180. data/lib/generators/mindapp/templates/app/views/mindapp/index.html.haml +34 -0
  181. data/lib/generators/mindapp/templates/app/views/mindapp/pending.haml +1 -0
  182. data/lib/generators/mindapp/templates/app/views/mindapp/run_form.haml +37 -0
  183. data/lib/generators/mindapp/templates/app/views/mindapp/search.haml +20 -0
  184. data/lib/generators/mindapp/templates/app/views/mindapp/status.haml +61 -0
  185. data/lib/generators/mindapp/templates/app/views/mindapp_mailer/gmail.html.erb +9 -0
  186. data/lib/generators/mindapp/templates/app/views/sessions/new.html.erb +11 -0
  187. data/lib/generators/mindapp/templates/mindapp.yml +10 -0
  188. data/lib/generators/mindapp/templates/seeds.rb +6 -0
  189. data/lib/mindapp.rb +6 -0
  190. data/lib/mindapp/helpers.rb +475 -0
  191. data/lib/mindapp/railtie.rb +18 -0
  192. data/lib/mindapp/version.rb +3 -0
  193. data/lib/tasks/mindapp.rake +191 -0
  194. data/mindapp.gemspec +19 -0
  195. metadata +239 -0
@@ -0,0 +1,624 @@
1
+ // TODO: reinstate replaceBackBtn - to include the case where people actually really want the back btn
2
+ (function($,window,undefined){
3
+ $( window.document ).bind('mobileinit', function(){
4
+ //some class for css to detect touchscreens
5
+ if($.support.touch){
6
+ $('html').addClass('touch');
7
+ }
8
+ var $query = $.mobile.media('screen and (min-width: 480px)') && ($.mobile.media('(-webkit-max-device-pixel-ratio: 1.2)') || $.mobile.media('(max--moz-device-pixel-ratio: 1.2)'));
9
+ $.support.splitview = ($query || ($.mobile.browser.ie && $(this).width() >= 480)) && $.mobile.ajaxEnabled;
10
+ if ($.support.splitview) {
11
+ $('html').addClass('splitview');
12
+ //on window.ready() execution:
13
+ $(function() {
14
+ $(document).unbind('.toolbar');
15
+ $('.ui-page').die('.toolbar');
16
+ $('div:jqmData(role="panel")').addClass('ui-mobile-viewport ui-panel');
17
+ var firstPageMain=$('div:jqmData(id="main") > div:jqmData(role="page"):first');
18
+ if( !$.mobile.hashListeningEnabled || !$.mobile.path.stripHash( location.hash ) ){
19
+ var $container=$('div:jqmData(id="main")');
20
+ $.mobile.firstPage = firstPageMain;
21
+ $.mobile.changePage(firstPageMain, {transition:'none', changeHash:false, pageContainer:$container});
22
+ $.mobile.activePage=undefined;
23
+ } //no need to trigger a hashchange here cause the other page is handled by core.
24
+
25
+ // setup the layout for splitview and jquerymobile will handle first page init
26
+ $(window).trigger('orientationchange');
27
+ setTimeout(function(){
28
+ $.mobile.firstPage = firstPageMain;
29
+ }, 100)
30
+ }); //end window.ready()
31
+
32
+ //----------------------------------------------------------------------------------
33
+ //Main event bindings: click, form submits, hashchange and orientationchange/resize(popover)
34
+ //----------------------------------------------------------------------------------
35
+ //existing base tag?
36
+ var $window = $( window ),
37
+ $html = $( 'html' ),
38
+ $head = $( 'head' ),
39
+ $base = $head.children( "base" ),
40
+ //tuck away the original document URL minus any fragment.
41
+ documentUrl = $.mobile.path.parseUrl( location.href ),
42
+
43
+ //if the document has an embedded base tag, documentBase is set to its
44
+ //initial value. If a base tag does not exist, then we default to the documentUrl.
45
+ documentBase = $base.length ? $.mobile.path.parseUrl( $.mobile.path.makeUrlAbsolute( $base.attr( "href" ), documentUrl.href ) ) : documentUrl;
46
+
47
+ function findClosestLink(ele)
48
+ {
49
+ while (ele){
50
+ if (ele.nodeName.toLowerCase() == "a"){
51
+ break;
52
+ }
53
+ ele = ele.parentNode;
54
+ }
55
+ return ele;
56
+ }
57
+
58
+ // The base URL for any given element depends on the page it resides in.
59
+ function getClosestBaseUrl( ele )
60
+ {
61
+ // Find the closest page and extract out its url.
62
+ var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ),
63
+ base = documentBase.hrefNoHash;
64
+
65
+ if ( !url || !$.mobile.path.isPath( url ) ) {
66
+ url = base;
67
+ }
68
+
69
+ return $.mobile.path.makeUrlAbsolute( url, base);
70
+ }
71
+
72
+ //simply set the active page's minimum height to screen height, depending on orientation
73
+ function getScreenHeight(){
74
+ var orientation = jQuery.event.special.orientationchange.orientation(),
75
+ port = orientation === "portrait",
76
+ winMin = port ? 480 : 320,
77
+ screenHeight = port ? screen.availHeight : screen.availWidth,
78
+ winHeight = Math.max( winMin, $( window ).height() ),
79
+ pageMin = Math.min( screenHeight, winHeight );
80
+
81
+ return pageMin;
82
+ }
83
+
84
+ function newResetActivePageHeight(){
85
+ var page=$( "." + $.mobile.activePageClass );
86
+ page.each(function(){
87
+ if($(this).closest(".panel-popover").length != 1){
88
+ $(this).css("min-height", getScreenHeight());
89
+ }
90
+ else {
91
+ $(this).css("min-height", "100%")
92
+ }
93
+ });
94
+
95
+ }
96
+
97
+ //override _registerInternalEvents to bind to new methods below
98
+ $.mobile._registerInternalEvents = function(){
99
+ //DONE: bind form submit with this plugin
100
+ $("form").live('submit', function(event){
101
+ var $this = $( this );
102
+ if( !$.mobile.ajaxEnabled ||
103
+ $this.is( ":jqmData(ajax='false')" ) ){ return; }
104
+
105
+ var type = $this.attr("method"),
106
+ target = $this.attr("target"),
107
+ url = $this.attr( "action" ),
108
+ $currPanel=$this.parents('div:jqmData(role="panel")'),
109
+ $currPanelActivePage=$currPanel.children('div.'+$.mobile.activePageClass);
110
+
111
+ // If no action is specified, browsers default to using the
112
+ // URL of the document containing the form. Since we dynamically
113
+ // pull in pages from external documents, the form should submit
114
+ // to the URL for the source document of the page containing
115
+ // the form.
116
+ if ( !url ) {
117
+ // Get the @data-url for the page containing the form.
118
+ url = getClosestBaseUrl( $this );
119
+ if ( url === documentBase.hrefNoHash ) {
120
+ // The url we got back matches the document base,
121
+ // which means the page must be an internal/embedded page,
122
+ // so default to using the actual document url as a browser
123
+ // would.
124
+ url = documentUrl.hrefNoSearch;
125
+ }
126
+ }
127
+
128
+ url = $.mobile.path.makeUrlAbsolute( url, getClosestBaseUrl($this) );
129
+
130
+ //external submits use regular HTTP
131
+ if( $.mobile.path.isExternal( url ) || target ) {
132
+ return;
133
+ }
134
+
135
+ //temporarily put this here- eventually shud just set it immediately instead of an interim var.
136
+ $.mobile.activePage=$currPanelActivePage;
137
+ // $.mobile.pageContainer=$currPanel;
138
+ $.mobile.changePage(
139
+ url,
140
+ {
141
+ type: type && type.length && type.toLowerCase() || "get",
142
+ data: $this.serialize(),
143
+ transition: $this.jqmData("transition"),
144
+ direction: $this.jqmData("direction"),
145
+ reloadPage: true,
146
+ pageContainer:$currPanel
147
+ }
148
+ );
149
+ event.preventDefault();
150
+ });
151
+
152
+ //add active state on vclick
153
+ $( document ).bind( "vclick", function( event ) {
154
+ var link = findClosestLink( event.target );
155
+ if ( link ) {
156
+ if ( $.mobile.path.parseUrl( link.getAttribute( "href" ) || "#" ).hash !== "#" ) {
157
+ $( link ).closest( ".ui-btn" ).not( ".ui-disabled" ).addClass( $.mobile.activeBtnClass );
158
+ $( "." + $.mobile.activePageClass + " .ui-btn" ).not( link ).blur();
159
+ }
160
+ }
161
+ });
162
+
163
+ //DONE: link click event binding for changePage
164
+ //click routing - direct to HTTP or Ajax, accordingly
165
+ $(document).bind( "click", function(event) {
166
+ var link = findClosestLink(event.target);
167
+ if (!link){
168
+ return;
169
+ }
170
+
171
+ var $link = $(link),
172
+ //remove active link class if external (then it won't be there if you come back)
173
+ httpCleanup = function(){
174
+ window.setTimeout( function() { removeActiveLinkClass( true ); }, 200 );
175
+ };
176
+
177
+ //if there's a data-rel=back attr, go back in history
178
+ if( $link.is( ":jqmData(rel='back')" ) ) {
179
+ window.history.back();
180
+ return false;
181
+ }
182
+
183
+ //if ajax is disabled, exit early
184
+ if( !$.mobile.ajaxEnabled ){
185
+ httpCleanup();
186
+ //use default click handling
187
+ return;
188
+ }
189
+
190
+ var baseUrl = getClosestBaseUrl( $link ),
191
+
192
+ //get href, if defined, otherwise fall to null #
193
+ href = $.mobile.path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl );
194
+
195
+ // XXX_jblas: Ideally links to application pages should be specified as
196
+ // an url to the application document with a hash that is either
197
+ // the site relative path or id to the page. But some of the
198
+ // internal code that dynamically generates sub-pages for nested
199
+ // lists and select dialogs, just write a hash in the link they
200
+ // create. This means the actual URL path is based on whatever
201
+ // the current value of the base tag is at the time this code
202
+ // is called. For now we are just assuming that any url with a
203
+ // hash in it is an application page reference.
204
+ if ( href.search( "#" ) != -1 ) {
205
+ href = href.replace( /[^#]*#/, "" );
206
+ if ( !href ) {
207
+ //link was an empty hash meant purely
208
+ //for interaction, so we ignore it.
209
+ event.preventDefault();
210
+ return;
211
+ } else if ( $.mobile.path.isPath( href ) ) {
212
+ //we have apath so make it the href we want to load.
213
+ href = $.mobile.path.makeUrlAbsolute( href, baseUrl );
214
+ } else {
215
+ //we have a simple id so use the documentUrl as its base.
216
+ href = $.mobile.path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash );
217
+ }
218
+ }
219
+
220
+ // Should we handle this link, or let the browser deal with it?
221
+ var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ),
222
+ // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR
223
+ // requests if the document doing the request was loaded via the file:// protocol.
224
+ // This is usually to allow the application to "phone home" and fetch app specific
225
+ // data. We normally let the browser handle external/cross-domain urls, but if the
226
+ // allowCrossDomainPages option is true, we will allow cross-domain http/https
227
+ // requests to go through our page loading logic.
228
+ isCrossDomainPageLoad = ( $.mobile.allowCrossDomainPages && documentUrl.protocol === "file:" && href.search( /^https?:/ ) != -1 ),
229
+
230
+ //check for protocol or rel and its not an embedded page
231
+ //TODO overlap in logic from isExternal, rel=external check should be
232
+ // moved into more comprehensive isExternalLink
233
+ isExternal = useDefaultUrlHandling || ( $.mobile.path.isExternal( href ) && !isCrossDomainPageLoad ),
234
+
235
+ isRefresh=$link.jqmData('refresh'),
236
+ $targetPanel=$link.jqmData('panel'),
237
+ $targetContainer=$('div:jqmData(id="'+$targetPanel+'")'),
238
+ $targetPanelActivePage=$targetContainer.children('div.'+$.mobile.activePageClass),
239
+ $currPanel=$link.parents('div:jqmData(role="panel")'),
240
+ //not sure we need this. if you want the container of the element that triggered this event, $currPanel
241
+ $currContainer=$.mobile.pageContainer,
242
+ $currPanelActivePage=$currPanel.children('div.'+$.mobile.activePageClass),
243
+ url=$.mobile.path.stripHash($link.attr("href")),
244
+ from = null;
245
+
246
+ //still need this hack apparently:
247
+ $('.ui-btn.'+$.mobile.activeBtnClass).removeClass($.mobile.activeBtnClass);
248
+ $activeClickedLink = $link.closest( ".ui-btn" ).addClass($.mobile.activeBtnClass);
249
+
250
+ if( isExternal ) {
251
+ httpCleanup();
252
+ //use default click handling
253
+ return;
254
+ }
255
+
256
+ //use ajax
257
+ var transitionVal = $link.jqmData( "transition" ),
258
+ direction = $link.jqmData("direction"),
259
+ reverseVal = (direction && direction === "reverse") ||
260
+ // deprecated - remove by 1.0
261
+ $link.jqmData( "back" ),
262
+ //this may need to be more specific as we use data-rel more
263
+ role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined,
264
+ hash = $currPanel.jqmData('hash');
265
+
266
+ //if link refers to an already active panel, stop default action and return
267
+ if ($targetPanelActivePage.attr('data-url') == url || $currPanelActivePage.attr('data-url') == url) {
268
+ if (isRefresh) { //then changePage below because it's a pageRefresh request
269
+ $.mobile.changePage(href, {fromPage:from, transition:'fade', reverse:reverseVal, changeHash:false, pageContainer:$targetContainer, reloadPage:isRefresh});
270
+ }
271
+ else { //else preventDefault and return
272
+ event.preventDefault();
273
+ return;
274
+ }
275
+ }
276
+ //if link refers to a page on another panel, changePage on that panel
277
+ else if ($targetPanel && $targetPanel!=$link.parents('div:jqmData(role="panel")')) {
278
+ var from=$targetPanelActivePage;
279
+ $.mobile.pageContainer=$targetContainer;
280
+ $.mobile.changePage(href, {fromPage:from, transition:transitionVal, reverse:reverseVal, pageContainer:$targetContainer});
281
+ }
282
+ //if link refers to a page inside the same panel, changePage on that panel
283
+ else {
284
+ var from=$currPanelActivePage;
285
+ $.mobile.pageContainer=$currPanel;
286
+ var hashChange= (hash == 'false' || hash == 'crumbs')? false : true;
287
+ $.mobile.changePage(href, {fromPage:from, transition:transitionVal, reverse:reverseVal, changeHash:hashChange, pageContainer:$currPanel});
288
+ //active page must always point to the active page in main - for history purposes.
289
+ $.mobile.activePage=$('div:jqmData(id="main") > div.'+$.mobile.activePageClass);
290
+ }
291
+ event.preventDefault();
292
+ });
293
+
294
+ //prefetch pages when anchors with data-prefetch are encountered
295
+ //TODO: insert pageContainer in here!
296
+ $( ".ui-page" ).live( "pageshow.prefetch", function(){
297
+ var urls = [],
298
+ $thisPageContainer = $(this).parents('div:jqmData(role="panel")');
299
+ $( this ).find( "a:jqmData(prefetch)" ).each(function(){
300
+ var url = $( this ).attr( "href" ),
301
+ panel = $(this).jqmData('panel'),
302
+ container = panel.length? $('div:jqmData(id="'+panel+'")') : $thisPageContainer;
303
+ if ( url && $.inArray( url, urls ) === -1 ) {
304
+ urls.push( url );
305
+ $.mobile.loadPage( url, {pageContainer: container} );
306
+ }
307
+ });
308
+ });
309
+
310
+ //DONE: bind hashchange with this plugin
311
+ //hashchanges are defined only for the main panel - other panels should not support hashchanges to avoid ambiguity
312
+ $.mobile._handleHashChange = function( hash ) {
313
+ var to = $.mobile.path.stripHash( hash ),
314
+ transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined,
315
+ $mainPanel=$('div:jqmData(id="main")'),
316
+ $mainPanelFirstPage=$mainPanel.children('div:jqmData(role="page"):first'),
317
+ $mainPanelActivePage=$mainPanel.children('div.ui-page-active'),
318
+ $menuPanel=$('div:jqmData(id="menu")'),
319
+ $menuPanelFirstPage=$menuPanel.children('div:jqmData(role="page"):first'),
320
+ $menuPanelActivePage=$menuPanel.children('div.ui-page-active'),
321
+ //FIX: temp var for dialogHashKey
322
+ dialogHashKey = "&ui-state=dialog",
323
+
324
+ // default options for the changPage calls made after examining the current state
325
+ // of the page and the hash
326
+ changePageOptions = {
327
+ transition: transition,
328
+ changeHash: false,
329
+ fromHashChange: true,
330
+ pageContainer: $mainPanel
331
+ };
332
+
333
+ if( !$.mobile.hashListeningEnabled || $.mobile.urlHistory.ignoreNextHashChange ){
334
+ $.mobile.urlHistory.ignoreNextHashChange = false;
335
+ return;
336
+ }
337
+
338
+ // special case for dialogs
339
+ if( $.mobile.urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 ) {
340
+
341
+ // If current active page is not a dialog skip the dialog and continue
342
+ // in the same direction
343
+ if(!$.mobile.activePage.is( ".ui-dialog" )) {
344
+ //determine if we're heading forward or backward and continue accordingly past
345
+ //the current dialog
346
+ $.mobile.urlHistory.directHashChange({
347
+ currentUrl: to,
348
+ isBack: function() { window.history.back(); },
349
+ isForward: function() { window.history.forward(); }
350
+ });
351
+
352
+ // prevent changepage
353
+ return;
354
+ } else {
355
+ // var setTo = function() { to = $.mobile.urlHistory.getActive().pageUrl; };
356
+ // if the current active page is a dialog and we're navigating
357
+ // to a dialog use the dialog objected saved in the stack
358
+ // urlHistory.directHashChange({ currentUrl: to, isBack: setTo, isForward: setTo });
359
+ urlHistory.directHashChange({
360
+ currentUrl: to,
361
+
362
+ // regardless of the direction of the history change
363
+ // do the following
364
+ either: function( isBack ) {
365
+ var active = $.mobile.urlHistory.getActive();
366
+
367
+ to = active.pageUrl;
368
+
369
+ // make sure to set the role, transition and reversal
370
+ // as most of this is lost by the domCache cleaning
371
+ $.extend( changePageOptions, {
372
+ role: active.role,
373
+ transition: active.transition,
374
+ reverse: isBack
375
+ });
376
+ }
377
+ });
378
+ }
379
+ }
380
+
381
+ //if to is defined, load it
382
+ if ( to ){
383
+ to = ( typeof to === "string" && !$.mobile.path.isPath( to ) ) ? ( $.mobile.path.makeUrlAbsolute( '#' + to, documentBase ) ) : to;
384
+ //if this is initial deep-linked page setup, then changePage sidemenu as well
385
+ if (!$('div.ui-page-active').length) {
386
+ $menuPanelFirstPage='#'+$menuPanelFirstPage.attr('id');
387
+ $.mobile.changePage($menuPanelFirstPage, {transition:'none', reverse:true, changeHash:false, fromHashChange:false, pageContainer:$menuPanel});
388
+ $.mobile.activePage=undefined;
389
+ }
390
+ $.mobile.activePage=$mainPanelActivePage.length? $mainPanelActivePage : undefined;
391
+ $.mobile.changePage(to, changePageOptions );
392
+ } else {
393
+ //there's no hash, go to the first page in the main panel.
394
+ $.mobile.activePage=$mainPanelActivePage? $mainPanelActivePage : undefined;
395
+ $.mobile.changePage( $mainPanelFirstPage, changePageOptions );
396
+ }
397
+ };
398
+
399
+ //hashchange event handler
400
+ $(window).bind( "hashchange", function( e, triggered ) {
401
+ $.mobile._handleHashChange( location.hash );
402
+ });
403
+
404
+ //set page min-heights to be device specific
405
+ $( document ).bind( "pageshow.resetPageHeight", newResetActivePageHeight );
406
+ $( window ).bind( "throttledresize.resetPageHeight", newResetActivePageHeight );
407
+
408
+ }; //end _registerInternalEvents
409
+
410
+ //DONE: bind orientationchange and resize - the popover
411
+ _orientationHandler = function(event){
412
+ var $menu=$('div:jqmData(id="menu")'),
413
+ $main=$('div:jqmData(id="main")'),
414
+ $mainHeader=$main.find('div.'+$.mobile.activePageClass+'> div:jqmData(role="header")'),
415
+ $window=$(window);
416
+
417
+ function popoverBtn(header) {
418
+ if(!header.children('.popover-btn').length){
419
+ if(header.children('a.ui-btn-left').length){
420
+ header.children('a.ui-btn-left').replaceWith('<a class="popover-btn">Menu</a>');
421
+ header.children('a.popover-btn').addClass('ui-btn-left').buttonMarkup();
422
+ }
423
+ else{
424
+ header.prepend('<a class="popover-btn">Menu</a>');
425
+ header.children('a.popover-btn').addClass('ui-btn-left').buttonMarkup()
426
+ }
427
+ }
428
+ }
429
+
430
+ function replaceBackBtn(header) {
431
+ if($.mobile.urlHistory.stack.length > 1 && !header.children('a:jqmData(rel="back")').length && header.jqmData('backbtn')!=false){
432
+ header.prepend("<a href='#' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>Back</a>" );
433
+ header.children('a:jqmData(rel="back")').buttonMarkup();
434
+ }
435
+ };
436
+
437
+ function popover(){
438
+ $menu.addClass('panel-popover')
439
+ .removeClass('ui-panel-left')
440
+ .css({'width':'25%', 'min-width':'250px', 'display':'', 'overflow-x':'visible'});
441
+ if(!$menu.children('.popover_triangle').length){
442
+ $menu.prepend('<div class="popover_triangle"></div>');
443
+ }
444
+ $menu.children('.' + $.activePageClass).css('min-height', '100%');
445
+ $main.removeClass('ui-panel-right')
446
+ .css('width', '');
447
+ popoverBtn($mainHeader);
448
+
449
+ $main.undelegate('div:jqmData(role="page")', 'pagebeforeshow.splitview');
450
+ $main.delegate('div:jqmData(role="page")','pagebeforeshow.popover', function(){
451
+ var $thisHeader=$(this).children('div:jqmData(role="header")');
452
+ popoverBtn($thisHeader);
453
+ });
454
+ // TODO: unbind resetActivePageHeight for popover pages
455
+
456
+ };
457
+
458
+ function splitView(){
459
+ $menu.removeClass('panel-popover')
460
+ .addClass('ui-panel-left')
461
+ .css({'width':'25%', 'min-width':'250px', 'display':''});
462
+ $menu.children('.popover_triangle').remove();
463
+ $main.addClass('ui-panel-right')
464
+ .width(function(){
465
+ return $(window).width()-$('div:jqmData(id="menu")').width();
466
+ });
467
+ $mainHeader.children('.popover-btn').remove();
468
+
469
+ // replaceBackBtn($mainHeader);
470
+
471
+ $main.undelegate('div:jqmData(role="page")', 'pagebeforeshow.popover');
472
+ $main.delegate('div:jqmData(role="page")', 'pagebeforeshow.splitview', function(){
473
+ var $thisHeader=$(this).children('div:jqmData(role="header")');
474
+ $thisHeader.children('.popover-btn').remove();
475
+ // replaceBackBtn($thisHeader);
476
+ });
477
+
478
+ }
479
+
480
+ if(event.orientation){
481
+ if(event.orientation == 'portrait'){
482
+ popover();
483
+ }
484
+ else if(event.orientation == 'landscape') {
485
+ splitView();
486
+ }
487
+ }
488
+ else if($window.width() < 768 && $window.width() > 480){
489
+ popover();
490
+ }
491
+ else if($window.width() > 768){
492
+ splitView();
493
+ }
494
+ };
495
+
496
+ $(window).bind('orientationchange', _orientationHandler);
497
+ $(window).bind('throttledresize', _orientationHandler);
498
+
499
+ //popover button click handler - from http://www.cagintranet.com/archive/create-an-ipad-like-dropdown-popover/
500
+ $('.popover-btn').live('click', function(e){
501
+ e.preventDefault();
502
+ $('.panel-popover').fadeToggle('fast');
503
+ if ($('.popover-btn').hasClass($.mobile.activeBtnClass)) {
504
+ $('.popover-btn').removeClass($.mobile.activeBtnClass);
505
+ } else {
506
+ $('.popover-btn').addClass($.mobile.activeBtnClass);
507
+ }
508
+ });
509
+
510
+ $('body').live('click', function(event) {
511
+ if (!$(event.target).closest('.panel-popover').length && !$(event.target).closest('.popover-btn').length) {
512
+ $(".panel-popover").stop(true, true).hide();
513
+ $('.popover-btn').removeClass($.mobile.activeBtnClass);
514
+ };
515
+ });
516
+
517
+
518
+ //----------------------------------------------------------------------------------
519
+ //Other event bindings: scrollview, crumbs, data-context and content height adjustments
520
+ //----------------------------------------------------------------------------------
521
+
522
+ //DONE: pageshow binding for scrollview - now using IScroll4! hell yeah!
523
+ $('div:jqmData(role="page")').live('pagebeforeshow.scroll', function(event, ui){
524
+ if ($.support.touch && !$.support.touchOverflow) {
525
+
526
+ var $page = $(this),
527
+ $scrollArea = $page.find('div:jqmData(role="content")');
528
+ $scrAreaChildren = $scrollArea.children();
529
+
530
+ if ($scrAreaChildren.length > 1) {
531
+ $scrAreaChildren = $scrollArea.wrapInner("<div class='scrollable vertical'></div>").children();
532
+ }
533
+ $scrollArea.css({ 'width':'auto',
534
+ 'height':'auto',
535
+ 'overflow':'hidden'});
536
+ //TODO: if too many pages are in the DOM that have iscroll on, this might slow down the browser significantly,
537
+ //in which case we'll need to destroy() the iscroll as the page hides.
538
+ $scrollArea.iscroll();
539
+ }
540
+ });
541
+
542
+ //data-hash 'crumbs' handler
543
+ //now that data-backbtn is no longer defaulting to true, lets set crumbs to create itself even when backbtn is not available
544
+ $('div:jqmData(role="page")').live('pagebeforeshow.crumbs', function(event, data){
545
+ var $this = $(this);
546
+ if($this.jqmData('hash') == 'crumbs' || $this.parents('div:jqmData(role="panel")').data('hash') == 'crumbs'){
547
+ if($this.jqmData('hash')!=false && $this.find('.ui-crumbs').length < 1){
548
+ var $header=$this.find('div:jqmData(role="header")');
549
+ backBtn = $this.find('a:jqmData(rel="back")');
550
+
551
+ if(data.prevPage.jqmData('url') == $this.jqmData('url')){ //if it's a page refresh
552
+ var prevCrumb = data.prevPage.find('.ui-crumbs');
553
+ crumbify(backBtn, prevCrumb.attr('href'), prevCrumb.find('.ui-btn-text').html());
554
+ }
555
+ else if($.mobile.urlHistory.stack.length > 0) {
556
+ var text = data.prevPage.find('div:jqmData(role="header") .ui-title').html();
557
+ crumbify(backBtn, '#'+data.prevPage.jqmData('url'), text);
558
+ }
559
+ else if(backBtn.length && $.mobile.urlHistory.stack.length <= 1) {
560
+ backBtn.remove();
561
+ }
562
+ }
563
+ }
564
+
565
+ function crumbify(button, href, text){
566
+ if(!button.length) {
567
+ $this.find('div:jqmData(role="header")').prepend('<a class="ui-crumbs ui-btn-left" data-icon="arrow-l"></a>');
568
+ button=$header.children('.ui-crumbs').buttonMarkup();
569
+ }
570
+ button.removeAttr('data-rel')
571
+ .jqmData('direction','reverse')
572
+ .addClass('ui-crumbs')
573
+ .attr('href',href);
574
+ button.find('.ui-btn-text').html(text);
575
+ }
576
+ });
577
+
578
+ //data-context handler - a page with a link that has a data-context attribute will load that page after this page loads
579
+ //this still needs work - pageTransitionQueue messes everything up.
580
+ $('div:jqmData(role="panel")').live('pagechange.context', function(){
581
+ var $this=$(this),
582
+ $currPanelActivePage = $this.children('.' + $.mobile.activePageClass),
583
+ panelContextSelector = $this.jqmData('context'),
584
+ pageContextSelector = $currPanelActivePage.jqmData('context'),
585
+ contextSelector= pageContextSelector ? pageContextSelector : panelContextSelector;
586
+ //if you pass a hash into data-context, you need to specify panel, url and a boolean value for refresh
587
+ if($.type(contextSelector) === 'object') {
588
+ var $targetContainer=$('div:jqmData(id="'+contextSelector.panel+'")'),
589
+ $targetPanelActivePage=$targetContainer.children('div.'+$.mobile.activePageClass),
590
+ isRefresh = contextSelector.refresh === undefined ? false : contextSelector.refresh;
591
+ if(($targetPanelActivePage.jqmData('url') == contextSelector.url && contextSelector.refresh)||(!contextSelector.refresh && $targetPanelActivePage.jqmData('url') != contextSelector.url)){
592
+ $.mobile.changePage(contextSelector.url, options={transition:'fade', changeHash:false, pageContainer:$targetContainer, reloadPage:isRefresh});
593
+ }
594
+ }
595
+ else if(contextSelector && $currPanelActivePage.find(contextSelector).length){
596
+ $currPanelActivePage.find(contextSelector).trigger('click');
597
+ }
598
+ });
599
+
600
+ //this measures the height of header and footer and sets content to the appropriate height so
601
+ // that no content is concealed behind header and footer
602
+ $('div:jqmData(role="page")').live('pageshow.contentHeight', function(){
603
+ var $this=$(this),
604
+ $header=$this.children(':jqmData(role="header")'),
605
+ $footer=$this.children(':jqmData(role="footer")'),
606
+ thisHeaderHeight=$header.css('display') == 'none' ? 0 : $header.outerHeight(),
607
+ thisFooterHeight=$footer.css('display') == 'none' ? 0 : $footer.outerHeight();
608
+ // $this.children(':jqmData(role="content")').css({'top':thisHeaderHeight, 'bottom':thisFooterHeight});
609
+ })
610
+
611
+ //this allows panels to change their widths upon changepage - useful for pages that need a different width than the ones provided.
612
+ // $('div:jqmData(role="page")').live('')
613
+ }
614
+ else {
615
+ //removes all panels so the page behaves like a single panel jqm
616
+ $(function(){
617
+ $('div:jqmData(role="panel")').each(function(){
618
+ var $this = $(this);
619
+ $this.replaceWith($this.html());
620
+ })
621
+ });
622
+ }
623
+ });
624
+ })(jQuery,window);