diff --git a/app/client/ui/AdminPanel.ts b/app/client/ui/AdminPanel.ts index 37d4f4e2..bfd2bd6c 100644 --- a/app/client/ui/AdminPanel.ts +++ b/app/client/ui/AdminPanel.ts @@ -98,7 +98,7 @@ export class AdminPanel extends Disposable { * which could include a legit adminstrator if auth is misconfigured. */ private _buildMainContentForOthers(owner: MultiHolder) { - const exampleKey = 'example-' + window.crypto.randomUUID(); + const exampleKey = _longCodeForExample(); return dom.create(AdminSection, t('Administrator Panel Unavailable'), [ dom('p', t(`You do not have access to the administrator panel. Please log in as an administrator.`)), @@ -649,3 +649,19 @@ export const cssLabel = styled('div', ` text-align: right; padding-right: 5px; `); + + +/** + * Make a long code to use in the example, so that if people copy + * and paste it lazily, they end up decently secure, or at least a + * lot more secure than a key like "REPLACE_WITH_YOUR_SECRET" + */ +function _longCodeForExample() { + // Crypto in insecure contexts doesn't have randomUUID + if (window.isSecureContext) { + return 'example-a' + window.crypto.randomUUID(); + } + return 'example-b' + 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/x/g, () => { + return Math.floor(Math.random() * 16).toString(16); + }); +} diff --git a/package.json b/package.json index efe831db..9cd1e9c3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "grist-core", - "version": "1.1.14", + "version": "1.1.15", "license": "Apache-2.0", "description": "Grist is the evolution of spreadsheets", "homepage": "https://github.com/gristlabs/grist-core", diff --git a/static/locales/sk.client.json b/static/locales/sk.client.json index 898c96cf..0ee86e76 100644 --- a/static/locales/sk.client.json +++ b/static/locales/sk.client.json @@ -185,7 +185,9 @@ "Widget does not require any permissions.": "Widget nevyžaduje žiadne povolenia.", "Widget needs to {{read}} the current table.": "Widget vyžaduje {{read}} aktuálnu tabuľku.", "Widget needs {{fullAccess}} to this document.": "Widget vyžaduje {{fullAccess}} k tomuto dokumentu.", - "No document access": "Bez prístupu k dokumentu" + "No document access": "Bez prístupu k dokumentu", + "Clear selection": "Vyčistiť výber", + "No {{columnType}} columns in table.": "V tabuľke nie sú žiadne stĺpce {{columnType}}." }, "AppModel": { "This team site is suspended. Documents can be read, but not modified.": "Táto tímová stránka je pozastavená. Dokumenty je možné čítať, ale nie upravovať." @@ -198,5 +200,25 @@ "Apply": "Použiť", "Cancel": "Zrušiť", "Default cell style": "Predvolený štýl bunky" + }, + "DataTables": { + "Delete {{formattedTableName}} data, and remove it from all pages?": "Odstrániť údaje {{formattedTableName}} a odobrať ich zo všetkých stránok?", + "Duplicate Table": "Duplikovať Tabuľku", + "Raw Data Tables": "Tbuľky s nespracovanými údajmi", + "Table ID copied to clipboard": "ID tabuľky bolo skopírované do schránky", + "Record Card": "Karta Záznamu", + "Edit Record Card": "Úprava Karty Záznamu", + "Click to copy": "Kliknutím skopírovať", + "You do not have edit access to this document": "Nemáte prístup k úprave tohto dokumentu", + "Record Card Disabled": "Zakázaná Karta Záznamu", + "Rename Table": "Premenovať tabuľku", + "{{action}} Record Card": "{{action}} Kartu Záznamu", + "Remove Table": "Odstrániť tabuľku" + }, + "DocHistory": { + "Activity": "Aktivita", + "Beta": "Beta", + "Compare to Previous": "Porovnať s Predchádzajúcim", + "Compare to Current": "Porovnať s Aktuálnym" } }