Skip to content

Commit 56f36b7

Browse files
committed
refactor(messages): modularisation de la fonction de création de messages : createChatMessage()
1 parent 39a2ad7 commit 56f36b7

7 files changed

Lines changed: 95 additions & 78 deletions

File tree

app/js/core/messages/create.mjs

Lines changed: 28 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
import { processAudio } from "../../markdown/custom/directives/audio.mjs";
2-
import { processRandomMessage } from "../../markdown/custom/random.mjs";
3-
import {
4-
processDirectiveBot,
5-
processMultipleBots,
6-
} from "../../markdown/custom/directives/bot.mjs";
7-
import { processKroki } from "./helpers/plugins/processKroki.mjs";
8-
import { processDirectiveNext } from "../../markdown/custom/directives/next.mjs";
9-
import { processDirectiveSelectNext } from "../../markdown/custom/directives/selectNext.mjs";
10-
import { processFixedVariables } from "../../../js//markdown/custom/variablesFixed.mjs";
11-
import { processDynamicVariables } from "../../../js//markdown/custom/variablesDynamic.mjs";
1+
import { yaml } from "../../markdown/custom/yaml.mjs";
2+
import { processMultipleBots } from "../../markdown/custom/directives/bot.mjs";
123
import { convertLatexExpressions } from "../../../js//markdown/latex.mjs";
134
import { displayMessage } from "../messages/display.mjs";
145
import { extractMarkdownAndPrompts } from "../../markdown/custom/directives/useLLM/extractMarkdownAndPrompts.mjs";
15-
import { yaml } from "../../markdown/custom/yaml.mjs";
166
import { markdownToHTML } from "../../markdown/parser.mjs";
177
import { getChatbotResponse } from "../interactions/getChatbotResponse.mjs";
188
import { processMessageWithPrompt } from "../../markdown/custom/directives/useLLM/processMessageWithPrompt.mjs";
9+
import { createMessageElement } from "./helpers/dom.mjs";
10+
import { processVariables } from "./helpers/processVariables.mjs";
11+
import { processDirectives } from "./helpers/processDirectives.mjs";
12+
import { processPlugins } from "./helpers/processPlugins.mjs";
13+
14+
function handleBotResponse(chatbot) {
15+
if (chatbot.nextMessage.selected) {
16+
return getChatbotResponse(chatbot, chatbot.nextMessage.selected);
17+
}
18+
}
1919

2020
// Création du message par le bot ou l'utilisateur
2121
export function createChatMessage(
@@ -24,63 +24,25 @@ export function createChatMessage(
2424
isUser,
2525
chatMessageElement,
2626
) {
27-
let dynamicVariables = chatbot.dynamicVariables;
2827
const originalMessage = message;
29-
let chatMessage;
30-
if (!chatMessageElement) {
31-
chatMessage = document.createElement("div");
32-
chatMessage.classList.add("message");
33-
chatMessage.classList.add(isUser ? "user-message" : "bot-message");
34-
} else {
35-
chatMessage = chatMessageElement;
36-
}
28+
let container = chatMessageElement || createMessageElement(isUser);
29+
3730
chatbot.nextMessage.selected = undefined;
38-
// Gestion des variables fixes prédéfinies
39-
if (yaml && yaml.variables) {
40-
message = processFixedVariables(message);
41-
}
42-
if (!isUser) {
43-
message = processRandomMessage(message);
44-
}
4531

46-
if (yaml && yaml.dynamicContent) {
47-
// On traite les variables dynamiques
48-
message = processDynamicVariables(
49-
chatbot,
50-
message,
51-
dynamicVariables,
52-
isUser,
53-
);
54-
}
32+
message = processVariables(chatbot, message, isUser);
5533

5634
// Cas où c'est un message du bot
5735
if (!isUser) {
58-
// Gestion de la directive !Bot: botName
59-
if (yaml && yaml.bots) {
60-
message = processDirectiveBot(message, chatMessage);
61-
}
62-
63-
// Gestion de l'audio
64-
message = processAudio(message);
65-
66-
// Gestion de la directive !Next: Titre réponse / message si mauvaise réponse
67-
message = processDirectiveNext(chatbot, message);
68-
69-
// Gestion de la directive !SelectNext pour sélectionner aléatoirement le prochain message du chatbot
70-
message = processDirectiveSelectNext(chatbot, message);
71-
72-
// Gestion de schémas et images créés avec mermaid, tikz, graphviz, plantuml … grâce à Kroki (il faut l'inclure en plugin si on veut l'utiliser)
73-
if (yaml && yaml.plugins && yaml.plugins.includes("kroki")) {
74-
message = processKroki(message);
75-
}
36+
message = processDirectives(chatbot, message, container);
37+
message = processPlugins(message);
7638
}
7739
const checkPromptsinMessage = extractMarkdownAndPrompts(message);
7840
const hasPromptInmessage = checkPromptsinMessage.useLLM;
7941

8042
if (hasPromptInmessage) {
8143
// On gère le cas où il y a une partie dans le message qui doit être gérée par un LLM
8244
const markdownAndPromptSequence = checkPromptsinMessage.sequence;
83-
processMessageWithPrompt(markdownAndPromptSequence, chatMessage, isUser);
45+
processMessageWithPrompt(markdownAndPromptSequence, container, isUser);
8446
} else {
8547
let html = markdownToHTML(message);
8648
if (html.trim() !== "") {
@@ -107,44 +69,34 @@ export function createChatMessage(
10769
}
10870
}
10971
if (timeToDisplayMessage) {
110-
displayMessage(html, isUser, chatMessage).then(() => {
111-
if (chatbot.nextMessage.selected) {
112-
const response = getChatbotResponse(
113-
chatbot,
114-
chatbot.nextMessage.selected,
115-
);
116-
if (response) {
117-
createChatMessage(chatbot, response, false);
118-
}
72+
displayMessage(html, isUser, container).then(() => {
73+
const response = handleBotResponse(chatbot);
74+
if (response) {
75+
createChatMessage(chatbot, response, false);
11976
}
12077
});
12178
// Gestion des éléments HTML <select> si on veut les utiliser pour gérer des variables dynamiques
12279
message = processSelectElements(
12380
chatbot,
12481
message,
12582
originalMessage,
126-
chatMessage,
83+
container,
12784
);
12885
}
12986
}, 100);
13087
} else {
131-
displayMessage(html, isUser, chatMessage).then(() => {
132-
if (chatbot.nextMessage.selected) {
133-
const response = getChatbotResponse(
134-
chatbot,
135-
chatbot.nextMessage.selected,
136-
);
137-
if (response) {
138-
createChatMessage(chatbot, response, false);
139-
}
88+
displayMessage(html, isUser, container).then(() => {
89+
const response = handleBotResponse(chatbot);
90+
if (response) {
91+
createChatMessage(chatbot, response, false);
14092
}
14193
});
14294
// Gestion des éléments HTML <select> si on veut les utiliser pour gérer des variables dynamiques
14395
message = processSelectElements(
14496
chatbot,
14597
message,
14698
originalMessage,
147-
chatMessage,
99+
container,
148100
);
149101
}
150102
}

app/js/core/messages/helpers/dom.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,9 @@ export function appendMessageToContainer(htmlMessage, customContainer) {
1111
defaultContainer.appendChild(htmlMessage);
1212
}
1313
}
14+
15+
export function createMessageElement(isUser) {
16+
const el = document.createElement("div");
17+
el.classList.add("message", isUser ? "user-message" : "bot-message");
18+
return el;
19+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { yaml } from "../../../markdown/custom/yaml.mjs";
2+
import { processAudio } from "../../../markdown/custom/directives/audio.mjs";
3+
import { processDirectiveNext } from "../../../markdown/custom/directives/next.mjs";
4+
import { processDirectiveSelectNext } from "../../../markdown/custom/directives/selectNext.mjs";
5+
import { processDirectiveBot } from "../../../markdown/custom/directives/bot.mjs";
6+
7+
export function processDirectives(chatbot, message, container) {
8+
// Gestion de la directive !Bot: botName
9+
if (yaml && yaml.bots) {
10+
message = processDirectiveBot(message, container);
11+
}
12+
13+
// Gestion de l'audio
14+
message = processAudio(message);
15+
16+
// Gestion de la directive !Next: Titre réponse / message si mauvaise réponse
17+
message = processDirectiveNext(chatbot, message);
18+
19+
// Gestion de la directive !SelectNext pour sélectionner aléatoirement le prochain message du chatbot
20+
message = processDirectiveSelectNext(chatbot, message);
21+
22+
return message;
23+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { yaml } from "../../../markdown/custom/yaml.mjs";
2+
import { processKroki } from "./plugins/processKroki.mjs";
3+
4+
export function processPlugins(message) {
5+
// Gestion de schémas et images créés avec mermaid, tikz, graphviz, plantuml … grâce à Kroki (il faut l'inclure en plugin si on veut l'utiliser)
6+
if (yaml && yaml.plugins && yaml.plugins.includes("kroki")) {
7+
message = processKroki(message);
8+
}
9+
return message;
10+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { yaml } from "../../../markdown/custom/yaml.mjs";
2+
import { processRandomMessage } from "../../../markdown/custom/random.mjs";
3+
import { processFixedVariables } from "../../../../js/markdown/custom/variablesFixed.mjs";
4+
import { processDynamicVariables } from "../../../../js//markdown/custom/variablesDynamic.mjs";
5+
6+
export function processVariables(chatbot, message, isUser) {
7+
let dynamicVariables = chatbot.dynamicVariables;
8+
// Gestion des variables fixes prédéfinies
9+
if (yaml && yaml.variables) {
10+
message = processFixedVariables(message);
11+
}
12+
if (!isUser) {
13+
message = processRandomMessage(message);
14+
}
15+
16+
if (yaml && yaml.dynamicContent) {
17+
// On traite les variables dynamiques
18+
message = processDynamicVariables(
19+
chatbot,
20+
message,
21+
dynamicVariables,
22+
isUser,
23+
);
24+
}
25+
return message;
26+
}

app/script.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/script.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)