From 3cfba04220e95e01029583563ac39660906c2ac9 Mon Sep 17 00:00:00 2001 From: GarboMuffin Date: Wed, 2 Nov 2022 18:29:27 -0500 Subject: [PATCH] New addon: rename broadcasts --- src/addons/addons-l10n-settings/de.json | 1 + src/addons/addons-l10n-settings/es.json | 1 + src/addons/addons-l10n-settings/fr.json | 1 + src/addons/addons-l10n-settings/hu.json | 2 + src/addons/addons-l10n-settings/it.json | 2 + src/addons/addons-l10n-settings/ja.json | 2 + src/addons/addons-l10n-settings/nl.json | 1 + src/addons/addons-l10n-settings/pt.json | 1 + src/addons/addons-l10n-settings/sl.json | 1 + src/addons/addons-l10n-settings/tr.json | 2 + src/addons/addons-l10n-settings/zh-tw.json | 3 + src/addons/addons-l10n/en.json | 3 + src/addons/addons-l10n/hu.json | 3 + src/addons/addons-l10n/it.json | 3 + src/addons/addons-l10n/ja.json | 3 + src/addons/addons-l10n/tr.json | 3 + src/addons/addons-l10n/zh-tw.json | 1 + src/addons/addons.js | 4 +- .../pick-colors-from-stage/_manifest_entry.js | 4 +- .../rename-broadcasts/_manifest_entry.js | 26 +++ .../rename-broadcasts/_runtime_entry.js | 5 + .../addons/rename-broadcasts/userscript.js | 192 ++++++++++++++++++ .../addons/zebra-striping/_manifest_entry.js | 4 +- src/addons/generated/addon-entries.js | 1 + src/addons/generated/addon-manifests.js | 2 + src/addons/generated/l10n-entries.js | 1 + src/addons/generated/l10n-settings-entries.js | 1 + src/addons/generated/upstream-meta.json | 2 +- 28 files changed, 266 insertions(+), 9 deletions(-) create mode 100644 src/addons/addons-l10n-settings/zh-tw.json create mode 100644 src/addons/addons-l10n/zh-tw.json create mode 100644 src/addons/addons/rename-broadcasts/_manifest_entry.js create mode 100644 src/addons/addons/rename-broadcasts/_runtime_entry.js create mode 100644 src/addons/addons/rename-broadcasts/userscript.js diff --git a/src/addons/addons-l10n-settings/de.json b/src/addons/addons-l10n-settings/de.json index d46e1e56100..ba99da652ea 100644 --- a/src/addons/addons-l10n-settings/de.json +++ b/src/addons/addons-l10n-settings/de.json @@ -258,6 +258,7 @@ "block-duplicate/@description": "Dupliziere schnell ein SKript, indem du es mit gedrückter Alt-Taste ziehst. Halte gleichzeitig auch Strg gedrückt, um nur den einzelnen Block zu duplizieren.", "block-duplicate/@info-mac": "Verwende auf macOS die Option-Taste statt der Alt-Taste und die Command-Taste statt der Strg-Taste.", "block-duplicate/@name": "Skripte mit Alt-Taste duplizieren", + "rename-broadcasts/@name": "Nachrichten umbenennen", "swap-local-global/@description": "Fügt weitere Optionen beim Umbenennen einer vorhandenen Variablen oder Liste hinzu: ermöglicht das Wechseln zwischen \"Für alle Figuren\" und \"Nur für diese Figur\" und ob Variablen in der Cloud gespeichert werden. Fügt auch eine neue Option beim Rechtsklicken auf eine Variable/Liste hinzu, um deren Typ schnell zu ändern.", "swap-local-global/@name": "Variablentyp ändern", "editor-comment-previews/@description": "Ermöglicht das Anzeigen einer Vorschau, wenn die Maus über reduzierten Kommentaren und Blöcken. Du kannst dies verwenden, um Kommentare außerhalb des Bildschirms anzuzeigen, einen Schleifenblock von seiner Unterseite anhand der Vorschau zu identifizieren, mehrere lange Kommentare in einen kleinen Bereich anzupassen und mehr.", diff --git a/src/addons/addons-l10n-settings/es.json b/src/addons/addons-l10n-settings/es.json index aab7afb95bc..a68a0d63d8c 100644 --- a/src/addons/addons-l10n-settings/es.json +++ b/src/addons/addons-l10n-settings/es.json @@ -250,6 +250,7 @@ "block-duplicate/@description": "Duplique rápidamente un script arrastrándolo mientras mantiene la tecla Alt. Apriete Ctrl también para solo duplicar un bloque en vez de toda la pila adjunta debajo.", "block-duplicate/@info-mac": "En macOS, use la tecla Option en vez de la tecla Alt y la tecla Command en vez de la tecla Control.", "block-duplicate/@name": "Duplicar script con tecla Alt", + "rename-broadcasts/@name": "Renombrar mensajes", "swap-local-global/@description": "Agrega más opciones al renombrar una variable o lista existente: permite cambiar entre \"Para todos los objetos\" y \"Solo para este objeto\" y si las variables son almacenadas en la nube. También agrega una nueva opción al hacer click derecho en una variable/lista para cambiar rápidamente su ámbito.", "swap-local-global/@name": "Cambiar variables entre \"Para todos los objetos\" y \"Solo para este objeto\"", "editor-comment-previews/@description": "Le permite previsualizar los contenidos de comentarios al poner el cursor sobre comentarios encogidos y bloques. Puede usar esto para ver comentarios que están fuera de la pantalla, identificar un bloque bucle desde el final por su previsualización, meter muchos comentarios en un lugar pequeño y más.", diff --git a/src/addons/addons-l10n-settings/fr.json b/src/addons/addons-l10n-settings/fr.json index 6f8a3f7b248..6bf8613e287 100644 --- a/src/addons/addons-l10n-settings/fr.json +++ b/src/addons/addons-l10n-settings/fr.json @@ -243,6 +243,7 @@ "block-duplicate/@description": "Dupliquez rapidement un script en le déplaçant tout en maintenant la touche Alt enfoncée. Maintenez la touche Ctrl enfoncée pour ne dupliquer qu'un seul bloc au lieu de toute la pile attachée en dessous.", "block-duplicate/@info-mac": "Sur macOS, utilisez la touche Option au lieu de la touche Alt et la touche Commande au lieu de la touche Contrôle.", "block-duplicate/@name": "Dupliquer le script avec la touche Alt", + "rename-broadcasts/@name": "Renommer les diffusions", "swap-local-global/@description": "Ajoute plus d'options lors du renommage d'une variable ou d'une liste existante : permet de basculer entre « Pour tous les sprites » et « Pour ce sprite uniquement » et si les variables sont stockées dans le cloud. Ajoute également une nouvelle option lors d'un clic droit sur une variable/liste pour changer rapidement sa portée.", "swap-local-global/@name": "Basculer les variables entre \"Pour tous les sprites\" et \"Pour ce sprite uniquement.", "editor-comment-previews/@description": "Vous permet de prévisualiser le contenu des commentaires en survolant les commentaires et blocs réduits. Vous pouvez l'utiliser pour afficher les commentaires hors écran, identifier un bloc de boucle à partir du bas par son aperçu, insérer de nombreux commentaires longs dans un petit espace, etc.", diff --git a/src/addons/addons-l10n-settings/hu.json b/src/addons/addons-l10n-settings/hu.json index 2fe5411a5ce..8fa1e35567d 100644 --- a/src/addons/addons-l10n-settings/hu.json +++ b/src/addons/addons-l10n-settings/hu.json @@ -258,6 +258,8 @@ "block-duplicate/@description": "Duplikálj egy kódot gyorsan azzal, hogy az Alt lenyomva tartása közben mozgatod. Ha a Ctrl-t is nyomva tartod, akkor csak egy blokkot duplikálsz az egész alatta levő blokk sor helyett.", "block-duplicate/@info-mac": "A macOS-on, használd az Option gombot Alt helyett és a Command gombot a Control helyett.", "block-duplicate/@name": "Kód duplikálása Alt gombbal", + "rename-broadcasts/@description": "Lehetőséget kínál az üzenetküldések nevének átírására az üzenetküldő blokkok a legördülő menüjében.", + "rename-broadcasts/@name": "Üzenetküldések átnevezése", "swap-local-global/@description": "További opciókat ad hozzá a már létező változók vagy listák átnevezésénél: megengedi a váltást \"Minden szereplőé\" és \"A kiválasztott szereplőé\" között, állítható továbbá a változók megosztottsága. Hozzáad még egy új opciót, amikor jobb kattintasz egy változót/listát, hogy gyorsabban állíthasd az elérhetőségét.", "swap-local-global/@name": "Változók váltása \"Minden szereplőé\" és \"A kiválasztott szereplé\" között", "editor-comment-previews/@description": "Megengedi, hogy megtekintsd a kommentek tartalmát azzal, hogy fölé viszed az egered egy összecsukott kommentnek vagy blokknak. Ezzel elolvashatsz képernyőn kívüli kommenteket, azonosíthatsz egy ismétlő blokkot az aljáról az előnézet alapján, sok hosszú komment elhelyezése kis helyen, és további lehetőségek.", diff --git a/src/addons/addons-l10n-settings/it.json b/src/addons/addons-l10n-settings/it.json index 09aff838a97..510c1b72610 100644 --- a/src/addons/addons-l10n-settings/it.json +++ b/src/addons/addons-l10n-settings/it.json @@ -259,6 +259,8 @@ "block-duplicate/@description": "Duplica rapidamente uno script trascinandolo mentre tieni premuto il tasto Alt. Tenendo premuto anche Ctrl duplicherai solo il blocco cliccato dal mouse invece di tutta la sequenza attaccata al di sotto. ", "block-duplicate/@info-mac": "In macOS usa il tasto Opzione invece del tasto Alt key e il tasto Command invece del tasto Control.", "block-duplicate/@name": "Duplica uno script con il tasto Alt", + "rename-broadcasts/@description": "Aggiunge una voce nel menu dei blocchi INVIA A TUTTI e QUANDO RICEVO per rinominare i messaggi. ", + "rename-broadcasts/@name": "Rinomina messaggi", "swap-local-global/@description": "Aggiunge più opzioni quando si rinomina una variabile o una lista esistente: permette di cambiare da \"Per tutti gli sprite\" e \"Solo per questo sprite\" e tra variabile locale e variabile cloud. Aggiunge un'ulteriore opzione quando si clicca una variabile/lista con il pulsante destro per cambiarne rapidamente la visibilità.", "swap-local-global/@name": "Cambia le variabili da \"Per tutti gli sprite\" a \"Solo per questo sprite\"", "editor-comment-previews/@description": "Ti permette di vedere l'anteprima del contenuto dei commenti passando il mouse sui commenti chiusi o sui blocchi. Puoi usarlo per vedere i commenti che sono al di fuori dell'area visibile dell'editor, identificare un blocco di tipo ciclo dal basso attraverso la sua anteprima, far entrare i commenti lunghi in uno spazio piccolo e molto altro. ", diff --git a/src/addons/addons-l10n-settings/ja.json b/src/addons/addons-l10n-settings/ja.json index 51a9afe790e..d036391650f 100644 --- a/src/addons/addons-l10n-settings/ja.json +++ b/src/addons/addons-l10n-settings/ja.json @@ -259,6 +259,8 @@ "block-duplicate/@description": "Altキーを押したままスクリプトをドラッグし、スクリプトを複製する。Ctrlキーも押すと、ブロックを個別に複製できる。", "block-duplicate/@info-mac": "macOSでは、Altキーの代わりにOptionキーを、Ctrlキーの代わりにCmdキーを利用できます。", "block-duplicate/@name": "Altキーでスクリプトを複製", + "rename-broadcasts/@description": "メッセージブロックのドロップダウンにメッセージを改名するオプションを追加する。", + "rename-broadcasts/@name": "メッセージ名を変更", "swap-local-global/@description": "変数やリストを改名するときに、「すべてのスプライト用」と「このスプライトのみ」や、クラウド変数を切り替えられるようにする。右クリックメニューに簡単に変更するための項目を追加する。", "swap-local-global/@name": "変数の「すべてのスプライト用」と「このスプライトのみ」を変更", "editor-comment-previews/@description": "最小化されたコメントやブロックに付属しているコメントの内容を、ホバーしてプレビューできるようにする。", diff --git a/src/addons/addons-l10n-settings/nl.json b/src/addons/addons-l10n-settings/nl.json index 9c17869c38f..d9f32a3a366 100644 --- a/src/addons/addons-l10n-settings/nl.json +++ b/src/addons/addons-l10n-settings/nl.json @@ -257,6 +257,7 @@ "block-duplicate/@description": "Dupliceer snel een script door het te slepen met de Alt-toets ingedrukt. Houd Ctrl ook ingedrukt om alleen een enkel blok te dupliceren in plaats van het hele script eronder.", "block-duplicate/@info-mac": "Gebruik de Option-toets in plaats van de Alt-toets en de Command-toets in plaats van de Control-toets op macOS.", "block-duplicate/@name": "Scripts dupliceren met de Alt-toets", + "rename-broadcasts/@name": "Signalen hernoemen", "swap-local-global/@description": "Geeft meer opties voor het hernoemen van variabelen of lijsten: laat je kiezen tussen \"Voor alle sprites\" en \"Alleen voor deze sprite\" en of variabelen voor de cloud moeten zijn. Voegt ook een optie toe voor rechterklikken op een variabele/lijst om snel zijn type te veranderen.", "swap-local-global/@name": "Wissel variabelen tussen \"Voor alle sprites\" en \"Alleen voor deze sprite\"", "editor-comment-previews/@description": "Geeft je de mogelijkheid om de inhoud van opmerkingen te zien door je muisaanwijzer over samengeklapte opmerkingen en blokken te zetten. Hiermee kun je opmerkingen zien die van het scherm af zijn, herhalingsblokken te onderscheiden vanaf de onderkant door zijn voorbeeld, veel grote opmerkingen in een kleine plek passen, en meer.", diff --git a/src/addons/addons-l10n-settings/pt.json b/src/addons/addons-l10n-settings/pt.json index 98544321361..88f8d066c56 100644 --- a/src/addons/addons-l10n-settings/pt.json +++ b/src/addons/addons-l10n-settings/pt.json @@ -252,6 +252,7 @@ "block-duplicate/@description": "Duplique um script rapidamente arrastando-o enquanto segura a tecla Alt. Segure Ctrl junto para duplicar só um único bloco ao invés da pilha inteira conectada.", "block-duplicate/@info-mac": "No macOS, use a tecla Option ao invés de Alt e Command ao invés de Ctrl.", "block-duplicate/@name": "Duplicar script segurando Alt", + "rename-broadcasts/@name": "Renomear mensagens", "swap-local-global/@description": "Adiciona mais opções ao renomear uma variável ou lista existente: permite trocar entre a opção \"Para todos os atores\" e \"Apenas para este ator\" e trocar se as variáveis são guardadas na nuvem ou não. Também adiciona uma nova opção ao clicar com o botão direito em uma variável/lista para rapidamente trocar seu acesso.", "swap-local-global/@name": "Trocar variáveis entre \"Para todos os atores\" e \"Apenas para este ator\"", "editor-comment-previews/@description": "Te deixa ver o texto de comentários ao passar o mouse em cima de comentários fechados e blocos. Você pode usar isso para ver comentários fora da tela, identificar um loop pela ponta inferior através de sua pré-visualização, encaixar vários comentários em um espaço pequeno, e mais.", diff --git a/src/addons/addons-l10n-settings/sl.json b/src/addons/addons-l10n-settings/sl.json index 93e409277c9..9974f34ce6d 100644 --- a/src/addons/addons-l10n-settings/sl.json +++ b/src/addons/addons-l10n-settings/sl.json @@ -257,6 +257,7 @@ "block-duplicate/@description": "Hitro podvojite skripto tako, da jo potegnete, medtem ko držite tipko Alt. Držite tudi tipko Ctrl, da podvojite samo en block namesto vseh povezanih blokov.", "block-duplicate/@info-mac": "Če uporabljate macOS, uporabite tipko Option namesto Alt in Command namesto Control.", "block-duplicate/@name": "Podvoji skripto s tipko Alt", + "rename-broadcasts/@name": "Preimenovanje sporočil", "swap-local-global/@description": "V okno za preimenovanje spremenljivke ali seznama doda več možnosti: omogoči spremembo spremenljivk \"Za vse figure\" v \"Samo za to figuro\" in obratno ter navadnih spremenljivk v spremenljivke v oblaku. Poleg tega doda novo možnost za hitro spremembo vidnosti, ko kliknete spremenljivko/seznam z desno miškino tipko.", "swap-local-global/@name": "Zamenjaj spremenljivke \"za vse figure\" in \"samo za to figuro\"", "editor-comment-previews/@description": "Pokaže vsebino komentarja, ko premaknete miško na skrčen komentar ali blok. To lahko uporabite na primer za branje komentarjev, ki na zaslonu niso vidni, prepoznavanje zanke na dnu s pomočjo komentarja in dodajanje več dolgih komentarjev v majhen prostor.", diff --git a/src/addons/addons-l10n-settings/tr.json b/src/addons/addons-l10n-settings/tr.json index e4fb4938583..4c3ab8eb92f 100644 --- a/src/addons/addons-l10n-settings/tr.json +++ b/src/addons/addons-l10n-settings/tr.json @@ -260,6 +260,8 @@ "block-duplicate/@description": "Alt tuşunu basılı tutarken bir kodu sürükleyerek onu hızlıca çoğaltın. Altına eklenen yığının tamamı yerine yalnızca tek bir bloğu çoğaltmak için Ctrl tuşuna da basılı tutun.", "block-duplicate/@info-mac": "macOS’ta Alt tuşu yerine Option tuşunu ve Kontrol tuşu yerine Komut tuşunu kullanın.", "block-duplicate/@name": "Alt tuşuyla kodu çoğalt", + "rename-broadcasts/@description": "Haber bloklarının açılır listelerine haber mesajlarını yeniden adlandırmak için bir seçenek ekler.", + "rename-broadcasts/@name": "Haberleri yeniden adlandırma", "swap-local-global/@description": "Mevcut bir değişkeni veya listeyi yeniden adlandırırken daha fazla seçenek ekler: \"Tüm kuklalar için\" ve \"Yalnızca bu kukla için\" arasında değişiklik yapılmasına ve değişkenlerin bulutta depolanıp depolanmayacağına izin verir. Ayrıca durumunu hızlı bir şekilde değiştirmek için değişkene/listeye sağ tıklandığında yeni bir seçenek ekler.", "swap-local-global/@name": "\"Tüm kuklalar için\" ve \"Yalnızca bu kukla için\" arasında geçiş yapma", "editor-comment-previews/@description": "Fareyle daraltılmış yorumların ve blokların üzerine gelerek yorumların içeriğinin ön izlemesini görmeye olanak tanır. Bunu ekran dışındaki yorumları görüntülemek için, ön izlemesiyle alttan bir döngü bloğu belirlemek için, birçok uzun yorumu küçük bir alana sığdırmak için ve çok daha fazlası için kullanabilirsiniz.", diff --git a/src/addons/addons-l10n-settings/zh-tw.json b/src/addons/addons-l10n-settings/zh-tw.json new file mode 100644 index 00000000000..7dbaed84dce --- /dev/null +++ b/src/addons/addons-l10n-settings/zh-tw.json @@ -0,0 +1,3 @@ +{ + "rename-broadcasts/@name": "重新命名廣播訊息" +} \ No newline at end of file diff --git a/src/addons/addons-l10n/en.json b/src/addons/addons-l10n/en.json index 4e702a63fcc..b89e186020f 100644 --- a/src/addons/addons-l10n/en.json +++ b/src/addons/addons-l10n/en.json @@ -243,6 +243,9 @@ "editor-extra-keys/enter-key": "enter", "move-to-top-bottom/bottom": "move to bottom", "move-to-top-bottom/top": "move to top", + "rename-broadcasts/RENAME_BROADCAST": "Rename message", + "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Rename Message", + "rename-broadcasts/RENAME_BROADCAST_TITLE": "Rename all \"{name}\" messages to:", "swap-local-global/cant-convert-cloud": "Cloud variables can't be converted to this sprite only.", "swap-local-global/cant-convert-conflict": "Can't convert because it would conflict with variables in another sprite: {sprites}", "swap-local-global/cant-convert-stage": "The stage can't have variables for this sprite only.", diff --git a/src/addons/addons-l10n/hu.json b/src/addons/addons-l10n/hu.json index 7bc8b8a1d93..64b7cdfc918 100644 --- a/src/addons/addons-l10n/hu.json +++ b/src/addons/addons-l10n/hu.json @@ -233,6 +233,9 @@ "blocks2image/export_selected_to_SVG": "Exportáld a blokkokat SVG-ként", "move-to-top-bottom/bottom": "áthelyezés legalulra", "move-to-top-bottom/top": "áthelyezés legfelülre", + "rename-broadcasts/RENAME_BROADCAST": "Üzenet átnevezése", + "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Üzenet Átnevezése", + "rename-broadcasts/RENAME_BROADCAST_TITLE": "Minden „{name}” üzenet átnevezése erre:", "swap-local-global/cant-convert-cloud": "Megosztott változókat nem lehet átkonvertálni a kiválasztott szereplőévé.", "swap-local-global/cant-convert-conflict": "Nem konvertálható, mert szembeütközne más szereplőben található változókkal: {sprites}", "swap-local-global/cant-convert-stage": "A színpadnak nem lehetnek kiválsztott szereplői változói.", diff --git a/src/addons/addons-l10n/it.json b/src/addons/addons-l10n/it.json index 1863d429f35..83bfd07d941 100644 --- a/src/addons/addons-l10n/it.json +++ b/src/addons/addons-l10n/it.json @@ -230,6 +230,9 @@ "editor-extra-keys/enter-key": "invio", "move-to-top-bottom/bottom": "porta in fondo", "move-to-top-bottom/top": "porta in cima", + "rename-broadcasts/RENAME_BROADCAST": "Rinomina messaggio", + "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Rinomina Messaggio", + "rename-broadcasts/RENAME_BROADCAST_TITLE": "Rinomina tutti i messaggi \"{name}\" come:", "swap-local-global/cant-convert-cloud": "Le variabili cloud non possono essere convertite a \"Solo per questo sprite\"", "swap-local-global/cant-convert-conflict": "Impossibile convertire perché entrerebbe in conflitto con le variabili di un altro sprite: {sprites}", "swap-local-global/cant-convert-stage": "Lo stage non può avere variabili \"Solo per questo sprite\".", diff --git a/src/addons/addons-l10n/ja.json b/src/addons/addons-l10n/ja.json index e0d582027d9..59f1cd65ada 100644 --- a/src/addons/addons-l10n/ja.json +++ b/src/addons/addons-l10n/ja.json @@ -235,6 +235,9 @@ "editor-extra-keys/enter-key": "Enter", "move-to-top-bottom/bottom": "一番下に移動", "move-to-top-bottom/top": "一番上に移動", + "rename-broadcasts/RENAME_BROADCAST": "メッセージ名を変更", + "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "メッセージ名を変更", + "rename-broadcasts/RENAME_BROADCAST_TITLE": "メッセージ \"{name}\" をすべて以下の名前に変える:", "swap-local-global/cant-convert-cloud": "クラウド変数を「このスプライトのみ」に設定することはできません。", "swap-local-global/cant-convert-conflict": "他のスプライトで名前が衝突するため変更できません: {sprites}", "swap-local-global/cant-convert-stage": "ステージは「このスプライトのみ」変数を持つことができません。", diff --git a/src/addons/addons-l10n/tr.json b/src/addons/addons-l10n/tr.json index 4677626f3ad..069254756af 100644 --- a/src/addons/addons-l10n/tr.json +++ b/src/addons/addons-l10n/tr.json @@ -233,6 +233,9 @@ "blocks2image/export_selected_to_SVG": "Bloğu SVG olarak dışa aktar", "move-to-top-bottom/bottom": "en alta taşı", "move-to-top-bottom/top": "en üste taşı", + "rename-broadcasts/RENAME_BROADCAST": "Mesajı yeniden adlandır", + "rename-broadcasts/RENAME_BROADCAST_MODAL_TITLE": "Mesajı Yeniden Adlandır", + "rename-broadcasts/RENAME_BROADCAST_TITLE": "Tüm \"{name}\" mesajlarını şu şekilde yeniden adlandır:", "swap-local-global/cant-convert-cloud": "Bulut değişkenleri, yalnızca bu kukla için ayarına dönüştürülemez.", "swap-local-global/cant-convert-conflict": "{sprites}, başka bir kukladaki değişkenlerle çakışacağı için dönüştürülemiyor.", "swap-local-global/cant-convert-stage": "Dekor alanı, yalnızca bu kukla için değişkenine sahip olamaz.", diff --git a/src/addons/addons-l10n/zh-tw.json b/src/addons/addons-l10n/zh-tw.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/addons/addons-l10n/zh-tw.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/addons/addons.js b/src/addons/addons.js index 51df46fd833..c79f757d10a 100644 --- a/src/addons/addons.js +++ b/src/addons/addons.js @@ -52,6 +52,7 @@ const addons = [ 'move-to-top-bottom', 'disable-paste-offset', 'block-duplicate', + 'rename-broadcasts', 'swap-local-global', 'editor-comment-previews', 'columns', @@ -66,8 +67,7 @@ const addons = [ ]; const newAddons = [ - 'pick-colors-from-stage', - 'zebra-striping' + 'rename-broadcasts' ]; // eslint-disable-next-line import/no-commonjs diff --git a/src/addons/addons/pick-colors-from-stage/_manifest_entry.js b/src/addons/addons/pick-colors-from-stage/_manifest_entry.js index ad5ddc47fa3..3391502261a 100644 --- a/src/addons/addons/pick-colors-from-stage/_manifest_entry.js +++ b/src/addons/addons/pick-colors-from-stage/_manifest_entry.js @@ -10,9 +10,7 @@ const manifest = { "name": "GarboMuffin" } ], - "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 new file mode 100644 index 00000000000..6ab3ee89cee --- /dev/null +++ b/src/addons/addons/rename-broadcasts/_manifest_entry.js @@ -0,0 +1,26 @@ +/* generated by pull.js */ +const manifest = { + "editorOnly": true, + "enabledByDefault": true, + "name": "Rename broadcasts", + "description": "Adds an option to rename broadcast messages in the broadcast blocks' dropdowns.", + "credits": [ + { + "name": "TheColaber", + "link": "https://scratch.mit.edu/users/TheColaber" + }, + { + "name": "GarboMuffin" + } + ], + "tags": [ + "new" + ], + "userscripts": [ + { + "url": "userscript.js" + } + ], + "dynamicDisable": true +}; +export default manifest; diff --git a/src/addons/addons/rename-broadcasts/_runtime_entry.js b/src/addons/addons/rename-broadcasts/_runtime_entry.js new file mode 100644 index 00000000000..bc67131957e --- /dev/null +++ b/src/addons/addons/rename-broadcasts/_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/rename-broadcasts/userscript.js b/src/addons/addons/rename-broadcasts/userscript.js new file mode 100644 index 00000000000..53bec7e8ac3 --- /dev/null +++ b/src/addons/addons/rename-broadcasts/userscript.js @@ -0,0 +1,192 @@ +export default async function ({ addon, msg, console }) { + const vm = addon.tab.traps.vm; + const Blockly = await addon.tab.traps.getBlockly(); + + // editor-searchable-dropdowns relies on this value + const RENAME_BROADCAST_MESSAGE_ID = "RENAME_BROADCAST_MESSAGE_ID"; + + const BROADCAST_MESSAGE_TYPE = Blockly.BROADCAST_MESSAGE_VARIABLE_TYPE; + + const _dropdownCreate = Blockly.FieldVariable.dropdownCreate; + Blockly.FieldVariable.dropdownCreate = function () { + const options = _dropdownCreate.call(this); + if ( + !addon.self.disabled && + this.defaultType_ === BROADCAST_MESSAGE_TYPE && + // Disable when workspace has no actual broadcast to rename + this.sourceBlock_.workspace.getVariableTypes().includes("broadcast_msg") + ) { + options.push([msg("RENAME_BROADCAST"), RENAME_BROADCAST_MESSAGE_ID]); + } + return options; + }; + + const _onItemSelected = Blockly.FieldVariable.prototype.onItemSelected; + Blockly.FieldVariable.prototype.onItemSelected = function (menu, menuItem) { + const workspace = this.sourceBlock_.workspace; + if (this.sourceBlock_ && workspace) { + if (menuItem.getValue() === RENAME_BROADCAST_MESSAGE_ID) { + promptRenameBroadcast(workspace, this.variable_); + return; + } + } + return _onItemSelected.call(this, menu, menuItem); + }; + + const resetVMCaches = () => { + const blockContainers = new Set(vm.runtime.targets.map((i) => i.blocks)); + for (const blocks of blockContainers) { + blocks.resetCache(); + } + }; + + const addUndoRedoHook = (callback) => { + const eventQueue = Blockly.Events.FIRE_QUEUE_; + // After a rename is emitted, some unrelated garbage events also get emitted + // So we should trap the first event + const undoItem = eventQueue[0]; + const originalRun = undoItem.run; + undoItem.run = function (isRedo) { + originalRun.call(this, isRedo); + callback(isRedo); + }; + }; + + const renameBroadcastInVM = (id, newName) => { + // Editor's rename won't completely rename the variable. + const vmVariable = vm.runtime.getTargetForStage().variables[id]; + vmVariable.name = newName; + vmVariable.value = newName; + + // Update all references to the broadcast. Broadcasts won't work if these + // don't match. + const blockContainers = new Set(vm.runtime.targets.map((i) => i.blocks)); + for (const blockContainer of blockContainers) { + for (const block of Object.values(blockContainer._blocks)) { + const broadcastOption = block.fields && block.fields.BROADCAST_OPTION; + if (broadcastOption && broadcastOption.id === id) { + broadcastOption.value = newName; + } + } + } + + resetVMCaches(); + }; + + const renameBroadcast = (workspace, id, oldName, newName) => { + // Rename in editor. Undo/redo will work automatically. + workspace.renameVariableById(id, newName); + + // Rename in VM. Need to manually implement undo/redo. + renameBroadcastInVM(id, newName); + + addUndoRedoHook((isRedo) => { + if (isRedo) { + renameBroadcastInVM(id, newName); + } else { + renameBroadcastInVM(id, oldName); + } + }); + }; + + const mergeBroadcast = (workspace, oldId, oldName, newName) => { + const newVmVariable = vm.runtime.getTargetForStage().lookupBroadcastByInputValue(newName); + const newId = newVmVariable.id; + + // Merge in editor. Undo/redo will work automatically for this. + // Use group so that everything here is undone/redone at the same time. + Blockly.Events.setGroup(true); + for (const block of workspace.getAllBlocks()) { + for (const input of block.inputList) { + for (const field of input.fieldRow) { + if (field.name === "BROADCAST_OPTION" && field.getValue() === oldId) { + field.setValue(newId); + } + } + } + } + // Remove the broadcast from the editor so it doesn't appear in dropdowns. + // Undo/redo will work automatically for this. + workspace.deleteVariableById(oldId); + Blockly.Events.setGroup(false); + + // Merge in VM to update sprites that aren't open. Need to manually implement undo/redo. + // To figure out how to undo this operation, we first figure out which blocks we're + // going to touch and keep hold of that list. + const vmBlocksToUpdate = []; + const blockContainers = new Set(vm.runtime.targets.map((i) => i.blocks)); + for (const blockContainer of blockContainers) { + for (const block of Object.values(blockContainer._blocks)) { + const broadcastOption = block.fields && block.fields.BROADCAST_OPTION; + if (broadcastOption && broadcastOption.id === oldId) { + vmBlocksToUpdate.push(block); + } + } + } + const applyVmEdits = (isRedo) => { + const idToReplaceWith = isRedo ? newId : oldId; + const nameToReplaceWith = isRedo ? newName : oldName; + for (const block of vmBlocksToUpdate) { + const broadcastOption = block.fields.BROADCAST_OPTION; + broadcastOption.id = idToReplaceWith; + broadcastOption.value = nameToReplaceWith; + } + resetVMCaches(); + }; + applyVmEdits(true); + + // Earlier editor updates are guaranteed to generate at least 1 event that we can hook as the + // broadcast block must exist in the editor for the user to rename it. + addUndoRedoHook((isRedo) => { + applyVmEdits(isRedo); + }); + }; + + const promptRenameBroadcast = (workspace, variable) => { + const modalTitle = msg("RENAME_BROADCAST_MODAL_TITLE"); + const oldName = variable.name; + const id = variable.getId(); + const promptText = msg("RENAME_BROADCAST_TITLE", { name: oldName }); + const promptDefaultText = oldName; + + Blockly.prompt( + promptText, + promptDefaultText, + function (newName) { + newName = Blockly.Variables.trimName_(newName); + const nameIsEmpty = !newName; + if (nameIsEmpty) { + return; + } + + const variableAlreadyExists = !!workspace.getVariable(newName, BROADCAST_MESSAGE_TYPE); + if (variableAlreadyExists) { + mergeBroadcast(workspace, id, oldName, newName); + } else { + renameBroadcast(workspace, id, oldName, newName); + } + }, + modalTitle, + BROADCAST_MESSAGE_TYPE + ); + }; + + const updateExistingMenuGenerators = () => { + const workspace = Blockly.getMainWorkspace(); + const flyout = workspace && workspace.getFlyout(); + if (workspace && flyout) { + const allBlocks = [...workspace.getAllBlocks(), ...flyout.getWorkspace().getAllBlocks()]; + for (const block of allBlocks) { + for (const input of block.inputList) { + for (const field of input.fieldRow) { + if (field instanceof Blockly.FieldVariable) { + field.menuGenerator_ = Blockly.FieldVariable.dropdownCreate; + } + } + } + } + } + }; + + updateExistingMenuGenerators(); +} diff --git a/src/addons/addons/zebra-striping/_manifest_entry.js b/src/addons/addons/zebra-striping/_manifest_entry.js index 5fb7e92bbe6..132f65047c4 100644 --- a/src/addons/addons/zebra-striping/_manifest_entry.js +++ b/src/addons/addons/zebra-striping/_manifest_entry.js @@ -17,9 +17,7 @@ const manifest = { "link": "https://scratch.mit.edu/users/thecolaber" } ], - "tags": [ - "new" - ], + "tags": [], "userscripts": [ { "url": "userscript.js" diff --git a/src/addons/generated/addon-entries.js b/src/addons/generated/addon-entries.js index 902e7f4fc71..72e5ce27bcb 100644 --- a/src/addons/generated/addon-entries.js +++ b/src/addons/generated/addon-entries.js @@ -51,6 +51,7 @@ export default { "move-to-top-bottom": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/move-to-top-bottom/_runtime_entry.js"), "disable-paste-offset": () => import(/* webpackChunkName: "addon-entry-disable-paste-offset" */ "../addons/disable-paste-offset/_runtime_entry.js"), "block-duplicate": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/block-duplicate/_runtime_entry.js"), + "rename-broadcasts": () => import(/* webpackChunkName: "addon-default-entry" */ "../addons/rename-broadcasts/_runtime_entry.js"), "swap-local-global": () => import(/* webpackChunkName: "addon-entry-swap-local-global" */ "../addons/swap-local-global/_runtime_entry.js"), "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"), diff --git a/src/addons/generated/addon-manifests.js b/src/addons/generated/addon-manifests.js index 381cf3e1753..4ae047dc446 100644 --- a/src/addons/generated/addon-manifests.js +++ b/src/addons/generated/addon-manifests.js @@ -50,6 +50,7 @@ import _disable_stage_drag_select from "../addons/disable-stage-drag-select/_man import _move_to_top_bottom from "../addons/move-to-top-bottom/_manifest_entry.js"; import _disable_paste_offset from "../addons/disable-paste-offset/_manifest_entry.js"; import _block_duplicate from "../addons/block-duplicate/_manifest_entry.js"; +import _rename_broadcasts from "../addons/rename-broadcasts/_manifest_entry.js"; 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"; @@ -113,6 +114,7 @@ export default { "move-to-top-bottom": _move_to_top_bottom, "disable-paste-offset": _disable_paste_offset, "block-duplicate": _block_duplicate, + "rename-broadcasts": _rename_broadcasts, "swap-local-global": _swap_local_global, "editor-comment-previews": _editor_comment_previews, "columns": _columns, diff --git a/src/addons/generated/l10n-entries.js b/src/addons/generated/l10n-entries.js index 30c7ef08009..7a9fd9421f4 100644 --- a/src/addons/generated/l10n-entries.js +++ b/src/addons/generated/l10n-entries.js @@ -14,4 +14,5 @@ export default { "ru": () => import(/* webpackChunkName: "addon-l10n-ru" */ "../addons-l10n/ru.json"), "sl": () => import(/* webpackChunkName: "addon-l10n-sl" */ "../addons-l10n/sl.json"), "tr": () => import(/* webpackChunkName: "addon-l10n-tr" */ "../addons-l10n/tr.json"), + "zh-tw": () => import(/* webpackChunkName: "addon-l10n-zh-tw" */ "../addons-l10n/zh-tw.json"), }; diff --git a/src/addons/generated/l10n-settings-entries.js b/src/addons/generated/l10n-settings-entries.js index 79f0a1ff413..3d498078e7b 100644 --- a/src/addons/generated/l10n-settings-entries.js +++ b/src/addons/generated/l10n-settings-entries.js @@ -14,4 +14,5 @@ export default { "ru": () => require("../addons-l10n-settings/ru.json"), "sl": () => require("../addons-l10n-settings/sl.json"), "tr": () => require("../addons-l10n-settings/tr.json"), + "zh-tw": () => require("../addons-l10n-settings/zh-tw.json"), }; diff --git a/src/addons/generated/upstream-meta.json b/src/addons/generated/upstream-meta.json index 1e192a66cae..bae487d3637 100644 --- a/src/addons/generated/upstream-meta.json +++ b/src/addons/generated/upstream-meta.json @@ -1 +1 @@ -{"commit":"007cacd"} \ No newline at end of file +{"commit":"a337581"} \ No newline at end of file