From effbe22fa16df58f76221c6f458e6f3b4d7865bb Mon Sep 17 00:00:00 2001 From: trotFunky Date: Tue, 27 May 2025 21:09:39 +0100 Subject: [PATCH 1/5] Start work on v0.2.0 Bump the version number in module.json and README. --- README.md | 2 +- module.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0c4e41b..1e86425 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# The Mill's Messages - v0.1.0 +# The Mill's Messages - v0.2.0-dev This little [FoundryVTT](https://foundryvtt.com/) module gives the GMs a way to send messages to PCs with a bit more flair than the chat, and more spontaneity than journals ! diff --git a/module.json b/module.json index 1acd06f..9a379d4 100644 --- a/module.json +++ b/module.json @@ -2,7 +2,7 @@ "id": "the-mills-messages", "title": "The Mill's Messages", "description": "A little message-sending modules for GMs", - "version": "0.1.0", + "version": "0.2.0", "compatibility": { "minimum": "12", "verified": "12", @@ -49,5 +49,5 @@ "readme": "README.md", "url": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/src/branch/release", "manifest": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/raw/branch/release/module.json", - "download": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/archive/v0.1.0.zip" + "download": "https://git.tfk-astrodome.net/trotFunky/TheMillsMessages/archive/v0.2.0.zip" } From a091ce93dfb40c203447916d5240fa33b4dbe2d9 Mon Sep 17 00:00:00 2001 From: trotFunky Date: Tue, 27 May 2025 21:36:03 +0100 Subject: [PATCH 2/5] Allow pre-filling the message dialog Given that send_message_dialog() fills the form with previous inputs if there are any, we can also provide data to pre-fill the first form. This can be useful for preset dialogs, like an "all players" dialog with all players already input. Add an initial data parameter to send_message_dialog() and add it to the message list if it is provided. --- scripts/mills_messages.mjs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/mills_messages.mjs b/scripts/mills_messages.mjs index 2383e79..578841a 100644 --- a/scripts/mills_messages.mjs +++ b/scripts/mills_messages.mjs @@ -71,16 +71,24 @@ async function create_history_journal(user) { * This allows us to populate the form with previous inputs and go back and forth * within the chain, to be able to fix mistakes or send fewer messages. * + * We also use this to pre-fill the first form with data if any is passed. + * * NOTE: The recipients are the same for all the messages of a chain, to simplify * the processing later as we only have to build one array of messages, shared among * the recipients. + * + * @param {MessageFormResponse|null} initial_form_data Data to pre-fill the first form with. * @returns {Promise} The Promise for the processing of the messages. */ -async function send_message_dialog() { +async function send_message_dialog(initial_form_data = null) { /** @type{MessageFormResponse[]} */ let messages = [] let current_message = 0 + if (initial_form_data !== null) { + messages.push(initial_form_data); + } + let chain = false; do { if (chain) { From 16e1eab24b97bb2bc912d59e7f876d8eb1cbb0aa Mon Sep 17 00:00:00 2001 From: trotFunky Date: Tue, 27 May 2025 22:54:09 +0100 Subject: [PATCH 3/5] Form: Simplify player filtering The game.users provides a .players member, listing only non-GM users. Use this instead of filtering the list manually. --- scripts/send_dialog_form.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/send_dialog_form.mjs b/scripts/send_dialog_form.mjs index 1daa956..4083ea0 100644 --- a/scripts/send_dialog_form.mjs +++ b/scripts/send_dialog_form.mjs @@ -43,7 +43,7 @@ export function validate_form(form_response) { */ export function prepare_send_message_html(existing_values = null, chain = false) { let players_options = [] - for (let user of game.users.filter((user) => !user.isGM)) { + for (let user of game.users.players) { players_options.push({ label: user.character ? user.character.name : user.name, value: user.id, From e30a97d036dfe353c82ee88c730310751b2ec1bc Mon Sep 17 00:00:00 2001 From: trotFunky Date: Wed, 28 May 2025 19:06:48 +0100 Subject: [PATCH 4/5] Add new tools to pre-select players Selecting all present players can be tedious, especially if they are many or when multiple messagess need to be sent. Add two new buttons to the toolbar that allow pre-filling the form with all connected players, or all players. Add translations and icons for those new tools. --- assets/bubble_above_three_players.webp | Bin 0 -> 328 bytes assets/bubble_above_two_players.webp | Bin 0 -> 330 bytes lang/en.json | 2 ++ lang/fr.json | 2 ++ scripts/mills_messages.mjs | 22 ++++++++++++++++++++++ styles/mills_messages.css | 20 ++++++++++++++++++++ 6 files changed, 46 insertions(+) create mode 100644 assets/bubble_above_three_players.webp create mode 100644 assets/bubble_above_two_players.webp diff --git a/assets/bubble_above_three_players.webp b/assets/bubble_above_three_players.webp new file mode 100644 index 0000000000000000000000000000000000000000..e85f5a2264f4b1bab2dd33ae327805d57f733dc4 GIT binary patch literal 328 zcmWIYbaQiHWMBw)bqWXzu!!JdU|6&w_n*Gdw4n+-FV*d<(Fuq~^!TvD+1HS?P5&p*fr~mtF6xcJa9zV=FV*|tA+5f*q zOO&sznI8PAA)(c-e){#3Ha!{IE8Y}eVv>*E{l)%Y*_sadEh#7Tz9iIt_&4qU-`_i0 zb8?PGL`}5e*NM+;-?&74?&Z$Kd-T4yy7=bx8g2NtAyI!=3gs5t;yoT{$0t>vuWM$vWJ>k)<9V`hssr4$A1fK-zJyE YqWWXv&0TN*&uRDnrkJf`E6l(E01L{ADF6Tf literal 0 HcmV?d00001 diff --git a/assets/bubble_above_two_players.webp b/assets/bubble_above_two_players.webp new file mode 100644 index 0000000000000000000000000000000000000000..e1c498cd60d1570c305b35064cf27fb01f13410c GIT binary patch literal 330 zcmV-Q0k!^8Nk&FO0RRA3MM6+kP&il$0000G0000F000jF06|PpNGAXQ00CgoHj<<8 zC+#cWpFl)RK)GDG`GD8EQ(fy(&ZyuBo`_DV;0S&I09H^qAoKtL08j@2odGHk01yBG zz!D{-08RkpVmu4tpN)6`7|I`jaR6!-{$Kd3>;?GG;*anTGe5)+fuHC9kQ^pwXw}EV z5B%960R6Ln>@!2;O;O@Yz^f*g$5ylRcS2cVK7MOb8epl1nf-JBpLx`%QHIW2Y{ z;t>S@{rG%=xL=d>e&XtMv3;psjcY{h!;A>PV=t{ozM8fVzk+888++_|gkD+O?64x6 zJ!S*rEZWL!=rGGa+nfY=?0xH-%GQ3opzraP;CW4Kr;dxoe;yxhb%UAxxxiZz7v2T` cu^rx;yY>X?FF>Mi>#)2J{>q1UqieMQ05Cq7X#fBK literal 0 HcmV?d00001 diff --git a/lang/en.json b/lang/en.json index 311ef90..9418595 100644 --- a/lang/en.json +++ b/lang/en.json @@ -3,6 +3,8 @@ "UI": { "ToolbarCategory": "Message controls", "ToolbarSendMessage": "Send message", + "ToolbarSendMessageToConnected": "Send message to all connected players", + "ToolbarSendMessageToAll": "Send message to all players", "HistoryJournalTitle": "Messages for {name}" }, "Dialogs": { diff --git a/lang/fr.json b/lang/fr.json index ade8c2e..0680f44 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -3,6 +3,8 @@ "UI": { "ToolbarCategory": "Contrôles messages", "ToolbarSendMessage": "Envoyer des messages", + "ToolbarSendMessageToConnected": "Envoyer un message à tous les joueurs connectés", + "ToolbarSendMessageToAll": "Envoyer des messages à tous les joueurs", "HistoryJournalTitle": "Messages pour {name}" }, "Dialogs": { diff --git a/scripts/mills_messages.mjs b/scripts/mills_messages.mjs index 578841a..15ddffd 100644 --- a/scripts/mills_messages.mjs +++ b/scripts/mills_messages.mjs @@ -332,6 +332,28 @@ function main() { title: "MM.UI.ToolbarCategory", icon: "mm-chat-bubble", tools: [{ + name: "send-message-to-all", + title: "MM.UI.ToolbarSendMessageToAll", + button: true, + visible: true, + icon: "mm-bubble-above-three-players", + onClick: () => send_message_dialog({ + recipients: game.users.players.map((user) => user.id) + }) + }, + { + name: "send-message-to-connected", + title: "MM.UI.ToolbarSendMessageToConnected", + button: true, + visible: true, + icon: "mm-bubble-above-two-players", + onClick: () => send_message_dialog({ + recipients: game.users.players + .filter((user) => user.active) + .map((user) => user.id) + }) + }, + { name: "send-message", title: "MM.UI.ToolbarSendMessage", button: true, diff --git a/styles/mills_messages.css b/styles/mills_messages.css index f205cb0..79443fe 100644 --- a/styles/mills_messages.css +++ b/styles/mills_messages.css @@ -9,6 +9,26 @@ background-image: url("/modules/the-mills-messages/assets/chat_bubble.webp"); } +.mm-bubble-above-two-players { + display: inline-block; + width: 32px; + height: 32px; + background-size: cover; + cursor: pointer; + image-rendering: pixelated; + background-image: url("/modules/the-mills-messages/assets/bubble_above_two_players.webp"); +} + +.mm-bubble-above-three-players { + display: inline-block; + width: 32px; + height: 32px; + background-size: cover; + cursor: pointer; + image-rendering: pixelated; + background-image: url("/modules/the-mills-messages/assets/bubble_above_three_players.webp"); +} + /* * Override Foundry's `.application .scrollable`, whose right margin does not work * with ProseMirror's editor internal divs which need a 0 right margin. From ecbef75db8e43e243eb794a3dbfbb5adffecff3a Mon Sep 17 00:00:00 2001 From: trotFunky Date: Wed, 28 May 2025 19:07:37 +0100 Subject: [PATCH 5/5] v0.2.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e86425..ae2fb53 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# The Mill's Messages - v0.2.0-dev +# The Mill's Messages - v0.2.0 This little [FoundryVTT](https://foundryvtt.com/) module gives the GMs a way to send messages to PCs with a bit more flair than the chat, and more spontaneity than journals !