From ccb2ee0b1111d0423d4d4377b64165cb12b80bf1 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 22 Jan 2021 16:41:49 +0530 Subject: [PATCH 01/14] update changelog for 4.0 --- CHANGELOG.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb11c061d..a4b9a296b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,50 @@ +# 4.0.0 (A) + +We're very happy to introduce CryptPad v4.0! + +This release is the culmination of a great deal of work over the last year, in which we searched for the right metaphors and imagery to clearly represent what CryptPad is all about. We've reworked our logo, color theme, text on our static pages, and the icons throughout the platform to convey the calm and safety we want our users to feel. + +Our release schedule typically follows an alphabetical naming scheme, ranging from A for the first (or zero-th) release of the cycle to Z for the last, with a thematic name for each letter. In the rush of preparing translations and double-checking all of our changes we never found time to settle on a theme for this release, but we do find there's some value in maintaining the otherwise arbitrary rhythm we've followed all this time. The progression through the alphabet gives a sense of pace to what can otherwise seem like a endless stream of problems that need solving, and the end of the alphabet prompts us to build towards major milestones like this one. + +With that in mind, you can expect 25 more major releases in this cycle before version 5.0, roughly every three weeks or so depending on circumstances. + +## Goals + +The main intent of this release was to deploy our `rebrand` branch which had been in development for some time. Along the way we also made notable improvements to the sheet editor which will be mentioned below. + +## Update notes + +In the process of redesigning the platform we started using some new features of the LESS CSS pre-processor language that were not supported by the version of lesshint that we were using to scan for errors. We've updated that dev dependency to a newer version (4.5.0 => 6.3.7) which introduced a rather large number of minor dependencies. These are only used during development, not by the server itself, so this is unlikely to have any impact on the software itself. + +To update from 3.25.1 to 4.0.0: + +1. Stop your server +2. Get the latest code from the 4.0.0 tag +3. Install the latest dependencies with `bower update` and `npm i` +4. Restart your server + +## Features + +* We've built a new version of the web-assembly code used to convert between OnlyOffice's internal representation of spreadsheet data and standard formats like XLSX, ODS, and CSV. We've also improved the ability to print whole sheets and selections in the UI. This still depends on the host browser's support of the required web APIs, but it should work in common browsers except maybe Safari and Internet Explorer. +* We found that certain issues reported via the built-in support ticket system were not easy to debug without knowing the id of the user's drive. Support tickets now include a `driveChannel` attribute to simplify this process. +* We've added a variety of settings for the control of how your browser uses a local database to speed up loading times and display cached versions of documents even when disconnected from our server. These are available in the "confidentiality" section of the settings page (https://cryptpad.fr/settings/#security). + +Finally, the "rebrand" part of this release: + +* Our home page features our new logo, a cleaner layout, new text (notably dropping the use of "zero-knowledge" from our explanation), new app icons, softer colors, neater fonts, and a custom illustration of a document shredder that hints at how CryptPad works. +* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.fr) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. +* Each of our editors now features a dedicated favicon to make it easier to distinguish different CryptPad tabs in your browser. +* The contact page now points to _Element_ instead of Riot, since the Matrix team rebranded in the last while as well. +* The "pricing" or "features" page (features.html) reads the server's configured storage limits from a server endpoint and displays them, rather than hardcoding the default values in the text. +* There is now a custom illustration of a person swallowing a key on the registration page to convey that CryptPad admins cannot restore access to documents if users lose or forget their credentials. This is underscored by highlights to the explanatory text displayed to the left of the form. +* Our loading screen now features a much simpler color scheme instead of the vibrant blue blocks. This is part of an effort to pave the way for a _dark theme_ that we hope to introduce very soon. +* Lastly, we've added a number of semantic cues in various places to improve the experience of users that rely on screen-readers. There's still a lot to do in this regard, but this big rewrite was a good opportunity to review some easy pain-points to alleviate. + +## Bug fixes + +* We found andd fixed a regression in the slide app which caused newly created documents to be initialized without a title. +* Thanks to a helpful user-report we were able to identify an issue in our rich text editor's _comments_ system that prevented iOS users from typing. + # ZyzomysPedunculatus' revenge (3.25.1) This minor release is primarily intended to fix some minor issues that were introduced or detected following our 3.25.0 release, but it also includes some major improvements that we want to test and stabilize before our upcoming 4.0.0 release. From a2bc22a95759a906738a3bfe90ace6e6598d9b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Fri, 22 Jan 2021 11:45:12 +0000 Subject: [PATCH 02/14] Clarify FAQ point --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4b9a296b..0cfcd8758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,7 +32,7 @@ To update from 3.25.1 to 4.0.0: Finally, the "rebrand" part of this release: * Our home page features our new logo, a cleaner layout, new text (notably dropping the use of "zero-knowledge" from our explanation), new app icons, softer colors, neater fonts, and a custom illustration of a document shredder that hints at how CryptPad works. -* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.fr) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. +* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.fr) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. An updated Frequently Asked Questions will be added to the documentation in the near future. * Each of our editors now features a dedicated favicon to make it easier to distinguish different CryptPad tabs in your browser. * The contact page now points to _Element_ instead of Riot, since the Matrix team rebranded in the last while as well. * The "pricing" or "features" page (features.html) reads the server's configured storage limits from a server endpoint and displays them, rather than hardcoding the default values in the text. From fef1b866a0ee87c06c2b0fa36532fea3d2c21644 Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 22 Jan 2021 17:25:48 +0530 Subject: [PATCH 03/14] add a note about possible incompatibilities with customized instances --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4b9a296b..833a67541 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ The main intent of this release was to deploy our `rebrand` branch which had bee In the process of redesigning the platform we started using some new features of the LESS CSS pre-processor language that were not supported by the version of lesshint that we were using to scan for errors. We've updated that dev dependency to a newer version (4.5.0 => 6.3.7) which introduced a rather large number of minor dependencies. These are only used during development, not by the server itself, so this is unlikely to have any impact on the software itself. +Otherwise, this release includes lots of changes to the platform's style sheets and static pages. If you've applied heavy customizations to your instance you might notice errors due to incompatibilities with your local changes. We recommend that you test your customizations against the latest release locally before updating a public instance to avoid service outages. + To update from 3.25.1 to 4.0.0: 1. Stop your server From ae8e0d31a4fd2f3805d039572181c87245017aa2 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 25 Jan 2021 01:20:59 +0100 Subject: [PATCH 04/14] Translated using Weblate (Finnish) Currently translated at 98.6% (1335 of 1353 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/fi/ --- www/common/translations/messages.fi.json | 124 ++++++++++++++++------- 1 file changed, 85 insertions(+), 39 deletions(-) diff --git a/www/common/translations/messages.fi.json b/www/common/translations/messages.fi.json index 06e0a4d69..15232a5c1 100644 --- a/www/common/translations/messages.fi.json +++ b/www/common/translations/messages.fi.json @@ -43,7 +43,7 @@ "saved": "Tallennettu", "synced": "Kaikki on tallennettu", "deleted": "Poistettu", - "deletedFromServer": "Padi poistettu palvelimelta", + "deletedFromServer": "Asiakirja tuhottu", "mustLogin": "Kirjaudu sisään käyttääksesi tätä sivua", "disabledApp": "Tämä sovellus on poistettu käytöstä. Saadaksesi lisätietoja ota yhteyttä tämän CryptPad-instanssin ylläpitäjään.", "realtime_unrecoverableError": "Tapahtui peruuttamaton virhe. Paina OK ladataksesi uudelleen.", @@ -422,17 +422,17 @@ "login_invalUser": "Käyttäjänimi vaaditaan", "login_invalPass": "Salasana vaaditaan", "login_unhandledError": "Tapahtui odottamaton virhe :(", - "register_importRecent": "Tuo padeja anonyymistä sessiosta", + "register_importRecent": "Tuo rekisteröitymättömänä luodut asiakirjat CryptDriveen", "register_acceptTerms": "Hyväksyn käyttöehdot", "register_passwordsDontMatch": "Salasanat eivät täsmää!", "register_passwordTooShort": "Salasanan täytyy olla vähintään {0} merkkiä pitkä.", "register_mustAcceptTerms": "Sinun täytyy hyväksyä käyttöehdot.", "register_mustRememberPass": "Emme voi nollata salasanaasi, jos unohdat sen. On erittäin tärkeää, että muistat sen! Ole hyvä ja laita rasti valintaruutuun vahvistaaksesi.", "register_whyRegister": "Miksi rekisteröityminen kannattaa?", - "register_header": "Tervetuloa CryptPadiin", + "register_header": "Rekisteröidy", "register_writtenPassword": "Olen kirjoittanut ylös käyttäjätunnukseni ja salasanani, jatka", - "register_cancel": "Takaisin", - "register_warning": "Nollatietoperiaate tarkoittaa, ettemme voi palauttaa tietojasi, jos hävität salasanasi.", + "register_cancel": "Peruuta", + "register_warning": ". Varoitus", "register_alreadyRegistered": "Tämä käyttäjä on jo olemassa, haluatko kirjautua sisään?", "register_emailWarning0": "Näyttää siltä, että lähetit sähköpostiosoitteesi käyttäjätunnuksenasi.", "register_emailWarning1": "Voit halutessasi tehdä niin, mutta sitä ei lähetetä palvelimellemme.", @@ -570,7 +570,7 @@ "upload_notEnoughSpace": "CryptDrivessasi ei ole tarpeeksi vapaata tallennustilaa tälle tiedostolle.", "upload_notEnoughSpaceBrief": "Tallennustila ei riitä", "upload_tooLarge": "Tiedoston koko ylittää suurimman käyttäjätilillesi sallitun latauskoon.", - "upload_tooLargeBrief": "Liian suuri tiedosto", + "upload_tooLargeBrief": "Tiedoston koko ylittää [0}MB rajan", "upload_choose": "Valitse tiedosto", "upload_pending": "Odottaa", "upload_cancelled": "Keskeytetty", @@ -610,14 +610,14 @@ "mdToolbar_code": "Koodi", "mdToolbar_toc": "Sisällysluettelo", "home_product": "CryptPad on sisäänrakennetun tietosuojan periaatteen mukainen vaihtoehto suosituille toimisto-ohjelmistoille ja pilvipalveluille. Kaikki CryptPadiin tallennettavat tiedot salataan ennen palvelimelle lähettämistä. Kukaan (emme edes me) ei voi päästä tietoihisi ilman avaimiasi.", - "home_host": "Tämä on itsenäinen yhteisön ylläpitämä Cryptpad-instanssi. Sen lähdekoodi on saatavilla GitHubissa.", + "home_host": "Tämä on itsenäinen yhteisön ylläpitämä Cryptpad-instanssi.", "home_host_agpl": "Cryptpad-ohjelmisto jaellaan AGPL3-ohjelmistolisenssin ehtojen mukaisesti", "home_ngi": "NGI Award-palkinnon voittaja", "about_intro": "CryptPadia kehittää Pariisissa, Ranskassa ja Iasissa, Romaniassa toimivaXWiki SAS-pienyrityksen tutkimusryhmä. CryptPadin parissa työskentelee kolme ryhmän ydinjäsentä ja lisäksi joitakin avustajia XWiki SAS:n sisältä ja ulkopuolelta.", "about_core": "Ydinkehittäjät", "about_contributors": "Tärkeät avustajat", "main_info": "

Luottamuksellista yhteistyötä

Jaa ideoita yhdessä jaettujen asiakirjojen avulla.Nollatieto-teknologia turvaa yksityisyytesi - jopa meiltä.", - "main_catch_phrase": "Pilvipalvelu nollatietoperiaatteella", + "main_catch_phrase": "Avoimen lähdekoodin salattu kollaboraatioalusta", "main_footerText": "CryptPadin avulla voit nopeasti luoda kollaboratiivisia asiakirjoja muistiinpanoja ja yhteistä ideointia varten.", "footer_applications": "Sovellukset", "footer_contact": "Ota yhteyttä", @@ -628,8 +628,8 @@ "terms": "Käyttöehdot", "blog": "Blogi", "topbar_whatIsCryptpad": "Mikä on CryptPad", - "whatis_title": "Mikä on CryptPad", - "whatis_collaboration": "Nopeaa ja helppoa yhteistyötä", + "whatis_title": "Mikä on CryptPad?", + "whatis_collaboration": "Yksityisyyden huomioivaa yhteistyötä", "team_inviteLinkError": "Linkin luomisessa tapahtui virhe.", "whatis_drive": "CryptDriven järjestely", "admin_activeSessionsTitle": "Aktiiviset yhteydet", @@ -811,44 +811,44 @@ "policy_choices_vpn": "Jos haluat käyttää ylläpitämäämme CryptPad-instanssia, mutta et paljastaa IP-osoitettasi, voit suojata sen käyttämällä Tor-selainpakettia tai VPN-palvelua.", "policy_choices_ads": "Jos haluat ainoastaan estää analytiikkapalvelumme, voit käyttää mainosten estämiseen tarkoitettuja työkaluja, kuten Privacy Badgeria.", "features": "Ominaisuudet", - "features_title": "Ominaisuuksien vertailu", + "features_title": "Ominaisuudet", "features_feature": "Ominaisuus", - "features_anon": "Anonyymi käyttäjä", - "features_registered": "Rekisteröitynyt käyttäjä", - "features_premium": "Premium-käyttäjä", + "features_anon": "Rekisteröitymätön", + "features_registered": "Rekisteröitynyt", + "features_premium": "Premium", "features_notes": "Huomautukset", - "features_f_apps": "Käyttöoikeus pääsovelluksiin", - "features_f_core": "Sovellusten yleiset ominaisuudet", + "features_f_apps": "Käyttöoikeus kaikkiin sovelluksiin", + "features_f_core": "Yleiset ominaisuudet", "features_f_core_note": "Muokkaus, Tuonti ja vienti, Historia, Käyttäjälista, Keskustelu", - "features_f_file0": "Avaa tiedostoja", - "features_f_file0_note": "Katsele ja lataa muiden käyttäjien jakamia tiedostoja", + "features_f_file0": "Avaa asiakirjoja", + "features_f_file0_note": "Katsele ja lataa muiden käyttäjien jakamia asiakirjoja", "features_f_cryptdrive0": "Rajoitettu CryptDrive-käyttöoikeus", "features_f_cryptdrive0_note": "Mahdollisuus säilyttää padit selaimessa myöhempää käyttöä varten", "features_f_storage0": "Rajoitettu säilytysaika", - "features_f_storage0_note": "Luodut padit poistetaan kolmen kuukauden käyttämättömyyden jälkeen", + "features_f_storage0_note": "Asiakirjat poistetaan {0} päivän käyttämättömyyden jälkeen", "features_f_anon": "Kaikki anonyymien käyttäjien ominaisuudet", - "features_f_anon_note": "Paremmalla käytettävyydellä ja tehokkaammilla padien hallintaominaisuuksilla", + "features_f_anon_note": "Lisätoiminnoilla varustettuna", "features_f_cryptdrive1": "Täysi CryptDrive-toiminnallisuus", "features_f_cryptdrive1_note": "Kansiot, jaetut kansiot, mallipohjat, tunnisteet", "features_f_devices": "Padisi kaikilla laitteillasi", "features_f_devices_note": "CryptDrive käytettävissä kaikkialta käyttäjätunnuksen avulla", - "features_f_social": "Sosiaaliset sovellukset", - "features_f_social_note": "Luo käyttäjäprofiili, käytä avatar-kuvaa, keskustele yhteystietojen kanssa", + "features_f_social": "Yhteistyöominaisuudet", + "features_f_social_note": "Lisää yhteystietoja turvallista yhteistyötä varten, luo profiili, hienojakoiset käyttöoikeudet", "features_f_file1": "Lataa ja jaa tiedostoja", - "features_f_file1_note": "Jaa tiedostoja yhteystietojesi kanssa tai upota ne padeihisi", - "features_f_storage1": "Pysyvä tallennustila (50Mt)", - "features_f_storage1_note": "CryptDriveen tallennettuja padeja ei koskaan poisteta käyttämättömyyden takia", + "features_f_file1_note": "Säilytä haluamasi tiedostot, kuten kuvat, PDF-tiedostot ja videot CryptDrivessasi. Voit jakaa ne yhteystietojesi kanssa tai upottaa ne asiakirjoihisi (maksimikoko {0}Mt)", + "features_f_storage1": "Henkilökohtainen tallennustila ({0}Mt)", + "features_f_storage1_note": "CryptDriveen tallennettuja padeja ei poisteta käyttämättömyyden takia", "features_f_register": "Rekisteröidy ilmaiseksi", "features_f_reg": "Kaikki rekisteröityneiden käyttäjien ominaisuudet", - "features_f_reg_note": "Ja auta CryptPadin kehitystyötä", + "features_f_reg_note": "Lisäetuja saatavilla", "features_f_storage2": "Lisää tallennustilaa", - "features_f_storage2_note": "5Gt - 50Gt riippuen valitusta tilauksesta", + "features_f_storage2_note": "5Gt - 50Gt riippuen valitusta tilauksesta, korkeampi palvelimelle ladattujen tiedostojen kokorajoitus ({0}Mt)", "features_f_support": "Nopeampi tuki", - "features_f_support_note": "Ammattimainen sähköpostituki Team-tilauksella", - "features_f_supporter": "Ryhdy yksityisyyden tukijaksi", - "features_f_supporter_note": "Auta meitä näyttämään, että yksityisyyttä edistävien ohjelmistojen tulisi olla oletusarvo", - "features_f_subscribe": "Tilaa Premium", - "features_f_subscribe_note": "Kirjaudu ensin sisään CryptPadiin", + "features_f_support_note": "Ylläpitotiimin tarjoama priorisoitu tuki sähköpostin ja sisäänrakennetun tukipyyntöjärjestelmän välityksellä", + "features_f_supporter": "Tue yksityisyyttä", + "features_f_supporter_note": "Auta CryptPadia nousemaan taloudellisesti kannattavaksi ja näytä, että yksityisyyttä korostavan, asiakkaiden omasta tahdostaan rahoittaman ohjelmiston tulisi olla normi", + "features_f_subscribe": "Tilaa", + "features_f_subscribe_note": "Tilaamiseen tarvitaan rekisteröity käyttäjätili", "policy_howweuse_p1": "Käytämme näitä tietoja suunnitellaksemme CryptPadin mainostusta ja arvioidaksemme aiempien kampanjoiden onnistumista. Sijaintitietosi puolestaan kertovat meille, mitä kieliä CryptPadin tulisi mahdollisesti tukea englannin lisäksi.", "tos_title": "CryptPad-käyttöehdot", "tos_legal": "Älä ole pahantahtoinen, väärinkäyttäjä tai tee mitään laitonta.", @@ -863,7 +863,7 @@ "help": { "title": "Näin pääset alkuun", "generic": { - "more": "Tutustu usein kysyttyihin kysymyksiin saadaksesi lisätietoja CryptPadin toiminnallisuudesta.", + "more": "Tutustu CryptPadin toimintaan ja ominaisuuksiin dokumentaatiosivuillamme.", "share": "Jaa tämä asiakirja Jaa-painikkeella ja hallitse käyttöoikeuksia Käyttöoikeudet-painikkeella.", "save": "Kaikki tekemäsi muutokset synkronoidaan automaattisesti, joten sinun ei tarvitse koskaan tallentaa" }, @@ -1103,12 +1103,12 @@ "contact_bug": "Virheraportti", "contact_devHint": "Ominaisuuspyyntöjä, käytettävyysparannuksia tai kiitoksia varten.", "contact_dev": "Ota yhteyttä kehittäjiin", - "contact_adminHint": "Käyttäjätiliin, tallennustilaan tai palvelun saatavuuteen liittyviä ongelmia varten.", + "contact_adminHint": "Käyttäjätiliin, tallennustilaan tai palvelun saatavuuteen liittyviä ongelmia varten.\n", "contact_admin": "Ota yhteyttä ylläpitäjiin", "footer_tos": "Käyttöehdot", "footer_legal": "Oikeusasiat", "footer_donate": "Lahjoita", - "footer_team": "Tiimimme", + "footer_team": "Tekijät", "footer_product": "Tuotteemme", "admin_flushCacheDone": "Välimuisti tyhjennetty onnistuneesti", "admin_flushCacheButton": "Tyhjennä välimuisti", @@ -1185,7 +1185,7 @@ "creation_appMenuName": "Uusi padi (Ctrl + E)", "creation_propertiesTitle": "Saatavuus", "creation_passwordValue": "Salasana", - "creation_expiration": "Vanhenemisaika", + "creation_expiration": "Vanhenemispäivämäärä", "creation_noOwner": "Ei omistajaa", "creation_ownedByOther": "Toisen käyttäjän omistama", "creation_owners": "Omistajat", @@ -1194,7 +1194,7 @@ "creation_create": "Luo", "creation_newTemplate": "Uusi mallipohja", "creation_noTemplate": "Ei mallipohjaa", - "creation_password": "Lisää salasana", + "creation_password": "Salasana\n", "creation_expire2": "Vanhenevalla padilla on asetettu elinikä, jonka täyttyessä se poistetaan automaattisesti palvelimelta ja muiden käyttäjien CryptDriveista.", "creation_expire1": "Rajoittamatonta padia ei poisteta palvelimelta, ellei sen omistaja poista sitä.", "creation_expireMonths": "Kuukausi(a)", @@ -1205,7 +1205,7 @@ "creation_expire": "Vanheneva padi", "creation_expireTitle": "Elinikä", "creation_owned2": "Avoimella padilla ei ole omistajaa, ja sitä ei voida poistaa palvelimelta, ellei sen vanhenemisaika ole tullut täyteen.", - "creation_owned1": "Omistettu padi voidaan poistaa palvelimelta omistajan niin halutessa. Omistetun padin poistaminen poistaa sen muiden käyttäjien CryptDriveista.", + "creation_owned1": "Omistettu asiakirja voidaan poistaa palvelimelta omistajan niin halutessa. Omistetun asiakirjan poistaminen poistaa sen myös muiden käyttäjien CryptDriveista.", "creation_ownedFalse": "Avoin padi", "creation_ownedTrue": "Omistettu padi", "creation_owned": "Omistettu padi", @@ -1313,5 +1313,51 @@ "loading_state_3": "Lataa jaetut kansiot", "loading_state_2": "Päivitä sisältö", "loading_state_1": "Lataa Drive", - "loading_state_0": "Rakenna käyttöliittymä" + "loading_state_0": "Rakenna käyttöliittymä", + "register_notes_title": "Tärkeät huomiot", + "home_support_title": "Tue CryptPadia", + "home_opensource": "Kuka tahansa voi ylläpitää omaa henkilökohtaista tai ammattimaista CryptPad-instanssia. Lähdekoodi on saatavilla GitHubissa.", + "home_opensource_title": "Avoin lähdekoodi", + "home_host_title": "Tietoja tästä instanssista", + "home_privacy_text": "CryptPad on luotu helpottamaan yhteistyötä ja pitämään samalla tietosi yksityisinä. Kaikki sisällön salaus ja purku tapahtuu omassa selaimessasi. Tämä tarkoittaa, että asiakirjat, keskustelut ja tiedostot ovat lukukelvottomia istuntosi ulkopuolella. Edes palvelun ylläpitäjät eivät pääse käyttämään tietojasi.", + "home_privacy_title": "Suunniteltu yksityiseksi", + "offlineError": "Uusimpia tietoja ei voitu synkronoida. Sivua ei voida juuri nyt näyttää. Sivun latautumista jatketaan, kun yhteys palveluun palaa.", + "share_noContactsOffline": "Olet offline-tilassa. Yhteystiedot eivät ole saatavilla.", + "access_offline": "Olet offline-tilassa. Käyttöoikeuksien hallinta ei ole saatavilla.", + "admin_support_last": "Päivitetty: ", + "admin_support_first": "Luotu: ", + "admin_support_collapse": "Pienennä", + "admin_support_open": "Näytä", + "admin_support_closed": "Suljetut tukipyynnöt:", + "admin_support_answered": "Vastatut tukipyynnöt:", + "admin_support_normal": "Vastaamattomat tukipyynnöt:", + "admin_support_premium": "Premium-tukipyynnöt:", + "contacts_confirmCancel": "Haluatko varmasti perua henkilölle {0} lähetetyn yhteyspyynnön?", + "history_trimPrompt": "Tähän asiakirjaan liittyy {0} historiatietoa, jotka saattavat hidastaa asiakirjan latautumista. Harkitse tarpeettomien historiatietojen poistamista.", + "mediatag_loadButton": "Lataa liite", + "settings_mediatagSizeHint": "Maksimikoko automaattisesti ladattaville asiakirjoihin upotetuille mediaobjekteille (kuvat, videot, PDF-tiedostot). Maksimikokoa suuremmat objektit voidaan ladata manuaalisesti. Käytä arvoa \"-1\" ladataksesi mediaobjektit aina automaattisesti.", + "settings_mediatagSizeTitle": "Automaattinen latausrajoitus", + "mediatag_notReady": "Ole hyvä ja anna latauksen valmistua", + "pad_mediatagOpen": "Avaa tiedosto", + "pad_mediatagShare": "Jaa tiedosto", + "mediatag_saveButton": "Tallenna", + "Offline": "Offline-tilassa", + "download_zip_file": "Tiedosto {0}/{1}", + "download_zip": "Rakennetaan ZIP-arkistoa...", + "fileTableHeader": "Lataukset palvelimelta ja palvelimelle", + "allowNotifications": "Salli ilmoitukset", + "archivedFromServer": "Asiakirja arkistoitu", + "restoredFromServer": "Asiakirja palautettu", + "admin_archiveInval": "Virheellinen asiakirja", + "admin_archiveInput2": "Asiakirjan salasana", + "admin_archiveInput": "Asiakirjan URL", + "admin_unarchiveButton": "Palauta", + "admin_unarchiveHint": "Palauta aiemmin arkistoitu asiakirja", + "admin_unarchiveTitle": "Palauta asiakirjoja", + "admin_archiveButton": "Arkistoi", + "admin_archiveHint": "Estä asiakirjan käyttö poistamatta sitä lopullisesti. Asiakirja sijoitetaan arkistokansioon ja poistetaan sieltä muutaman päivän kuluttua (poistoaika säädettävissä palvelimen konfiguraatiotiedostosta).", + "admin_archiveTitle": "Arkistoi asiakirjoja", + "errorPopupBlocked": "CryptPadin täytyy pystyä avaamaan uusia välilehtiä toimiakseen. Ole hyvä ja salli ponnahdusikkunat selaimesi osoitekentästä. Ponnahdusikkunoita ei koskaan käytetä mainostamiseen.", + "unableToDisplay": "Asiakirjan näyttäminen epäonnistui. Paina Esc-näppäintä ladataksesi sivun uudelleen. Jos ongelma ei ratkea, ota yhteyttä käyttäjätukeen.", + "documentID": "Asiakirjan tunniste" } From 4c7d683c6f08e55ee41803b21304470b50c95873 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 25 Jan 2021 01:21:00 +0100 Subject: [PATCH 05/14] Translated using Weblate (Turkish) Currently translated at 1.4% (20 of 1353 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/tr/ --- www/common/translations/messages.tr.json | 25 +++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/www/common/translations/messages.tr.json b/www/common/translations/messages.tr.json index 0967ef424..85522bc69 100644 --- a/www/common/translations/messages.tr.json +++ b/www/common/translations/messages.tr.json @@ -1 +1,24 @@ -{} +{ + "common_connectionLost": "Sunucu Bağlantısı Kesildi
Bağlantı geri gelene kadar salt-okunur moddasınız.", + "button_newwhiteboard": "Yeni Beyaz tahta", + "button_newslide": "Yeni Sunum", + "button_newpoll": "Yeni Anket", + "button_newcode": "Yeni Kod padi", + "button_newpad": "Yeni Zengin Metin padi", + "type": { + "teams": "Ekipler", + "contacts": "Kişiler", + "todo": "Yapılacaklar listesi", + "media": "Medya", + "file": "Dosya", + "whiteboard": "Beyaz Tahta", + "drive": "CryptSürücü", + "slide": "Sunum", + "poll": "Anket", + "code": "Kod", + "pad": "Zengin metin biçimi" + }, + "fm_alert_anonymous": "Merhaba, şu anda CryptPad'i anonim olarak kullanıyorsunuz, sorun değil, ancak padlariniz bir süre kullanılmadığında silinebilir. Anonim kullanıcılar için sürücünün gelişmiş özelliklerini devre dışı bıraktık, çünkü bir şeyleri depolamak için güvenli bir yer olmadığını açıkça belirtmek istiyoruz. Bunu neden yaptığımız hakkında ve neden Kayıt olmanız ve Giriş yapmanız gerektiği hakkında okuyabilirsiniz.", + "main_catch_phrase": "Ekip iş birliği sistemi,
şifreli ve açık kaynak", + "main_title": "CryptPad: Tamamen Gizli, İşbirliğine Dayalı Gerçek Zamanlı Düzenleme" +} From 81427fea5df99908aa5632a5d42fe562a6c412e8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 25 Jan 2021 01:21:00 +0100 Subject: [PATCH 06/14] Translated using Weblate (Japanese) Currently translated at 29.3% (397 of 1353 strings) Translation: CryptPad/App Translate-URL: http://weblate.cryptpad.fr/projects/cryptpad/app/ja/ --- www/common/translations/messages.ja.json | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/www/common/translations/messages.ja.json b/www/common/translations/messages.ja.json index 3f1135855..0ff8a2f37 100644 --- a/www/common/translations/messages.ja.json +++ b/www/common/translations/messages.ja.json @@ -133,13 +133,13 @@ "register_importRecent": "匿名セッション中のパッドをインポート", "importButton": "インポート", "policy_title": "CryptPad プライバシーポリシー", - "main_catch_phrase": "ゼロ知識クラウド", + "main_catch_phrase": "コラボレーションスイート
暗号化されかつオープンソース", "tos_3rdparties": "私たちは、法律で義務付けられている場合を除き、個別のデータを第三者に提供しません。", "tos_logs": "あなたのブラウザからサーバーに送信されたメタデータは、サービスを維持するために記録される場合があります。", "tos_availability": "私たちはこのサービスがあなたの役に立つことを願っていますが、可用性や性能は保証できません。定期的にデータをエクスポートしてください。", "tos_legal": "悪意ある行為、乱用する行為、または何らかの違法な行為を行わないでください。", "tos_title": "CryptPad サービス利用規約", - "whatis_title": "CryptPad とは何か", + "whatis_title": "CryptPad とは?", "topbar_whatIsCryptpad": "CryptPad とは何か", "footer_tos": "利用規約", "footer_donate": "寄付", @@ -149,7 +149,7 @@ "contact": "連絡先", "privacy": "プライバシー", "blog": "ブログ", - "driveReadmeTitle": "CryptPad とは何ですか?", + "driveReadmeTitle": "CryptPad とは?", "readme_welcome": "CryptPad へようこそ!", "register_header": "CryptPad へようこそ", "login_confirm": "パスワードの確認", @@ -420,5 +420,13 @@ "share_contactCategory": "連絡先", "share_linkCategory": "リンク", "share_linkEdit": "編集", - "previewButtonTitle": "マークダウンのプレビューを表示または非表示にします" + "previewButtonTitle": "マークダウンのプレビューを表示または非表示にします", + "whatis_model": "ビジネスモデル", + "whatis_collaboration": "プライベートコラボレーション", + "home_support_title": "CryptPad を支援する", + "home_opensource": "CryptPad は、個人やプロなど誰でもホストすることができます。ソースコードは GitHub で確認できます。", + "home_opensource_title": "オープンソース", + "home_host_title": "このインスタンスについて", + "home_privacy_text": "CryptPad は、データをプライベートに保護しながらコラボレーションを可能にするように構築されています。すべてのコンテンツは、あなたのブラウザ上で暗号化および復号されます。つまり、ドキュメント、チャット、およびファイルは、あなたがログインしているセッション以外では読み取れません。サービス管理者でさえ、あなたの情報にアクセスすることはできません。", + "home_privacy_title": "プライバシーバイデザイン" } From 8990e8def997cec37c0027879e372b0181939d9a Mon Sep 17 00:00:00 2001 From: ansuz Date: Tue, 26 Jan 2021 10:31:29 +0530 Subject: [PATCH 07/14] provide more context for EUNKNOWN logs --- lib/hk-util.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/hk-util.js b/lib/hk-util.js index 495f4ff81..cea5e5636 100644 --- a/lib/hk-util.js +++ b/lib/hk-util.js @@ -639,7 +639,15 @@ const handleGetHistory = function (Env, Server, seq, userId, parsed) { Server.send(userId, [0, HISTORY_KEEPER_ID, 'MSG', userId, JSON.stringify(msg)], readMore); }, (err) => { if (err && err.code !== 'ENOENT') { - if (err.message !== 'EINVAL') { Log.error("HK_GET_HISTORY", { + if (err.message === "EUNKNOWN") { + Log.error("HK_GET_HISTORY", { + channel: channelName, + lastKnownHash: lastKnownHash, + userId: userId, + sessions: Object.keys(HK.getNetfluxSession(Env, userId) || {}), + err: err && err.message || err, + }); + } else if (err.message !== 'EINVAL') { Log.error("HK_GET_HISTORY", { channel: channelName, err: err && err.message || err, stack: err && err.stack, From 507936a5dcd98e89de3b60855985072e11991d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Benqu=C3=A9?= Date: Thu, 28 Jan 2021 11:36:12 +0000 Subject: [PATCH 08/14] Add margin to button icons --- customize.dist/src/less2/include/forms.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/customize.dist/src/less2/include/forms.less b/customize.dist/src/less2/include/forms.less index b6d909a73..56d5cd235 100644 --- a/customize.dist/src/less2/include/forms.less +++ b/customize.dist/src/less2/include/forms.less @@ -105,7 +105,7 @@ transition: none; .fa, .cptools { - margin-right: 0.2em; + margin-right: 5px; } .cptools { vertical-align: middle; From edd46ebdb22b9cade2e6fa206bf9c52b4cf2183a Mon Sep 17 00:00:00 2001 From: ansuz Date: Fri, 29 Jan 2021 11:51:40 +0530 Subject: [PATCH 09/14] add some admin UI for profiling the server's workers --- docs/profile.md | 22 --------------- www/admin/app-admin.less | 7 +++++ www/admin/inner.js | 60 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 22 deletions(-) delete mode 100644 docs/profile.md diff --git a/docs/profile.md b/docs/profile.md deleted file mode 100644 index 469617cb5..000000000 --- a/docs/profile.md +++ /dev/null @@ -1,22 +0,0 @@ -```javascript -CryptPad_AsyncStore.rpc.send('ADMIN', - ['GET_WORKER_PROFILES'], - (e, _o) => { - var o = _o[0]; - // console.log(o[0]) - var sorted = Object.keys(o).sort(function (a, b) { - if (o[b] - o[a] <= 0) { return -1; } - return 1; - }); - var x = {}; - //console.log(sorted); - var total = 0; - sorted.forEach(function (k) { total += o[k]; }); - sorted.forEach(function (k) { - console.log("[%s] %ss running time (%s%)", k, o[k], Math.floor((o[k] / total) * 100)); - }); - } -) -``` - - diff --git a/www/admin/app-admin.less b/www/admin/app-admin.less index d19e6b4d7..940d6d712 100644 --- a/www/admin/app-admin.less +++ b/www/admin/app-admin.less @@ -167,6 +167,13 @@ } } + table#cp-performance-table { + td, th { + padding: 5px; + border: 1px solid #222; + } + } + input.cp-admin-inval { border-color: red !important; } diff --git a/www/admin/inner.js b/www/admin/inner.js index 597f8a7f3..ec86f816f 100644 --- a/www/admin/inner.js +++ b/www/admin/inner.js @@ -62,6 +62,9 @@ define([ 'support': [ 'cp-admin-support-list', 'cp-admin-support-init' + ], + 'performance': [ + 'cp-admin-performance-profiling', ] }; @@ -852,6 +855,63 @@ define([ return; }; + Messages.admin_cat_performance = "PERFORMANCE"; // XXX + Messages.admin_performanceProfilingHint = "Measure the running time of various server tasks by type"; // XXX + Messages.admin_performanceProfilingTitle = "Performance"; // XXX + + Messages.admin_performanceKeyHeading = 'KEY'; // XXX + Messages.admin_performanceTimeHeading = 'Time (seconds)'; // XXX + Messages.admin_performancePercentHeading = '%'; // XXX + + create['performance-profiling'] = function () { + var $div = makeBlock('performance-profiling'); + + var body = h('tbody'); + + var table = h('table#cp-performance-table', [ + h('thead', [ + h('th', Messages.admin_performanceKeyHeading), // XXX + h('th', Messages.admin_performanceTimeHeading), // XXX + h('th', Messages.admin_performancePercentHeading), // XXX + ]), + body, + ]); + + $div.append(table); + + var appendRow = function (key, time, percent) { + console.log("[%s] %ss running time (%s%)", key, time, percent); + body.appendChild(h('tr', [ key, time, percent ].map(function (x) { + return h('td', x); + }))); + }; + + var process = function (_o) { + var o = _o[0]; + var sorted = Object.keys(o).sort(function (a, b) { + if (o[b] - o[a] <= 0) { return -1; } + return 1; + }); + var x = {}; + var total = 0; + sorted.forEach(function (k) { total += o[k]; }); + sorted.forEach(function (k) { + var percent = Math.floor((o[k] / total) * 1000) / 10; + appendRow(k, o[k], percent) + }); + }; + + sFrameChan.query('Q_ADMIN_RPC', { + cmd: 'GET_WORKER_PROFILES', + }, function (e, data) { + if (e) { return void console.error(e); } + //console.info(data); + process(data); + }); + + return $div; + }; + var hideCategories = function () { APP.$rightside.find('> div').hide(); }; From 9a2ccccfd6d4a2fd06dd84f71f1bd01877d0e4b5 Mon Sep 17 00:00:00 2001 From: ansuz Date: Sun, 31 Jan 2021 14:47:55 +0530 Subject: [PATCH 10/14] relabel XXX comments --- www/admin/inner.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/www/admin/inner.js b/www/admin/inner.js index ec86f816f..a97dcce11 100644 --- a/www/admin/inner.js +++ b/www/admin/inner.js @@ -855,13 +855,13 @@ define([ return; }; - Messages.admin_cat_performance = "PERFORMANCE"; // XXX - Messages.admin_performanceProfilingHint = "Measure the running time of various server tasks by type"; // XXX - Messages.admin_performanceProfilingTitle = "Performance"; // XXX + Messages.admin_cat_performance = "PERFORMANCE"; // XXX admin + Messages.admin_performanceProfilingHint = "Measure the running time of various server tasks by type"; // XXX admin + Messages.admin_performanceProfilingTitle = "Performance"; // XXX admin - Messages.admin_performanceKeyHeading = 'KEY'; // XXX - Messages.admin_performanceTimeHeading = 'Time (seconds)'; // XXX - Messages.admin_performancePercentHeading = '%'; // XXX + Messages.admin_performanceKeyHeading = 'KEY'; // XXX admin + Messages.admin_performanceTimeHeading = 'Time (seconds)'; // XXX admin + Messages.admin_performancePercentHeading = '%'; // XXX admin create['performance-profiling'] = function () { var $div = makeBlock('performance-profiling'); @@ -870,9 +870,9 @@ define([ var table = h('table#cp-performance-table', [ h('thead', [ - h('th', Messages.admin_performanceKeyHeading), // XXX - h('th', Messages.admin_performanceTimeHeading), // XXX - h('th', Messages.admin_performancePercentHeading), // XXX + h('th', Messages.admin_performanceKeyHeading), + h('th', Messages.admin_performanceTimeHeading), + h('th', Messages.admin_performancePercentHeading), ]), body, ]); From 4a29d9df0032923010014b6582d2fd8407837eeb Mon Sep 17 00:00:00 2001 From: ansuz Date: Sun, 31 Jan 2021 15:28:45 +0530 Subject: [PATCH 11/14] implement admin GET_USER_TOTAL_SIZE call --- lib/commands/admin-rpc.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index 595b4c6dc..83e2ce8ca 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -5,6 +5,7 @@ const getFolderSize = require("get-folder-size"); const Util = require("../common-util"); const Ulimit = require("ulimit"); const Decrees = require("../decrees"); +const Pinning = require("./pin-rpc"); var Fs = require("fs"); @@ -324,6 +325,13 @@ var getLimits = function (Env, Server, cb) { cb(void 0, Env.limits); }; +// CryptPad_AsyncStore.rpc.send('ADMIN', ['GET_USER_TOTAL_SIZE', "CrufexqXcY/z+eKJlEbNELVy5Sb7E/EAAEFI8GnEtZ0="], console.log) +var getUserTotalSize = function (Env, Server, cb, data) { + var signingKey = Array.isArray(data) && data[1]; + if (typeof(signingKey) !== 'string' || signingKey.length < 44) { return void cb("EINVAL"); } // FIXME use a standard check for this + Pinning.getTotalSize(Env, signingKey, cb) +}; + var commands = { ACTIVE_SESSIONS: getActiveSessions, ACTIVE_PADS: getActiveChannelCount, @@ -349,6 +357,7 @@ var commands = { GET_LIMITS: getLimits, SET_LAST_EVICTION: setLastEviction, GET_WORKER_PROFILES: getWorkerProfiles, + GET_USER_TOTAL_SIZE: getUserTotalSize, }; Admin.command = function (Env, safeKey, data, _cb, Server) { From b8a7defad96f08f6e0d5dd12b5f10bb197cb430f Mon Sep 17 00:00:00 2001 From: ansuz Date: Sun, 31 Jan 2021 15:29:55 +0530 Subject: [PATCH 12/14] lint compliance --- lib/commands/admin-rpc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/commands/admin-rpc.js b/lib/commands/admin-rpc.js index 83e2ce8ca..32338b772 100644 --- a/lib/commands/admin-rpc.js +++ b/lib/commands/admin-rpc.js @@ -329,7 +329,7 @@ var getLimits = function (Env, Server, cb) { var getUserTotalSize = function (Env, Server, cb, data) { var signingKey = Array.isArray(data) && data[1]; if (typeof(signingKey) !== 'string' || signingKey.length < 44) { return void cb("EINVAL"); } // FIXME use a standard check for this - Pinning.getTotalSize(Env, signingKey, cb) + Pinning.getTotalSize(Env, signingKey, cb); }; var commands = { From 94b907e126268a37ea7e82a2acd8cc293b3dd1d5 Mon Sep 17 00:00:00 2001 From: ansuz Date: Sun, 31 Jan 2021 17:09:49 +0530 Subject: [PATCH 13/14] add an icon to the 'Performance' section of the admin sidebar --- www/admin/inner.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/www/admin/inner.js b/www/admin/inner.js index a97dcce11..c50e972ac 100644 --- a/www/admin/inner.js +++ b/www/admin/inner.js @@ -855,7 +855,7 @@ define([ return; }; - Messages.admin_cat_performance = "PERFORMANCE"; // XXX admin + Messages.admin_cat_performance = "Performance"; // XXX admin Messages.admin_performanceProfilingHint = "Measure the running time of various server tasks by type"; // XXX admin Messages.admin_performanceProfilingTitle = "Performance"; // XXX admin @@ -921,6 +921,15 @@ define([ APP.$rightside.find('.'+c).show(); }); }; + + var SIDEBAR_ICONS = { + general: 'fa fa-user-o', + stats: 'fa fa-line-chart', + quota: 'fa fa-hdd-o', + support: 'fa fa-life-ring', + performance: 'fa fa-heartbeat', + }; + var createLeftside = function () { var $categories = $('
', {'class': 'cp-sidebarlayout-categories'}) .appendTo(APP.$leftside); @@ -933,10 +942,10 @@ define([ common.setHash(active); Object.keys(categories).forEach(function (key) { var $category = $('
', {'class': 'cp-sidebarlayout-category'}).appendTo($categories); - if (key === 'general') { $category.append($('', {'class': 'fa fa-user-o'})); } - if (key === 'stats') { $category.append($('', {'class': 'fa fa-line-chart'})); } - if (key === 'quota') { $category.append($('', {'class': 'fa fa-hdd-o'})); } - if (key === 'support') { $category.append($('', {'class': 'fa fa-life-ring'})); } + var iconClass = SIDEBAR_ICONS[key]; + if (iconClass) { + $category.append($('', {'class': iconClass})); + } if (key === active) { $category.addClass('cp-leftside-active'); From d4fa64a1bf64b2d7f600c340c43224f52d063d90 Mon Sep 17 00:00:00 2001 From: ansuz Date: Sun, 31 Jan 2021 17:13:24 +0530 Subject: [PATCH 14/14] lint compliance --- www/admin/inner.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/www/admin/inner.js b/www/admin/inner.js index c50e972ac..8ea6cfe17 100644 --- a/www/admin/inner.js +++ b/www/admin/inner.js @@ -892,12 +892,11 @@ define([ if (o[b] - o[a] <= 0) { return -1; } return 1; }); - var x = {}; var total = 0; sorted.forEach(function (k) { total += o[k]; }); sorted.forEach(function (k) { var percent = Math.floor((o[k] / total) * 1000) / 10; - appendRow(k, o[k], percent) + appendRow(k, o[k], percent); }); };