tizen beta release
[framework/web/web-ui-fw.git] / libs / patch / 0007-JQM-Add-back-button-into-header-footer.patch
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
5
6 Signed-off-by: Jun Jinhyuk <jinhyuk.jun@samsung.com>
7 Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
8 ---
9  .../js/jquery.mobile.page.sections.js              |   97 ++++++++++++++++++--
10  1 files changed, 90 insertions(+), 7 deletions(-)
11
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
16 @@ -2,6 +2,40 @@
17  * This plugin handles theming and layout of headers, footers, and content areas
18  */
19  
20 +/*
21 + * Page can be created using the calendarpicker() method or by adding a
22 + * data-role="page" attribute to an element.
23 + *
24 + * Page has 3 main sub element. Header, Footer, Content
25 + * 3 sub element can be created using <div> element
26 + *
27 + * Attribute:
28 + *
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)
38 + *
39 + * Examples:
40 + *
41 + *     HTML markup for creating Page:
42 + *     <div data-role="page">
43 + *
44 + *     How to show back button
45 + *     <div data-role="page" id="no-contents-0" data-add-back-btn="true">
46 + *
47 + *     How to  remove footer of specific page
48 + *     <div data-role="page" id="no-contents-0" data-footer-Exist="false">
49 + *
50 + *     How to  remove footer of whole page
51 + *     <div data-role="page" id="no-contents-0" data-footer-User-Control="true">
52 + */
53 +
54  (function( $, undefined ) {
55  
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;
63  
64  $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", function( e ) {
65         
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,
72                         $headeranchors,
73                         leftbtn,
74                         rightbtn,
75                         backBtn;
76 +
77 +               var normalFooter,
78 +                       footerExist = $this.jqmData("footerexist");
79 +
80 +               if ( footerExist != undefined ) {
81 +                       o.footerExist = footerExist;
82 +               }
83                         
84                 $this.addClass( "ui-" + role ); 
85  
86                 //apply theming and markup modifications to page,header,content,footer
87                 if ( role === "header" || role === "footer" ) {
88 -                       
89                         var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme;
90  
91                         $this
92 @@ -47,20 +89,31 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
93                         rightbtn = $headeranchors.hasClass( "ui-btn-right" );
94  
95                         leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length;
96 -                       
97                         rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length;
98 +
99 +                       // set default userControl value
100 +                       if ( o.footerUserControl ) {
101 +                               $.mobile.page.prototype.options.footerUserControl = "true";
102 +                       }
103                         
104                         // Auto-add back btn on pages beyond first view
105 +                       // create backbtn in case footer exist
106                         if ( o.addBackBtn && 
107 -                               role === "header" &&
108 -                               $( ".ui-page" ).length > 1 &&
109 +                               role === "footer" &&
110 +                               o.footerExist &&
111                                 $this.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) &&
112                                 !leftbtn ) {
113  
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 )
118                                         .prependTo( $this );                            
119 +
120 +
121 +                               backBtn.bind( "vclick", function( event ) {
122 +                                       window.history.back();
123 +                                       return false;
124 +                               });
125                         }
126  
127                         // Page title
128 @@ -80,8 +133,38 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
129  
130                         // Add ARIA role
131                         $this.attr( "role", "main" );
132 +
133 +                       /* Add default footer to add backbtn */
134 +                       thisTheme = "s";
135 +
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')");
142 +
143 +                               if ( footer.length != 0 ) {
144 +                                       if ( !footer.find("jqmData(role='navbar')").is("jqmData(style='tabbar')") ) {
145 +                                               backBtn.appendTo( footer );
146 +                                       }
147 +                               } else {
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 );
152 +                                       }
153 +                               }
154 +
155 +                               if ( backBtn ) {
156 +                                       backBtn.bind( "vclick", function( event ) {
157 +                                               window.history.back();
158 +                                               return false;
159 +                                       });
160 +                               }
161 +                       }
162                 }
163         });
164  });
165  
166 -})( jQuery );
167 \ No newline at end of file
168 +})( jQuery );
169 -- 
170 1.7.5.4
171