UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

378 lines (299 loc) 11 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _ssrWindow = require("ssr-window"); var _utils = require("../../shared/utils"); var _getDevice = require("../../shared/get-device"); var _getSupport = require("../../shared/get-support"); var _class = _interopRequireDefault(require("../../shared/class")); var _eventsClass = _interopRequireDefault(require("../../shared/events-class")); var _constructorMethods = _interopRequireDefault(require("../../shared/constructor-methods")); var _modalMethods = _interopRequireDefault(require("../../shared/modal-methods")); var _dom = _interopRequireDefault(require("../../shared/dom7")); var _loadModule = _interopRequireDefault(require("./load-module")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var Framework7 = /*#__PURE__*/function (_Framework7Class) { _inheritsLoose(Framework7, _Framework7Class); function Framework7(params) { var _this; if (params === void 0) { params = {}; } _this = _Framework7Class.call(this, params) || this; // eslint-disable-next-line if (Framework7.instance && typeof window !== 'undefined') { throw new Error("Framework7 is already initialized and can't be initialized more than once"); } var device = (0, _getDevice.getDevice)({ userAgent: params.userAgent || undefined }); var support = (0, _getSupport.getSupport)(); var passedParams = (0, _utils.extend)({}, params); // App Instance var app = _assertThisInitialized(_this); app.device = device; app.support = support; var w = (0, _ssrWindow.getWindow)(); var d = (0, _ssrWindow.getDocument)(); Framework7.instance = app; // Default var defaults = { version: '1.0.0', id: 'io.framework7.myapp', el: 'body', theme: 'auto', language: w.navigator.language, routes: [], name: 'Framework7', lazyModulesPath: null, initOnDeviceReady: true, init: true, autoDarkTheme: false, iosTranslucentBars: true, iosTranslucentModals: true, component: undefined, componentUrl: undefined, userAgent: null, url: null }; // Extend defaults with modules params app.useModulesParams(defaults); // Extend defaults with passed params app.params = (0, _utils.extend)(defaults, params); (0, _utils.extend)(app, { // App Id id: app.params.id, // App Name name: app.params.name, // App version version: app.params.version, // Routes routes: app.params.routes, // Lang language: app.params.language, // Theme theme: function getTheme() { if (app.params.theme === 'auto') { if (device.ios) return 'ios'; if (device.desktop && device.electron) return 'aurora'; return 'md'; } return app.params.theme; }(), // Initially passed parameters passedParams: passedParams, online: w.navigator.onLine }); if (params.store) app.params.store = params.store; // Save Root if (app.$el && app.$el[0]) { app.$el[0].f7 = app; } // Install Modules app.useModules(); // Init Store app.initStore(); // Init if (app.params.init) { if (device.cordova && app.params.initOnDeviceReady) { (0, _dom.default)(d).on('deviceready', function () { app.init(); }); } else { app.init(); } } // Return app instance return app || _assertThisInitialized(_this); } var _proto = Framework7.prototype; _proto.mount = function mount(rootEl) { var app = this; var window = (0, _ssrWindow.getWindow)(); var document = (0, _ssrWindow.getDocument)(); var $rootEl = (0, _dom.default)(rootEl || app.params.el).eq(0); app.$el = $rootEl; if (app.$el && app.$el[0]) { app.el = app.$el[0]; app.el.f7 = app; app.rtl = $rootEl.css('direction') === 'rtl'; } // Auto Dark Theme var DARK = '(prefers-color-scheme: dark)'; var LIGHT = '(prefers-color-scheme: light)'; app.mq = {}; if (window.matchMedia) { app.mq.dark = window.matchMedia(DARK); app.mq.light = window.matchMedia(LIGHT); } app.colorSchemeListener = function colorSchemeListener(_ref) { var matches = _ref.matches, media = _ref.media; if (!matches) { return; } var html = document.querySelector('html'); if (media === DARK) { html.classList.add('theme-dark'); app.darkTheme = true; app.emit('darkThemeChange', true); } else if (media === LIGHT) { html.classList.remove('theme-dark'); app.darkTheme = false; app.emit('darkThemeChange', false); } }; app.emit('mount'); }; _proto.initStore = function initStore() { var app = this; if (typeof app.params.store !== 'undefined' && app.params.store.__store) { app.store = app.params.store; } else { app.store = app.createStore(app.params.store); } }; _proto.enableAutoDarkTheme = function enableAutoDarkTheme() { var window = (0, _ssrWindow.getWindow)(); var document = (0, _ssrWindow.getDocument)(); if (!window.matchMedia) return; var app = this; var html = document.querySelector('html'); if (app.mq.dark && app.mq.light) { app.mq.dark.addListener(app.colorSchemeListener); app.mq.light.addListener(app.colorSchemeListener); } if (app.mq.dark && app.mq.dark.matches) { html.classList.add('theme-dark'); app.darkTheme = true; app.emit('darkThemeChange', true); } else if (app.mq.light && app.mq.light.matches) { html.classList.remove('theme-dark'); app.darkTheme = false; app.emit('darkThemeChange', false); } }; _proto.disableAutoDarkTheme = function disableAutoDarkTheme() { var window = (0, _ssrWindow.getWindow)(); if (!window.matchMedia) return; var app = this; if (app.mq.dark) app.mq.dark.removeListener(app.colorSchemeListener); if (app.mq.light) app.mq.light.removeListener(app.colorSchemeListener); }; _proto.initAppComponent = function initAppComponent(callback) { var app = this; app.router.componentLoader(app.params.component, app.params.componentUrl, { componentOptions: { el: app.$el[0] } }, function (el) { app.$el = (0, _dom.default)(el); app.$el[0].f7 = app; app.$elComponent = el.f7Component; app.el = app.$el[0]; if (callback) callback(); }, function () {}); }; _proto.init = function init(rootEl) { var app = this; app.mount(rootEl); var init = function init() { if (app.initialized) return; app.$el.addClass('framework7-initializing'); // RTL attr if (app.rtl) { (0, _dom.default)('html').attr('dir', 'rtl'); } // Auto Dark Theme if (app.params.autoDarkTheme) { app.enableAutoDarkTheme(); } // Watch for online/offline state var window = (0, _ssrWindow.getWindow)(); window.addEventListener('offline', function () { app.online = false; app.emit('offline'); app.emit('connection', false); }); window.addEventListener('online', function () { app.online = true; app.emit('online'); app.emit('connection', true); }); // Root class app.$el.addClass('framework7-root'); // Theme class (0, _dom.default)('html').removeClass('ios md aurora').addClass(app.theme); // iOS Translucent var device = app.device; if (app.params.iosTranslucentBars && app.theme === 'ios' && device.ios) { (0, _dom.default)('html').addClass('ios-translucent-bars'); } if (app.params.iosTranslucentModals && app.theme === 'ios' && device.ios) { (0, _dom.default)('html').addClass('ios-translucent-modals'); } // Init class (0, _utils.nextFrame)(function () { app.$el.removeClass('framework7-initializing'); }); // Emit, init other modules app.initialized = true; app.emit('init'); }; if (app.params.component || app.params.componentUrl) { app.initAppComponent(function () { init(); }); } else { init(); } return app; } // eslint-disable-next-line ; _proto.loadModule = function loadModule() { return Framework7.loadModule.apply(Framework7, arguments); } // eslint-disable-next-line ; _proto.loadModules = function loadModules() { return Framework7.loadModules.apply(Framework7, arguments); }; _proto.getVnodeHooks = function getVnodeHooks(hook, id) { var app = this; if (!app.vnodeHooks || !app.vnodeHooks[hook]) return []; return app.vnodeHooks[hook][id] || []; } // eslint-disable-next-line ; _createClass(Framework7, [{ key: "$", get: function get() { return _dom.default; } }], [{ key: "Dom7", get: function get() { return _dom.default; } }, { key: "$", get: function get() { return _dom.default; } }, { key: "device", get: function get() { return (0, _getDevice.getDevice)(); } }, { key: "support", get: function get() { return (0, _getSupport.getSupport)(); } }, { key: "Class", get: function get() { return _class.default; } }, { key: "Events", get: function get() { return _eventsClass.default; } }]); return Framework7; }(_class.default); Framework7.ModalMethods = _modalMethods.default; Framework7.ConstructorMethods = _constructorMethods.default; Framework7.loadModule = _loadModule.default; Framework7.loadModules = function loadModules(modules) { return Promise.all(modules.map(function (module) { return Framework7.loadModule(module); })); }; var _default = Framework7; exports.default = _default;