3a9eb52851a7b027d5b7289a0f92250e55f1268f
[framework/web/web-ui-fw.git] / src / widgets / barlayout / js / jquery.mobile.tizen.barlayout.js
1 (function( $, undefined ) {
2
3         $.widget( "mobile.barlayout", $.mobile.widget, {
4                 options: {
5                         addBackBtn: false ,
6                         backBtnText: "Back",
7
8                         initSelector: ":jqmData(role='header'), :jqmData(role='footer')"
9                         },
10                 _create: function() {
11                         var self = this;
12
13                         /* this call api will be moved to jquery.mobile.page.section.js patch */
14                         /* call _generateFooter in header(just 1 time in first step) because to calculate another layout width footer/header */
15                         /* skip below step to attach bind/addclass only 1 time */
16                         self._generateFooter();
17                         self._addBackbutton();
18                         self._disableSelection();
19                         self._disableContext();
20                 },
21
22                 /* Make dummy footer
23                 *  because minimum fixed bar needs to attach back button
24                 *  check footer exist on current page, then check footer-Exist option check */
25                 _generateFooter: function(){
26                         var self = this,
27                                 $el = self.element,
28                                 $elPage = $el.closest( ".ui-page" ),
29                                 dummyFooter;
30
31                                 if ( $elPage.children(":jqmData(role='footer')").length == 0 && $elPage.data().page.options.footerExist != false ) {
32                                         dummyFooter = $( "<div data-role='footer' class='ui-footer ui-bar-s ui-footer-fixed fade ui-fixed-overlay' data-position='fixed'></div>" )
33                                                 .insertAfter( $elPage.find( ".ui-content" ) );
34                         }
35                 },
36
37                 _addBackbutton: function( target, status ) {
38                         // need to add parameter target wherels this requert occurs header/footer
39                         var self = this,
40                                 $el = self.element,
41                                 $elHeader = $( this.element ).jqmData( "role" )=="header" ? self.element : $el.siblings( ":jqmData(role='header')" ),
42                                 $elFooter = $( this.element ).jqmData( "role" )=="footer" ? self.element : $el.siblings( ":jqmData(role='footer')" ),
43                                 $elPage = $el.closest( ".ui-page" ),
44                                 backBtn,
45                                 attachElement = $elFooter,
46                                 o = $elPage.data( "page" ).options;
47
48                                 /* Back button skip case :
49                                 * 1. tabbar
50                                 * 2. footer does not exit
51                                 * 3. user define data-add-Back-Btn = "false"
52                                 */
53                                 if ( status != "external" ) {
54                                         if ( $elFooter.children( ":jqmData(role='controlbar')" ).jqmData( "style" ) == "tabbar" || $elPage.data().page.options.footerExist == false || $elPage.data().page.options.addBackBtn == "none"  ) {
55                                                 return true;
56                                         }
57                                 }
58
59                                 $elPage.data().page.options.addBackBtn == "header"?     attachElement = $elHeader : attachElement = $elFooter;
60
61                                 backBtn = $( "<a href='#' class='ui-btn-back' data-"+ $.mobile.ns +"rel='back'></a>" )
62                                                 .buttonMarkup( {icon: "header-back-btn", theme : "s"} );
63
64                                 if ( status == "external" ) {
65                                         if ( $el.is(".ui-page") ) {
66                                                 $elHeader = $el.find( ":jqmData(role='header')" );
67                                                 $elFooter = $el.find( ":jqmData(role='footer')" );
68                                                 target == "header" ? attachElement = $elHeader : attachElement = $elFooter;
69                                         } else {
70                                                 attachElement = $el;
71                                         }
72                                         if ( attachElement.find(".ui-btn-back").length == 0 ) {
73                                                 backBtn.prependTo( attachElement );
74                                         }
75                                 }
76
77                                 if ( $elPage.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) ) {
78                                         if ( attachElement.find(".ui-btn-back").length == 0) {
79                                                 backBtn.prependTo( attachElement );
80                                         }
81                                 }
82
83 /* jQM 1.1.0 do not need this code
84 * navigation.js control whote back button  */
85 /*                              backBtn.bind( "vclick", function( event ) {
86                                         window.history.back();
87                                 });*/
88                 },
89
90                 _disableSelection : function() {
91                         var self = this,
92                                 $el = self.element,
93                                 $elHeader = $( this.element ).jqmData( "role" )=="header" ? self.element : $el.siblings( ":jqmData(role='header')" ),
94                                 $elFooter = $( this.element ).jqmData( "role" )=="footer" ? self.element : $el.siblings( ":jqmData(role='footer')" );
95
96                         $.mobile.tizen.disableSelection( $elHeader );
97                         $.mobile.tizen.disableSelection( $elFooter );
98                 },
99
100                 _disableContext : function() {
101                         var self = this,
102                                 $el = self.element,
103                                 $elHeader = $( this.element ).jqmData( "role" )=="header" ? self.element : $el.siblings( ":jqmData(role='header')" ),
104                                 $elFooter = $( this.element ).jqmData( "role" )=="footer" ? self.element : $el.siblings( ":jqmData(role='footer')" );
105
106                         $.mobile.tizen.disableContextMenu( $elHeader );
107                         $.mobile.tizen.disableContextMenu( $elFooter );
108                 },
109
110                 addBackBtn : function(target) {
111                         this._addBackbutton( target, "external" );
112                 },
113
114
115                 show: function(){
116                         var self = $( this.element );
117                         self.show();
118                         self.siblings( ".ui-content" ).pagelayout( "updatePageLayout" );
119                 },
120
121                 hide: function(){
122                         var self = $( this.element );
123                         self.hide();
124                         self.siblings( ".ui-content" ).pagelayout( "updatePageLayout" );
125                 },
126
127         });
128         $( document ).bind("pagecreate", function( e ){
129                 $.mobile.barlayout.prototype.enhanceWithin( e.target );
130         });
131 })( jQuery );