Tizen 2.1 base
[platform/framework/web/web-ui-fw.git] / libs / patch / 0006-JQM-Add-back-button-into-header-footer.patch
1 From 259750f02a678feeb3ce1da00c8af596ab584303 Mon Sep 17 00:00:00 2001
2 From: Minkyu Kang <mk7.kang@samsung.com>
3 Date: Thu, 16 Feb 2012 18:01:41 +0900
4 Subject: [PATCH 2/2] JQM: Add back button into header/footer
5
6 ---
7  .../js/jquery.mobile.page.sections.js              |  105 +++++++++++++++++---
8  1 files changed, 91 insertions(+), 14 deletions(-)
9
10 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
11 index 2317c0c..9c81ac6 100644
12 --- a/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js
13 +++ b/libs/js/jquery-mobile-1.0.1pre/js/jquery.mobile.page.sections.js
14 @@ -1,5 +1,34 @@
15 -/*
16 -* This plugin handles theming and layout of headers, footers, and content areas
17 +/**
18 + * Page can be created using the calendarpicker() method or by adding a
19 + * data-role="page" attribute to an element.
20 + *
21 + * Page has 3 main sub element. Header, Footer, Content
22 + * 3 sub element can be created using <div> element
23 + *
24 + * Attribute:
25 + *
26 + *    data-back-Btn-Text : determine which text is displayed in back button
27 + *    data-add-Back-Btn : Defines if header/footer has back button or not(default "false")
28 + *    data-back-Btn-Theme : defines back button's theme
29 + *    data-header-Theme = defines header <div>'s theme
30 + *    data-footer-Theme = defines footer <div>'s theme
31 + *    data-content-Theme = defines content <div>'s theme
32 + *    data-footer-Exist =  defines to show default footer or not in each page (SLP default true)
33 + *    data-footer-User-Control-Theme = defines to show default footer in whole page(SLP default false. if true, all document do not has footer)
34 + *
35 + * Examples:
36 + * 
37 + *     HTML markup for creating Page:
38 + *     <div data-role="page">
39 + *
40 + *     How to show back button
41 + *     <div data-role="page" id="no-contents-0" data-add-back-btn="true">
42 + *
43 + *     How to  remove footer of specific page
44 + *     <div data-role="page" id="no-contents-0" data-footer-Exist="false">
45 + *
46 + *     How to  remove footer of whole page
47 + *     <div data-role="page" id="no-contents-0" data-footer-User-Control="true">
48  */
49  
50  (function( $, undefined ) {
51 @@ -10,29 +39,36 @@ $.mobile.page.prototype.options.backBtnTheme = null;
52  $.mobile.page.prototype.options.headerTheme  = "a";
53  $.mobile.page.prototype.options.footerTheme  = "a";
54  $.mobile.page.prototype.options.contentTheme = null;
55 +$.mobile.page.prototype.options.footerExist = true; /* SLP Default Footer : Jinhyuk */
56 +$.mobile.page.prototype.options.footerUserControl = false; /* SLP Default Footer : Jinhyuk */
57  
58  $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", function( e ) {
59         
60         var $page = $( this ),
61                 o = $page.data( "page" ).options,
62 -               pageRole = $page.jqmData( "role" ),
63                 pageTheme = o.theme;
64         
65         $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", this ).each(function() {
66                 var $this = $( this ),
67                         role = $this.jqmData( "role" ),
68                         theme = $this.jqmData( "theme" ),
69 -                       contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ),
70 +                       contentTheme = theme || o.contentTheme || pageTheme,
71                         $headeranchors,
72                         leftbtn,
73                         rightbtn,
74 -                       backBtn;
75 +                       normalFooter, /* SLP Default Footer : Jinhyuk */
76 +                       backBtn,
77 +                       footerExist = $this.jqmData("footerexist");  /* Footer on / off option : Wongi */
78 +               
79 +               if ( footerExist != undefined && (footerExist == true || footerExist == false) ){
80 +                       /*$.mobile.page.prototype.options.footerExist = footerExist;*/
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 +83,29 @@ $( ":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 _ SLP
100 +                       if( o.footerUserControl )
101 +                               $.mobile.page.prototype.options.footerUserControl = "true";
102                         
103                         // Auto-add back btn on pages beyond first view
104 -                       if ( o.addBackBtn && 
105 -                               role === "header" &&
106 -                               $( ".ui-page" ).length > 1 &&
107 +                       // create backbtn in case footer exist _ SLP
108 +                       if( o.addBackBtn &&
109 +                               o.footerExist &&
110 +                               ( role === "footer" ) &&
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 +                               
116 +                               backBtn = $( "<a href='#' class='ui-btn-back' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='header-back-btn'></a>" )                             
117                                         // If theme is provided, override default inheritance
118                                         .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme )
119 -                                       .prependTo( $this );                            
120 +                                       .prependTo( $this );
121 +
122 +                               backBtn.bind( "vclick", function( event ) {
123 +                                       window.history.back();
124 +                                       return false;
125 +                               });
126                         }
127  
128                         // Page title
129 @@ -72,6 +117,10 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
130                                         "role": "heading",
131                                         "aria-level": "1"
132                                 });
133 +                       //SLP -- start
134 +                       // prevent winset selection for header & footer
135 +//                     $this.preventDefaultBehaviour();
136 +                       //SLP -- end
137  
138                 } else if ( role === "content" ) {
139                         if ( contentTheme ) {
140 @@ -80,8 +129,36 @@ $( ":jqmData(role='page'), :jqmData(role='dialog')" ).live( "pagecreate", functi
141  
142                         // Add ARIA role
143                         $this.attr( "role", "main" );
144 +
145 +                       /* Add default footer to add backbtn */
146 +                       // set backbtn in case footer is not exist _ SLP
147 +                       thisTheme = "s";
148 +                       if( o.footerExist ){
149 +                               backBtn = $( "<a href='#' class='ui-btn-back' data-"+ $.mobile.ns +"rel='back' data-"+ $.mobile.ns +"icon='header-back-btn'></a>" )
150 +                                       .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme );
151 +                               var footer = $page.find( "div:jqmData(role='footer')" );                                        
152 +
153 +                               if( footer.length != 0 ){
154 +                                       // add backbtn in case toolbar _ SLP
155 +                                       if( !footer.find("jqmData(role='navbar')").is("jqmData(style='tabbar')") ){
156 +                                               backBtn.appendTo( footer );     
157 +                                       }
158 +                               } else{                                 
159 +                                       if( !$.mobile.page.prototype.options.footerUserControl ) {
160 +                                               normalFooter = $( "<div data-role='footer' class='ui-footer ui-bar-s ui-footer-fixed fade ui-fixed-overlay' data-position='fixed'></div>" )
161 +                                               .insertAfter( $page.find( ".ui-content" ) );
162 +                                               backBtn.appendTo( normalFooter );                       
163 +                                       }
164 +                               }
165 +                               if( backBtn ){
166 +                                       backBtn.bind( "vclick", function( event ) {
167 +                                               window.history.back();
168 +                                               return false;
169 +                                       });
170 +                               }
171 +                       }
172                 }
173         });
174  });
175  
176 -})( jQuery );
177 \ No newline at end of file
178 +})( jQuery );
179 -- 
180 1.7.5.4
181