From a8d10cca11144bd64a42e3937cde190461424c08 Mon Sep 17 00:00:00 2001 From: Muffin Date: Sat, 30 Dec 2023 22:18:00 -0600 Subject: [PATCH] merge-upstream: new addons: paint-skew, editor-square-inputs, editor-compact, copy-reporter, editor-number-arrow-keys --- src/addons/addons-l10n-settings/de.json | 26 + src/addons/addons-l10n-settings/es.json | 21 + src/addons/addons-l10n-settings/fi.json | 32 ++ src/addons/addons-l10n-settings/fr.json | 31 ++ src/addons/addons-l10n-settings/hu.json | 2 + src/addons/addons-l10n-settings/it.json | 26 + src/addons/addons-l10n-settings/ja.json | 21 + src/addons/addons-l10n-settings/ko.json | 3 + src/addons/addons-l10n-settings/nl.json | 32 ++ src/addons/addons-l10n-settings/pl.json | 2 + src/addons/addons-l10n-settings/pt.json | 1 + src/addons/addons-l10n-settings/ru.json | 21 + src/addons/addons-l10n-settings/sl.json | 26 + src/addons/addons-l10n-settings/tr.json | 25 + src/addons/addons-l10n/de.json | 2 + src/addons/addons-l10n/en.json | 2 + src/addons/addons-l10n/es.json | 2 + src/addons/addons-l10n/fi.json | 2 + src/addons/addons-l10n/fr.json | 2 + src/addons/addons-l10n/hu.json | 2 + src/addons/addons-l10n/it.json | 2 + src/addons/addons-l10n/ja.json | 2 + src/addons/addons-l10n/ko.json | 2 + src/addons/addons-l10n/nl.json | 2 + src/addons/addons-l10n/pl.json | 2 + src/addons/addons-l10n/pt.json | 2 + src/addons/addons-l10n/ru.json | 2 + src/addons/addons-l10n/sl.json | 2 + src/addons/addons-l10n/tr.json | 2 + src/addons/addons.js | 15 +- .../addons/copy-reporter/_manifest_entry.js | 26 + .../addons/copy-reporter/_runtime_entry.js | 9 + src/addons/addons/copy-reporter/copy.svg | 1 + src/addons/addons/copy-reporter/style.css | 13 + src/addons/addons/copy-reporter/userscript.js | 71 +++ .../addons/editor-compact/_manifest_entry.js | 65 +++ .../addons/editor-compact/_runtime_entry.js | 13 + src/addons/addons/editor-compact/close.svg | 1 + .../editor-compact/force-tooltip-update.js | 7 + .../addons/editor-compact/hide-labels.css | 63 +++ .../editor-compact/sprite-properties.css | 15 + .../addons/editor-compact/userscript.js | 60 +++ .../addons/editor-compact/userstyle.css | 508 ++++++++++++++++++ .../_manifest_entry.js | 177 ++++++ .../_runtime_entry.js | 5 + .../editor-number-arrow-keys/userscript.js | 183 +++++++ .../editor-square-inputs/_manifest_entry.js | 40 ++ .../editor-square-inputs/_runtime_entry.js | 5 + .../addons/editor-square-inputs/userscript.js | 34 ++ .../addons/number-pad/_manifest_entry.js | 4 +- .../addons/paint-skew/_manifest_entry.js | 30 ++ .../addons/paint-skew/_runtime_entry.js | 5 + src/addons/addons/paint-skew/userscript.js | 131 +++++ .../addons/paint-snap/_manifest_entry.js | 4 +- .../rename-broadcasts/_manifest_entry.js | 4 +- .../sprite-properties/_manifest_entry.js | 3 +- .../addons/vol-slider/_manifest_entry.js | 3 +- src/addons/generated/addon-entries.js | 5 + src/addons/generated/addon-manifests.js | 10 + src/addons/generated/upstream-meta.json | 2 +- src/playground/credits/users.js | 3 + 61 files changed, 1795 insertions(+), 19 deletions(-) create mode 100644 src/addons/addons/copy-reporter/_manifest_entry.js create mode 100644 src/addons/addons/copy-reporter/_runtime_entry.js create mode 100644 src/addons/addons/copy-reporter/copy.svg create mode 100644 src/addons/addons/copy-reporter/style.css create mode 100644 src/addons/addons/copy-reporter/userscript.js create mode 100644 src/addons/addons/editor-compact/_manifest_entry.js create mode 100644 src/addons/addons/editor-compact/_runtime_entry.js create mode 100644 src/addons/addons/editor-compact/close.svg create mode 100644 src/addons/addons/editor-compact/force-tooltip-update.js create mode 100644 src/addons/addons/editor-compact/hide-labels.css create mode 100644 src/addons/addons/editor-compact/sprite-properties.css create mode 100644 src/addons/addons/editor-compact/userscript.js create mode 100644 src/addons/addons/editor-compact/userstyle.css create mode 100644 src/addons/addons/editor-number-arrow-keys/_manifest_entry.js create mode 100644 src/addons/addons/editor-number-arrow-keys/_runtime_entry.js create mode 100644 src/addons/addons/editor-number-arrow-keys/userscript.js create mode 100644 src/addons/addons/editor-square-inputs/_manifest_entry.js create mode 100644 src/addons/addons/editor-square-inputs/_runtime_entry.js create mode 100644 src/addons/addons/editor-square-inputs/userscript.js create mode 100644 src/addons/addons/paint-skew/_manifest_entry.js create mode 100644 src/addons/addons/paint-skew/_runtime_entry.js create mode 100644 src/addons/addons/paint-skew/userscript.js diff --git a/src/addons/addons-l10n-settings/de.json b/src/addons/addons-l10n-settings/de.json index f68a8b95481..650c27b786c 100644 --- a/src/addons/addons-l10n-settings/de.json +++ b/src/addons/addons-l10n-settings/de.json @@ -121,6 +121,9 @@ "bitmap-copy/@name": "Kopieren von Raster-Bildern", "2d-color-picker/@description": "Ersetzt die Schattierungs- und Helligkeitsschieberegler im Kostümeditor durch einen 2D-Farbenwähler. Halte die Umschalttaste während dem Ziehen des Mauszeigers gedrückt, um die Werte auf einer einzigen Achse zu ändern.", "2d-color-picker/@name": "2D-Farbenwähler", + "paint-skew/@description": "Halte Strg gedrückt, während du die Seite eines Objekts verschiebst, um dieses zu verbiegen. Halte Alt während dem Verbiegen gedrückt, um es von seiner Mitte aus zu verbiegen.", + "paint-skew/@info-useCmdOnMac": "Auf macOS, benutze die Cmd-Taste statt der Strg-Taste und die Option-Taste statt der Alt-Taste.", + "paint-skew/@name": "Biegen im Kostümeditor", "better-img-uploads/@description": "Fügt einen neuen Knopf über dem \"Kostüm hochladen\"-Knopf, der hochgeladene Raster-Bilder automatisch in SVG (Vektor) umwandelt, um die Qualität nicht zu verlieren.", "better-img-uploads/@info-notSuitableEdit": "Verwende HD-Hochladen nicht, wenn du das Bild nach dem Hochladen noch bearbeiten willst.", "better-img-uploads/@name": "Bilder in HD hochladen", @@ -144,12 +147,20 @@ "custom-block-shape/@settings-name-cornerSize": "Eckengröße (0-300%)", "custom-block-shape/@settings-name-notchSize": "Laschenhöhe (0-150%)", "custom-block-shape/@settings-name-paddingSize": "Blockhöhe (50-200%)", + "editor-square-inputs/@description": "Macht Text- und Farbenfelder rechteckig statt rund, wie in Scratch 2.0.", + "editor-square-inputs/@name": "Quadratische Textfelder in Blöcken", + "editor-square-inputs/@settings-name-color": "Farbfelder", + "editor-square-inputs/@settings-name-text": "Textfelder", "zebra-striping/@description": "Macht, dass Blöcke der selben Kategorie zwischen helleren und dunkleren Schattierungen abwechseln, wenn sie ineinander verschachtelt sind. Auch als Zebrastreifen bekannt.", "zebra-striping/@name": "Abwechselnde Farben für verschachtelte Blöcke", "zebra-striping/@settings-name-intensity": "Stärke (0-100%)", "zebra-striping/@settings-name-shade": "Schattierung", "zebra-striping/@settings-select-shade-darker": "Dunkler", "zebra-striping/@settings-select-shade-lighter": "Heller", + "editor-compact/@description": "Verringert die Größe von Schaltflächen, Eingabefeldern, der Kopfleiste, und anderen Elementen im Editor, um mehr Platz für Elemente wie die Codefläche, der Kostümeditor und Kostümvorschauen zu schaffen, wie in Scratch 2.0.", + "editor-compact/@info-hide-icons-update": "Um die Menüleistensymbole auszublenden, verwende das Addon \"Benutzerdefinierte Menüleiste\".", + "editor-compact/@name": "Kompakter Editor", + "editor-compact/@settings-name-hideLabels": "Schalftlächenbeschriftungen im Kostüm- und Klangeditor verstecken", "editor-theme3/@description": "Bearbeite die Farben der Blöcke für jede Kategorie im Editor.", "editor-theme3/@info-aboutHighContrast": "Die neuen kontrastreichen Blockfarben sind unten als Vorlage verfügbar.", "editor-theme3/@info-disablesMenuBar": "Wenn du auf Scratchs Menü \"Farbmodus\" zugreifen möchtest, deaktiviere dieses Feature.", @@ -248,6 +259,8 @@ "custom-zoom/@settings-select-speed-long": "Langsam", "custom-zoom/@settings-select-speed-none": "Sofort", "custom-zoom/@settings-select-speed-short": "Schnell", + "copy-reporter/@description": "Fügt eine Option (zum Rechtsklick-Kontextmenü) zum Kopieren von Werten in Sprechblasen und Anzeigen von Variablenblöcken hinzu.", + "copy-reporter/@name": "Variablenwerte kopieren", "initialise-sprite-position/@description": "Ändert die Position auf der Bühne von neu erstellten Figuren.", "initialise-sprite-position/@name": "Benutzerdefinierte Standardposition von neuen Figuren", "initialise-sprite-position/@settings-name-duplicate": "Position für duplizierte Figuren", @@ -342,6 +355,19 @@ "number-pad/@description": "Zeigt Scratchs virtuelles Zahlenpad, das bei der Eingabe in Zahlenfeldern auf Touchscreen-Geräten geöffnet wird, auf allen Geräten an.", "number-pad/@info-explanation": "Die Zifferntastatur wird beim Bearbeiten von Zahlenfeldern auf bestimmten Blöcken wie \"gehe ()er Schritt\" angezeigt.", "number-pad/@name": "Zifferntastatur immer anzeigen", + "editor-number-arrow-keys/@description": "Nutze die Pfeiltasten nach oben und nach unten, um Werte in Zahleneingabefeldern zu ändern, zum Beispiel in Blöcken oder in den Figureneigenshaften.", + "editor-number-arrow-keys/@name": "Erhöhung von Zahlen durch Pfeiltasten im Editor", + "editor-number-arrow-keys/@settings-name-alt": "Änderung bei Alt+Taste", + "editor-number-arrow-keys/@settings-name-altCustom": "Bei Alt+Taste ändern", + "editor-number-arrow-keys/@settings-name-regular": "Änderung bei normalem Tastendruck", + "editor-number-arrow-keys/@settings-name-regularCustom": "Bei normalem Tastendruck ändern", + "editor-number-arrow-keys/@settings-name-shift": "Änderung bei Umschalt+Taste", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Bei Shift+Taste ändern", + "editor-number-arrow-keys/@settings-name-useCustom": "Benutzerdefinierte Werte verwenden", + "editor-number-arrow-keys/@settings-select-alt-none": "Keine", + "editor-number-arrow-keys/@settings-select-regular-none": "Keine", + "editor-number-arrow-keys/@settings-select-shift-none": "Keine", + "editor-number-arrow-keys/@update": "Du kannst nun Eingabefelder erhöhen, die sich nicht in Blöcken befinden, zum Beispiel der Eigenschaftenbereich von Figuren, und die Werte vollständig personalisieren.", "script-snap/@description": "Richtet Skripte nach dem Ziehen automatisch an den Punkten des Codebereichs aus.", "script-snap/@name": "Skripte am Raster ausrichten", "script-snap/@preset-name-default": "Standard", diff --git a/src/addons/addons-l10n-settings/es.json b/src/addons/addons-l10n-settings/es.json index 7a4d4f51d4c..8d7beeca336 100644 --- a/src/addons/addons-l10n-settings/es.json +++ b/src/addons/addons-l10n-settings/es.json @@ -121,6 +121,9 @@ "bitmap-copy/@name": "Copiar imágenes bitmap", "2d-color-picker/@description": "Remplaza los deslizadores de saturación y brillo con un selector de color 2D. Presione Shift mientras arrastra el cursor para cambiar los valores en un solo eje.", "2d-color-picker/@name": "Selector de color 2D", + "paint-skew/@description": "Para doblar un objeto, mantenga presionado Ctrl mientras lo escala desde uno de sus lados. Mantenga Alt mientras dobla un objeto para doblarlo desde su centro.", + "paint-skew/@info-useCmdOnMac": "En macOS, use la tecla Command en vez de la tecla Ctrl y la tecla Option en vez de la tecla Alt.", + "paint-skew/@name": "Doblar en editor de disfraces", "better-img-uploads/@description": "Agrega un nuevo botón arriba del botón \"subir disfraz\" que automáticamente convierte imágenes bitmap subidas a imágenes SVG (vector) para evitar perder calidad.", "better-img-uploads/@info-notSuitableEdit": "Evite usar el botón de subida HD si tiene planeado editar la imagen luego de subirla.", "better-img-uploads/@name": "Subida de imágenes HD", @@ -148,6 +151,9 @@ "zebra-striping/@settings-name-shade": "Tonalidad", "zebra-striping/@settings-select-shade-darker": "Oscura", "zebra-striping/@settings-select-shade-lighter": "Clara", + "editor-compact/@description": "Disminuye el tamaño de los botones, campos de entrada, la barra de menú y otros elementos del editor, dejando más espacio para componentes como el área de código, el editor de disfraces y las vistas previas de disfraces, como ocurría en Scratch 2.0.", + "editor-compact/@name": "Editor compacto", + "editor-compact/@settings-name-hideLabels": "Esconder etiquetas de botones en editores de disfraces y sonidos", "editor-theme3/@description": "Edite los colores para cada categoría de bloques del editor.", "editor-theme3/@info-aboutHighContrast": "Los nuevos bloques de Alto Contraste están disponibles como un preset abajo.", "editor-theme3/@info-disablesMenuBar": "Si quiere acceder al menú de \"Modo de Color\" de Scratch, deshabilite esta opción.", @@ -243,6 +249,8 @@ "custom-zoom/@settings-select-speed-long": "Lenta", "custom-zoom/@settings-select-speed-none": "Instantánea", "custom-zoom/@settings-select-speed-short": "Rápida", + "copy-reporter/@description": "Agrega la opción de copiar los valores mostrados por monitores de variables (desde el menú de click derecho) y globos de reporte de bloques.", + "copy-reporter/@name": "Copiar valores del monitor", "initialise-sprite-position/@description": "Cambia el lugar donde los objetos recien creados son posicionados en el escenario.", "initialise-sprite-position/@name": "Posición predeterminada de nuevos objetos personalizable", "initialise-sprite-position/@settings-name-duplicate": "Posición de objetos duplicados", @@ -337,6 +345,19 @@ "number-pad/@description": "Muestra el teclado numérico virtual de Scratch cuando se editan entradas de números en bloques en todos los dispositivos y no solo en dispositivos táctiles.", "number-pad/@info-explanation": "Se mostrará un teclado numérico cuando se editen entradas para bloques como \"mover () pasos\".", "number-pad/@name": "Siempre mostrar teclado numérico", + "editor-number-arrow-keys/@description": "Use las teclas de arriba y abajo para incrementar o decrementar valores numéricos en campos númericos, como los que tienen los bloques, o los del area de propiedades del objeto.", + "editor-number-arrow-keys/@name": "Incremento con teclas de flecha en editor", + "editor-number-arrow-keys/@settings-name-alt": "Cambio en Alt+Tecla", + "editor-number-arrow-keys/@settings-name-altCustom": "Cambio en Alt+Tecla", + "editor-number-arrow-keys/@settings-name-regular": "Cambio en pulsación de tecla normal", + "editor-number-arrow-keys/@settings-name-regularCustom": "Cambio en pulsación de tecla normal", + "editor-number-arrow-keys/@settings-name-shift": "Cambio en Shift+Tecla", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Cambio en Shift+Tecla", + "editor-number-arrow-keys/@settings-name-useCustom": "Usar valores personalizados", + "editor-number-arrow-keys/@settings-select-alt-none": "Ninguno", + "editor-number-arrow-keys/@settings-select-regular-none": "Ninguno", + "editor-number-arrow-keys/@settings-select-shift-none": "Ninguno", + "editor-number-arrow-keys/@update": "Ahora puede incrementar campos números que no estén en bloques, como las propiedades del objeto, y personalizar los valores completamente.", "script-snap/@description": "Arrastre un script para automáticamente ajustar su posición a los puntos del área de código.", "script-snap/@name": "Ajustar scripts a cuadrícula", "script-snap/@preset-name-default": "Predeterminado", diff --git a/src/addons/addons-l10n-settings/fi.json b/src/addons/addons-l10n-settings/fi.json index b96f4d53533..d4e3bce92db 100644 --- a/src/addons/addons-l10n-settings/fi.json +++ b/src/addons/addons-l10n-settings/fi.json @@ -107,6 +107,9 @@ "default-costume-editor-color/@settings-name-strokeSize": "Ääriviivojen oletuskoko", "2d-color-picker/@description": "Korvaa asuste-editorin värikylläisyys- ja kirkkaussäätimet 2D-värinvalitsimella. Pidä Shift-näppäintä pohjassa, kun vedät kursoria muuttaaksesi yhden akselin arvoja", "2d-color-picker/@name": "2D-värinvalitsin", + "paint-skew/@description": "Pidä Ctrl-näppäintä pohjassa muuttaessasi objektin kokoa sen sivuista, jotta voit vinottaa objektia. Painamalla Alt-näppäintä samalla, kun vinotat objektia, se vinottuu keskeltä.", + "paint-skew/@info-useCmdOnMac": "Käytä macOS:ssä komentonäppäintä Control-näppäimen sijaan ja optionäppäintä Alt-näppäimen sijaan.", + "paint-skew/@name": "Vinottaminen asuste-editorissa", "better-img-uploads/@description": "Lisää uuden napin, joka muuntaa ladatut bittikarttakuvat SVG-kuviksi (vektorikuviksi) laadun heikkenemisen välttämiseksi, \"lataa asuste\" -napin ylle.", "better-img-uploads/@info-notSuitableEdit": "Vältä HD-latausnapin käyttöä, jos aiot muokata kuvaa latauksen jälkeen.", "better-img-uploads/@name": "HD-kuvien lataukset", @@ -130,12 +133,20 @@ "custom-block-shape/@settings-name-cornerSize": "Reunojen koko (0-300%)", "custom-block-shape/@settings-name-notchSize": "Lovien koko (0-150%)", "custom-block-shape/@settings-name-paddingSize": "Täytön koko (50-200%)", + "editor-square-inputs/@description": "Tekee lohkojen tekstikentistä ja värinvalitsimista neliön muotoisia pyöreiden sijaan, kuten Scratch 2.0:ssa.", + "editor-square-inputs/@name": "Lohkojen neliskanttiset tekstikentät", + "editor-square-inputs/@settings-name-color": "Värinvalitsimet", + "editor-square-inputs/@settings-name-text": "Tekstikentät", "zebra-striping/@description": "Saa saman luokan lohkot vuorottelemaan vaaleampien ja tummempien sävyjen välillä, kun ne asetetaan sisäkkäin. Tämä tunnetaan myös seepraraitana.", "zebra-striping/@name": "Vuorottelevat sisäkkäiset lohkovärit", "zebra-striping/@settings-name-intensity": "Voimakkuus (0-100%)", "zebra-striping/@settings-name-shade": "Sävy", "zebra-striping/@settings-select-shade-darker": "Tummempi", "zebra-striping/@settings-select-shade-lighter": "Vaaleampi", + "editor-compact/@description": "Pienentää painikkeiden, tekstikenttien, valikkopalkin ja muiden elementtien kokoa editorissa tehden tilaa komponenteille, kuten koodialueelle, asuste-editorille ja asusteiden esikatselukuville, samoin kuin Scratch 2.0:ssa.", + "editor-compact/@info-hide-icons-update": "Käytä \"Mukautettava valikkorivi\" -lisäosaa piilottaaksesi valikkorivin kuvakkeet.", + "editor-compact/@name": "Kompakti editori", + "editor-compact/@settings-name-hideLabels": "Piilota asuste- ja äänieditorin painikkeiden otsikot", "editor-theme3/@description": "Muokkaa kunkin luokan lohkovärejä editorissa.", "editor-theme3/@info-aboutHighContrast": "Uusista korkean kontrastin lohkoväreistä on alla saatavilla esiasetus.", "editor-theme3/@info-disablesMenuBar": "Jos tahdot käyttää Scratchin \"Väritila\"-valikkoa, poista tämä ominaisuus käytöstä.", @@ -234,6 +245,8 @@ "custom-zoom/@settings-select-speed-long": "Hitaasti", "custom-zoom/@settings-select-speed-none": "Heti", "custom-zoom/@settings-select-speed-short": "Nopeasti", + "copy-reporter/@description": "Lisää mahdollisuuden kopioida muuuttujien näytinten (hiiren oikeaa näppäintä painamalla avautuvasta pudotusvalikosta) ja lohkojen ilmoituskuplien kertomia arvoja.", + "copy-reporter/@name": "Ilmoitettujen arvojen kopioiminen", "initialise-sprite-position/@description": "Määritä, minne vasta luodut hahmot sijoitetaan esiintymislavalla.", "initialise-sprite-position/@name": "Mukautettava uuden hahmon sijainti", "initialise-sprite-position/@settings-name-x": "X-sijainti", @@ -323,6 +336,25 @@ "number-pad/@description": "Näytä Scratchin virtuaalinen numeronäppäimistö kaikilla laitteilla lohkojen numerokenttiä muokatessa sen sijaan, että näppäimistö näytettäisiin ainoastaan kosketusnäytöllisillä laitteilla.", "number-pad/@info-explanation": "Numeronäppäimistö ilmestyy, kun lohkojen, kuten \"liiku () askelta\", numerokenttiä muokataan.", "number-pad/@name": "Näytä aina numeronäppäimistö", + "editor-number-arrow-keys/@description": "Kasvata tai pienennä niin lohkojen kuin hahmon ominaisuusalueen numerokenttien lukuarvoja ylä- ja alanuolinäppäimellä.", + "editor-number-arrow-keys/@name": "Editorin lukuarvojen kasvattaminen ja pienentäminen nuolinäppäimillä", + "editor-number-arrow-keys/@settings-name-alt": "Muutos painalluksella Alt+nuoli", + "editor-number-arrow-keys/@settings-name-altCustom": "Muutos painalluksella Alt+nuoli", + "editor-number-arrow-keys/@settings-name-regular": "Muutos tavallisella painalluksella", + "editor-number-arrow-keys/@settings-name-regularCustom": "Muutos tavallisella painalluksella", + "editor-number-arrow-keys/@settings-name-shift": "Muutos painalluksella vaihto+nuoli", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Muutos painalluksella vaihto+nuoli", + "editor-number-arrow-keys/@settings-name-useCustom": "Käytä muokattavia arvoja", + "editor-number-arrow-keys/@settings-select-alt-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-alt-none": "Ei mitään", + "editor-number-arrow-keys/@settings-select-alt-tenth": "0,1", + "editor-number-arrow-keys/@settings-select-regular-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-regular-none": "Ei mitään", + "editor-number-arrow-keys/@settings-select-regular-tenth": "0,1", + "editor-number-arrow-keys/@settings-select-shift-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-shift-none": "Ei mitään", + "editor-number-arrow-keys/@settings-select-shift-tenth": "0,1", + "editor-number-arrow-keys/@update": "Nyt voit säätää myös muitakin kuin lohkojen syöttökenttiä, kuten hahmon ominaisuuksia, ja arvot ovat täysin muokattavissa.", "script-snap/@description": "Vedä skripti kohdistaaksesi sen sijainnin automaattisesti koodialueen pisteisiin.", "script-snap/@name": "Kiinnitä skriptit ruudukkoon", "script-snap/@preset-name-default": "Oletus", diff --git a/src/addons/addons-l10n-settings/fr.json b/src/addons/addons-l10n-settings/fr.json index 01073ee5cf0..aa843d3589e 100644 --- a/src/addons/addons-l10n-settings/fr.json +++ b/src/addons/addons-l10n-settings/fr.json @@ -121,6 +121,9 @@ "bitmap-copy/@name": "Copie des images bitmap", "2d-color-picker/@description": "Remplace les curseurs de saturation et de luminosité par un sélecteur de couleurs 2D. Maintenez Maj. enfoncé tout en déplaçant le curseur pour changer les valeurs sur un seul axe.", "2d-color-picker/@name": "Sélecteur de couleurs 2D", + "paint-skew/@description": "Maintenez la touche Ctrl enfoncée lorsque vous mettez un objet à l'échelle sur ses côtés pour l'incliner. Maintenez la touche Alt enfoncée lorsque vous inclinez un objet pour l'incliner à partir de son centre.", + "paint-skew/@info-useCmdOnMac": "Sur macOS, utilisez la touche Commande au lieu de la touche Contrôle et la touche Option au lieu de la touche Alt.", + "paint-skew/@name": "Inclinaison dans l'éditeur de costumes ", "better-img-uploads/@description": "Ajoute un nouveau bouton au-dessus du bouton \"importer un costume\" qui convertit automatiquement les images bitmap téléchargées en images SVG (vecteur) pour éviter de perdre en qualité.", "better-img-uploads/@info-notSuitableEdit": "Évitez d'utiliser le bouton de téléchargement HD si vous prévoyez de modifier l'image après le téléchargement.", "better-img-uploads/@name": "Charger des images en HD", @@ -142,12 +145,19 @@ "custom-block-shape/@settings-name-cornerSize": "Taille des coins (0-300%)", "custom-block-shape/@settings-name-notchSize": "Hauteur de l'entaille (0-150%)", "custom-block-shape/@settings-name-paddingSize": "Taille de la marge (50-200%)", + "editor-square-inputs/@description": "Rendre les entrées de blocs de texte et de couleur rectangulaires au lieu de carrées comme dans Scratch 2.0.", + "editor-square-inputs/@name": "Entrées de blocs de texte carrées", + "editor-square-inputs/@settings-name-color": "Entrées de couleurs", + "editor-square-inputs/@settings-name-text": "Entrées de textes", "zebra-striping/@description": "Fait alterner les blocs de la même catégorie entre des nuances plus claires et plus foncées lorsqu'ils sont imbriqués les uns dans les autres. Ceci est également connu sous le nom de \"rayures zébrées\" (\"zebra striping\" en Anglais).", "zebra-striping/@name": "Alternance de la couleur des blocs imbriqués", "zebra-striping/@settings-name-intensity": "Intensité (0-100%)", "zebra-striping/@settings-name-shade": "Ombre", "zebra-striping/@settings-select-shade-darker": "Plus sombre", "zebra-striping/@settings-select-shade-lighter": "Plus clair", + "editor-compact/@description": "Réduit la taille des boutons, des champs de saisie, de la barre de menu et d'autres éléments de l'éditeur, libérant ainsi de l'espace pour des composants tels que la zone de code, l'éditeur de costumes et les aperçus de costumes, comme c'était le cas dans Scratch 2.0.", + "editor-compact/@name": "Éditeur compact", + "editor-compact/@settings-name-hideLabels": "Masquer les étiquettes des boutons dans l'éditeur de costumes et de sons", "editor-theme3/@description": "Personnalisez la couleur des blocs pour chaque catégorie de bloc dans l'éditeur.", "editor-theme3/@info-aboutHighContrast": "Les nouvelles couleurs de bloc à contraste élevé sont disponibles sous forme de préréglage ci-dessous.", "editor-theme3/@info-disablesMenuBar": "Si vous souhaitez accéder au menu \"Mode couleur\" de Scratch, désactivez cette fonction.", @@ -244,6 +254,8 @@ "custom-zoom/@settings-select-speed-long": "Lent", "custom-zoom/@settings-select-speed-none": "Instantané", "custom-zoom/@settings-select-speed-short": "Rapide", + "copy-reporter/@description": "Ajoute une option pour copier les valeurs affichées par les moniteurs de variables (à partir du menu contextuel du clic droit) et les bulles des blocs rapporteurs.", + "copy-reporter/@name": "Copier la valeur du bloc rapporteur", "initialise-sprite-position/@description": "Modifie l'emplacement des sprites nouvellement créés sur la scène.", "initialise-sprite-position/@name": "Position d'un nouveau sprite personnalisable", "initialise-sprite-position/@settings-name-duplicate": "Position de duplication des sprites", @@ -333,6 +345,25 @@ "number-pad/@description": "Afficher le pavé numérique virtuel de Scratch lors de la modification des champs numériques dans les blocs sur tous les appareils, au lieu des seuls appareils à écran tactile.", "number-pad/@info-explanation": "Un pavé numérique apparaîtra lors de l’édition des entrées de nombres à partir de blocs tels que \"déplacer () étapes\".", "number-pad/@name": "Toujours afficher le pavé numérique", + "editor-number-arrow-keys/@description": "Utilisez les touches fléchées haut et bas pour augmenter ou diminuer les valeurs des champs de saisie tels que ceux des blocs ou de la zone de propriétés des sprites.", + "editor-number-arrow-keys/@name": "Incrémentation avec les touches fléchées dans l'éditeur", + "editor-number-arrow-keys/@settings-name-alt": "Modifier avec Alt + Touche", + "editor-number-arrow-keys/@settings-name-altCustom": "Modifier avec Alt+Touche", + "editor-number-arrow-keys/@settings-name-regular": "Modifier en cas d'appui régulier sur une touche", + "editor-number-arrow-keys/@settings-name-regularCustom": "Modifier en cas d'appui régulier sur une touche", + "editor-number-arrow-keys/@settings-name-shift": "Modifier avec Maj + Touche", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Modifier avec Maj+Touche", + "editor-number-arrow-keys/@settings-name-useCustom": "Utiliser des valeurs personnalisées", + "editor-number-arrow-keys/@settings-select-alt-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-alt-none": "Aucun", + "editor-number-arrow-keys/@settings-select-alt-tenth": "0,1", + "editor-number-arrow-keys/@settings-select-regular-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-regular-none": "Aucun", + "editor-number-arrow-keys/@settings-select-regular-tenth": "0,1", + "editor-number-arrow-keys/@settings-select-shift-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-shift-none": "Aucun", + "editor-number-arrow-keys/@settings-select-shift-tenth": "0,1", + "editor-number-arrow-keys/@update": "Vous pouvez désormais incrémenter les champs de saisie qui ne sont pas dans des blocs, comme les propriétés des sprites, et personnaliser entièrement les valeurs.", "script-snap/@description": "Les script vont automatiquement s'aligner sur les points de l'arrière-plan.", "script-snap/@name": "Aligner les scripts sur la grille", "script-snap/@preset-name-default": "Par défaut", diff --git a/src/addons/addons-l10n-settings/hu.json b/src/addons/addons-l10n-settings/hu.json index b1603f0dc13..3d4b8e00926 100644 --- a/src/addons/addons-l10n-settings/hu.json +++ b/src/addons/addons-l10n-settings/hu.json @@ -231,6 +231,8 @@ "custom-zoom/@settings-select-speed-long": "Lassú", "custom-zoom/@settings-select-speed-none": "Azonnali", "custom-zoom/@settings-select-speed-short": "Gyors", + "copy-reporter/@description": "Lehetőséget ad az értékblokkok felugró lufijainak és a változómonitorok értékeinek kimásolására (jobb egeres helyi menüből érhető el)", + "copy-reporter/@name": "Értékblokkok értékének másolása", "initialise-sprite-position/@name": "Személyre szabható pozíció az új szereplőknek", "initialise-sprite-position/@settings-name-x": "X pozíció", "initialise-sprite-position/@settings-name-y": "Y pozíció", diff --git a/src/addons/addons-l10n-settings/it.json b/src/addons/addons-l10n-settings/it.json index cb3be7a0f69..8b2372227b4 100644 --- a/src/addons/addons-l10n-settings/it.json +++ b/src/addons/addons-l10n-settings/it.json @@ -121,6 +121,9 @@ "bitmap-copy/@name": "Copia immagini bitmap", "2d-color-picker/@description": "Sostituisce i cursori della saturazione e della luminosità con un selettore colori 2D. Tieni premuto Shift mentre trascini il cursore per cambiare i valori su un solo asse.", "2d-color-picker/@name": "Selettore colori 2D", + "paint-skew/@description": "Per distorcere un oggetto, tieni premuto il tasto Ctrl mentre lo ridimensioni trasciandone le maniglie sui lati. Per distorcerlo rispetto al centro, tieni premuto Alt mentre lo distorci. ", + "paint-skew/@info-useCmdOnMac": "Su macOS, usa il tasto Command key invece del tasto Control e il tasto Option invece del tasto Alt.", + "paint-skew/@name": "Distorsione nell'editor dei costumi", "better-img-uploads/@description": "Aggiunge un pulsante sopra il pulsante \"carica costume\" che converte automaticamente le immagini bitmap in immagini SVG (vettoriali) durante il caricamento per evitare di perdere qualità.", "better-img-uploads/@info-notSuitableEdit": "Evita di usare il pulsante \"carica HD\" se vuoi modificare l'immagine dopo averla caricata.", "better-img-uploads/@name": "Caricamento di immagini HD", @@ -144,12 +147,20 @@ "custom-block-shape/@settings-name-cornerSize": "Dimensione angoli (0-300%)", "custom-block-shape/@settings-name-notchSize": "Altezza agganci (0-150%)", "custom-block-shape/@settings-name-paddingSize": "Spaziatura interna (50-200%)", + "editor-square-inputs/@description": "Permette di rendere squadrate le caselle dei blocchi per il testo e i colori invece che arrotondate, come in Scratch 2.0. ", + "editor-square-inputs/@name": "Caselle dei blocchi squadrate", + "editor-square-inputs/@settings-name-color": "Caselle dei colori", + "editor-square-inputs/@settings-name-text": "Caselle di testo", "zebra-striping/@description": "Rende i blocchi della stessa categoria più chiari o più scuri quando sono annidati uno dentro l'altro. E' conosciuto anche come \"zebra striping\".", "zebra-striping/@name": "Colorazione alternata dei blocchi annidati. ", "zebra-striping/@settings-name-intensity": "Intensità (0-100%)", "zebra-striping/@settings-name-shade": "Tonalità", "zebra-striping/@settings-select-shade-darker": "Più scuro", "zebra-striping/@settings-select-shade-lighter": "Più chiaro", + "editor-compact/@description": "Riduce la dimensione dei pulsanti, delle caselle di testo, della barra dei menu e di altri elementi dell'editor, lasciando più spazio per l'area del codice, l'editor dei costumi e le anteprime dei costumi, come in Scratch 2.0.", + "editor-compact/@info-hide-icons-update": "Per nascondere le icone della barra dei menu usa l'addon \"Barra dei menu personalizzabile\"", + "editor-compact/@name": "Editor compatto", + "editor-compact/@settings-name-hideLabels": "Nascondi le etichette dei pulsanti nell'editor dei costumi e dei suoni", "editor-theme3/@description": "Modifica i colori dei blocchi per ogni categoria nell'editor.", "editor-theme3/@info-aboutHighContrast": "i nuovi colori per blocchi ad Elevato Contrasto sono disponibili come impostazione qui sotto.", "editor-theme3/@info-disablesMenuBar": "Se vuoi accedere al menu \"Colori\" di Scratch disabilita questa opzione.", @@ -248,6 +259,8 @@ "custom-zoom/@settings-select-speed-long": "Lenta", "custom-zoom/@settings-select-speed-none": "Istantanea", "custom-zoom/@settings-select-speed-short": "Veloce", + "copy-reporter/@description": "Aggiungi l'opzione per copiare i valori dei monitor delle variabili sullo Stage (usando il menu che compare cliccando con il tasto destro) e dai fumetti dei blocchi monitor.", + "copy-reporter/@name": "Copia i valori dei monitor", "initialise-sprite-position/@description": "Cambia il modo in cui gli sprite sono piazzati sullo Stage quando vengono creati.", "initialise-sprite-position/@name": "Posizione iniziale dei nuovi sprite personalizzata", "initialise-sprite-position/@settings-name-duplicate": "Posizione degli sprite duplicati", @@ -342,6 +355,19 @@ "number-pad/@description": "Mostra il tastierino numerico virtuale su qualunque dispositivo quando si modificano gli argomenti dei blocchi, non solo sui dispositivi touch. ", "number-pad/@info-explanation": "Viene mostrato un tastierino numero quando si modificano gli argomenti di blocchi come \"fai () passi\".", "number-pad/@name": "Mostra sempre tastierino numerico", + "editor-number-arrow-keys/@description": "Usa le frecce su e giù per incrementare o diminuire i valori numerici nelle caselle come ad esempio i valori degli argomenti dei blocchi o i valori delle proprietà nell'area delle informazioni degli sprite.", + "editor-number-arrow-keys/@name": "Incremento dei valori dell’editor usando i tasti freccia", + "editor-number-arrow-keys/@settings-name-alt": "Cambiamento quando si preme Alt+Freccia", + "editor-number-arrow-keys/@settings-name-altCustom": "Cambiamento quando si preme Alt+Freccia", + "editor-number-arrow-keys/@settings-name-regular": "Cambiamento quando si preme normalmente", + "editor-number-arrow-keys/@settings-name-regularCustom": "Cambiamento quando si preme normalmente", + "editor-number-arrow-keys/@settings-name-shift": " Cambiamento quando si preme Shift+Freccia", + "editor-number-arrow-keys/@settings-name-shiftCustom": " Cambiamento quando si preme Shift+Freccia", + "editor-number-arrow-keys/@settings-name-useCustom": "Usa valori personalizzati", + "editor-number-arrow-keys/@settings-select-alt-none": "Nessuno", + "editor-number-arrow-keys/@settings-select-regular-none": "Nessuno", + "editor-number-arrow-keys/@settings-select-shift-none": "Nessuno", + "editor-number-arrow-keys/@update": "Puoi ora modificare i valori delle caselle che non sono contenute nei blocchi, ad esempio i valori dell'area informazioni, e personalizzarli completamente.", "script-snap/@description": "Trascina uno script per allinearlo automaticamente ai puntini presenti nell'area del codice.", "script-snap/@name": "Aggancia gli script alla griglia", "script-snap/@preset-name-default": "Predefinito", diff --git a/src/addons/addons-l10n-settings/ja.json b/src/addons/addons-l10n-settings/ja.json index e802b40993c..30df5d2b405 100644 --- a/src/addons/addons-l10n-settings/ja.json +++ b/src/addons/addons-l10n-settings/ja.json @@ -122,6 +122,9 @@ "bitmap-copy/@name": "ビットマップ画像をコピー", "2d-color-picker/@description": "コスチュームエディターの鮮やかさと明るさのスライダーを2Dカラーピッカーにする。Shiftキーを押して一方のみを変更する。", "2d-color-picker/@name": "2D カラーピッカー", + "paint-skew/@description": "コスチュームエディターで図形の端をつかんでCtrlキーを押し、図形を変形させる。Altキーを押しながら行うと、中心からせん断できる。", + "paint-skew/@info-useCmdOnMac": "macOSでは、Altキーの代わりにOptionキーを、Ctrlキーの代わりにCmdキーを利用できます。", + "paint-skew/@name": "画像剪断", "better-img-uploads/@description": "「コスチュームをアップロード」ボタンの上に、画像を自動的にSVGに変換して画質を保つ「HDアップロード」ボタンを追加する。", "better-img-uploads/@info-notSuitableEdit": "このアドオンを使ってアップロードした画像は、編集には適しません。", "better-img-uploads/@name": "画像のHD アップロード", @@ -149,6 +152,9 @@ "zebra-striping/@settings-name-shade": "明るさ", "zebra-striping/@settings-select-shade-darker": "暗く", "zebra-striping/@settings-select-shade-lighter": "明るく", + "editor-compact/@description": "Scratch 2.0のように、エディターのボタン、入力、メニューバーなどのサイズを小さくし、コードエリア、コスチュームエディター、コスチュームプレビューなどのスペースを大きくする。", + "editor-compact/@name": "コンパクトエディター", + "editor-compact/@settings-name-hideLabels": "コスチュームとサウンドエディターのボタンのラベルを隠す", "editor-theme3/@description": "ブロックの色をカテゴリーごとに変更する。", "editor-theme3/@info-aboutHighContrast": "新しいハイコントラストブロック色は以下でプリセットとして利用できます。", "editor-theme3/@info-disablesMenuBar": "Scratchの「カラーモード」メニューにアクセスしたい場合は、この機能は無効化してください。", @@ -244,6 +250,8 @@ "custom-zoom/@settings-select-speed-long": "遅く", "custom-zoom/@settings-select-speed-none": "即時", "custom-zoom/@settings-select-speed-short": "速く", + "copy-reporter/@description": "変数モニターの値を右クリックメニューからコピーしたり、値ブロックのバルーンからコピーしたりする。", + "copy-reporter/@name": "ステージモニターの値をコピー", "initialise-sprite-position/@description": "新しいスプライトのデフォルトの座標を変更する。", "initialise-sprite-position/@name": "新しいスプライトの位置を変更", "initialise-sprite-position/@settings-name-duplicate": "スプライト複製時の位置", @@ -338,6 +346,19 @@ "number-pad/@description": "ブロックの数値を編集するときに、Scratchのナンバーパッド入力をタッチスクリーンデバイス以外のすべてのデバイスで表示する。", "number-pad/@info-explanation": "「() 歩動かす」ブロックなどの数値を変えるときに、ナンバーパッドが表示されるようになります。", "number-pad/@name": "ナンバーパッドを常に表示", + "editor-number-arrow-keys/@description": "ブロック入力やスプライトペインの入力などの数値を上下キーで変更する。", + "editor-number-arrow-keys/@name": "矢印キーで数値を変更", + "editor-number-arrow-keys/@settings-name-alt": "Altキー押下時の変更値", + "editor-number-arrow-keys/@settings-name-altCustom": "Altキーでの増減値", + "editor-number-arrow-keys/@settings-name-regular": "通常のキーでの変更値", + "editor-number-arrow-keys/@settings-name-regularCustom": "通常のキーでの増減値", + "editor-number-arrow-keys/@settings-name-shift": "Shiftキー押下時の変更値", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Shiftキーでの増減値", + "editor-number-arrow-keys/@settings-name-useCustom": "カスタムの値を使用", + "editor-number-arrow-keys/@settings-select-alt-none": "なし", + "editor-number-arrow-keys/@settings-select-regular-none": "なし", + "editor-number-arrow-keys/@settings-select-shift-none": "なし", + "editor-number-arrow-keys/@update": "スプライトペインなど、ブロック以外の数値入力を変更できるようになり、値のカスタマイズもできるようになりました。", "script-snap/@description": "スクリプトをドラッグして、コードエリアのドットに整列させる。", "script-snap/@name": "スクリプトを整列", "script-snap/@preset-name-default": "デフォルト", diff --git a/src/addons/addons-l10n-settings/ko.json b/src/addons/addons-l10n-settings/ko.json index 7f90215093c..3176c4e87fb 100644 --- a/src/addons/addons-l10n-settings/ko.json +++ b/src/addons/addons-l10n-settings/ko.json @@ -133,6 +133,8 @@ "zebra-striping/@settings-name-shade": "어둡게", "zebra-striping/@settings-select-shade-darker": "어둡게", "zebra-striping/@settings-select-shade-lighter": "더 밝게", + "editor-compact/@description": "Scratch 2.0 처럼 코드 영역, 모양 편집기, 의상 미리보기와 같은 구성 요소를 위한 더 많은 공간을 만들기 위해 편집기의 버튼, 입력 필드, 메뉴 표시줄 및 기타 요소의 크기를 줄입니다.", + "editor-compact/@settings-name-hideLabels": "모양 및 소리 편집기에서 버튼 라벨 숨기기", "editor-theme3/@description": "편집기의 각 카테고리에 대한 블록 색상을 편집합니다.", "editor-theme3/@info-aboutHighContrast": "새로운 고대비 블록 색상은 아래의 사전 설정으로 제공됩니다.", "editor-theme3/@info-disablesMenuBar": "스크래치의 \"색상 모드\" 메뉴에 액세스하려면 이 기능을 비활성화하세요.", @@ -313,6 +315,7 @@ "columns/@description": "블럭 카테고리 메뉴를 두 줄로 쪼개 스크래치 2.0처럼 블록 팔레트의 맨 위로 옮깁니다.", "columns/@name": "2열 카테고리 메뉴", "number-pad/@name": "숫자 패드 항상 보이기", + "editor-number-arrow-keys/@settings-name-shift": "쉬프트 + 키에서 바꾸기", "script-snap/@description": "스크립트를 드래그해 코드 영역 점에 자동으로 정렬합니다.", "script-snap/@name": "스크립트를 격자에 맟추기", "script-snap/@preset-name-default": "기본", diff --git a/src/addons/addons-l10n-settings/nl.json b/src/addons/addons-l10n-settings/nl.json index 2da98df894e..66c2e7f1cd8 100644 --- a/src/addons/addons-l10n-settings/nl.json +++ b/src/addons/addons-l10n-settings/nl.json @@ -121,6 +121,9 @@ "bitmap-copy/@name": "Bitmapafbeeldingen kopiëren", "2d-color-picker/@description": "Vervangt verzadiging- en helderheidschuifregelaars in de uiterlijkeditor met een 2D-kleurenkiezer. Houd Shift ingedrukt en beweeg de muisaanwijzer om de waarden op een enkele as te veranderen.", "2d-color-picker/@name": "2D-kleurenkiezer", + "paint-skew/@description": "Houd Ctrl ingedrukt terwijl je de schaal van een object aan een zijkant verandert om het scheef te trekken. Houd Alt ingedrukt tijdens het scheeftrekken om het middelpunt van het object op dezelfde plek te houden.", + "paint-skew/@info-useCmdOnMac": "Gebruik op macOS de Command-toets i.p.v. Control en de Option-toets i.p.v. Alt.", + "paint-skew/@name": "Objecten scheeftrekken in uiterlijkeditor", "better-img-uploads/@description": "Voegt een nieuwe knop toe boven de \"upload uiterlijk\"-knop die geüploade bitmapafbeeldingen automatisch converteert naar SVG (vector)-afbeeldingen om de kwaliteit te behouden.", "better-img-uploads/@info-notSuitableEdit": "Vermijd het gebruiken van de HD-uploadknop als je later nog de afbeelding wilt bewerken.", "better-img-uploads/@name": "HD-afbeelding uploads", @@ -144,12 +147,20 @@ "custom-block-shape/@settings-name-cornerSize": "Hoekafronding (0-300%)", "custom-block-shape/@settings-name-notchSize": "Inkepingshoogte (0-150%)", "custom-block-shape/@settings-name-paddingSize": "Opvulling (50-200%)", + "editor-square-inputs/@description": "Maakt invoervelden voor tekst en kleur in blokken rechthoekig i.p.v. rond, zoals in Scratch 2.0.", + "editor-square-inputs/@name": "Rechthoekige tekst-invoervelden in blokken", + "editor-square-inputs/@settings-name-color": "Kleur-invoervelden", + "editor-square-inputs/@settings-name-text": "Tekst-invoervelden", "zebra-striping/@description": "Wisselt de tinten van blokken met dezelfde kleur tussen licht en donker af wanneer ze in elkaar genest zijn. Dit staat ook bekend als zebrastrepen.", "zebra-striping/@name": "Afwisselende kleuren van geneste blokken", "zebra-striping/@settings-name-intensity": "Intensiteit (0-100%)", "zebra-striping/@settings-name-shade": "Tint", "zebra-striping/@settings-select-shade-darker": "Donkerder", "zebra-striping/@settings-select-shade-lighter": "Lichter", + "editor-compact/@description": "Verkleint knoppen, invoervelden, de menubalk en andere elementen in de editor, zodat delen zoals het codegebied, de uiterlijkeditor en uiterlijkvoorbeelden meer ruimte hebben zoals het was in Scratch 2.0.", + "editor-compact/@info-hide-icons-update": "Gebruik de addon \"Aanpasbare menubalk\" om pictogrammen in de menubalk te verbergen.", + "editor-compact/@name": "Compacte editor", + "editor-compact/@settings-name-hideLabels": "Knoplabels verbergen in uiterlijk- en geluidseditor", "editor-theme3/@description": "Pas blokkleuren aan voor elke categorie in de editor.", "editor-theme3/@info-aboutHighContrast": "De nieuwe blokkleuren met hoog contrast zijn hieronder beschikbaar als een voorinstelling.", "editor-theme3/@info-disablesMenuBar": "Als je de \"Kleurstand\" van Scratch wilt gebruiken, schakel dit dan uit.", @@ -247,6 +258,8 @@ "custom-zoom/@settings-select-speed-long": "Traag", "custom-zoom/@settings-select-speed-none": "Meteen", "custom-zoom/@settings-select-speed-short": "Vlug", + "copy-reporter/@description": "Geeft je de mogelijkheid om waarden die worden weergegeven door variabelemonitoren (in het rechterklikmenu) en waardeballonnen te kopiëren.", + "copy-reporter/@name": "Waarden van waardeblokken kopiëren", "initialise-sprite-position/@description": "Pas aan waar nieuwe sprites worden geplaatst op het speelveld.", "initialise-sprite-position/@name": "Aanpasbare positie van nieuwe sprite", "initialise-sprite-position/@settings-name-duplicate": "Positie van gedupliceerde sprites", @@ -340,6 +353,25 @@ "number-pad/@description": "Geef het virtuele getallenpaneel op alle apparaten weer tijdens het bewerken van een getal in een blok, in plaats van alleen op touchscreenapparaten.", "number-pad/@info-explanation": "Een getallenpaneel komt tevoorschijn wanneer je een getal-input van een blok bewerkt, zoals \"neem () stappen\".", "number-pad/@name": "Getallenpaneel altijd weergeven", + "editor-number-arrow-keys/@description": "Gebruik de pijltjes voor omhoog en omlaag om getalwaarden van invoervelden te verhogen of te verlagen, bijv. in blokken of de sprite-eigenschappen.", + "editor-number-arrow-keys/@name": "Waarden aanpassen met pijltjestoetsen in editor", + "editor-number-arrow-keys/@settings-name-alt": "Verander bij Alt+Toets", + "editor-number-arrow-keys/@settings-name-altCustom": "Verandering bij Alt+Toets", + "editor-number-arrow-keys/@settings-name-regular": "Verander bij indrukken van normale toets", + "editor-number-arrow-keys/@settings-name-regularCustom": "Verandering bij normaal indrukken van toets", + "editor-number-arrow-keys/@settings-name-shift": "Verander bij Shift+Toets", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Verandering bij Shift+Toets", + "editor-number-arrow-keys/@settings-name-useCustom": "Aangepaste waarden gebruiken", + "editor-number-arrow-keys/@settings-select-alt-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-alt-none": "Geen", + "editor-number-arrow-keys/@settings-select-alt-tenth": "0,1", + "editor-number-arrow-keys/@settings-select-regular-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-regular-none": "Geen", + "editor-number-arrow-keys/@settings-select-regular-tenth": "0,1", + "editor-number-arrow-keys/@settings-select-shift-hundredth": "0,01", + "editor-number-arrow-keys/@settings-select-shift-none": "Geen", + "editor-number-arrow-keys/@settings-select-shift-tenth": "0,1", + "editor-number-arrow-keys/@update": "Het is nu mogelijk om invoervelden te verhogen of te verlagen die niet alleen in blokken zitten, zoals de sprite-eigenschappen, en je kan de waarden volledig aanpassen.", "script-snap/@description": "Sleep een script om zijn positie automatisch uit te lijnen op de codegebied-stippen.", "script-snap/@name": "Scripts uitlijnen op raster", "script-snap/@preset-name-default": "Standaard", diff --git a/src/addons/addons-l10n-settings/pl.json b/src/addons/addons-l10n-settings/pl.json index 56448de9a7b..5b1b1d7aeee 100644 --- a/src/addons/addons-l10n-settings/pl.json +++ b/src/addons/addons-l10n-settings/pl.json @@ -119,6 +119,7 @@ "zebra-striping/@settings-name-shade": "Cień", "zebra-striping/@settings-select-shade-darker": "Ciemniej", "zebra-striping/@settings-select-shade-lighter": "Jaśniej", + "editor-compact/@name": "Kompaktowy Edytor", "editor-theme3/@description": "Edytuj kolory bloków dla każdej kategorii w edytorze.", "editor-theme3/@info-aboutHighContrast": "Nowe wysokokontrastowe bloki są dostępne jako preset poniżej.", "editor-theme3/@info-disablesMenuBar": "Jeżeli chcesz uzyskać menu \"Tryb Kolorów\", wyłącz tą funkcję.", @@ -293,6 +294,7 @@ "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": "Menu kategorii podzielone na 2 kolumny", "number-pad/@name": "Zawsze pokazuj klawiaturę numeryczną", + "editor-number-arrow-keys/@settings-select-alt-none": "Brak", "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", diff --git a/src/addons/addons-l10n-settings/pt.json b/src/addons/addons-l10n-settings/pt.json index 54659158efd..7e6a5f1df4b 100644 --- a/src/addons/addons-l10n-settings/pt.json +++ b/src/addons/addons-l10n-settings/pt.json @@ -201,6 +201,7 @@ "custom-zoom/@settings-select-speed-long": "Lento", "custom-zoom/@settings-select-speed-none": "Imediato", "custom-zoom/@settings-select-speed-short": "Rápido", + "copy-reporter/@name": "Copiar valores reportados", "initialise-sprite-position/@name": "Posição padrão customizável para novos atores", "initialise-sprite-position/@settings-name-x": "Posição X", "initialise-sprite-position/@settings-name-y": "Posição Y", diff --git a/src/addons/addons-l10n-settings/ru.json b/src/addons/addons-l10n-settings/ru.json index f0ee897efb5..c4dbf4d54a6 100644 --- a/src/addons/addons-l10n-settings/ru.json +++ b/src/addons/addons-l10n-settings/ru.json @@ -105,6 +105,9 @@ "bitmap-copy/@name": "Копирование растровых изображений", "2d-color-picker/@description": "Заменяет ползунки насыщенности и яркости в редакторе костюмов двухмерной палитрой цветов. Удерживая нажатой клавишу Shift, перетащите курсор, чтобы изменить значения на одной оси.", "2d-color-picker/@name": "2D-палитра цветов", + "paint-skew/@description": "Держите Ctrl во время масштабирования объекта чтобы перекосить его. Зажмите Alt во время перекоса объекта чтобы перекосить его от центра.", + "paint-skew/@info-useCmdOnMac": "На macOS, используйте клавишу Command вместо клавиши Ctrl и клавишу Option вместо Alt.", + "paint-skew/@name": "Перекос в редакторе костюмов", "better-img-uploads/@description": "Добавляет новую кнопку над кнопкой \"загрузить костюм\", которая автоматически преобразует загруженные растровые изображения в изображения SVG (векторные), чтобы избежать потери качества.", "better-img-uploads/@info-notSuitableEdit": "Избегайте использования кнопки HD загрузки, если вы планируете редактировать изображение после загрузки.", "better-img-uploads/@name": "HD загрузка изображений", @@ -132,6 +135,9 @@ "zebra-striping/@settings-name-shade": "Оттенок", "zebra-striping/@settings-select-shade-darker": "затемнение", "zebra-striping/@settings-select-shade-lighter": "Яркость", + "editor-compact/@description": "Уменьшает размер кнопок, полей ввода, панель меню, и другие части редактора, добавляя свободное место для панели кода, редактора костюмов и предпросмотра костюмов, как было в Scratch 2.0", + "editor-compact/@name": "Компактный редактор", + "editor-compact/@settings-name-hideLabels": "Скрыть названия кнопок в редакторах костюмов и звуков", "editor-theme3/@description": "Отредактируйте цвета блоков для каждой категории в редакторе.", "editor-theme3/@info-aboutHighContrast": "Новые высококонтрастные цвета блоков доступны в качестве предустановки ниже.", "editor-theme3/@info-disablesMenuBar": "Если вы хотите получить доступ к меню \"Цветовой режим\" Scratch, отключите эту функцию.", @@ -227,6 +233,8 @@ "custom-zoom/@settings-select-speed-long": "Медленная", "custom-zoom/@settings-select-speed-none": "Моментальная", "custom-zoom/@settings-select-speed-short": "Быстрая", + "copy-reporter/@description": "Добавляет возможность копировать значение переменной (через контекстное меню) и вывод значений блоков.", + "copy-reporter/@name": "Копировать значения вывода", "initialise-sprite-position/@name": "Настраиваемая позиция нового спрайта", "initialise-sprite-position/@settings-name-x": "Позиция X", "initialise-sprite-position/@settings-name-y": "Позиция Y", @@ -310,6 +318,19 @@ "columns/@description": "Разделяет меню категорий блоков на два столбца и перемещает его в верхнюю часть палитры блоков, как в Scratch 2.0.", "columns/@name": "Меню категорий с двумя столбцами", "number-pad/@name": "Всегда показывать панель с цифрами", + "editor-number-arrow-keys/@description": "Используйте клавиши со стрелками \"вверх и вниз\" чтобы увеличить или уменьшить числа в числовых входах, таких как поля в блоках или область свойств спрайта.", + "editor-number-arrow-keys/@name": "Увеличение с помощью клавиш со стрелками", + "editor-number-arrow-keys/@settings-name-alt": "Изменение при нажатии Alt + Клавиша", + "editor-number-arrow-keys/@settings-name-altCustom": "Изменение при нажатии Alt + Клавиша", + "editor-number-arrow-keys/@settings-name-regular": "Изменение при обычном нажатии клавиш", + "editor-number-arrow-keys/@settings-name-regularCustom": "Изменение при обычном нажатии клавиш", + "editor-number-arrow-keys/@settings-name-shift": "Изменение при нажатии Shift + Клавиша", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Изменение при нажатии Shift + Клавиша", + "editor-number-arrow-keys/@settings-name-useCustom": "Использовать настраиваемые значения", + "editor-number-arrow-keys/@settings-select-alt-none": "Нет", + "editor-number-arrow-keys/@settings-select-regular-none": "Нет", + "editor-number-arrow-keys/@settings-select-shift-none": "Нет", + "editor-number-arrow-keys/@update": "Вы теперь можете увеличиавть числовые поля ввода, которые не находятся в блоках, например свойства спрайтов, и полностью настраивать значения.", "script-snap/@description": "Передвиньте скрипт, чтобы автоматически выравнять его позицию к точкам на территории кода.", "script-snap/@name": "Привязывать скрипты к сетке", "script-snap/@preset-name-default": "По умолчанию", diff --git a/src/addons/addons-l10n-settings/sl.json b/src/addons/addons-l10n-settings/sl.json index 03643d42690..505133481f9 100644 --- a/src/addons/addons-l10n-settings/sl.json +++ b/src/addons/addons-l10n-settings/sl.json @@ -121,6 +121,9 @@ "bitmap-copy/@name": "Kopiranje bitnih slik", "2d-color-picker/@description": "Zamenja drsnika za svetlost in nasičenost barv v urejevalniku videzov z 2D drsnikom. Držite tipko Shift med vlečenjem, da spremenite samo vrednost ene osi.", "2d-color-picker/@name": "2D izbira barv", + "paint-skew/@description": "Držite Ctrl in premaknite stranico predmeta, da spremenite nagib. Držite Ctrl in Alt, da ohranite položaj središča.", + "paint-skew/@info-useCmdOnMac": "Če uporabljate macOS, uporabite tipko Command namesto Control in Option namesto Alt.", + "paint-skew/@name": "Nagib v urejevalniku videzov", "better-img-uploads/@description": "Doda nov gumb nad \"naloži videz\", ki samodejno spremeni naložene slike v obliko SVG (vektor), da se izogne zmanjšanju kakovosti.", "better-img-uploads/@info-notSuitableEdit": "Gumba \"naloži HD\" ne uporabljajte, če bi radi naloženo sliko urejali.", "better-img-uploads/@name": "Nalaganje HD slik", @@ -144,12 +147,20 @@ "custom-block-shape/@settings-name-cornerSize": "Zaobljenost robov (0-300%)", "custom-block-shape/@settings-name-notchSize": "Višina zareze (0-150%)", "custom-block-shape/@settings-name-paddingSize": "Velikost praznega prostora (50-200%)", + "editor-square-inputs/@description": "Okrogla polja za vnos besedila in izbiro barv na blokih naredi pravokotna, kot v Scratchu 2.0.", + "editor-square-inputs/@name": "Kvadratna polja za vnos besedila v bloke", + "editor-square-inputs/@settings-name-color": "Polja za izbiro barve", + "editor-square-inputs/@settings-name-text": "Polja za vnos besedila", "zebra-striping/@description": "Bloke iste kategorije pobarva izmenično s svetlejšimi in temnejšimi odtenki, kadar so postavljeni drug v drugega. To se imenuje tudi zebrine proge.", "zebra-striping/@name": "Izmenično obarvani ugnezdeni bloki", "zebra-striping/@settings-name-intensity": "Intenzivnost (0-100%)", "zebra-striping/@settings-name-shade": "Odtenek", "zebra-striping/@settings-select-shade-darker": "Temnejši", "zebra-striping/@settings-select-shade-lighter": "Svetlejši", + "editor-compact/@description": "Zmanjša velikost gumbov, polj za vnos besedila, menijske vrstice in drugih elementov v urejevalniku, da je več prostora za kodo, urejevalnik videzov, sličice figur in podobno, tako kot v Scratchu 2.0.", + "editor-compact/@info-hide-icons-update": "Za skrivanje ikon v menijski vrstici uporabite dodatek \"Prilagoditev menijske vrstice\".", + "editor-compact/@name": "Kompakten urejevalnik", + "editor-compact/@settings-name-hideLabels": "Skrij imena gumbov v urejevalniku videzov in zvokov", "editor-theme3/@description": "Uredite barve blokov za vsako kategorijo v urejevalniku.", "editor-theme3/@info-aboutHighContrast": "Nove barve blokov z večjim kontrastom so na voljo kot prednastavitev spodaj.", "editor-theme3/@info-disablesMenuBar": "Za dostop do Scratchevega menija \"Color Mode\" izključite ta dodatek.", @@ -248,6 +259,8 @@ "custom-zoom/@settings-select-speed-long": "Počasna", "custom-zoom/@settings-select-speed-none": "Trenutna", "custom-zoom/@settings-select-speed-short": "Hitra", + "copy-reporter/@description": "Doda možnost kopiranja vrednosti spremenljivk na odru (v meniju desne miškine tipke) in oblačkov okroglih blokov.", + "copy-reporter/@name": "Kopiraj vrednosti okroglih blokov", "initialise-sprite-position/@description": "Spremeni, kam na odru so postavljene nove figure.", "initialise-sprite-position/@name": "Prilagoditev položaja novih figur", "initialise-sprite-position/@settings-name-duplicate": "Položaj podvojenih figur", @@ -342,6 +355,19 @@ "number-pad/@description": "Med urejanjem polj za vnos števil v blok pokaže Scratchevo številčnico na vseh napravah, ne le na tistih z zasloni na dotik.", "number-pad/@info-explanation": "Številčnica bo prikazana med urejanjem polj za vnos števil v blokih, na primer \"pojdi () korakov\".", "number-pad/@name": "Vedno pokaži številčnico", + "editor-number-arrow-keys/@description": "Uporabite tipki s puščicama gor in dol, da povečate ali zmanjšate številčne vrednosti v poljih za vnos števil, kot so tista v blokih ali v območju z lastnostmi figur.", + "editor-number-arrow-keys/@name": "Sprememba števil v urejevalniku s puščicami", + "editor-number-arrow-keys/@settings-name-alt": "Alt+tipka", + "editor-number-arrow-keys/@settings-name-altCustom": "Alt+tipka", + "editor-number-arrow-keys/@settings-name-regular": "Sprememba ob običajnem pritisku tipke", + "editor-number-arrow-keys/@settings-name-regularCustom": "Sprememba ob običajnem pritisku tipke", + "editor-number-arrow-keys/@settings-name-shift": "Shift+tipka", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Shift+tipka", + "editor-number-arrow-keys/@settings-name-useCustom": "Uporabi druge vrednosti", + "editor-number-arrow-keys/@settings-select-alt-none": "Brez", + "editor-number-arrow-keys/@settings-select-regular-none": "Brez", + "editor-number-arrow-keys/@settings-select-shift-none": "Brez", + "editor-number-arrow-keys/@update": "Zdaj lahko puščice uporabite v lastnostih figure in drugih vnosnih poljih zunaj blokov ter nastavite poljubne vrednosti.", "script-snap/@description": "Potegnite skripto, da se njen položaj samodejno poravna s pikami na ozadju prostora za skripte.", "script-snap/@name": "Pritrdi skripte na mrežo", "script-snap/@preset-name-default": "Navadno", diff --git a/src/addons/addons-l10n-settings/tr.json b/src/addons/addons-l10n-settings/tr.json index a25a3ab57d7..3136be8a6a8 100644 --- a/src/addons/addons-l10n-settings/tr.json +++ b/src/addons/addons-l10n-settings/tr.json @@ -120,6 +120,9 @@ "bitmap-copy/@name": "Bitmap resimleri kopyala", "2d-color-picker/@description": "Kostüm düzenleyicideki doygunluk ve parlaklık kaydırıcılarını 2B renk seçiciyle değiştirir. Tek bir eksendeki değerleri değiştirmek için imleci sürüklerken Shift tuşunu basılı tutun.", "2d-color-picker/@name": "2B renk seçici", + "paint-skew/@description": "Bir nesneyi yamuklaştırmak için yanlarından ölçeklendirirken Ctrl tuşuna basılı tutun. Bir nesneyi merkezinden yamuklaştırmak için yamuklaştırırken Alt tuşuna basılı tutun.", + "paint-skew/@info-useCmdOnMac": "macOS'ta Control tuşu yerine Command tuşunu ve Alt tuşu yerine de Option tuşunu kullanın.", + "paint-skew/@name": "Kostüm düzenleyicide yamuklaştırma", "better-img-uploads/@description": "Kalite kaybını önlemek için, yüklenen bitmap görüntüleri otomatik olarak SVG (vektörel) görüntülere dönüştüren \"kostüm yükle\" düğmesinin üzerine yeni bir düğme ekler.", "better-img-uploads/@info-notSuitableEdit": "Resmi yükledikten sonra düzenlemeyi düşünüyorsanız, HD yükle düğmesini kullanmaktan kaçının.", "better-img-uploads/@name": "HD görsel yüklemeleri", @@ -141,12 +144,19 @@ "custom-block-shape/@settings-name-cornerSize": "Köşe boyutu (%0-300)", "custom-block-shape/@settings-name-notchSize": "Çentik yüksekliği (%0-150)", "custom-block-shape/@settings-name-paddingSize": "Dolgu boyutu (%50-200)", + "editor-square-inputs/@description": "Bloklardaki metin ve renk girişlerini dairesel yapmak yerine dikdörtgensel yapar. Tıpkı Scratch 2.0'da olduğu gibi.", + "editor-square-inputs/@name": "Kare blok metin girişleri", + "editor-square-inputs/@settings-name-color": "Renk girişleri", + "editor-square-inputs/@settings-name-text": "Metin girişleri", "zebra-striping/@description": "Aynı tür blokların, birbiri içine yerleştirildiğinde açık ve koyu tonlar arasında geçiş yapmasını sağlar. Bu aynı zamanda zebra çizgileri olarak da bilinir.", "zebra-striping/@name": "İç içe olan blok renklerini değiştir", "zebra-striping/@settings-name-intensity": "Yoğunluk (%0-100)", "zebra-striping/@settings-name-shade": "Ton", "zebra-striping/@settings-select-shade-darker": "Daha koyu", "zebra-striping/@settings-select-shade-lighter": "Daha açık", + "editor-compact/@description": "Scratch 2.0'da olduğu gibi düzenleyicideki butonların, girdi alanlarının, menü çubuğunun ve diğer ögelerin boyutunu büyütürken, kod alanı, kostüm düzenleyici ve kostüm ön izlemeleri gibi bileşenlerin arasında daha fazla boşluk bırakır.", + "editor-compact/@name": "Kompakt düzenleyici", + "editor-compact/@settings-name-hideLabels": "Kostüm ve ses düzenleyicide buton etiketlerini gizle", "editor-theme3/@description": "Düzenleyicide her bir kategori için blok renklerini düzenleyin.", "editor-theme3/@info-aboutHighContrast": "Yeni Yüksek Kontrastlı blok renkleri, aşağıda bir ayar olarak mevcuttur.", "editor-theme3/@info-disablesMenuBar": "Eğer Scratch'in \"Renk Modu\" menüsüne ulaşmak istiyorsanız bu özelliği devre dışı bırakın.", @@ -244,6 +254,8 @@ "custom-zoom/@settings-select-speed-long": "Yavaş", "custom-zoom/@settings-select-speed-none": "Anında", "custom-zoom/@settings-select-speed-short": "Hızlı", + "copy-reporter/@description": "Değişken ekranları tarafından görüntülenen değerleri kopyalama (sağ tıklama bağlam menüsünden) ve haberci balonlarını engelleme seçeneği ekler.", + "copy-reporter/@name": "Haberci değerlerini kopyala", "initialise-sprite-position/@description": "Yeni oluşan kuklaların sahnede olacağı yeri değiştirin.", "initialise-sprite-position/@name": "Özelleştirilebilir yeni eklenen kukla konumu", "initialise-sprite-position/@settings-name-duplicate": "Çoğaltılan kukla konumu", @@ -337,6 +349,19 @@ "number-pad/@description": "Yalnızca dokunmatik ekranlı cihazlar yerine tüm cihazlarda bloklardaki sayı alanlarını düzenlerken Scratch'in sanal sayısal tuş takımını gösterir.", "number-pad/@info-explanation": "\"() adım git\" gibi bloklardaki sayı girişlerini düzenlerken bir sayısal tuş takımı gösterir.", "number-pad/@name": "Sayısal tuş takımını her zaman göster", + "editor-number-arrow-keys/@description": "Bloklar veya karakter özellikleri alanı gibi sayısal giriş alanlarındaki sayı değerlerini arttırmak veya azaltmak için yukarı ve aşağı ok tuşlarını kullanın.", + "editor-number-arrow-keys/@name": "Düzenleyicide ok tuşuyla arttırma", + "editor-number-arrow-keys/@settings-name-alt": "Alt+Tuş yapıldığında şu kadar arttır/azalt", + "editor-number-arrow-keys/@settings-name-altCustom": "Alt+Tuş ile Değiştir", + "editor-number-arrow-keys/@settings-name-regular": "Tuşa normal basıldığında şu kadar arttır/azalt", + "editor-number-arrow-keys/@settings-name-regularCustom": "Varsayılan tuşa basıldığında değiştir", + "editor-number-arrow-keys/@settings-name-shift": "Shift+Tuş yapıldığında şu kadar arttır/azalt", + "editor-number-arrow-keys/@settings-name-shiftCustom": "Shift+Tuş ile Değiştir", + "editor-number-arrow-keys/@settings-name-useCustom": "Özel değerler kullan", + "editor-number-arrow-keys/@settings-select-alt-none": "Yapma", + "editor-number-arrow-keys/@settings-select-regular-none": "Yapma", + "editor-number-arrow-keys/@settings-select-shift-none": "Yapma", + "editor-number-arrow-keys/@update": "Artık karakter özellikleri gibi bloklar hâlinde olmayan giriş alanlarındaki değerleri arttırabilir ve tamamen özelleştirebilirsiniz.", "script-snap/@description": "Bloğu otomatik olarak kod alanı noktalarına hizalamak için bir kodu hareket ettirin.", "script-snap/@name": "Kodları ızgaraya hizala", "script-snap/@preset-name-default": "Varsayılan", diff --git a/src/addons/addons-l10n/de.json b/src/addons/addons-l10n/de.json index 106218510d7..79d780610d2 100644 --- a/src/addons/addons-l10n/de.json +++ b/src/addons/addons-l10n/de.json @@ -224,6 +224,8 @@ "block-switching/sound_playuntildone": "spiele Klang ganz", "block-switching/sound_seteffectto": "setze Effekt auf", "block-switching/sound_setvolumeto": "setze Lautstärke auf", + "copy-reporter/copy-to-clipboard": "Kopieren", + "copy-reporter/copy-value": "Wert kopieren", "blocks2image/error_blocks_not_added": "Füge Blöcke zum Arbeitsbereich hinzu!", "blocks2image/export_all_to_PNG": "Alle als PNG exportieren", "blocks2image/export_all_to_SVG": "Alle als SVG exportieren", diff --git a/src/addons/addons-l10n/en.json b/src/addons/addons-l10n/en.json index 29693eafd3b..d5dff049bfb 100644 --- a/src/addons/addons-l10n/en.json +++ b/src/addons/addons-l10n/en.json @@ -239,6 +239,8 @@ "block-switching/sound_playuntildone": "play until done", "block-switching/sound_seteffectto": "set effect", "block-switching/sound_setvolumeto": "set volume", + "copy-reporter/copy-to-clipboard": "Copy", + "copy-reporter/copy-value": "copy value", "blocks2image/error_blocks_not_added": "Add blocks to workspace!", "blocks2image/export_all_to_PNG": "Export all as PNG", "blocks2image/export_all_to_SVG": "Export all as SVG", diff --git a/src/addons/addons-l10n/es.json b/src/addons/addons-l10n/es.json index 677289431fb..35dda88b9a0 100644 --- a/src/addons/addons-l10n/es.json +++ b/src/addons/addons-l10n/es.json @@ -218,6 +218,8 @@ "block-switching/sound_playuntildone": "tocar sonido hasta terminar", "block-switching/sound_seteffectto": "fijar efecto", "block-switching/sound_setvolumeto": "fijar volumen", + "copy-reporter/copy-to-clipboard": "Copiar", + "copy-reporter/copy-value": "copiar valor", "blocks2image/error_blocks_not_added": "Agregue bloques al workspace", "blocks2image/export_all_to_PNG": "Exportar todos como PNG", "blocks2image/export_all_to_SVG": "Exportar todos como SVG", diff --git a/src/addons/addons-l10n/fi.json b/src/addons/addons-l10n/fi.json index 568f31c98dd..e64c8f33810 100644 --- a/src/addons/addons-l10n/fi.json +++ b/src/addons/addons-l10n/fi.json @@ -226,6 +226,8 @@ "block-switching/sound_playuntildone": "soita loppuun", "block-switching/sound_seteffectto": "aseta tehosteeksi", "block-switching/sound_setvolumeto": "aseta äänenvoimakkuudeksi", + "copy-reporter/copy-to-clipboard": "Kopioi", + "copy-reporter/copy-value": "kopioi arvo", "blocks2image/error_blocks_not_added": "Lisää lohkoja työtilaan!", "blocks2image/export_all_to_PNG": "Lataa kaikki PNG-kuvana", "blocks2image/export_all_to_SVG": "Lataa kaikki SVG-tiedostona", diff --git a/src/addons/addons-l10n/fr.json b/src/addons/addons-l10n/fr.json index 79b1db49b5e..6f2263665ed 100644 --- a/src/addons/addons-l10n/fr.json +++ b/src/addons/addons-l10n/fr.json @@ -223,6 +223,8 @@ "block-switching/sound_playuntildone": "jouer jusqu'au bout", "block-switching/sound_seteffectto": "mettre l'effet à", "block-switching/sound_setvolumeto": "mettre le volume à", + "copy-reporter/copy-to-clipboard": "Copier", + "copy-reporter/copy-value": "copier la valeur", "blocks2image/error_blocks_not_added": "Ajoute des blocs à l'espace de travail  !", "blocks2image/export_all_to_PNG": "Tout exporter au format PNG", "blocks2image/export_all_to_SVG": "Tout exporter au format SVG", diff --git a/src/addons/addons-l10n/hu.json b/src/addons/addons-l10n/hu.json index 06548082e46..664546feede 100644 --- a/src/addons/addons-l10n/hu.json +++ b/src/addons/addons-l10n/hu.json @@ -225,6 +225,8 @@ "block-switching/sound_playuntildone": "játszd végig", "block-switching/sound_seteffectto": "effekt legyen", "block-switching/sound_setvolumeto": "hangerő legyen", + "copy-reporter/copy-to-clipboard": "Másolás", + "copy-reporter/copy-value": "érték kimásolása", "blocks2image/error_blocks_not_added": "Blokk hozzáadása a munkaterülethez!", "blocks2image/export_all_to_PNG": "Összes exportálása PNG-ként", "blocks2image/export_all_to_SVG": "Összes exportálása SVG-ként", diff --git a/src/addons/addons-l10n/it.json b/src/addons/addons-l10n/it.json index ef3eb66960e..dfb6df533a7 100644 --- a/src/addons/addons-l10n/it.json +++ b/src/addons/addons-l10n/it.json @@ -224,6 +224,8 @@ "block-switching/sound_playuntildone": "riproduci suono e attendi la fine", "block-switching/sound_seteffectto": "porta effetto a", "block-switching/sound_setvolumeto": "porta volume a", + "copy-reporter/copy-to-clipboard": "Copia", + "copy-reporter/copy-value": "copia valore", "blocks2image/error_blocks_not_added": "Aggiungi i blocchi al tuo workspace!", "blocks2image/export_all_to_PNG": "Esporta tutto come PNG", "blocks2image/export_all_to_SVG": "Esporta tutto come SVG", diff --git a/src/addons/addons-l10n/ja.json b/src/addons/addons-l10n/ja.json index 92a9975ed4d..8ac647a8710 100644 --- a/src/addons/addons-l10n/ja.json +++ b/src/addons/addons-l10n/ja.json @@ -231,6 +231,8 @@ "block-switching/sound_playuntildone": "終わるまで...の音を鳴らす", "block-switching/sound_seteffectto": "音の効果を...にする", "block-switching/sound_setvolumeto": "音量を...%にする", + "copy-reporter/copy-to-clipboard": "コピー", + "copy-reporter/copy-value": "値をコピー", "blocks2image/error_blocks_not_added": "ブロックを追加してください。", "blocks2image/export_all_to_PNG": "すべてをPNGとして出力", "blocks2image/export_all_to_SVG": "すべてをSVGとして出力", diff --git a/src/addons/addons-l10n/ko.json b/src/addons/addons-l10n/ko.json index 29281e6567e..b4b2419bbce 100644 --- a/src/addons/addons-l10n/ko.json +++ b/src/addons/addons-l10n/ko.json @@ -226,6 +226,8 @@ "block-switching/sound_playuntildone": "끝날 때까지 플레이하기", "block-switching/sound_seteffectto": "효과 설정하기", "block-switching/sound_setvolumeto": "음량 설정하기", + "copy-reporter/copy-to-clipboard": "복사", + "copy-reporter/copy-value": "값 복사", "blocks2image/error_blocks_not_added": "작업 공간에 블록을 추가합니다!", "blocks2image/export_all_to_PNG": "모두 PNG로 내보내기", "blocks2image/export_all_to_SVG": "모두 SVG로 내보내기", diff --git a/src/addons/addons-l10n/nl.json b/src/addons/addons-l10n/nl.json index f9dddcc2bdb..c1bbc50fd30 100644 --- a/src/addons/addons-l10n/nl.json +++ b/src/addons/addons-l10n/nl.json @@ -216,6 +216,8 @@ "block-switching/sound_playuntildone": "start en wacht", "block-switching/sound_seteffectto": "maak effect", "block-switching/sound_setvolumeto": "zet volume", + "copy-reporter/copy-to-clipboard": "Kopiëren", + "copy-reporter/copy-value": "waarde kopiëren", "blocks2image/error_blocks_not_added": "Voeg blokken toe aan werkplek!", "blocks2image/export_all_to_PNG": "Alles exporteren als PNG", "blocks2image/export_all_to_SVG": "Alles exporteren als SVG", diff --git a/src/addons/addons-l10n/pl.json b/src/addons/addons-l10n/pl.json index bd7fa9ac362..6fe7ed266e9 100644 --- a/src/addons/addons-l10n/pl.json +++ b/src/addons/addons-l10n/pl.json @@ -214,6 +214,8 @@ "block-switching/sound_playuntildone": "graj aż się skończy", "block-switching/sound_seteffectto": "ustaw efekt", "block-switching/sound_setvolumeto": "ustaw głośność", + "copy-reporter/copy-to-clipboard": "Skopiuj", + "copy-reporter/copy-value": "skopiuj wartość", "blocks2image/error_blocks_not_added": "Dodaj bloki do przestrzeni roboczej!", "blocks2image/export_all_to_PNG": "Eksportuj wszystko jako PNG", "blocks2image/export_all_to_SVG": "Eksportuj wszystko jako SVG", diff --git a/src/addons/addons-l10n/pt.json b/src/addons/addons-l10n/pt.json index d35dc70ba6c..5c550bc5aca 100644 --- a/src/addons/addons-l10n/pt.json +++ b/src/addons/addons-l10n/pt.json @@ -202,6 +202,8 @@ "block-switching/sound_playuntildone": "toque o som até o fim", "block-switching/sound_seteffectto": "mude o efeito para", "block-switching/sound_setvolumeto": "mude o volume para", + "copy-reporter/copy-to-clipboard": "Copiar", + "copy-reporter/copy-value": "Copiar valor", "blocks2image/error_blocks_not_added": "Adicione blocos à área de trabalho!", "blocks2image/export_all_to_PNG": "Exportar tudo como PNG", "blocks2image/export_all_to_SVG": "Exportar tudo como SVG", diff --git a/src/addons/addons-l10n/ru.json b/src/addons/addons-l10n/ru.json index 7a99ce98115..91ee457b913 100644 --- a/src/addons/addons-l10n/ru.json +++ b/src/addons/addons-l10n/ru.json @@ -221,6 +221,8 @@ "block-switching/sound_playuntildone": "проигрывать до конца", "block-switching/sound_seteffectto": "задать эффект", "block-switching/sound_setvolumeto": "задать громкость", + "copy-reporter/copy-to-clipboard": "Копировать", + "copy-reporter/copy-value": "Копировать значение", "blocks2image/error_blocks_not_added": "Добавить блоки на рабочую область!", "blocks2image/export_all_to_PNG": "Экспорт всех блоков в формате PNG", "blocks2image/export_all_to_SVG": "Экспорт всех блоков в SVG", diff --git a/src/addons/addons-l10n/sl.json b/src/addons/addons-l10n/sl.json index 0058d79600d..1638c99de0b 100644 --- a/src/addons/addons-l10n/sl.json +++ b/src/addons/addons-l10n/sl.json @@ -227,6 +227,8 @@ "block-switching/sound_playuntildone": "predvajaj do konca", "block-switching/sound_seteffectto": "nastavi učinek", "block-switching/sound_setvolumeto": "nastavi glasnost", + "copy-reporter/copy-to-clipboard": "Kopiraj", + "copy-reporter/copy-value": "kopiraj vrednost", "blocks2image/error_blocks_not_added": "Dodajte bloke v delovni prostor!", "blocks2image/export_all_to_PNG": "Izvozi vse kot PNG", "blocks2image/export_all_to_SVG": "Izvozi vse kot SVG", diff --git a/src/addons/addons-l10n/tr.json b/src/addons/addons-l10n/tr.json index 2b3904a9b2c..4a4baae133b 100644 --- a/src/addons/addons-l10n/tr.json +++ b/src/addons/addons-l10n/tr.json @@ -230,6 +230,8 @@ "block-switching/sound_playuntildone": "bitene kadar çal", "block-switching/sound_seteffectto": "efekti ayarla", "block-switching/sound_setvolumeto": "sesi ayarla", + "copy-reporter/copy-to-clipboard": "Kopyala", + "copy-reporter/copy-value": "değeri kopyala", "blocks2image/error_blocks_not_added": "Çalışma alanına blok ekleyin!", "blocks2image/export_all_to_PNG": "Her şeyi PNG olarak dışa aktar", "blocks2image/export_all_to_SVG": "Her şeyi SVG olarak dışa aktar", diff --git a/src/addons/addons.js b/src/addons/addons.js index 3293a47ce7e..a5a8f745c27 100644 --- a/src/addons/addons.js +++ b/src/addons/addons.js @@ -26,10 +26,13 @@ const addons = [ 'default-costume-editor-color', 'bitmap-copy', '2d-color-picker', + 'paint-skew', 'better-img-uploads', 'pick-colors-from-stage', 'custom-block-shape', + 'editor-square-inputs', 'zebra-striping', + 'editor-compact', 'editor-theme3', 'custom-block-text', 'editor-colored-context-menus', @@ -44,6 +47,7 @@ const addons = [ 'block-switching', 'load-extensions', 'custom-zoom', + 'copy-reporter', 'initialise-sprite-position', 'blocks2image', 'remove-curved-stage-border', @@ -63,6 +67,7 @@ const addons = [ 'editor-comment-previews', 'columns', 'number-pad', + 'editor-number-arrow-keys', 'script-snap', 'fullscreen', 'hide-stage', @@ -75,11 +80,11 @@ const addons = [ ]; const newAddons = [ - 'vol-slider', - 'number-pad', - 'rename-broadcasts', - 'sprite-properties', - 'paint-snap' + 'paint-skew', + 'editor-square-inputs', + 'copy-reporter', + 'editor-number-arrow-keys', + 'editor-compact' ]; // eslint-disable-next-line import/no-commonjs diff --git a/src/addons/addons/copy-reporter/_manifest_entry.js b/src/addons/addons/copy-reporter/_manifest_entry.js new file mode 100644 index 00000000000..9f62aa51eb6 --- /dev/null +++ b/src/addons/addons/copy-reporter/_manifest_entry.js @@ -0,0 +1,26 @@ +/* generated by pull.js */ +const manifest = { + "editorOnly": true, + "name": "Copy reporter values", + "description": "Adds the option to copy values displayed by variable monitors (from the right click context menu) and block reporter balloons.", + "credits": [ + { + "name": "TheKodeToad" + } + ], + "tags": [ + "new" + ], + "userscripts": [ + { + "url": "userscript.js" + } + ], + "userstyles": [ + { + "url": "style.css" + } + ], + "dynamicDisable": true +}; +export default manifest; diff --git a/src/addons/addons/copy-reporter/_runtime_entry.js b/src/addons/addons/copy-reporter/_runtime_entry.js new file mode 100644 index 00000000000..156f795e3fe --- /dev/null +++ b/src/addons/addons/copy-reporter/_runtime_entry.js @@ -0,0 +1,9 @@ +/* generated by pull.js */ +import _js from "./userscript.js"; +import _css from "!css-loader!./style.css"; +import _asset from "!url-loader!./copy.svg"; +export const resources = { + "userscript.js": _js, + "style.css": _css, + "copy.svg": _asset, +}; diff --git a/src/addons/addons/copy-reporter/copy.svg b/src/addons/addons/copy-reporter/copy.svg new file mode 100644 index 00000000000..af9404f1575 --- /dev/null +++ b/src/addons/addons/copy-reporter/copy.svg @@ -0,0 +1 @@ + diff --git a/src/addons/addons/copy-reporter/style.css b/src/addons/addons/copy-reporter/style.css new file mode 100644 index 00000000000..3550d2a3b76 --- /dev/null +++ b/src/addons/addons/copy-reporter/style.css @@ -0,0 +1,13 @@ +.sa-copy-reporter-icon { + cursor: pointer; + float: right; + display: block; + user-select: none; + filter: var(--editorDarkMode-accent-filter, none); + width: 14px; + height: 14px; +} + +.valueReportBox { + user-select: text; +} diff --git a/src/addons/addons/copy-reporter/userscript.js b/src/addons/addons/copy-reporter/userscript.js new file mode 100644 index 00000000000..187b9f3edc7 --- /dev/null +++ b/src/addons/addons/copy-reporter/userscript.js @@ -0,0 +1,71 @@ +export default async function ({ addon, console, msg }) { + addon.tab.createEditorContextMenu( + (ctx) => { + const className = ctx.type === "monitor_large" ? "monitor_large-value" : "monitor_value"; + const element = ctx.target.querySelector(`[class*='${className}_']`); + + if (element.innerText.length !== 0) { + navigator.clipboard.writeText(element.innerText); + } + }, + { + className: "copy", + types: ["monitor_default", "monitor_large", "monitor_slider"], + position: "monitor", + order: 0, + label: msg("copy-value"), + } + ); + + // add button to reporter bubble + const ScratchBlocks = await addon.tab.traps.getBlockly(); + + // https://github.com/scratchfoundation/scratch-blocks/blob/893c7e7ad5bfb416eaed75d9a1c93bdce84e36ab/core/workspace_svg.js#L979 + ScratchBlocks.WorkspaceSvg.prototype.reportValue = function (id, value) { + let block = this.getBlockById(id); + if (!block) { + throw "Tried to report value on block that does not exist."; + } + + ScratchBlocks.DropDownDiv.hideWithoutAnimation(); + ScratchBlocks.DropDownDiv.clearContent(); + + let contentDiv = ScratchBlocks.DropDownDiv.getContentDiv(); + + let valueReportBox = document.createElement("div"); + valueReportBox.setAttribute("class", "valueReportBox"); + valueReportBox.innerText = value; + if (!addon.self.disabled) { + // use to get focus and event priority + valueReportBox.setAttribute("tabindex", "0"); + // if the user pressed Ctrl+C, prevent propagation to Blockly + valueReportBox.onkeydown = (event) => { + if ((event.altKey || event.ctrlKey || event.metaKey) && event.code === "KeyC") { + event.stopPropagation(); + } + }; + + if (value.length !== 0) { + const copyButton = document.createElement("img"); + copyButton.setAttribute("role", "button"); + copyButton.setAttribute("tabindex", "0"); + copyButton.setAttribute("alt", msg("copy-to-clipboard")); + copyButton.setAttribute("src", addon.self.getResource("/copy.svg")) /* rewritten by pull.js */; + + copyButton.classList.add("sa-copy-reporter-icon"); + addon.tab.displayNoneWhileDisabled(copyButton); + + copyButton.onclick = () => navigator.clipboard.writeText(value); + valueReportBox.appendChild(copyButton); + } + } + + contentDiv.appendChild(valueReportBox); + + ScratchBlocks.DropDownDiv.setColour( + ScratchBlocks.Colours.valueReportBackground, + ScratchBlocks.Colours.valueReportBorder + ); + ScratchBlocks.DropDownDiv.showPositionedByBlock(this, block); + }; +} diff --git a/src/addons/addons/editor-compact/_manifest_entry.js b/src/addons/addons/editor-compact/_manifest_entry.js new file mode 100644 index 00000000000..6c90c2a6b3e --- /dev/null +++ b/src/addons/addons/editor-compact/_manifest_entry.js @@ -0,0 +1,65 @@ +/* generated by pull.js */ +const manifest = { + "editorOnly": true, + "noTranslations": true, + "name": "Compact editor", + "description": "Decreases the size of buttons, input fields, the menu bar, and other elements in the editor, making more space for components such as the code area, the costume editor, and costume previews, as was the case in Scratch 2.0.", + "tags": [ + "theme", + "beta", + "new" + ], + "credits": [ + { + "name": "lisa_wolfgang", + "link": "https://scratch.mit.edu/users/lisa_wolfgang/" + }, + { + "name": "Maximouse", + "link": "https://scratch.mit.edu/users/Maximouse/" + } + ], + "info": [ + { + "id": "hide-icons-update", + "text": "To hide menu bar icons, use the \"Customizable menu bar\" addon." + } + ], + "userstyles": [ + { + "url": "userstyle.css" + }, + { + "url": "hide-labels.css", + "if": { + "settings": { + "hideLabels": true + } + } + }, + { + "url": "sprite-properties.css", + "if": { + "addonEnabled": [ + "sprite-properties" + ] + } + } + ], + "userscripts": [ + { + "url": "userscript.js" + } + ], + "settings": [ + { + "id": "hideLabels", + "type": "boolean", + "name": "Hide button labels in costume and sound editor", + "default": true + } + ], + "dynamicDisable": true, + "enabledByDefault": false +}; +export default manifest; diff --git a/src/addons/addons/editor-compact/_runtime_entry.js b/src/addons/addons/editor-compact/_runtime_entry.js new file mode 100644 index 00000000000..f44cfbba356 --- /dev/null +++ b/src/addons/addons/editor-compact/_runtime_entry.js @@ -0,0 +1,13 @@ +/* generated by pull.js */ +import _js from "./userscript.js"; +import _css from "!css-loader!./userstyle.css"; +import _css2 from "!css-loader!./hide-labels.css"; +import _css3 from "!css-loader!./sprite-properties.css"; +import _asset from "!url-loader!./close.svg"; +export const resources = { + "userscript.js": _js, + "userstyle.css": _css, + "hide-labels.css": _css2, + "sprite-properties.css": _css3, + "close.svg": _asset, +}; diff --git a/src/addons/addons/editor-compact/close.svg b/src/addons/addons/editor-compact/close.svg new file mode 100644 index 00000000000..9e5509e76a2 --- /dev/null +++ b/src/addons/addons/editor-compact/close.svg @@ -0,0 +1 @@ +icon--add \ No newline at end of file diff --git a/src/addons/addons/editor-compact/force-tooltip-update.js b/src/addons/addons/editor-compact/force-tooltip-update.js new file mode 100644 index 00000000000..d9f88eb5238 --- /dev/null +++ b/src/addons/addons/editor-compact/force-tooltip-update.js @@ -0,0 +1,7 @@ +import EventTarget from "../../event-target.js"; /* inserted by pull.js */ + +export const eventTarget = new EventTarget(); + +export function updateTooltips() { + eventTarget.dispatchEvent(new CustomEvent("update")); +} diff --git a/src/addons/addons/editor-compact/hide-labels.css b/src/addons/addons/editor-compact/hide-labels.css new file mode 100644 index 00000000000..093b801137c --- /dev/null +++ b/src/addons/addons/editor-compact/hide-labels.css @@ -0,0 +1,63 @@ +/* Asset editor */ +[class*="asset-panel_detail-area"] [class*="labeled-icon-button_mod-edit-field"], +[class*="sound-editor_tool-button_"], +[class*="sound-editor_row-reverse_"] > [class*="icon-button_container_"] { + min-width: 0; + margin-right: 2px; + padding: calc(0.125rem - 1px); + border: 1px solid var(--editorDarkMode-border, hsla(0, 0%, 0%, 0.15)); + border-radius: 0.25rem; +} +[class*="sound-editor_tool-button"] img { + width: 20px; +} +[class*="asset-panel_detail-area"] [class*="label_input-label"], +[class*="asset-panel_detail-area"] [class*="labeled-icon-button_edit-field-title"], +[class*="icon-button_title_"] { + display: none; +} +[dir="ltr"] [class*="paint-editor_mod-dashed-border_"], +[dir="rtl"] [class*="paint-editor_mod-dashed-border_"] { + border: none; +} +[class*="mode-tools_mod-labeled-icon-height"], +[class*="paint-editor_mod-labeled-icon-height"] { + height: auto; +} +[class*="paint-editor_row_"] > [class*="tools_row_"], +[class*="paint-editor_mod-mode-tools_"] > [class*="mode-tools_mode-tools_"] { + gap: calc(0.25rem); +} +[dir="ltr"] [class*="fixed-tools_mod-dashed-border_"], +[dir="rtl"] [class*="fixed-tools_mod-dashed-border_"], +[dir="ltr"] [class*="mode-tools_mod-dashed-border_"], +[dir="rtl"] [class*="mode-tools_mod-dashed-border_"], +[dir="ltr"] [class*="sound-editor_input-group_"], +[dir="rtl"] [class*="sound-editor_input-group_"], +[dir="rtl"] [class*="sound-editor_row-reverse_"] [class*="sound-editor_input-group_"] { + margin: 0; + border: 0; + padding: 0; +} +[class*="sound-editor_input-group_"] { + gap: 2px; +} +[class*="sound-editor_input-group_"] > * { + margin: 0; +} +[class*="sound-editor_row_"] > [class*="icon-button_container_"] { + margin-left: 1rem; +} +[class*="sound-editor_tool-button"], +[class*="sound-editor_row-reverse_"] > [class*="icon-button_container_"] { + width: 24px; + height: 24px; + flex-basis: auto; +} +[class*="mode-tools_mode-tools"] { + min-height: 0; +} + +[class*="sound-editor_row-reverse_"] > [class*="icon-button_container_"] { + margin: 0; +} diff --git a/src/addons/addons/editor-compact/sprite-properties.css b/src/addons/addons/editor-compact/sprite-properties.css new file mode 100644 index 00000000000..5a4f1f47c79 --- /dev/null +++ b/src/addons/addons/editor-compact/sprite-properties.css @@ -0,0 +1,15 @@ +/* These styles are in a separate file with "if" to make sure that they aren't applied + when sprite-properties is dynamically disabled. */ +.sa-show-sprite-properties [class^="sprite-info_sprite-info_"], +.sa-sprite-properties-wide-locale.sa-show-sprite-properties [class^="sprite-info_sprite-info_"] { + height: calc(5.25rem + 1px); +} +.sa-sprite-properties-close-btn { + height: 1rem; + padding-top: 0.25rem; +} +.sa-hide-sprite-properties [class^="sprite-info_sprite-info_"] { + height: 0; + padding-top: 0; + padding-bottom: 0; +} diff --git a/src/addons/addons/editor-compact/userscript.js b/src/addons/addons/editor-compact/userscript.js new file mode 100644 index 00000000000..d2c13c6049b --- /dev/null +++ b/src/addons/addons/editor-compact/userscript.js @@ -0,0 +1,60 @@ +import EventTarget from "../../event-target.js"; /* inserted by pull.js */ + +import { eventTarget as tooltipUpdateEventTarget } from "./force-tooltip-update.js"; + +export default async function ({ addon, global, console }) { + // The workspace needs to be manually resized via a window resize event + // whenever the addon modifies or stops modifying UI elements + resizeWorkspace(); + + let resizeObserver = new ResizeObserver(resizeWorkspace); + (async () => { + while (true) { + let menuBar = await addon.tab.waitForElement('[class*="menu-bar_menu-bar"]', { + markAsSeen: true, + reduxEvents: [ + "scratch-gui/mode/SET_PLAYER", + "fontsLoaded/SET_FONTS_LOADED", + "scratch-gui/locales/SELECT_LOCALE", + ], + reduxCondition: (state) => !state.scratchGui.mode.isPlayerOnly, + }); + resizeObserver.observe(menuBar); + } + })(); + + async function resizeWorkspace() { + window.dispatchEvent(new Event("resize")); + } + + // Icons in the sound editor don't have tooltips. Add them if labels are hidden. + const updateTooltips = () => { + for (const button of document.querySelectorAll( + "[class*='sound-editor_tool-button_'], [class*='sound-editor_effect-button_']" + )) { + const icon = button.querySelector("img"); + if (!addon.self.disabled && addon.settings.get("hideLabels")) icon.title = button.textContent; + else icon.removeAttribute("title"); + } + }; + updateTooltips(); + addon.settings.addEventListener("change", updateTooltips); + addon.self.addEventListener("disabled", updateTooltips); + addon.self.addEventListener("reenabled", updateTooltips); + tooltipUpdateEventTarget.addEventListener("update", updateTooltips); + + while (true) { + await addon.tab.waitForElement("[class*='sound-editor_editor-container_']", { + markAsSeen: true, + reduxEvents: [ + "scratch-gui/navigation/ACTIVATE_TAB", + "scratch-gui/mode/SET_PLAYER", + "fontsLoaded/SET_FONTS_LOADED", + "scratch-gui/locales/SELECT_LOCALE", + "scratch-gui/targets/UPDATE_TARGET_LIST", + ], + reduxCondition: (state) => !state.scratchGui.mode.isPlayerOnly && state.scratchGui.editorTab.activeTabIndex === 2, + }); + updateTooltips(); + } +} diff --git a/src/addons/addons/editor-compact/userstyle.css b/src/addons/addons/editor-compact/userstyle.css new file mode 100644 index 00000000000..2e60af0a296 --- /dev/null +++ b/src/addons/addons/editor-compact/userstyle.css @@ -0,0 +1,508 @@ +/* Full page */ +[class*="gui_body-wrapper"] { + height: calc(100% - 2rem); +} +.sa-body-editor, +.sa-body-editor * { + scrollbar-width: thin; +} +.sa-body-editor::-webkit-scrollbar, +.sa-body-editor ::-webkit-scrollbar { + width: 8px; + height: 8px; +} +.sa-body-editor::-webkit-scrollbar { + background-color: var(--editorDarkMode-page, #e5f0ff); +} +.sa-body-editor::-webkit-scrollbar-thumb, +.sa-body-editor ::-webkit-scrollbar-thumb { + background-color: var(--editorDarkMode-page-compactScrollbar, #bec7d4); + background-clip: padding-box; + border-radius: 4px; + border: 1px solid transparent; +} + +[class*="menu-bar_collapsible-label_"], +[dir="rtl"] [class*="menu-bar_collapsible-label_"], +[class*="settings-menu_dropdown-label_"], +[dir="rtl"] [class*="settings-menu_dropdown-label_"] { + margin: 0; +} + +@media (max-width: 1024px) { + [class*="menu-bar_file-group_"] [class*="menu-bar_hoverable_"] > img:first-child { + display: inline; + } +} + +[class*="gui_menu-bar-position"][class*="menu-bar_menu-bar"][class*="box_box"], +[class*="menu-bar_menu-bar-item"] { + height: 2rem; +} + +[class*="menu-bar_file-group_"] [class*="menu-bar_menu-bar-item_"], +[class*="menu-bar_account-info-group_"] [class*="menu-bar_menu-bar-item_"] { + margin: 0; + padding: 0 0.5rem; +} +[class*="menu-bar_menu-bar-menu"] { + margin-top: 2rem; +} +[class*="menu_menu-item"] { + line-height: 1.75rem; + padding: 0 0.5rem; +} + +[class*="menu-bar_menu-bar-button"] { + height: 1.5rem; + padding-left: 0.5rem; + padding-right: 0.5rem; +} + +[class*="menu-bar_growable"] { + padding-inline-start: 0.5rem; +} +[class*="menu-bar_growable"] [class*="input_input-form"] { + height: 1.5rem; + box-sizing: border-box; + padding: 0.25rem; + font-size: 0.75rem; +} +[class*="menu-bar_growable"] [class*="input_input-form"]:focus { + box-shadow: 0 0 0 calc(0.5rem * 0.25) hsla(0, 100%, 100%, 0.25); +} + +.sa-editormessages-count { + top: 0.15rem; + right: 0.4rem; +} + +[class*="account-nav_user-info"] [class*="account-nav_avatar"] { + width: 1.5rem; + height: 1.5rem; + margin-inline-start: 0.25rem; +} + +/* Sprites area */ +[class^="sprite-info_sprite-info_"] { + padding: 0.5rem; + height: 4.75rem; +} +[class*="sprite-info_row"] { + justify-content: flex-start; +} +[class*="sprite-info_group"], +[class*="sprite-info_column_"] { + margin-inline-end: 1rem; +} +[class*="sprite-info_group"]:last-child, +[class*="sprite-info_column_"]:last-child { + margin-inline-end: 0; +} +[class*="sprite-info_column_"], +[class*="label_input-group-column_"] { + flex-direction: row; + align-items: center; +} +[class*="sprite-info_column_"] span, +[class*="label_input-group-column_"] span { + margin-bottom: 0; +} +[class*="sprite-info_icon-wrapper"] { + width: 1.5rem; + height: 1.5rem; + padding: 0.25rem; +} +[class*="sprite-info_sprite-info"] [class*="input_input-form"], +[class*="gui_tabs"] [class*="input_input-form"] { + height: 1.5rem; + padding: 0 0.5rem; +} +[class*="sprite-info_sprite-info"] [class*="input_input-form"], +[class*="gui_tabs"] [class*="input_input-form"] { + height: 1.5rem; + padding: 0 0.5rem; +} +[class*="gui_body-wrapper_"] [class*="sprite-info_sprite-info"] [class*="input_input-form"]:focus, +[class*="gui_body-wrapper_"] [class*="gui_tabs"] [class*="input_input-form"]:focus { + box-shadow: 0 0 0 0.125rem var(--editorDarkMode-primary-transparent35, hsl(260deg 60% 60% / 35%)); +} +[class*="gui_body-wrapper_"] [class*="sprite-selector-item_is-selected"], +[class*="gui_body-wrapper_"] [class*="stage-selector_is-selected_"] { + box-shadow: 0px 0px 0px 2px var(--editorDarkMode-primary-transparent35, hsl(260deg 60% 60% / 35%)); +} +[class*="input_input-small"][type="text"], +[class*="sprite-info_larger-input"] input[type="text"] { + /* Vanilla is width:4rem */ + width: 2.5rem; +} +[class*="input_input-small"][type="number"] { + /* Vanilla is width:4rem but browsers take part of it for the up/down arrows */ + width: 3.5rem; +} + +[class*="sprite-selector_scroll-wrapper"] { + height: calc(100% - 4.75rem); +} +[class*="sprite-selector_scroll-wrapper"]::-webkit-scrollbar-thumb { + background-color: var(--editorDarkMode-selector-compactScrollbar, #c1c8d1); +} +[class*="sprite-selector_items-wrapper"] { + padding: 0.125rem; +} +[class*="sprite-selector_sprite-wrapper"] { + margin: 0.125rem; +} +[class*="sprite-selector-item_delete-button"] { + top: -0.25rem; +} +[dir="ltr"] [class*="delete-button_delete-button_"] { + right: -0.25rem; +} +[dir="rtl"] [class*="delete-button_delete-button_"] { + left: -0.25rem; +} +[class*="delete-button_delete-button-visible"] { + width: 1rem; + height: 1rem; + box-shadow: 0 0 0 1px var(--editorDarkMode-primary-transparent35, hsl(260deg 60% 60% / 35%)); +} +[class*="delete-button_delete-icon"] { + display: none; +} +[class*="delete-button_delete-button-visible"]::after { + content: ""; + position: absolute; + display: block; + top: 25%; + left: 25%; + width: 50%; + height: 50%; + background-image: url("./close.svg"); + transform: rotate(45deg); + filter: var(--editorDarkMode-primary-filter, none); +} +img[class*="sprite-selector-item_sprite-image"] { + max-width: 56px; + max-height: 32px; +} + +[class*="action-menu_main-button"] { + width: 2rem; + height: 2rem; +} +[class*="action-menu_main-button"] img { + width: 1.5rem; + height: 1.5rem; +} +[class*="action-menu_more-buttons-outer"] { + width: 2rem; + bottom: 2rem; + padding-bottom: calc(2rem / 2); + margin: 0 0 calc(2rem / -2) 0; + border-top-left-radius: 2rem; + border-top-right-radius: 2rem; +} +button[class*="action-menu_more-button"] { + width: 2rem; + height: 2rem; +} + +/* Project player */ +.sa-body-editor [class*="stage-header_stage-menu-wrapper_"]:not([class*="stage-wrapper_full-screen"] *) { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + height: 2rem; +} +.sa-body-editor [class*="green-flag_green-flag_"]:not([class*="stage-wrapper_full-screen"] *), +.sa-body-editor .pause-btn:not([class*="stage-wrapper_full-screen"] *), +.sa-body-editor [class*="stop-all_stop-all_"]:not([class*="stage-wrapper_full-screen"] *), +.sa-body-editor [class*="stage-header_stage-button_"]:not([class*="stage-wrapper_full-screen"] *) { + padding: 0.25rem; + width: 1.5rem; + height: 1.5rem; +} +.sa-body-editor [class*="turbo-mode_turbo-icon_"]:not([class*="stage-wrapper_full-screen"] *), +.sa-body-editor .clone-icon:not([class*="stage-wrapper_full-screen"] *) { + /* Remove vertical margin from images that appear on the stage header */ + margin-top: 0; + margin-bottom: 0; +} +.sa-body-editor [class*="stage-header_stage-button_"]:not([class*="stage-wrapper_full-screen"] *) { + padding: calc(0.25rem - 1px); +} +.sa-body-editor [class*="green-flag_green-flag_"]:not([class*="stage-wrapper_full-screen"] *), +.sa-body-editor .pause-btn:not([class*="stage-wrapper_full-screen"] *) { + margin-inline-end: 0.125rem; +} +.sa-stage-hidden [class*="stage-header_stage-size-row"] { + height: 2rem; +} + +.sa-body-editor [class*="monitor_list-body_"] > div::-webkit-scrollbar-thumb { + background-color: #bec7d4; +} + +/* Toggle buttons */ +[class*="toggle-buttons_button_"] { + width: 1.5rem; + height: 1.5rem; + padding: calc(0.25rem - 1px); +} + +/* Tabs area */ +[class*="gui_tab-list"] { + height: 2rem; +} +[class*="gui_tab_"] { + padding-left: 1rem; + padding-right: 1rem; + border-radius: 0.5rem 0.5rem 0 0; +} +[class*="gui_tab_"] > img { + display: none; +} + +.sa-find-bar { + align-self: center; +} +.sa-find-wrapper { + height: 20px; +} +.sa-find-dropdown-out { + margin-top: 0; +} + +/* Code tab */ +body:not(.sa-columns-enabled) [class*="gui_tab-panel"] .scratchCategoryMenuItem { + padding: 0.25rem 0; +} +.scratchCategoryItemBubble, +.scratchCategoryItemIcon { + width: 1rem; + height: 1rem; + background-size: 1rem 1rem; +} +body:not(.sa-columns-enabled) [class*="gui_tab-panel"] .blocklyToolboxDiv { + height: calc(100% - 2rem) !important; + scrollbar-width: none; +} +body:not(.sa-columns-enabled) [class*="gui_tab-panel"] .blocklyToolboxDiv::-webkit-scrollbar { + display: none; +} +body:not(.sa-columns-enabled) [class*="gui_tab-panel"] [class*="gui_extension-button-container_"] { + height: 2rem; +} + +/* Assets panel */ +[class*="selector_wrapper"] { + width: 100px; +} +[class*="selector_list-item"] { + margin: 0.25rem auto; +} +[class*="selector_list-area"] { + overflow-y: auto; +} +[class*="selector_list-area"]::-webkit-scrollbar-thumb { + background-color: var(--editorDarkMode-selector2-compactScrollbar, #b4bcc9); +} +[class*="selector_list-area"] > div:first-child { + margin-top: 0.25rem; +} +[class*="selector_list-area"] img[class*="sprite-selector-item_sprite-image"] { + max-width: 52px; + max-height: 44px; +} +[class*="selector_list-area"] [class*="sprite-selector-item_sprite-name"] { + margin: 0; +} +[class*="selector_list-area"] [class*="sprite-selector-item_sprite-info"] { + padding-top: 0; + padding-bottom: 0.125rem; +} +[class*="selector_list-area"] [class*="sprite-selector-item_is-selected"] [class*="sprite-selector-item_sprite-info"] { + background-color: transparent; + color: inherit; +} + +/* Asset editor */ +[class*="asset-panel_detail-area"] > div { + padding: 0.5rem; +} +[class*="paint-editor_row_"] input { + font-size: 10px; +} +[class*="asset-panel_detail-area"] [class*="labeled-icon-button_edit-field-icon"], +[class*="mode-tools_mode-tools-icon_"], +[class*="sound-editor_button_"] img { + width: 20px; + height: 20px; +} +[class*="sound-editor_tool-button"] img { + height: 20px; +} +[class*="fixed-tools_button-group-button_"], +[class*="paint-editor_button-group-button_"], +[class*="sound-editor_button_"] { + padding: calc(0.125rem - 1px); +} +[class*="sound-editor_button_"] { + width: 24px; + height: 24px; +} +[class*="paint-editor_editor-container-top"] { + padding-bottom: 0; + border-bottom: none; +} + +[class*="paint-editor_top-align-row"] { + padding-top: 0.5rem; +} +@media (min-height: 710px) { + [class*="paint-editor_mode-selector"] { + width: min-content; + } +} + +[class*="sound-editor_row_"] + [class*="sound-editor_row_"] { + margin-top: 0.5rem; +} +[class*="sound-editor_waveform-container_"] { + margin: 0; +} + +[class*="sound-editor_row-reverse_"] { + gap: 2px; +} +[class*="sound-editor_row-reverse_"] > [class*="sound-editor_input-group_"] { + margin-right: 0.5rem; +} + +[class*="paint-editor_canvas-controls"] { + height: min-content; + margin-top: 0.5rem; +} +[class*="paint-editor_bitmap-button_"] { + padding: 0 0.25rem; +} +[class*="paint-editor_bitmap-button-icon_"] { + align-self: center; + width: 1.25rem; + height: 1.25rem; +} +.sa-paintEditorZoomControls-wrapper { + height: auto !important; +} +[class*="paint-editor_zoom-controls_"] { + align-self: flex-start; +} + +/* Modals and prompts */ +[class*="card_header-buttons_"] > div, +[class*="card_header-buttons-right_"] > div { + padding: 0.5rem; + margin: 0; +} +[class*="card_header-buttons_"] span:not(.sa-debugger-tabs *) { + display: none; +} +[class*="card_header-buttons_"] > [class*="card_header-buttons-right_"] { + padding: 0; +} +[class*="card_remove-button_"] > [class*="card_close-icon_"], +[class*="card_all-button_"] > [class*="card_help-icon_"] { + margin: 0; +} +.sa-debugger-tabs { + padding: 0 0.25rem; + margin-left: 0.25rem; +} +.sa-debugger-tabs li { + padding: 0.25em 1em; +} +.sa-debugger-tabs li + li { + margin-inline-start: 0.25rem; +} + +[class*="modal_header"], +[class*="library_filter-bar"] { + height: 2rem; +} +[class*="close-button_large"] { + width: 1rem; + height: 1rem; +} + +[class*="library_filter-bar-item"] { + height: 1.5rem; +} +[class*="library_filter-bar-item"]:focus-within { + box-shadow: 0 0 0 0.125rem var(--editorDarkMode-primary-transparent35, hsl(260deg 60% 60% / 35%)); +} +[dir="ltr"] [class*="filter_filter-icon"], +[dir="rtl"] [class*="filter_filter-icon"], +[class*="filter_x-icon_"] { + width: 0.75rem; + margin: 0.25rem 0.5rem; +} +[dir="ltr"] [class*="filter_filter-input"] { + padding-left: 1.75rem; +} +[dir="rtl"] [class*="filter_filter-input"] { + padding-right: 1.75rem; +} +[class*="library_divider"] { + display: none; +} +[class*="filter_x-icon-wrapper"] { + position: static; + margin: 0; +} +[class*="library_tag-wrapper"] { + height: auto; +} +[class*="library_library-scroll-grid"] { + height: calc(100% - 2rem); +} +[class*="library_library-scroll-grid"][class*="library_withFilterBar"] { + height: calc(100% - 4rem); +} +[class*="library_library-scroll-grid"]::-webkit-scrollbar-thumb { + background-color: var(--editorDarkMode-selector-compactScrollbar, #c1c8d1); +} + +[class*="prompt_body"], +[class*="custom-procedures_body"] { + padding: 1rem; +} +[class*="modal_modal-content"] [class*="box_box"] button { + padding: 0.5rem 0.75rem; +} + +[class*="prompt_variable-name-text-input"] { + height: 1.5rem; + padding: 0 0.5rem; + margin-bottom: 1rem; +} +.sa-swap-local-global-hint, +[class*="prompt_options-row"] { + padding-bottom: 0.5rem; +} +[class*="prompt_cloud-option"] { + border: none; + padding-top: 0; +} + +[class*="custom-procedures_modal-content"] { + width: 500px; +} +[class*="custom-procedures_workspace"] { + min-height: 100px; +} +.blocklyTextRemoveIcon { + top: -35px; +} +[class*="custom-procedures_body"] [role="button"] { + padding: 0.5rem; +} diff --git a/src/addons/addons/editor-number-arrow-keys/_manifest_entry.js b/src/addons/addons/editor-number-arrow-keys/_manifest_entry.js new file mode 100644 index 00000000000..9c97ca1b95d --- /dev/null +++ b/src/addons/addons/editor-number-arrow-keys/_manifest_entry.js @@ -0,0 +1,177 @@ +/* generated by pull.js */ +const manifest = { + "editorOnly": true, + "noTranslations": true, + "name": "Arrow key incrementation in editor", + "description": "Use the up and down arrow keys to increase or decrease number values in numeric input fields such as those in blocks or the sprite properties area.", + "tags": [ + "recommended", + "new" + ], + "userscripts": [ + { + "url": "userscript.js" + } + ], + "settings": [ + { + "dynamic": true, + "name": "Change on regular key press", + "id": "regular", + "type": "select", + "default": "one", + "potentialValues": [ + { + "id": "none", + "name": "None" + }, + { + "id": "hundredth", + "name": "0.01" + }, + { + "id": "tenth", + "name": "0.1" + }, + { + "id": "one", + "name": "1" + }, + { + "id": "ten", + "name": "10" + } + ], + "if": { + "settings": { + "useCustom": false + } + } + }, + { + "dynamic": true, + "name": "Change on regular key press", + "id": "regularCustom", + "type": "untranslated", + "default": "1", + "max": 8, + "if": { + "settings": { + "useCustom": true + } + } + }, + { + "dynamic": true, + "name": "Change on Shift+Key", + "id": "shift", + "type": "select", + "default": "ten", + "potentialValues": [ + { + "id": "none", + "name": "None" + }, + { + "id": "hundredth", + "name": "0.01" + }, + { + "id": "tenth", + "name": "0.1" + }, + { + "id": "one", + "name": "1" + }, + { + "id": "ten", + "name": "10" + } + ], + "if": { + "settings": { + "useCustom": false + } + } + }, + { + "dynamic": true, + "name": "Change on Shift+Key", + "id": "shiftCustom", + "type": "untranslated", + "default": "10", + "max": 8, + "if": { + "settings": { + "useCustom": true + } + } + }, + { + "dynamic": true, + "name": "Change on Alt+Key", + "id": "alt", + "type": "select", + "default": "tenth", + "potentialValues": [ + { + "id": "none", + "name": "None" + }, + { + "id": "hundredth", + "name": "0.01" + }, + { + "id": "tenth", + "name": "0.1" + }, + { + "id": "one", + "name": "1" + }, + { + "id": "ten", + "name": "10" + } + ], + "if": { + "settings": { + "useCustom": false + } + } + }, + { + "dynamic": true, + "name": "Change on Alt+Key", + "id": "altCustom", + "type": "untranslated", + "default": "0.1", + "max": 8, + "if": { + "settings": { + "useCustom": true + } + } + }, + { + "dynamic": true, + "name": "Use custom values", + "id": "useCustom", + "type": "boolean", + "default": false + } + ], + "credits": [ + { + "name": "mybearworld", + "link": "https://scratch.mit.edu/users/mybearworld/" + }, + { + "name": "World_Languages" + } + ], + "dynamicDisable": true +}; +export default manifest; diff --git a/src/addons/addons/editor-number-arrow-keys/_runtime_entry.js b/src/addons/addons/editor-number-arrow-keys/_runtime_entry.js new file mode 100644 index 00000000000..bc67131957e --- /dev/null +++ b/src/addons/addons/editor-number-arrow-keys/_runtime_entry.js @@ -0,0 +1,5 @@ +/* generated by pull.js */ +import _js from "./userscript.js"; +export const resources = { + "userscript.js": _js, +}; diff --git a/src/addons/addons/editor-number-arrow-keys/userscript.js b/src/addons/addons/editor-number-arrow-keys/userscript.js new file mode 100644 index 00000000000..4c07fe6f69d --- /dev/null +++ b/src/addons/addons/editor-number-arrow-keys/userscript.js @@ -0,0 +1,183 @@ +export default async function ({ addon }) { + const settings = { + none: 0, + hundredth: 0.01, + tenth: 0.1, + one: 1, + ten: 10, + }; + const inputMap = new WeakMap(); + + const amountOfDecimals = (numStr) => { + if (!numStr.includes(".")) return 0; + return numStr.toString().split(".")[1].length; + }; + + const shiftDecimalPointToRight = (num, times) => { + const isNumberNegative = num[0] === "-"; + let numStr = isNumberNegative ? num.substring(1) : num; + for (let i = 0; i < times; i++) { + if (numStr.indexOf(".") === -1) numStr += 0; + else if (numStr.indexOf(".") === numStr.length - 2) numStr = numStr.replace(".", ""); + else { + const index = numStr.indexOf("."); + const numArrFiltered = Array.from(numStr.replace(".", "")); + numArrFiltered.splice(index + 1, 0, "."); + numStr = numArrFiltered.join(""); + } + } + return Number(numStr) * (isNumberNegative ? -1 : 1); + }; + const shiftDecimalPointToLeft = (num, times) => { + const isNumberNegative = num[0] === "-"; + let numStr = isNumberNegative ? num.substring(1) : num; + for (let i = 0; i < times; i++) { + if (numStr.indexOf(".") === 0) numStr = ".0" + numStr.substring(1); + else if (numStr.indexOf(".") === -1) { + const numArr = Array.from(numStr); + numArr.splice(numArr.length - 1, 0, "."); + numStr = numArr.join(""); + } else { + const index = numStr.indexOf("."); + const numArrFiltered = Array.from(numStr.replace(".", "")); + numArrFiltered.splice(index - 1, 0, "."); + numStr = numArrFiltered.join(""); + } + } + return Number(numStr) * (isNumberNegative ? -1 : 1); + }; + + const normalizeNumber = (numStr) => { + const isNumberNegative = numStr[0] === "-"; + const numStrPositive = isNumberNegative ? numStr.substring(1) : numStr; + + let normalizedNum = numStrPositive; + + // Adds zero before the decimal point if necessary (.1 → 0.1) + if (normalizedNum[0] === ".") { + normalizedNum = "0" + normalizedNum; + } + + // Removes leading zeros (02.25 → 2.25) + if (/^0*$/.test(numStrPositive.split(".")[0])) { + // Case where integerPart = (0 or 00 or 000, etc...) + const decimalPart = numStrPositive.split(".")[1] || ""; + normalizedNum = `0.${decimalPart}`; + } else { + normalizedNum = normalizedNum.replace(/^0*|0*$/, ""); + } + + // Removes trailing zeros (2.250 → 2.25) + if (numStrPositive.includes(".")) { + normalizedNum = normalizedNum.replace(/0*$/, ""); + } + + // Removes the decimal point if it's the last character (2. → 2) + if (normalizedNum.endsWith(".")) { + normalizedNum = normalizedNum.slice(0, -1); + } + + return (isNumberNegative ? "-" : "") + normalizedNum; + }; + + const isValidNumber = (numStr) => { + if (numStr.length > 10) return false; + if (amountOfDecimals(numStr) > 5) return false; + return normalizeNumber(numStr) === Number(numStr).toString(); + }; + + const isSupportedElement = (el) => { + if (el.classList.contains("blocklyHtmlInput")) return true; + else if (el.matches(".mediaRecorderPopupContent input[type=number]")) { + // Number inputs in `mediarecorder` addon modal + return true; + } else if (el.className.includes("input_input-form_")) { + if (el.matches("[class*=sprite-info_sprite-info_] [class*=input_input-small_]")) { + // Sprite X/Y coordinates, size and direction (excludes sprite name) + return true; + } else if (el.matches("[class*=paint-editor_editor-container-top_] input[type=number]")) { + // Number inputs in costume editor (note that browsers already provide up/down clickable buttons for these) + return true; + } else return false; + } + return false; + }; + + document.body.addEventListener("keydown", (e) => { + if (addon.self.disabled) return; + if (!["ArrowUp", "ArrowDown"].includes(e.key)) return; + if (!isSupportedElement(e.target)) return; + if (!e.target.value) return; + if (!isValidNumber(e.target.value)) return; + + e.preventDefault(); + // If this is a text input, this will prevent the cursor from moving to the beginning/end of the input. + // If this is a number input, it will prevent the default browser behavior when pressing up/down in a + // number input (increase or decrease by 1). If we didn't prevent, the user would be increasing twice. + + let changeBy = e.key === "ArrowUp" ? 1 : -1; + if (addon.settings.get("useCustom")) { + let settingValue = e.shiftKey + ? addon.settings.get("shiftCustom") + : e.altKey + ? addon.settings.get("altCustom") + : addon.settings.get("regularCustom"); + if (settingValue === "") settingValue = 0; + let valueAsFloat = parseFloat(settingValue); + if (valueAsFloat < 0) valueAsFloat *= -1; // If user typed a negative number, we make it positive + if (Number.isNaN(valueAsFloat)) { + return; + } else if (valueAsFloat === 0 || (valueAsFloat < 100000000 && valueAsFloat > 0.00000099)) { + // This will exclude valid floats such as `1e20` that are less than 9 characters + changeBy *= valueAsFloat; + } else { + return; + } + } else { + changeBy *= e.shiftKey + ? settings[addon.settings.get("shift")] + : e.altKey + ? settings[addon.settings.get("alt")] + : settings[addon.settings.get("regular")]; + } + + const newValueAsInt = + shiftDecimalPointToRight(e.target.value, 5) + shiftDecimalPointToRight(changeBy.toString(), 5); + const newValue = shiftDecimalPointToLeft(newValueAsInt.toString(), 5); + + if (e.target.className.includes("input_input-form_")) { + Object.getOwnPropertyDescriptor(e.target.constructor.prototype, "value").set.call(e.target, newValue.toString()); + e.target.dispatchEvent(new Event("input", { bubbles: true })); + + // The user probably wants to visualize how the sprite changes size, coordinates, direction, etc. + // without having to press Enter. But updating in realtime could be bad for performance. + const FLUSH_AFTER_MS = 300; // Number of ms to wait until the input change takes effect. + // Force flush after incrementing/decrementing 5 times in a row, even if it's not been 300ms: + const FLUSH_AFTER_N_STEPS = 5; + + // https://github.com/scratchfoundation/scratch-gui/blob/develop/src/components/forms/buffered-input-hoc.jsx + // This function calls handleFlush() on the buffered input when called. + const flushInput = () => e.target.dispatchEvent(new Event("blur", { bubbles: true })); + + const currentTime = document.timeline.currentTime; // Similar to Date.now() but can't be changed by user unexpectedly + if (!inputMap.has(e.target)) inputMap.set(e.target, { time: null, steps: -1 }); + inputMap.get(e.target).time = currentTime; + const newNumOfSteps = (inputMap.get(e.target).steps += 1); + + if (newNumOfSteps === FLUSH_AFTER_N_STEPS) { + flushInput(); + inputMap.delete(e.target); + } else { + setTimeout(() => { + if (inputMap.get(e.target)?.time === currentTime) { + flushInput(); + inputMap.delete(e.target); + } + }, FLUSH_AFTER_MS); + } + } else { + // Normal Blockly input + e.target.value = newValue.toString(); + } + }); +} diff --git a/src/addons/addons/editor-square-inputs/_manifest_entry.js b/src/addons/addons/editor-square-inputs/_manifest_entry.js new file mode 100644 index 00000000000..41904c1fd44 --- /dev/null +++ b/src/addons/addons/editor-square-inputs/_manifest_entry.js @@ -0,0 +1,40 @@ +/* generated by pull.js */ +const manifest = { + "editorOnly": true, + "noTranslations": true, + "name": "Square block text inputs", + "description": "Makes text and color inputs on blocks rectangular instead of round, like in Scratch 2.0.", + "credits": [ + { + "name": "CST1229", + "link": "https://scratch.mit.edu/users/CST1229/" + } + ], + "tags": [ + "theme", + "new" + ], + "userscripts": [ + { + "url": "userscript.js" + } + ], + "settings": [ + { + "dynamic": true, + "name": "Text inputs", + "id": "text", + "type": "boolean", + "default": true + }, + { + "dynamic": true, + "name": "Color inputs", + "id": "color", + "type": "boolean", + "default": true + } + ], + "dynamicDisable": true +}; +export default manifest; diff --git a/src/addons/addons/editor-square-inputs/_runtime_entry.js b/src/addons/addons/editor-square-inputs/_runtime_entry.js new file mode 100644 index 00000000000..bc67131957e --- /dev/null +++ b/src/addons/addons/editor-square-inputs/_runtime_entry.js @@ -0,0 +1,5 @@ +/* generated by pull.js */ +import _js from "./userscript.js"; +export const resources = { + "userscript.js": _js, +}; diff --git a/src/addons/addons/editor-square-inputs/userscript.js b/src/addons/addons/editor-square-inputs/userscript.js new file mode 100644 index 00000000000..be6db67d1a6 --- /dev/null +++ b/src/addons/addons/editor-square-inputs/userscript.js @@ -0,0 +1,34 @@ +import { updateAllBlocks } from "../custom-block-shape/update-all-blocks.js"; + +export default async function ({ addon }) { + const ScratchBlocks = await addon.tab.traps.getBlockly(); + const vm = addon.tab.traps.vm; + + const opcodeToSettings = { + text: "text", + argument_editor_string_number: "text", + colour_picker: "color", + }; + + const originalJsonInit = ScratchBlocks.BlockSvg.prototype.jsonInit; + + ScratchBlocks.BlockSvg.prototype.jsonInit = function (json) { + if (!addon.self.disabled && opcodeToSettings[this.type] && addon.settings.get(opcodeToSettings[this.type])) { + originalJsonInit.call(this, { + ...json, + outputShape: ScratchBlocks.OUTPUT_SHAPE_SQUARE, + }); + } else { + originalJsonInit.call(this, json); + } + }; + + function update() { + updateAllBlocks(vm, addon.tab.traps.getWorkspace(), ScratchBlocks); + } + + addon.self.addEventListener("disabled", update); + addon.self.addEventListener("reenabled", update); + addon.settings.addEventListener("change", update); + update(); +} diff --git a/src/addons/addons/number-pad/_manifest_entry.js b/src/addons/addons/number-pad/_manifest_entry.js index b4e4223c35d..4ea3c42ab45 100644 --- a/src/addons/addons/number-pad/_manifest_entry.js +++ b/src/addons/addons/number-pad/_manifest_entry.js @@ -15,9 +15,7 @@ const manifest = { "id": "explanation" } ], - "tags": [ - "new" - ], + "tags": [], "userscripts": [ { "url": "userscript.js" diff --git a/src/addons/addons/paint-skew/_manifest_entry.js b/src/addons/addons/paint-skew/_manifest_entry.js new file mode 100644 index 00000000000..8573dd7dc26 --- /dev/null +++ b/src/addons/addons/paint-skew/_manifest_entry.js @@ -0,0 +1,30 @@ +/* generated by pull.js */ +const manifest = { + "editorOnly": true, + "noTranslations": true, + "enabledByDefault": true, + "name": "Skewing in costume editor", + "description": "Hold Ctrl while scaling an object on its sides to skew it. Hold Alt while skewing an object to skew it from its center.", + "info": [ + { + "text": "On macOS, use the Command key instead of the Control key and the Option key instead of the Alt key.", + "id": "useCmdOnMac" + } + ], + "credits": [ + { + "name": "CST1229", + "link": "https://scratch.mit.edu/users/CST1229/" + } + ], + "tags": [ + "new" + ], + "userscripts": [ + { + "url": "userscript.js" + } + ], + "dynamicDisable": true +}; +export default manifest; diff --git a/src/addons/addons/paint-skew/_runtime_entry.js b/src/addons/addons/paint-skew/_runtime_entry.js new file mode 100644 index 00000000000..bc67131957e --- /dev/null +++ b/src/addons/addons/paint-skew/_runtime_entry.js @@ -0,0 +1,5 @@ +/* generated by pull.js */ +import _js from "./userscript.js"; +export const resources = { + "userscript.js": _js, +}; diff --git a/src/addons/addons/paint-skew/userscript.js b/src/addons/addons/paint-skew/userscript.js new file mode 100644 index 00000000000..8eea71fd3c4 --- /dev/null +++ b/src/addons/addons/paint-skew/userscript.js @@ -0,0 +1,131 @@ +import { addons, initialize } from "../paint-snap/compatibility.js"; + +export default async function ({ addon }) { + const paper = await addon.tab.traps.getPaper(); + + const addSkew = function () { + if (!paper.tool || !paper.tool.boundingBoxTool) return; + // ScaleTool + const ST = paper.tool.boundingBoxTool._modeMap?.SCALE?.constructor; + if (!ST || ST.hasSkew) { + return; + } + ST.hasSkew = true; + + const ogMouseDown = ST.prototype.onMouseDown; + ST.prototype.onMouseDown = function (hitResult, boundsPath, selectedItems) { + if (this.active) return; + this.index = hitResult.item.data.index; + ogMouseDown.call(this, hitResult, boundsPath, selectedItems); + this.skewCenter = false; + this.lastSkx = 0; + this.lastSky = 0; + this.skewBounds = this.itemGroup.bounds.clone(); + }; + + addons.paintSkew = function (event, original) { + if (!this.active) return; + if (addon.self.disabled) return original(); + + const bounds = this.skewBounds; + const doShear = (skx, sky) => { + if (skx === 0 && sky === 0) return; + + let offcenterPosition; + if (!this.skewCenter) { + switch (this._getRectCornerNameByIndex(this.index)) { + case "topCenter": + case "leftCenter": + offcenterPosition = this.itemGroup.position.add(new paper.Point(bounds.width / 2, bounds.height / 2)); + break; + case "bottomCenter": + case "rightCenter": + offcenterPosition = this.itemGroup.position.subtract( + new paper.Point(bounds.width / 2, bounds.height / 2) + ); + break; + } + } + + const position = this.skewCenter ? this.itemGroup.position : offcenterPosition; + + const shearMult = this.skewCenter ? 2 : 1; + // swap width and height because apparently + // shearing is based on the dimension perpendicular + // to the one that is being skewed + const shearX = (skx / bounds.height) * shearMult; + const shearY = (sky / bounds.width) * shearMult; + + this.itemGroup.shear(shearX, shearY, position); + if (this.selectionAnchor) { + this.selectionAnchor.shear(-shearX, -shearY); + } + }; + + // Revert skew + doShear(-this.lastSkx, -this.lastSky); + + this.skewCenter = event.modifiers.alt; + + let skx = 0; + let sky = 0; + this.lastSkx = 0; + this.lastSky = 0; + if ((event.modifiers.control || event.modifiers.command) && !this.isCorner) { + // Skew + // Reset position + this.centered = false; + this.itemGroup.scale(1 / this.lastSx, 1 / this.lastSy, this.pivot); + if (this.selectionAnchor) { + this.selectionAnchor.scale(this.lastSx, this.lastSy); + } + this.lastSx = 1; + this.lastSy = 1; + + const delta = event.point.subtract(this.pivot); + switch (this._getRectCornerNameByIndex(this.index)) { + case "topCenter": + delta.x *= -1; + delta.y = 0; + break; + case "bottomCenter": + delta.y = 0; + break; + case "leftCenter": + delta.y *= -1; + delta.x = 0; + break; + case "rightCenter": + delta.x = 0; + break; + default: + delta.x = 0; + delta.y = 0; + } + skx = delta.x; + sky = delta.y; + + doShear(skx, sky); + } else { + // Scale + original(); + } + this.lastSkx = skx; + this.lastSky = sky; + }; + + initialize(paper, ST); + }; + + addon.tab.redux.initialize(); + addon.tab.redux.addEventListener("statechanged", (e) => { + const action = e.detail.action; + if ( + action.type === "scratch-paint/modes/CHANGE_MODE" && + (action.mode === "BIT_SELECT" || action.mode === "SELECT") + ) { + addSkew(); + } + }); + addSkew(); +} diff --git a/src/addons/addons/paint-snap/_manifest_entry.js b/src/addons/addons/paint-snap/_manifest_entry.js index b3de9d00427..1b4c411ffe4 100644 --- a/src/addons/addons/paint-snap/_manifest_entry.js +++ b/src/addons/addons/paint-snap/_manifest_entry.js @@ -2,9 +2,7 @@ const manifest = { "name": "Costume editor snapping", "description": "Snap objects in the costume editor to bounding boxes and vector nodes.", - "tags": [ - "new" - ], + "tags": [], "userscripts": [ { "url": "userscript.js" diff --git a/src/addons/addons/rename-broadcasts/_manifest_entry.js b/src/addons/addons/rename-broadcasts/_manifest_entry.js index 6ab3ee89cee..1cd9127dd58 100644 --- a/src/addons/addons/rename-broadcasts/_manifest_entry.js +++ b/src/addons/addons/rename-broadcasts/_manifest_entry.js @@ -13,9 +13,7 @@ const manifest = { "name": "GarboMuffin" } ], - "tags": [ - "new" - ], + "tags": [], "userscripts": [ { "url": "userscript.js" diff --git a/src/addons/addons/sprite-properties/_manifest_entry.js b/src/addons/addons/sprite-properties/_manifest_entry.js index 456c88d368f..296e3a0090f 100644 --- a/src/addons/addons/sprite-properties/_manifest_entry.js +++ b/src/addons/addons/sprite-properties/_manifest_entry.js @@ -4,8 +4,7 @@ const manifest = { "name": "Collapsing sprite properties", "description": "Hides the sprite properties panel by default, like in Scratch 2.0. Use the info button on the currently selected sprite or double-click a sprite to show the properties panel again. To re-hide it, use the collapse button in the properties panel or double-click a sprite.", "tags": [ - "recommended", - "new" + "recommended" ], "credits": [ { diff --git a/src/addons/addons/vol-slider/_manifest_entry.js b/src/addons/addons/vol-slider/_manifest_entry.js index 155a570d809..e30a47150d9 100644 --- a/src/addons/addons/vol-slider/_manifest_entry.js +++ b/src/addons/addons/vol-slider/_manifest_entry.js @@ -51,8 +51,7 @@ const manifest = { ], "dynamicDisable": true, "tags": [ - "recommended", - "new" + "recommended" ] }; export default manifest; diff --git a/src/addons/generated/addon-entries.js b/src/addons/generated/addon-entries.js index 13bd43924bd..c3a088c0a23 100644 --- a/src/addons/generated/addon-entries.js +++ b/src/addons/generated/addon-entries.js @@ -25,10 +25,13 @@ export default { "default-costume-editor-color": () => import(/* webpackChunkName: "addon-entry-default-costume-editor-color" */ "../addons/default-costume-editor-color/_runtime_entry.js"), "bitmap-copy": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/bitmap-copy/_runtime_entry.js"), "2d-color-picker": () => import(/* webpackChunkName: "addon-entry-2d-color-picker" */ "../addons/2d-color-picker/_runtime_entry.js"), + "paint-skew": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/paint-skew/_runtime_entry.js"), "better-img-uploads": () => import(/* webpackChunkName: "addon-entry-better-img-uploads" */ "../addons/better-img-uploads/_runtime_entry.js"), "pick-colors-from-stage": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/pick-colors-from-stage/_runtime_entry.js"), "custom-block-shape": () => import(/* webpackChunkName: "addon-entry-custom-block-shape" */ "../addons/custom-block-shape/_runtime_entry.js"), + "editor-square-inputs": () => import(/* webpackChunkName: "addon-entry-editor-square-inputs" */ "../addons/editor-square-inputs/_runtime_entry.js"), "zebra-striping": () => import(/* webpackChunkName: "addon-entry-zebra-striping" */ "../addons/zebra-striping/_runtime_entry.js"), + "editor-compact": () => import(/* webpackChunkName: "addon-entry-editor-compact" */ "../addons/editor-compact/_runtime_entry.js"), "editor-theme3": () => import(/* webpackChunkName: "addon-entry-editor-theme3" */ "../addons/editor-theme3/_runtime_entry.js"), "custom-block-text": () => import(/* webpackChunkName: "addon-entry-custom-block-text" */ "../addons/custom-block-text/_runtime_entry.js"), "editor-colored-context-menus": () => import(/* webpackChunkName: "addon-entry-editor-colored-context-menus" */ "../addons/editor-colored-context-menus/_runtime_entry.js"), @@ -43,6 +46,7 @@ export default { "block-switching": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/block-switching/_runtime_entry.js"), "load-extensions": () => import(/* webpackChunkName: "addon-entry-load-extensions" */ "../addons/load-extensions/_runtime_entry.js"), "custom-zoom": () => import(/* webpackChunkName: "addon-entry-custom-zoom" */ "../addons/custom-zoom/_runtime_entry.js"), + "copy-reporter": () => import(/* webpackChunkName: "addon-entry-copy-reporter" */ "../addons/copy-reporter/_runtime_entry.js"), "initialise-sprite-position": () => import(/* webpackChunkName: "addon-entry-initialise-sprite-position" */ "../addons/initialise-sprite-position/_runtime_entry.js"), "blocks2image": () => import(/* webpackChunkName: "addon-entry-blocks2image" */ "../addons/blocks2image/_runtime_entry.js"), "remove-curved-stage-border": () => import(/* webpackChunkName: "addon-entry-remove-curved-stage-border" */ "../addons/remove-curved-stage-border/_runtime_entry.js"), @@ -62,6 +66,7 @@ export default { "editor-comment-previews": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/editor-comment-previews/_runtime_entry.js"), "columns": () => import(/* webpackChunkName: "addon-entry-columns" */ "../addons/columns/_runtime_entry.js"), "number-pad": () => import(/* webpackChunkName: "addon-entry-number-pad" */ "../addons/number-pad/_runtime_entry.js"), + "editor-number-arrow-keys": () => import(/* webpackChunkName: "addon-entry-editor-number-arrow-keys" */ "../addons/editor-number-arrow-keys/_runtime_entry.js"), "script-snap": () => import(/* webpackChunkName: "addon-entry-script-snap" */ "../addons/script-snap/_runtime_entry.js"), "fullscreen": () => import(/* webpackChunkName: "addon-entry-fullscreen" */ "../addons/fullscreen/_runtime_entry.js"), "hide-stage": () => import(/* webpackChunkName: "addon-entry-hide-stage" */ "../addons/hide-stage/_runtime_entry.js"), diff --git a/src/addons/generated/addon-manifests.js b/src/addons/generated/addon-manifests.js index e29c1ecd740..0dbb06ee85b 100644 --- a/src/addons/generated/addon-manifests.js +++ b/src/addons/generated/addon-manifests.js @@ -24,10 +24,13 @@ import _paint_snap from "../addons/paint-snap/_manifest_entry.js"; import _default_costume_editor_color from "../addons/default-costume-editor-color/_manifest_entry.js"; import _bitmap_copy from "../addons/bitmap-copy/_manifest_entry.js"; import _2d_color_picker from "../addons/2d-color-picker/_manifest_entry.js"; +import _paint_skew from "../addons/paint-skew/_manifest_entry.js"; import _better_img_uploads from "../addons/better-img-uploads/_manifest_entry.js"; import _pick_colors_from_stage from "../addons/pick-colors-from-stage/_manifest_entry.js"; import _custom_block_shape from "../addons/custom-block-shape/_manifest_entry.js"; +import _editor_square_inputs from "../addons/editor-square-inputs/_manifest_entry.js"; import _zebra_striping from "../addons/zebra-striping/_manifest_entry.js"; +import _editor_compact from "../addons/editor-compact/_manifest_entry.js"; import _editor_theme3 from "../addons/editor-theme3/_manifest_entry.js"; import _custom_block_text from "../addons/custom-block-text/_manifest_entry.js"; import _editor_colored_context_menus from "../addons/editor-colored-context-menus/_manifest_entry.js"; @@ -42,6 +45,7 @@ import _folders from "../addons/folders/_manifest_entry.js"; import _block_switching from "../addons/block-switching/_manifest_entry.js"; import _load_extensions from "../addons/load-extensions/_manifest_entry.js"; import _custom_zoom from "../addons/custom-zoom/_manifest_entry.js"; +import _copy_reporter from "../addons/copy-reporter/_manifest_entry.js"; import _initialise_sprite_position from "../addons/initialise-sprite-position/_manifest_entry.js"; import _blocks2image from "../addons/blocks2image/_manifest_entry.js"; import _remove_curved_stage_border from "../addons/remove-curved-stage-border/_manifest_entry.js"; @@ -61,6 +65,7 @@ import _swap_local_global from "../addons/swap-local-global/_manifest_entry.js"; import _editor_comment_previews from "../addons/editor-comment-previews/_manifest_entry.js"; import _columns from "../addons/columns/_manifest_entry.js"; import _number_pad from "../addons/number-pad/_manifest_entry.js"; +import _editor_number_arrow_keys from "../addons/editor-number-arrow-keys/_manifest_entry.js"; import _script_snap from "../addons/script-snap/_manifest_entry.js"; import _fullscreen from "../addons/fullscreen/_manifest_entry.js"; import _hide_stage from "../addons/hide-stage/_manifest_entry.js"; @@ -96,10 +101,13 @@ export default { "default-costume-editor-color": _default_costume_editor_color, "bitmap-copy": _bitmap_copy, "2d-color-picker": _2d_color_picker, + "paint-skew": _paint_skew, "better-img-uploads": _better_img_uploads, "pick-colors-from-stage": _pick_colors_from_stage, "custom-block-shape": _custom_block_shape, + "editor-square-inputs": _editor_square_inputs, "zebra-striping": _zebra_striping, + "editor-compact": _editor_compact, "editor-theme3": _editor_theme3, "custom-block-text": _custom_block_text, "editor-colored-context-menus": _editor_colored_context_menus, @@ -114,6 +122,7 @@ export default { "block-switching": _block_switching, "load-extensions": _load_extensions, "custom-zoom": _custom_zoom, + "copy-reporter": _copy_reporter, "initialise-sprite-position": _initialise_sprite_position, "blocks2image": _blocks2image, "remove-curved-stage-border": _remove_curved_stage_border, @@ -133,6 +142,7 @@ export default { "editor-comment-previews": _editor_comment_previews, "columns": _columns, "number-pad": _number_pad, + "editor-number-arrow-keys": _editor_number_arrow_keys, "script-snap": _script_snap, "fullscreen": _fullscreen, "hide-stage": _hide_stage, diff --git a/src/addons/generated/upstream-meta.json b/src/addons/generated/upstream-meta.json index d3f8ef1cbde..ef26868bbaa 100644 --- a/src/addons/generated/upstream-meta.json +++ b/src/addons/generated/upstream-meta.json @@ -1 +1 @@ -{"commit":"a79f5d8"} \ No newline at end of file +{"commit":"24dde07"} \ No newline at end of file diff --git a/src/playground/credits/users.js b/src/playground/credits/users.js index 723b973f898..e4c89c79f1f 100644 --- a/src/playground/credits/users.js +++ b/src/playground/credits/users.js @@ -125,6 +125,9 @@ const addonDevelopers = [ { userID: '11677378', username: 'Mr_MPH' + }, + { + username: 'TheKodeToad' } ].map(fromHardcoded);