123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891 |
- 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 VueMasonry from 'vue-masonry-css';
- 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(VueMasonry);
- Vue.use(VueI18n);
- Vue.use(VueTimeago, {
- name: 'Timeago',
- locale: 'en'
- });
- Vue.component(
- 'navbar',
- require('./../components/partials/navbar.vue').default
- );
- Vue.component(
- 'notification-card',
- require('./components/NotificationCard.vue').default
- );
- 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(
- 'post-menu',
- require('./components/PostMenu.vue').default
- );
- // Vue.component(
- // 'announcements-card',
- // require('./components/AnnouncementsCard.vue').default
- // );
- Vue.component(
- 'story-component',
- require('./components/StoryTimelineComponent.vue').default
- );
- const HomeComponent = () => import(/* webpackChunkName: "home.chunk" */ "./../components/Home.vue");
- const ComposeComponent = () => import(/* webpackChunkName: "compose.chunk" */ "./../components/Compose.vue");
- const PostComponent = () => import(/* webpackChunkName: "post.chunk" */ "./../components/Post.vue");
- const ProfileComponent = () => import(/* webpackChunkName: "profile.chunk" */ "./../components/Profile.vue");
- const MemoriesComponent = () => import(/* webpackChunkName: "discover~memories.chunk" */ "./../components/discover/Memories.vue");
- const MyHashtagComponent = () => import(/* webpackChunkName: "discover~myhashtags.chunk" */ "./../components/discover/Hashtags.vue");
- const AccountInsightsComponent = () => import(/* webpackChunkName: "daci.chunk" */ "./../components/discover/Insights.vue");
- const DiscoverFindFriendsComponent = () => import(/* webpackChunkName: "discover~findfriends.chunk" */ "./../components/discover/FindFriends.vue");
- const DiscoverServerFeedComponent = () => import(/* webpackChunkName: "discover~serverfeed.chunk" */ "./../components/discover/ServerFeed.vue");
- const DiscoverSettingsComponent = () => import(/* webpackChunkName: "discover~settings.chunk" */ "./../components/discover/Settings.vue");
- const DiscoverComponent = () => import(/* webpackChunkName: "discover.chunk" */ "./../components/Discover.vue");
- const NotificationsComponent = () => import(/* webpackChunkName: "notifications.chunk" */ "./../components/Notifications.vue");
- const DirectComponent = () => import(/* webpackChunkName: "dms.chunk" */ "./../components/Direct.vue");
- const DirectMessageComponent = () => import(/* webpackChunkName: "dms~message.chunk" */ "./../components/DirectMessage.vue");
- const ProfileFollowersComponent = () => import(/* webpackChunkName: "profile~followers.bundle" */ "./../components/ProfileFollowers.vue");
- const ProfileFollowingComponent = () => import(/* webpackChunkName: "profile~following.bundle" */ "./../components/ProfileFollowing.vue");
- const HashtagComponent = () => import(/* webpackChunkName: "discover~hashtag.bundle" */ "./../components/Hashtag.vue");
- const NotFoundComponent = () => import(/* webpackChunkName: "error404.bundle" */ "./../components/NotFound.vue");
- // const HelpComponent = () => import(/* webpackChunkName: "help.bundle" */ "./../components/HelpComponent.vue");
- // const KnowledgebaseComponent = () => import(/* webpackChunkName: "kb.bundle" */ "./../components/Knowledgebase.vue");
- // const AboutComponent = () => import(/* webpackChunkName: "about.bundle" */ "./../components/About.vue");
- // const ContactComponent = () => import(/* webpackChunkName: "contact.bundle" */ "./../components/Contact.vue");
- const LanguageComponent = () => import(/* webpackChunkName: "i18n.bundle" */ "./../components/Language.vue");
- // const PrivacyComponent = () => import(/* webpackChunkName: "static~privacy.bundle" */ "./../components/Privacy.vue");
- // const TermsComponent = () => import(/* webpackChunkName: "static~tos.bundle" */ "./../components/Terms.vue");
- const ChangelogComponent = () => import(/* webpackChunkName: "changelog.bundle" */ "./../components/Changelog.vue");
- // import LiveComponent from "./../components/Live.vue";
- // import LivestreamsComponent from "./../components/Livestreams.vue";
- // import LivePlayerComponent from "./../components/LivePlayer.vue";
- // import LiveHelpComponent from "./../components/LiveHelp.vue";
- // import DriveComponent from "./../components/Drive.vue";
- // import SettingsComponent from "./../components/Settings.vue";
- // import ProfileComponent from "./components/ProfileNext.vue";
- // import VideosComponent from "./../components/Videos.vue";
- import GroupsComponent from "./../components/Groups.vue";
- import GroupFeedComponent from "./../components/GroupFeed.vue";
- import GroupDiscoverComponent from "./../components/GroupDiscover.vue";
- import GroupJoinsComponent from "./../components/GroupJoins.vue";
- import GroupNotificationsComponent from "./../components/GroupNotifications.vue";
- import GroupSearchComponent from "./../components/GroupSearch.vue";
- const CreateGroupComponent = () => import(/* webpackChunkName: "group.create" */ "./../components/GroupCreate.vue");
- const router = new VueRouter({
- mode: "history",
- linkActiveClass: "active",
- routes: [
- {
- path: "/i/web/timeline/:scope",
- name: 'timeline',
- component: HomeComponent,
- props: true
- },
- // {
- // path: "/i/web/timeline/local",
- // component: LocalTimeline
- // },
- // {
- // path: "/i/web/timeline/global",
- // component: GlobalTimeline
- // },
- // {
- // path: "/i/web/drive",
- // name: 'drive',
- // component: DriveComponent,
- // props: true
- // },
- {
- path: "/groups/feed",
- name: 'groups',
- component: GroupFeedComponent,
- },
- {
- path: "/groups/joins",
- name: 'groupjoins',
- component: GroupJoinsComponent,
- },
- {
- path: "/groups/discover",
- name: 'groupdiscover',
- component: GroupDiscoverComponent,
- props: true
- },
- {
- path: "/groups/notifications",
- name: 'groupnotify',
- component: GroupNotificationsComponent,
- },
- {
- path: "/groups/search",
- name: 'groupsearch',
- component: GroupSearchComponent,
- },
- {
- path: "/groups/create",
- name: 'groupscreate',
- component: CreateGroupComponent,
- },
- // {
- // path: "/i/web/groups",
- // name: 'groups',
- // component: GroupsComponent,
- // props: true
- // },
- {
- path: "/groups/:gid/p/:sid",
- component: () => import(/* webpackChunkName: "groups-post" */ './../components/GroupPost.vue'),
- props: true
- },
- {
- path: "/groups/:gid/user/:pid",
- component: () => import(/* webpackChunkName: "groups-profile" */ './../components/GroupProfile.vue'),
- props: true
- },
- {
- path: "/groups/:groupId/about",
- component: () => import(/* webpackChunkName: "groups-page-about" */ './../components/groups/Page/GroupAbout.vue'),
- props: true
- },
- {
- path: "/groups/:groupId/topics",
- component: () => import(/* webpackChunkName: "groups-page-topics" */ './../components/groups/Page/GroupTopics.vue'),
- props: true
- },
- {
- path: "/groups/:groupId/members",
- component: () => import(/* webpackChunkName: "groups-page-members" */ './../components/groups/Page/GroupMembers.vue'),
- props: true
- },
- {
- path: "/groups/:groupId/media",
- component: () => import(/* webpackChunkName: "groups-page-media" */ './../components/groups/Page/GroupMedia.vue'),
- props: true
- },
- {
- path: "/groups/:groupId",
- component: () => import(/* webpackChunkName: "groups-page" */ './../components/GroupPage.vue'),
- props: true
- },
- {
- path: "/i/web/post/:id",
- name: 'post',
- component: PostComponent,
- props: true
- },
- // {
- // path: "/i/web/profile/:id/live",
- // component: LivePlayerComponent,
- // props: true
- // },
- {
- path: "/i/web/profile/:id/followers",
- name: 'profile-followers',
- component: ProfileFollowersComponent,
- props: true
- },
- {
- path: "/i/web/profile/:id/following",
- name: 'profile-following',
- component: ProfileFollowingComponent,
- props: true
- },
- {
- path: "/i/web/profile/:id",
- name: 'profile',
- component: ProfileComponent,
- props: true
- },
- // {
- // path: "/i/web/videos",
- // component: VideosComponent
- // },
- {
- path: "/i/web/discover",
- component: DiscoverComponent
- },
- // {
- // path: "/i/web/stories",
- // component: HomeComponent
- // },
- // {
- // path: "/i/web/settings/*",
- // component: SettingsComponent,
- // props: true
- // },
- // {
- // path: "/i/web/settings",
- // component: SettingsComponent
- // },
- {
- path: "/i/web/compose",
- component: ComposeComponent
- },
- {
- path: "/i/web/notifications",
- component: NotificationsComponent
- },
- {
- path: "/i/web/direct/thread/:accountId",
- component: DirectMessageComponent,
- props: true
- },
- {
- path: "/i/web/direct",
- component: DirectComponent
- },
- // {
- // path: "/i/web/kb/:id",
- // name: "kb",
- // component: KnowledgebaseComponent,
- // props: true
- // },
- {
- path: "/i/web/hashtag/:id",
- name: "hashtag",
- component: HashtagComponent,
- props: true
- },
- // {
- // path: "/i/web/help",
- // component: HelpComponent
- // },
- // {
- // path: "/i/web/about",
- // component: AboutComponent
- // },
- // {
- // path: "/i/web/contact",
- // component: ContactComponent
- // },
- {
- path: "/i/web/language",
- component: LanguageComponent
- },
- // {
- // path: "/i/web/privacy",
- // component: PrivacyComponent
- // },
- // {
- // path: "/i/web/terms",
- // component: TermsComponent
- // },
- {
- path: "/i/web/whats-new",
- component: ChangelogComponent
- },
- {
- path: "/i/web/discover/my-memories",
- component: MemoriesComponent
- },
- {
- path: "/i/web/discover/my-hashtags",
- component: MyHashtagComponent
- },
- {
- path: "/i/web/discover/account-insights",
- component: AccountInsightsComponent
- },
- {
- path: "/i/web/discover/find-friends",
- component: DiscoverFindFriendsComponent
- },
- {
- path: "/i/web/discover/server-timelines",
- component: DiscoverServerFeedComponent
- },
- {
- path: "/i/web/discover/settings",
- component: DiscoverSettingsComponent
- },
- // {
- // path: "/i/web/livestreams",
- // component: LivestreamsComponent
- // },
- // {
- // path: "/i/web/live/help",
- // component: LiveHelpComponent
- // },
- // {
- // path: "/i/web/live/player",
- // component: LivePlayerComponent
- // },
- // {
- // path: "/i/web/live",
- // component: LiveComponent
- // },
- {
- path: "/i/web",
- component: HomeComponent,
- props: true
- },
- {
- path: "/i/web/*",
- 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: lss('hc', false),
- autoloadComments: lss('ac', true),
- newReactions: lss('nr', true),
- fixedHeight: lss('fh', false),
- profileLayout: lss('pl', 'grid'),
- showDMPrivacyWarning: lss('dmpwarn', 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) => {
- // let rel = state.relationships[id];
- // if(!rel || !rel.hasOwnProperty('id')) {
- // return axios.get('/api/pixelfed/v1/accounts/relationships', {
- // params: {
- // 'id[]': id
- // }
- // })
- // .then(res => {
- // let relationship = res.data;
- // // Vue.set(state.relationships, relationship.id, relationship);
- // state.commit('updateRelationship', res.data[0]);
- // return res.data[0];
- // })
- // .catch(err => {
- // return {};
- // })
- // } else {
- // return state.relationships[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
- });
- axios.get('/api/v1/custom_emojis')
- .then(res => {
- if(res && res.data && res.data.length) {
- store.commit('updateCustomEmoji', res.data);
- }
- });
- if(store.state.colorScheme) {
- const name = store.state.colorScheme == 'system' ? '' : (store.state.colorScheme == 'light' ? 'force-light-mode' : 'force-dark-mode');
- if(name != 'system') {
- document.querySelector("body").className = name;
- }
- }
- pixelfed.readmore = () => {
- $('.read-more').each(function(k,v) {
- let el = $(this);
- let attr = el.attr('data-readmore');
- if(typeof attr !== typeof undefined && attr !== false) {
- return;
- }
- el.readmore({
- collapsedHeight: 45,
- heightMargin: 48,
- moreLink: '<a href="#" class="d-block small font-weight-bold text-dark text-center">Show more</a>',
- lessLink: '<a href="#" class="d-block small font-weight-bold text-dark text-center">Show less</a>',
- });
- });
- };
- try {
- document.createEvent("TouchEvent");
- $('body').addClass('touch');
- } catch (e) {
- }
- window.App = window.App || {};
- // window.App.redirect = function() {
- // document.querySelectorAll('a').forEach(function(i,k) {
- // let a = i.getAttribute('href');
- // if(a && a.length > 5 && a.startsWith('https://')) {
- // let url = new URL(a);
- // if(url.host !== window.location.host && url.pathname !== '/i/redirect') {
- // i.setAttribute('href', '/i/redirect?url=' + encodeURIComponent(a));
- // }
- // }
- // });
- // }
- // window.App.boot = function() {
- // new Vue({ el: '#content'});
- // }
- // window.addEventListener("load", () => {
- // if ("serviceWorker" in navigator) {
- // navigator.serviceWorker.register("/sw.js");
- // }
- // });
- window.App.util = {
- compose: {
- post: (function() {
- let path = window.location.pathname;
- let whitelist = [
- '/',
- '/timeline/public'
- ];
- if(whitelist.includes(path)) {
- $('#composeModal').modal('show');
- } else {
- window.location.href = '/?a=co';
- }
- }),
- circle: (function() {
- console.log('Unsupported method.');
- }),
- collection: (function() {
- console.log('Unsupported method.');
- }),
- loop: (function() {
- console.log('Unsupported method.');
- }),
- story: (function() {
- console.log('Unsupported method.');
- }),
- },
- time: (function() {
- return new Date;
- }),
- version: 1,
- format: {
- count: (function(count = 0, locale = 'en-GB', notation = 'compact') {
- if(count < 1) {
- return 0;
- }
- return new Intl.NumberFormat(locale, { notation: notation , compactDisplay: "short" }).format(count);
- }),
- timeAgo: (function(ts) {
- let date = Date.parse(ts);
- let seconds = Math.floor((new Date() - date) / 1000);
- let interval = Math.floor(seconds / 63072000);
- if (interval < 0) {
- return "0s";
- }
- if (interval >= 1) {
- return interval + "y";
- }
- interval = Math.floor(seconds / 604800);
- if (interval >= 1) {
- return interval + "w";
- }
- interval = Math.floor(seconds / 86400);
- if (interval >= 1) {
- return interval + "d";
- }
- interval = Math.floor(seconds / 3600);
- if (interval >= 1) {
- return interval + "h";
- }
- interval = Math.floor(seconds / 60);
- if (interval >= 1) {
- return interval + "m";
- }
- return Math.floor(seconds) + "s";
- }),
- timeAhead: (function(ts, short = true) {
- let date = Date.parse(ts);
- let diff = date - Date.parse(new Date());
- let seconds = Math.floor((diff) / 1000);
- let interval = Math.floor(seconds / 63072000);
- if (interval >= 1) {
- return interval + (short ? "y" : " years");
- }
- interval = Math.floor(seconds / 604800);
- if (interval >= 1) {
- return interval + (short ? "w" : " weeks");
- }
- interval = Math.floor(seconds / 86400);
- if (interval >= 1) {
- return interval + (short ? "d" : " days");
- }
- interval = Math.floor(seconds / 3600);
- if (interval >= 1) {
- return interval + (short ? "h" : " hours");
- }
- interval = Math.floor(seconds / 60);
- if (interval >= 1) {
- return interval + (short ? "m" : " minutes");
- }
- return Math.floor(seconds) + (short ? "s" : " seconds");
- }),
- rewriteLinks: (function(i) {
- let tag = i.innerText;
- if(i.href.startsWith(window.location.origin)) {
- return i.href;
- }
- if(tag.startsWith('#') == true) {
- tag = '/discover/tags/' + tag.substr(1) +'?src=rph';
- } else if(tag.startsWith('@') == true) {
- tag = '/' + i.innerText + '?src=rpp';
- } else {
- tag = '/i/redirect?url=' + encodeURIComponent(tag);
- }
- return tag;
- })
- },
- filters: [
- ['1984','filter-1977'],
- ['Azen','filter-aden'],
- ['Astairo','filter-amaro'],
- ['Grassbee','filter-ashby'],
- ['Bookrun','filter-brannan'],
- ['Borough','filter-brooklyn'],
- ['Farms','filter-charmes'],
- ['Hairsadone','filter-clarendon'],
- ['Cleana ','filter-crema'],
- ['Catpatch','filter-dogpatch'],
- ['Earlyworm','filter-earlybird'],
- ['Plaid','filter-gingham'],
- ['Kyo','filter-ginza'],
- ['Yefe','filter-hefe'],
- ['Goddess','filter-helena'],
- ['Yards','filter-hudson'],
- ['Quill','filter-inkwell'],
- ['Rankine','filter-kelvin'],
- ['Juno','filter-juno'],
- ['Mark','filter-lark'],
- ['Chill','filter-lofi'],
- ['Van','filter-ludwig'],
- ['Apache','filter-maven'],
- ['May','filter-mayfair'],
- ['Ceres','filter-moon'],
- ['Knoxville','filter-nashville'],
- ['Felicity','filter-perpetua'],
- ['Sandblast','filter-poprocket'],
- ['Daisy','filter-reyes'],
- ['Elevate','filter-rise'],
- ['Nevada','filter-sierra'],
- ['Futura','filter-skyline'],
- ['Sleepy','filter-slumber'],
- ['Steward','filter-stinson'],
- ['Savoy','filter-sutro'],
- ['Blaze','filter-toaster'],
- ['Apricot','filter-valencia'],
- ['Gloming','filter-vesper'],
- ['Walter','filter-walden'],
- ['Poplar','filter-willow'],
- ['Xenon','filter-xpro-ii']
- ],
- filterCss: {
- 'filter-1977': 'sepia(.5) hue-rotate(-30deg) saturate(1.4)',
- 'filter-aden': 'sepia(.2) brightness(1.15) saturate(1.4)',
- 'filter-amaro': 'sepia(.35) contrast(1.1) brightness(1.2) saturate(1.3)',
- 'filter-ashby': 'sepia(.5) contrast(1.2) saturate(1.8)',
- 'filter-brannan': 'sepia(.4) contrast(1.25) brightness(1.1) saturate(.9) hue-rotate(-2deg)',
- 'filter-brooklyn': 'sepia(.25) contrast(1.25) brightness(1.25) hue-rotate(5deg)',
- 'filter-charmes': 'sepia(.25) contrast(1.25) brightness(1.25) saturate(1.35) hue-rotate(-5deg)',
- 'filter-clarendon': 'sepia(.15) contrast(1.25) brightness(1.25) hue-rotate(5deg)',
- 'filter-crema': 'sepia(.5) contrast(1.25) brightness(1.15) saturate(.9) hue-rotate(-2deg)',
- 'filter-dogpatch': 'sepia(.35) saturate(1.1) contrast(1.5)',
- 'filter-earlybird': 'sepia(.25) contrast(1.25) brightness(1.15) saturate(.9) hue-rotate(-5deg)',
- 'filter-gingham': 'contrast(1.1) brightness(1.1)',
- 'filter-ginza': 'sepia(.25) contrast(1.15) brightness(1.2) saturate(1.35) hue-rotate(-5deg)',
- 'filter-hefe': 'sepia(.4) contrast(1.5) brightness(1.2) saturate(1.4) hue-rotate(-10deg)',
- 'filter-helena': 'sepia(.5) contrast(1.05) brightness(1.05) saturate(1.35)',
- 'filter-hudson': 'sepia(.25) contrast(1.2) brightness(1.2) saturate(1.05) hue-rotate(-15deg)',
- 'filter-inkwell': 'brightness(1.25) contrast(.85) grayscale(1)',
- 'filter-kelvin': 'sepia(.15) contrast(1.5) brightness(1.1) hue-rotate(-10deg)',
- 'filter-juno': 'sepia(.35) contrast(1.15) brightness(1.15) saturate(1.8)',
- 'filter-lark': 'sepia(.25) contrast(1.2) brightness(1.3) saturate(1.25)',
- 'filter-lofi': 'saturate(1.1) contrast(1.5)',
- 'filter-ludwig': 'sepia(.25) contrast(1.05) brightness(1.05) saturate(2)',
- 'filter-maven': 'sepia(.35) contrast(1.05) brightness(1.05) saturate(1.75)',
- 'filter-mayfair': 'contrast(1.1) brightness(1.15) saturate(1.1)',
- 'filter-moon': 'brightness(1.4) contrast(.95) saturate(0) sepia(.35)',
- 'filter-nashville': 'sepia(.25) contrast(1.5) brightness(.9) hue-rotate(-15deg)',
- 'filter-perpetua': 'contrast(1.1) brightness(1.25) saturate(1.1)',
- 'filter-poprocket': 'sepia(.15) brightness(1.2)',
- 'filter-reyes': 'sepia(.75) contrast(.75) brightness(1.25) saturate(1.4)',
- 'filter-rise': 'sepia(.25) contrast(1.25) brightness(1.2) saturate(.9)',
- 'filter-sierra': 'sepia(.25) contrast(1.5) brightness(.9) hue-rotate(-15deg)',
- 'filter-skyline': 'sepia(.15) contrast(1.25) brightness(1.25) saturate(1.2)',
- 'filter-slumber': 'sepia(.35) contrast(1.25) saturate(1.25)',
- 'filter-stinson': 'sepia(.35) contrast(1.25) brightness(1.1) saturate(1.25)',
- 'filter-sutro': 'sepia(.4) contrast(1.2) brightness(.9) saturate(1.4) hue-rotate(-10deg)',
- 'filter-toaster': 'sepia(.25) contrast(1.5) brightness(.95) hue-rotate(-15deg)',
- 'filter-valencia': 'sepia(.25) contrast(1.1) brightness(1.1)',
- 'filter-vesper': 'sepia(.35) contrast(1.15) brightness(1.2) saturate(1.3)',
- 'filter-walden': 'sepia(.35) contrast(.8) brightness(1.25) saturate(1.4)',
- 'filter-willow': 'brightness(1.2) contrast(.85) saturate(.05) sepia(.2)',
- 'filter-xpro-ii': 'sepia(.45) contrast(1.25) brightness(1.75) saturate(1.3) hue-rotate(-5deg)'
- },
- emoji: ['😂','💯','❤️','🙌','👏','👌','😍','😯','😢','😅','😁','🙂','😎','😀','🤣','😃','😄','😆','😉','😊','😋','😘','😗','😙','😚','🤗','🤩','🤔','🤨','😐','😑','😶','🙄','😏','😣','😥','😮','🤐','😪','😫','😴','😌','😛','😜','😝','🤤','😒','😓','😔','😕','🙃','🤑','😲','🙁','😖','😞','😟','😤','😭','😦','😧','😨','😩','🤯','😬','😰','😱','😳','🤪','😵','😡','😠','🤬','😷','🤒','🤕','🤢','🤮','🤧','😇','🤠','🤡','🤥','🤫','🤭','🧐','🤓','😈','👿','👹','👺','💀','👻','👽','🤖','💩','😺','😸','😹','😻','😼','😽','🙀','😿','😾','🤲','👐','🤝','👍','👎','👊','✊','🤛','🤜','🤞','✌️','🤟','🤘','👈','👉','👆','👇','☝️','✋','🤚','🖐','🖖','👋','🤙','💪','🖕','✍️','🙏','💍','💄','💋','👄','👅','👂','👃','👣','👁','👀','🧠','🗣','👤','👥'
- ],
- embed: {
- post: (function(url, caption = true, likes = false, layout = 'full') {
- let u = url + '/embed?';
- u += caption ? 'caption=true&' : 'caption=false&';
- u += likes ? 'likes=true&' : 'likes=false&';
- u += layout == 'compact' ? 'layout=compact' : 'layout=full';
- return '<iframe title="Pixelfed Post Embed" src="'+u+'" class="pixelfed__embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script async defer src="'+window.location.origin +'/embed.js"><\/script>';
- }),
- profile: (function(url) {
- let u = url + '/embed';
- return '<iframe title="Pixelfed Profile Embed" src="'+u+'" class="pixelfed__embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script async defer src="'+window.location.origin +'/embed.js"><\/script>';
- })
- },
- clipboard: (function(data) {
- return navigator.clipboard.writeText(data);
- }),
- navatar: (function() {
- $('#navbarDropdown .far').addClass('d-none');
- $('#navbarDropdown img').attr('src',window._sharedData.curUser.avatar)
- .removeClass('d-none')
- .addClass('rounded-circle border shadow')
- .attr('width', 34).attr('height', 34);
- })
- };
- const warningTitleCSS = 'color:red; font-size:60px; font-weight: bold; -webkit-text-stroke: 1px black;';
- const warningDescCSS = 'font-size: 18px;';
- console.log('%cStop!', warningTitleCSS);
- console.log("%cThis is a browser feature intended for developers. If someone told you to copy and paste something here to enable a Pixelfed feature or \"hack\" someone's account, it is a scam and will give them access to your Pixelfed account.", warningDescCSS);
|