diff --git a/docs/en/src/customizing/preferences.md b/docs/en/src/customizing/preferences.md index 6c2d70914..17e24aedf 100644 --- a/docs/en/src/customizing/preferences.md +++ b/docs/en/src/customizing/preferences.md @@ -33,6 +33,18 @@ stylesheet edit dialog](../editing-stories/js-and-css.md). This preference only controls the cursor in the large text fields of these dialogs. Twine uses your system setting for cursor blinking in one-line text fields. +The _Use Enhanced Editors_ checkbox controls whether Twine uses an enhanced +editor control in edit dialogs. Unfortunately, this control can cause problems +for assistive technology like screen readers, so disabling this may help in that +case. Disabling this has a few side effects: + +- The _Blinking Cursor in Editors_ checkbox will become disabled, and whether + the cursor blinks in editors will use use your system setting. +- Some toolbar buttons in dialogs will be hidden, because they use functionality + present in the enhanced editor control. +- Story format toolbars will not be shown in passage editing dialogs, because + they also use functionality in the enhanced editor control + You can change the font and size used in passage edit dialogs and the stylesheet and JavaScript edit dialogs using the controls below the _Blinking Cursor in Editors_ checkbox. (The _Code Editor_ preferences apply to both the stylesheet diff --git a/docs/en/src/release-notes/2-10.md b/docs/en/src/release-notes/2-10.md new file mode 100644 index 000000000..68c8700b2 --- /dev/null +++ b/docs/en/src/release-notes/2-10.md @@ -0,0 +1,23 @@ +# 2.10 versions + +## 2.10.0 + +Release Date: November 24, 20242 + +## New Features Added + +- The story format list is now a dialog instead of a separate screen. +- A new preference has been added that allows disabling enhanced text editors, + which can have problems with assistive technology. Disabling these editors + disables syntax highlighting and some toolbar buttons, and you cannot control + whether the cursor blinks in non-enhanced fields. (In that case, it will use + your system setting.) + +## Bugs Fixed + +- Validation of story format URLs now occurs when you try to add the format, not + as you type in the field. This could cause the UI to become unresponsive. + +## Story Format Updates + +- Chapbook has been updated to version [2.3.0](https://klembot.github.io/chapbook/guide/references/version-history.html#230-24-november-24). \ No newline at end of file diff --git a/docs/en/src/story-formats/adding.md b/docs/en/src/story-formats/adding.md index e0493d09d..7460364ee 100644 --- a/docs/en/src/story-formats/adding.md +++ b/docs/en/src/story-formats/adding.md @@ -4,10 +4,10 @@ To add a story format, you'll need to know its address. A story format should include this in its documentation. A story format address must be a URL, with a prefix like `https://` in front of it. -Once you know your story format's address, choose _Add_ from the _Story Format_ -top toolbar tab and enter it in the dialog that appears. If Twine is able to -load the story format from the address you've entered, it will show a preview of -the format name and version you're adding. Choose _Add_ in the dialog to add it. -It'll appear in the list of story format cards immediately. You can now either -[set it as the default story format](default.md) or [change individual +Once you know your story format's address, choose _Add_ at the top of the Story +Formats dialog and enter it in the dialog that appears. If Twine is able to load +the story format from the address you've entered, it will show a preview of the +format name and version you're adding. Choose _Add_ in the dialog to add it. +It'll appear in the list of story formats immediately. You can now either [set +it as the default story format](default.md) or [change individual stories](../editing-stories/changing-story-format.md) to use it, if you like. diff --git a/docs/en/src/story-formats/default.md b/docs/en/src/story-formats/default.md index 96761efb7..1e52cd0f3 100644 --- a/docs/en/src/story-formats/default.md +++ b/docs/en/src/story-formats/default.md @@ -1,11 +1,11 @@ # Changing the Default Story Format -To change the default story format, select its card in the Story Formats screen -and choose _Use as Default Format_ from the _Story Format_ top toolbar tab. A -"Used as Default" sticker will appear on the card to confirm the change. If the -_Use As Default_ button is disabled, the format you've selected is already the -default format, or the format you've selected is for proofing. (In that case, -you probably want to [set it as your proofing format](proofing.md) instead.) +To change the default story format, use the _Use as Default Format_ button below +it. A "Used as Default" sticker will appear on the card to confirm the change. +If the _Use As Default_ button is disabled, the format you've selected is +already the default format, or the format you've selected is for proofing. (In +that case, you probably want to [set it as your proofing format](proofing.md) +instead.) Changing the default story format doesn't affect stories you've already created, only new ones you create in the future. You [can change the story format for diff --git a/docs/en/src/story-formats/extensions.md b/docs/en/src/story-formats/extensions.md index e8c4b5ff2..85d78ac6e 100644 --- a/docs/en/src/story-formats/extensions.md +++ b/docs/en/src/story-formats/extensions.md @@ -8,10 +8,8 @@ Story formats can extend Twine by adding: - Syntax coloring in passage edit dialogs If these extensions are buggy or you just prefer not to use them, you can -disable them. Select the story format card in the Story Format screen and choose -_Disable Editor Extensions_ from the _Story Format_ top toolbar tab. To reverse -this change, select the same card and choose _Enable Editor Extensions_ from the -_Story Format_ top toolbar tab. +disable them. To do this, uncheck the _Use Editor Extensions_ checkbox under the +story format's name in the dialog. To reverse this change, check this checkbox. Disabling extensions disables all extensions for a format. You can't disable just the toolbar, for example, but not a format's references or syntax coloring. diff --git a/docs/en/src/story-formats/proofing.md b/docs/en/src/story-formats/proofing.md index 0b4ee78f0..13fc34423 100644 --- a/docs/en/src/story-formats/proofing.md +++ b/docs/en/src/story-formats/proofing.md @@ -1,9 +1,8 @@ # Changing the Proofing Format -To change the proofing format, select its card in the Story Formats screen and -choose _Use to Proof Stories_ from the _Story Format_ top toolbar tab. A "Used -for Proofing" sticker will appear on the card to confirm the change. If the _Use -to Proof Stories_ button is disabled, the format you've selected is already the -proofing format, or the format you've selected is not a proofing format. (In -that case, you probably want to [set it as your default format](default.md) -instead.) +To change the proofing format, use the _Use As Proofing Format_ button below it. +A "Used for Proofing" sticker will appear on the card to confirm the change. If +the _Use As Proofing Format_ button is disabled, the format you've selected is +already the proofing format, or the format you've selected is not a proofing +format. (In that case, you probably want to [set it as your default +format](default.md) instead.) diff --git a/docs/en/src/story-formats/removing.md b/docs/en/src/story-formats/removing.md index 3cae95060..ede25018b 100644 --- a/docs/en/src/story-formats/removing.md +++ b/docs/en/src/story-formats/removing.md @@ -1,9 +1,8 @@ # Removing a Story Format -To remove a story format, select its card in the Story Format screen and choose -_Remove_ from the _Story Format_ top toolbar tab. If this button is disabled, -you've selected a format that is built-in, or is currently your default or -proofing story format. +To remove a story format, click the _Delete_ button below its name. If you don't +see a _Delete_ button, you've selected a format that is built-in, or is +currently your default or proofing story format. If a story uses a story format you've removed, you'll need to [change it to another format](../editing-stories/changing-story-format.md). Twine will also diff --git a/docs/en/src/story-formats/viewing.md b/docs/en/src/story-formats/viewing.md index 08af8ac91..73beff153 100644 --- a/docs/en/src/story-formats/viewing.md +++ b/docs/en/src/story-formats/viewing.md @@ -2,21 +2,22 @@ To view a list of story formats installed in your version of Twine, choose _Story Formats_ from the _Twine_ top toolbar tab. By default, the Story Formats -screen will show you the newest version of every story format you have -installed. Each card in the Story Formats screen represents a single format -that's installed. This list shows both regular story formats and proofing ones -together, and is sorted alphabetically by name. +dialog will show you the newest version of every story format you have +installed. Each item represents a single format that's installed. This list +shows both regular story formats and proofing ones together, and is sorted +alphabetically by name. Story formats that come installed with Twine have a sticker on them labeled "Built In." The [default story format](default.md) has a sticker on it labeled "Used as Default," and the format that's used for proofing stories has a "Used -for Proofing" sticker. +for Proofing" sticker. These formats also have a blue background in the list to +make them easier to locate. If Twine isn't able to load a story format, it will show an error symbol on its card with a short explanation of the error it encountered. -To view only story formats you've added yourself, choose _User-Added Story -Formats_ from the _View_ top toolbar tab. +The dialog has a button that allows you to choose what formats are shown: -To view all formats, including older versions of story formats, choose _All -Story Formats_ from the _View_ top toolbar tab. +- _Current Story Formats_ shows only the newest version of each story format. +- _User-Added Story Formats_ shows only formats you have added. +- _All Story Formats_ shows all formats installed, including older versions of formats. \ No newline at end of file diff --git a/package.json b/package.json index c9d5a54fc..bde129e8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Twine", - "version": "2.9.2", + "version": "2.10.0", "description": "a GUI for creating nonlinear stories", "author": "Chris Klimas ", "license": "GPL-3.0", diff --git a/public/locales/ca.json b/public/locales/ca.json index ea354bff3..9cd56e760 100644 --- a/public/locales/ca.json +++ b/public/locales/ca.json @@ -29,7 +29,7 @@ "renameStoryButton": {"emptyName": "Introduïu un nom."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -81,10 +81,6 @@ "selectAllPassages": "Selecciona tots els passatges" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Els formats d'història controlen l'aparença i comportament de les històries durant la reproducció." - }, "storyImport": {}, "storyList": { "noStories": "No hi ha cap història desada al Twine ara mateix. Per començar, podeu crear una història nova i importar una existent des d'un fitxer.", diff --git a/public/locales/cs.json b/public/locales/cs.json index 2aeaa6a04..553bb5cb8 100644 --- a/public/locales/cs.json +++ b/public/locales/cs.json @@ -118,11 +118,10 @@ "passageCount": "1 pasáž", "passageCount_plural": "{{count}} pasáží" }, - "storyFormatCard": { + "storyFormatItem": { "author": "Autor: {{author}}", "builtIn": "Vestavěné", "defaultFormat": "Použito jako výchozí", - "editorExtensionsDisabled": "Rozšíření editoru vypnuta", "license": "Licence: {{license}}", "loadingFormat": "Načítání tohoto formátu příběhu...", "loadError": "Tento formát příběhu se nepodařilo načíst ({{errorMessage}}).", @@ -193,6 +192,16 @@ "noTags": "K pasážím v tomto příběhu nebyly zatím přidány žádné značky.", "title": "Značky pasáží" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}} bude přidán.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} už byl přidán.", + "fetchError": "Formát příběhu nemohl být ze zadaného URL získán ({{errorMessage}}).", + "invalidUrl": "Zadejte validní URL.", + "prompt": "K přidání nového formátu příběhu zadejte jeho URL adresu níže." + }, + "noneVisible": "Žádné formáty příběhu se neshodují s žádnými kritérii, která jste vybrali." + }, "storyImport": { "deselectAll": "Zrušit výběr", "filePrompt": "K importování příběhu do Twinu nahrejte archiv, publikovaný příběh, nebo zdrojový kód v Twee.", @@ -322,29 +331,6 @@ "passageNamesAndExcerpts": "Zobrazi názvy pasáží a úryvky z nich" } }, - "storyFormatList": { - "noneVisible": "Žádné formáty příběhu se neshodují s žádnými kritérii, která jste vybrali.", - "show": "Zobrazit...", - "title": { - "all": "Všechny formáty příběhu", - "current": "Současné formáty příbehu", - "user": "Uživatelské formáty příběhu" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}} bude přidán.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} už byl přidán.", - "fetchError": "Formát příběhu nemohl být ze zadaného URL získán ({{errorMessage}}).", - "invalidUrl": "Zadejte validní URL.", - "prompt": "K přidání nového formátu příběhu zadejte jeho URL adresu níže." - }, - "disableFormatExtensions": "Vypnout rozšíření editoru", - "enableFormatExtensions": "Zapnout rozšíření editoru příběhu", - "useAsDefaultFormat": "Použít jako výchozí formát", - "useAsProofingFormat": "Použít ke korektuře příběhů" - }, - "storyFormatExplanation": "Příběhové formáty ovlivňují vzhled a chování příběhů během jejich přehrávání." - }, "storyList": { "library": "Knihovna", "noStories": "Ve Twinu nejsou uložené žádné příběhy. Aby jste začali, můžete buď vytvořit nový příběh nebo ze souboru importovat již existující.", diff --git a/public/locales/da.json b/public/locales/da.json index a2b760780..7ea474fe6 100644 --- a/public/locales/da.json +++ b/public/locales/da.json @@ -31,7 +31,7 @@ "renameStoryButton": {"emptyName": "Indtast et navn."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -69,10 +69,6 @@ "publishToFile": "Udgiv som fil" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Historieformater styrer udseende og opførsel af historier når der spilles." - }, "storyImport": {}, "storyList": { "noStories": "Der er ingen historier gemt i Twine lige nu. For at begynde kan du enten oprette en ny historie eller importere en eksisterende fra en fil.", diff --git a/public/locales/de.json b/public/locales/de.json index 52d2cb3ec..37a61bd9e 100644 --- a/public/locales/de.json +++ b/public/locales/de.json @@ -118,11 +118,10 @@ "passageCount": "1 Abschnitt", "passageCount_plural": "{{count}} Abschnitte" }, - "storyFormatCard": { + "storyFormatItem": { "author": "von {{author}}", "builtIn": "Erstellt am", "defaultFormat": "Als Standard gesetzt", - "editorExtensionsDisabled": "Editor Erweiterungen Deaktiviert", "license": "Lizenz: {{license}}", "loadingFormat": "Lade diese Geschichtsformat...", "loadError": "Dieses Geschichtsformat konnte nicht geladen werden ({{errorMessage}}).", @@ -219,6 +218,21 @@ "words": "Wörter" } }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}} wird hinzugefügt.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} ist bereits vorhanden.", + "fetchError": "Das Geschichtsformat an dieser Adresse konnte nicht abgerufen werden ({{errorMessage}}).", + "invalidUrl": "Bitte eine gültige URL eingeben.", + "prompt": "Um ein Geschichtsformat hinzuzufügen, gebe unten die Adresse ein." + }, + "filterButton": { + "all": "Alle Geschichtsformate", + "current": "Momentane Geschichtsformate", + "user": "Vom Benutzer hinzugefügte Geschichtsformate" + }, + "noneVisible": "Keine Geschichtsformate passen zu deinen Kriterien." + }, "storyJavaScript": { "editorLabel": "JavaScript der Geschicht", "title": "JavaScript der Geschicht", @@ -322,29 +336,6 @@ "passageNamesAndExcerpts": "Zeige Abschnittsnamen und -ausschnitte" } }, - "storyFormatList": { - "noneVisible": "Keine Geschichtsformate passen zu deinen Kriterien.", - "show": "Anzeigen...", - "title": { - "all": "Alle Geschichtsformate", - "current": "Momentane Geschichtsformate", - "user": "Vom Benutzer hinzugefügte Geschichtsformate" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}} wird hinzugefügt.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} ist bereits vorhanden.", - "fetchError": "Das Geschichtsformat an dieser Adresse konnte nicht abgerufen werden ({{errorMessage}}).", - "invalidUrl": "Bitte eine gültige URL eingeben.", - "prompt": "Um ein Geschichtsformat hinzuzufügen, gebe unten die Adresse ein." - }, - "disableFormatExtensions": "Deaktiviere Editor Erweiterungen", - "enableFormatExtensions": "Aktiviere Editor Erweiterungen", - "useAsDefaultFormat": "Benutze als Standardformat", - "useAsProofingFormat": "Benutze zur Korrektur von Geschichten" - }, - "storyFormatExplanation": "Geschichtsformate bestimmen Aussehen und Verhalten Deiner Geschichten während des Spielens." - }, "storyList": { "library": "Bibliothek", "noStories": "Es sind derzeit noch keine Geschichten in Twine gespeichert. Du kannst entweder eine neue Geschichte erstellen oder eine bestehende Geschichte importieren.", diff --git a/public/locales/en-US.json b/public/locales/en-US.json index c0f9ed9c9..616317053 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -118,11 +118,10 @@ "passageCount": "1 passage", "passageCount_plural": "{{count}} passages" }, - "storyFormatCard": { + "storyFormatItem": { "author": "by {{author}}", "builtIn": "Built In", "defaultFormat": "Used as Default", - "editorExtensionsDisabled": "Editor Extensions Disabled", "license": "License: {{license}}", "loadingFormat": "Loading this story format...", "loadError": "This story format could not be loaded ({{errorMessage}}).", @@ -176,7 +175,8 @@ "themeDark": "Dark", "themeSystem": "System", "theme": "Theme", - "title": "Preferences" + "title": "Preferences", + "useEnhancedEditors": "Use Enhanced Editors" }, "passageEdit": { "editorCrashed": "Something went wrong with this editor. Try closing it and editing this passage again.", @@ -193,6 +193,22 @@ "noTags": "No tags have been added to passages in this story.", "title": "Passage Tags" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}} will be added.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} has already been added.", + "fetchError": "The story format at this address could not be retrieved ({{errorMessage}}).", + "invalidUrl": "Please enter a valid URL.", + "prompt": "To add a story format, enter its address below." + }, + "filterButton": { + "all": "All Story Formats", + "current": "Current Story Formats", + "user": "User-Added Story Formats" + }, + "noneVisible": "No story formats match the criteria you've selected.", + "title": "Story Formats" + }, "storyImport": { "deselectAll": "Deselect All", "filePrompt": "To import stories into Twine, upload an archive, published story, or Twee source file below.", @@ -322,29 +338,6 @@ "passageNamesAndExcerpts": "Show Passage Names and Excerpts" } }, - "storyFormatList": { - "noneVisible": "No story formats match the criteria you've selected.", - "show": "Show...", - "title": { - "all": "All Story Formats", - "current": "Current Story Formats", - "user": "User-Added Story Formats" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}} will be added.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} has already been added.", - "fetchError": "The story format at this address could not be retrieved ({{errorMessage}}).", - "invalidUrl": "Please enter a valid URL.", - "prompt": "To add a story format, enter its address below." - }, - "disableFormatExtensions": "Disable Editor Extensions", - "enableFormatExtensions": "Enable Editor Extensions", - "useAsDefaultFormat": "Use as Default Format", - "useAsProofingFormat": "Use to Proof Stories" - }, - "storyFormatExplanation": "Story formats control the appearance and behavior of stories during play." - }, "storyList": { "library": "Library", "noStories": "There are no stories saved in Twine right now. To get started, you can either create a new story or import an existing one from a file.", diff --git a/public/locales/es.json b/public/locales/es.json index 80bdbd20f..e63648397 100644 --- a/public/locales/es.json +++ b/public/locales/es.json @@ -33,7 +33,7 @@ "renameStoryButton": {"emptyName": "Por favor ingresa un nombre."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -75,10 +75,6 @@ "publishToFile": "Publicar a archivo" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Los formatos de historia controlan la apariencia y comportamiento de las historias durante su reproducción." - }, "storyImport": {}, "storyList": { "noStories": "No hay historias guardadas en Twine ahora mismo. Para empezar, puedes crear una historia nueva o bien importar una existente desde un archivo.", diff --git a/public/locales/fi.json b/public/locales/fi.json index c86951b51..a13b81eac 100644 --- a/public/locales/fi.json +++ b/public/locales/fi.json @@ -33,7 +33,7 @@ "renameStoryButton": {"emptyName": "Anna nimi."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -75,10 +75,6 @@ "publishToFile": "Julkaise tiedostoon" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Tarinan muotoilut ohjaavat tarinan ulkoasua ja toimintaa tarinaa näytettäessä." - }, "storyImport": {}, "storyList": { "noStories": "Twinessä ei ole tallennettuja tarinoita. Aloita luomalla uusi tarina tai tuo tarina tiedostosta.", diff --git a/public/locales/fr.json b/public/locales/fr.json index eb61ecf8b..e973aadca 100644 --- a/public/locales/fr.json +++ b/public/locales/fr.json @@ -107,11 +107,10 @@ "passageCount": "1 passage", "passageCount_plural": "{{count}} passages" }, - "storyFormatCard": { + "storyFormatItem": { "author": "par {{author}}", "builtIn": "Formatté En", "defaultFormat": "Utilisé par Défaut", - "editorExtensionsDisabled": "Extensions de l'Éditeur désactivées", "license": "License: {{license}}", "loadingFormat": "Chargement du format de l'histoire...", "loadError": "Ce format d'histoire n'a pas pu être chargé ({{errorMessage}}).", @@ -182,10 +181,25 @@ "noTags": "Aucune balise n'a été ajoutée aux passages de cette histoire.", "title": "Balises du passage" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}} sera ajouté.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} a déjà été ajouté.", + "fetchError": "Le format d'histoire à cette adresse n'a pas pu être récupéré ({errorMessage}).", + "invalidUrl": "Veuillez entrer une URL valide.", + "prompt": "Pour ajouter un format d'histoire, entrez son adresse ci-dessous." + }, + "filterButton": { + "all": "Tous les formats d'histoire", + "current": "Formats d'histoire actuels", + "user": "Formats d'histoire ajoutés par l'utilisateur" + }, + "noneVisible": "Aucun des formats d'histoire ne correspond aux critères choisis." + }, "storyInfo": { "stats": { "title": "Statistiques de l'Histoire" - } + } }, "storyJavaScript": { "editorLabel": "JavaScript de l'histoire", @@ -299,29 +313,6 @@ "passageNamesAndExcerpts": "Afficher les noms des passages et leurs résumés" } }, - "storyFormatList": { - "noneVisible": "Aucun des formats d'histoire ne correspond aux critères choisis.", - "show": "Afficher...", - "title": { - "all": "Tous les formats d'histoire", - "current": "Formats d'histoire actuels", - "user": "Formats d'histoire ajoutés par l'utilisateur" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}} sera ajouté.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} a déjà été ajouté.", - "fetchError": "Le format d'histoire à cette adresse n'a pas pu être récupéré ({errorMessage}).", - "invalidUrl": "Veuillez entrer une URL valide.", - "prompt": "Pour ajouter un format d'histoire, entrez son adresse ci-dessous." - }, - "disableFormatExtensions": "Désactiver les extensions de l'éditeur", - "enableFormatExtensions": "Activer les extensions de l'éditeur", - "useAsDefaultFormat": "Utiliser en tant que format par défaut", - "useAsProofingFormat": "Utiliser pour vérifier les histoires" - }, - "storyFormatExplanation": "Story formats control the appearance and behavior of stories during play." - }, "storyImport": {}, "storyList": { "library": "Bibliothèque", diff --git a/public/locales/it.json b/public/locales/it.json index 1a3bb843f..77aec55a6 100644 --- a/public/locales/it.json +++ b/public/locales/it.json @@ -31,7 +31,7 @@ "renameStoryButton": {"emptyName": "Inserisci un nome."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -70,10 +70,6 @@ "publishToFile": "Pubblica come File" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "I formati Racconto controllano l’aspetto ed il comportamento delle storie durante l’esecuzione." - }, "storyImport": {}, "storyList": { "noStories": "Al momento non ci sono racconti salvati in Twine. Per cominciare, puoi creare un nuovo racconto oppure importarne uno da file.", diff --git a/public/locales/jp.json b/public/locales/jp.json index 27fc9cf5e..69774518b 100644 --- a/public/locales/jp.json +++ b/public/locales/jp.json @@ -20,7 +20,7 @@ "renameStoryButton": {}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -47,7 +47,6 @@ "publishToFile": "ファイルに出力する" } }, - "storyFormatList": {"title": {}}, "storyImport": {}, "storyList": { "noStories": "現在、Twineに保存されているストーリーはありません。開始するには、新しいストーリーを作成するか、ファイルから既存のストーリーをインポートします。", diff --git a/public/locales/ko.json b/public/locales/ko.json index 77c28f9fb..cb8f46c12 100644 --- a/public/locales/ko.json +++ b/public/locales/ko.json @@ -118,11 +118,10 @@ "passageCount": "1개 구절", "passageCount_plural": "{{count}}개 구절" }, - "storyFormatCard": { + "storyFormatItem": { "author": "제작자: {{author}}", "builtIn": "기본 제공", "defaultFormat": "기본값으로 사용", - "editorExtensionsDisabled": "편집기 확장 사용 안 함", "license": "라이선스: {{license}}", "loadingFormat": "이 스토리 형식을 로드하는 중...", "loadError": "이 스토리 형식을 로드할 수 없습니다. ({{errorMessage}})", @@ -219,6 +218,21 @@ "words": "단어" } }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}}이(가) 추가됩니다.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}}이(가) 이미 추가되었습니다.", + "fetchError": "이 주소의 스토리 형식을 검색할 수 없습니다. ({{errorMessage}})", + "invalidUrl": "유효한 URL을 입력하세요.", + "prompt": "스토리 형식을 추가하려면 아래에 주소를 입력하세요." + }, + "filterButton": { + "all": "모든 스토리 형식", + "current": "현재 스토리 형식", + "user": "사용자 추가 스토리 형식" + }, + "noneVisible": "선택한 조건에 맞는 스토리 형식이 없습니다." + }, "storyJavaScript": { "editorLabel": "스토리 JavaScript", "title": "스토리 JavaScript", @@ -309,29 +323,6 @@ "passageNamesAndExcerpts": "구절 이름과 발췌문 표시" } }, - "storyFormatList": { - "noneVisible": "선택한 조건에 맞는 스토리 형식이 없습니다.", - "show": "표시...", - "title": { - "all": "모든 스토리 형식", - "current": "현재 스토리 형식", - "user": "사용자 추가 스토리 형식" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}}이(가) 추가됩니다.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}}이(가) 이미 추가되었습니다.", - "fetchError": "이 주소의 스토리 형식을 검색할 수 없습니다. ({{errorMessage}})", - "invalidUrl": "유효한 URL을 입력하세요.", - "prompt": "스토리 형식을 추가하려면 아래에 주소를 입력하세요." - }, - "disableFormatExtensions": "편집기 확장 비활성화", - "enableFormatExtensions": "편집기 확장 활성화", - "useAsDefaultFormat": "기본 형식으로 사용", - "useAsProofingFormat": "스토리 교정에 사용" - }, - "storyFormatExplanation": "스토리 형식은 플레이 중 스토리의 모양과 동작을 제어합니다." - }, "storyList": { "library": "라이브러리", "noStories": "현재 Twine에 저장된 스토리가 없습니다. 시작하려면 새 스토리를 만들거나 파일에서 기존 스토리를 가져올 수 있습니다.", diff --git a/public/locales/ms.json b/public/locales/ms.json index a0d872f00..521bdfa39 100644 --- a/public/locales/ms.json +++ b/public/locales/ms.json @@ -31,7 +31,7 @@ "renameStoryButton": {"emptyName": "Sila masukkan nama."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -72,10 +72,6 @@ "publishToFile": "Terbit ke Fail" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Format cerita kawal penampilan dan tingkah laku cerita semasa tengah bermain." - }, "storyImport": {}, "storyList": { "noStories": "Tiada apa-apa cerita disimpan di Twine pada masa sekarang. Untuk bermula, anda boleh sama ada cipta cerita baharu atau import yang sedia ada dari fail.", diff --git a/public/locales/nb.json b/public/locales/nb.json index 2f9a05384..7e5e24fa8 100644 --- a/public/locales/nb.json +++ b/public/locales/nb.json @@ -31,7 +31,7 @@ "renameStoryButton": {"emptyName": "Vennligst skriv inn et navn."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -67,10 +67,6 @@ "publishToFile": "Publiser til fil" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Historieformater styrer fremstillingen og oppførselen til historier under spillet." - }, "storyImport": {}, "storyList": { "noStories": "Det er ingen historier lagret i Twine akkurat nå. For å komme i gang kan du enten opprette en ny historie eller importere en eksisterende fra en fil.", diff --git a/public/locales/nl.json b/public/locales/nl.json index 5c43bdc3e..33912c4b4 100644 --- a/public/locales/nl.json +++ b/public/locales/nl.json @@ -114,11 +114,10 @@ "passageCount": "1 passage", "passageCount_plural": "{{count}} passages" }, - "storyFormatCard": { + "storyFormatItem": { "author": "door {{author}}", "builtIn": "Ingebouwd", "defaultFormat": "Gebruikt als standaard", - "editorExtensionsDisabled": "Editor-extensies uitgeschakeld", "license": "Licentie: {{license}}", "loadingFormat": "Laden van dit formaat...", "loadError": "Dit formaat kon niet worden geladen ({{errorMessage}}).", @@ -189,6 +188,21 @@ "noTags": "Er zijn geen labels toegevoegd aan passages in dit verhaal.", "title": "Passage Labels" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}} wordt toegevoegd.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} is al toegevoegd.", + "fetchError": "Het verhaalformaat op dit adres kan niet worden opgehaald ({{errorMessage}}).", + "invalidUrl": "Voer een geldige URL in.", + "prompt": "Voer het adres hieronder in om een verhaalformaat toe te voegen." + }, + "filterButton": { + "all": "Alle Verhaal Formaten", + "current": "Huidige Verhaal Formaten", + "user": "Door Gebruiker Toegevoegde Formaten" + }, + "noneVisible": "Er zijn geen verhaalformaten die voldoen aan de criteria die je hebt geselecteerd." + }, "storyImport": { "deselectAll": "Deselecteer Alles", "filePrompt": "Om verhalen in Twine te importeren, uploadt u hieronder een archief of een gepubliceerd verhaalbestand.", @@ -300,29 +314,6 @@ "passageNamesAndExcerpts": "Passagenamen en fragmenten weergeven" } }, - "storyFormatList": { - "noneVisible": "Er zijn geen verhaalformaten die voldoen aan de criteria die je hebt geselecteerd.", - "show": "Laat zien...", - "title": { - "all": "Alle Verhaal Formaten", - "current": "Huidige Verhaal Formaten", - "user": "Door Gebruiker Toegevoegde Formaten" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}} wordt toegevoegd.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} is al toegevoegd.", - "fetchError": "Het verhaalformaat op dit adres kan niet worden opgehaald ({{errorMessage}}).", - "invalidUrl": "Voer een geldige URL in.", - "prompt": "Voer het adres hieronder in om een verhaalformaat toe te voegen." - }, - "disableFormatExtensions": "Editor-extensies uitschakelen", - "enableFormatExtensions": "Editor-extensies inschakelen", - "useAsDefaultFormat": "Gebruiken als standaardformaat", - "useAsProofingFormat": "Gebruik om verhalen proef te lezen" - }, - "storyFormatExplanation": "Verhaalformaten bepalen het uiterlijk en het gedrag van verhalen tijdens het spelen." - }, "storyList": { "library": "Bibliotheek", "noStories": "Er zijn momenteel geen verhalen opgeslagen in Twine. Om aan de slag te gaan, kunt u een nieuw verhaal maken of een bestaand verhaal uit een bestand importeren.", diff --git a/public/locales/pt-BR.json b/public/locales/pt-BR.json index 746265d99..b629920b5 100644 --- a/public/locales/pt-BR.json +++ b/public/locales/pt-BR.json @@ -53,199 +53,213 @@ "view": "Exibir" }, "components": { - "addTagButton": { - "alreadyAdded": "Este nome de etiqueta já está sendo usado.", - "addLabel": "Adicionar etiqueta", - "invalidName": "Insira um nome válido para a etiqueta.", - "newTag": "Nova Etiqueta", - "tagColorLabel": "Cor da Etiqueta", - "tagNameLabel": "Nome da Etiqueta" - }, - "dialogCard": { - "contentsCrashed": "Algo deu errado com esta caixa de texto. Tente fechá-la e abri-la novamente." - }, - "fontSelect": { - "customScaleDetail": "Somente valores em percentagem, por favor.", - "customFamilyDetail": "Insira apenas o nome da fonte.", - "familyEmpty": "Insira o nome da fonte.", - "font": "Fonte", - "fonts": { - "monospaced": "Monoespaçada", - "serif": "Serifada", - "system": "Sistema" - }, - "fontSize": "Tamanho da Fonte", - "percentage": "{{percent}}%", - "percentageIsntNumber": "Insira um número.", - "percentageNotPositive": "Insira um número maior do que 0." - }, - "indentButtons": { - "indent": "Indentar", - "unindent": "Remover Indentação" - }, - "localStorageQuota": { - "measureAgain": "Calcular o espaço disponível novamente", - "percentAvailable": "{percent}% de espaço disponível" - }, - "passageCard": { - "placeholderClick": "Clique duas vezes nesta passagem para editá-la.", - "placeholderTouch": "Toque nesta passagem, então selecione «Editar» na aba «Passagem» para editá-la." - }, - "passageFuzzyFinder": { - "noResults": "Nenhuma correspondência.", - "prompt": "Procurar por nome da passagem ou por texto" - }, - "renamePassageButton": { - "emptyName": "Insira um nome.", - "nameAlreadyUsed": "Já existe uma passagem com esse nome nesta história." - }, - "renameStoryButton": { - "emptyName": "Insira o título da história.", - "nameAlreadyUsed": "Já existe uma história com esse título." - }, - "safariWarningCard": { - "archiveAndUseAnotherBrowser": "Por favor, arquive as suas histórias e use outra plataforma.", - "addToHomeScreen": "Adicione esta página à sua tela inicial para contornar esta limitação.", - "howToAddToHomeScreen": "Como Adicionar Isto à Minha Tela Inicial?", - "learnMore": "Saiba mais", - "message": "O navegador utilizado apagará todas as suas histórias caso não visite esta página dentro de sete dias." - }, - "storageQuota": { - "freeSpace": "{{percent}}% de espaço disponível" - }, - "storyCard": { - "lastUpdated": "Editada pela última vez em {{date}}", - "passageCount": "1 passagem", - "passageCount_plural": "{{count}} passagens" - }, - "storyFormatCard": { - "author": "de {{author}}", - "builtIn": "Criado em", - "defaultFormat": "Usado por Padrão", - "editorExtensionsDisabled": "Extensões do Editor Desligadas", - "license": "Licença: {{license}}", - "loadingFormat": "Carregando este formato de história...", - "loadError": "Este formato de história não pôde ser carregado ({{errorMessage}}).", - "name": "{{name}} {{version}}", - "proofing": "Revisão", - "proofingFormat": "Usado para a Revisão", - "useEditorExtensions": "Usar Extensões do Editor", - "useFormat": "Usar como Formato de História Padrão", - "useProofingFormat": "Usar como Formato de Revisão" - }, - "storyFormatSelect": { - "loadingCount": "Carregando 1 Formato de História...", - "loadingCount_plural": "Carregando {{loadingCount}} Formatos de História..." - }, - "tagEditor": { - "alreadyExists": "Já existe uma etiqueta com esse nome." - } - }, + "addTagButton": { + "alreadyAdded": "Este nome de etiqueta já está sendo usado.", + "addLabel": "Adicionar etiqueta", + "invalidName": "Insira um nome válido para a etiqueta.", + "newTag": "Nova Etiqueta", + "tagColorLabel": "Cor da Etiqueta", + "tagNameLabel": "Nome da Etiqueta" + }, + "dialogCard": { + "contentsCrashed": "Algo deu errado com esta caixa de texto. Tente fechá-la e abri-la novamente." + }, + "fontSelect": { + "customScaleDetail": "Somente valores em percentagem, por favor.", + "customFamilyDetail": "Insira apenas o nome da fonte.", + "familyEmpty": "Insira o nome da fonte.", + "font": "Fonte", + "fonts": { + "monospaced": "Monoespaçada", + "serif": "Serifada", + "system": "Sistema" + }, + "fontSize": "Tamanho da Fonte", + "percentage": "{{percent}}%", + "percentageIsntNumber": "Insira um número.", + "percentageNotPositive": "Insira um número maior do que 0." + }, + "indentButtons": { + "indent": "Indentar", + "unindent": "Remover Indentação" + }, + "localStorageQuota": { + "measureAgain": "Calcular o espaço disponível novamente", + "percentAvailable": "{percent}% de espaço disponível" + }, + "passageCard": { + "placeholderClick": "Clique duas vezes nesta passagem para editá-la.", + "placeholderTouch": "Toque nesta passagem, então selecione «Editar» na aba «Passagem» para editá-la." + }, + "passageFuzzyFinder": { + "noResults": "Nenhuma correspondência.", + "prompt": "Procurar por nome da passagem ou por texto" + }, + "renamePassageButton": { + "emptyName": "Insira um nome.", + "nameAlreadyUsed": "Já existe uma passagem com esse nome nesta história." + }, + "renameStoryButton": { + "emptyName": "Insira o título da história.", + "nameAlreadyUsed": "Já existe uma história com esse título." + }, + "safariWarningCard": { + "archiveAndUseAnotherBrowser": "Por favor, arquive as suas histórias e use outra plataforma.", + "addToHomeScreen": "Adicione esta página à sua tela inicial para contornar esta limitação.", + "howToAddToHomeScreen": "Como Adicionar Isto à Minha Tela Inicial?", + "learnMore": "Saiba mais", + "message": "O navegador utilizado apagará todas as suas histórias caso não visite esta página dentro de sete dias." + }, + "storageQuota": { + "freeSpace": "{{percent}}% de espaço disponível" + }, + "storyCard": { + "lastUpdated": "Editada pela última vez em {{date}}", + "passageCount": "1 passagem", + "passageCount_plural": "{{count}} passagens" + }, + "storyFormatItem": { + "author": "de {{author}}", + "builtIn": "Criado em", + "defaultFormat": "Usado por Padrão", + "license": "Licença: {{license}}", + "loadingFormat": "Carregando este formato de história...", + "loadError": "Este formato de história não pôde ser carregado ({{errorMessage}}).", + "name": "{{name}} {{version}}", + "proofing": "Revisão", + "proofingFormat": "Usado para a Revisão", + "useEditorExtensions": "Usar Extensões do Editor", + "useFormat": "Usar como Formato de História Padrão", + "useProofingFormat": "Usar como Formato de Revisão" + }, + "storyFormatSelect": { + "loadingCount": "Carregando 1 Formato de História...", + "loadingCount_plural": "Carregando {{loadingCount}} Formatos de História..." + }, + "tagEditor": { + "alreadyExists": "Já existe uma etiqueta com esse nome." + } + }, "dialogs": { - "aboutTwine": { - "donateToTwine": "Ajude o Twine a Crescer com uma Doação", - "codeHeader": "Código", - "codeRepo": "Visitar o Repositório do Código-Fonte", - "license": "Esta aplicação está publicada de acordo com a licença GPL v3, mas qualquer obra criada pode ser publicada de acordo com quaisquer outras condições, incluindo comerciais.", - "localizationHeader": "Localizações", - "title": "Sobre o Twine {{version}}", - "twineDescription": "O Twine é uma aplicação de código-fonte aberto para contar histórias interativas e não lineares." - }, - "appDonation": { - "donate": "Doar para o Desenvolvimento do Twine", - "onlyOnce": "(Esta mensagem será exibida apenas uma vez. Caso queira fazer uma doação para o desenvolvimento do Twine, siga o link na caixa \"Sobre o Twine\".)", - "supportMessage": "Se você ama o Twine, pedimos que o ajude a crescer fazendo uma doação. O Twine é um projeto de código-fonte aberto que será sempre gratuito — e graças à sua ajuda, o Twine poderá continuar crescendo.", - "noThanks": "Não, Obrigado", - "title": "Apoiar o Desenvolvimento do Twine" - }, - "appPrefs": { - "codeEditorFont": "Fonte do Editor de Código", - "codeEditorFontScale": "Tamanho da Fonte do Editor de Código", - "dialogWidth": "Largura da Caixa de Texto", - "dialogWidths": { - "default": "Padrão", - "wider": "Larga", - "widest": "Mais Larga" - }, - "editorCursorBlinks": "Cursor Piscante nos Editores", - "fontExplanation": "Alterar a fonte aqui afetará apenas o editor do Twine. A fonte usada na história não será alterada.", - "language": "Idioma", - "passageEditorFont": "Fonte do Editor de Passagem", - "passageEditorFontScale": "Tamanho da Fonte do Editor de Passagem", - "themeLight": "Claro", - "themeDark": "Escuro", - "themeSystem": "Sistema", - "theme": "Tema", - "title": "Preferências" - }, - "passageEdit": { - "editorCrashed": "Algo deu errado com o editor. Tente fechá-lo e editar a passagem novamente.", - "passageTextEditorLabel": "Texto da Passagem", - "passageTextPlaceholder": "Escreva o texto da passagem aqui. Para ligá-lo a outra passagem, coloque dois colchetes ao redor do nome, [[desta maneira]].", - "setAsStart": "Começar a História Aqui", - "size": "Tamanho", - "sizeLarge": "Grande", - "sizeSmall": "Pequena", - "sizeTall": "Alta", - "sizeWide": "Larga" - }, - "passageTags": { - "noTags": "Ainda não foram adicionadas etiquetas a passagens nesta história.", - "title": "Etiquetas das Passagens" - }, - "storyImport": { - "deselectAll": "Desmarcar Tudo", - "filePrompt": "Para importar histórias ao Twine, carregue um arquivo, história publicada ou arquivo Twee abaixo.", - "importDifferentFile": "Importar um Outro Arquivo", - "importSelected": "Importar os Arquivos Marcados", - "importThisStory": "Importar Esta História", - "noStoriesInFile": "Parece que não há histórias Twine no arquivo carregado. Por favor, escolha outro arquivo.", - "storiesPrompt": "Escolha as histórias que deseja importar:", - "title": "Importar Histórias", - "willReplaceExisting": "Uma história da biblioteca com o mesmo título será substituída." - }, - "storyDetails": { - "storyFormatExplanation": "O que é um formato de história?", - "snapToGrid": "Alinhar à Grade", - "stats": { - "brokenLinks": "Ligações Cortadas", - "characters": "Caracteres", - "title": "Detalhes da História", - "ifid": "O IFID desta história é {{ifid}}.", - "ifidExplanation": "O que é um IFID?", - "lastUpdate": "Esta história foi alterada pela última vez em {{date}}.", - "links": "Ligações", - "passages": "Passagens", - "words": "Palavras" - } - }, - "storyJavaScript": { - "editorLabel": "JavaScript da História", - "title": "JavaScript da História", - "explanation": "O código JavaScript inserido aqui será reproduzido assim que a história for aberta num navegador." - }, - "storySearch": { - "title": "Encontrar e Substituir", - "find": "Encontrar", - "includePassageNames": "Incluir os Nomes das Passagens", - "matchCase": "Sensível a Maiúsculas/Minúsculas", - "matchCount": "{{count}} passagem correspondente", - "matchCount_plural": "{{count}} passagens correspondentes", - "noMatches": "Nenhuma passagem correspondente", - "replaceAll": "Substituir em Todas as Passagens", - "replaceWith": "Substituir por", - "useRegexes": "Usar Expressões Regulares" - }, - "storyStylesheet": { - "editorLabel": "Folha de Estilos da História", - "title": "Folha de Estilos da História", - "explanation": "Qualquer CSS inserido aqui irá sobrescrever a aparência padrão da sua história." - }, - "storyTags": { - "noTags": "Ainda não foram adicionadas etiquetas às suas histórias.", - "title": "Etiquetas de História" - } - }, + "aboutTwine": { + "donateToTwine": "Ajude o Twine a Crescer com uma Doação", + "codeHeader": "Código", + "codeRepo": "Visitar o Repositório do Código-Fonte", + "license": "Esta aplicação está publicada de acordo com a licença GPL v3, mas qualquer obra criada pode ser publicada de acordo com quaisquer outras condições, incluindo comerciais.", + "localizationHeader": "Localizações", + "title": "Sobre o Twine {{version}}", + "twineDescription": "O Twine é uma aplicação de código-fonte aberto para contar histórias interativas e não lineares." + }, + "appDonation": { + "donate": "Doar para o Desenvolvimento do Twine", + "onlyOnce": "(Esta mensagem será exibida apenas uma vez. Caso queira fazer uma doação para o desenvolvimento do Twine, siga o link na caixa \"Sobre o Twine\".)", + "supportMessage": "Se você ama o Twine, pedimos que o ajude a crescer fazendo uma doação. O Twine é um projeto de código-fonte aberto que será sempre gratuito — e graças à sua ajuda, o Twine poderá continuar crescendo.", + "noThanks": "Não, Obrigado", + "title": "Apoiar o Desenvolvimento do Twine" + }, + "appPrefs": { + "codeEditorFont": "Fonte do Editor de Código", + "codeEditorFontScale": "Tamanho da Fonte do Editor de Código", + "dialogWidth": "Largura da Caixa de Texto", + "dialogWidths": { + "default": "Padrão", + "wider": "Larga", + "widest": "Mais Larga" + }, + "editorCursorBlinks": "Cursor Piscante nos Editores", + "fontExplanation": "Alterar a fonte aqui afetará apenas o editor do Twine. A fonte usada na história não será alterada.", + "language": "Idioma", + "passageEditorFont": "Fonte do Editor de Passagem", + "passageEditorFontScale": "Tamanho da Fonte do Editor de Passagem", + "themeLight": "Claro", + "themeDark": "Escuro", + "themeSystem": "Sistema", + "theme": "Tema", + "title": "Preferências" + }, + "passageEdit": { + "editorCrashed": "Algo deu errado com o editor. Tente fechá-lo e editar a passagem novamente.", + "passageTextEditorLabel": "Texto da Passagem", + "passageTextPlaceholder": "Escreva o texto da passagem aqui. Para ligá-lo a outra passagem, coloque dois colchetes ao redor do nome, [[desta maneira]].", + "setAsStart": "Começar a História Aqui", + "size": "Tamanho", + "sizeLarge": "Grande", + "sizeSmall": "Pequena", + "sizeTall": "Alta", + "sizeWide": "Larga" + }, + "passageTags": { + "noTags": "Ainda não foram adicionadas etiquetas a passagens nesta história.", + "title": "Etiquetas das Passagens" + }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "O formato {{storyFormatName}} {{storyFormatVersion}} será adicionado.", + "alreadyAdded": "O formato {{storyFormatName}} {{storyFormatVersion}} já foi adicionado. ", + "fetchError": "O formato de história nesse endereço não pôde ser alcançado ({{errorMessage}}).", + "invalidUrl": "Insira um URL válido.", + "prompt": "Para adicionar um formato de história, insira o seu endereço abaixo." + }, + "filterButton": { + "all": "Todos os Formatos de História", + "current": "Formatos de História Atuais", + "user": "Formatos de História do Usuário" + }, + "noneVisible": "Não há formatos de história que correspondam aos critérios escolhidos." + }, + "storyImport": { + "deselectAll": "Desmarcar Tudo", + "filePrompt": "Para importar histórias ao Twine, carregue um arquivo, história publicada ou arquivo Twee abaixo.", + "importDifferentFile": "Importar um Outro Arquivo", + "importSelected": "Importar os Arquivos Marcados", + "importThisStory": "Importar Esta História", + "noStoriesInFile": "Parece que não há histórias Twine no arquivo carregado. Por favor, escolha outro arquivo.", + "storiesPrompt": "Escolha as histórias que deseja importar:", + "title": "Importar Histórias", + "willReplaceExisting": "Uma história da biblioteca com o mesmo título será substituída." + }, + "storyDetails": { + "storyFormatExplanation": "O que é um formato de história?", + "snapToGrid": "Alinhar à Grade", + "stats": { + "brokenLinks": "Ligações Cortadas", + "characters": "Caracteres", + "title": "Detalhes da História", + "ifid": "O IFID desta história é {{ifid}}.", + "ifidExplanation": "O que é um IFID?", + "lastUpdate": "Esta história foi alterada pela última vez em {{date}}.", + "links": "Ligações", + "passages": "Passagens", + "words": "Palavras" + } + }, + "storyJavaScript": { + "editorLabel": "JavaScript da História", + "title": "JavaScript da História", + "explanation": "O código JavaScript inserido aqui será reproduzido assim que a história for aberta num navegador." + }, + "storySearch": { + "title": "Encontrar e Substituir", + "find": "Encontrar", + "includePassageNames": "Incluir os Nomes das Passagens", + "matchCase": "Sensível a Maiúsculas/Minúsculas", + "matchCount": "{{count}} passagem correspondente", + "matchCount_plural": "{{count}} passagens correspondentes", + "noMatches": "Nenhuma passagem correspondente", + "replaceAll": "Substituir em Todas as Passagens", + "replaceWith": "Substituir por", + "useRegexes": "Usar Expressões Regulares" + }, + "storyStylesheet": { + "editorLabel": "Folha de Estilos da História", + "title": "Folha de Estilos da História", + "explanation": "Qualquer CSS inserido aqui irá sobrescrever a aparência padrão da sua história." + }, + "storyTags": { + "noTags": "Ainda não foram adicionadas etiquetas às suas histórias.", + "title": "Etiquetas de História" + } + }, "electron": { "backupsDirectoryName": "Cópias de Segurança", "errors": { @@ -295,102 +309,79 @@ } }, "routes": { - "storyEdit": { - "toolbar": { - "findAndReplace": "Encontrar e Substituir", - "goTo": "Ir Para", - "javaScript": "JavaScript", - "passageTags": "Etiquetas das Passagens", - "snapToGrid": "Alinhar à Grade", - "startStoryHere": "Começar a História Aqui", - "stylesheet": "Folha de Estilos", - "testFromHere": "Testar a Partir Daqui" - }, - "topBar": { - "editJavaScript": "Editar o JavaScript da História", - "editStylesheet": "Editar a Folha de Estilos da História", - "findAndReplace": "Encontrar e Substituir", - "passageTags": "Editar as Etiquetas das Passagens", - "proofStory": "Ver uma Cópia para Revisão", - "publishToFile": "Publicar para Arquivo", - "selectAllPassages": "Marcar Todas as Passagens" - }, - "zoomButtons": { - "legend": "Zoom", - "storyStructure": "Mostrar Apenas a Estrutura da História", - "passageNames": "Mostrar Apenas os Títulos das Passagens", - "passageNamesAndExcerpts": "Mostrar os Títulos das Passagens e os Excertos" - } - }, - "storyFormatList": { - "noneVisible": "Não há formatos de história que correspondam aos critérios escolhidos.", - "show": "Mostrar...", - "title": { - "all": "Todos os Formatos de História", - "current": "Formatos de História Atuais", - "user": "Formatos de História do Usuário" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "O formato {{storyFormatName}} {{storyFormatVersion}} será adicionado.", - "alreadyAdded": "O formato {{storyFormatName}} {{storyFormatVersion}} já foi adicionado. ", - "fetchError": "O formato de história nesse endereço não pôde ser alcançado ({{errorMessage}}).", - "invalidUrl": "Insira um URL válido.", - "prompt": "Para adicionar um formato de história, insira o seu endereço abaixo." - }, - "disableFormatExtensions": "Desligar as Extensões do Editor", - "enableFormatExtensions": "Ligar as Extensões do Editor", - "useAsDefaultFormat": "Usar como Formato Padrão", - "useAsProofingFormat": "Usar para Revisar Histórias" - }, - "storyFormatExplanation": "Os formatos de história controlam a aparência e o comportamento das histórias durante o jogo." - }, - "storyList": { - "library": "Biblioteca", - "noStories": "Não há histórias salvas no Twine no momento. Para começar, você pode criar uma nova história ou importar uma já existente de um arquivo.", - "taggedTitleCount": "1 História Etiquetada", - "taggedTitleCount_0": "Não Há Histórias Etiquetadas", - "taggedTitleCount_plural": "{{count}} Histórias Etiquetadas", - "titleCount": "1 História", - "titleCount_0": "Não há Histórias", - "titleCount_plural": "{{count}} Histórias", - "titleGeneric": "Histórias", - "toolbar": { - "archive": "Arquivar", - "createStoryButton": { - "prompt": "Que título deseja dar à sua história? Você poderá mudá-lo mais tarde.", - "emptyName": "Insira um título.", - "nameConflict": "Já existe uma história com esse título." - }, - "deleteStoryButton": { - "warning": { - "electron": "Tem certeza que deseja apagar a história “{{storyName}}”? Ela será movida para a lixeira.", - "web": "Tem certeza que deseja apagar a história “{{storyName}}”? Ela será excluída permanentemente. Você não poderá reverter esta decisão." - } - }, - "showAllStories": "Mostrar Todas as Histórias", - "showTags": "Mostrar Etiquetas", - "sort": "Ordenar por", - "sortByDate": "Última Atualização", - "sortByName": "Título", - "storyTags": "Etiquetas de História" - } - }, - "welcome": { - "autosave": "

Agora você tem uma pasta chamada Twine na sua pasta Documentos. Dentro dela há uma pasta intitulada Stories, onde as suas histórias serão salvas. O Twine salva a história à medida que você trabalha, então não se preocupe em salvá-la. Você pode a qualquer momento abrir a pasta onde as suas histórias são salvas em Mostrar Biblioteca, no menu do Twine.

Como o Twine está sempre salvando o seu trabalho, os arquivos da sua biblioteca de histórias estarão bloqueados e não poderão ser editados enquanto o Twine estiver aberto.

Caso queira abrir um arquivo de uma história Twine que você recebeu de alguém, será possível importá-lo para a sua biblioteca em Importar de Ficheiro, na lista de histórias.

", - "autosaveTitle": "O seu trabalho é salvo automaticamente.", - "browserStorage": "

Isso significa que você não precisa criar uma conta para usar o Twine 2, e tudo o que criar não ficará salvo em um servidor sabe-se lá onde—fica sempre aqui no seu navegador.

Mas não se esqueça de duas coisas muito importantes. Como o seu trabalho fica salvo apenas no seu navegador, tudo será perdido se você limpar os dados salvos! Não queremos isso. Lembre-se de usar frequentemente o botão Arquivar. Você também pode publicar histórias individuais como arquivos, usando o menu em cada história na lista de histórias. Tanto os arquivos como os arquivos de história podem ser importados de volta para o Twine a qualquer momento.

Segundo, qualquer pessoa com acesso a este navegador poderá ver as suas histórias e alterá-las. Portanto, caso tenha um irmão enxerido em casa, talvez seja uma boa ideia criar um perfil separado, só seu.

", - "browserStorageTitle": "O seu trabalho fica salvo somente no seu navegador", - "done": "

Agradecemos a leitura - divirta-se com o Twine.

", - "doneTitle": "Pronto!", - "gotoStoryList": "Ir para a Lista de Histórias", - "greeting": "

O Twine é uma ferramenta de código-fonte aberto para contar histórias interativas e não lineares. Tem algumas coisas que você precisa saber antes de começar.

", - "greetingTitle": "Olá!", - "tellMeMore": "Quero Saber Mais", - "help": "

Se esta é a sua primeira vez no Twine, deixe-me dar as boas-vindas! O Livro de Receitas do Twine é um ótimo recurso para aprender a usar o Twine. Se você nunca usou o Twine, esse é um bom lugar para começar.

", - "helpTitle": "É a sua primeira vez aqui?" - } - }, + "storyEdit": { + "toolbar": { + "findAndReplace": "Encontrar e Substituir", + "goTo": "Ir Para", + "javaScript": "JavaScript", + "passageTags": "Etiquetas das Passagens", + "snapToGrid": "Alinhar à Grade", + "startStoryHere": "Começar a História Aqui", + "stylesheet": "Folha de Estilos", + "testFromHere": "Testar a Partir Daqui" + }, + "topBar": { + "editJavaScript": "Editar o JavaScript da História", + "editStylesheet": "Editar a Folha de Estilos da História", + "findAndReplace": "Encontrar e Substituir", + "passageTags": "Editar as Etiquetas das Passagens", + "proofStory": "Ver uma Cópia para Revisão", + "publishToFile": "Publicar para Arquivo", + "selectAllPassages": "Marcar Todas as Passagens" + }, + "zoomButtons": { + "legend": "Zoom", + "storyStructure": "Mostrar Apenas a Estrutura da História", + "passageNames": "Mostrar Apenas os Títulos das Passagens", + "passageNamesAndExcerpts": "Mostrar os Títulos das Passagens e os Excertos" + } + }, + "storyList": { + "library": "Biblioteca", + "noStories": "Não há histórias salvas no Twine no momento. Para começar, você pode criar uma nova história ou importar uma já existente de um arquivo.", + "taggedTitleCount": "1 História Etiquetada", + "taggedTitleCount_0": "Não Há Histórias Etiquetadas", + "taggedTitleCount_plural": "{{count}} Histórias Etiquetadas", + "titleCount": "1 História", + "titleCount_0": "Não há Histórias", + "titleCount_plural": "{{count}} Histórias", + "titleGeneric": "Histórias", + "toolbar": { + "archive": "Arquivar", + "createStoryButton": { + "prompt": "Que título deseja dar à sua história? Você poderá mudá-lo mais tarde.", + "emptyName": "Insira um título.", + "nameConflict": "Já existe uma história com esse título." + }, + "deleteStoryButton": { + "warning": { + "electron": "Tem certeza que deseja apagar a história “{{storyName}}”? Ela será movida para a lixeira.", + "web": "Tem certeza que deseja apagar a história “{{storyName}}”? Ela será excluída permanentemente. Você não poderá reverter esta decisão." + } + }, + "showAllStories": "Mostrar Todas as Histórias", + "showTags": "Mostrar Etiquetas", + "sort": "Ordenar por", + "sortByDate": "Última Atualização", + "sortByName": "Título", + "storyTags": "Etiquetas de História" + } + }, + "welcome": { + "autosave": "

Agora você tem uma pasta chamada Twine na sua pasta Documentos. Dentro dela há uma pasta intitulada Stories, onde as suas histórias serão salvas. O Twine salva a história à medida que você trabalha, então não se preocupe em salvá-la. Você pode a qualquer momento abrir a pasta onde as suas histórias são salvas em Mostrar Biblioteca, no menu do Twine.

Como o Twine está sempre salvando o seu trabalho, os arquivos da sua biblioteca de histórias estarão bloqueados e não poderão ser editados enquanto o Twine estiver aberto.

Caso queira abrir um arquivo de uma história Twine que você recebeu de alguém, será possível importá-lo para a sua biblioteca em Importar de Ficheiro, na lista de histórias.

", + "autosaveTitle": "O seu trabalho é salvo automaticamente.", + "browserStorage": "

Isso significa que você não precisa criar uma conta para usar o Twine 2, e tudo o que criar não ficará salvo em um servidor sabe-se lá onde—fica sempre aqui no seu navegador.

Mas não se esqueça de duas coisas muito importantes. Como o seu trabalho fica salvo apenas no seu navegador, tudo será perdido se você limpar os dados salvos! Não queremos isso. Lembre-se de usar frequentemente o botão Arquivar. Você também pode publicar histórias individuais como arquivos, usando o menu em cada história na lista de histórias. Tanto os arquivos como os arquivos de história podem ser importados de volta para o Twine a qualquer momento.

Segundo, qualquer pessoa com acesso a este navegador poderá ver as suas histórias e alterá-las. Portanto, caso tenha um irmão enxerido em casa, talvez seja uma boa ideia criar um perfil separado, só seu.

", + "browserStorageTitle": "O seu trabalho fica salvo somente no seu navegador", + "done": "

Agradecemos a leitura - divirta-se com o Twine.

", + "doneTitle": "Pronto!", + "gotoStoryList": "Ir para a Lista de Histórias", + "greeting": "

O Twine é uma ferramenta de código-fonte aberto para contar histórias interativas e não lineares. Tem algumas coisas que você precisa saber antes de começar.

", + "greetingTitle": "Olá!", + "tellMeMore": "Quero Saber Mais", + "help": "

Se esta é a sua primeira vez no Twine, deixe-me dar as boas-vindas! O Livro de Receitas do Twine é um ótimo recurso para aprender a usar o Twine. Se você nunca usou o Twine, esse é um bom lugar para começar.

", + "helpTitle": "É a sua primeira vez aqui?" + } + }, "routeActions": { "app": { "aboutApp": "Sobre o Twine", diff --git a/public/locales/pt-PT.json b/public/locales/pt-PT.json index 2bf899847..c55301777 100644 --- a/public/locales/pt-PT.json +++ b/public/locales/pt-PT.json @@ -118,11 +118,10 @@ "passageCount": "1 passagem", "passageCount_plural": "{{count}} passagens" }, - "storyFormatCard": { + "storyFormatItem": { "author": "de {{author}}", "builtIn": "Criado em", "defaultFormat": "Usado por Defeito", - "editorExtensionsDisabled": "Extensões do Editor Desligadas", "license": "Licença: {{license}}", "loadingFormat": "A carregar o formato de história...", "loadError": "O formato de história não pôde ser carregado. Deu este erro: ({{errorMessage}}).", @@ -166,7 +165,7 @@ "default": "Padrão", "wider": "Larga", "widest": "Mais Larga" - }, + }, "editorCursorBlinks": "O Cursor Pisca nos Editores", "fontExplanation": "Alterar a fonte aqui, afeta apenas o editor do Twine. A fonte usada na história não será alterada.", "language": "Língua", @@ -193,6 +192,21 @@ "noTags": "Ainda não foram adicionadas etiquetas a passagens nesta história.", "title": "Etiquetas das Passagens" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "O formato {{storyFormatName}} {{storyFormatVersion}} vai ser acrescentado.", + "alreadyAdded": "O formato {{storyFormatName}} {{storyFormatVersion}} já foi acrescentado. ", + "fetchError": "O formato de história no endereço apresentado não pôde ser descarregado: ({{errorMessage}}).", + "invalidUrl": "Introduz um URL válido.", + "prompt": "Para acrescentares um formato de história, introduz o seu endereço em baixo." + }, + "filterButton": { + "all": "Todos os Formatos de História", + "current": "Formatos de História Disponíveis", + "user": "Formatos de História Adicionados pelo Utilizador" + }, + "noneVisible": "Não há formatos de história que correspondam aos critérios escolhidos." + }, "storyImport": { "deselectAll": "Desmarcar Tudo", "filePrompt": "Para importar histórias para o Twine, carrega, em baixo, um ficheiro de arquivo, um ficheiro de uma história publicada ou um ficheiro no formato Twee.", @@ -298,7 +312,7 @@ "storyEdit": { "toolbar": { "findAndReplace": "Encontrar e Substituir", - "goTo": "Ir Para", + "goTo": "Ir Para", "javaScript": "JavaScript", "passageTags": "Etiquetas das Passagens", "snapToGrid": "Alinhar à Grelha", @@ -316,35 +330,12 @@ "selectAllPassages": "Marcar Todas as Passagens" }, "zoomButtons": { - "legend": "Ampliação", + "legend": "Ampliação", "storyStructure": "Mostrar apenas a Estrutura da História", "passageNames": "Mostrar apenas os Títulos das Passagens", "passageNamesAndExcerpts": "Mostrar os Títulos das Passagens e os Excertos" } }, - "storyFormatList": { - "noneVisible": "Não há formatos de história que correspondam aos critérios escolhidos.", - "show": "Mostrar...", - "title": { - "all": "Todos os Formatos de História", - "current": "Formatos de História Disponíveis", - "user": "Formatos de História Adicionados pelo Utilizador" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "O formato {{storyFormatName}} {{storyFormatVersion}} vai ser acrescentado.", - "alreadyAdded": "O formato {{storyFormatName}} {{storyFormatVersion}} já foi acrescentado. ", - "fetchError": "O formato de história no endereço apresentado não pôde ser descarregado: ({{errorMessage}}).", - "invalidUrl": "Introduz um URL válido.", - "prompt": "Para acrescentares um formato de história, introduz o seu endereço em baixo." - }, - "disableFormatExtensions": "Desligar as Extensões do Editor", - "enableFormatExtensions": "Ligar as Extensões do Editor", - "useAsDefaultFormat": "Usar como Formato por Defeito", - "useAsProofingFormat": "Usar para a Revisão das Histórias" - }, - "storyFormatExplanation": "Os formatos de história controlam o aspeto visual e o comportamento das histórias durante o jogo." - }, "storyList": { "library": "Biblioteca", "noStories": "Não há histórias gravadas no Twine neste momento. Para começares, podes criar uma nova história ou importar uma de um ficheiro.", diff --git a/public/locales/ru.json b/public/locales/ru.json index b52f84378..b867dcf99 100644 --- a/public/locales/ru.json +++ b/public/locales/ru.json @@ -33,7 +33,7 @@ "renameStoryButton": {"emptyName": "Пожалуйста, введите имя."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -72,10 +72,6 @@ "publishToFile": "Опубликовать в файл" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Формат истории управляет внешним видом и поведением истории во время игры." - }, "storyImport": {}, "storyList": { "noStories": "Сейчас у вас нет сохранённых историй в Twine. Для начала, вы можете создать новую историю или импортировать уже существующую из файла.", diff --git a/public/locales/sl.json b/public/locales/sl.json index f4897c6c4..0ec06ec72 100644 --- a/public/locales/sl.json +++ b/public/locales/sl.json @@ -31,7 +31,7 @@ "renameStoryButton": {"emptyName": "Prosim, vnesite ime."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -67,10 +67,6 @@ "publishToFile": "Izdaj v datoteko" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Zgodbeni formati nadzorujejo videz in obnašanje zgodb med predvajanjem." - }, "storyImport": {}, "storyList": { "noStories": "Trenutno v Twineu ni shranjenih nobenih zgodb. Lahko ali ustvarite novo zgodbo ali uvozite že obstoječo iz datoteke.", diff --git a/public/locales/sv.json b/public/locales/sv.json index 604b3007b..43cf98eae 100644 --- a/public/locales/sv.json +++ b/public/locales/sv.json @@ -33,7 +33,7 @@ "renameStoryButton": {"emptyName": "Var snäll och skriv ett namn."}, "safariWarningCard": {}, "storyCard": {}, - "storyFormatCard": {}, + "storyFormatItem": {}, "storyFormatSelect": {}, "tagEditor": {} }, @@ -72,10 +72,6 @@ "publishToFile": "Publicera till fil" } }, - "storyFormatList": { - "title": {}, - "storyFormatExplanation": "Historieformat kontrollerar utseendet och uppförandet hos historierna under spelet." - }, "storyImport": {}, "storyList": { "noStories": "Det finns inga historier sparade i Twine just nu. För att komma igång kan du antingen skapa en ny historia eller importera en existerande från en fil.", diff --git a/public/locales/tr.json b/public/locales/tr.json index b9c1bf883..a0c000491 100644 --- a/public/locales/tr.json +++ b/public/locales/tr.json @@ -117,11 +117,10 @@ "passageCount": "1 Bölüm", "passageCount_plural": "{{count}} Bölüm" }, - "storyFormatCard": { + "storyFormatItem": { "author": "{{author}} tarafından", "builtIn": "Dahili", "defaultFormat": "Varsayılan biçim.", - "editorExtensionsDisabled": "Düzenleyici Eklentileri Kapalı", "license": "Lisans: {{license}}", "loadingFormat": "Bu öykü biçimi yükleniyor...", "loadError": "Bu öykü biçimi yüklenemedi. ({{errorMessage}})", @@ -218,7 +217,22 @@ "words": "Sözcük" } }, - "storyInfo": { "stats": {"title": "Öykü İstatistikleri"}}, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "{{storyFormatName}} {{storyFormatVersion}} eklenecek.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} zaten ekli.", + "fetchError": "Bu adresteki öykü biçimi elde edilemedi. ({{errorMessage}})", + "invalidUrl": "Lütfen geçerli bir URL girin.", + "prompt": "Öykü biçimi eklemek için biçimin internet adresini aşağı girin." + }, + "filterButton": { + "all": "Tüm Öylü Biçimleri", + "current": "Güncel Öykü Biçimleri", + "user": "Kendinizce Eklenen Öykü Biçimleri" + }, + "noneVisible": "Seçtiğiniz kriterlere uygun öykü biçimi bulunmamaktadır." + }, + "storyInfo": {"stats": {"title": "Öykü İstatistikleri"}}, "storyJavaScript": { "editorLabel": "Öykü JavaScript'i", "title": "Öykü JavaScript'i", @@ -304,29 +318,6 @@ "passageNamesAndExcerpts": "Bölüm Adlarını ve İçeriğin Kısımlarını Göster" } }, - "storyFormatList": { - "noneVisible": "Seçtiğiniz kriterlere uygun öykü biçimi bulunmamaktadır.", - "show": "Show...", - "title": { - "all": "Tüm Öylü Biçimleri", - "current": "Güncel Öykü Biçimleri", - "user": "Kendinizce Eklenen Öykü Biçimleri" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "{{storyFormatName}} {{storyFormatVersion}} eklenecek.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} zaten ekli.", - "fetchError": "Bu adresteki öykü biçimi elde edilemedi. ({{errorMessage}})", - "invalidUrl": "Lütfen geçerli bir URL girin.", - "prompt": "Öykü biçimi eklemek için biçimin internet adresini aşağı girin." - }, - "disableFormatExtensions": "Düzenleyici Eklentilerini Kapat", - "enableFormatExtensions": "Düzenleyici Eklentilerini Aç", - "useAsDefaultFormat": "Varsayılan Biçim Olarak Kullan", - "useAsProofingFormat": "Öykü İmlası için Kullan" - }, - "storyFormatExplanation": "Öykü biçimleri öykünün okuma sırasında nasıl göründüğünü ve davrandığını belirler." - }, "storyList": { "library": "Kitaplık", "noStories": "Şu an Twine'da kayıtlı hiçbir öykü yok. Başlamak için yeni bir öykü yaratın veya var olan bir öyküyü içe aktarın.", diff --git a/public/locales/uk.json b/public/locales/uk.json index 210292ff4..27c102cbb 100644 --- a/public/locales/uk.json +++ b/public/locales/uk.json @@ -115,11 +115,10 @@ "passageCount_1": "{{count}} параграфи", "passageCount_2": "{{count}} параграфів" }, - "storyFormatCard": { + "storyFormatItem": { "author": "Автор: {{author}}", "builtIn": "Вбудований", "defaultFormat": "Використовується за замовчуванням", - "editorExtensionsDisabled": "Розширення редактора вимкнено", "license": "Ліцензія: {{license}}", "loadingFormat": "Завантаження формату оповідання...", "loadError": "Цей формат оповідання не вийшло завантажити: ({{errorMessage}}).", @@ -191,6 +190,21 @@ "noTags": "У параграфів в цьому оповіданні немає міток.", "title": "Мітки параграфів" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "Буде додано формат {{storyFormatName}} {{storyFormatVersion}}.", + "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} вже було додано.", + "fetchError": "Не вийшло завантажити формат оповідання за цією адресою ({{errorMessage}}).", + "invalidUrl": "Введіть коректний URL.", + "prompt": "Щоб додати формат оповідання, введіть його адресу." + }, + "filterButton": { + "all": "Всі формати оповідань", + "current": "Формати цього оповідання", + "user": "Формати, додані користувачами" + }, + "noneVisible": "Немає форматів оповідання, що підходять під обрані вами критерії." + }, "storyImport": { "deselectAll": "Зняти виділення", "filePrompt": "Ви можете імпортувати оповідання в Twine з файлу архіву або опублікованого оповідання.", @@ -303,29 +317,6 @@ "passageNamesAndExcerpts": "Показати назви параграфів та уривки" } }, - "storyFormatList": { - "noneVisible": "Немає форматів оповідання, що підходять під обрані вами критерії.", - "show": "Показати...", - "title": { - "all": "Всі формати оповідань", - "current": "Формати цього оповідання", - "user": "Формати, додані користувачами" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "Буде додано формат {{storyFormatName}} {{storyFormatVersion}}.", - "alreadyAdded": "{{storyFormatName}} {{storyFormatVersion}} вже було додано.", - "fetchError": "Не вийшло завантажити формат оповідання за цією адресою ({{errorMessage}}).", - "invalidUrl": "Введіть коректний URL.", - "prompt": "Щоб додати формат оповідання, введіть його адресу." - }, - "disableFormatExtensions": "Вимкнути розширення редактора", - "enableFormatExtensions": "Ввімкнути розширення редактора", - "useAsDefaultFormat": "Використовувати як формат за замовчуванням", - "useAsProofingFormat": "Використовувати для вичитки" - }, - "storyFormatExplanation": "Формат оповідання контролює вигляд та поведінку оповідань під час відтворення." - }, "storyList": { "library": "Бібліотека", "noStories": "Зараз в Twine немає оповідань. Ви можете створити нове оповідання або імпортувати вже існуюче з файлу.", diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index 4d3e581f4..9beee7d19 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -118,11 +118,10 @@ "passageCount": "{{count}}个片段", "passageCount_plural": "{{count}} 个片段" }, - "storyFormatCard": { + "storyFormatItem": { "author": "来自 {{author}}", "builtIn": "内置", "defaultFormat": "设为默认", - "editorExtensionsDisabled": "编辑器扩展被禁用", "license": "许可证:{{license}}", "loadingFormat": "载入故事格式中……", "loadError": "故事格式加载失败({{errorMessage}})。", @@ -193,6 +192,21 @@ "noTags": "尚未向故事中的片段添加任何标签。", "title": "片段标签" }, + "storyFormats": { + "addStoryFormatButton": { + "addPreview": "将添加 {{storyFormatName}} {{storyFormatVersion}}。", + "alreadyAdded": "已添加 {{storyFormatName}} {{storyFormatVersion}}。", + "fetchError": "无法读取该位置的故事格式({{errorMessage}})。", + "invalidUrl": "请输入有效的 URL。", + "prompt": "要添加故事格式,请在下方输入地址。" + }, + "filterButton": { + "all": "全部故事格式", + "current": "当前故事格式", + "user": "用户添加的故事格式" + }, + "noneVisible": "没有符合您筛选标准的故事格式。" + }, "storyImport": { "deselectAll": "全不选", "filePrompt": "要向 Twine 导入故事,请先在下方上传一个档案或已发布的故事文件。", @@ -305,29 +319,6 @@ "passageNamesAndExcerpts": "显示片段名称与摘要" } }, - "storyFormatList": { - "noneVisible": "没有符合您筛选标准的故事格式。", - "show": "显示……", - "title": { - "all": "全部故事格式", - "current": "当前故事格式", - "user": "用户添加的故事格式" - }, - "toolbar": { - "addStoryFormatButton": { - "addPreview": "将添加 {{storyFormatName}} {{storyFormatVersion}}。", - "alreadyAdded": "已添加 {{storyFormatName}} {{storyFormatVersion}}。", - "fetchError": "无法读取该位置的故事格式({{errorMessage}})。", - "invalidUrl": "请输入有效的 URL。", - "prompt": "要添加故事格式,请在下方输入地址。" - }, - "disableFormatExtensions": "禁用编辑器扩展", - "enableFormatExtensions": "启用编辑器扩展", - "useAsDefaultFormat": "设为默认格式", - "useAsProofingFormat": "用于校对故事" - }, - "storyFormatExplanation": "故事格式用于控制游戏过程中的故事外观和行为。" - }, "storyList": { "library": "库", "noStories": "在 Twine 中没有保存的故事。您可以创建一个新故事或从文件导入现有的故事。", diff --git a/public/story-formats/chapbook-2.2.0/format.js b/public/story-formats/chapbook-2.2.0/format.js deleted file mode 100644 index 36527eac5..000000000 --- a/public/story-formats/chapbook-2.2.0/format.js +++ /dev/null @@ -1 +0,0 @@ -window.storyFormat({"source":"{{STORY_NAME}}
{{STORY_DATA}}","author":"Chris Klimas","description":"A Twine story format emphasizing ease of authoring, multimedia, and playability on many different types of devices. Visit the guide for more information.","hydrate":"(function(l){\"use strict\";function r(){return{startState(){return{inVarsSection:!1}},token(e,t){if(t.hasVarsSection===void 0){for(let n=1,o=e.lookAhead(1);o&&t.hasVarsSection===void 0;o=e.lookAhead(++n))o===\"--\"&&(t.hasVarsSection=!0,t.inVarsSection=!0);t.hasVarsSection===void 0&&(t.hasVarsSection=!1)}return t.hasVarsSection&&t.inVarsSection&&e.sol()?e.match(/^--$/)?(t.inVarsSection=!1,e.skipToEnd(),\"punctuation\"):e.skipTo(\":\")?(e.next(),\"def\"):(e.skipToEnd(),\"text\"):e.sol()&&e.match(/^\\[[^[].*\\]$/)||e.match(/^\\{.+?\\}/)?\"keyword\":e.match(/^\\[\\[[^\\]]+?\\]\\]/)?\"link\":(e.eatWhile(/[^[{]/)||e.skipToEnd(),\"text\")}}}function c(e){return Object.keys(e).reduce((t,n)=>({...t,[n]:o=>{o.replaceSelection(e[n]),o.focus()}}),{})}function d(e){return Object.keys(e).reduce((t,n)=>({...t,[n]:o=>{const{matcher:i,wrapper:v}=e[n];o.replaceSelections(o.getSelections().map(s=>i.test(s)?s.replace(i,\"$1\"):v(s)),\"around\"),o.focus()}}),{})}const b={...d({boldText:{matcher:/^(?:__|\\*\\*)(.+)(?:__|\\*\\*)$/,wrapper:e=>`**${e}**`},italicText:{matcher:/^(?:_|\\*)(.+)(?:_|\\*)$/,wrapper:e=>`*${e}*`},monospacedText:{matcher:/^`(.+)`$/,wrapper:e=>\"`\"+e+\"`\"},smallCapsText:{matcher:/^~~(.+)~~$/,wrapper:e=>`~~${e}~~`}}),...c({insertAfter:`\n[after 1 second]\nText\n\n[continued]`,insertAppend:`\n[append]\n`,insertBlockquote:`\n
Text
\n`,insertContinue:`\n[continued]\n`,insertBulletedList:`\n- Item\n- Item\n`,insertCss:`\n[CSS]\n.page article {\n color: green;\n}\n\n[continued]\n`,insertCyclingLink:\"{cycling link for: 'variable name', choices: ['choice', 'choice']}\",insertDropdownMenu:\"{dropdown menu for: 'variable name', choices: ['choice', 'choice']}\",insertEmbedAmbientSound:\"{ambient sound: 'sound name'}\",insertEmbedSoundEffect:\"{sound effect: 'sound name'}\",insertEmbedPassage:\"{embed passage: 'Passage name'}\",insertEmbedYouTubeVideo:\"{embed YouTube video: 'URL'}\",insertImageFlickr:\"{embed Flickr image: 'Flickr embed code'}\",insertImageUrl:\"{embed image: 'URL to image'}\",insertImageUnsplash:\"{embed Unsplash image: }\",insertForkList:`\n> Link\n> Link\n`,insertIf:`\n[if condition]\nText\n\n[continue]\n`,insertIfElse:`\n[if condition]\nText\n\n[else]Text\n\n[continued]\n`,insertJs:`\n[JavaScript]\nwrite('Hello from JavaScript');\n\n[continued]\n`,insertNote:`\n[note]\nNote to self\n\n[continued]\n`,insertNumberedList:`\n1. Item\n2. Item\n`,insertPassageLink:\"{link to: 'Passage name', label: 'Label text'}\",insertRestartLink:\"{restart link, label: 'Label text'}\",insertRevealPassageLink:\"{reveal link: 'Label text', passage: 'Passage name'}\",insertRevealTextLink:\"{restart link: 'Label text', text: 'Displayed text'}\",insertSectionBreak:`\n***\n`,insertTextInput:\"{text input for: 'variable name'}\",insertUnless:`\n[unless condition]\nText\n\n[continued]\n`})},m=`\n \n \n \n\n\n\n`,p=`\n \n \n \n \n \n\n\n\n`,u=`\n \n \n \n \n \n\n\n\n`,h=`\n \n \n \n \n \n \n \n \n \n\n\n\n`,k=`\n \n \n \n \n\n\n\n`;function a(e,t){return`data:image/svg+xml;base64,${window.btoa(e.replace(/currentColor/g,t))}`}function g(e,{foregroundColor:t}){const n=e.getDoc().somethingSelected();return[{type:\"menu\",icon:a(p,t),label:\"Style\",items:[{type:\"button\",iconOnly:!0,label:\"Bold\",command:\"boldText\",disabled:!n},{type:\"button\",label:\"Italic\",command:\"italicText\",disabled:!n},{type:\"button\",label:\"Monospaced Text\",command:\"monospacedText\",disabled:!n},{type:\"button\",label:\"Small Caps\",command:\"smallCapsText\",disabled:!n},{type:\"separator\"},{type:\"button\",label:\"Blockquote\",command:\"insertBlockquote\",disabled:n},{type:\"button\",label:\"Bulleted List\",command:\"insertBulletedList\",disabled:n},{type:\"button\",label:\"Fork List\",command:\"insertForkList\",disabled:n},{type:\"button\",label:\"Numbered List\",command:\"insertNumberedList\",disabled:n},{type:\"button\",label:\"Section Break\",command:\"insertSectionBreak\",disabled:n}]},{type:\"menu\",icon:a(k,t),label:\"Link\",disabled:n,items:[{type:\"button\",label:\"Passage Link\",command:\"insertPassageLink\"},{type:\"button\",label:\"Restart Link\",command:\"insertRestartLink\"},{type:\"button\",label:\"Reveal Passage Link\",command:\"insertRevealPassageLink\"},{type:\"button\",label:\"Reveal Text Link\",command:\"insertRevealTextLink\"}]},{type:\"menu\",icon:a(m,t),label:\"Modifiers\",disabled:n,items:[{type:\"button\",label:\"If\",command:\"insertIf\"},{type:\"button\",label:\"If and Else\",command:\"insertIfElse\"},{type:\"button\",label:\"Unless\",command:\"insertUnless\"},{type:\"button\",label:\"Continue\",command:\"insertContinue\"},{type:\"separator\"},{type:\"button\",label:\"After Delay\",command:\"insertAfter\"},{type:\"button\",label:\"Append Text\",command:\"insertAppend\"},{type:\"button\",label:\"Note\",command:\"insertNote\"},{type:\"separator\"},{type:\"button\",label:\"JavaScript\",command:\"insertJs\"},{type:\"button\",label:\"CSS\",command:\"insertCss\"}]},{type:\"menu\",icon:a(u,t),label:\"Embed\",disabled:n,items:[{type:\"button\",label:\"Embed Passage\",command:\"insertEmbedPassage\"},{type:\"button\",label:\"Embed Image from Flickr\",command:\"insertImageFlickr\"},{type:\"button\",label:\"Embed Image from URL\",command:\"insertImageUrl\"},{type:\"button\",label:\"Embed Image from Unsplash\",command:\"insertImageUnsplash\"},{type:\"button\",label:\"Embed Ambient Sound\",command:\"insertEmbedAmbientSound\"},{type:\"button\",label:\"Embed Sound Effect\",command:\"insertEmbedSoundEffect\"},{type:\"button\",label:\"Embed YouTube Video\",command:\"insertEmbedYouTubeVideo\"}]},{type:\"menu\",icon:a(h,t),label:\"Input\",disabled:n,items:[{type:\"button\",label:\"Cycling Link\",command:\"insertCyclingLink\"},{type:\"button\",label:\"Dropdown Menu\",command:\"insertDropdownMenu\"},{type:\"button\",label:\"Text Input\",command:\"insertTextInput\"}]}]}function f(e){const t=[/\\{embed\\s+passage\\s*:\\s*['\"](.+?)['\"]\\s*}/g,/\\{link\\s+to\\s*:\\s*['\"](.+?)['\"]\\s*\\}/g,/\\{reveal\\s+link.+passage\\s*:\\s*['\"](.+?)['\"].*\\}/g],n=[];for(const o of t){let i;for(;i=o.exec(e);)n.push(i[1])}return n}l.editorExtensions={twine:{\"^2.4.0-beta2\":{codeMirror:{commands:b,mode:r,toolbar:g},references:{parsePassageText:f}}}}})(this);\n","image":"logo.svg","name":"Chapbook","proofing":false,"version":"2.2.0"}) \ No newline at end of file diff --git a/public/story-formats/chapbook-2.3.0/format.js b/public/story-formats/chapbook-2.3.0/format.js new file mode 100644 index 000000000..dfc5bd814 --- /dev/null +++ b/public/story-formats/chapbook-2.3.0/format.js @@ -0,0 +1 @@ +window.storyFormat({"source":"{{STORY_NAME}}
{{STORY_DATA}}","author":"Chris Klimas","description":"A Twine story format emphasizing ease of authoring, multimedia, and playability on many different types of devices. Visit the guide for more information.","hydrate":"(function(l){\"use strict\";function r(){return{startState(){return{inVarsSection:!1}},token(e,t){if(t.hasVarsSection===void 0){for(let n=1,o=e.lookAhead(1);o&&t.hasVarsSection===void 0;o=e.lookAhead(++n))o===\"--\"&&(t.hasVarsSection=!0,t.inVarsSection=!0);t.hasVarsSection===void 0&&(t.hasVarsSection=!1)}return t.hasVarsSection&&t.inVarsSection&&e.sol()?e.match(/^--$/)?(t.inVarsSection=!1,e.skipToEnd(),\"punctuation\"):e.skipTo(\":\")?(e.next(),\"def\"):(e.skipToEnd(),\"text\"):e.sol()&&e.match(/^\\[[^[].*\\]$/)||e.match(/^\\{.+?\\}/)?\"keyword\":e.match(/^\\[\\[[^\\]]+?\\]\\]/)?\"link\":(e.eatWhile(/[^[{]/)||e.skipToEnd(),\"text\")}}}function c(e){return Object.keys(e).reduce((t,n)=>({...t,[n]:o=>{o.replaceSelection(e[n]),o.focus()}}),{})}function d(e){return Object.keys(e).reduce((t,n)=>({...t,[n]:o=>{const{matcher:i,wrapper:v}=e[n];o.replaceSelections(o.getSelections().map(s=>i.test(s)?s.replace(i,\"$1\"):v(s)),\"around\"),o.focus()}}),{})}const b={...d({boldText:{matcher:/^(?:__|\\*\\*)(.+)(?:__|\\*\\*)$/,wrapper:e=>`**${e}**`},italicText:{matcher:/^(?:_|\\*)(.+)(?:_|\\*)$/,wrapper:e=>`*${e}*`},monospacedText:{matcher:/^`(.+)`$/,wrapper:e=>\"`\"+e+\"`\"},smallCapsText:{matcher:/^~~(.+)~~$/,wrapper:e=>`~~${e}~~`}}),...c({insertAfter:`\n[after 1 second]\nText\n\n[continued]`,insertAppend:`\n[append]\n`,insertBlockquote:`\n
Text
\n`,insertContinue:`\n[continued]\n`,insertBulletedList:`\n- Item\n- Item\n`,insertCss:`\n[CSS]\n.page article {\n color: green;\n}\n\n[continued]\n`,insertCyclingLink:\"{cycling link for: 'variable name', choices: ['choice', 'choice']}\",insertDropdownMenu:\"{dropdown menu for: 'variable name', choices: ['choice', 'choice']}\",insertEmbedAmbientSound:\"{ambient sound: 'sound name'}\",insertEmbedSoundEffect:\"{sound effect: 'sound name'}\",insertEmbedPassage:\"{embed passage: 'Passage name'}\",insertEmbedYouTubeVideo:\"{embed YouTube video: 'URL'}\",insertImageFlickr:\"{embed Flickr image: 'Flickr embed code'}\",insertImageUrl:\"{embed image: 'URL to image'}\",insertImageUnsplash:\"{embed Unsplash image: }\",insertForkList:`\n> Link\n> Link\n`,insertIf:`\n[if condition]\nText\n\n[continue]\n`,insertIfElse:`\n[if condition]\nText\n\n[else]Text\n\n[continued]\n`,insertJs:`\n[JavaScript]\nwrite('Hello from JavaScript');\n\n[continued]\n`,insertNote:`\n[note]\nNote to self\n\n[continued]\n`,insertNumberedList:`\n1. Item\n2. Item\n`,insertPassageLink:\"{link to: 'Passage name', label: 'Label text'}\",insertRestartLink:\"{restart link, label: 'Label text'}\",insertRevealPassageLink:\"{reveal link: 'Label text', passage: 'Passage name'}\",insertRevealTextLink:\"{reveal link: 'Label text', text: 'Displayed text'}\",insertSectionBreak:`\n***\n`,insertTextInput:\"{text input for: 'variable name'}\",insertUnless:`\n[unless condition]\nText\n\n[continued]\n`})},m=`\n \n \n \n\n\n\n`,p=`\n \n \n \n \n \n\n\n\n`,u=`\n \n \n \n \n \n\n\n\n`,h=`\n \n \n \n \n \n \n \n \n \n\n\n\n`,k=`\n \n \n \n \n\n\n\n`;function a(e,t){return`data:image/svg+xml;base64,${window.btoa(e.replace(/currentColor/g,t))}`}function g(e,{foregroundColor:t}){const n=e.getDoc().somethingSelected();return[{type:\"menu\",icon:a(p,t),label:\"Style\",items:[{type:\"button\",iconOnly:!0,label:\"Bold\",command:\"boldText\",disabled:!n},{type:\"button\",label:\"Italic\",command:\"italicText\",disabled:!n},{type:\"button\",label:\"Monospaced Text\",command:\"monospacedText\",disabled:!n},{type:\"button\",label:\"Small Caps\",command:\"smallCapsText\",disabled:!n},{type:\"separator\"},{type:\"button\",label:\"Blockquote\",command:\"insertBlockquote\",disabled:n},{type:\"button\",label:\"Bulleted List\",command:\"insertBulletedList\",disabled:n},{type:\"button\",label:\"Fork List\",command:\"insertForkList\",disabled:n},{type:\"button\",label:\"Numbered List\",command:\"insertNumberedList\",disabled:n},{type:\"button\",label:\"Section Break\",command:\"insertSectionBreak\",disabled:n}]},{type:\"menu\",icon:a(k,t),label:\"Link\",disabled:n,items:[{type:\"button\",label:\"Passage Link\",command:\"insertPassageLink\"},{type:\"button\",label:\"Restart Link\",command:\"insertRestartLink\"},{type:\"button\",label:\"Reveal Passage Link\",command:\"insertRevealPassageLink\"},{type:\"button\",label:\"Reveal Text Link\",command:\"insertRevealTextLink\"}]},{type:\"menu\",icon:a(m,t),label:\"Modifiers\",disabled:n,items:[{type:\"button\",label:\"If\",command:\"insertIf\"},{type:\"button\",label:\"If and Else\",command:\"insertIfElse\"},{type:\"button\",label:\"Unless\",command:\"insertUnless\"},{type:\"button\",label:\"Continue\",command:\"insertContinue\"},{type:\"separator\"},{type:\"button\",label:\"After Delay\",command:\"insertAfter\"},{type:\"button\",label:\"Append Text\",command:\"insertAppend\"},{type:\"button\",label:\"Note\",command:\"insertNote\"},{type:\"separator\"},{type:\"button\",label:\"JavaScript\",command:\"insertJs\"},{type:\"button\",label:\"CSS\",command:\"insertCss\"}]},{type:\"menu\",icon:a(u,t),label:\"Embed\",disabled:n,items:[{type:\"button\",label:\"Embed Passage\",command:\"insertEmbedPassage\"},{type:\"button\",label:\"Embed Image from Flickr\",command:\"insertImageFlickr\"},{type:\"button\",label:\"Embed Image from URL\",command:\"insertImageUrl\"},{type:\"button\",label:\"Embed Image from Unsplash\",command:\"insertImageUnsplash\"},{type:\"button\",label:\"Embed Ambient Sound\",command:\"insertEmbedAmbientSound\"},{type:\"button\",label:\"Embed Sound Effect\",command:\"insertEmbedSoundEffect\"},{type:\"button\",label:\"Embed YouTube Video\",command:\"insertEmbedYouTubeVideo\"}]},{type:\"menu\",icon:a(h,t),label:\"Input\",disabled:n,items:[{type:\"button\",label:\"Cycling Link\",command:\"insertCyclingLink\"},{type:\"button\",label:\"Dropdown Menu\",command:\"insertDropdownMenu\"},{type:\"button\",label:\"Text Input\",command:\"insertTextInput\"}]}]}function f(e){const t=[/\\{embed\\s+passage\\s*:\\s*['\"](.+?)['\"]\\s*}/g,/\\{link\\s+to\\s*:\\s*['\"](.+?)['\"][^}]*\\}/g,/\\{reveal\\s+link.+passage\\s*:\\s*['\"](.+?)['\"].*\\}/g],n=[];for(const o of t){let i;for(;i=o.exec(e);)n.push(i[1])}return n}l.editorExtensions={twine:{\"^2.4.0-beta2\":{codeMirror:{commands:b,mode:r,toolbar:g},references:{parsePassageText:f}}}}})(this);\n","image":"logo.svg","name":"Chapbook","proofing":false,"version":"2.3.0"}) \ No newline at end of file diff --git a/public/story-formats/chapbook-2.2.0/logo.svg b/public/story-formats/chapbook-2.3.0/logo.svg similarity index 100% rename from public/story-formats/chapbook-2.2.0/logo.svg rename to public/story-formats/chapbook-2.3.0/logo.svg diff --git a/src/app.tsx b/src/app.tsx index fafff6818..55ec8c06c 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -10,23 +10,20 @@ import {StateLoader} from './store/state-loader'; import {ThemeSetter} from './store/theme-setter'; import './styles/typography.css'; -export const App: React.FC = () => { - console.log('what'); - return ( - - - - - - - - }> - - - - - - - - ); -}; +export const App: React.FC = () => ( + + + + + + + + }> + + + + + + + +); diff --git a/src/components/container/dialog-card/dialog-card.css b/src/components/container/dialog-card/dialog-card.css index 14c55c86e..3889a7e5e 100644 --- a/src/components/container/dialog-card/dialog-card.css +++ b/src/components/container/dialog-card/dialog-card.css @@ -47,17 +47,7 @@ font-weight: normal; } -.dialog-card .card-body { - display: flex; - flex-direction: column; - padding: 0; -} - -.dialog-card .card-body h2 { - font: bold 100% var(--font-system); -} - .dialog-card .card-content { - min-height: 0; + flex: 1 1 content; overflow: auto; } \ No newline at end of file diff --git a/src/components/container/dialog-card/dialog-editor.tsx b/src/components/container/dialog-card/dialog-editor.tsx index 47b72c2df..bbe472b0a 100644 --- a/src/components/container/dialog-card/dialog-editor.tsx +++ b/src/components/container/dialog-card/dialog-editor.tsx @@ -1,6 +1,12 @@ import * as React from 'react'; import './dialog-editor.css'; -export const DialogEditor: React.FC = props => ( -
{props.children}
+export type DialogEditorProps = React.ComponentPropsWithoutRef<'div'>; + +export const DialogEditor = React.forwardRef( + (props, ref) => ( +
+ {props.children} +
+ ) ); diff --git a/src/components/control/__tests__/prompt-button.test.tsx b/src/components/control/__tests__/prompt-button.test.tsx index df5bee39d..b4a5ebd26 100644 --- a/src/components/control/__tests__/prompt-button.test.tsx +++ b/src/components/control/__tests__/prompt-button.test.tsx @@ -124,23 +124,42 @@ describe('', () => { expect(onChange).toHaveBeenCalledTimes(1); }); - it('prevents submission if the validate prop blocks it', async () => { - const onSubmit = jest.fn(); + it.each(['change', 'submit'])( + 'prevents submission if the validate prop blocks it when the validateOn prop is "%s"', + async validateOn => { + const onSubmit = jest.fn(); - renderComponent({ - onSubmit, - validate, - prompt: 'test-prompt', - submitLabel: 'test-submit', - value: 'bad' - }); - fireEvent.click(screen.getByRole('button')); - await waitFor(() => - expect(screen.getByRole('button', {name: 'test-submit'})).toBeDisabled() - ); - fireEvent.submit(screen.getByRole('textbox', {name: 'test-prompt'})); - expect(onSubmit).not.toHaveBeenCalled(); - }); + renderComponent({ + onSubmit, + validate, + validateOn: validateOn as 'change' | 'submit', + prompt: 'test-prompt', + submitLabel: 'test-submit', + value: 'bad' + }); + fireEvent.click(screen.getByRole('button')); + + if (validateOn === 'change') { + // The button won't disable itself right away if we're validating on submit. + + await waitFor(() => + expect( + screen.getByRole('button', {name: 'test-submit'}) + ).toBeDisabled() + ); + } + fireEvent.submit(screen.getByRole('textbox', {name: 'test-prompt'})); + + if (validateOn === 'submit') { + // ... but should now be disabled if we're validating on submit. + + expect( + screen.getByRole('button', {name: 'test-submit'}) + ).toBeDisabled(); + } + expect(onSubmit).not.toHaveBeenCalled(); + } + ); it('is accessible', async () => { const {container} = renderComponent(); diff --git a/src/components/control/code-area/__mocks__/code-area.tsx b/src/components/control/code-area/__mocks__/code-area.tsx index 3aa229534..f289f0fd9 100644 --- a/src/components/control/code-area/__mocks__/code-area.tsx +++ b/src/components/control/code-area/__mocks__/code-area.tsx @@ -3,19 +3,14 @@ import {CodeAreaProps} from '../code-area'; export const CodeArea: React.FC = props => { function handleOnChange(e: React.ChangeEvent) { - props.onBeforeChange( - { - historySize: () => ({ - redo: 0, - undo: 0 - }), - mockCodeMirrorEditor: true - } as any, - { - mockCodeMirrorChange: true - } as any, - e.target.value - ); + props.onChangeEditor?.({ + historySize: () => ({ + redo: 0, + undo: 0 + }), + mockCodeMirrorEditor: true + } as any); + props.onChangeText(e.target.value); } return ( @@ -24,6 +19,7 @@ export const CodeArea: React.FC = props => { data-font-family={props.fontFamily} data-font-scale={props.fontScale} data-options={JSON.stringify(props.options)} + data-use-code-mirror={props.useCodeMirror} >