1 From 4755edbf7aaae376a58f94ec98ca433ce98ef0d9 Mon Sep 17 00:00:00 2001
2 From: Minkyu Kang <mk7.kang@samsung.com>
3 Date: Wed, 29 Feb 2012 16:17:13 +0900
4 Subject: [PATCH] JQM: Add back button into header/footer
6 Signed-off-by: Jun Jinhyuk <jinhyuk.jun@samsung.com>
7 Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
9 .../js/jquery.mobile.page.sections.js | 97 ++++++++++++++++++--
10 1 files changed, 90 insertions(+), 7 deletions(-)
12 diff --git a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js
13 index 2317c0c..63bba20 100644
14 --- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js
15 +++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js
17 * This plugin handles theming and layout of headers, footers, and content areas
21 + * Page can be created using the calendarpicker() method or by adding a
22 + * data-role="page" attribute to an element.
24 + * Page has 3 main sub element. Header, Footer, Content
25 + * 3 sub element can be created using <div> element
29 + * data-back-Btn-Text: determine which text is displayed in back button
30 + * data-add-Back-Btn: Defines if header/footer has back button or not (default false)
31 + * data-back-Btn-Theme: defines back button's theme
32 + * data-header-Theme: defines header <div>'s theme
33 + * data-footer-Theme: defines footer <div>'s theme
34 + * data-content-Theme: defines content <div>'s theme
35 + * data-footer-Exist: defines to show default footer or not in each page (default true)
36 + * data-footer-User-Control-Theme: defines to show default footer in whole page
37 + * (default false. if true, all document do not has footer)
41 + * HTML markup for creating Page:
42 + * <div data-role="page">
44 + * How to show back button
45 + * <div data-role="page" id="no-contents-0" data-add-back-btn="true">
47 + * How to remove footer of specific page
48 + * <div data-role="page" id="no-contents-0" data-footer-Exist="false">
50 + * How to remove footer of whole page
51 + * <div data-role="page" id="no-contents-0" data-footer-User-Control="true">
54 (function( $, undefined ) {
56 $.mobile.page.prototype.options.backBtnText = "Back";
57 @@ -10,6 +44,8 @@ $.mobile.page.prototype.options.backBtnTheme = null;
58 $.mobile.page.prototype.options.headerTheme = "a";
59 $.mobile.page.prototype.options.footerTheme = "a";
60 $.mobile.page.prototype.options.contentTheme = null;
61 +$.mobile.page.prototype.options.footerExist = true;
62 +$.mobile.page.prototype.options.footerUserControl = false;
64 $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", function( e ) {
66 @@ -22,17 +58,23 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
67 var $this = $( this ),
68 role = $this.jqmData( "role" ),
69 theme = $this.jqmData( "theme" ),
70 - contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
71 + contentTheme = theme || o.contentTheme || pageTheme,
78 + footerExist = $this.jqmData("footerexist");
80 + if ( footerExist != undefined ) {
81 + o.footerExist = footerExist;
84 $this.addClass( "ui-" + role );
86 //apply theming and markup modifications to page,header,content,footer
87 if ( role === "header" || role === "footer" ) {
89 var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
92 @@ -47,20 +89,31 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
93 rightbtn = $headeranchors.hasClass( "ui-btn-right" );
95 leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
97 rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
99 + // set default userControl value
100 + if ( o.footerUserControl ) {
101 + $.mobile.page.prototype.options.footerUserControl = "true";
104 // Auto-add back btn on pages beyond first view
105 + // create backbtn in case footer exist
107 - role === "header" &&
108 - $( ".ui-page" ).length > 1 &&
109 + role === "footer" &&
111 $this.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
114 - backBtn = $( "<a href='#' class='ui-btn-left' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='arrow-l'>"+ o.backBtnText +"</a>" )
115 + backBtn = $( "<a href='#' class='ui-btn-back' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='header-back-btn'></a>" )
116 // If theme is provided, override default inheritance
117 .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
121 + backBtn.bind( "vclick", function( event ) {
122 + window.history.back();
128 @@ -80,8 +133,38 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
131 $this.attr( "role", "main" );
133 + /* Add default footer to add backbtn */
136 + if ( o.footerExist ) {
137 + backBtn = $( "<a href='#' class='ui-btn-back' data-" +
138 + $.mobile.ns + "rel='back' data-" +
139 + $.mobile.ns + "icon='header-back-btn'></a>" )
140 + .attr( "data-" + $.mobile.ns + "theme", o.backBtnTheme || thisTheme );
141 + var footer = $page.find("div:jqmData(role='footer')");
143 + if ( footer.length != 0 ) {
144 + if ( !footer.find("jqmData(role='navbar')").is("jqmData(style='tabbar')") ) {
145 + backBtn.appendTo( footer );
148 + if ( !$.mobile.page.prototype.options.footerUserControl ) {
149 + normalFooter = $( "<div data-role='footer' class='ui-footer ui-bar-s ui-footer-fixed fade ui-fixed-overlay' data-position='fixed'></div>" )
150 + .insertAfter( $page.find( ".ui-content" ) );
151 + backBtn.appendTo( normalFooter );
156 + backBtn.bind( "vclick", function( event ) {
157 + window.history.back();
167 \ No newline at end of file