Imports adjusted.
Browse files
chat5.js
CHANGED
|
@@ -84,13 +84,17 @@ body {
|
|
| 84 |
kitCommonmark,
|
| 85 |
milkdownCore,
|
| 86 |
milkdownPresetCommonmark,
|
| 87 |
-
milkdownProse
|
|
|
|
|
|
|
| 88 |
] = await Promise.all([
|
| 89 |
import(`https://esm.sh/@milkdown/kit@${version}/core`),
|
| 90 |
import(`https://esm.sh/@milkdown/kit@${version}/preset/commonmark`),
|
| 91 |
import(`https://esm.sh/@milkdown/core@${version}`),
|
| 92 |
import(`https://esm.sh/@milkdown/preset-commonmark@${version}`),
|
| 93 |
-
import(`https://esm.sh/@milkdown/prose@${version}`)
|
|
|
|
|
|
|
| 94 |
]);
|
| 95 |
|
| 96 |
if (chatLog) chatLog.innerHTML = '';
|
|
@@ -124,6 +128,8 @@ body {
|
|
| 124 |
milkdownCore,
|
| 125 |
milkdownPresetCommonmark,
|
| 126 |
milkdownProse,
|
|
|
|
|
|
|
| 127 |
chatLogEditor,
|
| 128 |
chatInputEditor
|
| 129 |
};
|
|
@@ -168,9 +174,47 @@ body {
|
|
| 168 |
const { kitCore, kitCommonmark, chatLog, chatInput } = initHTML();
|
| 169 |
const milkdownResult = await initMilkdown({ chatLog, chatInput });
|
| 170 |
if (!milkdownResult) return;
|
| 171 |
-
|
|
|
|
|
|
|
| 172 |
|
| 173 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
|
| 175 |
window.onerror = (...args) => {
|
| 176 |
try {
|
|
|
|
| 84 |
kitCommonmark,
|
| 85 |
milkdownCore,
|
| 86 |
milkdownPresetCommonmark,
|
| 87 |
+
milkdownProse,
|
| 88 |
+
prosemirrorKeymap,
|
| 89 |
+
prosemirrorState
|
| 90 |
] = await Promise.all([
|
| 91 |
import(`https://esm.sh/@milkdown/kit@${version}/core`),
|
| 92 |
import(`https://esm.sh/@milkdown/kit@${version}/preset/commonmark`),
|
| 93 |
import(`https://esm.sh/@milkdown/core@${version}`),
|
| 94 |
import(`https://esm.sh/@milkdown/preset-commonmark@${version}`),
|
| 95 |
+
import(`https://esm.sh/@milkdown/prose@${version}`),
|
| 96 |
+
import('https://esm.sh/prosemirror-keymap@1.2.0'),
|
| 97 |
+
import('https://esm.sh/prosemirror-state@1.3.4')
|
| 98 |
]);
|
| 99 |
|
| 100 |
if (chatLog) chatLog.innerHTML = '';
|
|
|
|
| 128 |
milkdownCore,
|
| 129 |
milkdownPresetCommonmark,
|
| 130 |
milkdownProse,
|
| 131 |
+
prosemirrorKeymap,
|
| 132 |
+
prosemirrorState,
|
| 133 |
chatLogEditor,
|
| 134 |
chatInputEditor
|
| 135 |
};
|
|
|
|
| 174 |
const { kitCore, kitCommonmark, chatLog, chatInput } = initHTML();
|
| 175 |
const milkdownResult = await initMilkdown({ chatLog, chatInput });
|
| 176 |
if (!milkdownResult) return;
|
| 177 |
+
const { chatLogEditor, chatInputEditor, milkdownCore, prosemirrorKeymap, prosemirrorState } = milkdownResult;
|
| 178 |
+
|
| 179 |
+
outputMessage(chatLogEditor, milkdownCore, 'Milkdown editor component is loaded correctly. Please try typing...');
|
| 180 |
|
| 181 |
+
// Add a ProseMirror plugin to handle Enter key in chat input editor
|
| 182 |
+
await chatInputEditor.action((ctx) => {
|
| 183 |
+
const serializer = ctx.get(milkdownCore.serializerCtx);
|
| 184 |
+
const view = ctx.get(milkdownCore.editorViewCtx);
|
| 185 |
+
const { Plugin } = prosemirrorState;
|
| 186 |
+
// Add a keymap plugin for Enter
|
| 187 |
+
const enterPlugin = new Plugin({
|
| 188 |
+
props: {
|
| 189 |
+
handleKeyDown(view, event) {
|
| 190 |
+
if (
|
| 191 |
+
event.key === 'Enter' &&
|
| 192 |
+
!event.ctrlKey && !event.altKey && !event.shiftKey && !event.metaKey
|
| 193 |
+
) {
|
| 194 |
+
event.preventDefault();
|
| 195 |
+
const inputMarkdown = serializer(view.state.doc).trim();
|
| 196 |
+
if (inputMarkdown) {
|
| 197 |
+
const msg = `user typed:\n> ${inputMarkdown.replace(/\n/g, '\n> ')}`;
|
| 198 |
+
outputMessage(chatLogEditor, milkdownCore, msg);
|
| 199 |
+
// Clear input
|
| 200 |
+
const tr = view.state.tr.replaceWith(
|
| 201 |
+
0,
|
| 202 |
+
view.state.doc.content.size,
|
| 203 |
+
view.state.schema.nodes.doc.createAndFill().content
|
| 204 |
+
);
|
| 205 |
+
view.dispatch(tr);
|
| 206 |
+
}
|
| 207 |
+
return true;
|
| 208 |
+
}
|
| 209 |
+
return false;
|
| 210 |
+
},
|
| 211 |
+
},
|
| 212 |
+
});
|
| 213 |
+
view.state = view.state.reconfigure({
|
| 214 |
+
plugins: [...view.state.plugins, enterPlugin],
|
| 215 |
+
});
|
| 216 |
+
view.updateState(view.state);
|
| 217 |
+
});
|
| 218 |
|
| 219 |
window.onerror = (...args) => {
|
| 220 |
try {
|