UNPKG

framework7-vue

Version:

Build full featured iOS & Android apps using Framework7 & Vue

302 lines (289 loc) 12.5 kB
/** * Framework7 Vue 4.0.0-beta.18 * Build full featured iOS & Android apps using Framework7 & Vue * http://framework7.io/vue/ * * Copyright 2014-2019 Vladimir Kharlampidi * * Released under the MIT License * * Released on: January 12, 2019 */ import Vue from 'vue'; import f7AccordionContent from './components/accordion-content'; import f7AccordionItem from './components/accordion-item'; import f7AccordionToggle from './components/accordion-toggle'; import f7Accordion from './components/accordion'; import f7ActionsButton from './components/actions-button'; import f7ActionsGroup from './components/actions-group'; import f7ActionsLabel from './components/actions-label'; import f7Actions from './components/actions'; import f7App from './components/app'; import f7Badge from './components/badge'; import f7BlockFooter from './components/block-footer'; import f7BlockHeader from './components/block-header'; import f7BlockTitle from './components/block-title'; import f7Block from './components/block'; import f7Button from './components/button'; import f7CardContent from './components/card-content'; import f7CardFooter from './components/card-footer'; import f7CardHeader from './components/card-header'; import f7Card from './components/card'; import f7Checkbox from './components/checkbox'; import f7Chip from './components/chip'; import f7Col from './components/col'; import f7FabButton from './components/fab-button'; import f7FabButtons from './components/fab-buttons'; import f7Fab from './components/fab'; import f7Gauge from './components/gauge'; import f7Icon from './components/icon'; import f7Input from './components/input'; import f7Link from './components/link'; import f7ListButton from './components/list-button'; import f7ListGroup from './components/list-group'; import f7ListIndex from './components/list-index'; import f7ListInput from './components/list-input'; import f7ListItemCell from './components/list-item-cell'; import f7ListItemContent from './components/list-item-content'; import f7ListItemRow from './components/list-item-row'; import f7ListItem from './components/list-item'; import f7List from './components/list'; import f7LoginScreenTitle from './components/login-screen-title'; import f7LoginScreen from './components/login-screen'; import f7MenuDropdownItem from './components/menu-dropdown-item'; import f7MenuDropdown from './components/menu-dropdown'; import f7MenuItem from './components/menu-item'; import f7Menu from './components/menu'; import f7Message from './components/message'; import f7MessagebarAttachment from './components/messagebar-attachment'; import f7MessagebarAttachments from './components/messagebar-attachments'; import f7MessagebarSheetImage from './components/messagebar-sheet-image'; import f7MessagebarSheetItem from './components/messagebar-sheet-item'; import f7MessagebarSheet from './components/messagebar-sheet'; import f7Messagebar from './components/messagebar'; import f7MessagesTitle from './components/messages-title'; import f7Messages from './components/messages'; import f7NavLeft from './components/nav-left'; import f7NavRight from './components/nav-right'; import f7NavTitleLarge from './components/nav-title-large'; import f7NavTitle from './components/nav-title'; import f7Navbar from './components/navbar'; import f7PageContent from './components/page-content'; import f7Page from './components/page'; import f7Panel from './components/panel'; import f7PhotoBrowser from './components/photo-browser'; import f7Popover from './components/popover'; import f7Popup from './components/popup'; import f7Preloader from './components/preloader'; import f7Progressbar from './components/progressbar'; import f7Radio from './components/radio'; import f7Range from './components/range'; import f7RoutableModals from './components/routable-modals'; import f7Row from './components/row'; import f7Searchbar from './components/searchbar'; import f7Segmented from './components/segmented'; import f7Sheet from './components/sheet'; import f7SkeletonBlock from './components/skeleton-block'; import f7SkeletonText from './components/skeleton-text'; import f7Statusbar from './components/statusbar'; import f7Stepper from './components/stepper'; import f7Subnavbar from './components/subnavbar'; import f7SwipeoutActions from './components/swipeout-actions'; import f7SwipeoutButton from './components/swipeout-button'; import f7SwiperSlide from './components/swiper-slide'; import f7Swiper from './components/swiper'; import f7Tab from './components/tab'; import f7Tabs from './components/tabs'; import f7Toggle from './components/toggle'; import f7Toolbar from './components/toolbar'; import f7View from './components/view'; import f7Views from './components/views'; /* eslint no-underscore-dangle: "off" */ import componentsRouter from './utils/components-router'; import f7 from './utils/f7'; const Plugin = { name: 'phenomePlugin', install(params = {}) { const Framework7 = this; f7.Framework7 = Framework7; const Extend = params.Vue || Vue; // eslint-disable-line Vue.component('f7-accordion-content', f7AccordionContent); Vue.component('f7-accordion-item', f7AccordionItem); Vue.component('f7-accordion-toggle', f7AccordionToggle); Vue.component('f7-accordion', f7Accordion); Vue.component('f7-actions-button', f7ActionsButton); Vue.component('f7-actions-group', f7ActionsGroup); Vue.component('f7-actions-label', f7ActionsLabel); Vue.component('f7-actions', f7Actions); Vue.component('f7-app', f7App); Vue.component('f7-badge', f7Badge); Vue.component('f7-block-footer', f7BlockFooter); Vue.component('f7-block-header', f7BlockHeader); Vue.component('f7-block-title', f7BlockTitle); Vue.component('f7-block', f7Block); Vue.component('f7-button', f7Button); Vue.component('f7-card-content', f7CardContent); Vue.component('f7-card-footer', f7CardFooter); Vue.component('f7-card-header', f7CardHeader); Vue.component('f7-card', f7Card); Vue.component('f7-checkbox', f7Checkbox); Vue.component('f7-chip', f7Chip); Vue.component('f7-col', f7Col); Vue.component('f7-fab-button', f7FabButton); Vue.component('f7-fab-buttons', f7FabButtons); Vue.component('f7-fab', f7Fab); Vue.component('f7-gauge', f7Gauge); Vue.component('f7-icon', f7Icon); Vue.component('f7-input', f7Input); Vue.component('f7-link', f7Link); Vue.component('f7-list-button', f7ListButton); Vue.component('f7-list-group', f7ListGroup); Vue.component('f7-list-index', f7ListIndex); Vue.component('f7-list-input', f7ListInput); Vue.component('f7-list-item-cell', f7ListItemCell); Vue.component('f7-list-item-content', f7ListItemContent); Vue.component('f7-list-item-row', f7ListItemRow); Vue.component('f7-list-item', f7ListItem); Vue.component('f7-list', f7List); Vue.component('f7-login-screen-title', f7LoginScreenTitle); Vue.component('f7-login-screen', f7LoginScreen); Vue.component('f7-menu-dropdown-item', f7MenuDropdownItem); Vue.component('f7-menu-dropdown', f7MenuDropdown); Vue.component('f7-menu-item', f7MenuItem); Vue.component('f7-menu', f7Menu); Vue.component('f7-message', f7Message); Vue.component('f7-messagebar-attachment', f7MessagebarAttachment); Vue.component('f7-messagebar-attachments', f7MessagebarAttachments); Vue.component('f7-messagebar-sheet-image', f7MessagebarSheetImage); Vue.component('f7-messagebar-sheet-item', f7MessagebarSheetItem); Vue.component('f7-messagebar-sheet', f7MessagebarSheet); Vue.component('f7-messagebar', f7Messagebar); Vue.component('f7-messages-title', f7MessagesTitle); Vue.component('f7-messages', f7Messages); Vue.component('f7-nav-left', f7NavLeft); Vue.component('f7-nav-right', f7NavRight); Vue.component('f7-nav-title-large', f7NavTitleLarge); Vue.component('f7-nav-title', f7NavTitle); Vue.component('f7-navbar', f7Navbar); Vue.component('f7-page-content', f7PageContent); Vue.component('f7-page', f7Page); Vue.component('f7-panel', f7Panel); Vue.component('f7-photo-browser', f7PhotoBrowser); Vue.component('f7-popover', f7Popover); Vue.component('f7-popup', f7Popup); Vue.component('f7-preloader', f7Preloader); Vue.component('f7-progressbar', f7Progressbar); Vue.component('f7-radio', f7Radio); Vue.component('f7-range', f7Range); Vue.component('f7-routable-modals', f7RoutableModals); Vue.component('f7-row', f7Row); Vue.component('f7-searchbar', f7Searchbar); Vue.component('f7-segmented', f7Segmented); Vue.component('f7-sheet', f7Sheet); Vue.component('f7-skeleton-block', f7SkeletonBlock); Vue.component('f7-skeleton-text', f7SkeletonText); Vue.component('f7-statusbar', f7Statusbar); Vue.component('f7-stepper', f7Stepper); Vue.component('f7-subnavbar', f7Subnavbar); Vue.component('f7-swipeout-actions', f7SwipeoutActions); Vue.component('f7-swipeout-button', f7SwipeoutButton); Vue.component('f7-swiper-slide', f7SwiperSlide); Vue.component('f7-swiper', f7Swiper); Vue.component('f7-tab', f7Tab); Vue.component('f7-tabs', f7Tabs); Vue.component('f7-toggle', f7Toggle); Vue.component('f7-toolbar', f7Toolbar); Vue.component('f7-view', f7View); Vue.component('f7-views', f7Views); // 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;