1 ( function ( $, undefined ) {
3 $.widget( "mobile.barlayout", $.mobile.widget, {
7 initSelector: ":jqmData(role='header'), :jqmData(role='footer')"
11 /* this call api will be moved to jquery.mobile.page.section.js patch */
12 /* call _generateFooter in header(just 1 time in first step) because to calculate another layout width footer/header */
13 /* skip below step to attach bind/addclass only 1 time */
14 self._generateFooter();
15 self._addBackbutton();
16 self._disableSelection();
20 * because minimum fixed bar needs to attach back button
21 * check footer exist on current page, then check footer-Exist option check */
22 _generateFooter: function () {
25 $elPage = $el.closest( ".ui-page" ),
28 if ( $elPage.children(":jqmData(role='footer')").length == 0 && $elPage.data().page.options.footerExist != false ) {
29 dummyFooter = $( "<div data-role='footer' class='ui-footer ui-bar-s ui-footer-fixed fade ui-fixed-overlay' data-position='fixed'></div>" )
30 .insertAfter( $elPage.find( ".ui-content" ) );
34 _addBackbutton: function ( target, status ) {
35 // need to add parameter target wherels this requert occurs header/footer
38 $elHeader = $el.jqmData( "role" ) === "header" ? $el : $el.siblings( ":jqmData(role='header')" ),
39 $elFooter = $el.jqmData( "role" ) === "footer" ? $el : $el.siblings( ":jqmData(role='footer')" ),
40 $elPage = $el.closest( ".ui-page" ),
42 attachElement = $elFooter,
43 o = $elPage.data( "page" ).options;
45 /* Back button skip case :
46 * 1. footer does not exist and addBackBtn is set to "footer"
47 * 2. user define data-add-Back-Btn = "false"
49 if ( status != "external" ) {
50 if ( $elPage.data().page.options.addBackBtn == "none" || ( $elPage.data().page.options.addBackBtn == "footer" && $elPage.data().page.options.footerExist == false ) ) {
55 attachElement = ( $elPage.data().page.options.addBackBtn === "header" ) ? $elHeader : $elFooter;
57 backBtn = $( "<a href='#' class='ui-btn-back' data-" + $.mobile.ns + "rel='back'></a>" )
58 .buttonMarkup( {icon: "header-back-btn", theme : "s"} );
60 if ( status == "external" ) {
61 if ( $el.is(".ui-page") ) {
62 $elHeader = $el.find( ":jqmData(role='header')" );
63 $elFooter = $el.find( ":jqmData(role='footer')" );
64 attachElement = ( target === "header" ) ? $elHeader : $elFooter;
68 if ( attachElement.find(".ui-btn-back").length == 0 ) {
69 backBtn.prependTo( attachElement );
73 if ( $elPage.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) ) {
74 if ( attachElement.find(".ui-btn-back").length == 0) {
75 backBtn.prependTo( attachElement );
79 /* jQM 1.1.0 does not need this code.
80 navigation.js control whole back buttons. */
82 backBtn.bind( "vclick", function( event ) {
83 window.history.back();
88 _disableSelection : function () {
91 $elHeader = $el.jqmData( "role" ) === "header" ? $el : $el.siblings( ":jqmData(role='header')" ),
92 $elFooter = $el.jqmData( "role" ) === "footer" ? $el : $el.siblings( ":jqmData(role='footer')" );
95 $.mobile.tizen.disableSelection( $elHeader );
96 $.mobile.tizen.disableSelection( $elFooter );
98 // disable context menu
99 $.mobile.tizen.disableContextMenu( $elHeader );
100 $.mobile.tizen.disableContextMenu( $elFooter );
103 addBackBtn : function ( target ) {
104 this._addBackbutton( target, "external" );
109 var self = $( this.element );
111 self.siblings( ".ui-content" ).pagelayout( "updatePageLayout" );
115 var self = $( this.element );
117 self.siblings( ".ui-content" ).pagelayout( "updatePageLayout" );
121 $( document ).bind("pagecreate", function ( e ) {
122 $.mobile.barlayout.prototype.enhanceWithin( e.target );