UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

833 lines (699 loc) 29.3 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _dom = _interopRequireDefault(require("../../shared/dom7")); var _utils = require("../../shared/utils"); var _getSupport = require("../../shared/get-support"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Navbar = { size: function size(el) { var app = this; var $el = (0, _dom.default)(el); if ($el.hasClass('navbars')) { $el = $el.children('.navbar').each(function (navbarEl) { app.navbar.size(navbarEl); }); return; } var $innerEl = $el.children('.navbar-inner'); if (!$innerEl.length) return; var needCenterTitle = $innerEl.hasClass('navbar-inner-centered-title') || app.params.navbar[app.theme + "CenterTitle"]; var needLeftTitle = app.theme === 'ios' && !app.params.navbar[app.theme + "CenterTitle"]; if (!needCenterTitle && !needLeftTitle) return; if ($el.hasClass('stacked') || $el.parents('.stacked').length > 0 || $el.parents('.tab:not(.tab-active)').length > 0 || $el.parents('.popup:not(.modal-in)').length > 0) { return; } if (app.theme !== 'ios' && app.params.navbar[app.theme + "CenterTitle"]) { $innerEl.addClass('navbar-inner-centered-title'); } if (app.theme === 'ios' && !app.params.navbar.iosCenterTitle) { $innerEl.addClass('navbar-inner-left-title'); } var $viewEl = $el.parents('.view').eq(0); var left = app.rtl ? $innerEl.children('.right') : $innerEl.children('.left'); var right = app.rtl ? $innerEl.children('.left') : $innerEl.children('.right'); var title = $innerEl.children('.title'); var subnavbar = $innerEl.children('.subnavbar'); var noLeft = left.length === 0; var noRight = right.length === 0; var leftWidth = noLeft ? 0 : left.outerWidth(true); var rightWidth = noRight ? 0 : right.outerWidth(true); var titleWidth = title.outerWidth(true); var navbarStyles = $innerEl.styles(); var navbarWidth = $innerEl[0].offsetWidth; var navbarInnerWidth = navbarWidth - parseInt(navbarStyles.paddingLeft, 10) - parseInt(navbarStyles.paddingRight, 10); var isPrevious = $el.hasClass('navbar-previous'); var sliding = $innerEl.hasClass('sliding'); var router; var dynamicNavbar; if ($viewEl.length > 0 && $viewEl[0].f7View) { router = $viewEl[0].f7View.router; dynamicNavbar = router && router.dynamicNavbar; } var currLeft; var diff; if (noRight) { currLeft = navbarInnerWidth - titleWidth; } if (noLeft) { currLeft = 0; } if (!noLeft && !noRight) { currLeft = (navbarInnerWidth - rightWidth - titleWidth + leftWidth) / 2; } var requiredLeft = (navbarInnerWidth - titleWidth) / 2; if (navbarInnerWidth - leftWidth - rightWidth > titleWidth) { if (requiredLeft < leftWidth) { requiredLeft = leftWidth; } if (requiredLeft + titleWidth > navbarInnerWidth - rightWidth) { requiredLeft = navbarInnerWidth - rightWidth - titleWidth; } diff = requiredLeft - currLeft; } else { diff = 0; } // RTL inverter var inverter = app.rtl ? -1 : 1; if (dynamicNavbar && app.theme === 'ios') { if (title.hasClass('sliding') || title.length > 0 && sliding) { var titleLeftOffset = -(currLeft + diff) * inverter; var titleRightOffset = (navbarInnerWidth - currLeft - diff - titleWidth) * inverter; if (isPrevious) { if (router && router.params.iosAnimateNavbarBackIcon) { var activeNavbarBackLink = $el.parent().find('.navbar-current').children('.left.sliding').find('.back .icon ~ span'); if (activeNavbarBackLink.length > 0) { titleLeftOffset += activeNavbarBackLink[0].offsetLeft; } } } title[0].f7NavbarLeftOffset = titleLeftOffset; title[0].f7NavbarRightOffset = titleRightOffset; } if (!noLeft && (left.hasClass('sliding') || sliding)) { if (app.rtl) { left[0].f7NavbarLeftOffset = -(navbarInnerWidth - left[0].offsetWidth) / 2 * inverter; left[0].f7NavbarRightOffset = leftWidth * inverter; } else { left[0].f7NavbarLeftOffset = -leftWidth; left[0].f7NavbarRightOffset = (navbarInnerWidth - left[0].offsetWidth) / 2; if (router && router.params.iosAnimateNavbarBackIcon && left.find('.back .icon').length > 0) { if (left.find('.back .icon ~ span').length) { var leftOffset = left[0].f7NavbarLeftOffset; var rightOffset = left[0].f7NavbarRightOffset; left[0].f7NavbarLeftOffset = 0; left[0].f7NavbarRightOffset = 0; left.find('.back .icon ~ span')[0].f7NavbarLeftOffset = leftOffset; left.find('.back .icon ~ span')[0].f7NavbarRightOffset = rightOffset - left.find('.back .icon')[0].offsetWidth; } } } } if (!noRight && (right.hasClass('sliding') || sliding)) { if (app.rtl) { right[0].f7NavbarLeftOffset = -rightWidth * inverter; right[0].f7NavbarRightOffset = (navbarInnerWidth - right[0].offsetWidth) / 2 * inverter; } else { right[0].f7NavbarLeftOffset = -(navbarInnerWidth - right[0].offsetWidth) / 2; right[0].f7NavbarRightOffset = rightWidth; } } if (subnavbar.length && (subnavbar.hasClass('sliding') || sliding)) { subnavbar[0].f7NavbarLeftOffset = app.rtl ? subnavbar[0].offsetWidth : -subnavbar[0].offsetWidth; subnavbar[0].f7NavbarRightOffset = -subnavbar[0].f7NavbarLeftOffset; } } // Center title if (needCenterTitle) { var titleLeft = diff; if (app.rtl && noLeft && noRight && title.length > 0) titleLeft = -titleLeft; title.css({ left: titleLeft + "px" }); } }, hide: function hide(el, animate, hideStatusbar, hideOnlyCurrent) { if (animate === void 0) { animate = true; } if (hideStatusbar === void 0) { hideStatusbar = false; } if (hideOnlyCurrent === void 0) { hideOnlyCurrent = false; } var app = this; var $el = (0, _dom.default)(el); var isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent; if (isDynamic) $el = $el.parents('.navbars'); if (!$el.length) return; if ($el.hasClass('navbar-hidden')) return; var className = "navbar-hidden" + (animate ? ' navbar-transitioning' : ''); var currentIsLarge = isDynamic ? $el.find('.navbar-current .title-large').length : $el.find('.title-large').length; if (currentIsLarge) { className += ' navbar-large-hidden'; } if (hideStatusbar) { className += ' navbar-hidden-statusbar'; } $el.transitionEnd(function () { $el.removeClass('navbar-transitioning'); }); $el.addClass(className); if (isDynamic) { $el.children('.navbar').each(function (subEl) { (0, _dom.default)(subEl).trigger('navbar:hide'); app.emit('navbarHide', subEl); }); } else { $el.trigger('navbar:hide'); app.emit('navbarHide', $el[0]); } }, show: function show(el, animate, hideOnlyCurrent) { if (el === void 0) { el = '.navbar-hidden'; } if (animate === void 0) { animate = true; } if (hideOnlyCurrent === void 0) { hideOnlyCurrent = false; } var app = this; var $el = (0, _dom.default)(el); var isDynamic = $el.hasClass('navbar') && $el.parent('.navbars').length && !hideOnlyCurrent; if (isDynamic) $el = $el.parents('.navbars'); if (!$el.length) return; if (!$el.hasClass('navbar-hidden')) return; if (animate) { $el.addClass('navbar-transitioning'); $el.transitionEnd(function () { $el.removeClass('navbar-transitioning'); }); } $el.removeClass('navbar-hidden navbar-large-hidden navbar-hidden-statusbar'); if (isDynamic) { $el.children('.navbar').each(function (subEl) { (0, _dom.default)(subEl).trigger('navbar:show'); app.emit('navbarShow', subEl); }); } else { $el.trigger('navbar:show'); app.emit('navbarShow', $el[0]); } }, getElByPage: function getElByPage(page) { var $pageEl; var $navbarEl; var pageData; if (page.$navbarEl || page.$el) { pageData = page; $pageEl = page.$el; } else { $pageEl = (0, _dom.default)(page); if ($pageEl.length > 0) pageData = $pageEl[0].f7Page; } if (pageData && pageData.$navbarEl && pageData.$navbarEl.length > 0) { $navbarEl = pageData.$navbarEl; } else if ($pageEl) { $navbarEl = $pageEl.children('.navbar'); } if (!$navbarEl || $navbarEl && $navbarEl.length === 0) return undefined; return $navbarEl[0]; }, getPageByEl: function getPageByEl(navbarEl) { var $navbarEl = (0, _dom.default)(navbarEl); if ($navbarEl.parents('.page').length) { return $navbarEl.parents('.page')[0]; } var pageEl; $navbarEl.parents('.view').find('.page').each(function (el) { if (el && el.f7Page && el.f7Page.navbarEl && $navbarEl[0] === el.f7Page.navbarEl) { pageEl = el; } }); return pageEl; }, collapseLargeTitle: function collapseLargeTitle(navbarEl) { var app = this; var $navbarEl = (0, _dom.default)(navbarEl); if ($navbarEl.hasClass('navbars')) { $navbarEl = $navbarEl.find('.navbar'); if ($navbarEl.length > 1) { $navbarEl = (0, _dom.default)(navbarEl).find('.navbar-large.navbar-current'); } if ($navbarEl.length > 1 || !$navbarEl.length) { return; } } var $pageEl = (0, _dom.default)(app.navbar.getPageByEl($navbarEl)); $navbarEl.addClass('navbar-large-collapsed'); $pageEl.eq(0).addClass('page-with-navbar-large-collapsed').trigger('page:navbarlargecollapsed'); app.emit('pageNavbarLargeCollapsed', $pageEl[0]); $navbarEl.trigger('navbar:collapse'); app.emit('navbarCollapse', $navbarEl[0]); }, expandLargeTitle: function expandLargeTitle(navbarEl) { var app = this; var $navbarEl = (0, _dom.default)(navbarEl); if ($navbarEl.hasClass('navbars')) { $navbarEl = $navbarEl.find('.navbar-large'); if ($navbarEl.length > 1) { $navbarEl = (0, _dom.default)(navbarEl).find('.navbar-large.navbar-current'); } if ($navbarEl.length > 1 || !$navbarEl.length) { return; } } var $pageEl = (0, _dom.default)(app.navbar.getPageByEl($navbarEl)); $navbarEl.removeClass('navbar-large-collapsed'); $pageEl.eq(0).removeClass('page-with-navbar-large-collapsed').trigger('page:navbarlargeexpanded'); app.emit('pageNavbarLargeExpanded', $pageEl[0]); $navbarEl.trigger('navbar:expand'); app.emit('navbarExpand', $navbarEl[0]); }, toggleLargeTitle: function toggleLargeTitle(navbarEl) { var app = this; var $navbarEl = (0, _dom.default)(navbarEl); if ($navbarEl.hasClass('navbars')) { $navbarEl = $navbarEl.find('.navbar-large'); if ($navbarEl.length > 1) { $navbarEl = (0, _dom.default)(navbarEl).find('.navbar-large.navbar-current'); } if ($navbarEl.length > 1 || !$navbarEl.length) { return; } } if ($navbarEl.hasClass('navbar-large-collapsed')) { app.navbar.expandLargeTitle($navbarEl); } else { app.navbar.collapseLargeTitle($navbarEl); } }, initNavbarOnScroll: function initNavbarOnScroll(pageEl, navbarEl, needHide, needCollapse, needTransparent) { var app = this; var support = (0, _getSupport.getSupport)(); var $pageEl = (0, _dom.default)(pageEl); var $navbarEl = (0, _dom.default)(navbarEl); var $titleLargeEl = $navbarEl.find('.title-large'); var isLarge = $titleLargeEl.length || $navbarEl.hasClass('.navbar-large'); var navbarHideHeight = 44; var snapPageScrollToLargeTitle = app.params.navbar.snapPageScrollToLargeTitle; var snapPageScrollToTransparentNavbar = app.params.navbar.snapPageScrollToTransparentNavbar; var previousScrollTop; var currentScrollTop; var scrollHeight; var offsetHeight; var reachEnd; var action; var navbarHidden; var navbarCollapsed; var navbarTitleLargeHeight; var navbarOffsetHeight; if (needCollapse || needHide && isLarge) { navbarTitleLargeHeight = $navbarEl.css('--f7-navbar-large-title-height'); if (navbarTitleLargeHeight && navbarTitleLargeHeight.indexOf('px') >= 0) { navbarTitleLargeHeight = parseInt(navbarTitleLargeHeight, 10); if (Number.isNaN(navbarTitleLargeHeight) && $titleLargeEl.length) { navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight; } else if (Number.isNaN(navbarTitleLargeHeight)) { if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 48;else if (app.theme === 'aurora') navbarTitleLargeHeight = 38; } } else if ($titleLargeEl.length) { navbarTitleLargeHeight = $titleLargeEl[0].offsetHeight; } else { // eslint-disable-next-line if (app.theme === 'ios') navbarTitleLargeHeight = 52;else if (app.theme === 'md') navbarTitleLargeHeight = 48;else if (app.theme === 'aurora') navbarTitleLargeHeight = 38; } } if (needHide && isLarge) { navbarHideHeight += navbarTitleLargeHeight; } var scrollChanged; var scrollContent; var scrollTimeoutId; var touchEndTimeoutId; var touchSnapTimeout = 70; var desktopSnapTimeout = 300; function calcScrollableDistance() { $pageEl.find('.page-content').each(function (pageContentEl) { pageContentEl.f7ScrollableDistance = pageContentEl.scrollHeight - pageContentEl.offsetHeight; }); } function snapLargeNavbar() { var inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled'); if (inSearchbarExpanded) return; if (!scrollContent || currentScrollTop < 0) return; if (currentScrollTop >= navbarTitleLargeHeight / 2 && currentScrollTop < navbarTitleLargeHeight) { (0, _dom.default)(scrollContent).scrollTop(navbarTitleLargeHeight, 100); } else if (currentScrollTop < navbarTitleLargeHeight) { (0, _dom.default)(scrollContent).scrollTop(0, 200); } } function snapTransparentNavbar() { var inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled'); if (inSearchbarExpanded) return; if (!scrollContent || currentScrollTop < 0) return; if (currentScrollTop >= navbarOffsetHeight / 2 && currentScrollTop < navbarOffsetHeight) { (0, _dom.default)(scrollContent).scrollTop(navbarOffsetHeight, 100); } else if (currentScrollTop < navbarOffsetHeight) { (0, _dom.default)(scrollContent).scrollTop(0, 200); } } function handleNavbarTransparent() { var isHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden'); var inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled'); if (inSearchbarExpanded || isHidden) return; if (!navbarOffsetHeight) { navbarOffsetHeight = navbarEl.offsetHeight; } var opacity = currentScrollTop / navbarOffsetHeight; var notTransparent = $navbarEl.hasClass('navbar-transparent-visible'); opacity = Math.max(Math.min(opacity, 1), 0); if (notTransparent && opacity === 1 || !notTransparent && opacity === 0) { $navbarEl.find('.navbar-bg, .title').css('opacity', ''); return; } if (notTransparent && opacity === 0) { $navbarEl.trigger('navbar:transparenthide'); app.emit('navbarTransparentHide', $navbarEl[0]); $navbarEl.removeClass('navbar-transparent-visible'); $navbarEl.find('.navbar-bg, .title').css('opacity', ''); return; } if (!notTransparent && opacity === 1) { $navbarEl.trigger('navbar:transparentshow'); app.emit('navbarTransparentShow', $navbarEl[0]); $navbarEl.addClass('navbar-transparent-visible'); $navbarEl.find('.navbar-bg, .title').css('opacity', ''); return; } $navbarEl.find('.navbar-bg, .title').css('opacity', opacity); if (snapPageScrollToTransparentNavbar) { if (!support.touch) { clearTimeout(scrollTimeoutId); scrollTimeoutId = setTimeout(function () { snapTransparentNavbar(); }, desktopSnapTimeout); } else if (touchEndTimeoutId) { clearTimeout(touchEndTimeoutId); touchEndTimeoutId = null; touchEndTimeoutId = setTimeout(function () { snapTransparentNavbar(); clearTimeout(touchEndTimeoutId); touchEndTimeoutId = null; }, touchSnapTimeout); } } } var previousCollapseProgress = null; var collapseProgress = null; function handleLargeNavbarCollapse(pageContentEl) { var isHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden'); if (isHidden) return; var isLargeTransparent = $navbarEl.hasClass('navbar-large-transparent') || $navbarEl.hasClass('navbar-large') && $navbarEl.hasClass('navbar-transparent'); previousCollapseProgress = collapseProgress; var scrollableDistance = Math.min(navbarTitleLargeHeight, pageContentEl.f7ScrollableDistance || navbarTitleLargeHeight); collapseProgress = Math.min(Math.max(currentScrollTop / scrollableDistance, 0), 1); var previousCollapseWasInMiddle = previousCollapseProgress > 0 && previousCollapseProgress < 1; var inSearchbarExpanded = $navbarEl.hasClass('with-searchbar-expandable-enabled'); if (inSearchbarExpanded) return; navbarCollapsed = $navbarEl.hasClass('navbar-large-collapsed'); if (collapseProgress === 0 && navbarCollapsed) { app.navbar.expandLargeTitle($navbarEl[0]); } else if (collapseProgress === 1 && !navbarCollapsed) { app.navbar.collapseLargeTitle($navbarEl[0]); } if (collapseProgress === 0 && navbarCollapsed || collapseProgress === 0 && previousCollapseWasInMiddle || collapseProgress === 1 && !navbarCollapsed || collapseProgress === 1 && previousCollapseWasInMiddle) { if (app.theme === 'md') { $navbarEl.find('.navbar-inner').css('overflow', ''); } $navbarEl.find('.title').css('opacity', ''); $navbarEl.find('.title-large-text, .subnavbar').css('transform', ''); if (isLargeTransparent) { $navbarEl.find('.navbar-bg').css('opacity', ''); } else { $navbarEl.find('.navbar-bg').css('transform', ''); } } else if (collapseProgress > 0 && collapseProgress < 1) { if (app.theme === 'md') { $navbarEl.find('.navbar-inner').css('overflow', 'visible'); } $navbarEl.find('.title').css('opacity', collapseProgress); $navbarEl.find('.title-large-text, .subnavbar').css('transform', "translate3d(0px, " + -1 * collapseProgress * navbarTitleLargeHeight + "px, 0)"); if (isLargeTransparent) { $navbarEl.find('.navbar-bg').css('opacity', collapseProgress); } else { $navbarEl.find('.navbar-bg').css('transform', "translate3d(0px, " + -1 * collapseProgress * navbarTitleLargeHeight + "px, 0)"); } } if (snapPageScrollToLargeTitle) { if (!support.touch) { clearTimeout(scrollTimeoutId); scrollTimeoutId = setTimeout(function () { snapLargeNavbar(); }, desktopSnapTimeout); } else if (touchEndTimeoutId) { clearTimeout(touchEndTimeoutId); touchEndTimeoutId = null; touchEndTimeoutId = setTimeout(function () { snapLargeNavbar(); clearTimeout(touchEndTimeoutId); touchEndTimeoutId = null; }, touchSnapTimeout); } } } function handleTitleHideShow() { if ($pageEl.hasClass('page-with-card-opened')) return; scrollHeight = scrollContent.scrollHeight; offsetHeight = scrollContent.offsetHeight; reachEnd = currentScrollTop + offsetHeight >= scrollHeight; navbarHidden = $navbarEl.hasClass('navbar-hidden') || $navbarEl.parent('.navbars').hasClass('navbar-hidden'); if (reachEnd) { if (app.params.navbar.showOnPageScrollEnd) { action = 'show'; } } else if (previousScrollTop > currentScrollTop) { if (app.params.navbar.showOnPageScrollTop || currentScrollTop <= navbarHideHeight) { action = 'show'; } else { action = 'hide'; } } else if (currentScrollTop > navbarHideHeight) { action = 'hide'; } else { action = 'show'; } if (action === 'show' && navbarHidden) { app.navbar.show($navbarEl, true, true); navbarHidden = false; } else if (action === 'hide' && !navbarHidden) { app.navbar.hide($navbarEl, true, false, true); navbarHidden = true; } previousScrollTop = currentScrollTop; } function handleScroll(e) { scrollContent = this; if (e && e.target && e.target !== scrollContent) { return; } currentScrollTop = scrollContent.scrollTop; scrollChanged = currentScrollTop; if (needCollapse) { handleLargeNavbarCollapse(scrollContent); } else if (needTransparent) { handleNavbarTransparent(); } if ($pageEl.hasClass('page-previous')) return; if (needHide) { handleTitleHideShow(); } } function handeTouchStart() { scrollChanged = false; } function handleTouchEnd() { clearTimeout(touchEndTimeoutId); touchEndTimeoutId = null; touchEndTimeoutId = setTimeout(function () { if (scrollChanged !== false) { if (needTransparent && !needCollapse) { snapTransparentNavbar(); } else { snapLargeNavbar(); } clearTimeout(touchEndTimeoutId); touchEndTimeoutId = null; } }, touchSnapTimeout); } $pageEl.on('scroll', '.page-content', handleScroll, true); if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) { app.on('touchstart:passive', handeTouchStart); app.on('touchend:passive', handleTouchEnd); } calcScrollableDistance(); if (needCollapse || needTransparent) { $pageEl.find('.page-content').each(function (pageContentEl) { if (pageContentEl.scrollTop > 0) handleScroll.call(pageContentEl); }); } app.on('resize', calcScrollableDistance); $pageEl[0].f7DetachNavbarScrollHandlers = function f7DetachNavbarScrollHandlers() { app.off('resize', calcScrollableDistance); delete $pageEl[0].f7DetachNavbarScrollHandlers; $pageEl.off('scroll', '.page-content', handleScroll, true); if (support.touch && (needCollapse && snapPageScrollToLargeTitle || needTransparent && snapPageScrollToTransparentNavbar)) { app.off('touchstart:passive', handeTouchStart); app.off('touchend:passive', handleTouchEnd); } }; } }; var _default = { name: 'navbar', create: function create() { var app = this; (0, _utils.bindMethods)(app, { navbar: Navbar }); }, params: { navbar: { scrollTopOnTitleClick: true, iosCenterTitle: true, mdCenterTitle: false, auroraCenterTitle: true, hideOnPageScroll: false, showOnPageScrollEnd: true, showOnPageScrollTop: true, collapseLargeTitleOnScroll: true, snapPageScrollToLargeTitle: true, snapPageScrollToTransparentNavbar: true } }, on: { 'panelBreakpoint panelCollapsedBreakpoint panelResize viewResize resize viewMasterDetailBreakpoint': function onPanelResize() { var app = this; (0, _dom.default)('.navbar').each(function (navbarEl) { app.navbar.size(navbarEl); }); }, pageBeforeRemove: function pageBeforeRemove(page) { if (page.$el[0].f7DetachNavbarScrollHandlers) { page.$el[0].f7DetachNavbarScrollHandlers(); } }, pageBeforeIn: function pageBeforeIn(page) { var app = this; if (app.theme !== 'ios') return; var $navbarsEl; var view = page.$el.parents('.view')[0].f7View; var navbarEl = app.navbar.getElByPage(page); if (!navbarEl) { $navbarsEl = page.$el.parents('.view').children('.navbars'); } else { $navbarsEl = (0, _dom.default)(navbarEl).parents('.navbars'); } if (page.$el.hasClass('no-navbar') || view.router.dynamicNavbar && !navbarEl) { var animate = !!(page.pageFrom && page.router.history.length > 0); app.navbar.hide($navbarsEl, animate); } else { app.navbar.show($navbarsEl); } }, pageReinit: function pageReinit(page) { var app = this; var $navbarEl = (0, _dom.default)(app.navbar.getElByPage(page)); if (!$navbarEl || $navbarEl.length === 0) return; app.navbar.size($navbarEl); }, pageInit: function pageInit(page) { var app = this; var $navbarEl = (0, _dom.default)(app.navbar.getElByPage(page)); if (!$navbarEl || $navbarEl.length === 0) return; // Size app.navbar.size($navbarEl); // Need Collapse On Scroll var needCollapseOnScrollHandler; if ($navbarEl.find('.title-large').length > 0) { $navbarEl.addClass('navbar-large'); } if ($navbarEl.hasClass('navbar-large')) { if (app.params.navbar.collapseLargeTitleOnScroll) needCollapseOnScrollHandler = true; page.$el.addClass('page-with-navbar-large'); } // Need transparent on scroll var needTransparentOnScroll; if (!needCollapseOnScrollHandler && $navbarEl.hasClass('navbar-transparent')) { needTransparentOnScroll = true; } // Need Hide On Scroll var needHideOnScrollHandler; if (app.params.navbar.hideOnPageScroll || page.$el.find('.hide-navbar-on-scroll').length || page.$el.hasClass('hide-navbar-on-scroll') || page.$el.find('.hide-bars-on-scroll').length || page.$el.hasClass('hide-bars-on-scroll')) { if (page.$el.find('.keep-navbar-on-scroll').length || page.$el.hasClass('keep-navbar-on-scroll') || page.$el.find('.keep-bars-on-scroll').length || page.$el.hasClass('keep-bars-on-scroll')) { needHideOnScrollHandler = false; } else { needHideOnScrollHandler = true; } } if (needCollapseOnScrollHandler || needHideOnScrollHandler || needTransparentOnScroll) { app.navbar.initNavbarOnScroll(page.el, $navbarEl[0], needHideOnScrollHandler, needCollapseOnScrollHandler, needTransparentOnScroll); } }, 'panelOpen panelSwipeOpen modalOpen': function onPanelModalOpen(instance) { var app = this; instance.$el.find('.navbar:not(.navbar-previous):not(.stacked)').each(function (navbarEl) { app.navbar.size(navbarEl); }); }, tabShow: function tabShow(tabEl) { var app = this; (0, _dom.default)(tabEl).find('.navbar:not(.navbar-previous):not(.stacked)').each(function (navbarEl) { app.navbar.size(navbarEl); }); } }, clicks: { '.navbar .title': function onTitleClick($clickedEl, clickedData, e) { var app = this; if (!app.params.navbar.scrollTopOnTitleClick) return; if ((0, _dom.default)(e.target).closest('a, button').length > 0) { return; } var $pageContentEl; // Find active page var $navbarEl = $clickedEl.parents('.navbar'); var $navbarsEl = $navbarEl.parents('.navbars'); // Static Layout $pageContentEl = $navbarEl.parents('.page-content'); if ($pageContentEl.length === 0) { // Fixed Layout if ($navbarEl.parents('.page').length > 0) { $pageContentEl = $navbarEl.parents('.page').find('.page-content'); } // Through Layout iOS if ($pageContentEl.length === 0 && $navbarsEl.length) { if ($navbarsEl.nextAll('.page-current:not(.stacked)').length > 0) { $pageContentEl = $navbarsEl.nextAll('.page-current:not(.stacked)').find('.page-content'); } } // Through Layout if ($pageContentEl.length === 0) { if ($navbarEl.nextAll('.page-current:not(.stacked)').length > 0) { $pageContentEl = $navbarEl.nextAll('.page-current:not(.stacked)').find('.page-content'); } } } if ($pageContentEl && $pageContentEl.length > 0) { // Check for tab if ($pageContentEl.hasClass('tab')) { $pageContentEl = $pageContentEl.parent('.tabs').children('.page-content.tab-active'); } if ($pageContentEl.length > 0) $pageContentEl.scrollTop(0, 300); } } }, vnode: { navbar: { postpatch: function postpatch(vnode) { var app = this; app.navbar.size(vnode.elm); } } } }; exports.default = _default;