| 
									
										
										
										
											2024-12-17 00:24:47 +08:00
										 |  |  | import {$getSelection, LexicalEditor} from "lexical"; | 
					
						
							| 
									
										
										
										
											2024-07-23 22:35:18 +08:00
										 |  |  | import { | 
					
						
							|  |  |  |     appendHtmlToEditor, | 
					
						
							|  |  |  |     focusEditor, | 
					
						
							|  |  |  |     insertHtmlIntoEditor, | 
					
						
							|  |  |  |     prependHtmlToEditor, | 
					
						
							|  |  |  |     setEditorContentFromHtml | 
					
						
							| 
									
										
										
										
											2024-08-04 01:14:01 +08:00
										 |  |  | } from "../utils/actions"; | 
					
						
							| 
									
										
										
										
											2024-07-23 22:35:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | type EditorEventContent = { | 
					
						
							|  |  |  |     html: string; | 
					
						
							|  |  |  |     markdown: string; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function getContentToInsert(eventContent: EditorEventContent): string { | 
					
						
							|  |  |  |     return eventContent.html || ''; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function listen(editor: LexicalEditor): void { | 
					
						
							|  |  |  |     window.$events.listen<EditorEventContent>('editor::replace', eventContent => { | 
					
						
							|  |  |  |         const html = getContentToInsert(eventContent); | 
					
						
							|  |  |  |         setEditorContentFromHtml(editor, html); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     window.$events.listen<EditorEventContent>('editor::append', eventContent => { | 
					
						
							|  |  |  |         const html = getContentToInsert(eventContent); | 
					
						
							|  |  |  |         appendHtmlToEditor(editor, html); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     window.$events.listen<EditorEventContent>('editor::prepend', eventContent => { | 
					
						
							|  |  |  |         const html = getContentToInsert(eventContent); | 
					
						
							|  |  |  |         prependHtmlToEditor(editor, html); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     window.$events.listen<EditorEventContent>('editor::insert', eventContent => { | 
					
						
							|  |  |  |         const html = getContentToInsert(eventContent); | 
					
						
							|  |  |  |         insertHtmlIntoEditor(editor, html); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     window.$events.listen<EditorEventContent>('editor::focus', () => { | 
					
						
							|  |  |  |         focusEditor(editor); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2024-12-17 00:24:47 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let changeFromLoading = true; | 
					
						
							|  |  |  |     editor.registerUpdateListener(({dirtyElements, dirtyLeaves, editorState, prevEditorState}) => { | 
					
						
							|  |  |  |         // Emit change event to component system (for draft detection) on actual user content change
 | 
					
						
							|  |  |  |         if (dirtyElements.size > 0 || dirtyLeaves.size > 0) { | 
					
						
							|  |  |  |             if (changeFromLoading) { | 
					
						
							|  |  |  |                 changeFromLoading = false; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 window.$events.emit('editor-html-change', ''); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2024-07-23 22:35:18 +08:00
										 |  |  | } |