This commit is contained in:
vd
2026-10-13 00:13:29 +02:00
parent daa600b1f7
commit 307c114999
3 changed files with 108 additions and 3 deletions
+106 -1
View File
@@ -355,6 +355,7 @@
settingsButton: "Settings",
manageStorageButton: "Manage storage",
transferDataButton: "Transfer or export data",
legalButton: "Legal information",
updateButton: (version) => `Update to ${version}`,
///
typeChat: "chat",
@@ -390,6 +391,20 @@
brandDescription: "Code available on Viridian Public Resources (VDPR)"
}
},
legal: {
legalHeadline: "Legal Information",
legalDescription: "CT is open source software published and distributed under the GPL-3.0 license.",
privacyLabel: "Privacy and Application Data",
privacyDescription: "CT stores data on your device. No data is stored on the server hosting this instance of CT, except for data necessary to provide a website. This data is handled and processed by the infrastructure provider (data processor).",
udnLabel: "UDN Servers and Communications",
udnDescription: "The UDN servers you connect to are separate and independent from CT. After connecting or while connected to a server, chats you create and the entities contained therein, including but not limited to messages, boards, and tasks, are transferred to the respective UDN server. Confer the privacy policy of that server for more information.",
rightsLabel: "Your Rights",
rightsDescription: "You have the right to object to any processing of your data under Art. 21 GDPR, and to request access, changes, and deletion to/of your data under Art. 15, 16, and 17 GDPR by contacting the operator and/or processor. You have the right to lodge a complaint with a data protection supervisory authority under Art. 77 GDPR.",
imprintLabel: "Imprint",
imprintDescription: "Contact information of the data controller (operator) providing this instance of CT",
infrastructureLabel: "Infrastructure",
infrastructureDescription: "Contact information of the data processor (provider) hosting this instance of CT on behalf of the operator"
},
onboarding: {
connectionHeadline: "Connect to UDN",
connectionDescription: "To transfer files and send messages, connect to the Universal Decentralized Network (UDN).",
@@ -633,6 +648,7 @@
settingsButton: "Einstellungen",
manageStorageButton: "Daten verwalten",
transferDataButton: "Daten \xFCbertragen",
legalButton: "Rechtliches",
updateButton: (version) => `Aktualisieren: ${version}`,
typeChat: "Chat",
noChatsPlaceholder: "Keine Chats"
@@ -667,6 +683,20 @@
brandDescription: "Code verf\xFCgbar auf Viridian Public Resources (VDPR)"
}
},
legal: {
legalHeadline: "Rechtliche Informationen",
legalDescription: "CT ist open-source Software. Ver\xF6ffentlichung und Verbreitung unterliegen der GPL-3.0 Lizenz.",
privacyLabel: "Privatsph\xE4re und Programmdaten",
privacyDescription: "CT speichert Daten auf deinem Ger\xE4t. Daten werden grunds\xE4tzlich nicht auf dem Server gespeichert, der diese Instanz von CT bereitstellt. Davon ausgenommen sind zum Betrieb der Website notwendigen Daten. Diese Daten werden durch den Auftragsverarbeiter verarbeitet, der die Bereitstellung dieser Website erm\xF6glicht.",
udnLabel: "UDN Server und Kommunikation",
udnDescription: "Die UDN Server mit denen du dich verbindest sind separat und unabh\xE4ngig von CT. Beim Verbinden und wenn du mit einem Server verbunden bist, werden von dir erstellte Chats sowie die darin enthaltenen Objekte wie unter anderem Nachrichten, Boards und Aufgaben an diesen Server \xFCbermittelt. F\xFCr mehr Informationen siehe die Datenschutzerkl\xE4rung des entsprechenden Servers.",
rightsLabel: "Deine Rechte",
rightsDescription: "Du hast das Recht, der Verarbeitung deiner Daten zu widersprechen (Art. 21 DSGVO), oder Auskunft \xFCber sowie Berichtigung oder L\xF6schung deiner Daten zu beantragen (Art. 15-17 DSGVO), indem du den f\xFCr den Betrieb dieser Seite Verantwortlichen oder den entsprechenden Auftragsverarbeiter kontaktierst. Du hast zudem das Recht zur Beschwerde bei einer Datenschutzaufsichtsbeh\xF6rde, wenn du glaubst, dass die Verarbeitung deiner Daten in Widerspruch zur DSGVO steht (Art. 77 DSGVO).",
imprintLabel: "Impressum",
imprintDescription: "Kontaktdaten des f\xFCr den Betrieb dieser Instanz von CT Verantwortlichen",
infrastructureLabel: "Infrastruktur",
infrastructureDescription: "Kontaktdaten des Auftragsverarbeiters, der diese Instanz von CT bereitstellt"
},
onboarding: {
connectionHeadline: "Mit UDN verbinden",
connectionDescription: "Um Daten und Nachichten zu verschicken, verbinde dich mit dem Universellen Dezentralen Netzwerk (UDN).",
@@ -891,6 +921,7 @@
settingsButton: "Ajustes",
manageStorageButton: "Gestionar almacenamiento",
transferDataButton: "Enviar o exportar archivos",
legalButton: "Informaci\xF3n legal",
updateButton: (version) => `Actualizar a ${version}`,
typeChat: "chat",
noChatsPlaceholder: "No hay chats"
@@ -925,6 +956,20 @@
brandDescription: "Code desponible en Viridian Public Resources (VDPR)"
}
},
legal: {
legalHeadline: "Informaci\xF3n legal",
legalDescription: "CT es software de c\xF3digo abierto, publicado y distribuido bajo la licencia GPL-3.0.",
privacyLabel: "Privacidad y datos de la aplicaci\xF3n",
privacyDescription: "CT almacena datos en tu dispositivo. No se env\xEDan ni almacenan datos en el servidor que aloja esta instancia de CT, salvo los datos necesarios para proporcionar el sitio web. Estos datos se procesan por el encargado del tratamiento.",
udnLabel: "Servidores UDN y comunicaci\xF3nes",
udnDescription: "Los servidores UDN a los que te conectas son separados e independientes de CT. Al conectarte o mientras mantengas la conexi\xF3n a un servidor UDN, los chats que creas y los objetos contenidos adentro, incluso mensajes, boards y tareas, se envian al servidor. Mira la pol\xEDtica de privacidad de este servidor para m\xE1s detalles.",
rightsLabel: "Tus derechos",
rightsDescription: "Tienes el derecho a oponerte a cualquier tratamiento de tus datos en virtud del art. 21 del RGPD, as\xED como a solicitar el acceso, la modificaci\xF3n y la supresi\xF3n de tus datos conforme a los arts. 15, 16 y 17 del RGPD, poni\xE9ndote en contacto con el responsable y/o el encargado del tratamiento. Tambi\xE9n tienes el derecho a presentar una reclamaci\xF3n ante una autoridad de control en materia de protecci\xF3n de datos en virtud del art. 77 del RGPD.",
imprintLabel: "Aviso Legal",
imprintDescription: "Informaci\xF3n del contacto del responsable del tratamiento que proporciona esta instancia de CT",
infrastructureLabel: "Infraestructura",
infrastructureDescription: "Informaci\xF3n del contacto del encargado del tratamiento que aloja esta instancia de CT"
},
onboarding: {
connectionHeadline: "Conectar al UDN",
connectionDescription: "Para transferir datos y enviar mensajes, con\xE9ctate a la Red Descentralizada Universal (UDN).",
@@ -1543,6 +1588,12 @@
this.openVDPR = () => {
window.open("https://vdpr.org/VDMDI/CT");
};
this.openImprint = () => {
window.open("/imprint");
};
this.openProviderContact = () => {
window.open("/provider");
};
this.translations = allTranslations[settingsModel2.language] || allTranslations.en;
this.latestVersion.subscribe((latestVersion) => {
this.updateText.value = this.translations.homePage.updateButton(latestVersion);
@@ -1661,6 +1712,13 @@
this.fileTransferViewModel = fileTransferViewModel2;
this.storageViewModel = storageViewModel2;
this.connectionViewModel = connectionViewModel2;
this.isPresentingLegalModal = new State(false);
this.openLegalModal = () => {
this.isPresentingLegalModal.value = true;
};
this.closeLegalModal = () => {
this.isPresentingLegalModal.value = false;
};
this.coreViewModel.context = this;
this.registerKeyStroke(
"," /* Settings */,
@@ -1670,6 +1728,8 @@
"t",
this.fileTransferViewModel.showDirectionSelectionModal
);
this.registerKeyStroke("i", this.openLegalModal);
this.registerKeyStroke("backspace" /* CloseOrCancel */, this.closeLegalModal);
this.registerKeyStroke("e", this.storageViewModel.showStorageModal);
this.registerKeyStroke("x", this.connectionViewModel.disconnect);
this.registerKeyStroke("c", this.connectionViewModel.connect);
@@ -5576,7 +5636,7 @@
};
// src/View/homePage.tsx
function HomePage(coreViewModel2, storageViewModel2, settingsViewModel2, connectionViewModel2, fileTransferViewModel2, chatListViewModel2) {
function HomePage(coreViewModel2, homeViewModel2, storageViewModel2, settingsViewModel2, connectionViewModel2, fileTransferViewModel2, chatListViewModel2) {
const greeting = createProxyState(
[settingsViewModel2.username],
() => coreViewModel2.translations.homePage.greeting(
@@ -5649,6 +5709,11 @@
coreViewModel2.translations.homePage.manageStorageButton,
"hard_drive",
"e"
), HomePageButton(
homeViewModel2.openLegalModal,
coreViewModel2.translations.homePage.legalButton,
"gavel",
"i"
), /* @__PURE__ */ createElement(
"button",
{
@@ -9337,6 +9402,44 @@
}
};
// src/View/Modals/legalModal.tsx
function LegalModal(coreViewModel2, homeViewModel2) {
return /* @__PURE__ */ createElement(
"div",
{
class: "modal",
"toggle:open": homeViewModel2.isPresentingLegalModal
},
/* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("main", null, /* @__PURE__ */ createElement("h1", null, coreViewModel2.translations.legal.legalHeadline), /* @__PURE__ */ createElement("p", { class: "secondary" }, coreViewModel2.translations.legal.legalDescription), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement("div", { class: "flex-column gap" }, /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "privacy_tip"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.legal.privacyLabel), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.legal.privacyDescription))), /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "cell_tower"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.legal.udnLabel), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.legal.udnDescription))), /* @__PURE__ */ createElement("div", { class: "tile" }, /* @__PURE__ */ createElement("span", { class: "icon" }, "balance"), /* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.legal.rightsLabel), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.legal.rightsDescription))), /* @__PURE__ */ createElement("hr", null), /* @__PURE__ */ createElement(
"button",
{
class: "tile",
"on:click": coreViewModel2.openImprint
},
/* @__PURE__ */ createElement("span", { class: "icon" }, "contact_page"),
/* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.legal.imprintLabel), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.legal.imprintDescription)),
/* @__PURE__ */ createElement("span", { class: "icon" }, "open_in_new")
), /* @__PURE__ */ createElement(
"button",
{
class: "tile",
"on:click": coreViewModel2.openProviderContact
},
/* @__PURE__ */ createElement("span", { class: "icon" }, "domain"),
/* @__PURE__ */ createElement("div", null, /* @__PURE__ */ createElement("b", null, coreViewModel2.translations.legal.infrastructureLabel), /* @__PURE__ */ createElement("span", { class: "secondary" }, coreViewModel2.translations.legal.infrastructureDescription)),
/* @__PURE__ */ createElement("span", { class: "icon" }, "open_in_new")
))), /* @__PURE__ */ createElement(
"button",
{
"on:click": homeViewModel2.closeLegalModal,
ctkeystroke: getKeySymbol("backspace" /* CloseOrCancel */)
},
coreViewModel2.translations.general.closeButton,
/* @__PURE__ */ createElement("span", { class: "icon" }, "close")
))
);
}
// src/index.tsx
var storageModel = new StorageModel();
var settingsModel = new SettingsModel(storageModel);
@@ -9395,6 +9498,7 @@
document.querySelector("main").append(
HomePage(
coreViewModel,
homeViewModel,
storageViewModel,
settingsViewModel,
connectionViewModel,
@@ -9403,6 +9507,7 @@
),
ChatPageWrapper(coreViewModel, chatListViewModel),
OnboardingModalWrapper(coreViewModel, onboardingViewModel),
LegalModal(coreViewModel, homeViewModel),
ConnectionModal2(coreViewModel, connectionViewModel),
DataTransferModalWrapper(
coreViewModel,
Vendored
+1 -1
View File
@@ -1,4 +1,4 @@
const VERSION = "2610"
const VERSION = "2610 First Revision"
function processUrl(event) {
const url = event.request.url;
+1 -1
View File
@@ -1 +1 @@
2610
2610 First Revision