require('./polyfill'); 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"); 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.'); } 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 >= 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: [ ['1977','filter-1977'], ['Aden','filter-aden'], ['Amaro','filter-amaro'], ['Ashby','filter-ashby'], ['Brannan','filter-brannan'], ['Brooklyn','filter-brooklyn'], ['Charmes','filter-charmes'], ['Clarendon','filter-clarendon'], ['Crema','filter-crema'], ['Dogpatch','filter-dogpatch'], ['Earlybird','filter-earlybird'], ['Gingham','filter-gingham'], ['Ginza','filter-ginza'], ['Hefe','filter-hefe'], ['Helena','filter-helena'], ['Hudson','filter-hudson'], ['Inkwell','filter-inkwell'], ['Kelvin','filter-kelvin'], ['Kuno','filter-juno'], ['Lark','filter-lark'], ['Lo-Fi','filter-lofi'], ['Ludwig','filter-ludwig'], ['Maven','filter-maven'], ['Mayfair','filter-mayfair'], ['Moon','filter-moon'], ['Nashville','filter-nashville'], ['Perpetua','filter-perpetua'], ['Poprocket','filter-poprocket'], ['Reyes','filter-reyes'], ['Rise','filter-rise'], ['Sierra','filter-sierra'], ['Skyline','filter-skyline'], ['Slumber','filter-slumber'], ['Stinson','filter-stinson'], ['Sutro','filter-sutro'], ['Toaster','filter-toaster'], ['Valencia','filter-valencia'], ['Vesper','filter-vesper'], ['Walden','filter-walden'], ['Willow','filter-willow'], ['X-Pro II','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 '