1010 *
1111 * Licensed under MIT
1212 *
13- * Released on: April 6 , 2014
13+ * Released on: April 11 , 2014
1414*/
1515( function ( ) {
1616
9797 app . addView = function ( viewSelector , viewParams ) {
9898 if ( ! viewSelector ) return ;
9999 var container = $ ( viewSelector ) [ 0 ] ;
100+ var startUrl = container . getAttribute ( 'data-url' ) || viewParams . startUrl ;
100101 var view = {
101102 container : container ,
102103 selector : viewSelector ,
103104 params : viewParams || { } ,
104105 history : [ ] ,
105106 contentCache : { } ,
106- url : '' ,
107+ url : startUrl || '' ,
107108 pagesContainer : $ ( '.pages' , container ) [ 0 ] ,
108109 main : $ ( container ) . hasClass ( 'view-main' ) ,
109110 loadContent : function ( content ) {
130131 } ;
131132 // Store to history main view's url
132133 if ( view . main ) {
133- view . url = document . location . href ;
134+ view . url = startUrl || document . location . href ;
135+ view . history . push ( view . url ) ;
136+ }
137+ else if ( startUrl ) {
134138 view . history . push ( view . url ) ;
135139 }
136140 // Store View in element for easy access
489493 if ( app . params . onPageBeforeInit ) {
490494 app . params . onPageBeforeInit ( pageData ) ;
491495 }
492- if ( view . params . onPageBeforeInit ) {
496+ if ( view && view . params . onPageBeforeInit ) {
493497 view . params . onPageBeforeInit ( pageData ) ;
494498 }
495499 $ ( document ) . trigger ( 'pageBeforeInit' , { page : pageData } ) ;
498502 if ( app . params . onPageInit ) {
499503 app . params . onPageInit ( pageData ) ;
500504 }
501- if ( view . params . onPageInit ) {
505+ if ( view && view . params . onPageInit ) {
502506 view . params . onPageInit ( pageData ) ;
503507 }
504508 $ ( document ) . trigger ( 'pageInit' , { page : pageData } ) ;
527531
528532 }
529533 if ( callback === 'before' ) {
534+ // Add data-page on view
535+ $ ( view . container ) . attr ( 'data-page' , pageData . name ) ;
536+
530537 // Hide/show navbar dynamically
531538 if ( newPage . hasClass ( 'no-navbar' ) && ! oldPage . hasClass ( 'no-navbar' ) ) {
532539 view . hideNavbar ( ) ;
11221129 app . openModal ( modal ) ;
11231130 return modal [ 0 ] ;
11241131 } ;
1125- app . popover = function ( modal , target ) {
1132+ app . popover = function ( modal , target , removeOnClose ) {
1133+ if ( typeof removeOnClose === 'undefined' ) removeOnClose = true ;
1134+ if ( typeof modal === 'string' && modal . indexOf ( '<' ) >= 0 ) {
1135+ var _modal = document . createElement ( 'div' ) ;
1136+ _modal . innerHTML = modal ;
1137+ if ( _modal . childNodes . length > 0 ) {
1138+ modal = _modal . childNodes [ 0 ] ;
1139+ if ( removeOnClose ) modal . classList . add ( 'remove-on-close' ) ;
1140+ $ ( 'body' ) . append ( modal ) ;
1141+ }
1142+ else return false ; //nothing found
1143+ }
11261144 modal = $ ( modal ) ;
1145+ console . log ( target ) ;
11271146 target = $ ( target ) ;
11281147 if ( modal . length === 0 || target . length === 0 ) return false ;
1129-
1148+ if ( modal . find ( '.popover-angle' ) . length === 0 ) {
1149+ modal . append ( '<div class="popover-angle"></div>' ) ;
1150+ }
11301151 modal . show ( ) ;
11311152
11321153 function sizePopover ( ) {
12141235 app . openModal ( modal ) ;
12151236 return modal [ 0 ] ;
12161237 } ;
1217- app . popup = function ( modal ) {
1238+ app . popup = function ( modal , removeOnClose ) {
1239+ if ( typeof removeOnClose === 'undefined' ) removeOnClose = true ;
1240+ if ( typeof modal === 'string' && modal . indexOf ( '<' ) >= 0 ) {
1241+ var _modal = document . createElement ( 'div' ) ;
1242+ _modal . innerHTML = modal ;
1243+ if ( _modal . childNodes . length > 0 ) {
1244+ modal = _modal . childNodes [ 0 ] ;
1245+ if ( removeOnClose ) modal . classList . add ( 'remove-on-close' ) ;
1246+ $ ( 'body' ) . append ( modal ) ;
1247+ }
1248+ else return false ; //nothing found
1249+ }
12181250 modal = $ ( modal ) ;
12191251 if ( modal . length === 0 ) return false ;
12201252 modal . show ( ) ;
12521284 modal . trigger ( 'close' ) ;
12531285 var isPopover = modal . hasClass ( 'popover' ) ;
12541286 var isPopup = modal . hasClass ( 'popup' ) ;
1287+ var removeOnClose = modal . hasClass ( 'remove-on-close' ) ;
12551288 if ( ! isPopover ) {
12561289 modal . removeClass ( 'modal-in' ) . addClass ( 'modal-out' ) . transitionEnd ( function ( e ) {
12571290 modal . trigger ( 'closed' ) ;
12581291 if ( ! isPopup ) modal . remove ( ) ;
12591292 if ( isPopup ) modal . removeClass ( 'modal-out' ) . hide ( ) ;
1293+ if ( removeOnClose ) modal . remove ( ) ;
12601294 } ) ;
12611295 }
12621296 else {
12631297 modal . removeClass ( 'modal-in modal-out' ) . trigger ( 'closed' ) . hide ( ) ;
1298+ if ( removeOnClose ) modal . remove ( ) ;
12641299 }
12651300 return true ;
12661301 } ;
17731808 }
17741809 else {
17751810 view = clicked . parents ( '.view' ) [ 0 ] && clicked . parents ( '.view' ) [ 0 ] . f7View ;
1811+ if ( view && view . params . linksView ) {
1812+ view = $ ( view . params . linksView ) [ 0 ] . f7View ;
1813+ }
17761814 }
17771815 if ( ! view ) {
17781816 for ( var i = 0 ; i < app . views . length ; i ++ ) {
18291867 device . os = 'ios' ;
18301868 }
18311869 // iOS
1832- if ( iphone && ! ipod ) device . osVersion = iphone [ 2 ] . replace ( / _ / g, '.' ) ;
1833- if ( ipad ) device . osVersion = ipad [ 2 ] . replace ( / _ / g, '.' ) ;
1834- if ( ipod ) device . osVersion = ipod [ 3 ] ? ipod [ 3 ] . replace ( / _ / g, '.' ) : null ;
1870+ device . iphone = false ;
1871+ device . ipad = false ;
1872+ if ( iphone && ! ipod ) {
1873+ device . osVersion = iphone [ 2 ] . replace ( / _ / g, '.' ) ;
1874+ device . iphone = true ;
1875+ }
1876+ if ( ipad ) {
1877+ device . osVersion = ipad [ 2 ] . replace ( / _ / g, '.' ) ;
1878+ device . ipad = true ;
1879+ }
1880+ if ( ipod ) {
1881+ device . osVersion = ipod [ 3 ] ? ipod [ 3 ] . replace ( / _ / g, '.' ) : null ;
1882+ device . iphone = true ;
1883+ }
18351884
18361885 // Webview
18371886 device . webview = ( iphone || ipad || ipod ) && ua . match ( / .* A p p l e W e b K i t (? ! .* S a f a r i ) / i) ;
19021951 if ( app . initPullToRefresh && app . params . pullToRefresh ) app . initPullToRefresh ( ) ;
19031952 // Init each page callbacks
19041953 $ ( '.page' ) . each ( function ( ) {
1905- app . initPage ( this ) ;
1954+ var pageContainer = $ ( this ) ;
1955+ var viewContainer = pageContainer . parents ( '.view' ) ;
1956+ var view = viewContainer [ 0 ] . f7View || false ;
1957+ var url = view && view . url ? view . url : false ;
1958+ if ( viewContainer ) {
1959+ viewContainer . attr ( 'data-page' , pageContainer . attr ( 'data-page' ) || undefined ) ;
1960+ }
1961+ app . pageInitCallback ( view , this , url , 'center' ) ;
19061962 } ) ;
19071963 // Init resize events
19081964 if ( app . initResize ) app . initResize ( ) ;
24262482 return ! ! ( ( 'ontouchstart' in window ) || window . DocumentTouch && document instanceof DocumentTouch ) ;
24272483 } ) ( ) ;
24282484 $ . fn = Dom7 . prototype ;
2485+ // Export Selectors engine to global Framework7
2486+ Framework7 . $ = $ ;
24292487} ) ( ) ;
0 commit comments