Skip to content
Snippets Groups Projects
App.js 4.19 KiB
Newer Older
  • Learn to ignore specific revisions
  • lain's avatar
    lain committed
    import UserPanel from './components/user_panel/user_panel.vue'
    
    lain's avatar
    lain committed
    import NavPanel from './components/nav_panel/nav_panel.vue'
    
    lain's avatar
    lain committed
    import Notifications from './components/notifications/notifications.vue'
    
    Eugenij's avatar
    Eugenij committed
    import SearchBar from './components/search_bar/search_bar.vue'
    
    import InstanceSpecificPanel from './components/instance_specific_panel/instance_specific_panel.vue'
    
    hakabahitoyo's avatar
    hakabahitoyo committed
    import FeaturesPanel from './components/features_panel/features_panel.vue'
    
    Hakaba Hitoyo's avatar
    Hakaba Hitoyo committed
    import WhoToFollowPanel from './components/who_to_follow_panel/who_to_follow_panel.vue'
    
    lain's avatar
    lain committed
    import ChatPanel from './components/chat_panel/chat_panel.vue'
    
    import MediaModal from './components/media_modal/media_modal.vue'
    
    import SideDrawer from './components/side_drawer/side_drawer.vue'
    
    import MobilePostStatusModal from './components/mobile_post_status_modal/mobile_post_status_modal.vue'
    
    import MobileNav from './components/mobile_nav/mobile_nav.vue'
    
    Tae Hoon's avatar
    Tae Hoon committed
    import UserReportingModal from './components/user_reporting_modal/user_reporting_modal.vue'
    
    import { windowWidth } from './services/window_utils/window_utils'
    
    lain's avatar
    .
    lain committed
    
    export default {
      name: 'app',
      components: {
    
    lain's avatar
    lain committed
        UserPanel,
    
    lain's avatar
    lain committed
        NavPanel,
    
    lain's avatar
    lain committed
        Notifications,
    
    Eugenij's avatar
    Eugenij committed
        SearchBar,
    
    Hakaba Hitoyo's avatar
    Hakaba Hitoyo committed
        InstanceSpecificPanel,
    
    hakabahitoyo's avatar
    hakabahitoyo committed
        FeaturesPanel,
    
    hakabahitoyo's avatar
    hakabahitoyo committed
        WhoToFollowPanel,
    
        MobilePostStatusModal,
    
    Tae Hoon's avatar
    Tae Hoon committed
        MobileNav,
        UserReportingModal
    
    lain's avatar
    lain committed
      },
    
    lain's avatar
    lain committed
      data: () => ({
    
    Eugenij's avatar
    Eugenij committed
        searchBarHidden: true,
    
        supportsMask: window.CSS && window.CSS.supports && (
          window.CSS.supports('mask-size', 'contain') ||
            window.CSS.supports('-webkit-mask-size', 'contain') ||
            window.CSS.supports('-moz-mask-size', 'contain') ||
            window.CSS.supports('-ms-mask-size', 'contain') ||
            window.CSS.supports('-o-mask-size', 'contain')
    
    Tae Hoon's avatar
    Tae Hoon committed
        )
    
    lain's avatar
    lain committed
      }),
    
      created () {
        // Load the locale from the storage
        this.$i18n.locale = this.$store.state.config.interfaceLanguage
    
        window.addEventListener('resize', this.updateMobileState)
      },
      destroyed () {
        window.removeEventListener('resize', this.updateMobileState)
    
    lain's avatar
    lain committed
      computed: {
    
    lain's avatar
    lain committed
        currentUser () { return this.$store.state.users.currentUser },
    
    lain's avatar
    lain committed
        background () {
    
    HJ's avatar
    HJ committed
          return this.currentUser.background_image || this.$store.state.instance.background
    
    lain's avatar
    lain committed
        },
    
    HJ's avatar
    HJ committed
        enableMask () { return this.supportsMask && this.$store.state.instance.logoMask },
    
        logoStyle () {
          return {
            'visibility': this.enableMask ? 'hidden' : 'visible'
          }
        },
        logoMaskStyle () {
          return this.enableMask ? {
    
    HJ's avatar
    HJ committed
            'mask-image': `url(${this.$store.state.instance.logo})`
    
          } : {
            'background-color': this.enableMask ? '' : 'transparent'
          }
        },
        logoBgStyle () {
          return Object.assign({
    
            'margin': `${this.$store.state.instance.logoMargin} 0`,
    
    Eugenij's avatar
    Eugenij committed
            opacity: this.searchBarHidden ? 1 : 0
    
          }, this.enableMask ? {} : {
            'background-color': this.enableMask ? '' : 'transparent'
          })
        },
    
    HJ's avatar
    HJ committed
        logo () { return this.$store.state.instance.logo },
    
    Tae Hoon's avatar
    Tae Hoon committed
        bgStyle () {
    
          return {
            'background-image': `url(${this.background})`
          }
        },
    
        bgAppStyle () {
          return {
            '--body-background-image': `url(${this.background})`
          }
        },
    
    HJ's avatar
    HJ committed
        sitename () { return this.$store.state.instance.name },
    
    Hakaba Hitoyo's avatar
    Hakaba Hitoyo committed
        chat () { return this.$store.state.chat.channel.state === 'joined' },
    
    HJ's avatar
    HJ committed
        suggestionsEnabled () { return this.$store.state.instance.suggestionsEnabled },
    
        showInstanceSpecificPanel () {
          return this.$store.state.instance.showInstanceSpecificPanel &&
            !this.$store.state.config.hideISP &&
            this.$store.state.instance.instanceSpecificPanelContent
        },
    
        showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel },
        isMobileLayout () { return this.$store.state.interface.mobileLayout }
    
    lain's avatar
    lain committed
      },
      methods: {
    
        scrollToTop () {
          window.scrollTo(0, 0)
    
    lain's avatar
    lain committed
        },
        logout () {
    
          this.$router.replace('/main/public')
    
    lain's avatar
    lain committed
          this.$store.dispatch('logout')
    
    Eugenij's avatar
    Eugenij committed
        onSearchBarToggled (hidden) {
          this.searchBarHidden = hidden
    
        updateMobileState () {
    
          const mobileLayout = windowWidth() <= 800
          const changed = mobileLayout !== this.isMobileLayout
    
          if (changed) {
    
            this.$store.dispatch('setMobileLayout', mobileLayout)
    
    lain's avatar
    lain committed
        }
    
    lain's avatar
    .
    lain committed
      }
    }