UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

1,054 lines (860 loc) 35.1 kB
"use strict"; exports.__esModule = true; exports.refreshPage = refreshPage; exports.navigate = navigate; var _ssrWindow = require("ssr-window"); var _dom = _interopRequireDefault(require("../../shared/dom7")); var _utils = require("../../shared/utils"); var _history = _interopRequireDefault(require("../../shared/history")); var _redirect = _interopRequireDefault(require("./redirect")); var _processRouteQueue = _interopRequireDefault(require("./process-route-queue")); var _appRouterCheck = _interopRequireDefault(require("./app-router-check")); var _asyncComponent = _interopRequireDefault(require("./async-component")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function refreshPage() { var router = this; (0, _appRouterCheck.default)(router, 'refreshPage'); return router.navigate(router.currentRoute.url, { ignoreCache: true, reloadCurrent: true }); } function forward(router, el, forwardOptions) { if (forwardOptions === void 0) { forwardOptions = {}; } var document = (0, _ssrWindow.getDocument)(); var $el = (0, _dom.default)(el); var app = router.app; var view = router.view; var options = (0, _utils.extend)(false, { animate: router.params.animate, browserHistory: true, replaceState: false, history: true, reloadCurrent: router.params.reloadPages, reloadPrevious: false, reloadAll: false, clearPreviousHistory: false, reloadDetail: router.params.reloadDetail, on: {} }, forwardOptions); var masterDetailEnabled = router.params.masterDetailBreakpoint > 0; var isMaster = masterDetailEnabled && options.route && options.route.route && (options.route.route.master === true || typeof options.route.route.master === 'function' && options.route.route.master(app, router)); var masterPageEl; var otherDetailPageEl; var detailsInBetweenRemoved = 0; var currentRouteIsModal = router.currentRoute.modal; var modalType; if (!currentRouteIsModal) { 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(function (modalLoadProp) { if (router.currentRoute && router.currentRoute.route && router.currentRoute.route[modalLoadProp]) { currentRouteIsModal = true; modalType = modalLoadProp; } }); } if (currentRouteIsModal) { var modalToClose = router.currentRoute.modal || router.currentRoute.route.modalInstance || app[modalType].get(); var previousUrl = router.history[router.history.length - 2]; var previousRoute = router.findMatchingRoute(previousUrl); if (!previousRoute && previousUrl) { previousRoute = { url: previousUrl, path: previousUrl.split('?')[0], query: (0, _utils.parseUrlQuery)(previousUrl), route: { path: previousUrl.split('?')[0], url: previousUrl } }; } router.modalRemove(modalToClose); } var dynamicNavbar = router.dynamicNavbar; var $viewEl = router.$el; var $newPage = $el; var reload = options.reloadPrevious || options.reloadCurrent || options.reloadAll; var $oldPage; var $navbarsEl; var $newNavbarEl; var $oldNavbarEl; router.allowPageChange = false; if ($newPage.length === 0) { router.allowPageChange = true; return router; } if ($newPage.length) { // Remove theme elements router.removeThemeElements($newPage); } if (dynamicNavbar) { $newNavbarEl = $newPage.children('.navbar'); $navbarsEl = router.$navbarsEl; if ($newNavbarEl.length === 0 && $newPage[0] && $newPage[0].f7Page) { // Try from pageData $newNavbarEl = $newPage[0].f7Page.$navbarEl; } } // Save Keep Alive Cache if (options.route && options.route.route && options.route.route.keepAlive && !options.route.route.keepAliveData) { options.route.route.keepAliveData = { pageEl: $el[0] }; } // Pages In View var $pagesInView = $viewEl.children('.page:not(.stacked)').filter(function (pageInView) { return pageInView !== $newPage[0]; }); // Navbars In View var $navbarsInView; if (dynamicNavbar) { $navbarsInView = $navbarsEl.children('.navbar:not(.stacked)').filter(function (navbarInView) { return navbarInView !== $newNavbarEl[0]; }); } // Exit when reload previous and only 1 page in view so nothing ro reload if (options.reloadPrevious && $pagesInView.length < 2) { router.allowPageChange = true; return router; } // Find Detail' master page var isDetail; var reloadDetail; var isDetailRoot; if (masterDetailEnabled && !options.reloadAll) { for (var i = 0; i < $pagesInView.length; i += 1) { if (!masterPageEl && $pagesInView[i].classList.contains('page-master')) { masterPageEl = $pagesInView[i]; continue; // eslint-disable-line } } isDetail = !isMaster && masterPageEl; if (isDetail) { // Find Other Detail if (masterPageEl) { for (var _i = 0; _i < $pagesInView.length; _i += 1) { if ($pagesInView[_i].classList.contains('page-master-detail')) { otherDetailPageEl = $pagesInView[_i]; continue; // eslint-disable-line } } } } reloadDetail = isDetail && options.reloadDetail && app.width >= router.params.masterDetailBreakpoint && masterPageEl; } if (isDetail) { isDetailRoot = !otherDetailPageEl || reloadDetail || options.reloadAll || options.reloadCurrent; } // New Page var newPagePosition = 'next'; if (options.reloadCurrent || options.reloadAll || reloadDetail) { newPagePosition = 'current'; } else if (options.reloadPrevious) { newPagePosition = 'previous'; } $newPage.removeClass('page-previous page-current page-next').addClass("page-" + newPagePosition + (isMaster ? ' page-master' : '') + (isDetail ? ' page-master-detail' : '') + (isDetailRoot ? ' page-master-detail-root' : '')).removeClass('stacked').trigger('page:unstack').trigger('page:position', { position: newPagePosition }); router.emit('pageUnstack', $newPage[0]); router.emit('pagePosition', $newPage[0], newPagePosition); if (isMaster || isDetail) { $newPage.trigger('page:role', { role: isMaster ? 'master' : 'detail', root: !!isDetailRoot }); router.emit('pageRole', $newPage[0], { role: isMaster ? 'master' : 'detail', detailRoot: !!isDetailRoot }); } if (dynamicNavbar && $newNavbarEl.length) { $newNavbarEl.removeClass('navbar-previous navbar-current navbar-next').addClass("navbar-" + newPagePosition + (isMaster ? ' navbar-master' : '') + (isDetail ? ' navbar-master-detail' : '') + (isDetailRoot ? ' navbar-master-detail-root' : '')).removeClass('stacked'); $newNavbarEl.trigger('navbar:position', { position: newPagePosition }); router.emit('navbarPosition', $newNavbarEl[0], newPagePosition); if (isMaster || isDetail) { router.emit('navbarRole', $newNavbarEl[0], { role: isMaster ? 'master' : 'detail', detailRoot: !!isDetailRoot }); } } // Find Old Page if (options.reloadCurrent || reloadDetail) { if (reloadDetail) { $oldPage = $pagesInView.filter(function (pageEl) { return !pageEl.classList.contains('page-master'); }); if (dynamicNavbar) { $oldNavbarEl = (0, _dom.default)($oldPage.map(function (pageEl) { return app.navbar.getElByPage(pageEl); })); } if ($oldPage.length > 1 && masterPageEl) { detailsInBetweenRemoved = $oldPage.length - 1; (0, _dom.default)(masterPageEl).removeClass('page-master-stacked').trigger('page:masterunstack'); router.emit('pageMasterUnstack', masterPageEl); if (dynamicNavbar) { (0, _dom.default)(app.navbar.getElByPage(masterPageEl)).removeClass('navbar-master-stacked'); router.emit('navbarMasterUnstack', app.navbar.getElByPage(masterPageEl)); } } } else { $oldPage = $pagesInView.eq($pagesInView.length - 1); if (dynamicNavbar) { $oldNavbarEl = (0, _dom.default)(app.navbar.getElByPage($oldPage)); } } } else if (options.reloadPrevious) { $oldPage = $pagesInView.eq($pagesInView.length - 2); if (dynamicNavbar) { // $oldNavbarEl = $navbarsInView.eq($pagesInView.length - 2); $oldNavbarEl = (0, _dom.default)(app.navbar.getElByPage($oldPage)); } } else if (options.reloadAll) { $oldPage = $pagesInView.filter(function (pageEl) { return pageEl !== $newPage[0]; }); if (dynamicNavbar) { $oldNavbarEl = $navbarsInView.filter(function (navbarEl) { return navbarEl !== $newNavbarEl[0]; }); } } else { var removedPageEls = []; var removedNavbarEls = []; if ($pagesInView.length > 1) { var _i2 = 0; for (_i2 = 0; _i2 < $pagesInView.length - 1; _i2 += 1) { if (masterPageEl && $pagesInView[_i2] === masterPageEl) { $pagesInView.eq(_i2).addClass('page-master-stacked'); $pagesInView.eq(_i2).trigger('page:masterstack'); router.emit('pageMasterStack', $pagesInView[_i2]); if (dynamicNavbar) { (0, _dom.default)(app.navbar.getElByPage(masterPageEl)).addClass('navbar-master-stacked'); router.emit('navbarMasterStack', app.navbar.getElByPage(masterPageEl)); } continue; // eslint-disable-line } var oldNavbarEl = app.navbar.getElByPage($pagesInView.eq(_i2)); if (router.params.stackPages) { $pagesInView.eq(_i2).addClass('stacked'); $pagesInView.eq(_i2).trigger('page:stack'); router.emit('pageStack', $pagesInView[_i2]); if (dynamicNavbar) { (0, _dom.default)(oldNavbarEl).addClass('stacked'); } } else { // Page remove event removedPageEls.push($pagesInView[_i2]); router.pageCallback('beforeRemove', $pagesInView[_i2], $navbarsInView && $navbarsInView[_i2], 'previous', undefined, options); router.removePage($pagesInView[_i2]); if (dynamicNavbar && oldNavbarEl) { removedNavbarEls.push(oldNavbarEl); router.removeNavbar(oldNavbarEl); } } } } $oldPage = $viewEl.children('.page:not(.stacked)').filter(function (pageEl) { return pageEl !== $newPage[0] && removedPageEls.indexOf(pageEl) < 0; }); if (dynamicNavbar) { $oldNavbarEl = $navbarsEl.children('.navbar:not(.stacked)').filter(function (navbarEl) { return navbarEl !== $newNavbarEl[0] && removedNavbarEls.indexOf(removedNavbarEls) < 0; }); } removedPageEls = []; removedNavbarEls = []; } if (isDetail && !options.reloadAll) { if ($oldPage.length > 1 || reloadDetail) { $oldPage = $oldPage.filter(function (pageEl) { return !pageEl.classList.contains('page-master'); }); } if ($oldNavbarEl && ($oldNavbarEl.length > 1 || reloadDetail)) { $oldNavbarEl = $oldNavbarEl.filter(function (navbarEl) { return !navbarEl.classList.contains('navbar-master'); }); } } // Push State if (router.params.browserHistory && (options.browserHistory || options.replaceState) && !options.reloadPrevious) { var browserHistoryRoot = router.params.browserHistoryRoot || ''; _history.default[options.reloadCurrent || reloadDetail && otherDetailPageEl || options.reloadAll || options.replaceState ? 'replace' : 'push'](view.id, { url: options.route.url }, browserHistoryRoot + router.params.browserHistorySeparator + options.route.url); } if (!options.reloadPrevious) { // Current Page & Navbar router.currentPageEl = $newPage[0]; if (dynamicNavbar && $newNavbarEl.length) { router.currentNavbarEl = $newNavbarEl[0]; } else { delete router.currentNavbarEl; } // Current Route router.currentRoute = options.route; } // Update router history var url = options.route.url; if (options.history) { if (((options.reloadCurrent || reloadDetail && otherDetailPageEl) && router.history.length) > 0 || options.replaceState) { if (reloadDetail && detailsInBetweenRemoved > 0) { router.history = router.history.slice(0, router.history.length - detailsInBetweenRemoved); } router.history[router.history.length - (options.reloadPrevious ? 2 : 1)] = url; } else if (options.reloadPrevious) { router.history[router.history.length - 2] = url; } else if (options.reloadAll) { router.history = [url]; } else { router.history.push(url); } } router.saveHistory(); // Insert new page and navbar var newPageInDom = $newPage.parents(document).length > 0; var f7Component = $newPage[0].f7Component; if (options.reloadPrevious) { if (f7Component && !newPageInDom) { f7Component.mount(function (componentEl) { (0, _dom.default)(componentEl).insertBefore($oldPage); }); } else { $newPage.insertBefore($oldPage); } if (dynamicNavbar && $newNavbarEl.length) { if ($newNavbarEl.find('.title-large').length) { $newNavbarEl.addClass('navbar-large'); } if ($oldNavbarEl.length) { $newNavbarEl.insertBefore($oldNavbarEl); } else { if (!router.$navbarsEl.parents(document).length) { router.$el.prepend(router.$navbarsEl); } $navbarsEl.append($newNavbarEl); } } } else { if ($oldPage.next('.page')[0] !== $newPage[0]) { if (f7Component && !newPageInDom) { f7Component.mount(function (componentEl) { $viewEl.append(componentEl); }); } else { $viewEl.append($newPage[0]); } } if (dynamicNavbar && $newNavbarEl.length) { if ($newNavbarEl.find('.title-large').length) { $newNavbarEl.addClass('navbar-large'); } if (!router.$navbarsEl.parents(document).length) { router.$el.prepend(router.$navbarsEl); } $navbarsEl.append($newNavbarEl[0]); } } if (!newPageInDom) { router.pageCallback('mounted', $newPage, $newNavbarEl, newPagePosition, reload ? newPagePosition : 'current', options, $oldPage); } else if (options.route && options.route.route && options.route.route.keepAlive && !$newPage[0].f7PageMounted) { $newPage[0].f7PageMounted = true; router.pageCallback('mounted', $newPage, $newNavbarEl, newPagePosition, reload ? newPagePosition : 'current', options, $oldPage); } // Remove old page if ((options.reloadCurrent || reloadDetail) && $oldPage.length > 0) { if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) { $oldPage.addClass('stacked'); $oldPage.trigger('page:stack'); router.emit('pageStack', $oldPage[0]); if (dynamicNavbar) { $oldNavbarEl.addClass('stacked'); } } else { // Page remove event router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options); router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options); router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'current', undefined, options); router.removePage($oldPage); if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) { router.removeNavbar($oldNavbarEl); } } } else if (options.reloadAll) { $oldPage.each(function (pageEl, index) { var $oldPageEl = (0, _dom.default)(pageEl); var $oldNavbarElEl = (0, _dom.default)(app.navbar.getElByPage($oldPageEl)); if (router.params.stackPages && router.initialPages.indexOf($oldPageEl[0]) >= 0) { $oldPageEl.addClass('stacked'); $oldPageEl.trigger('page:stack'); router.emit('pageStack', $oldPageEl[0]); if (dynamicNavbar) { $oldNavbarElEl.addClass('stacked'); } } else { // Page remove event if ($oldPageEl.hasClass('page-current')) { router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', undefined, options); router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', undefined, options); } router.pageCallback('beforeRemove', $oldPageEl, $oldNavbarEl && $oldNavbarEl.eq(index), 'previous', undefined, options); router.removePage($oldPageEl); if (dynamicNavbar && $oldNavbarElEl.length) { router.removeNavbar($oldNavbarElEl); } } }); } else if (options.reloadPrevious) { if (router.params.stackPages && router.initialPages.indexOf($oldPage[0]) >= 0) { $oldPage.addClass('stacked'); $oldPage.trigger('page:stack'); router.emit('pageStack', $oldPage[0]); if (dynamicNavbar) { $oldNavbarEl.addClass('stacked'); } } else { // Page remove event router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options); router.removePage($oldPage); if (dynamicNavbar && $oldNavbarEl && $oldNavbarEl.length) { router.removeNavbar($oldNavbarEl); } } } // Load Tab if (options.route.route.tab) { router.tabLoad(options.route.route.tab, (0, _utils.extend)({}, options, { history: false, browserHistory: false })); } // Check master detail if (masterDetailEnabled) { view.checkMasterDetailBreakpoint(); } // Page init and before init events router.pageCallback('init', $newPage, $newNavbarEl, newPagePosition, reload ? newPagePosition : 'current', options, $oldPage); if (options.reloadCurrent || options.reloadAll || reloadDetail) { router.allowPageChange = true; router.pageCallback('beforeIn', $newPage, $newNavbarEl, newPagePosition, 'current', options); $newPage.removeAttr('aria-hidden'); if (dynamicNavbar && $newNavbarEl) { $newNavbarEl.removeAttr('aria-hidden'); } router.pageCallback('afterIn', $newPage, $newNavbarEl, newPagePosition, 'current', options); if (options.reloadCurrent && options.clearPreviousHistory) router.clearPreviousHistory(); if (reloadDetail) { router.setPagePosition((0, _dom.default)(masterPageEl), 'previous'); if (masterPageEl.f7Page && masterPageEl.f7Page.navbarEl) { router.setNavbarPosition((0, _dom.default)(masterPageEl.f7Page.navbarEl), 'previous'); } } return router; } if (options.reloadPrevious) { router.allowPageChange = true; return router; } // Before animation event router.pageCallback('beforeOut', $oldPage, $oldNavbarEl, 'current', 'previous', options); router.pageCallback('beforeIn', $newPage, $newNavbarEl, 'next', 'current', options); // Animation function afterAnimation() { router.setPagePosition($newPage, 'current', false); router.setPagePosition($oldPage, 'previous', !$oldPage.hasClass('page-master')); if (dynamicNavbar) { router.setNavbarPosition($newNavbarEl, 'current', false); router.setNavbarPosition($oldNavbarEl, 'previous', !$oldNavbarEl.hasClass('navbar-master')); } // After animation event router.allowPageChange = true; router.pageCallback('afterOut', $oldPage, $oldNavbarEl, 'current', 'previous', options); router.pageCallback('afterIn', $newPage, $newNavbarEl, 'next', 'current', options); var keepOldPage = (router.params.preloadPreviousPage || router.params[app.theme + "SwipeBack"]) && !isMaster; if (!keepOldPage) { if ($newPage.hasClass('smart-select-page') || $newPage.hasClass('photo-browser-page') || $newPage.hasClass('autocomplete-page') || $newPage.hasClass('color-picker-page')) { keepOldPage = true; } } if (!keepOldPage) { if (router.params.stackPages) { $oldPage.addClass('stacked'); $oldPage.trigger('page:stack'); router.emit('pageStack', $oldPage[0]); if (dynamicNavbar) { $oldNavbarEl.addClass('stacked'); } } else if (!($newPage.attr('data-name') && $newPage.attr('data-name') === 'smart-select-page')) { // Remove event router.pageCallback('beforeRemove', $oldPage, $oldNavbarEl, 'previous', undefined, options); router.removePage($oldPage); if (dynamicNavbar && $oldNavbarEl.length) { router.removeNavbar($oldNavbarEl); } } } if (options.clearPreviousHistory) router.clearPreviousHistory(); router.emit('routeChanged', router.currentRoute, router.previousRoute, router); if (router.params.browserHistory) { _history.default.clearRouterQueue(); } } function setPositionClasses() { router.setPagePosition($oldPage, 'current', false); router.setPagePosition($newPage, 'next', false); if (dynamicNavbar) { router.setNavbarPosition($oldNavbarEl, 'current', false); router.setNavbarPosition($newNavbarEl, 'next', false); } } if (options.animate && !(isMaster && app.width >= router.params.masterDetailBreakpoint)) { var delay = router.params[router.app.theme + "PageLoadDelay"]; var transition = router.params.transition; if (options.transition) transition = options.transition; if (!transition && router.currentRoute && router.currentRoute.route) { transition = router.currentRoute.route.transition; } if (!transition && router.currentRoute && router.currentRoute.route.options) { transition = router.currentRoute.route.options.transition; } if (transition) { $newPage[0].f7PageTransition = transition; } if (delay) { setTimeout(function () { setPositionClasses(); router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'forward', transition, function () { afterAnimation(); }); }, delay); } else { setPositionClasses(); router.animate($oldPage, $newPage, $oldNavbarEl, $newNavbarEl, 'forward', transition, function () { afterAnimation(); }); } } else { afterAnimation(); } return router; } function load(router, loadParams, loadOptions, ignorePageChange) { if (loadParams === void 0) { loadParams = {}; } if (loadOptions === void 0) { loadOptions = {}; } if (!router.allowPageChange && !ignorePageChange) return router; var params = loadParams; var options = loadOptions; var url = params.url, content = params.content, el = params.el, pageName = params.pageName, component = params.component, componentUrl = params.componentUrl; if (!options.reloadCurrent && options.route && options.route.route && options.route.route.parentPath && router.currentRoute.route && router.currentRoute.route.parentPath === options.route.route.parentPath) { // Do something nested if (options.route.url === router.url) { router.allowPageChange = true; return false; } // Check for same params var sameParams = Object.keys(options.route.params).length === Object.keys(router.currentRoute.params).length; if (sameParams) { // Check for equal params name Object.keys(options.route.params).forEach(function (paramName) { if (!(paramName in router.currentRoute.params) || router.currentRoute.params[paramName] !== options.route.params[paramName]) { sameParams = false; } }); } if (sameParams) { if (options.route.route.tab) { return router.tabLoad(options.route.route.tab, options); } return false; } if (!sameParams && options.route.route.tab && router.currentRoute.route.tab && router.currentRoute.parentPath === options.route.parentPath) { return router.tabLoad(options.route.route.tab, options); } } if (options.route && options.route.url && router.url === options.route.url && !(options.reloadCurrent || options.reloadPrevious) && !router.params.allowDuplicateUrls) { router.allowPageChange = true; return false; } if (!options.route && url) { options.route = router.parseRouteUrl(url); (0, _utils.extend)(options.route, { route: { url: url, path: url } }); } // Component Callbacks function resolve(pageEl, newOptions) { return forward(router, pageEl, (0, _utils.extend)(options, newOptions)); } function reject() { router.allowPageChange = true; return router; } if (url || componentUrl || component) { router.allowPageChange = false; } // Proceed if (content) { forward(router, router.getPageEl(content), options); } else if (el) { // Load page from specified HTMLElement or by page name in pages container forward(router, router.getPageEl(el), options); } else if (pageName) { // Load page by page name in pages container forward(router, router.$el.children(".page[data-name=\"" + pageName + "\"]").eq(0), options); } else if (component || componentUrl) { // Load from component (F7/Vue/React/...) try { router.pageComponentLoader({ routerEl: router.el, component: component, componentUrl: componentUrl, options: options, resolve: resolve, reject: reject }); } catch (err) { router.allowPageChange = true; throw err; } } else if (url) { // Load using XHR if (router.xhrAbortController) { router.xhrAbortController.abort(); router.xhrAbortController = false; } router.xhrRequest(url, options).then(function (pageContent) { forward(router, router.getPageEl(pageContent), options); }).catch(function () { router.allowPageChange = true; }); } return router; } function openIn(router, url, options) { var navigateOptions = { url: url, route: { path: url, options: _extends({}, options, { openIn: undefined }) } }; var params = _extends({}, options); if (options.openIn === 'popup') { params.content = "<div class=\"popup popup-router-open-in\" data-url=\"" + url + "\"><div class=\"view view-init\" data-links-view=\"" + router.view.selector + "\" data-url=\"" + url + "\" data-ignore-open-in=\"true\"></div></div>"; navigateOptions.route.popup = params; } if (options.openIn === 'loginScreen') { params.content = "<div class=\"login-screen login-screen-router-open-in\" data-url=\"" + url + "\"><div class=\"view view-init\" data-links-view=\"" + router.view.selector + "\" data-url=\"" + url + "\" data-ignore-open-in=\"true\"></div></div>"; navigateOptions.route.loginScreen = params; } if (options.openIn === 'sheet') { params.content = "<div class=\"sheet-modal sheet-modal-router-open-in\" data-url=\"" + url + "\"><div class=\"sheet-modal-inner\"><div class=\"view view-init\" data-links-view=\"" + router.view.selector + "\" data-url=\"" + url + "\" data-ignore-open-in=\"true\"></div></div></div>"; navigateOptions.route.sheet = params; } if (options.openIn === 'popover') { params.targetEl = options.clickedEl || options.targetEl; params.content = "<div class=\"popover popover-router-open-in\" data-url=\"" + url + "\"><div class=\"popover-inner\"><div class=\"view view-init\" data-links-view=\"" + router.view.selector + "\" data-url=\"" + url + "\" data-ignore-open-in=\"true\"></div></div></div>"; navigateOptions.route.popover = params; } if (options.openIn.indexOf('panel') >= 0) { var parts = options.openIn.split(':'); var side = parts[1] || 'left'; var effect = parts[2] || 'cover'; params.targetEl = options.clickedEl || options.targetEl; params.content = "<div class=\"panel panel-router-open-in panel-" + side + " panel-" + effect + "\" data-url=\"" + url + "\"><div class=\"view view-init\" data-links-view=\"" + router.view.selector + "\" data-url=\"" + url + "\" data-ignore-open-in=\"true\"></div></div>"; navigateOptions.route.panel = params; } return router.navigate(navigateOptions); } function navigate(navigateParams, navigateOptions) { if (navigateOptions === void 0) { navigateOptions = {}; } var router = this; if (router.swipeBackActive) return router; var url; var createRoute; var name; var path; var query; var params; var route; if (typeof navigateParams === 'string') { url = navigateParams; } else { url = navigateParams.url; createRoute = navigateParams.route; name = navigateParams.name; path = navigateParams.path; query = navigateParams.query; params = navigateParams.params; } if (name || path) { url = router.generateUrl({ path: path, name: name, params: params, query: query }); if (url) { return router.navigate(url, navigateOptions); } return router; } var app = router.app; (0, _appRouterCheck.default)(router, 'navigate'); if (url === '#' || url === '') { return router; } var navigateUrl = url.replace('./', ''); if (navigateUrl[0] !== '/' && navigateUrl.indexOf('#') !== 0) { var currentPath = router.currentRoute.parentPath || router.currentRoute.path; navigateUrl = ((currentPath ? currentPath + "/" : '/') + navigateUrl).replace('///', '/').replace('//', '/'); } if (createRoute) { route = (0, _utils.extend)(router.parseRouteUrl(navigateUrl), { route: (0, _utils.extend)({}, createRoute) }); } else { route = router.findMatchingRoute(navigateUrl); } if (!route) { return router; } if (route.route && route.route.viewName) { var anotherViewName = route.route.viewName; var anotherView = app.views[anotherViewName]; if (!anotherView) { throw new Error("Framework7: There is no View with \"" + anotherViewName + "\" name that was specified in this route"); } if (anotherView !== router.view) { return anotherView.router.navigate(navigateParams, navigateOptions); } } if (route.route.redirect) { return _redirect.default.call(router, 'forward', route, navigateOptions); } var options = {}; if (route.route.options) { (0, _utils.extend)(options, route.route.options, navigateOptions); } else { (0, _utils.extend)(options, navigateOptions); } if (options.openIn && (!router.params.ignoreOpenIn || router.params.ignoreOpenIn && router.history.length > 0)) { return openIn(router, navigateUrl, options); } options.route = route; function resolve() { var routerLoaded = false; 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(function (modalLoadProp) { if (route.route[modalLoadProp] && !routerLoaded) { routerLoaded = true; router.modalLoad(modalLoadProp, route, options, 'forward'); } }); if (route.route.keepAlive && route.route.keepAliveData) { load(router, { el: route.route.keepAliveData.pageEl }, options, false); routerLoaded = true; } 'url content component pageName el componentUrl'.split(' ').forEach(function (pageLoadProp) { if (route.route[pageLoadProp] && !routerLoaded) { var _load; routerLoaded = true; load(router, (_load = {}, _load[pageLoadProp] = route.route[pageLoadProp], _load), options, false); } }); if (routerLoaded) return; // Async function asyncResolve(resolveParams, resolveOptions) { router.allowPageChange = false; var resolvedAsModal = false; 'popup popover sheet loginScreen actions customModal panel'.split(' ').forEach(function (modalLoadProp) { if (resolveParams[modalLoadProp]) { resolvedAsModal = true; var modalRoute = (0, _utils.extend)({}, route, { route: resolveParams }); router.allowPageChange = true; router.modalLoad(modalLoadProp, modalRoute, (0, _utils.extend)(options, resolveOptions), 'forward'); } }); if (resolvedAsModal) return; load(router, resolveParams, (0, _utils.extend)(options, resolveOptions), true); } function asyncReject() { router.allowPageChange = true; } if (route.route.async) { router.allowPageChange = false; route.route.async.call(router, { router: router, to: options.route, from: router.currentRoute, resolve: asyncResolve, reject: asyncReject, direction: 'forward', app: app }); } if (route.route.asyncComponent) { (0, _asyncComponent.default)(router, route.route.asyncComponent, asyncResolve, asyncReject); } } function reject() { router.allowPageChange = true; } if (router.params.masterDetailBreakpoint > 0 && route.route.masterRoute) { // load detail route var preloadMaster = true; var masterLoaded = false; if (router.currentRoute && router.currentRoute.route) { if ((router.currentRoute.route.master === true || typeof router.currentRoute.route.master === 'function' && router.currentRoute.route.master(app, router)) && (router.currentRoute.route === route.route.masterRoute || router.currentRoute.route.path === route.route.masterRoute.path)) { preloadMaster = false; } if (router.currentRoute.route.masterRoute && (router.currentRoute.route.masterRoute === route.route.masterRoute || router.currentRoute.route.masterRoute.path === route.route.masterRoute.path)) { preloadMaster = false; masterLoaded = true; } } if (preloadMaster || masterLoaded && navigateOptions.reloadAll) { router.navigate({ path: route.route.masterRoute.path, params: route.params || {} }, { animate: false, reloadAll: navigateOptions.reloadAll, reloadCurrent: navigateOptions.reloadCurrent, reloadPrevious: navigateOptions.reloadPrevious, browserHistory: !navigateOptions.initial, history: !navigateOptions.initial, once: { pageAfterIn: function pageAfterIn() { router.navigate(navigateParams, (0, _utils.extend)({}, navigateOptions, { animate: false, reloadAll: false, reloadCurrent: false, reloadPrevious: false, history: !navigateOptions.initial, browserHistory: !navigateOptions.initial })); } } }); return router; } } _processRouteQueue.default.call(router, route, router.currentRoute, function () { if (route.route.modules) { app.loadModules(Array.isArray(route.route.modules) ? route.route.modules : [route.route.modules]).then(function () { resolve(); }).catch(function () { reject(); }); } else { resolve(); } }, function () { reject(); }, 'forward'); // Return Router return router; }