mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
@@ -2,13 +2,20 @@
|
||||
"appId": "plebchan.android",
|
||||
"appName": "plebchan",
|
||||
"webDir": "build",
|
||||
"bundledWebRuntime": false,
|
||||
"plugins": {
|
||||
"CapacitorHttp": {
|
||||
"enabled": true
|
||||
},
|
||||
"FileUploader": {
|
||||
"enabled": true
|
||||
},
|
||||
"StatusBar": {
|
||||
"style": "Dark",
|
||||
"backgroundColor": "#000000",
|
||||
"overlay": false
|
||||
},
|
||||
"EdgeToEdge": {
|
||||
"backgroundColor": "#000000"
|
||||
}
|
||||
},
|
||||
"server": {
|
||||
|
||||
@@ -2,5 +2,13 @@
|
||||
{
|
||||
"pkg": "@capacitor/app",
|
||||
"classpath": "com.capacitorjs.plugins.app.AppPlugin"
|
||||
},
|
||||
{
|
||||
"pkg": "@capacitor/status-bar",
|
||||
"classpath": "com.capacitorjs.plugins.statusbar.StatusBarPlugin"
|
||||
},
|
||||
{
|
||||
"pkg": "@capawesome/capacitor-android-edge-to-edge-support",
|
||||
"classpath": "io.capawesome.capacitorjs.plugins.androidedgetoedgesupport.EdgeToEdgePlugin"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -2,11 +2,14 @@ package plebchan.android;
|
||||
|
||||
import android.os.Bundle;
|
||||
import com.getcapacitor.BridgeActivity;
|
||||
import com.capacitorjs.plugins.statusbar.StatusBarPlugin;
|
||||
|
||||
public class MainActivity extends BridgeActivity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
registerPlugin(FileUploaderPlugin.class);
|
||||
super.onCreate(savedInstanceState);
|
||||
// Register custom and community plugins after initialization
|
||||
registerPlugin(FileUploaderPlugin.class);
|
||||
registerPlugin(StatusBarPlugin.class);
|
||||
}
|
||||
}
|
||||
+9
-2
@@ -4,14 +4,21 @@ const config: CapacitorConfig = {
|
||||
appId: 'plebchan.android',
|
||||
appName: 'plebchan',
|
||||
webDir: 'build',
|
||||
bundledWebRuntime: false,
|
||||
plugins: {
|
||||
CapacitorHttp: {
|
||||
enabled: true,
|
||||
},
|
||||
FileUploader: {
|
||||
enabled: true
|
||||
}
|
||||
},
|
||||
StatusBar: {
|
||||
style: 'Dark',
|
||||
backgroundColor: '#000000',
|
||||
overlay: false,
|
||||
},
|
||||
EdgeToEdge: {
|
||||
backgroundColor: '#000000',
|
||||
},
|
||||
},
|
||||
server: {
|
||||
androidScheme: 'https'
|
||||
|
||||
+21
-1
@@ -1,5 +1,5 @@
|
||||
import './log.js';
|
||||
import { app, BrowserWindow, Menu, MenuItem, Tray, shell, dialog, nativeTheme, ipcMain } from 'electron';
|
||||
import { app, BrowserWindow, Menu, MenuItem, Tray, shell, dialog, nativeTheme, ipcMain, clipboard } from 'electron';
|
||||
import isDev from 'electron-is-dev';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
@@ -321,3 +321,23 @@ app.on('window-all-closed', () => {
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
|
||||
// Handle request to copy text to clipboard
|
||||
ipcMain.handle('copy-to-clipboard', async (event, text) => {
|
||||
try {
|
||||
clipboard.writeText(text);
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('[Electron Main] Error copying to clipboard:', error);
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
});
|
||||
|
||||
// Handle request for platform info
|
||||
ipcMain.handle('get-platform', async () => {
|
||||
return {
|
||||
platform: process.platform,
|
||||
arch: process.arch,
|
||||
version: process.version,
|
||||
};
|
||||
});
|
||||
|
||||
@@ -16,4 +16,8 @@ contextBridge.exposeInMainWorld('defaultMediaIpfsGatewayUrl', 'http://localhost:
|
||||
ipcRenderer.on('plebbit-rpc-auth-key', (event, plebbitRpcAuthKey) => contextBridge.exposeInMainWorld('plebbitRpcAuthKey', plebbitRpcAuthKey));
|
||||
ipcRenderer.send('get-plebbit-rpc-auth-key');
|
||||
|
||||
contextBridge.exposeInMainWorld('electronApi', { isElectron: true });
|
||||
contextBridge.exposeInMainWorld('electronApi', {
|
||||
isElectron: true,
|
||||
copyToClipboard: (text) => ipcRenderer.invoke('copy-to-clipboard', text),
|
||||
getPlatform: () => ipcRenderer.invoke('get-platform'),
|
||||
});
|
||||
+3
-1
@@ -7,8 +7,10 @@
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@capacitor/app": "7.0.1",
|
||||
"@capacitor/status-bar": "7.0.1",
|
||||
"@capawesome/capacitor-android-edge-to-edge-support": "7.2.2",
|
||||
"@floating-ui/react": "0.26.1",
|
||||
"@plebbit/plebbit-react-hooks": "https://github.com/plebbit/plebbit-react-hooks.git#39cd7c09f1675949193498891fc448f68e42742b",
|
||||
"@plebbit/plebbit-react-hooks": "https://github.com/plebbit/plebbit-react-hooks.git#090e70bed5f799fc140a31a6f2123f9125954fde",
|
||||
"@react-spring/web": "9.7.5",
|
||||
"@testing-library/jest-dom": "5.14.1",
|
||||
"@testing-library/react": "13.0.0",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "رابط غير صالح",
|
||||
"no_link_provided": "لم يتم توفير رابط",
|
||||
"image_search": "البحث عن صورة",
|
||||
"view_on": "عرض على",
|
||||
"copy_link": "نسخ الرابط",
|
||||
"hide_post": "إخفاء المنشور",
|
||||
"hide_thread": "إخفاء الموضوع",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "البحث عن صورة على جوجل",
|
||||
"search_image_on_yandex": "البحث عن صورة على Yandex",
|
||||
"search_image_on_saucenao": "البحث عن صورة على SauceNAO",
|
||||
"view_on_client": "عرض على {{client}}",
|
||||
"expand_all_settings": "توسيع جميع الإعدادات",
|
||||
"collapse_all_settings": "طي جميع الإعدادات",
|
||||
"refresh": "تحديث",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "অবৈধ ইউআরএল",
|
||||
"no_link_provided": "কোনো লিঙ্ক উপস্থিত নেই",
|
||||
"image_search": "চিত্র অনুসন্ধান",
|
||||
"view_on": "উপর দেখুন",
|
||||
"copy_link": "লিংক অনুলিপি করুন",
|
||||
"hide_post": "পোস্ট লুকাও",
|
||||
"hide_thread": "থ্রেড লুকাও",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "গুগলে চিত্র অনুসন্ধান করুন",
|
||||
"search_image_on_yandex": "Yandexে চিত্র অনুসন্ধান করুন",
|
||||
"search_image_on_saucenao": "SauceNAO এ চিত্র অনুসন্ধান করুন",
|
||||
"view_on_client": "{{client}} উপর দেখুন",
|
||||
"expand_all_settings": "সমস্ত সেটিংস প্রসারিত করুন",
|
||||
"collapse_all_settings": "সমস্ত সেটিংস সঙ্কুচিত করুন",
|
||||
"refresh": "পুনরায় লোড করুন",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Neplatná adresa URL",
|
||||
"no_link_provided": "Není poskytnut žádný odkaz",
|
||||
"image_search": "hledání obrázku",
|
||||
"view_on": "zobrazit na",
|
||||
"copy_link": "kopírovat odkaz",
|
||||
"hide_post": "skrýt příspěvek",
|
||||
"hide_thread": "skrýt vlákno",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "hledat obrázek na Googlu",
|
||||
"search_image_on_yandex": "hledat obrázek na Yandexu",
|
||||
"search_image_on_saucenao": "hledat obrázek na SauceNAO",
|
||||
"view_on_client": "Zobrazit na {{client}}",
|
||||
"expand_all_settings": "Rozbalit všechna nastavení",
|
||||
"collapse_all_settings": "Sbalit všechna nastavení",
|
||||
"refresh": "Obnovit",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Ugyldig webadresse",
|
||||
"no_link_provided": "Ingen link angivet",
|
||||
"image_search": "billedsøgning",
|
||||
"view_on": "se på",
|
||||
"copy_link": "kopier link",
|
||||
"hide_post": "skjul post",
|
||||
"hide_thread": "skjul tråd",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "søg billede på Google",
|
||||
"search_image_on_yandex": "søg billede på Yandex",
|
||||
"search_image_on_saucenao": "søg billede på SauceNAO",
|
||||
"view_on_client": "Se på {{client}}",
|
||||
"expand_all_settings": "Udvid alle indstillinger",
|
||||
"collapse_all_settings": "Sammenklap alle indstillinger",
|
||||
"refresh": "Opdater",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Ungültige URL",
|
||||
"no_link_provided": "Kein Link angegeben",
|
||||
"image_search": "Bildersuche",
|
||||
"view_on": "anzeigen auf",
|
||||
"copy_link": "Link kopieren",
|
||||
"hide_post": "Beitrag ausblenden",
|
||||
"hide_thread": "Thread ausblenden",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Bild auf Google suchen",
|
||||
"search_image_on_yandex": "Bild auf Yandex suchen",
|
||||
"search_image_on_saucenao": "Bild auf SauceNAO suchen",
|
||||
"view_on_client": "Anzeigen auf {{client}}",
|
||||
"expand_all_settings": "Alle Einstellungen erweitern",
|
||||
"collapse_all_settings": "Alle Einstellungen reduzieren",
|
||||
"refresh": "Aktualisieren",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Μη έγκυρη διεύθυνση URL",
|
||||
"no_link_provided": "Δεν παρέχεται σύνδεσμος",
|
||||
"image_search": "αναζήτηση εικόνων",
|
||||
"view_on": "προβολή σε",
|
||||
"copy_link": "αντιγραφή συνδέσμου",
|
||||
"hide_post": "απόκρυψη ανάρτησης",
|
||||
"hide_thread": "απόκρυψη νήματος",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "αναζήτηση εικόνας στο Google",
|
||||
"search_image_on_yandex": "αναζήτηση εικόνας στο Yandex",
|
||||
"search_image_on_saucenao": "αναζήτηση εικόνας στο SauceNAO",
|
||||
"view_on_client": "Προβολή στο {{client}}",
|
||||
"expand_all_settings": "Ανάπτυξη όλων των ρυθμίσεων",
|
||||
"collapse_all_settings": "Σύμπτυξη όλων των ρυθμίσεων",
|
||||
"refresh": "Ανανέωση",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Invalid URL",
|
||||
"no_link_provided": "No link provided",
|
||||
"image_search": "image search",
|
||||
"view_on": "view on",
|
||||
"copy_link": "Copy link",
|
||||
"hide_post": "Hide post",
|
||||
"hide_thread": "Hide thread",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Search image on Google",
|
||||
"search_image_on_yandex": "Search image on Yandex",
|
||||
"search_image_on_saucenao": "Search image on SauceNAO",
|
||||
"view_on_client": "View on {{client}}",
|
||||
"expand_all_settings": "Expand All Settings",
|
||||
"collapse_all_settings": "Collapse All Settings",
|
||||
"refresh": "Refresh",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL no válida",
|
||||
"no_link_provided": "No se proporcionó ningún enlace",
|
||||
"image_search": "búsqueda de imágenes",
|
||||
"view_on": "ver en",
|
||||
"copy_link": "Copiar enlace",
|
||||
"hide_post": "Ocultar publicación",
|
||||
"hide_thread": "Ocultar hilo",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Buscar imagen en Google",
|
||||
"search_image_on_yandex": "Buscar imagen en Yandex",
|
||||
"search_image_on_saucenao": "Buscar imagen en SauceNAO",
|
||||
"view_on_client": "Ver en {{client}}",
|
||||
"expand_all_settings": "Expandir todas las configuraciones",
|
||||
"collapse_all_settings": "Contraer todas las configuraciones",
|
||||
"refresh": "Actualizar",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "آدرس اینترنتی نامعتبر است",
|
||||
"no_link_provided": "لینکی ارائه نشده است",
|
||||
"image_search": "جستجوی تصویر",
|
||||
"view_on": "نمایش در",
|
||||
"copy_link": "رونوشت لینک",
|
||||
"hide_post": "پنهان کردن پست",
|
||||
"hide_thread": "پنهان کردن موضوع",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "جستجوی تصویر در گوگل",
|
||||
"search_image_on_yandex": "جستجوی تصویر در Yandex",
|
||||
"search_image_on_saucenao": "جستجوی تصویر در SauceNAO",
|
||||
"view_on_client": "مشاهده در {{client}}",
|
||||
"expand_all_settings": "گسترش همه تنظیمات",
|
||||
"collapse_all_settings": "تايید همه تنظیمات",
|
||||
"refresh": "تازهسازی",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Virheellinen URL-osoite",
|
||||
"no_link_provided": "Ei linkkiä annettu",
|
||||
"image_search": "kuvahaku",
|
||||
"view_on": "näytä",
|
||||
"copy_link": "kopioi linkki",
|
||||
"hide_post": "piilota viesti",
|
||||
"hide_thread": "piilota keskustelu",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "etsi kuva Googlesta",
|
||||
"search_image_on_yandex": "etsi kuva Yandexistä",
|
||||
"search_image_on_saucenao": "etsi kuva SauceNAO: sta",
|
||||
"view_on_client": "Näytä {{client}}: ssä",
|
||||
"expand_all_settings": "Laajenna kaikki asetukset",
|
||||
"collapse_all_settings": "Sulje kaikki asetukset",
|
||||
"refresh": "Päivitä",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Hindi wastong URL",
|
||||
"no_link_provided": "Walang link na ibinigay",
|
||||
"image_search": "paghahanap ng larawan",
|
||||
"view_on": "tingnan sa",
|
||||
"copy_link": "kopyahin ang link",
|
||||
"hide_post": "itago ang post",
|
||||
"hide_thread": "itago ang thread",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "maghanap ng larawan sa Google",
|
||||
"search_image_on_yandex": "maghanap ng larawan sa Yandex",
|
||||
"search_image_on_saucenao": "maghanap ng larawan sa SauceNAO",
|
||||
"view_on_client": "Tingnan sa {{client}}",
|
||||
"expand_all_settings": "I-expand ang lahat ng mga setting",
|
||||
"collapse_all_settings": "I-collapse ang lahat ng mga setting",
|
||||
"refresh": "I-refresh",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL non valide",
|
||||
"no_link_provided": "Aucun lien fourni",
|
||||
"image_search": "recherche d'images",
|
||||
"view_on": "voir sur",
|
||||
"copy_link": "Copier le lien",
|
||||
"hide_post": "Masquer la publication",
|
||||
"hide_thread": "Masquer le fil",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Rechercher une image sur Google",
|
||||
"search_image_on_yandex": "Rechercher une image sur Yandex",
|
||||
"search_image_on_saucenao": "Rechercher une image sur SauceNAO",
|
||||
"view_on_client": "Voir sur {{client}}",
|
||||
"expand_all_settings": "Développer toutes les configurations",
|
||||
"collapse_all_settings": "Réduire toutes les configurations",
|
||||
"refresh": "Actualiser",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "כתובת אינטרנט לא תקינה",
|
||||
"no_link_provided": "לא סופק קישור",
|
||||
"image_search": "חיפוש תמונות",
|
||||
"view_on": "צפה ב",
|
||||
"copy_link": "העתק קישור",
|
||||
"hide_post": "הסתר פוסט",
|
||||
"hide_thread": "הסתר ת’רד",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "חפש תמונה ב-Google",
|
||||
"search_image_on_yandex": "חפש תמונה ב-Yandex",
|
||||
"search_image_on_saucenao": "חפש תמונה ב- SauceNAO",
|
||||
"view_on_client": "הצג ב {{client}}",
|
||||
"expand_all_settings": "הרחב את כל ההגדרות",
|
||||
"collapse_all_settings": "קפל את כל ההגדרות",
|
||||
"refresh": "רענן",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "अमान्य URL",
|
||||
"no_link_provided": "कोई लिंक नहीं दिया गया है",
|
||||
"image_search": "चित्र खोज",
|
||||
"view_on": "पर देखें",
|
||||
"copy_link": "लिंक कॉपी करें",
|
||||
"hide_post": "पोस्ट छुपाएं",
|
||||
"hide_thread": "धागा छुपाएं",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "गूगल पर छवि खोजें",
|
||||
"search_image_on_yandex": "Yandex पर छवि खोजें",
|
||||
"search_image_on_saucenao": "SauceNAO पर छवि खोजें",
|
||||
"view_on_client": "{{client}} पर देखें",
|
||||
"expand_all_settings": "सभी सेटिंग्स का विस्तार करें",
|
||||
"collapse_all_settings": "सभी सेटिंग्स को संक्षेपित करें",
|
||||
"refresh": "ताज़ा करें",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Érvénytelen URL-cím",
|
||||
"no_link_provided": "Nincs megadva link",
|
||||
"image_search": "képkeresés",
|
||||
"view_on": "nézet",
|
||||
"copy_link": "link másolása",
|
||||
"hide_post": "bejegyzés elrejtése",
|
||||
"hide_thread": "szál elrejtése",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "keresés kép a Google-ben",
|
||||
"search_image_on_yandex": "keresés kép a Yandex-ben",
|
||||
"search_image_on_saucenao": "keresés kép a SauceNAO-n",
|
||||
"view_on_client": "Megtekintés itt: {{client}}",
|
||||
"expand_all_settings": "Az összes beállítás kibontása",
|
||||
"collapse_all_settings": "Az összes beállítás összevonása",
|
||||
"refresh": "Frissítés",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL tidak valid",
|
||||
"no_link_provided": "Tidak ada tautan yang diberikan",
|
||||
"image_search": "pencarian gambar",
|
||||
"view_on": "lihat di",
|
||||
"copy_link": "salin tautan",
|
||||
"hide_post": "sembunyikan pos",
|
||||
"hide_thread": "sembunyikan utas",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "cari gambar di Google",
|
||||
"search_image_on_yandex": "cari gambar di Yandex",
|
||||
"search_image_on_saucenao": "cari gambar di SauceNAO",
|
||||
"view_on_client": "Lihat di {{client}}",
|
||||
"expand_all_settings": "Perluas Semua Pengaturan",
|
||||
"collapse_all_settings": "Ciutkan Semua Pengaturan",
|
||||
"refresh": "Segarkan",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL non valido",
|
||||
"no_link_provided": "Nessun link fornito",
|
||||
"image_search": "ricerca immagini",
|
||||
"view_on": "Vedi su",
|
||||
"copy_link": "Copia link",
|
||||
"hide_post": "Nascondi post",
|
||||
"hide_thread": "Nascondi thread",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Cerca immagine su Google",
|
||||
"search_image_on_yandex": "Cerca immagine su Yandex",
|
||||
"search_image_on_saucenao": "Cerca immagine su SauceNAO",
|
||||
"view_on_client": "Vedi su {{client}}",
|
||||
"expand_all_settings": "Espandi tutte le impostazioni",
|
||||
"collapse_all_settings": "Comprimi tutte le impostazioni",
|
||||
"refresh": "Aggiorna",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "無効なURL",
|
||||
"no_link_provided": "リンクが指定されていません",
|
||||
"image_search": "画像検索",
|
||||
"view_on": "で表示",
|
||||
"copy_link": "リンクをコピー",
|
||||
"hide_post": "投稿を非表示",
|
||||
"hide_thread": "スレッドを非表示",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Google で画像を検索",
|
||||
"search_image_on_yandex": "Yandex で画像を検索",
|
||||
"search_image_on_saucenao": "SauceNAO で画像を検索",
|
||||
"view_on_client": "{{client}} で表示",
|
||||
"expand_all_settings": "すべての設定を展開",
|
||||
"collapse_all_settings": "すべての設定を折りたたむ",
|
||||
"refresh": "更新",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "잘못된 URL",
|
||||
"no_link_provided": "링크가 제공되지 않았습니다",
|
||||
"image_search": "이미지 검색",
|
||||
"view_on": "보기",
|
||||
"copy_link": "링크 복사",
|
||||
"hide_post": "게시물 숨기기",
|
||||
"hide_thread": "스레드 숨기기",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Google 이미지 검색",
|
||||
"search_image_on_yandex": "Yandex 이미지 검색",
|
||||
"search_image_on_saucenao": "SauceNAO 이미지 검색",
|
||||
"view_on_client": "{{client}}에서 보기",
|
||||
"expand_all_settings": "모든 설정 펼치기",
|
||||
"collapse_all_settings": "모든 설정 축소",
|
||||
"refresh": "새로 고침",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "अवैध URL",
|
||||
"no_link_provided": "कोणतेही लिंक दिले नाहीत",
|
||||
"image_search": "प्रतिमा शोध",
|
||||
"view_on": "पाहा",
|
||||
"copy_link": "लिंक कॉपी करा",
|
||||
"hide_post": "पोस्ट लपवा",
|
||||
"hide_thread": "थ्रेड लपवा",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Google वर छायाचित्र शोधा",
|
||||
"search_image_on_yandex": "Yandex वर छायाचित्र शोधा",
|
||||
"search_image_on_saucenao": "SauceNAO वर छायाचित्र शोधा",
|
||||
"view_on_client": "{{client}} वर पहा",
|
||||
"expand_all_settings": "सर्व सेटिंग्ज विस्तार",
|
||||
"collapse_all_settings": "सर्व सेटिंग्ज संक्षेपित",
|
||||
"refresh": "ताजेतर करा",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Ongeldige URL",
|
||||
"no_link_provided": "Geen link opgegeven",
|
||||
"image_search": "afbeeldingen zoeken",
|
||||
"view_on": "bekijk op",
|
||||
"copy_link": "link kopiëren",
|
||||
"hide_post": "bericht verbergen",
|
||||
"hide_thread": "thread verbergen",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "zoek afbeelding op Google",
|
||||
"search_image_on_yandex": "zoek afbeelding op Yandex",
|
||||
"search_image_on_saucenao": "zoek afbeelding op SauceNAO",
|
||||
"view_on_client": "Bekijk op {{client}}",
|
||||
"expand_all_settings": "Alle instellingen uitvouwen",
|
||||
"collapse_all_settings": "Alle instellingen samenvouwen",
|
||||
"refresh": "Vernieuwen",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Ugyldig URL",
|
||||
"no_link_provided": "Ingen lenke oppgitt",
|
||||
"image_search": "bilde søk",
|
||||
"view_on": "se på",
|
||||
"copy_link": "kopier lenke",
|
||||
"hide_post": "skjul innlegg",
|
||||
"hide_thread": "skjul tråd",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "søk etter bilde på Google",
|
||||
"search_image_on_yandex": "søk etter bilde på Yandex",
|
||||
"search_image_on_saucenao": "søk etter bilde på SauceNAO",
|
||||
"view_on_client": "Vis på {{client}}",
|
||||
"expand_all_settings": "Utvid alle innstillinger",
|
||||
"collapse_all_settings": "Sammenlegge alle innstillinger",
|
||||
"refresh": "Oppdater",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Nieprawidłowy adres URL",
|
||||
"no_link_provided": "Nie podano linku",
|
||||
"image_search": "wyszukiwanie obrazów",
|
||||
"view_on": "zobacz na",
|
||||
"copy_link": "skopiuj link",
|
||||
"hide_post": "ukryj post",
|
||||
"hide_thread": "ukryj wątek",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "szukaj obrazu w Google",
|
||||
"search_image_on_yandex": "szukaj obrazu w Yandex",
|
||||
"search_image_on_saucenao": "szukaj obrazu w SauceNAO",
|
||||
"view_on_client": "Zobacz na {{client}}",
|
||||
"expand_all_settings": "Rozwiń wszystkie ustawienia",
|
||||
"collapse_all_settings": "Zwiń wszystkie ustawienia",
|
||||
"refresh": "Odśwież",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL inválida",
|
||||
"no_link_provided": "Nenhum link fornecido",
|
||||
"image_search": "pesquisa de imagens",
|
||||
"view_on": "ver em",
|
||||
"copy_link": "Copiar link",
|
||||
"hide_post": "Ocultar postagem",
|
||||
"hide_thread": "Ocultar tópico",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Pesquisar imagem no Google",
|
||||
"search_image_on_yandex": "Pesquisar imagem no Yandex",
|
||||
"search_image_on_saucenao": "Pesquisar imagem no SauceNAO",
|
||||
"view_on_client": "Ver no {{client}}",
|
||||
"expand_all_settings": "Expandir todas as configurações",
|
||||
"collapse_all_settings": "Recolher todas as configurações",
|
||||
"refresh": "Atualizar",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL invalid",
|
||||
"no_link_provided": "Nu s-a furnizat niciun link",
|
||||
"image_search": "căutare de imagini",
|
||||
"view_on": "vezi pe",
|
||||
"copy_link": "copiați linkul",
|
||||
"hide_post": "ascundeți postarea",
|
||||
"hide_thread": "ascundeți firul",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "căutați imaginea pe Google",
|
||||
"search_image_on_yandex": "căutați imaginea pe Yandex",
|
||||
"search_image_on_saucenao": "căutați imaginea pe SauceNAO",
|
||||
"view_on_client": "Vezi pe {{client}}",
|
||||
"expand_all_settings": "Extindeți toate setările",
|
||||
"collapse_all_settings": "Recoltați toate setările",
|
||||
"refresh": "Reîmprospătați",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Недействительный URL",
|
||||
"no_link_provided": "Ссылка не предоставлена",
|
||||
"image_search": "поиск изображений",
|
||||
"view_on": "просмотр на",
|
||||
"copy_link": "копировать ссылку",
|
||||
"hide_post": "скрыть пост",
|
||||
"hide_thread": "скрыть ветку",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "поиск изображения в Google",
|
||||
"search_image_on_yandex": "поиск изображения в Yandex",
|
||||
"search_image_on_saucenao": "поиск изображения на SauceNAO",
|
||||
"view_on_client": "Посмотреть на {{client}}",
|
||||
"expand_all_settings": "Развернуть все настройки",
|
||||
"collapse_all_settings": "Свернуть все настройки",
|
||||
"refresh": "Обновить",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL jo e vlefshëm",
|
||||
"no_link_provided": "Nuk është dhënë asnjë lidhje",
|
||||
"image_search": "kërkim imazhesh",
|
||||
"view_on": "shiko në",
|
||||
"copy_link": "kopjo linkun",
|
||||
"hide_post": "fsheh postën",
|
||||
"hide_thread": "fsheh fijen",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "kërko imazhin në Google",
|
||||
"search_image_on_yandex": "kërko imazhin në Yandex",
|
||||
"search_image_on_saucenao": "kërko imazhin në SauceNAO",
|
||||
"view_on_client": "Shiko në {{client}}",
|
||||
"expand_all_settings": "Zgjeroni të gjitha cilësimet",
|
||||
"collapse_all_settings": "Zvogëlo të gjitha cilësimet",
|
||||
"refresh": "Rifresko",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Ogiltig URL",
|
||||
"no_link_provided": "Ingen länk angiven",
|
||||
"image_search": "bildsökning",
|
||||
"view_on": "se på",
|
||||
"copy_link": "kopiera länk",
|
||||
"hide_post": "dölj inlägg",
|
||||
"hide_thread": "dölj tråd",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "sök bild på Google",
|
||||
"search_image_on_yandex": "sök bild på Yandex",
|
||||
"search_image_on_saucenao": "sök bild på SauceNAO",
|
||||
"view_on_client": "Visa på {{client}}",
|
||||
"expand_all_settings": "Expandera alla inställningar",
|
||||
"collapse_all_settings": "Kollapsa alla inställningar",
|
||||
"refresh": "Uppdatera",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "చెల్లని URL",
|
||||
"no_link_provided": "లింక్ ఇవ్వబడలేదు",
|
||||
"image_search": "చిత్రాల శోధన",
|
||||
"view_on": "వీక్షించు",
|
||||
"copy_link": "లింక్ ను కాపీ చేయండి",
|
||||
"hide_post": "పోస్ట్ దాచు",
|
||||
"hide_thread": "థ్రెడ్ దాచు",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "గూగుల్లో చిత్రాన్ని వెతుకోండి",
|
||||
"search_image_on_yandex": "యాండెక్స్లో చిత్రాన్ని వెతుకోండి",
|
||||
"search_image_on_saucenao": "SauceNAOలో చిత్రాన్ని వెతుకోండి",
|
||||
"view_on_client": "{{client}} లో చూడండి",
|
||||
"expand_all_settings": "అన్ని సెట్టింగ్లను విస్తరించండి",
|
||||
"collapse_all_settings": "అన్ని సెట్టింగ్లను సంక్షిప్తము చేయండి",
|
||||
"refresh": "రీఫ్రెష్",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL ไม่ถูกต้อง",
|
||||
"no_link_provided": "ไม่มีการให้ลิงก์",
|
||||
"image_search": "ค้นหารูปภาพ",
|
||||
"view_on": "ดูที่",
|
||||
"copy_link": "คัดลอกลิงก์",
|
||||
"hide_post": "ซ่อนโพสต์",
|
||||
"hide_thread": "ซ่อนเธรด",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "ค้นหารูปภาพใน Google",
|
||||
"search_image_on_yandex": "ค้นหารูปภาพใน Yandex",
|
||||
"search_image_on_saucenao": "ค้นหารูปภาพใน SauceNAO",
|
||||
"view_on_client": "ดูบน {{client}}",
|
||||
"expand_all_settings": "ขยายการตั้งค่าทั้งหมด",
|
||||
"collapse_all_settings": "ยุบการตั้งค่าทั้งหมด",
|
||||
"refresh": "รีเฟรช",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Geçersiz URL",
|
||||
"no_link_provided": "Hiçbir bağlantı sağlanmadı",
|
||||
"image_search": "resim arama",
|
||||
"view_on": "üzerinde görüntüle",
|
||||
"copy_link": "bağlantıyı kopyala",
|
||||
"hide_post": "gönderiyi gizle",
|
||||
"hide_thread": "konuyu gizle",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Google'da resim ara",
|
||||
"search_image_on_yandex": "Yandex'da resim ara",
|
||||
"search_image_on_saucenao": "SauceNAO'da resim ara",
|
||||
"view_on_client": "{{client}}'de görüntüle",
|
||||
"expand_all_settings": "Tüm Ayarları Genişlet",
|
||||
"collapse_all_settings": "Tüm Ayarları Daralt",
|
||||
"refresh": "Yenile",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "Недійсний URL",
|
||||
"no_link_provided": "Не надано жодного посилання",
|
||||
"image_search": "пошук зображень",
|
||||
"view_on": "перегляд на",
|
||||
"copy_link": "копіювати посилання",
|
||||
"hide_post": "сховати допис",
|
||||
"hide_thread": "сховати нитку",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "пошук зображення в Google",
|
||||
"search_image_on_yandex": "пошук зображення в Yandex",
|
||||
"search_image_on_saucenao": "пошук зображення в SauceNAO",
|
||||
"view_on_client": "Переглянути на {{client}}",
|
||||
"expand_all_settings": "Розгорнути всі налаштування",
|
||||
"collapse_all_settings": "Згорнути всі налаштування",
|
||||
"refresh": "Оновити",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "غیر درست یو آر ایل",
|
||||
"no_link_provided": "کوئی لنک فراہم نہیں کیا گیا",
|
||||
"image_search": "تصویر کی تلاش",
|
||||
"view_on": "پر دیکھیں",
|
||||
"copy_link": "لنک کاپی کریں",
|
||||
"hide_post": "پوسٹ چھپائیں",
|
||||
"hide_thread": "دھاگہ چھپائیں",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "گوگل پر تصویر کا مطالعہ کریں",
|
||||
"search_image_on_yandex": "یانڈیکس پر تصویر کا مطالعہ کریں",
|
||||
"search_image_on_saucenao": "SauceNAO پر تصویر کا مطالعہ کریں",
|
||||
"view_on_client": "{{client}} پر دیکھیں",
|
||||
"expand_all_settings": "تمام ترتیبات کو بڑھائیں",
|
||||
"collapse_all_settings": "تمام ترتیبات کو مختصر کریں",
|
||||
"refresh": "تازہ کاری",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "URL không hợp lệ",
|
||||
"no_link_provided": "Không có liên kết được cung cấp",
|
||||
"image_search": "tìm kiếm hình ảnh",
|
||||
"view_on": "xem trên",
|
||||
"copy_link": "sao chép liên kết",
|
||||
"hide_post": "Ẩn bài viết",
|
||||
"hide_thread": "Ẩn chủ đề",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "Tìm kiếm hình ảnh trên Google",
|
||||
"search_image_on_yandex": "Tìm kiếm hình ảnh trên Yandex",
|
||||
"search_image_on_saucenao": "Tìm kiếm hình ảnh trên SauceNAO",
|
||||
"view_on_client": "Xem trên {{client}}",
|
||||
"expand_all_settings": "Mở rộng tất cả các thiết lập",
|
||||
"collapse_all_settings": "Thu gọn tất cả các thiết lập",
|
||||
"refresh": "Làm mới",
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
"invalid_url": "无效的网址",
|
||||
"no_link_provided": "未提供链接",
|
||||
"image_search": "图像搜索",
|
||||
"view_on": "查看",
|
||||
"copy_link": "复制链接",
|
||||
"hide_post": "隐藏帖子",
|
||||
"hide_thread": "隐藏主题",
|
||||
@@ -131,7 +130,6 @@
|
||||
"search_image_on_google": "在Google上搜索图像",
|
||||
"search_image_on_yandex": "在Yandex上搜索图像",
|
||||
"search_image_on_saucenao": "在SauceNAO上搜索图像",
|
||||
"view_on_client": "在{{client}}上查看",
|
||||
"expand_all_settings": "展开所有设置",
|
||||
"collapse_all_settings": "折叠所有设置",
|
||||
"refresh": "刷新",
|
||||
|
||||
+16
-4
@@ -1,8 +1,13 @@
|
||||
import {execSync} from 'child_process'
|
||||
import path from 'path'
|
||||
import {fileURLToPath} from 'url'
|
||||
import {readFileSync} from 'fs'
|
||||
|
||||
const dirname = path.join(path.dirname(fileURLToPath(import.meta.url)))
|
||||
const conventionalChangelog = path.join(dirname, '..', 'node_modules', '.bin', 'conventional-changelog')
|
||||
const packageJsonPath = path.join(dirname, '..', 'package.json')
|
||||
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'))
|
||||
const version = packageJson.version
|
||||
|
||||
// sometimes release-count 1 is empty
|
||||
let releaseChangelog =
|
||||
@@ -12,10 +17,17 @@ let releaseChangelog =
|
||||
// format
|
||||
releaseChangelog = releaseChangelog.trim().replace(/\n\n+/g, '\n\n')
|
||||
|
||||
const releaseBody = `- Web app: https://plebchan.app
|
||||
- Mobile app: available for Android. Download link under "Assets" ⬇️
|
||||
- Desktop app (full P2P node, run your own community): available for Mac/Windows/Linux. Download links under "Assets" ⬇️
|
||||
- Command Line Interface (full P2P node, run your own community): https://github.com/plebbit/plebbit-cli/releases/latest
|
||||
const releaseBody = `This version fixes a bug where the android app would launch in fullscreen mode.
|
||||
|
||||
- Web app: https://plebchan.app
|
||||
- Decentralized web app: https://plebchan.eth (only works on [Brave Browser](https://brave.com/) or via [IPFS Companion](https://docs.ipfs.tech/install/ipfs-companion/#prerequisites))
|
||||
|
||||
## Downloads
|
||||
|
||||
- Android app: [Download APK](https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan-${version}.apk)
|
||||
- Linux app: [Download AppImage](https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan-${version}.AppImage)
|
||||
- macOS app: [Download DMG](https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan-${version}.dmg)
|
||||
- Windows app: [Download EXE](https://github.com/plebbit/plebchan/releases/download/v${version}/plebchan.Setup.${version}.exe)
|
||||
|
||||
${releaseChangelog}`
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
.errorMessage {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.clickableErrorMessage {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.feedbackSuccessMessage {
|
||||
color: inherit;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
import { useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { copyToClipboard } from '../../lib/utils/clipboard-utils';
|
||||
import styles from './error-display.module.css';
|
||||
|
||||
const ErrorDisplay = ({ error }: { error: any }) => {
|
||||
const { t } = useTranslation();
|
||||
const [feedbackMessageKey, setFeedbackMessageKey] = useState<string | null>(null);
|
||||
|
||||
const originalDisplayMessage = error?.message ? `${t('error')}: ${error.message}` : null;
|
||||
|
||||
const handleMessageClick = async () => {
|
||||
if (!error || !error.message || feedbackMessageKey) return;
|
||||
|
||||
const errorString = JSON.stringify(error, null, 2);
|
||||
try {
|
||||
await copyToClipboard(errorString);
|
||||
setFeedbackMessageKey('copied');
|
||||
setTimeout(() => {
|
||||
setFeedbackMessageKey(null);
|
||||
}, 1500);
|
||||
} catch (err) {
|
||||
console.error('Failed to copy error: ', err);
|
||||
setFeedbackMessageKey('failed');
|
||||
setTimeout(() => {
|
||||
setFeedbackMessageKey(null);
|
||||
}, 1500);
|
||||
}
|
||||
};
|
||||
|
||||
let currentDisplayMessage = '';
|
||||
const classNames = [styles.errorMessage];
|
||||
let isClickable = false;
|
||||
|
||||
if (feedbackMessageKey === 'copied') {
|
||||
currentDisplayMessage = t('fullErrorCopiedToClipboard', 'full error copied to the clipboard');
|
||||
classNames.pop();
|
||||
classNames.push(styles.feedbackSuccessMessage);
|
||||
} else if (feedbackMessageKey === 'failed') {
|
||||
currentDisplayMessage = t('copyFailed', 'copy failed');
|
||||
} else if (originalDisplayMessage) {
|
||||
currentDisplayMessage = originalDisplayMessage;
|
||||
isClickable = true;
|
||||
classNames.push(styles.clickableErrorMessage);
|
||||
}
|
||||
|
||||
return (
|
||||
(error?.message || error?.stack || error?.details || error) && (
|
||||
<div className={styles.error}>
|
||||
{currentDisplayMessage && (
|
||||
<span
|
||||
className={classNames.join(' ')}
|
||||
onClick={isClickable ? handleMessageClick : undefined}
|
||||
title={isClickable ? t('clickToCopyFullError', 'Click to copy full error') : undefined}
|
||||
>
|
||||
{currentDisplayMessage}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
export default ErrorDisplay;
|
||||
@@ -0,0 +1 @@
|
||||
export { default } from './error-display';
|
||||
@@ -450,11 +450,14 @@ const PostDesktop = ({ post, roles, showAllReplies, showReplies = true }: PostPr
|
||||
!isInPendingPostView &&
|
||||
replies &&
|
||||
showReplies &&
|
||||
(showAllReplies || showOmittedReplies[cid] ? replies : replies.slice(-5)).map((reply, index) => (
|
||||
<div key={index} className={styles.replyContainer}>
|
||||
<Reply reply={reply} roles={roles} postReplyCount={replyCount} />
|
||||
</div>
|
||||
))}
|
||||
(showAllReplies || showOmittedReplies[cid] ? replies : replies.slice(-5))
|
||||
// Don't render deleted replies that have no children (replyCount = 0)
|
||||
.filter((reply) => !(reply.deleted && (reply.replyCount === 0 || !reply.replyCount)))
|
||||
.map((reply, index) => (
|
||||
<div key={index} className={styles.replyContainer}>
|
||||
<Reply reply={reply} roles={roles} postReplyCount={replyCount} />
|
||||
</div>
|
||||
))}
|
||||
{isDescription && subplebbit?.rules && subplebbit?.rules.length > 0 && (
|
||||
<div className={styles.replyContainer}>
|
||||
<Reply reply={subplebbitRulesReply} />
|
||||
|
||||
@@ -68,48 +68,6 @@ const ImageSearchButton = ({ url, onClose }: { url: string; onClose: () => void
|
||||
);
|
||||
};
|
||||
|
||||
const ViewOnButton = ({ cid, isDescription, isRules, subplebbitAddress, onClose }: PostMenuDesktopProps) => {
|
||||
const { t } = useTranslation();
|
||||
const [isClientRedirectMenuOpen, setIsClientRedirectMenuOpen] = useState(false);
|
||||
|
||||
const getViewOnOtherClientLink = () => {
|
||||
if (isDescription || isRules) {
|
||||
return `${subplebbitAddress}`;
|
||||
} else {
|
||||
return `${subplebbitAddress}/c/${cid}`;
|
||||
}
|
||||
};
|
||||
|
||||
const viewOnOtherClientLink = getViewOnOtherClientLink();
|
||||
|
||||
const { refs, floatingStyles } = useFloating({
|
||||
placement: 'right-start',
|
||||
middleware: [flip(), shift({ padding: 10 })],
|
||||
});
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`${styles.postMenuItem} ${styles.dropdown}`}
|
||||
onMouseOver={() => setIsClientRedirectMenuOpen(true)}
|
||||
onMouseLeave={() => setIsClientRedirectMenuOpen(false)}
|
||||
ref={refs.setReference}
|
||||
onClick={onClose}
|
||||
>
|
||||
{_.capitalize(t('view_on'))} »
|
||||
{isClientRedirectMenuOpen && (
|
||||
<div ref={refs.setFloating} style={floatingStyles} className={styles.dropdownMenu}>
|
||||
<a href={`https://seedit.eth.limo/#/p/${viewOnOtherClientLink}`} target='_blank' rel='noreferrer'>
|
||||
<div className={styles.postMenuItem}>Seedit</div>
|
||||
</a>
|
||||
<a href={`https://plebones.eth.limo/#/p/${viewOnOtherClientLink}`} target='_blank' rel='noreferrer'>
|
||||
<div className={styles.postMenuItem}>Plebones</div>
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const BlockUserButton = ({ address }: { address: string }) => {
|
||||
const { t } = useTranslation();
|
||||
const { blocked, unblock, block } = useBlock({ address });
|
||||
@@ -197,7 +155,6 @@ const PostMenuDesktop = ({ post }: { post: Comment }) => {
|
||||
</div>
|
||||
)}
|
||||
{link && isValidURL(link) && (type === 'image' || type === 'gif' || thumbnail) && url && <ImageSearchButton url={url} onClose={handleClose} />}
|
||||
<ViewOnButton cid={cid} isDescription={isDescription} isRules={isRules} subplebbitAddress={subplebbitAddress} onClose={handleClose} />
|
||||
{!isDescription && !isRules && <BlockUserButton address={author?.address} />}
|
||||
{(isInAllView || isInSubscriptionsView) && <BlockBoardButton address={subplebbitAddress} />}
|
||||
</div>
|
||||
|
||||
@@ -55,31 +55,6 @@ const ImageSearchButtons = ({ url, onClose }: { url: string; onClose: () => void
|
||||
);
|
||||
};
|
||||
|
||||
const ViewOnButtons = ({ cid, isDescription, isRules, subplebbitAddress, onClose }: PostMenuMobileProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const getViewOnOtherClientLink = () => {
|
||||
if (isDescription || isRules) {
|
||||
return `${subplebbitAddress}`;
|
||||
} else {
|
||||
return `${subplebbitAddress}/c/${cid}`;
|
||||
}
|
||||
};
|
||||
|
||||
const viewOnOtherClientLink = getViewOnOtherClientLink();
|
||||
|
||||
return (
|
||||
<div onClick={onClose}>
|
||||
<a href={`https://seedit.eth.limo/#/p/${viewOnOtherClientLink}`} target='_blank' rel='noreferrer'>
|
||||
<div className={styles.postMenuItem}>{t('view_on_client', { client: 'Seedit' })}</div>
|
||||
</a>
|
||||
<a href={`https://plebones.eth.limo/#/p/${viewOnOtherClientLink}`} target='_blank' rel='noreferrer'>
|
||||
<div className={styles.postMenuItem}>{t('view_on_client', { client: 'Plebones' })}</div>
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const HidePostButton = ({ cid, isReply, onClose, postCid }: PostMenuMobileProps) => {
|
||||
const { t } = useTranslation();
|
||||
const { hide, hidden, unhide } = useHide({ cid });
|
||||
@@ -167,7 +142,6 @@ const PostMenuMobile = ({ post }: { post: Comment }) => {
|
||||
{cid && subplebbitAddress && !isDescription && !isRules && <BlockUserButton address={author?.address} />}
|
||||
{cid && subplebbitAddress && !isInBoardView && !isDescription && !isRules && <BlockBoardButton address={subplebbitAddress} />}
|
||||
{link && isValidURL(link) && (type === 'image' || type === 'gif' || thumbnail) && url && <ImageSearchButtons url={url} onClose={handleClose} />}
|
||||
<ViewOnButtons cid={cid} isDescription={isDescription} isRules={isRules} subplebbitAddress={subplebbitAddress} onClose={handleClose} />
|
||||
</div>
|
||||
</FloatingFocusManager>,
|
||||
document.body,
|
||||
|
||||
@@ -359,11 +359,14 @@ const PostMobile = ({ post, roles, showAllReplies, showReplies = true }: PostPro
|
||||
!isInPendingPostView &&
|
||||
replies &&
|
||||
showReplies &&
|
||||
(showAllReplies ? replies : replies.slice(-5)).map((reply, index) => (
|
||||
<div key={index} className={styles.replyContainer}>
|
||||
<Reply postReplyCount={replyCount} reply={reply} roles={roles} />
|
||||
</div>
|
||||
))}
|
||||
(showAllReplies ? replies : replies.slice(-5))
|
||||
// Don't render deleted replies that have no children (replyCount = 0)
|
||||
.filter((reply) => !(reply.deleted && (reply.replyCount === 0 || !reply.replyCount)))
|
||||
.map((reply, index) => (
|
||||
<div key={index} className={styles.replyContainer}>
|
||||
<Reply postReplyCount={replyCount} reply={reply} roles={roles} />
|
||||
</div>
|
||||
))}
|
||||
{showRules && (
|
||||
<div className={styles.replyContainer}>
|
||||
<Reply reply={subplebbitRulesReply} />
|
||||
|
||||
@@ -52,7 +52,7 @@ const CheckForUpdates = () => {
|
||||
if (!updateAvailable) {
|
||||
alert(
|
||||
commitRef
|
||||
? `${t('latest_development_version', { commit: commitRef.slice(0, 7), link: 'https://plebchan.eth.limo/#/', interpolation: { escapeValue: false } })}`
|
||||
? `${t('latest_development_version', { commit: commitRef.slice(0, 7), link: 'https://plebchan.app/#/', interpolation: { escapeValue: false } })}`
|
||||
: `${t('latest_stable_version', { version: packageJson.version })}`,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ const TopBarDesktop = () => {
|
||||
</span>
|
||||
] [
|
||||
<span className={styles.temporaryButton}>
|
||||
<a href='https://seedit.eth.limo/#/communities/vote' target='_blank' rel='noopener noreferrer'>
|
||||
<a href='https://seedit.app/#/communities/vote' target='_blank' rel='noopener noreferrer'>
|
||||
{t('vote')}
|
||||
</a>
|
||||
</span>
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Universal clipboard utility that works in both Electron and web environments
|
||||
*/
|
||||
export const copyToClipboard = async (text: string): Promise<void> => {
|
||||
// Check if we're in Electron and use its clipboard API
|
||||
if (typeof window !== 'undefined' && (window as any).electronApi?.copyToClipboard) {
|
||||
try {
|
||||
const result = await (window as any).electronApi.copyToClipboard(text);
|
||||
if (!result.success) {
|
||||
throw new Error(result.error || 'Failed to copy to clipboard');
|
||||
}
|
||||
return;
|
||||
} catch (error) {
|
||||
console.error('Electron clipboard failed:', error);
|
||||
// Fall back to web clipboard API
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to web clipboard API
|
||||
if (navigator.clipboard) {
|
||||
try {
|
||||
await navigator.clipboard.writeText(text);
|
||||
} catch (error) {
|
||||
console.error('Web clipboard failed:', error);
|
||||
throw new Error('Failed to copy to clipboard. Your browser may not support this feature.');
|
||||
}
|
||||
} else {
|
||||
throw new Error('Your browser does not support clipboard API');
|
||||
}
|
||||
};
|
||||
@@ -1,3 +1,5 @@
|
||||
import { copyToClipboard } from './clipboard-utils';
|
||||
|
||||
export const getHostname = (url: string) => {
|
||||
try {
|
||||
return new URL(url).hostname.replace(/^www\./, '');
|
||||
@@ -15,12 +17,7 @@ export const isValidURL = (url: string) => {
|
||||
}
|
||||
};
|
||||
|
||||
export const copyShareLinkToClipboard = (subplebbitAddress: string, cid: string) => {
|
||||
const shareLink = `https://pleb.bz/p/${subplebbitAddress}/c/${cid}?redirect=plebchan.eth.limo`;
|
||||
|
||||
if (navigator.clipboard) {
|
||||
navigator.clipboard.writeText(shareLink);
|
||||
} else {
|
||||
alert('Your browser does not support clipboard API');
|
||||
}
|
||||
export const copyShareLinkToClipboard = async (subplebbitAddress: string, cid: string) => {
|
||||
const shareLink = `https://pleb.bz/p/${subplebbitAddress}/c/${cid}?redirect=plebchan.app`;
|
||||
await copyToClipboard(shareLink);
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@ import useTimeFilter from '../../hooks/use-time-filter';
|
||||
import useInterfaceSettingsStore from '../../stores/use-interface-settings-store';
|
||||
import useFeedResetStore from '../../stores/use-feed-reset-store';
|
||||
import useSortingStore from '../../stores/use-sorting-store';
|
||||
import ErrorDisplay from '../../components/error-display/error-display';
|
||||
import LoadingEllipsis from '../../components/loading-ellipsis';
|
||||
import SubplebbitDescription from '../../components/subplebbit-description';
|
||||
import SubplebbitRules from '../../components/subplebbit-rules';
|
||||
@@ -227,12 +228,6 @@ const Board = () => {
|
||||
) : (
|
||||
hasMore && <LoadingEllipsis string={loadingStateString} />
|
||||
)}
|
||||
{error && (
|
||||
<div className='red'>
|
||||
<br />
|
||||
{error.message}
|
||||
</div>
|
||||
)}
|
||||
{blocked && (
|
||||
<>
|
||||
[
|
||||
@@ -274,6 +269,16 @@ const Board = () => {
|
||||
document.title = boardTitle + ' - plebchan';
|
||||
}, [title, shortAddress, subplebbitAddress]);
|
||||
|
||||
// probably not necessary to show the error to the user if the feed loaded successfully
|
||||
const [shouldShowErrorToUser, setShouldShowErrorToUser] = useState(false);
|
||||
useEffect(() => {
|
||||
if (error?.message && feed.length === 0) {
|
||||
setShouldShowErrorToUser(true);
|
||||
} else if (feed.length > 0) {
|
||||
setShouldShowErrorToUser(false);
|
||||
}
|
||||
}, [error, feed]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{shouldShowSnow() && <hr />}
|
||||
@@ -289,6 +294,11 @@ const Board = () => {
|
||||
title={title}
|
||||
/>
|
||||
)}
|
||||
{shouldShowErrorToUser && (
|
||||
<div className={styles.error}>
|
||||
<ErrorDisplay error={error} />
|
||||
</div>
|
||||
)}
|
||||
{rules && !description && rules.length > 0 && <SubplebbitRules subplebbitAddress={subplebbitAddress} createdAt={createdAt} rules={rules} />}
|
||||
<Virtuoso
|
||||
increaseViewportBy={{ bottom: 1200, top: 1200 }}
|
||||
|
||||
+17
-2
@@ -1,10 +1,11 @@
|
||||
import { useEffect } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Comment, Role, useComment, useEditedComment, useSubplebbit } from '@plebbit/plebbit-react-hooks';
|
||||
import useSubplebbitsStore from '@plebbit/plebbit-react-hooks/dist/stores/subplebbits';
|
||||
import { useLocation, useParams } from 'react-router-dom';
|
||||
import { isAllView, isDescriptionView, isRulesView } from '../../lib/utils/view-utils';
|
||||
import useIsMobile from '../../hooks/use-is-mobile';
|
||||
import ErrorDisplay from '../../components/error-display/error-display';
|
||||
import PostDesktop from '../../components/post-desktop';
|
||||
import PostMobile from '../../components/post-mobile';
|
||||
import SubplebbitDescription from '../../components/subplebbit-description';
|
||||
@@ -83,11 +84,25 @@ const PostPage = () => {
|
||||
document.title = isInAllView ? `${t('all')} - plebchan` : postDucumentTitle;
|
||||
}, [title, shortAddress, subplebbitAddress, post?.title, post?.content, isInAllView, t]);
|
||||
|
||||
// probably not necessary to show the error to the user if the post loaded successfully
|
||||
const [shouldShowErrorToUser, setShouldShowErrorToUser] = useState(false);
|
||||
useEffect(() => {
|
||||
if (post?.error && ((post?.replyCount > 0 && post?.replies?.length === 0) || (post?.state === 'failed' && post?.error))) {
|
||||
setShouldShowErrorToUser(true);
|
||||
} else if (post?.replyCount > 0 && post?.replies?.length > 0) {
|
||||
setShouldShowErrorToUser(false);
|
||||
}
|
||||
}, [post]);
|
||||
|
||||
return (
|
||||
<div className={styles.content}>
|
||||
{/* TODO: remove this replyCount error once api supports scrolling replies pages */}
|
||||
{replyCount > 60 && <span className={styles.error}>Error: this thread has too many replies, some of them cannot be displayed right now.</span>}
|
||||
{error && <span className={styles.error}>Error: {error?.message || error?.toString?.()}</span>}
|
||||
{shouldShowErrorToUser && (
|
||||
<div className={styles.error}>
|
||||
<ErrorDisplay error={error} />
|
||||
</div>
|
||||
)}
|
||||
{isInDescriptionView ? (
|
||||
<SubplebbitDescription
|
||||
avatarUrl={suggested?.avatarUrl}
|
||||
|
||||
+1
-1
@@ -173,7 +173,7 @@ export default defineConfig({
|
||||
rollupOptions: {
|
||||
output: {
|
||||
manualChunks: {
|
||||
vendor: ['react', 'react-dom', 'react-router-dom']
|
||||
vendor: ['react', 'react-dom', 'react-router-dom', 'react-i18next', 'i18next', 'i18next-browser-languagedetector', 'i18next-http-backend']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1139,6 +1139,16 @@
|
||||
dependencies:
|
||||
tslib "^2.1.0"
|
||||
|
||||
"@capacitor/status-bar@7.0.1":
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@capacitor/status-bar/-/status-bar-7.0.1.tgz#6bd3769ef35158c961ff2a6b571c03e9bce55809"
|
||||
integrity sha512-iDv3mXYo9CdxYRVwt3/pRyuk25p7Sn4GfaS/zMZyVIqTzsvKLCIIH3GdKK+ta+nsNcAVpCw/t5jFEBt1D18ctA==
|
||||
|
||||
"@capawesome/capacitor-android-edge-to-edge-support@7.2.2":
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@capawesome/capacitor-android-edge-to-edge-support/-/capacitor-android-edge-to-edge-support-7.2.2.tgz#830720988b9db29a5bf18db907c4b8b1f8545f97"
|
||||
integrity sha512-AAqCFswAVlA6WX0iaVbMCEnt/2mNBZGmU3JbbFlqWAg61NCMxm8+JlmiNoG+6wf/6S/BWVRL8Ac3L9csaZH/8w==
|
||||
|
||||
"@chainsafe/as-chacha20poly1305@^0.1.0":
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz#7da6f8796f9b42dac6e830a086d964f1f9189e09"
|
||||
@@ -2610,12 +2620,11 @@
|
||||
dependencies:
|
||||
buffer "^6.0.3"
|
||||
|
||||
"@keyv/sqlite@4.0.2":
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@keyv/sqlite/-/sqlite-4.0.2.tgz#c64bdcc6ff50280e0c56257a85c7c178fef581da"
|
||||
integrity sha512-0tMWhvoe5gSkMYxnpkbnV6/f8ZAle1prm9drCyhKPQb3Pconk3zx+/3TX7adf6uY6ZF6xrGQE3o3ENcv/9QLUw==
|
||||
"@keyv/sqlite@4.0.3":
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@keyv/sqlite/-/sqlite-4.0.3.tgz#269c7cd8fb150edb3374b2ef5930a794278f9b43"
|
||||
integrity sha512-tdgelzrlng0cIiOZpxuDd/Ii/79h9On/0lcEyZ2s0Ml+9NXS6JnRrlb01+nfUWY53ioSDGvPKt4yL+s76uTWSg==
|
||||
dependencies:
|
||||
keyv "^5.3.2"
|
||||
sqlite3 "^5.1.7"
|
||||
|
||||
"@leichtgewicht/ip-codec@^2.0.1":
|
||||
@@ -3592,9 +3601,9 @@
|
||||
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
|
||||
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
|
||||
|
||||
"@plebbit/plebbit-js@https://github.com/plebbit/plebbit-js.git#a2cb6ca6462b2e2e3b66f71204375a81ed05cf80":
|
||||
"@plebbit/plebbit-js@https://github.com/plebbit/plebbit-js.git#692ec349f01aa6d8e939ff1d6d07315ab92e4099":
|
||||
version "0.0.7"
|
||||
resolved "https://github.com/plebbit/plebbit-js.git#a2cb6ca6462b2e2e3b66f71204375a81ed05cf80"
|
||||
resolved "https://github.com/plebbit/plebbit-js.git#692ec349f01aa6d8e939ff1d6d07315ab92e4099"
|
||||
dependencies:
|
||||
"@bonfida/spl-name-service" "3.0.10"
|
||||
"@chainsafe/libp2p-gossipsub" "14.1.0"
|
||||
@@ -3602,7 +3611,7 @@
|
||||
"@helia/delegated-routing-v1-http-api-client" "4.2.1"
|
||||
"@helia/ipns" "8.0.2"
|
||||
"@helia/unixfs" "4.0.2"
|
||||
"@keyv/sqlite" "4.0.2"
|
||||
"@keyv/sqlite" "4.0.3"
|
||||
"@libp2p/fetch" "3.0.0"
|
||||
"@libp2p/identify" "3.0.15"
|
||||
"@libp2p/interfaces" "3.3.2"
|
||||
@@ -3612,7 +3621,7 @@
|
||||
"@plebbit/proper-lockfile" "github:plebbit/node-proper-lockfile#7fd6332117340c1d3d98dd0afee2d31cc06f72b8"
|
||||
"@types/proper-lockfile" "4.1.2"
|
||||
assert "2.1.0"
|
||||
better-sqlite3 "11.9.1"
|
||||
better-sqlite3 "11.10.0"
|
||||
blockstore-core "5.0.2"
|
||||
blockstore-fs "2.0.2"
|
||||
blockstore-idb "2.0.1"
|
||||
@@ -3630,8 +3639,7 @@
|
||||
jose "4.11.0"
|
||||
js-sha256 "0.11.0"
|
||||
js-sha512 "0.9.0"
|
||||
keyv "5.3.2"
|
||||
knex "3.1.0"
|
||||
keyv "5.3.3"
|
||||
kubo-rpc-client "5.1.0"
|
||||
libp2p-crypto "0.21.2"
|
||||
limiter-es6-compat "2.1.2"
|
||||
@@ -3671,11 +3679,11 @@
|
||||
dependencies:
|
||||
debug "4.3.4"
|
||||
|
||||
"@plebbit/plebbit-react-hooks@https://github.com/plebbit/plebbit-react-hooks.git#39cd7c09f1675949193498891fc448f68e42742b":
|
||||
"@plebbit/plebbit-react-hooks@https://github.com/plebbit/plebbit-react-hooks.git#090e70bed5f799fc140a31a6f2123f9125954fde":
|
||||
version "0.0.1"
|
||||
resolved "https://github.com/plebbit/plebbit-react-hooks.git#39cd7c09f1675949193498891fc448f68e42742b"
|
||||
resolved "https://github.com/plebbit/plebbit-react-hooks.git#090e70bed5f799fc140a31a6f2123f9125954fde"
|
||||
dependencies:
|
||||
"@plebbit/plebbit-js" "https://github.com/plebbit/plebbit-js.git#a2cb6ca6462b2e2e3b66f71204375a81ed05cf80"
|
||||
"@plebbit/plebbit-js" "https://github.com/plebbit/plebbit-js.git#692ec349f01aa6d8e939ff1d6d07315ab92e4099"
|
||||
"@plebbit/plebbit-logger" "https://github.com/plebbit/plebbit-logger.git"
|
||||
assert "2.0.0"
|
||||
ethers "5.6.9"
|
||||
@@ -5550,10 +5558,10 @@ bech32@1.1.4:
|
||||
resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
|
||||
integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
|
||||
|
||||
better-sqlite3@11.9.1:
|
||||
version "11.9.1"
|
||||
resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.9.1.tgz#0540da2f2ce24cbd766bb35db412f4be2c75b8bb"
|
||||
integrity sha512-Ba0KR+Fzxh2jDRhdg6TSH0SJGzb8C0aBY4hR8w8madIdIzzC6Y1+kx5qR6eS1Z+Gy20h6ZU28aeyg0z1VIrShQ==
|
||||
better-sqlite3@11.10.0:
|
||||
version "11.10.0"
|
||||
resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.10.0.tgz#2b1b14c5acd75a43fd84d12cc291ea98cef57d98"
|
||||
integrity sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==
|
||||
dependencies:
|
||||
bindings "^1.5.0"
|
||||
prebuild-install "^7.1.1"
|
||||
@@ -6321,11 +6329,6 @@ color@^4.0.1:
|
||||
color-convert "^2.0.1"
|
||||
color-string "^1.9.0"
|
||||
|
||||
colorette@2.0.19:
|
||||
version "2.0.19"
|
||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
|
||||
integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
|
||||
|
||||
colorette@^2.0.16:
|
||||
version "2.0.20"
|
||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
|
||||
@@ -6343,11 +6346,6 @@ comma-separated-tokens@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee"
|
||||
integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==
|
||||
|
||||
commander@^10.0.0:
|
||||
version "10.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
|
||||
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
|
||||
|
||||
commander@^12.0.0, commander@^12.1.0:
|
||||
version "12.1.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
|
||||
@@ -7999,11 +7997,6 @@ eslint@8.56.0:
|
||||
strip-ansi "^6.0.1"
|
||||
text-table "^0.2.0"
|
||||
|
||||
esm@^3.2.25:
|
||||
version "3.2.25"
|
||||
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
|
||||
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
|
||||
|
||||
esniff@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308"
|
||||
@@ -8634,11 +8627,6 @@ get-own-enumerable-property-symbols@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664"
|
||||
integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==
|
||||
|
||||
get-package-type@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
|
||||
integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
|
||||
|
||||
get-port@^7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/get-port/-/get-port-7.1.0.tgz#d5a500ebfc7aa705294ec2b83cc38c5d0e364fec"
|
||||
@@ -8681,11 +8669,6 @@ get-symbol-description@^1.1.0:
|
||||
es-errors "^1.3.0"
|
||||
get-intrinsic "^1.2.6"
|
||||
|
||||
getopts@2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4"
|
||||
integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==
|
||||
|
||||
git-raw-commits@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285"
|
||||
@@ -9462,11 +9445,6 @@ internal-slot@^1.1.0:
|
||||
hasown "^2.0.2"
|
||||
side-channel "^1.1.0"
|
||||
|
||||
interpret@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
|
||||
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
|
||||
|
||||
ip-address@^9.0.5:
|
||||
version "9.0.5"
|
||||
resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
|
||||
@@ -10606,10 +10584,10 @@ just-performance-es6-compat@4.3.2:
|
||||
resolved "https://registry.yarnpkg.com/just-performance-es6-compat/-/just-performance-es6-compat-4.3.2.tgz#7877f34cbe25fd994bc2265d0c919bf728dcc42e"
|
||||
integrity sha512-bNPuqRaV8PrqYVivdN8FsKi0rmXaQ0Y63oasFUQFJooJPH0r26LdfBAfoodhUQI6I6cek9yNo+tnGiF0R3pIHw==
|
||||
|
||||
keyv@5.3.2:
|
||||
version "5.3.2"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.3.2.tgz#32edd461b51d44d42926eb72946236d79c71ae78"
|
||||
integrity sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==
|
||||
keyv@5.3.3:
|
||||
version "5.3.3"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.3.3.tgz#ec2d723fbd7b908de5ee7f56b769d46dbbeaf8ba"
|
||||
integrity sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==
|
||||
dependencies:
|
||||
"@keyv/serialize" "^1.0.3"
|
||||
|
||||
@@ -10620,13 +10598,6 @@ keyv@^4.0.0, keyv@^4.5.3:
|
||||
dependencies:
|
||||
json-buffer "3.0.1"
|
||||
|
||||
keyv@^5.3.2:
|
||||
version "5.3.3"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-5.3.3.tgz#ec2d723fbd7b908de5ee7f56b769d46dbbeaf8ba"
|
||||
integrity sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==
|
||||
dependencies:
|
||||
"@keyv/serialize" "^1.0.3"
|
||||
|
||||
kind-of@^6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
|
||||
@@ -10642,26 +10613,6 @@ kleur@^4.0.3, kleur@^4.1.5:
|
||||
resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
|
||||
integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
|
||||
|
||||
knex@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/knex/-/knex-3.1.0.tgz#b6ddd5b5ad26a6315234a5b09ec38dc4a370bd8c"
|
||||
integrity sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==
|
||||
dependencies:
|
||||
colorette "2.0.19"
|
||||
commander "^10.0.0"
|
||||
debug "4.3.4"
|
||||
escalade "^3.1.1"
|
||||
esm "^3.2.25"
|
||||
get-package-type "^0.1.0"
|
||||
getopts "2.3.0"
|
||||
interpret "^2.2.0"
|
||||
lodash "^4.17.21"
|
||||
pg-connection-string "2.6.2"
|
||||
rechoir "^0.8.0"
|
||||
resolve-from "^5.0.0"
|
||||
tarn "^3.0.2"
|
||||
tildify "2.0.0"
|
||||
|
||||
kubo-rpc-client@5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/kubo-rpc-client/-/kubo-rpc-client-5.1.0.tgz#06f9216b2b8a62487a150261b16fd941a75adb34"
|
||||
@@ -12683,11 +12634,6 @@ pend@~1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||
integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
|
||||
|
||||
pg-connection-string@2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475"
|
||||
integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==
|
||||
|
||||
picocolors@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
|
||||
@@ -13236,13 +13182,6 @@ readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.8:
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
rechoir@^0.8.0:
|
||||
version "0.8.0"
|
||||
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
|
||||
integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
|
||||
dependencies:
|
||||
resolve "^1.20.0"
|
||||
|
||||
redent@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
|
||||
@@ -13415,7 +13354,7 @@ resolve-from@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
|
||||
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
|
||||
|
||||
resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.4:
|
||||
resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.4:
|
||||
version "1.22.10"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
|
||||
integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
|
||||
@@ -14491,11 +14430,6 @@ tar@^6.0.2, tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2, tar@^6.2.1:
|
||||
mkdirp "^1.0.3"
|
||||
yallist "^4.0.0"
|
||||
|
||||
tarn@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693"
|
||||
integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==
|
||||
|
||||
tcp-port-used@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea"
|
||||
@@ -14581,11 +14515,6 @@ thunky@^1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
|
||||
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
|
||||
|
||||
tildify@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a"
|
||||
integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==
|
||||
|
||||
time-span@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/time-span/-/time-span-5.1.0.tgz#80c76cf5a0ca28e0842d3f10a4e99034ce94b90d"
|
||||
|
||||
Reference in New Issue
Block a user