Skip to content
Snippets Groups Projects
App.js 3.45 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'
    
    lain's avatar
    lain committed
    import UserFinder from './components/user_finder/user_finder.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 { unseenNotificationsFromStore } from './services/notification_utils/notification_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,
    
    lain's avatar
    lain committed
        UserFinder,
    
    Hakaba Hitoyo's avatar
    Hakaba Hitoyo committed
        InstanceSpecificPanel,
    
    hakabahitoyo's avatar
    hakabahitoyo committed
        FeaturesPanel,
    
    hakabahitoyo's avatar
    hakabahitoyo committed
        WhoToFollowPanel,
    
    lain's avatar
    lain committed
      },
    
    lain's avatar
    lain committed
      data: () => ({
    
        finderHidden: 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')
    
    lain's avatar
    lain committed
      }),
    
      created () {
        // Load the locale from the storage
        this.$i18n.locale = this.$store.state.config.interfaceLanguage
      },
    
    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`,
            opacity: this.finderHidden ? 1 : 0
    
          }, this.enableMask ? {} : {
            'background-color': this.enableMask ? '' : 'transparent'
          })
        },
    
    HJ's avatar
    HJ committed
        logo () { return this.$store.state.instance.logo },
    
        style () {
          return {
            '--body-background-image': `url(${this.background})`,
            '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 },
        unseenNotifications () {
          return unseenNotificationsFromStore(this.$store)
        },
        unseenNotificationsCount () {
          return this.unseenNotifications.length
        }
    
    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')
    
        },
        onFinderToggled (hidden) {
          this.finderHidden = hidden
    
        },
        toggleMobileSidebar () {
    
          this.$refs.sideDrawer.toggleDrawer()
    
    lain's avatar
    lain committed
        }
    
    lain's avatar
    .
    lain committed
      }
    }