commit
9e9f7a6ea1
1
.env.production
Normal file
1
.env.production
Normal file
|
@ -0,0 +1 @@
|
||||||
|
VITE_APP_ENV=production
|
13
index.html
13
index.html
|
@ -6,7 +6,7 @@
|
||||||
name="viewport"
|
name="viewport"
|
||||||
content="width=device-width, initial-scale=1, viewport-fit=cover"
|
content="width=device-width, initial-scale=1, viewport-fit=cover"
|
||||||
/>
|
/>
|
||||||
<title>Phanpy</title>
|
<title><{ VITE_CLIENT_NAME }></title>
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="Minimalistic opinionated Mastodon web client"
|
content="Minimalistic opinionated Mastodon web client"
|
||||||
|
@ -14,10 +14,10 @@
|
||||||
<meta name="color-scheme" content="dark light" />
|
<meta name="color-scheme" content="dark light" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
||||||
<meta name="apple-mobile-web-app-title" content="Phanpy" />
|
<meta name="apple-mobile-web-app-title" content="<{ VITE_CLIENT_NAME }>" />
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
<meta name="mobile-web-app-capable" content="yes" />
|
<meta name="mobile-web-app-capable" content="yes" />
|
||||||
<link rel="canonical" href="https://phanpy.social" />
|
<link rel="canonical" href="<{ VITE_WEBSITE }>" />
|
||||||
<meta
|
<meta
|
||||||
name="theme-color"
|
name="theme-color"
|
||||||
content="#fff"
|
content="#fff"
|
||||||
|
@ -28,13 +28,16 @@
|
||||||
content="#242526"
|
content="#242526"
|
||||||
media="(prefers-color-scheme: dark)"
|
media="(prefers-color-scheme: dark)"
|
||||||
/>
|
/>
|
||||||
<script>
|
<script vite-if="import.meta.env.VITE_APP_ENV === production">
|
||||||
|
var isDev = /dev\./.test(window.location.hostname);
|
||||||
var _rollbarConfig = {
|
var _rollbarConfig = {
|
||||||
accessToken: 'ec3e07829d324a29abf6c83472a9740d',
|
accessToken: 'ec3e07829d324a29abf6c83472a9740d',
|
||||||
captureUncaught: true,
|
captureUncaught: true,
|
||||||
captureUnhandledRejections: true,
|
captureUnhandledRejections: true,
|
||||||
|
enabled: isDev,
|
||||||
|
hostSafeList: ['dev.phanpy.social', 'phanpy.social'],
|
||||||
payload: {
|
payload: {
|
||||||
environment: 'production',
|
environment: isDev ? 'development' : 'production',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
// Rollbar Snippet
|
// Rollbar Snippet
|
||||||
|
|
34
package-lock.json
generated
34
package-lock.json
generated
|
@ -22,7 +22,7 @@
|
||||||
"string-length": "~5.0.1",
|
"string-length": "~5.0.1",
|
||||||
"toastify-js": "~1.12.0",
|
"toastify-js": "~1.12.0",
|
||||||
"use-resize-observer": "~9.1.0",
|
"use-resize-observer": "~9.1.0",
|
||||||
"valtio": "~1.7.6"
|
"valtio": "~1.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@preact/preset-vite": "~2.5.0",
|
"@preact/preset-vite": "~2.5.0",
|
||||||
|
@ -32,6 +32,7 @@
|
||||||
"postcss-dark-theme-class": "~0.7.3",
|
"postcss-dark-theme-class": "~0.7.3",
|
||||||
"twitter-text": "~3.1.0",
|
"twitter-text": "~3.1.0",
|
||||||
"vite": "~4.0.3",
|
"vite": "~4.0.3",
|
||||||
|
"vite-plugin-html-env": "~1.2.7",
|
||||||
"vite-plugin-pwa": "~0.14.0",
|
"vite-plugin-pwa": "~0.14.0",
|
||||||
"workbox-cacheable-response": "~6.5.4",
|
"workbox-cacheable-response": "~6.5.4",
|
||||||
"workbox-expiration": "~6.5.4",
|
"workbox-expiration": "~6.5.4",
|
||||||
|
@ -5318,9 +5319,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/valtio": {
|
"node_modules/valtio": {
|
||||||
"version": "1.7.6",
|
"version": "1.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/valtio/-/valtio-1.7.6.tgz",
|
"resolved": "https://registry.npmjs.org/valtio/-/valtio-1.8.0.tgz",
|
||||||
"integrity": "sha512-zsGrCCYOIpy8egQxftduFyJusF/BMu3CganhHKUOE/I6t6V6yA1MDfZZkrYoWYCGkC3rSBYcIHEEsoYQM9lV2w==",
|
"integrity": "sha512-lNw7wM0Qb9iBzXMju+XCn+UiIlf5uCe5pcI8XRqcvxEZ/mnRXyKXoOodPDKB8cIAVekA3Q3zWA7rboCdS4ea7g==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"proxy-compare": "2.3.0",
|
"proxy-compare": "2.3.0",
|
||||||
"use-sync-external-store": "1.2.0"
|
"use-sync-external-store": "1.2.0"
|
||||||
|
@ -5406,6 +5407,18 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vite-plugin-html-env": {
|
||||||
|
"version": "1.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/vite-plugin-html-env/-/vite-plugin-html-env-1.2.7.tgz",
|
||||||
|
"integrity": "sha512-vdTnKtuBeB8Zp93DCbN0Qjf4odW2msVRq45r7lGKA6nwQGJFj6YemU54u3xPPkvDeZhG8DEEU64xbLwzVEBilQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vite": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/vite-plugin-pwa": {
|
"node_modules/vite-plugin-pwa": {
|
||||||
"version": "0.14.0",
|
"version": "0.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.0.tgz",
|
||||||
|
@ -9576,9 +9589,9 @@
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
"valtio": {
|
"valtio": {
|
||||||
"version": "1.7.6",
|
"version": "1.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/valtio/-/valtio-1.7.6.tgz",
|
"resolved": "https://registry.npmjs.org/valtio/-/valtio-1.8.0.tgz",
|
||||||
"integrity": "sha512-zsGrCCYOIpy8egQxftduFyJusF/BMu3CganhHKUOE/I6t6V6yA1MDfZZkrYoWYCGkC3rSBYcIHEEsoYQM9lV2w==",
|
"integrity": "sha512-lNw7wM0Qb9iBzXMju+XCn+UiIlf5uCe5pcI8XRqcvxEZ/mnRXyKXoOodPDKB8cIAVekA3Q3zWA7rboCdS4ea7g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"proxy-compare": "2.3.0",
|
"proxy-compare": "2.3.0",
|
||||||
"use-sync-external-store": "1.2.0"
|
"use-sync-external-store": "1.2.0"
|
||||||
|
@ -9597,6 +9610,13 @@
|
||||||
"rollup": "^3.7.0"
|
"rollup": "^3.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vite-plugin-html-env": {
|
||||||
|
"version": "1.2.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/vite-plugin-html-env/-/vite-plugin-html-env-1.2.7.tgz",
|
||||||
|
"integrity": "sha512-vdTnKtuBeB8Zp93DCbN0Qjf4odW2msVRq45r7lGKA6nwQGJFj6YemU54u3xPPkvDeZhG8DEEU64xbLwzVEBilQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
"vite-plugin-pwa": {
|
"vite-plugin-pwa": {
|
||||||
"version": "0.14.0",
|
"version": "0.14.0",
|
||||||
"resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.14.0.tgz",
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
"string-length": "~5.0.1",
|
"string-length": "~5.0.1",
|
||||||
"toastify-js": "~1.12.0",
|
"toastify-js": "~1.12.0",
|
||||||
"use-resize-observer": "~9.1.0",
|
"use-resize-observer": "~9.1.0",
|
||||||
"valtio": "~1.7.6"
|
"valtio": "~1.8.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@preact/preset-vite": "~2.5.0",
|
"@preact/preset-vite": "~2.5.0",
|
||||||
|
@ -34,6 +34,7 @@
|
||||||
"postcss-dark-theme-class": "~0.7.3",
|
"postcss-dark-theme-class": "~0.7.3",
|
||||||
"twitter-text": "~3.1.0",
|
"twitter-text": "~3.1.0",
|
||||||
"vite": "~4.0.3",
|
"vite": "~4.0.3",
|
||||||
|
"vite-plugin-html-env": "~1.2.7",
|
||||||
"vite-plugin-pwa": "~0.14.0",
|
"vite-plugin-pwa": "~0.14.0",
|
||||||
"workbox-cacheable-response": "~6.5.4",
|
"workbox-cacheable-response": "~6.5.4",
|
||||||
"workbox-expiration": "~6.5.4",
|
"workbox-expiration": "~6.5.4",
|
||||||
|
|
|
@ -51,6 +51,8 @@ const menu = document.createElement('ul');
|
||||||
menu.role = 'listbox';
|
menu.role = 'listbox';
|
||||||
menu.className = 'text-expander-menu';
|
menu.className = 'text-expander-menu';
|
||||||
|
|
||||||
|
const DEFAULT_LANG = 'en';
|
||||||
|
|
||||||
function Compose({
|
function Compose({
|
||||||
onClose,
|
onClose,
|
||||||
replyToStatus,
|
replyToStatus,
|
||||||
|
@ -104,7 +106,7 @@ function Compose({
|
||||||
const [visibility, setVisibility] = useState('public');
|
const [visibility, setVisibility] = useState('public');
|
||||||
const [sensitive, setSensitive] = useState(false);
|
const [sensitive, setSensitive] = useState(false);
|
||||||
const [language, setLanguage] = useState(
|
const [language, setLanguage] = useState(
|
||||||
store.session.get('currentLanguage') || 'en',
|
store.session.get('currentLanguage') || DEFAULT_LANG,
|
||||||
);
|
);
|
||||||
const [mediaAttachments, setMediaAttachments] = useState([]);
|
const [mediaAttachments, setMediaAttachments] = useState([]);
|
||||||
const [poll, setPoll] = useState(null);
|
const [poll, setPoll] = useState(null);
|
||||||
|
@ -154,7 +156,7 @@ function Compose({
|
||||||
}
|
}
|
||||||
focusTextarea();
|
focusTextarea();
|
||||||
setVisibility(visibility);
|
setVisibility(visibility);
|
||||||
setLanguage(language);
|
setLanguage(language || DEFAULT_LANG);
|
||||||
setSensitive(sensitive);
|
setSensitive(sensitive);
|
||||||
}
|
}
|
||||||
if (draftStatus) {
|
if (draftStatus) {
|
||||||
|
@ -177,7 +179,7 @@ function Compose({
|
||||||
focusTextarea();
|
focusTextarea();
|
||||||
spoilerTextRef.current.value = spoilerText;
|
spoilerTextRef.current.value = spoilerText;
|
||||||
setVisibility(visibility);
|
setVisibility(visibility);
|
||||||
setLanguage(language);
|
setLanguage(language || DEFAULT_LANG);
|
||||||
setSensitive(sensitive);
|
setSensitive(sensitive);
|
||||||
setPoll(composablePoll);
|
setPoll(composablePoll);
|
||||||
setMediaAttachments(mediaAttachments);
|
setMediaAttachments(mediaAttachments);
|
||||||
|
@ -203,7 +205,7 @@ function Compose({
|
||||||
focusTextarea();
|
focusTextarea();
|
||||||
spoilerTextRef.current.value = spoilerText;
|
spoilerTextRef.current.value = spoilerText;
|
||||||
setVisibility(visibility);
|
setVisibility(visibility);
|
||||||
setLanguage(language);
|
setLanguage(language || DEFAULT_LANG);
|
||||||
setSensitive(sensitive);
|
setSensitive(sensitive);
|
||||||
setPoll(composablePoll);
|
setPoll(composablePoll);
|
||||||
setMediaAttachments(mediaAttachments);
|
setMediaAttachments(mediaAttachments);
|
||||||
|
@ -955,14 +957,14 @@ function Compose({
|
||||||
)}
|
)}
|
||||||
<label class="toolbar-button">
|
<label class="toolbar-button">
|
||||||
<span class="icon-text">
|
<span class="icon-text">
|
||||||
{supportedLanguagesMap[language].native}
|
{supportedLanguagesMap[language]?.native}
|
||||||
</span>
|
</span>
|
||||||
<select
|
<select
|
||||||
name="language"
|
name="language"
|
||||||
value={language}
|
value={language}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
const { value } = e.target;
|
const { value } = e.target;
|
||||||
setLanguage(value);
|
setLanguage(value || DEFAULT_LANG);
|
||||||
store.session.set('language', value);
|
store.session.set('language', value);
|
||||||
}}
|
}}
|
||||||
disabled={uiState === 'loading'}
|
disabled={uiState === 'loading'}
|
||||||
|
|
|
@ -83,11 +83,12 @@ function StatusPage({ id }) {
|
||||||
states.statuses.set(id, heroStatus);
|
states.statuses.set(id, heroStatus);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Silent fail if status is cached
|
// Silent fail if status is cached
|
||||||
|
console.error(e);
|
||||||
if (!hasStatus) {
|
if (!hasStatus) {
|
||||||
setUIState('error');
|
setUIState('error');
|
||||||
alert('Error fetching status');
|
alert('Error fetching status');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -2,6 +2,7 @@ import preact from '@preact/preset-vite';
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite';
|
import { defineConfig, loadEnv, splitVendorChunkPlugin } from 'vite';
|
||||||
|
import VitePluginHtmlEnv from 'vite-plugin-html-env';
|
||||||
import { VitePWA } from 'vite-plugin-pwa';
|
import { VitePWA } from 'vite-plugin-pwa';
|
||||||
|
|
||||||
const { VITE_CLIENT_NAME: CLIENT_NAME, NODE_ENV } = loadEnv(
|
const { VITE_CLIENT_NAME: CLIENT_NAME, NODE_ENV } = loadEnv(
|
||||||
|
@ -21,6 +22,7 @@ export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
preact(),
|
preact(),
|
||||||
splitVendorChunkPlugin(),
|
splitVendorChunkPlugin(),
|
||||||
|
VitePluginHtmlEnv(),
|
||||||
VitePWA({
|
VitePWA({
|
||||||
manifest: {
|
manifest: {
|
||||||
name: CLIENT_NAME,
|
name: CLIENT_NAME,
|
||||||
|
|
Loading…
Reference in a new issue