diff --git a/src/addons/addons-l10n-settings/es.json b/src/addons/addons-l10n-settings/es.json index 614033d9a..cb0ff270a 100644 --- a/src/addons/addons-l10n-settings/es.json +++ b/src/addons/addons-l10n-settings/es.json @@ -71,6 +71,12 @@ "onion-skinning/@settings-select-layering-front": "Frente", "onion-skinning/@settings-select-mode-merge": "Combinar imagenes", "onion-skinning/@settings-select-mode-tint": "Teñir color", + "default-costume-editor-color/@description": "Cambia los colores predeterminados y el tamaño del borde utilizados por el editor de disfraces.", + "default-costume-editor-color/@name": "Color predeterminado personalizable en el editor de disfraces", + "default-costume-editor-color/@settings-name-fill": "Color de relleno predeterminado", + "default-costume-editor-color/@settings-name-persistence": "Usar color anterior en vez del predeterminado al cambiar de herramienta", + "default-costume-editor-color/@settings-name-stroke": "Color de borde predeterminado", + "default-costume-editor-color/@settings-name-strokeSize": "Tamaño de borde predeterminado", "bitmap-copy/@description": "Le permite copiar una imagen bitmap en el editor de disfraces al portapapeles de su sistema, para que la puedas pegar en otros sitios web o programas.", "bitmap-copy/@info-norightclick": "\"Click derecho → copiar\" no está soportado. Debe presionar Ctrl+C cuando la imagen bitmap este seleccionada.", "bitmap-copy/@name": "Copiar imágenes bitmap", diff --git a/src/addons/addons-l10n-settings/pl.json b/src/addons/addons-l10n-settings/pl.json index c06c5d816..7d6b527c6 100644 --- a/src/addons/addons-l10n-settings/pl.json +++ b/src/addons/addons-l10n-settings/pl.json @@ -70,10 +70,10 @@ "onion-skinning/@settings-select-layering-front": "Przód", "onion-skinning/@settings-select-mode-merge": "Łącz obrazy", "onion-skinning/@settings-select-mode-tint": "Kolor odcienia", - "default-costume-editor-color/@description": "Zmienia domyślne kolory oraz wielkość zarysu w edytorze kostiumów.", + "default-costume-editor-color/@description": "Zmienia domyślne parametry narzędzi w edytorze kostiumów.", "default-costume-editor-color/@name": "Domyślne kolory w edytorze kostiumów", "default-costume-editor-color/@settings-name-fill": "Domyślny kolor wypełnienia", - "default-costume-editor-color/@settings-name-persistence": "Używaj poprzedniego koloru zamiast domyślnego, po zamianie narzędzi.", + "default-costume-editor-color/@settings-name-persistence": "Używaj poprzedniego koloru zamiast domyślnego po zamianie narzędzia.", "default-costume-editor-color/@settings-name-stroke": "Domyślny kolor zarysu", "default-costume-editor-color/@settings-name-strokeSize": "Domyślna wielkość zarysu", "bitmap-copy/@description": "Pozwala ci kopiować zdjęcie z edytora kostiumu do schowka w systemie, abyś mógł wkleić do innych programów.", @@ -105,13 +105,13 @@ "editor-theme3/@description": "Edytuj kolory bloków dla każdej kategorii w edytorze.", "editor-theme3/@name": "Niestandardowe kolory bloków", "editor-theme3/@preset-description-black": "Zmienia tło bloków na czarne", - "editor-theme3/@preset-description-dark": "Ciemne wersje domyślnych kolorów", - "editor-theme3/@preset-description-original": "Oryginalne kolory bloków z Scratch 2.0", - "editor-theme3/@preset-description-tweaks": "Zdarzenia, Kontrola, i Moje bloki w kolorach z 2.0", + "editor-theme3/@preset-description-dark": "Ciemne wersje podstawowych kolorów", + "editor-theme3/@preset-description-original": "Oryginalne kolory bloków z wersji Scratch 2.0", + "editor-theme3/@preset-description-tweaks": "Kategorie \"zdarzenia\", \"kontrola\", i \"moje bloki\" są kolorach z wersji 2.0", "editor-theme3/@preset-name-black": "Czarny", "editor-theme3/@preset-name-dark": "Ciemny", "editor-theme3/@preset-name-original": "Kolory 2.0", - "editor-theme3/@preset-name-tweaks": "Ulepszenia 3.0 ", + "editor-theme3/@preset-name-tweaks": "Poprawki 3.0 ", "editor-theme3/@settings-name-Pen-color": "rozszerzenia", "editor-theme3/@settings-name-control-color": "kontrola", "editor-theme3/@settings-name-custom-color": "niestandardowy", @@ -121,27 +121,27 @@ "editor-theme3/@settings-name-input-color": "Wejścia bloków", "editor-theme3/@settings-name-looks-color": "wygląd", "editor-theme3/@settings-name-motion-color": "ruch", - "editor-theme3/@settings-name-operators-color": "operatory", + "editor-theme3/@settings-name-operators-color": "wyrażenia", "editor-theme3/@settings-name-sensing-color": "czujniki", - "editor-theme3/@settings-name-sounds-color": "dźwięki", + "editor-theme3/@settings-name-sounds-color": "dźwięk", "editor-theme3/@settings-name-text": "Kolor tekstu", "editor-theme3/@settings-select-text-black": "Czarny", "editor-theme3/@settings-select-text-colorOnBlack": "Kolorowe na czarnym tle", "editor-theme3/@settings-select-text-colorOnWhite": "Kolorowe na białym tle", "editor-theme3/@settings-select-text-white": "Biały", - "editor-theme3/@update": "Nowe ustawienie pozwalające zmieniać kolory bloków na forach.", - "custom-block-text/@description": "Zmienia nasycenie tekstu na blokach, opcjonalnie dodaje cień.", + "editor-theme3/@update": "Nowe ustawienie pozwalające zmieniać kolory bloków na forum.", + "custom-block-text/@description": "Zmienia nasycenie tekstu na blokach, opcjonalnie dodaje cień obok nich.", "custom-block-text/@name": "Konfigurowalny styl tekstu bloków", "custom-block-text/@settings-name-bold": "Pogrubiony tekst", "custom-block-text/@settings-name-shadow": "Cień pod tekstem", - "editor-colored-context-menus/@description": "Tworzy kolorowe menu kontekstowe, klikając prawym przyciskiem myszy na blok.", - "editor-colored-context-menus/@name": "Kolorowe menu kontekstowe", + "editor-colored-context-menus/@description": "Kiedy klikniesz prawym klawiszem na blok, wyświetlone menu ma kolorowe tło.", + "editor-colored-context-menus/@name": "Kolorowe menu zawartości", "editor-stage-left/@description": "Przesuwa scenę na lewą stronę edytora.", - "editor-stage-left/@name": "Wyświetl scenę po lewej stronie", + "editor-stage-left/@name": "Przenieś scenę na lewą stronę", "variable-manager/@description": "Dodaje zakładkę obok \"dźwięków\" w edytorze żeby łatwo aktualizować zmienne i listy", "variable-manager/@name": "Menedżer zmiennych", - "search-sprites/@description": "Dodaje pole wyszukiwania w liście duszków do szukania ich po nazwie.", - "search-sprites/@name": "Szukaj duszków po nazwie...", + "search-sprites/@description": "Dodaje pole wyszukiwania w liście duszków, za pomocą którego możesz wyszukać duszka po jego nazwie.", + "search-sprites/@name": "Szukaj duszków po nazwie", "gamepad/@description": "Interakcja z projektami za pomocą kontrolera/gamepada używając USB lub Bluetooth.", "gamepad/@name": "Wsparcie dla padów", "gamepad/@settings-name-hide": "Ukryj przycisk ustawień, gdy system nie wykryje żadnych kontrolerów ", @@ -245,38 +245,38 @@ "disable-stage-drag-select/@description": "Usuwa możliwość przeciągania duszków w trybie edycji, z wyjątkiem tych których tryb jest ustawiony na \"Przeciągalne\".", "disable-stage-drag-select/@info-shift": "Przytrzymaj klawisz Shift podczas przeciągania duszka, aby przesunąć go, nawet jeśli nie jest ustawiony jako możliwy do przeciągania.", "disable-stage-drag-select/@name": "Blokada przesuwania duszków w edytorze", - "move-to-top-bottom/@description": "Dodaje przycisk, aby przesunąć kostium lub dźwięk na górę lub na dół listy. Wcześniej część narzędzi developerskich. ", - "move-to-top-bottom/@name": "Przenieś kostium do góry albo dołu", - "disable-paste-offset/@description": "Wklej skopiowane kostiumy w jej oryginalnej pozycji, zamiast je delikatnie przesuwać.", - "disable-paste-offset/@name": "Nie przesuwaj wklejonych obiektów.", - "block-duplicate/@description": "Szybko zduplikuj skrypt, przeciągając go, trzymając klawisz Alt. Przytrzymaj również klawisz Ctrl, aby zduplikować tylko pojedynczy blok zamiast całego stosu dołączonego pod nim.", + "move-to-top-bottom/@description": "Dodaje przycisk, który przesuwa kostium lub dźwięk na górę lub na dół listy. Wcześniej część narzędzi developerskich. ", + "move-to-top-bottom/@name": "Przenieś kostium do góry albo do dołu", + "disable-paste-offset/@description": "Wklej skopiowane kostiumy w jej oryginalnej pozycji, zamiast delikatnie je przesuwać.", + "disable-paste-offset/@name": "Nie przesuwaj wklejonych obiektów", + "block-duplicate/@description": "Szybko zduplikuj skrypt, przeciągając go, trzymając klawisz Alt. Możesz także przytrzymać również klawisz Ctrl, aby zduplikować tylko pojedynczy blok zamiast całego stosu dołączonego pod nim.", "block-duplicate/@info-mac": "W systemie macOS zamiast klawisza Alt należy użyć klawisza Option, a zamiast klawisza Control - klawisza Command.", "block-duplicate/@name": "Duplikuj skrypt przyciskiem Alt", "swap-local-global/@description": "Dodaje więcej opcji w czasie zmieniania nazwy zmiennej lub listy. Możesz zmienić czy dana zmienna jest dla \"Wszystkich duszków\" lub \"Tylko dla tego duszka\" oraz czy jest zapisywana w chmurze.", - "swap-local-global/@name": "Przełącz zmienną między ustawieniami \"Dla wszystkich duszków\" lub \"Tylko dla tego duszka\"", - "editor-comment-previews/@description": "Pozwala podejrzeć zawartość komentarza najeżdżając na połączone bloki. Możesz zobaczyć komentarze, które zachodzą za ekran. Dodatkowo możesz zmieścić duże komentarze w małej przestrzeni oraz więcej!", - "editor-comment-previews/@name": "Podgląd komentarzy w edytorze", + "swap-local-global/@name": "Przełącz zmienną między ustawieniami \"Dla wszystkich duszków\" na \"Tylko dla tego duszka\"", + "editor-comment-previews/@description": "Pozwala podejrzeć zawartość komentarza najeżdżając na połączone bloki. Możesz nawet zobaczyć komentarze, które zachodzą za ekran. Dodatkowo możesz zmieścić duże komentarze w małej przestrzeni oraz więcej!", + "editor-comment-previews/@name": "Podgląd komentarzy", "editor-comment-previews/@settings-name-delay": "Czas opóźnienia", "editor-comment-previews/@settings-name-follow-mouse": "Podążaj za myszą", "editor-comment-previews/@settings-name-hover-view": "Najedź na nakładające się komentarze, aby zobaczyć ich podgląd.", "editor-comment-previews/@settings-name-hover-view-block": "Najedź na bloki, aby poznać ich definicje i komentarze.", "editor-comment-previews/@settings-name-hover-view-procedure": "Najedź na \"moje bloki\", aby poznać ich definicje i komentarze.", - "editor-comment-previews/@settings-name-reduce-animation": "Zmniejsz animacje", + "editor-comment-previews/@settings-name-reduce-animation": "Zmniejsz ilość animacji", "editor-comment-previews/@settings-name-reduce-transparency": "Zmniejsz przezroczystość", "editor-comment-previews/@settings-select-delay-long": "Długie", - "editor-comment-previews/@settings-select-delay-none": "Puste", + "editor-comment-previews/@settings-select-delay-none": "Brak", "editor-comment-previews/@settings-select-delay-short": "Krótkie", "columns/@description": "Dzieli menu kategorii bloków na dwie kolumny i przenosi je na górę palety bloków, tak jak w Scratch 2.0.", - "columns/@name": "Dwu-kolumnowe menu kategorii", + "columns/@name": "Menu kategorii podzielone na 2 kolumny", "script-snap/@description": "Po przesunięciu kodu, zostanie on \"przyczepiony\" do kropek tła w edytorze.", "script-snap/@name": "Przyczep fragmenty kodu do wirtualnej siatki", "script-snap/@preset-name-default": "Domyślny", "script-snap/@preset-name-half-block": "Połowa bloku", "script-snap/@preset-name-whole-block": "Cały blok kodu", "script-snap/@settings-name-grid": "Wielkość siatki (px)", - "fullscreen/@description": "Naprawia niektóre niepożądane efekty w trybie pełnoekranowym odtwarzacza projektu. Otwiera go w trybie pełnoekranowym przeglądarki oraz ukrywa pasek z zieloną flagą.", + "fullscreen/@description": "Naprawia niektóre niepożądane efekty w trybie pełnoekranowym. Otwiera projekt w trybie pełnoekranowym przeglądarki oraz ukrywa pasek z zieloną flagą.", "fullscreen/@info-hideToolbarNotice": "Jeśli zdecydujesz się ukryć pasek narzędzi, pamiętaj, że możesz użyć klawisza Esc, aby wyjść z trybu pełnoekranowego do odtwarzacza projektów. ", - "fullscreen/@name": "Ulepszony pełny ekran", + "fullscreen/@name": "Polepszony pełny ekran", "fullscreen/@settings-name-browserFullscreen": "Otwórz pełny ekran, gdy użytkownik jest w trybie pełnoekranowym przeglądarki", "fullscreen/@settings-name-hideToolbar": "Ukryj pasek narzędzi w pełnym ekranie", "editor-stepping/@description": "Dodaje kolorowe podkreślenie do bloków, których kod wykonuje się w danym momencie.", diff --git a/src/addons/addons-l10n-settings/ru.json b/src/addons/addons-l10n-settings/ru.json index 3c5793ccb..8f09a342c 100644 --- a/src/addons/addons-l10n-settings/ru.json +++ b/src/addons/addons-l10n-settings/ru.json @@ -32,7 +32,11 @@ "drag-drop/@name": "Перетаскивание файлов", "drag-drop/@settings-name-use-hd-upload": "Использовать HD загрузку", "debugger/@name": "Отладчик", + "debugger/@settings-name-log_broadcasts": "Логировать сообщения", "debugger/@settings-name-log_clear_greenflag": "Очистить логи, когда зелёный флаг нажат", + "debugger/@settings-name-log_clone_create": "Логировать создания клонов", + "debugger/@settings-name-log_failed_clone_creation": "Логировать, когда макс. кол-во клонов превышено", + "debugger/@settings-name-log_greenflag": "Логировать нажатия на зелёный флажок", "debugger/@update": "Новые вкладки \"Потоки\" и \"Производительность\" в окне отладки.", "pause/@description": "Добавляет кнопку паузы рядом с зелёным флагом.", "pause/@name": "Кнопка паузы", @@ -130,6 +134,7 @@ "search-sprites/@name": "Поиск спрайтов по имени", "gamepad/@description": "Взаимодействовать с проектами используя USB или Bluetooth контроллер/геймпад.", "gamepad/@name": "Поддержка геймпада", + "gamepad/@settings-name-hide": "Спрятать кнопку настроек, если контроллеров не обнаружено", "editor-sounds/@description": "Воспроизводит звуковые эффекты при соединении или удалении блоков.", "editor-sounds/@name": "Звуковые эффекты редактора", "folders/@info-notice-folders-are-public": "Пользователи, у которых включена эта функция, смогут видеть папки в вашем проекте. Все остальные будут видеть списки спрайтов в обычном режиме (без папок).", @@ -215,6 +220,7 @@ "hide-delete-button/@settings-name-sprites": "Спрайты", "no-script-bumping/@description": "Позволяет скриптам двигаться и изменяться без их перекрытия для перемещения вокруг.", "no-script-bumping/@name": "Не делать автоматически пробел между перекрывающими скриптами", + "disable-stage-drag-select/@description": "Убирает возможность перетаскивать спрайты вокруг сцены в редакторе кроме тех, которые явно заданы как перетаскиваемые.", "disable-stage-drag-select/@info-shift": "Удерживайте Shift при перетаскивании спрайта, чтобы перемещать его как обычно, даже если он не настроен как перетаскиваемый.", "disable-stage-drag-select/@name": "Неперетаскиваемые спрайты в редакторе", "move-to-top-bottom/@description": "Добавляет кнопку к контекстному меню ПКМ для перемещения костюма в самый верх или в самый низ списка. Первоначально было частью инструментов разработчика.", diff --git a/src/addons/addons-l10n/de.json b/src/addons/addons-l10n/de.json index 30acb6fc5..4cbbb4283 100644 --- a/src/addons/addons-l10n/de.json +++ b/src/addons/addons-l10n/de.json @@ -141,11 +141,13 @@ "folders/create-folder": "neuer Ordner", "folders/name-not-allowed": "Ungültiger Ordnername", "folders/name-prompt": "Ordnername:", + "folders/name-prompt-title": "Neuer Ordner", "folders/open-folder": "Offen", "folders/remove-folder": "Ordner entfernen", "folders/remove-from-folder": "vom Ordner entfernen", "folders/rename-folder": "Ordner umbenennen", "folders/rename-folder-prompt": "Ordner umbenennen in:", + "folders/rename-folder-prompt-title": "Ordner umbenennen", "block-switching/control_forever": "wiederhole fortlaufend", "block-switching/control_if": "falls, dann", "block-switching/control_if_else": "falls, dann... sonst", diff --git a/src/addons/addons-l10n/en.json b/src/addons/addons-l10n/en.json index 5850341e8..ac73b1dc9 100644 --- a/src/addons/addons-l10n/en.json +++ b/src/addons/addons-l10n/en.json @@ -147,11 +147,13 @@ "folders/create-folder": "create folder", "folders/name-not-allowed": "Invalid folder name", "folders/name-prompt": "Name of folder:", + "folders/name-prompt-title": "Create Folder", "folders/open-folder": "Opened", "folders/remove-folder": "remove folder", "folders/remove-from-folder": "remove from folder", "folders/rename-folder": "rename folder", "folders/rename-folder-prompt": "Rename folder to:", + "folders/rename-folder-prompt-title": "Rename Folder", "block-switching/control_forever": "forever", "block-switching/control_if": "if", "block-switching/control_if_else": "if... else", diff --git a/src/addons/addons-l10n/es.json b/src/addons/addons-l10n/es.json index 7896583ba..2b8f23cd0 100644 --- a/src/addons/addons-l10n/es.json +++ b/src/addons/addons-l10n/es.json @@ -32,7 +32,7 @@ "editor-devtools/make-space": "Hacer Espacio", "editor-devtools/middleclick": "Saltar a", "editor-devtools/middleclick-desc": "Usando el botón del medio del ratón o Shift + Click en una variable o bloque propio, puedes saltar a su definición o abrirlo en la barra de búsqueda interactiva.", - "editor-devtools/orphaned": "{count, plural, one {Herramientas de desarrollador: ¿borrar 1 bloque reportero huérfano?} other {Herramientas de desarrollador: ¿borrar # bloques reporteros huérfanos?} }", + "editor-devtools/orphaned": "{count, plural, one {Herramientas de desarrollador: ¿borrar 1 bloque reportero huérfano?} many {Herramientas de desarrollador: ¿borrar # bloques reporteros huérfanos?} other {Herramientas de desarrollador: ¿borrar # bloques reporteros huérfanos?} }", "editor-devtools/paste": "Pegar", "editor-devtools/paste-from-clipboard": "Pegar del Portapapeles", "editor-devtools/paste-from-clipboard-desc": "Pega del portapapeles, pero lo pega donde está su cursor del ratón para que puedas posicionarlo (en vez de ponerlo donde lo copió, como la implementación actual de Scratch).", @@ -43,8 +43,8 @@ "editor-devtools/swap-variable-desc": "Haga click derecho a una variable en la parte de código para esta nueva opción. Te permite intercambiar todas las referencias a esta variable en el objeto actual a otra variable. Esto es bueno para cuando cometió un error y quiere cambiar todas las referencias a una variable a otra o tiene que cambiar \"para todos los objetos\" a \"solo para este objeto\". Esta opción no quitará la variable antigua y no afectará las variables de otros objetos.", "editor-devtools/top": "enviar arriba", "editor-devtools/tutorials": "Tutoriales", - "editor-devtools/unused-list": "{count, plural, one {Herramientas de desarrollador: ¿borrar 1 lista local sin usar? Esta es:\n} other {Herramientas de desarrollador: ¿borrar # listas locales sin usar? Estas son:\n} }", - "editor-devtools/unused-var": "{count, plural, one {Herramientas de desarrollador: ¿borrar 1 variable local sin usar? Estas son:\n} other {Herramientas de desarrollador: ¿borrar # variables locales sin usar? Estas son:\n} }", + "editor-devtools/unused-list": "{count, plural, one {Herramientas de desarrollador: ¿borrar 1 lista local sin usar? Esta es:\n} many {Herramientas de desarrollador: ¿borrar # listas locales sin usar? Estas son:\n} other {Herramientas de desarrollador: ¿borrar # listas locales sin usar? Estas son:\n} }", + "editor-devtools/unused-var": "{count, plural, one {Herramientas de desarrollador: ¿borrar 1 variable local sin usar? Estas son:\n} many {Herramientas de desarrollador: ¿borrar # variables locales sin usar? Estas son:\n} other {Herramientas de desarrollador: ¿borrar # variables locales sin usar? Estas son:\n} }", "editor-devtools/var-not-exist": "Esa variable no existe..", "editor-devtools/youtube": "Tutoriales en YouTube", "editor-searchable-dropdowns/createBroadcast": "Crear mensaje \"{name}\"", @@ -94,7 +94,7 @@ "pause/pause": "Pausar", "color-picker/hex": "color hex", "remove-sprite-confirm/confirm": "¿Quieres borrar este objeto?", - "block-count/blocks": "{num, plural, one {1 bloques} other {# bloques}}", + "block-count/blocks": "{num, plural, one {1 bloques} many {# bloques} other {# bloques}}", "onion-skinning/behind": "Detrás", "onion-skinning/front": "Frente", "onion-skinning/layering": "Método de superposición", @@ -136,11 +136,13 @@ "folders/create-folder": "crear carpeta", "folders/name-not-allowed": "Nombre de carpeta inválido", "folders/name-prompt": "Nombre de carpeta:", + "folders/name-prompt-title": "Crear Carpeta", "folders/open-folder": "Abierta", "folders/remove-folder": "quitar carpeta", "folders/remove-from-folder": "quitar de carpeta", "folders/rename-folder": "renombrar carpeta", "folders/rename-folder-prompt": "Renombrar carpeta a:", + "folders/rename-folder-prompt-title": "Renombrar Carpeta", "block-switching/control_forever": "por siempre", "block-switching/control_if": "si", "block-switching/control_if_else": "si... si no", diff --git a/src/addons/addons-l10n/fr.json b/src/addons/addons-l10n/fr.json index 821376082..ca007fb34 100644 --- a/src/addons/addons-l10n/fr.json +++ b/src/addons/addons-l10n/fr.json @@ -32,7 +32,7 @@ "editor-devtools/make-space": "Espacer", "editor-devtools/middleclick": "Sauter Vers", "editor-devtools/middleclick-desc": "Utiliser le clic mollete sur une variable ou un bloc personnalisé vous permet d'aller directement à sa définition ou l'ouvre dans la barre de recherche interactive.", - "editor-devtools/orphaned": "{count, plural, one {Outils développeur : Supprimer 1 bloc de valeur seul ?} other {Outils développeur : Supprimer les # blocs de valeur seuls ?} }", + "editor-devtools/orphaned": "{count, plural, one {Outils développeur : Supprimer 1 bloc de valeur seul ?} many {Outils développeur : Supprimer les # blocs de valeur seuls ?} other {Outils développeur : Supprimer les # blocs de valeur seuls ?} }", "editor-devtools/paste": "Coller", "editor-devtools/paste-from-clipboard": "Coller à partir du presse-papiers", "editor-devtools/paste-from-clipboard-desc": "Colle depuis le presse-papiers, mais surtout le colle où votre souris se situe pour pouvoir le placer (meilleur que le placer là où vous l'avez copié, système actuellement implémenté dans Scratch)", @@ -43,8 +43,8 @@ "editor-devtools/swap-variable-desc": "Faites un clic droit sur une variable dans votre code pour cette nouvelle option. Elle vous permet d'échanger toutes les références à cette variable dans le sprite actuel d'un seul coup vers une autre variable. C'est idéal lorsque vous avez fait une erreur et que vous voulez échanger d'une variable à une autre ou que vous voulez changer de \"pour tous les sprites\" à \"pour ce sprite uniquement\". Cette option ne supprimera pas l'ancienne variable et n'affectera aucun autre variable du sprite.", "editor-devtools/top": "envoyer en haut", "editor-devtools/tutorials": "Tutoriels", - "editor-devtools/unused-list": "{count, plural, one {Outils développeur : Supprimer 1 liste locale inutilisée ? La voici :\n} other {Outils développeur : Supprimer # listes locales inutilisées ? Les voici :\n} }", - "editor-devtools/unused-var": "{count, plural, one {Outils développeur : Supprimer 1 variable locale inutilisée ? Là voilà :\n} other {Outils développeur : Supprimer les # variables locales inutilisées ? Les voici :\n} }", + "editor-devtools/unused-list": "{count, plural, one {Outils développeur : Supprimer 1 liste locale inutilisée ? La voici :\n} many {Outils développeur : Supprimer # listes locales inutilisées ? Les voici :\n} other {Outils développeur : Supprimer # listes locales inutilisées ? Les voici :\n} }", + "editor-devtools/unused-var": "{count, plural, one {Outils développeur : Supprimer 1 variable locale inutilisée ? Là voilà :\n} many {Outils développeur : Supprimer les # variables locales inutilisées ? Les voici :\n} other {Outils développeur : Supprimer les # variables locales inutilisées ? Les voici :\n} }", "editor-devtools/var-not-exist": "Cette variable n'existe pas...", "editor-devtools/youtube": "Tutoriels YouTube", "editor-searchable-dropdowns/createBroadcast": "Créer le message \"{name}\"", @@ -99,7 +99,7 @@ "clones/clones": "clones : {cloneCount}", "color-picker/hex": "couleur hexa", "remove-sprite-confirm/confirm": "Voulez-vous supprimer le sprite ?", - "block-count/blocks": "{num, plural, one {1 bloc} other {# blocs}}", + "block-count/blocks": "{num, plural, one {1 bloc} many {# blocs} other {# blocs}}", "onion-skinning/behind": "Derrière", "onion-skinning/front": "Devant", "onion-skinning/layering": "Calques", @@ -142,11 +142,13 @@ "folders/create-folder": "créer un dossier", "folders/name-not-allowed": "Nom de dossier invalide", "folders/name-prompt": "Nom du dossier :", + "folders/name-prompt-title": "Créer un dossier", "folders/open-folder": "Ouvert", "folders/remove-folder": "supprimer le dossier", "folders/remove-from-folder": "supprimer du dossier", "folders/rename-folder": "renommer le dossier", "folders/rename-folder-prompt": "Renommer le dossier en :", + "folders/rename-folder-prompt-title": "Renommer le dossier", "block-switching/control_forever": "répéter indéfiniment", "block-switching/control_if": "si", "block-switching/control_if_else": "si... sinon", diff --git a/src/addons/addons-l10n/it.json b/src/addons/addons-l10n/it.json index c89f758d8..535195ccd 100644 --- a/src/addons/addons-l10n/it.json +++ b/src/addons/addons-l10n/it.json @@ -32,7 +32,7 @@ "editor-devtools/make-space": "Fai Spazio", "editor-devtools/middleclick": "Vai a", "editor-devtools/middleclick-desc": "L'uso del pulsante centrale del mouse o di Shift+Click su una variabile o su un blocco personalizzato permette di passare alla sua definizione o di aprirlo nella barra di ricerca interattiva.", - "editor-devtools/orphaned": "{count, plural, one {Strumenti per sviluppatori: Rimuovere 1 blocco monitor non collegato agli script?} other {Strumenti per sviluppatori: Rimuovere # blocchi monitor non collegati agli script?} }", + "editor-devtools/orphaned": "{count, plural, one {Strumenti per sviluppatori: Rimuovere 1 blocco monitor non collegato agli script?} many {Strumenti per sviluppatori: Rimuovere # blocchi monitor non collegati agli script?} other {Strumenti per sviluppatori: Rimuovere # blocchi monitor non collegati agli script?} }", "editor-devtools/paste": "Incolla", "editor-devtools/paste-from-clipboard": "Incolla dagli Appunti", "editor-devtools/paste-from-clipboard-desc": "Incolla dagli appunti nel punto in cui si trova il cursore del mouse in modo che tu possa posizionare i blocchi in quel punto (invece di posizionarli nel punto da cui li hai copiati, come accade normalmente in Scratch).", @@ -43,8 +43,8 @@ "editor-devtools/swap-variable-desc": "Clic destro su una variabile nei tuoi script. Ti permette di sostituire tutti i riferimenti a questa variabile nello sprite attuale con un'altra variabile. Questo è utile per quando fai un errore e vuoi passare da una variabile a un'altra o se hai bisogno di passare da 'Per tutti gli sprite' a 'Solo per questo sprite' o viceversa. La variabile vecchia non verrà rimossa.", "editor-devtools/top": "porta in prima posizione", "editor-devtools/tutorials": "Tutorial", - "editor-devtools/unused-list": "{count, plural, one {Strumenti per sviluppatori: Rimuovere 1 lista locale inutilizzata? Eccola qui:\n} other {Strumenti per sviluppatori: Rimuovere # liste locali inutilizzate? Eccole qui:\n} }", - "editor-devtools/unused-var": "{count, plural, one {Strumenti per sviluppatori: Rimuovere 1 variabile locale inutilizzata? Eccola qui:\n} other {Strumenti per sviluppatori: Rimuovere # variabili locali inutilizzate? Eccole qui:\n} }", + "editor-devtools/unused-list": "{count, plural, one {Strumenti per sviluppatori: Rimuovere 1 lista locale inutilizzata? Eccola qui:\n} many {Strumenti per sviluppatori: Rimuovere # liste locali inutilizzate? Eccole qui:\n} other {Strumenti per sviluppatori: Rimuovere # liste locali inutilizzate? Eccole qui:\n} }", + "editor-devtools/unused-var": "{count, plural, one {Strumenti per sviluppatori: Rimuovere 1 variabile locale inutilizzata? Eccola qui:\n} many {Strumenti per sviluppatori: Rimuovere # variabili locali inutilizzate? Eccole qui:\n} other {Strumenti per sviluppatori: Rimuovere # variabili locali inutilizzate? Eccole qui:\n} }", "editor-devtools/var-not-exist": "Questa variabile non esiste...", "editor-devtools/variables": "variabili", "editor-devtools/youtube": "Tutorial YouTube", @@ -98,7 +98,7 @@ "clones/clones": "cloni: {cloneCount}", "color-picker/hex": "colore esadecimale", "remove-sprite-confirm/confirm": "Vuoi cancellare lo sprite?", - "block-count/blocks": "{num, plural, one {1 blocco} other {# blocchi}}", + "block-count/blocks": "{num, plural, one {1 blocco} many {# blocchi} other {# blocchi}}", "onion-skinning/behind": "Secondo piano", "onion-skinning/front": "Primo piano", "onion-skinning/layering": "Livelli", @@ -143,11 +143,13 @@ "folders/create-folder": "crea cartella", "folders/name-not-allowed": "Nome cartella non valido", "folders/name-prompt": "Nome della cartella:", + "folders/name-prompt-title": "Crea Cartella", "folders/open-folder": "Aperto", "folders/remove-folder": "rimuovi cartella", "folders/remove-from-folder": "rimuovi dalla cartella", "folders/rename-folder": "rinomina cartella", "folders/rename-folder-prompt": "Rinomina cartella come:", + "folders/rename-folder-prompt-title": "Rinomina Cartella", "block-switching/control_forever": "per sempre", "block-switching/control_if": "se allora", "block-switching/control_if_else": "se allora... altrimenti", diff --git a/src/addons/addons-l10n/ja.json b/src/addons/addons-l10n/ja.json index 885b06d3f..fa373ecd2 100644 --- a/src/addons/addons-l10n/ja.json +++ b/src/addons/addons-l10n/ja.json @@ -146,11 +146,13 @@ "folders/create-folder": "フォルダーを作成", "folders/name-not-allowed": "フォルダー名は無効です", "folders/name-prompt": "フォルダー名:", + "folders/name-prompt-title": "フォルダーを作成", "folders/open-folder": "表示中", "folders/remove-folder": "フォルダーを削除", "folders/remove-from-folder": "フォルダーから出す", "folders/rename-folder": "フォルダーを改名", "folders/rename-folder-prompt": "フォルダーの改名先:", + "folders/rename-folder-prompt-title": "フォルダーを改名", "block-switching/control_forever": "ずっと", "block-switching/control_if": "もし", "block-switching/control_if_else": "もし... でなければ", diff --git a/src/addons/addons-l10n/nl.json b/src/addons/addons-l10n/nl.json index 438e902fc..3c6b5ac87 100644 --- a/src/addons/addons-l10n/nl.json +++ b/src/addons/addons-l10n/nl.json @@ -137,11 +137,13 @@ "folders/create-folder": "map aanmaken", "folders/name-not-allowed": "Ongeldige mapnaam", "folders/name-prompt": "Naam van map:", + "folders/name-prompt-title": "Map Aanmaken", "folders/open-folder": "Geopend", "folders/remove-folder": "map verwijderen", "folders/remove-from-folder": "verwijder uit map", "folders/rename-folder": "map hernoemen", "folders/rename-folder-prompt": "Hernoem map naar:", + "folders/rename-folder-prompt-title": "Map Hernoemen", "block-switching/control_forever": "herhaal", "block-switching/control_if": "als", "block-switching/control_if_else": "als... anders", diff --git a/src/addons/addons-l10n/pl.json b/src/addons/addons-l10n/pl.json index 818ba4a84..eedc54fe5 100644 --- a/src/addons/addons-l10n/pl.json +++ b/src/addons/addons-l10n/pl.json @@ -99,7 +99,7 @@ "clones/clones": "klony:{cloneCount}", "color-picker/hex": "hex kolor", "remove-sprite-confirm/confirm": "Czy chcesz usunąć duszka?", - "block-count/blocks": "{num, plural, one {1 blok} few {# bloków} many {# bloków} other {# bloków}}", + "block-count/blocks": "{num, plural, one {1 blok} few {# bloki} many {# bloków} other {# bloków}}", "onion-skinning/behind": "Tył", "onion-skinning/front": "Przód", "onion-skinning/layering": "Warstwowanie", @@ -118,7 +118,7 @@ "variable-manager/for-this-sprite": "Zmienne dla tego duszka", "variable-manager/search": "Szukaj", "variable-manager/variables": "Zmienne", - "search-sprites/placeholder": "Przeszukaj duszki...", + "search-sprites/placeholder": "Szukaj duszków...", "gamepad/axes-a-b": "Osie {a} i {b}", "gamepad/axis-arrows": "Przyciski Strzałek", "gamepad/axis-cursor": "Kursor", @@ -144,11 +144,13 @@ "folders/create-folder": "stwórz folder", "folders/name-not-allowed": "Nieprawidłowa nazwa folderu", "folders/name-prompt": "Nazwa folderu:", + "folders/name-prompt-title": "Stwórz folder", "folders/open-folder": "Otwarte", "folders/remove-folder": "usuń folder", "folders/remove-from-folder": "usuń z folderu", "folders/rename-folder": "zmień nazwę folderu", "folders/rename-folder-prompt": "Zmień nazwę folderu na:", + "folders/rename-folder-prompt-title": "Zmień nazwę folderu", "block-switching/control_forever": "zawsze", "block-switching/control_if": "jeżeli", "block-switching/control_if_else": "jeżeli.. w przeciwnym razie", @@ -221,11 +223,11 @@ "move-to-top-bottom/bottom": "przenieś na dół", "move-to-top-bottom/top": "przenieś na górę", "swap-local-global/cant-convert-cloud": "\"Zmienne w chmurze\" nie mogą być zamienione na \"Dla jednego duszka\"", - "swap-local-global/cant-convert-conflict": "Nie można zamienić ponieważ koliduje ze zmiennymi w innym duszku: {sprites}", + "swap-local-global/cant-convert-conflict": "Nie można zamienić, ponieważ koliduje ze zmiennymi w innym duszku: {sprites}", "swap-local-global/cant-convert-stage": "Scena nie może mieć zmiennych \"Tylko dla tego duszka\".", - "swap-local-global/cant-convert-to-local": "Nie można zamienić ponieważ jest używane przez wiele duszków: {sprites}", + "swap-local-global/cant-convert-to-local": "Nie można zamienić, ponieważ to jest używane przez wiele duszków: {sprites}", "swap-local-global/cant-convert-used-elsewhere": "Nie można zamienić, ponieważ jest używana przez duszka: {sprite}", - "swap-local-global/edit": "Edytuj szczegóły:", + "swap-local-global/edit": "Edytuj właściwości:", "swap-local-global/edit-list-header": "Edytuj Listę", "swap-local-global/edit-list-option": "Zmień nazwę lub edytuj listę", "swap-local-global/edit-variable-header": "Edytuj Zmienną", diff --git a/src/addons/addons-l10n/pt.json b/src/addons/addons-l10n/pt.json index 0919c6ba4..e523901d2 100644 --- a/src/addons/addons-l10n/pt.json +++ b/src/addons/addons-l10n/pt.json @@ -32,7 +32,7 @@ "editor-devtools/make-space": "Abrir Espaço", "editor-devtools/middleclick": "Pular Para", "editor-devtools/middleclick-desc": "Use o botão da rodinha do mouse ou Shift + Click em uma variável ou bloco customizável para ir até a sua definição ou abri-lo na barra de pesquisa interativa.", - "editor-devtools/orphaned": "{count, plural, one {Ferramentas de desenvolvedor: Deletar 1 bloco redondo órfão?} other {Ferramentas de desenvolvedor: Deletar # blocos redondos órfãos?} }", + "editor-devtools/orphaned": "{count, plural, one {Ferramentas de desenvolvedor: Deletar 1 bloco redondo órfão?} many {Ferramentas de desenvolvedor: Deletar # blocos redondos órfãos?} other {Ferramentas de desenvolvedor: Deletar # blocos redondos órfãos?} }", "editor-devtools/paste": "Colar", "editor-devtools/paste-from-clipboard": "Colar da Área de Trabalho", "editor-devtools/paste-from-clipboard-desc": "Cola da área de trabalho onde o seu mouse estiver para que você possa colocar o bloco onde quiser (ao invés de colar o bloco na mesma posição onde você copiou como a implementação atual do Scratch faz).", @@ -43,8 +43,8 @@ "editor-devtools/swap-variable-desc": "Clique com o botão direito em uma variável para ver essa opção. Ela te deixa trocar todas as aparições dessa variável no ator atual de uma vez por outra variável. Isso é ótimo para quando você fez um erro e quer trocar uma variável por outra ou precisa trocar uma variável 'para todos os atores' por uma 'apenas para este ator'. Essa opção não remove a variável antiga e não vai afetar as variáveis de outros atores.", "editor-devtools/top": "enviar ao topo", "editor-devtools/tutorials": "Tutoriais", - "editor-devtools/unused-list": "{count, plural, one {Ferramentas de desenvolvedor: Deletar 1 lista local não utilizada? Aqui estão:\n} other {Ferramentas de desenvolvedor: Deletar # listas locais não utilizadas? Aqui está:\n} }", - "editor-devtools/unused-var": "{count, plural, one {Ferramentas de desenvolvedor: Deletar 1 variável local não utilizada? Aqui está:\n} other {Ferramentas de desenvolvedor: Deletar # variáveis locais não utilizadas? Aqui estão:\n} }", + "editor-devtools/unused-list": "{count, plural, one {Ferramentas de desenvolvedor: Deletar 1 lista local não utilizada? Aqui estão:\n} many {Ferramentas de desenvolvedor: Deletar # listas locais não utilizadas? Aqui está:\n} other {Ferramentas de desenvolvedor: Deletar # listas locais não utilizadas? Aqui está:\n} }", + "editor-devtools/unused-var": "{count, plural, one {Ferramentas de desenvolvedor: Deletar 1 variável local não utilizada? Aqui está:\n} many {Ferramentas de desenvolvedor: Deletar # variáveis locais não utilizadas? Aqui estão:\n} other {Ferramentas de desenvolvedor: Deletar # variáveis locais não utilizadas? Aqui estão:\n} }", "editor-devtools/var-not-exist": "Essa variável não existe...", "editor-devtools/variables": "variáveis", "editor-devtools/youtube": "Tutoriais no YouTube", @@ -96,7 +96,7 @@ "pause/pause": "Pausar", "color-picker/hex": "cor hex", "remove-sprite-confirm/confirm": "Quer deletar esse ator?", - "block-count/blocks": "{num, plural, one {1 bloco} other {# blocos}}", + "block-count/blocks": "{num, plural, one {1 bloco} many {# blocos} other {# blocos}}", "onion-skinning/behind": "Atrás", "onion-skinning/front": "Na frente", "onion-skinning/layering": "Camada", diff --git a/src/addons/addons-l10n/ru.json b/src/addons/addons-l10n/ru.json index b55f86d3a..4484824b4 100644 --- a/src/addons/addons-l10n/ru.json +++ b/src/addons/addons-l10n/ru.json @@ -52,6 +52,7 @@ "debugger/block-error": "ошибка %s", "debugger/block-log": "логировать %s", "debugger/block-warn": "предупредить %s", + "debugger/cannot-pause-player": "Блок точки остановки может быть использовать только в редакторе.", "debugger/clear": "Очистить", "debugger/clone-of": "Клон {sprite}", "debugger/close": "Закрыть", @@ -63,9 +64,11 @@ "debugger/export-desc": "Щелкните, удерживая Shift, чтобы настроить формат экспорта.", "debugger/icon-error": "Ошибка", "debugger/icon-warn": "Предупреждение", + "debugger/log-msg-broadcasted": "Передали «{broadcast}».", "debugger/log-msg-clone-cap": "Не удалось создать клон '{sprite}', невозможно создать более 300 клонов.", "debugger/log-msg-clone-created": "Создан клон '{sprite}'.", "debugger/log-msg-flag-clicked": "Зелёный флаг нажат.", + "debugger/no-logs": "Нет логов для показа.", "debugger/tab-logs": "Логи", "debugger/unknown-sprite": "(неизвестный спрайт)", "debugger/unpause": "Продолжить", @@ -96,17 +99,23 @@ "gamepad/axes-a-b": "Оси {a}и{b}", "gamepad/axis-arrows": "Клавиши стрелок", "gamepad/axis-cursor": "Курсор", + "gamepad/axis-custom": "Настраиваемый", "gamepad/axis-none": "Ничего", + "gamepad/browser-support": "Этот браузер и операционная система имеют известные баги, которые могут повлиять на использование этого аддона. Попробуйте др. браузер, если у Вас появятся проблемы.", "gamepad/button-n": "Кнопка{n}", + "gamepad/config-header": "Этот комментарий содержит конфигурацию для поддержки геймпада в сторонних инструментах или сайтах по типу https://turbowarp.org/\nНе редактировать самим", "gamepad/key-click": "Нажатие", "gamepad/key-down": "Вниз", + "gamepad/key-enter": "Ввод", "gamepad/key-left": "Налево", "gamepad/key-none": "(ничего)", "gamepad/key-right": "Направо", "gamepad/key-space": "Пробел", "gamepad/key-up": "Вверх", + "gamepad/keyinput-title": "Кликните и нажмите клавишу или кликните для смены кнопки. Esc для отмены. Backspace или Delete для очистки.", "gamepad/no-controllers": "Не обнаружены контроллеры. Попробуйте подключить какой-нибудь контроллер и нажать на ней кнопку.", "gamepad/settings": "Настройки геймпада", + "gamepad/store-in-project": "Хранить эти настройки в проекте для обхода конфигурации по умолчанию (Экспериментальный инструмент для создателей проектов)", "folders/add-to-folder": "добавить к папке: {folder}", "folders/closed-folder": "Папка", "folders/confirm-backpack-folder": "Сохранить всю папку в рюкзак?", diff --git a/src/addons/addons-l10n/sl.json b/src/addons/addons-l10n/sl.json index a6d92276e..5fa1e144c 100644 --- a/src/addons/addons-l10n/sl.json +++ b/src/addons/addons-l10n/sl.json @@ -144,11 +144,13 @@ "folders/create-folder": "ustvari mapo", "folders/name-not-allowed": "Neveljavno ime mape", "folders/name-prompt": "Ime mape:", + "folders/name-prompt-title": "Ustvari mapo", "folders/open-folder": "Odprta", "folders/remove-folder": "odstrani mapo", "folders/remove-from-folder": "odstrani iz mape", "folders/rename-folder": "preimenuj mapo", "folders/rename-folder-prompt": "Preimenuj mapo v:", + "folders/rename-folder-prompt-title": "Preimenuj mapo", "block-switching/control_forever": "ponavljaj", "block-switching/control_if": "če", "block-switching/control_if_else": "če ... sicer", diff --git a/src/addons/addons-l10n/tr.json b/src/addons/addons-l10n/tr.json index 84e579186..f7073d89e 100644 --- a/src/addons/addons-l10n/tr.json +++ b/src/addons/addons-l10n/tr.json @@ -146,11 +146,13 @@ "folders/create-folder": "klasör oluştur", "folders/name-not-allowed": "Geçersiz klasör adı", "folders/name-prompt": "Klasörün adı:", + "folders/name-prompt-title": "Klasör Oluştur", "folders/open-folder": "Açıldı", "folders/remove-folder": "klasörü sil", "folders/remove-from-folder": "klasörden sil", "folders/rename-folder": "klasörü yeniden adlandır", "folders/rename-folder-prompt": "Klasörün adını şununla değiştir: ", + "folders/rename-folder-prompt-title": "Klasörü Yeniden Adlandır", "block-switching/control_forever": "sürekli", "block-switching/control_if": "eğer", "block-switching/control_if_else": "eğer... değilse", diff --git a/src/addons/addons/debugger/logs.js b/src/addons/addons/debugger/logs.js index c6ca8d96d..b4204a3c8 100644 --- a/src/addons/addons/debugger/logs.js +++ b/src/addons/addons/debugger/logs.js @@ -119,9 +119,11 @@ export default async function createLogsTab({ debug, addon, console, msg }) { const downloadText = (filename, text) => { downloadBlob(filename, new Blob([text], { type: "text/plain" })); }; - exportButton.element.addEventListener("click", (e) => { + exportButton.element.addEventListener("click", async (e) => { const defaultFormat = "{sprite}: {content} ({type})"; - const exportFormat = e.shiftKey ? prompt(msg("enter-format"), defaultFormat) : defaultFormat; + const exportFormat = e.shiftKey + ? await addon.tab.prompt(msg("export"), msg("enter-format"), defaultFormat, { useEditorClasses: true }) + : defaultFormat; if (!exportFormat) return; const file = logView.rows .map(({ text, targetId, type, count }) => diff --git a/src/addons/addons/debugger/style.css b/src/addons/addons/debugger/style.css index f1d963c3d..77a2688fe 100644 --- a/src/addons/addons/debugger/style.css +++ b/src/addons/addons/debugger/style.css @@ -18,6 +18,9 @@ width: 565px; height: 25rem; } +[theme="dark"] .sa-debugger-interface { + background: var(--ui-primary); +} .sa-debugger-interface h1 { padding: 10px; @@ -145,6 +148,10 @@ font-family: monospace; color: #000; } +[theme="dark"] .sa-debugger-log { + color: var(--text-primary); + border-color: rgba(255, 255, 255, 0.15); +} .sa-debugger-log[data-type="warn"] { border-color: hsl(50deg, 100%, 75%); color: hsl(39deg 100% 18%); @@ -155,6 +162,16 @@ color: red; background-color: hsl(0deg 100% 95%); } +[theme="dark"] .sa-debugger-log[data-type="warn"] { + border-color: hsl(50deg, 100%, 15%); + color: hsl(39deg 100% 90%); + background-color: hsl(50deg 100% 10%); +} +[theme="dark"] .sa-debugger-log[data-type="error"] { + border-color: hsl(0deg 100% 15%); + color: hsl(0deg 100% 77%); + background-color: hsl(0deg 100% 10%); +} .sa-debugger-log-repeats { background-color: hsla(163, 85%, 40%, 1); @@ -163,6 +180,9 @@ padding: 1px 6px; margin-right: 4px; } +[theme="dark"] .sa-debugger-log-repeats { + color: var(--ui-primary); +} .sa-debugger-log-icon { width: 16px; @@ -191,6 +211,9 @@ margin-right: 4px; margin-left: auto; } +[theme="dark"] .sa-debugger-log-link { + color: inherit; +} .sa-debugger-log-link:hover { text-decoration: underline; color: #4d97ff; diff --git a/src/addons/addons/default-costume-editor-color/userscript.js b/src/addons/addons/default-costume-editor-color/userscript.js index 0c9253ed8..1e63be730 100644 --- a/src/addons/addons/default-costume-editor-color/userscript.js +++ b/src/addons/addons/default-costume-editor-color/userscript.js @@ -249,7 +249,7 @@ export default async function ({ addon, global, console, msg }) { // In persistence, we always want to re-apply the previous stroke and fill. const toolInfo = getToolInfo(); if (!toolInfo) { - console.warn("unknown tool", newToolName); + console.warn("unknown tool", addon.tab.redux.state.scratchPaint.mode); return; } if (toolInfo.resetsFill) { diff --git a/src/addons/addons/folders/userscript.js b/src/addons/addons/folders/userscript.js index 6e947723a..aaadf6eb0 100644 --- a/src/addons/addons/folders/userscript.js +++ b/src/addons/addons/folders/userscript.js @@ -385,6 +385,7 @@ export default async function ({ addon, global, console, msg }) { const [x, y] = PREVIEW_POSITIONS[i]; let src; if (item.asset) { + // TW: We can be 100% certain that escaping here is unnecessary src = item.asset.encodeDataURI(); } else if (item.costume && item.costume.asset) { src = item.costume.asset.encodeDataURI(); @@ -395,7 +396,7 @@ export default async function ({ addon, global, console, msg }) { result += ``; } } - result += ''; + result += ""; return result; }; @@ -754,8 +755,13 @@ export default async function ({ addon, global, console, msg }) { fixSoundOrder(); } }; - const renameFolder = () => { - let newName = prompt(msg("rename-folder-prompt"), data.folder); + const renameFolder = async () => { + let newName = await addon.tab.prompt( + msg("rename-folder-prompt-title"), + msg("rename-folder-prompt"), + data.folder, + { useEditorClasses: true } + ); // Prompt cancelled, do not rename if (newName === null) { return; @@ -813,8 +819,13 @@ export default async function ({ addon, global, console, msg }) { } }; - const createFolder = () => { - const name = prompt(msg("name-prompt"), getNameWithoutFolder(data.realName)); + const createFolder = async () => { + const name = await addon.tab.prompt( + msg("name-prompt-title"), + msg("name-prompt"), + getNameWithoutFolder(data.realName), + { useEditorClasses: true } + ); if (name === null) { return; } @@ -1254,10 +1265,11 @@ export default async function ({ addon, global, console, msg }) { const dragInfo = args[0]; const folderItems = dragInfo && dragInfo.payload && dragInfo.payload.sa_folder_items; if (Array.isArray(folderItems)) { - if (confirm(msg("confirm-backpack-folder"))) { + addon.tab.confirm("", msg("confirm-backpack-folder"), { useEditorClasses: true }).then((result) => { + if (!result) return; this.sa_queuedItems = folderItems; this.sa_loadNextItem(); - } + }); return; } return originalHandleDrop.call(this, ...args); diff --git a/src/addons/addons/gamepad/style.css b/src/addons/addons/gamepad/style.css index 7a17d5c42..7d4333bf5 100644 --- a/src/addons/addons/gamepad/style.css +++ b/src/addons/addons/gamepad/style.css @@ -20,7 +20,8 @@ flex-direction: column; } .sa-gamepad-popup-content { - background-color: white; + background-color: white !important; + color: #575e75 !important; padding: 1.5rem 2.25rem; height: 100%; overflow-y: auto; diff --git a/src/addons/addons/gamepad/userscript.js b/src/addons/addons/gamepad/userscript.js index 791f17a66..fed1c37e7 100644 --- a/src/addons/addons/gamepad/userscript.js +++ b/src/addons/addons/gamepad/userscript.js @@ -225,62 +225,40 @@ export default async function ({ addon, global, console, msg }) { const editorEl = editor.generateEditor(); handleEditorControllerChanged(); - const close = () => { - modalOverlay.remove(); - document.body.removeEventListener("click", handleClickOutside, true); - window.removeEventListener("keydown", handleKeyDown); - addon.self.removeEventListener("disabled", close); - editor.hide(); - }; - const handleClickOutside = (e) => { - if (!modalContentContainer.contains(e.target)) { - close(); - } - }; + const { backdrop, container, content, closeButton, remove } = addon.tab.createModal(msg("settings"), { + isOpen: true, + useEditorClasses: true, + }); + const handleKeyDown = (e) => { if (e.key === "Escape" && !e.target.closest("[data-accepting-input]")) { - close(); + remove(); } }; - document.body.addEventListener("click", handleClickOutside, true); + backdrop.addEventListener("click", remove); window.addEventListener("keydown", handleKeyDown); - addon.self.addEventListener("disabled", close); + addon.self.addEventListener("disabled", remove); - const modalOverlay = document.createElement("div"); - modalOverlay.className = addon.tab.scratchClass("modal_modal-overlay", { others: "sa-gamepad-popup-outer" }); - const modalContentContainer = document.createElement("div"); - modalContentContainer.className = addon.tab.scratchClass("modal_modal-content", { others: "sa-gamepad-popup" }); + backdrop.classList.add("sa-gamepad-popup-outer"); + container.classList.add("sa-gamepad-popup"); - const modalHeaderContainer = document.createElement("div"); - modalHeaderContainer.className = addon.tab.scratchClass("modal_header"); - const modalHeaderText = document.createElement("div"); - modalHeaderText.className = addon.tab.scratchClass("modal_header-item", "modal_header-item-title"); - modalHeaderText.textContent = msg("settings"); - modalHeaderContainer.appendChild(modalHeaderText); - - const closeContainer = document.createElement("div"); - closeContainer.className = addon.tab.scratchClass("modal_header-item", "modal_header-item-close"); - const closeButton = document.createElement("div"); - closeButton.className = addon.tab.scratchClass("close-button_close-button", "close-button_large"); closeButton.tabIndex = "0"; closeButton.setAttribute("role", "button"); - const closeImage = document.createElement("img"); - closeImage.className = addon.tab.scratchClass("close-button_close-icon"); - closeImage.src = _twGetAsset("/close.svg"); - closeButton.appendChild(closeImage); - closeContainer.appendChild(closeButton); - modalHeaderContainer.appendChild(closeContainer); - closeButton.addEventListener("click", close); + closeButton.addEventListener("click", remove); + closeButton.addEventListener("keydown", (e) => { + if (e.key === "Enter" || e.key === " ") { + remove(); + } + }); - const modalContent = document.createElement("div"); - modalContent.className = "sa-gamepad-popup-content"; + content.classList.add("sa-gamepad-popup-content"); if (GamepadLib.browserHasBrokenGamepadAPI()) { const warning = document.createElement("div"); warning.textContent = msg("browser-support"); warning.className = "sa-gamepad-browser-support-warning"; - modalContent.appendChild(warning); + content.appendChild(warning); } - modalContent.appendChild(editorEl); + content.appendChild(editorEl); const storeSettingsLabel = document.createElement("label"); storeSettingsLabel.className = "sa-gamepad-store-settings"; @@ -290,12 +268,7 @@ export default async function ({ addon, global, console, msg }) { storeSettingsCheckbox.checked = shouldStoreSettingsInProject; storeSettingsCheckbox.addEventListener("change", handleStoreSettingsCheckboxChanged); storeSettingsLabel.prepend(storeSettingsCheckbox); - modalContent.appendChild(storeSettingsLabel); - - modalContentContainer.appendChild(modalHeaderContainer); - modalContentContainer.appendChild(modalContent); - modalOverlay.appendChild(modalContentContainer); - document.body.appendChild(modalOverlay); + content.appendChild(storeSettingsLabel); editor.focus(); }); diff --git a/src/addons/addons/mediarecorder/style.css b/src/addons/addons/mediarecorder/style.css index f934e21de..9505257b8 100644 --- a/src/addons/addons/mediarecorder/style.css +++ b/src/addons/addons/mediarecorder/style.css @@ -9,18 +9,9 @@ margin-right: auto; } -.mediaRecorderPopup [class*="modal_header-item-title"] { - margin: 0; /* required because there is no close button */ -} - .mediaRecorderPopupContent { - background-color: white; padding: 1.5rem 2.25rem; } -[theme="dark"] .mediaRecorderPopupContent { - color: var(--text-primary); - background-color: var(--ui-primary); -} .mediaRecorderPopup p { font-size: 1rem; @@ -49,6 +40,7 @@ margin-left: 0.5rem; } +/* TW: Fixes cancel button in dark mode */ .mediaRecorderPopupButtons button:nth-of-type(1) { color: black; } diff --git a/src/addons/addons/mediarecorder/userscript.js b/src/addons/addons/mediarecorder/userscript.js index ec5a0c15a..09bc97000 100644 --- a/src/addons/addons/mediarecorder/userscript.js +++ b/src/addons/addons/mediarecorder/userscript.js @@ -16,28 +16,14 @@ export default async ({ addon, console, msg }) => { reduxEvents: ["scratch-gui/mode/SET_PLAYER", "fontsLoaded/SET_FONTS_LOADED", "scratch-gui/locales/SELECT_LOCALE"], }); const getOptions = () => { - const recordOption = Object.assign(document.createElement("div"), { - className: addon.tab.scratchClass("modal_modal-overlay"), - }); - const recordOptionPopup = Object.assign(document.createElement("div"), { - className: addon.tab.scratchClass("modal_modal-content", { others: "mediaRecorderPopup" }), - dir: addon.tab.direction, - }); - const recordOptionHeader = Object.assign(document.createElement("div"), { - className: addon.tab.scratchClass("modal_header"), - }); - recordOptionHeader.appendChild( - Object.assign(document.createElement("div"), { - className: addon.tab.scratchClass("modal_header-item", "modal_header-item-title"), - textContent: msg("option-title"), - }) - ); - recordOptionPopup.appendChild(recordOptionHeader); - const recordOptionInner = Object.assign(document.createElement("div"), { - className: "mediaRecorderPopupContent", + const { backdrop, container, content, closeButton, remove } = addon.tab.createModal(msg("option-title"), { + isOpen: true, + useEditorClasses: true, }); + container.classList.add("mediaRecorderPopup"); + content.classList.add("mediaRecorderPopupContent"); - recordOptionInner.appendChild( + content.appendChild( Object.assign(document.createElement("p"), { textContent: msg("record-description"), className: "recordOptionDescription", @@ -60,7 +46,7 @@ export default async ({ addon, console, msg }) => { }); recordOptionSeconds.appendChild(recordOptionSecondsLabel); recordOptionSeconds.appendChild(recordOptionSecondsInput); - recordOptionInner.appendChild(recordOptionSeconds); + content.appendChild(recordOptionSeconds); // Delay const recordOptionDelay = document.createElement("p"); @@ -78,7 +64,7 @@ export default async ({ addon, console, msg }) => { }); recordOptionDelay.appendChild(recordOptionDelayLabel); recordOptionDelay.appendChild(recordOptionDelayInput); - recordOptionInner.appendChild(recordOptionDelay); + content.appendChild(recordOptionDelay); // Audio const recordOptionAudio = document.createElement("p"); @@ -94,7 +80,7 @@ export default async ({ addon, console, msg }) => { }); recordOptionAudio.appendChild(recordOptionAudioInput); recordOptionAudio.appendChild(recordOptionAudioLabel); - recordOptionInner.appendChild(recordOptionAudio); + content.appendChild(recordOptionAudio); // Mic const recordOptionMic = document.createElement("p"); @@ -109,7 +95,7 @@ export default async ({ addon, console, msg }) => { }); recordOptionMic.appendChild(recordOptionMicInput); recordOptionMic.appendChild(recordOptionMicLabel); - recordOptionInner.appendChild(recordOptionMic); + content.appendChild(recordOptionMic); // Green flag const recordOptionFlag = document.createElement("p"); @@ -124,7 +110,7 @@ export default async ({ addon, console, msg }) => { }); recordOptionFlag.appendChild(recordOptionFlagInput); recordOptionFlag.appendChild(recordOptionFlagLabel); - recordOptionInner.appendChild(recordOptionFlag); + content.appendChild(recordOptionFlag); // Stop sign const recordOptionStop = document.createElement("p"); @@ -147,7 +133,7 @@ export default async ({ addon, console, msg }) => { }); recordOptionStop.appendChild(recordOptionStopInput); recordOptionStop.appendChild(recordOptionStopLabel); - recordOptionInner.appendChild(recordOptionStop); + content.appendChild(recordOptionStop); let resolvePromise = null; const optionPromise = new Promise((resolve) => { @@ -155,21 +141,12 @@ export default async ({ addon, console, msg }) => { }); let handleOptionClose = null; - const handleClickOutside = (e) => { - if (recordOptionPopup.contains(e.target)) return; - handleOptionClose(null); - }; - - document.body.addEventListener("click", handleClickOutside, { - capture: true, - }); + backdrop.addEventListener("click", () => handleOptionClose(null)); + closeButton.addEventListener("click", () => handleOptionClose(null)); handleOptionClose = (value) => { resolvePromise(value); - document.body.removeEventListener("click", handleClickOutside, { - capture: true, - }); - recordOption.remove(); + remove(); }; const buttonRow = Object.assign(document.createElement("div"), { @@ -198,11 +175,7 @@ export default async ({ addon, console, msg }) => { { once: true } ); buttonRow.appendChild(startButton); - recordOptionInner.appendChild(buttonRow); - - recordOptionPopup.appendChild(recordOptionInner); - recordOption.appendChild(recordOptionPopup); - document.body.appendChild(recordOption); + content.appendChild(buttonRow); return optionPromise; }; diff --git a/src/addons/contextmenu.js b/src/addons/contextmenu.js index 08dbf2f72..9e24f4ded 100644 --- a/src/addons/contextmenu.js +++ b/src/addons/contextmenu.js @@ -1,6 +1,5 @@ -// This file is copied and pasted from ScratchAddons/addon-api/content-script/contextmenu.js -// I really want to rewrite this, but just looking at it fills me with dread. -// So that will happen later. +// This file is imported from +// https://github.com/ScratchAddons/ScratchAddons/blob/master/addon-api/content-script/contextmenu.js /* eslint-disable */ diff --git a/src/addons/generated/upstream-meta.json b/src/addons/generated/upstream-meta.json index 377a07689..edd2ef175 100644 --- a/src/addons/generated/upstream-meta.json +++ b/src/addons/generated/upstream-meta.json @@ -1 +1 @@ -{"commit":"7fd130c"} \ No newline at end of file +{"commit":"15a67ba"} \ No newline at end of file