Over time we've added many small configuration values to CryptPad's `config/config.js`.
As the number of possible variations grew it became increasingly difficult to test the platform and to provide clear documentation.
Ultimately this has made the platform more difficult to understand and consequently to host.
This release features relatively few bug fixes or features.
Instead, we took the calm period of the northern winter holidays to simplify the process of running a server and to begin working on some comprehensive documentation.
## Update notes
We have chosen to drop support for a number of parameters which we believe are not widely used.
Read the following list carefully before updating, as you could be relying on behaviour which no longer exists.
* Due to reasons of security and performance we have long advised that administrators make their instance available only over HTTPS provided by a reverse proxy such as nginx instead of loading TLS certificates via the node process itself. We have removed the option of serving HTTPS traffic directly from node by removing all support for HTTPS in this process.
* Over the years many administrators have had to migrate their instance from one machine to another and have had difficulty identifying which directories were responsible for storing user data. We are beginning to migrate all user-generated data from the repository's root into the `data` directory as a new default, allowing for admins to migrate content by copying this single directory.
* for the time being we have not moved anything which is exposed directly over HTTPS since that complicates the upgrade process by requiring all configuration changes to be made simultaneously.
* the modifications we've made only affect the _default configuration_ provided by `config/config.example.js`, existing instances which have copied this file to `config/config.js` will not be affected.
* only the following values have been modified:
* `pinPath`
* `taskPath`
* `blobStagingPath`
* We have modified the Dockerfile volume list to reflect the changes to these default paths. If you are using docker you will have to either:
* revert their removal or
* move the affected directories into the `data` directory and update your live config file to reflect their new location
* Please note that we do our team does not use docker, that it was included in the main repository as a community contribution, and that we are not committed to supporting its configuration since we do not test it.
* Our official policy is to provide an up-to-date set of configuration files reflecting the state of our production installation on [CryptPad.fr](https://cryptpad.fr) using Debian, nginx, and systemd.
* we are actively working on improving our documentation for this particular configuration and we plan to close issues for other configurations as being outside of the project's scope.
* We've updated our example nginx configuration file, located at `cryptpad/docs/example.nginx.conf`.
* in addition to a great number of comments, it now makes use of variables configure the domains referenced by the CSP headers which are required to take advantage of all of CryptPad's security features.
* Prompted by warnings from recent nodejs versions we are updating our recommended version to v12.14.0 which is at the time of this writing the latest Long Term Support version.
* you may need to update to successfully launch your server.
* as always, we recommend using nvm to manage nodejs installation.
* We have dropped support for a number of experimental features:
* replify (which allowed admins to modify their server at runtime using a REPL connected via a named socket)
* heapdump (which provided snapshots of the server's memory if it crashed)
* configurable RPC files as a configuration parameter
* Finally, we've replaced a number of websocket configuration values (`websocketURL`, `websocketPath`, `useExternalWebsockets`, and `useSecureWebsockets`) with one optional value (`externalWebsocketURL`) in config.js
* if your instance is configured in the default manner you shouldn't actually need this value, as it will default to using `/cryptpad_websocket`.
* if you have configured your instance to serve all static assets over one domain and to host your API server on another, set `externalWebsocketURL` to `wss://your-domain.tld/cryptpad_websocket` or whatever URL will be correctly forwarded to your API server.
Once you have reviewed your configuration files and ensured that they are correct, update to 3.9.0 with the following steps:
1. take your server down
2. get the latest code with `git pull origin master`
3. install some required serverside dependency with `npm update`
4. (optionally) update clientside dependencies with `bower update`
5. bring your server back up
## Features
* We made some minor improvements to the process of redeeming invitation links for teams.
* invitation links can only be used once, so we remove the hash from the URL bar once you've landed on the redemption page so that reloading after redeeming doesn't indicate that you've used an expired link.
* [One of our Finnish-speaking contributors](https://weblate.cryptpad.fr/user/ilo/) has translated a very large amount of the platform's text in the last few weeks, making Finnish our fifth most thoroughly translated language!
## Bug fixes
* We noticed and fixed a style regression which incorrectly removed the scrollbar from some textareas
* We also found that it was possible to corrupt the href of an item in a team's drive if you first shared a pad with your team then transferred ownership, the link stored in the team's drive would have its domain concatenated together twice.
* The type value of read-only pads displayed as search results in user and team drives was incorrect but is now correctly inferred.
# IsolobodonPortoricensis release (3.8.0)
We had some trouble finding an extinct animal whose name started with "I", and we had to resort to using a scientific name.
},Messages.burnAfterReading_warningLink||" You have set this pad to self-destruct. Once a recipient opens this pad, it will be permanently deleted from the server.");// XXX temp KEY
varinfo=h('p.cp-password-info',Messages.burnAfterReading_warning||'This document will self-destruct as soon as you open it. It will be removed form the server, once you close this window you will not be able to access it again. If you are not ready to proceed you can close this window and come back later. ');// XXX temp KEY
varbutton=h('button.primary',Messages.burnAfterReading_proceed||'view and delete');// XXX temp KEY
returnh('div.alert.alert-danger.cp-burn-after-reading',Messages.burnAfterReading_warningDeleted||'This pad has been deleted from the server, once you close this window you will not be able to access it again.');// XXX temp KEY
};
varcrowdfundingState=false;
UIElements.displayCrowdfunding=function(common){
if(crowdfundingState){return;}
@ -3978,6 +4133,9 @@ define([
if(data&&data.stored){return;}// We won't display the popup for dropped files
varpriv=common.getMetadataMgr().getPrivateData();
// This pad will be deleted automatically, it shouldn't be stored
"fm_padIsOwnedOther":"Tämän padin omistaa toinen käyttäjä",
"fm_deletedPads":"Nämä padit eivät ole enää saatavilla palvelimella, ne on poistettu CryptDrivestasi: {0}",
"fm_tags_name":"Tunnisteen nimi",
"fm_tags_used":"Käyttökertojen määrä"
"fm_tags_used":"Käyttökertojen määrä",
"fm_restoreDrive":"Palautetaan Drivesi aikaisempaan tilaan. Saadaksesi parhaimman lopputuloksen vältä muutosten tekemistä Driveesi, kunnes toimenpide on valmis.",
"fm_moveNestedSF":"Et voi siirtää jaettua kansiota toisen jaetun kansion sisään. Kansiota {0} ei siirretty.",
"fm_passwordProtected":"Salasanasuojattu",
"fc_newfolder":"Uusi kansio",
"fc_newsharedfolder":"Uusi jaettu kansio",
"fc_rename":"Nimeä uudelleen",
"fc_color":"Vaihda väriä",
"fc_open":"Avaa",
"fc_open_ro":"Avaa (vain luku)",
"fc_openInCode":"Avaa Koodi-editorissa",
"fc_expandAll":"Laajenna kaikki",
"fc_collapseAll":"Tiivistä kaikki",
"fc_delete":"Siirrä roskakoriin",
"fc_delete_owned":"Poista palvelimelta",
"fc_restore":"Palauta",
"fc_remove":"Poista CryptDrivesta",
"fc_remove_sharedfolder":"Poista",
"fc_empty":"Tyhjennä roskakori",
"fc_prop":"Ominaisuudet",
"fc_hashtag":"Tunnisteet",
"fc_sizeInKilobytes":"Koko kilotavuissa",
"fo_moveUnsortedError":"Et voi siirtää kansiota mallipohjalistaan",
"fo_existingNameError":"Valitsemasi nimi on jo käytössä kansiossa. Ole hyvä ja valitse toinen nimi.",
"fo_moveFolderToChildError":"Et voi siirtää kansiota sen alikansioon",
"fo_unableToRestore":"Tiedoston palauttaminen sen alkuperäiseen sijaintiin ei onnistunut. Voit yrittää siirtää sen toiseen sijaintiin.",
"fo_unavailableName":"Valitsemassasi sijainnissa on jo samanniminen tiedosto tai kansio. Ole hyvä ja anna elementille uusi nimi ja yritä uudelleen.",
"fs_migration":"CryptDrivesi päivitetään uuteen versioon. Nykyinen sivu täytyy ladata uudelleen. <br><strong>Ole hyvä ja lataa sivu uudelleen jatkaaksesi käyttöä.</strong>",
"login_login":"Kirjaudu sisään",
"login_makeAPad":"Luo padi anonyyminä",
"login_nologin":"Selaa paikallisia padeja",
"login_register":"Rekisteröidy",
"logoutButton":"Kirjaudu ulos",
"settingsButton":"Asetukset",
"login_username":"Käyttäjänimi",
"login_password":"Salasana",
"login_confirm":"Vahvista salasanasi",
"login_remember":"Muista minut",
"login_hashing":"Salasanaasi hajautetaan, tämä saattaa kestää jonkin aikaa.",
"login_hello":"Hei {0},",
"login_helloNoName":"Hei,",
"login_accessDrive":"Käytä Driveasi",
"login_orNoLogin":"tai",
"login_noSuchUser":"VIrheellinen käyttäjätunnus tai salasana. Yritä uudelleen tai rekisteröidy",
"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_explanation":"<h3>Käydään läpi muutama perusasia:</h3><ul class='list-unstyled'><li><i class='fa fa-info-circle'></i>Salasanasi on myös salausavain, jolla kaikki luomasi padit salataan. Jos kadotat salasanasi, emme voi millään tavalla palauttaa tietojasi.</li><li><i class='fa fa-info-circle'></i>Voit tuoda viimeksi katselemasi padit selaimestasi käyttäjätilillesi.</li><li><i class='fa fa-info-circle'> </i> Jos käytät jaettua tietokonetta, täytyy sinun kirjautua ulos lopettaessasi työskentelyn - välilehden sulkeminen ei riitä.</li></ul>",
"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_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.",
"register_emailWarning2":"Toisin kuin monissa muissa palveluissa, emme voi palauttaa salasanaasi sähköpostin avulla.",
"register_emailWarning3":"Jos ymmärrät tämän ja haluat silti käyttää sähköpostiosoitettasi käyttäjätunnuksenasi, klikkaa OK.",
"settings_cat_account":"Käyttäjätili",
"settings_cat_drive":"CryptDrive",
"settings_cat_cursor":"Kursori",
"settings_cat_code":"Koodi",
"settings_cat_pad":"Teksti",
"settings_cat_creation":"Uusi padi",
"settings_cat_subscription":"Tilaus",
"settings_title":"Asetukset",
"settings_save":"Tallenna",
"settings_backupCategory":"Varmuuskopiointi",
"settings_backupHint":"Varmuuskopioi tai palauta CryptDrivesi sisältö kokonaisuudessaan. Varmuuskopio ei sisällä padiesi sisältöä, ainoastaan niiden käyttöön tarvittavat avaimet.",
"settings_backup":"Varmuuskopioi",
"settings_restore":"Palauta",
"settings_backupHint2":"Lataa kaikkien padiesi nykyinen sisältö. Padit ladataan luettavassa tiedostomuodossa, jos sellainen on saatavilla.",
"settings_backup2":"Lataa oma CryptDrive tietokoneellesi",
"settings_backup2Confirm":"Tämä lataa kaikki CryptDrivesi padit ja tiedostot tietokoneellesi. Jos haluat jatkaa, valitse nimi ja paina OK",
"settings_exportTitle":"Vie oma CryptDrive",
"settings_exportDescription":"Odota hetki, dokumenttejasi puretaan ja ladataan. Tämä voi viedä muutaman minuutin. Välilehden sulkeminen keskeyttää toimenpiteen.",
"settings_exportFailed":"Jos padin lataamiseen menee enemmän kuin yksi (1) minuutti, sitä ei oteta mukaan vientiin. Viennistä pois jääneiden padien linkit näytetään lopuksi.",
"settings_exportWarning":"Huomautus: tämä työkalu on beta-versiossa, ja siinä saattaa olla skaalautuvuusongelmia. Suosittelemme välilehden jättämistä aktiiviseksi paremman suorituskyvyn takaamiseksi.",
"settings_exportCancel":"Haluatko varmasti keskeyttää viennin? Seuraavalla kerralla toimenpide täytyy aloittaa alusta.",
"settings_exportErrorEmpty":"Tätä dokumenttia ei voi viedä (tyhjä tai virheellinen sisältö).",
"settings_exportErrorMissing":"Tätä dokumenttia ei löydy palvelimeltamme (vanhentunut tai omistajansa poistama)",
"settings_exportErrorOther":"Dokumenttia viedessä tapahtui virhe: {0}",
"settings_resetNewTitle":"Tyhjennä CryptDrive",
"settings_resetButton":"Poista",
"settings_reset":"Poista kaikki tiedostot ja kansiot CryptDrivestasi",
"settings_resetPrompt":"Tämä toiminto poistaa kaikki padit CryptDrivestasi.<br>Haluatko varmasti jatkaa?<br>Kirjoita \"<em>I love CryptPad</em>\" vahvistaaksesi.",
"settings_resetDone":"Drivesi on nyt tyhjennetty!",
"settings_resetError":"Virheellinen vahvistusteksti. CryptDriveasi ei ole muutettu.",
"settings_resetTipsDone":"Kaikki vinkit tulevat jälleen näkyviin.",
"settings_thumbnails":"Pienoiskuvat",
"settings_disableThumbnailsAction":"Ota pienoiskuvien luonti pois käytöstä CryptDrivessa",
"settings_disableThumbnailsDescription":"Pienoiskuvat luodaan automaattisesti uuden padin käytön yhteydessä, ja ne säilytetään selaimessasi. Voit ottaa tämän ominaisuuden pois käytöstä.",
"settings_resetThumbnailsAction":"Tyhjennä",
"settings_resetThumbnailsDescription":"Tyhjennä kaikki padien pienoiskuvat selaimesi välimuistista.",
"settings_resetThumbnailsDone":"Kaikki pienoiskuvat on poistettu.",
"settings_importTitle":"Tuo tässä selaimessa viimeksi käytetyt padit CryptDriveesi",
"settings_import":"Tuo",
"settings_importConfirm":"Haluatko varmasti tuoda tässä selaimessa viimeksi käytetyt padit käyttäjätilisi CryptDriveen?",
"settings_autostoreHint":"<b>Automaattinen</b>Kaikki käyttämäsi padit tallennetaan CryptDriveesi.<br><b>Manuaalinen (kysy aina)</b> Jos et ole vielä tallentanut padia, kysytään sinulta, haluatko tallentaa sen CryptDriveesi.<br><b>Manuaalinen (älä kysy)</b>Padeja ei tallenneta automaattisesti CryptDriveesi. Padien tallennusmahdollisuus piilotetaan.",
"settings_userFeedbackHint1":"CryptPad tarjoaa palvelimelle hyvin yksinkertaista palautetta kertoakseen meille, miten voimme kehittää käyttäjäkokemustasi. ",
"settings_userFeedbackHint2":"Padisi sisältöä ei koskaan jaeta palvelimen kanssa.",
"settings_userFeedback":"Salli käyttäjäpalaute",
"settings_deleteTitle":"Käyttäjätilin poisto",
"settings_deleteHint":"Käyttäjätilin poisto on pysyvä toimenpide. CryptDrivesi ja lista padeistasi poistetaan palvelimelta. Loput padeistasi poistetaan 90 päivän kuluttua, jos kukaan muu ei ole tallentanut niitä omaan CryptDriveensa.",
"settings_deleteButton":"Poista käyttäjätilisi",
"settings_deleteModal":"Jaa seuraavat tiedot CryptPad-instanssisi ylläpitäjän kanssa poistaaksesi tietosi palvelimelta.",
"settings_deleteConfirm":"Klikkaamalla OK käyttäjätilisi poistetaan pysyvästi. Oletko varma?",
"settings_deleted":"Käyttäjätilisi on nyt poistettu. Klikkaa OK siirtyäksesi kotisivulle.",
"settings_anonymous":"Et ole kirjautunut sisään. Nämä asetukset koskevat vain tätä selainta.",
"settings_driveDuplicateHint":"Siirtäessäsi omistettuja padeja jaettuun kansioon omassa CryptDrivessasi säilytetään niistä kopio, jotta tiedosto pysyy hallinnassasi. Voit piilottaa tiedostojen kaksoiskappaleet. Vain jaettu versio jää näkyville, ellei sitä poisteta. Tässä tapauksessa alkuperäinen padi näytetään sen edellisessä sijainnissa.",
"settings_padWidthHint":"Teksti-tyyppiset padit käyttävät oletusleveytenä näyttölaitteesi maksimileveyttä, mikä voi tehdä lukemisesta vaikeaa. Tästä voit pienentää editorin leveyttä.",
"settings_padSpellcheckHint":"Tämä vaihtoehto ottaa käyttöön oikeinkirjoituksen tarkastuksen Teksti-tyyppisissä padeissa. Oikeinkirjoitusvirheet alleviivataan punaisella. Klikkaa virheellistä sanaa hiiren oikealla painikkeella painaessasi Ctrl- tai Meta-näppäintä pohjaan nähdäksesi korjausehdotukset.",
"settings_padSpellcheckLabel":"Ota oikeinkirjoituksen tarkastus käyttöön Teksti-muotoisissa padeissa",
"settings_creationSkipHint":"Padien luontisivu esittää vaihtoehtoja padin luomiseen auttaakseen sinua hallitsemaan ja suojaamaan tietojasi. Jos koet sen hidastavan työskentelyäsi, voit tällä asetuksella ohittaa luontisivun ja käyttää sen sijaan yläpuolella määrittelemiäsi oletusasetuksia.",
"settings_templateSkipHint":"Luodessasi uutta padia sinulta kysytään, haluatko käyttää mallipohjaa, jos sinulla on tallennettuja mallipohjia tälle padityypille. Tällä asetuksella voit valita, ettei mallipohjan valinta-dialogia näytetä ja siten mallipohjia ei koskaan käytetä.",
"settings_ownDriveTitle":"Ota käyttöön viimeisimmät tiliominaisuudet",
"settings_ownDriveHint":"Teknisistä syistä vanhemmilla käyttäjätileillä ei suoraan ole pääsyä CryptPadin uusimpiin ominaisuuksiin. Ilmainen päivitys uuteen käyttäjätiliin valmistelee CryptDrivesi tulevia ominaisuuksia varten häiritsemättä tavanomaista toimintaasi.",
"settings_ownDriveConfirm":"Käyttäjätilin päivitykseen voi mennä jonkin aikaa. Joudut kirjautumaan uudelleen sisään kaikilla laitteillasi. Oletko varma, että haluat aloittaa päivityksen?",
"settings_ownDrivePending":"Käyttäjätiliäsi päivitetään. Ole hyvä, äläkä sulje tai lataa tätä sivua uudelleen, ennen kuin toimenpide on valmis.",
"settings_changePasswordHint":"Vaihda käyttäjätilisi salasana. Syötä nykyinen salasanasi ja vahvista uusi salasana kirjoittamalla se kahdesti. <br><b>Emme voi nollata unohtuneita salasanoja, joten olethan varovainen!</b>",
"settings_changePasswordNewConfirm":"Vahvista uusi salasana",
"settings_changePasswordConfirm":"Oletko varma, että haluat vaihtaa salasanasi? Joudut kirjautumaan uudelleen sisään kaikilla laitteillasi.",
"settings_changePasswordError":"Tapahtui odottamaton virhe. Jos et pääse kirjautumaan sisään tai vaihtamaan salasanaasi, ota yhteyttä CryptPad-instanssisi ylläpitäjiin.",
"settings_changePasswordPending":"Salasanaasi päivitetään. Ole hyvä äläkä sulje tai lataa tätä sivua uudelleen, ennen kuin toimenpide on valmis.",
"settings_changePasswordNewPasswordSameAsOld":"Uuden salasanasi on oltava erilainen kuin nykyinen salasana.",
"todo_newTodoNameTitle":"Lisää tämä tehtävä Tehtävät-listaasi",
"todo_markAsCompleteTitle":"Merkitse tehtävä valmiiksi",
"todo_markAsIncompleteTitle":"Merkitse tehtävä keskeneräiseksi",
"todo_removeTaskTitle":"Poista tehtävä Tehtävät-listaltasi",
"pad_showToolbar":"Näytä työkalurivi",
"pad_hideToolbar":"Piilota työkalurivi",
"pad_base64":"Tämä padi sisältää tehottomasti tallennettuja kuvia. Kuvat kasvattavat padin kokoa merkittävästi ja hidastavat padin lataamista. Voit siirtää nämä tiedostot uuteen tiedostomuotoon, joka säilytetään erillisenä CryptDrivessasi. Haluatko siirtää kuvat nyt?",
"mdToolbar_button":"Näytä tai piilota Markdown-työkalupalkki",
"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 <a href=\"https://github.com/xwiki-labs/cryptpad\" target=\"_blank\" rel=\"noreferrer noopener\">GitHubissa</a>.",
"about_intro":"CryptPadia kehittää Pariisissa, Ranskassa ja Iasissa, Romaniassa toimiva<a href=\"http://xwiki.com\">XWiki SAS</a>-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":"<h2>Luottamuksellista yhteistyötä</h2>Jaetut dokumentit mahdollistavat ideoiden jakamisen samalla kun <strong>nollatietoperiaate</strong>-teknologia suojaa yksityisyytesi - <strong>jopa meiltä</strong>.",
"main_footerText":"CryptPadin avulla voit nopeasti luoda kollaboratiivisia dokumentteja muistiinpanoja ja yhteistä ideointia varten.",
"footer_applications":"Sovellukset",
"footer_contact":"Ota yhteyttä",
"footer_aboutUs":"Tietoa meistä",
"about":"Tietoa meistä",
"privacy":"Yksityisyys",
"contact":"Ota yhteyttä",
"terms":"Käyttöehdot",
"blog":"Blogi",
"topbar_whatIsCryptpad":"Mikä on CryptPad",
"whatis_title":"Mikä on CryptPad",
"whatis_collaboration":"Nopeaa ja helppoa yhteistyötä",
"whatis_collaboration_p1":"CryptPadin avulla voit nopeasti luoda kollaboratiivisia dokumentteja muistiinpanoja ja yhteistä ideointia varten. Rekisteröitymällä ja kirjautumalla sisään saat mahdollisuuden ladata tiedostoja palvelimelle ja oman CryptDriven, jossa voit säilyttää kaikki padisi. Rekisteröityneet käyttäjät saavat ilmaiseksi 50 Mt tallennustilaa.",
"whatis_collaboration_p2":"Voit helposti antaa käyttöoikeuden CryptPad-dokumenttiin jakamalla sen linkin. Voit myös jakaa dokumentin linkin <em>vain luku</em>-tilassa, jolloin voit julkistaa yhteistyön tulokset ja muokata niitä edelleen.",
"team_inviteLinkError":"Linkin luomisessa tapahtui virhe.",
"whatis_collaboration_p3":"<a href=\"http://ckeditor.com/\">CKEditor</a>:illa voit luoda yksinkertaisia muotoiltavia tekstitiedostoja sekä Markdown-tiedostoja, jotka muunnetaan tekstiä muokatessasi reaaliaikaisesti esitysmuotoon. Voit myös käyttää Kysely-sovellusta tapahtumien ajoittamiseen useiden osallistujien kanssa.",
"whatis_zeroknowledge":"Nollatietoperiaate",
"whatis_zeroknowledge_p1":"Emme halua tietää, mitä kirjoitat. Modernin kryptografian avulla voit olla varma, ettemme todellakaan tiedä siitä mitään. CryptPad käyttää <strong>100-prosenttisesti asiakasohjelmassa tapahtuvaa salausta</strong> suojatakseen tuottamaasi sisältöä meiltä palvelimen ylläpitäjiltä.",
"whatis_zeroknowledge_p2":"Rekisteröityessäsi ja kirjautuessasi sisään käyttäjätunnuksesi ja salasanasi lasketaan salaiseksi avaimeksi <a href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt-avaintenmuodostusfunktiolla</a>. Tätä avainta, käyttäjätunnustasi ja salasanaasi ei koskaan lähetetä palvelimelle. Sen sijaan niitä käytetään asiakasohjelmassa CryptDrivesi sisällön purkamiseen. CryptDrivesi puolestaan sisältää avaimet kaikkiin padeihin, joihin sinulla on käyttöoikeus.",
"whatis_zeroknowledge_p3":"Kun jaat linkin dokumenttiin, jaat itse asiassa dokumentin käyttöön tarvittavan salausavaimen, mutta koska salausavain sisällytetään <a href=\"https://en.wikipedia.org/wiki/Fragment_identifier\">katkelmatunnisteeseen (fragment identifier)</a>, sitä ei koskaan lähetetä palvelimelle suoraan. Tutustu <a href=\"https://blog.cryptpad.fr/2017/07/07/cryptpad-analytics-what-we-cant-know-what-we-must-know-what-we-want-to-know/\">yksityisyydestä kertovaan blogikirjoitukseemme</a> saadaksesi selville, mihin metadataan meillä on pääsy ja mihin taas ei.",
"whatis_drive":"CryptDriven järjestely",
"whatis_drive_p1":"Kun käytät padia CryptPadissa, lisätään se automaattisesti CryptDrivesi pääkansioon. Voit halutessasi myöhemmin järjestellä padit kansioihin tai viedä ne roskakoriin. CryptDrive antaa sinun hakea padejasi ja järjestellä niitä milloin ja miten haluat.",
"whatis_drive_p2":"Intuitiivinen raahaa ja pudota-käyttöliittymä mahdollistaa padien siirtelemisen CryptDrivessa niin, etteivät niiden linkit muutu, eivätkä padien osallistujat siten koskaan menetä käyttöoikeuttaan niihin.",
"whatis_drive_p3":"Voit myös ladata CryptDriveesi tiedostoja ja jakaa niitä kollegoidesi kanssa. Ladattuja tiedostoja voidaan järjestellä samaan tapaan kuin kollaboratiivisia padeja.",
"admin_updateLimitHint":"Käyttäjien tallennuskiintiöiden pakotettu päivitys voidaan tehdä milloin tahansa, mutta se on tarpeen ainoastaan virhetilanteissa",
"team_noFriend":"Sinulla ei ole vielä kavereita CryptPadissa.",
"drive_sfPassword":"Jaettu kansiosi {0} ei ole enää saatavilla. Se on joko poistettu omistajansa toimesta tai sille on asetettu uusi salasana. Voit poistaa tämän kansion CryptDrivestasi tai palauttaa käyttöoikeuden käyttämällä uutta salasanaa.",
"drive_sfPasswordError":"Väärä salasana",
"password_error_seed":"Padia ei löytynyt!<br>Tämä virhe voi johtua kahdesta syystä: joko padiin on lisätty tai vaihdettu salasana, tai padi on poistettu palvelimelta.",
"properties_confirmChangeFile":"Oletko varma? Käyttäjät, joilla ei ole uutta salasanaa eivät pääse enää käyttämään tiedostoa.",
"properties_confirmNewFile":"Oletko varma? Salasanan lisääminen muuttaa tämän tiedoston URL-osoitetta. Käyttäjät, joilla ei ole salasanaa eivät pääse enää käyttämään tiedostoa.",
"properties_passwordWarningFile":"Salasanan vaihto onnistui, mutta emme onnistuneet päivittämään uusia tietoja CryptDriveesi. Tiedoston vanha versio täytyy ehkä poistaa manuaalisesti.",
"driveOfflineError":"Yhteytesi CryptPadiin on katkennut. Tähän padiin tehdyt muutokset eivät tallennu CryptDriveesi. Ole hyvä ja sulje kaikki CryptPad-välilehdet, ja yritä uudelleen uudessa selainikkunassa. ",
"teams_table":"Roolit",
"teams_table_generic":"Roolit ja käyttöoikeudet",
"teams_table_generic_view":"Tarkastele: käytä kansioita ja padeja vain luku-tilassa.",
"teams_table_generic_edit":"Muokkaa: luo, muokkaa ja poista kansioita ja padeja.",
"teams_table_generic_admin":"Hallitse jäseniä: kutsu ja poista jäseniä, vaihda jäsenten rooleja Ylläpitäjä-rooliin asti.",
"teams_table_generic_own":"Hallitse tiimiä: vaihda tiimin nimeä ja avatar-kuvaa, lisää tai poista Omistajia, muuta tiimin tilausta, poista tiimi.",
"teams_table_specific":"Poikkeukset",
"teams_table_specificHint":"Nämä ovat vanhempia jaettuja kansioita, joissa katselijoilla on edelleen oikeus muokata olemassaolevia padeja. Näihin kansioihin luodut tai kopioidut padit saavat oletuskäyttöoikeudet.",
"teams_table_admins":"Hallitse jäseniä",
"teams_table_owners":"Hallitse tiimiä",
"teams_table_role":"Rooli",
"pad_wordCount":"Sanamäärä: {0}",
"share_linkWarning":"Tämä linkki sisältää dokumenttisi avaimet. Linkin vastaanottajat saavat dokumenttiisi käyttöoikeudet, joita ei voi poistaa jälkikäteen.",
"share_linkPasswordAlert":"Tämä elementti on salasanasuojattu. Kun lähetät linkin, täytyy vastaanottajan syöttää salasana.",
"share_contactPasswordAlert":"Tämä elementti on salasanasuojattu. Koska jaat sen CryptPad-yhteyshenkilön kanssa, ei vastaanottajan tarvitse syöttää salasanaa.",
"share_embedPasswordAlert":"Tämä elementti on salasanasuojattu. Kun upotat tämän padin, katselijoita pyydetään syöttämään salasana.",
"passwordFaqLink":"Lue lisää salasanoista",
"share_noContactsLoggedIn":"Sinulla ei ole vielä yhtään CryptPad-yhteyshenkilöä. Jaa linkki käyttäjäprofiiliisi, jotta muut käyttäjät voivat lähettää sinulle yhteyspyyntöjä.",
"share_noContactsNotLoggedIn":"Kirjaudu sisään tai rekisteröidy nähdäksesi olemassaolevat yhteystietosi ja lisätäksesi uusia yhteystietoja.",
"contacts_mute":"Mykistä",
"contacts_unmute":"Poista mykistys",
"contacts_manageMuted":"Hallinnoi mykistyksiä",
"contacts_mutedUsers":"Mykistetyt käyttäjätilit",
"contacts_muteInfo":"Mykistetyt käyttäjät eivät voi lähettää sinulle viestejä tai ilmoituksia.<br>Mykistetyt käyttäjät eivät saa tietää, että olet mykistänyt heidät. ",
"team_inviteLinkTitle":"Luo yksilöity kutsu tähän tiimiin",
"team_inviteLinkTempName":"Väliaikainen nimi (näkyvissä Odottavat kutsut-listassa)",
Only datatypes which can be serialized via `JSON.parse(JSON.stringify(yourObject))` will be preserved.
This means the following types can be serialized:
1. strings
2. objects
3. arrays
4. booleans
5. numbers
6. null
While these cannot be serialized:
1. undefined
2. symbol
## Object Interaction
Only 'get' and 'set' methods are supported.
This is because we need to limit the operations we support to those supported by all browsers we might use.
Currently that means we can't rely on `in`, `delete`, or anything other than a `get`/`set` operation to behave as expected.
Treat all other features as `Undefined Behaviour`.
> Your mileage may vary
`set` methods include all of the [assignment operators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Exponentiation_assignment).
```
// where 'x' is the realtime object `{}`
// assignment
x.n = 5;
x.n += 3;
x.n++;
++x.n;
x.a = 5;
x.b = 3;
x.a *= x.b++;
x // {a: 15, b: 4, n: 10}
```
Instead of `delete`, assign `undefined`.
`delete` will remove an attribute locally, but the deletion will not propogate to other clients until your next serialization.
This is potentially problematic, as it can result in poorly formed patches.
### Object and array methods
methods which do not directly use setters and getters can be problematic:
`Array.push` behaves correctly, however, `Array.pop` does not.
## Deep Equality
Normally in Javascript objects are passed by reference.
That means you can do things like this:
```
var a = {x: 5};
var b = a;
// true
console.log(a === b);
```
Using the realtime list/map API, objects are serialized, and are therefore copied by value.
Since objects are deserialized and created on each client, you will not be able to rely on this kind of equality across objects, despite their having been created in this fashion.
Object equality _might_ work if the comparison is performed on the same client that initially created the object, but relying on this kind of behaviour is not advisable.
## Listeners
You can add a listener to an attribute (via its path relative to the root realtime object).
There are various types of listeners
* change
* remove
* disconnect
* ready
### Semantics
Suppose you have a realtime object `A` containing nested structures.
```
{
a: {
b: {
c: 5
}
},
d: {
e: [
1,
4,
9
]
}
}
```
If you want to be alerted whenever the second element in the array `e` within `d` changes, you can attach a listener like so:
```
A.on('change', ['d', 'e', 1], function (oldval, newval, path, rootObject) {
/* do something with these values */
console.log("value changes from %s to %s", oldval, newval);
});
```
## Known Bugs
there is currently an issue with popping the last element of an array.
<p>The field below behaves like a <atarget="_blank"href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop">REPL</a>, with the realtime object created by this page exposed as the value <code>x</code></p>
<p>Open your browser's console to see the output.</p>