UNPKG

framework7-vue

Version:

Build full featured iOS & Android apps using Framework7 & Vue

114 lines (102 loc) 3.44 kB
import Vue from 'vue'; /* eslint no-underscore-dangle: "off" */ import componentsRouter from './components-router'; import f7 from './f7'; const Plugin = { name: 'phenomePlugin', install(params = {}) { const Framework7 = this; f7.Framework7 = Framework7; const Extend = params.Vue || Vue; // eslint-disable-line // Define protos Object.defineProperty(Extend.prototype, '$f7', { get() { return f7.instance; }, }); const $theme = {}; const { theme } = params; if (theme === 'md') $theme.md = true; if (theme === 'ios') $theme.ios = true; if (!theme || theme === 'auto') { $theme.ios = !!(Framework7.Device || Framework7.device).ios; $theme.md = !(Framework7.Device || Framework7.device).ios; } Object.defineProperty(Extend.prototype, '$theme', { get() { return { ios: f7.instance ? f7.instance.theme === 'ios' : $theme.ios, md: f7.instance ? f7.instance.theme === 'md' : $theme.md, }; }, }); function f7ready(callback) { f7.ready(callback); } Extend.prototype.Dom7 = Framework7.$; Extend.prototype.$$ = Framework7.$; Extend.prototype.$device = Framework7.device; Extend.prototype.$request = Framework7.request; Extend.prototype.$utils = Framework7.utils; Extend.prototype.$f7ready = f7ready; Extend.prototype.$f7Ready = f7ready; Object.defineProperty(Extend.prototype, '$f7route', { get() { const self = this; if (self.props && self.props.f7route) return self.props.f7route; if (self.f7route) return self.f7route; if (self._f7route) return self._f7route; let route; // eslint-disable-next-line if ('vue' === 'vue') { if (self.$vnode && self.$vnode.data && self.$vnode.data.props && self.$vnode.data.props.f7route) { route = self.$vnode.data.props.f7route; } let parent = self; while (parent && !route) { if (parent._f7route) route = parent._f7route; parent = parent.$parent; } } return route; }, set(value) { const self = this; self._f7route = value; }, }); Object.defineProperty(Extend.prototype, '$f7router', { get() { const self = this; if (self.props && self.props.f7router) return self.props.f7router; if (self.f7router) return self.f7router; if (self._f7router) return self._f7router; let router; // eslint-disable-next-line if ('vue' === 'vue') { if (self.$vnode && self.$vnode.data && self.$vnode.data.props && self.$vnode.data.props.f7route) { router = self.$vnode.data.props.f7router; } let parent = self; while (parent && !router) { if (parent._f7router) router = parent._f7router; else if (parent.f7View) { router = parent.f7View.router; } else if (parent.$refs && parent.$refs.el && parent.$refs.el.f7View) { router = parent.$refs.el.f7View.router; } parent = parent.$parent; } } return router; }, set(value) { const self = this; self._f7router = value; }, }); // Extend F7 Router Framework7.Router.use(componentsRouter); }, }; export default Plugin;