123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- require('./polyfill');
- import Vue from 'vue';
- window.Vue = Vue;
- import VueRouter from "vue-router";
- import Vuex from "vuex";
- import { sync } from "vuex-router-sync";
- import BootstrapVue from 'bootstrap-vue'
- import InfiniteLoading from 'vue-infinite-loading';
- import Loading from 'vue-loading-overlay';
- import VueTimeago from 'vue-timeago';
- import VueCarousel from 'vue-carousel';
- import VueBlurHash from 'vue-blurhash';
- import VueI18n from 'vue-i18n';
- window.pftxt = require('twitter-text');
- import 'vue-blurhash/dist/vue-blurhash.css'
- window.filesize = require('filesize');
- import swal from 'sweetalert';
- window._ = require('lodash');
- window.Popper = require('popper.js').default;
- window.pixelfed = window.pixelfed || {};
- window.$ = window.jQuery = require('jquery');
- require('bootstrap');
- window.axios = require('axios');
- window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
- require('readmore-js');
- window.blurhash = require("blurhash");
- $('[data-toggle="tooltip"]').tooltip()
- let token = document.head.querySelector('meta[name="csrf-token"]');
- if (token) {
- window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
- } else {
- console.error('CSRF token not found.');
- }
- Vue.use(VueRouter);
- Vue.use(Vuex);
- Vue.use(VueBlurHash);
- Vue.use(VueCarousel);
- Vue.use(BootstrapVue);
- Vue.use(InfiniteLoading);
- Vue.use(Loading);
- Vue.use(VueI18n);
- Vue.use(VueTimeago, {
- name: 'Timeago',
- locale: 'en'
- });
- Vue.component(
- 'photo-presenter',
- require('./components/presenter/PhotoPresenter.vue').default
- );
- Vue.component(
- 'video-presenter',
- require('./components/presenter/VideoPresenter.vue').default
- );
- Vue.component(
- 'photo-album-presenter',
- require('./components/presenter/PhotoAlbumPresenter.vue').default
- );
- Vue.component(
- 'video-album-presenter',
- require('./components/presenter/VideoAlbumPresenter.vue').default
- );
- Vue.component(
- 'mixed-album-presenter',
- require('./components/presenter/MixedAlbumPresenter.vue').default
- );
- Vue.component(
- 'navbar',
- require('./../components/landing/sections/nav.vue').default
- );
- Vue.component(
- 'footer-component',
- require('./../components/landing/sections/footer.vue').default
- );
- import IndexComponent from "./../components/landing/Index.vue";
- import DirectoryComponent from "./../components/landing/Directory.vue";
- import ExploreComponent from "./../components/landing/Explore.vue";
- import NotFoundComponent from "./../components/landing/NotFound.vue";
- const router = new VueRouter({
- mode: "history",
- linkActiveClass: "",
- linkExactActiveClass: "active",
- routes: [
- {
- path: "/",
- component: IndexComponent
- },
- {
- path: "/web/directory",
- component: DirectoryComponent
- },
- {
- path: "/web/explore",
- component: ExploreComponent
- },
- {
- path: "/*",
- component: NotFoundComponent,
- props: true
- },
- ],
- scrollBehavior(to, from, savedPosition) {
- if (to.hash) {
- return {
- selector: `[id='${to.hash.slice(1)}']`
- };
- } else {
- return { x: 0, y: 0 };
- }
- }
- });
- function lss(name, def) {
- let key = 'pf_m2s.' + name;
- let ls = window.localStorage;
- if(ls.getItem(key)) {
- let val = ls.getItem(key);
- if(['pl', 'color-scheme'].includes(name)) {
- return val;
- }
- return ['true', true].includes(val);
- }
- return def;
- }
- const store = new Vuex.Store({
- state: {
- version: 1,
- hideCounts: true,
- autoloadComments: false,
- newReactions: false,
- fixedHeight: false,
- profileLayout: 'grid',
- showDMPrivacyWarning: true,
- relationships: {},
- emoji: [],
- colorScheme: lss('color-scheme', 'system'),
- },
- getters: {
- getVersion: state => {
- return state.version;
- },
- getHideCounts: state => {
- return state.hideCounts;
- },
- getAutoloadComments: state => {
- return state.autoloadComments;
- },
- getNewReactions: state => {
- return state.newReactions;
- },
- getFixedHeight: state => {
- return state.fixedHeight;
- },
- getProfileLayout: state => {
- return state.profileLayout;
- },
- getRelationship: (state) => (id) => {
- return state.relationships[id];
- },
- getCustomEmoji: state => {
- return state.emoji;
- },
- getColorScheme: state => {
- return state.colorScheme;
- },
- getShowDMPrivacyWarning: state => {
- return state.showDMPrivacyWarning;
- }
- },
- mutations: {
- setVersion(state, value) {
- state.version = value;
- },
- setHideCounts(state, value) {
- localStorage.setItem('pf_m2s.hc', value);
- state.hideCounts = value;
- },
- setAutoloadComments(state, value) {
- localStorage.setItem('pf_m2s.ac', value);
- state.autoloadComments = value;
- },
- setNewReactions(state, value) {
- localStorage.setItem('pf_m2s.nr', value);
- state.newReactions = value;
- },
- setFixedHeight(state, value) {
- localStorage.setItem('pf_m2s.fh', value);
- state.fixedHeight = value;
- },
- setProfileLayout(state, value) {
- localStorage.setItem('pf_m2s.pl', value);
- state.profileLayout = value;
- },
- updateRelationship(state, relationships) {
- relationships.forEach((relationship) => {
- Vue.set(state.relationships, relationship.id, relationship)
- })
- },
- updateCustomEmoji(state, emojis) {
- state.emoji = emojis;
- },
- setColorScheme(state, value) {
- if(state.colorScheme == value) {
- return;
- }
- localStorage.setItem('pf_m2s.color-scheme', value);
- state.colorScheme = value;
- const name = value == 'system' ? '' : (value == 'light' ? 'force-light-mode' : 'force-dark-mode');
- document.querySelector("body").className = name;
- if(name != 'system') {
- const payload = name == 'force-dark-mode' ? { dark_mode: 'on' } : {};
- axios.post('/settings/labs', payload);
- }
- },
- setShowDMPrivacyWarning(state, value) {
- localStorage.setItem('pf_m2s.dmpwarn', value);
- state.showDMPrivacyWarning = value;
- }
- },
- });
- let i18nMessages = {
- en: require('./i18n/en.json'),
- ar: require('./i18n/ar.json'),
- ca: require('./i18n/ca.json'),
- de: require('./i18n/de.json'),
- el: require('./i18n/el.json'),
- es: require('./i18n/es.json'),
- eu: require('./i18n/eu.json'),
- fr: require('./i18n/fr.json'),
- he: require('./i18n/he.json'),
- gd: require('./i18n/gd.json'),
- gl: require('./i18n/gl.json'),
- id: require('./i18n/id.json'),
- it: require('./i18n/it.json'),
- ja: require('./i18n/ja.json'),
- nl: require('./i18n/nl.json'),
- pl: require('./i18n/pl.json'),
- pt: require('./i18n/pt.json'),
- ru: require('./i18n/ru.json'),
- uk: require('./i18n/uk.json'),
- vi: require('./i18n/vi.json'),
- };
- let locale = document.querySelector('html').getAttribute('lang');
- const i18n = new VueI18n({
- locale: locale, // set locale
- fallbackLocale: 'en',
- messages: i18nMessages
- });
- sync(store, router);
- const App = new Vue({
- el: '#content',
- i18n,
- router,
- store
- });
|