mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	fix(code): history of undo/redo preserved across notes
This commit is contained in:
		@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import type FNote from "../../entities/fnote.js";
 | 
				
			||||||
import options from "../../services/options.js";
 | 
					import options from "../../services/options.js";
 | 
				
			||||||
import TypeWidget from "./type_widget.js";
 | 
					import TypeWidget from "./type_widget.js";
 | 
				
			||||||
import CodeMirror, { type EditorConfig } from "@triliumnext/codemirror";
 | 
					import CodeMirror, { type EditorConfig } from "@triliumnext/codemirror";
 | 
				
			||||||
@@ -55,22 +56,12 @@ export default class AbstractCodeTypeWidget extends TypeWidget {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Must be called by the derived classes in `#doRefresh(note)` in order to react to changes.
 | 
					     * Must be called by the derived classes in `#doRefresh(note)` in order to react to changes.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param {*} note the note that was changed.
 | 
					     * @param the note that was changed.
 | 
				
			||||||
     * @param {*} content the new content of the note.
 | 
					     * @param new content of the note.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    _update(note: { mime: string }, content: string) {
 | 
					    _update(note: FNote, content: string) {
 | 
				
			||||||
        this.codeEditor.setText(content);
 | 
					        this.codeEditor.setText(content);
 | 
				
			||||||
        // this.codeEditor.clearHistory();
 | 
					        this.codeEditor.clearHistory();
 | 
				
			||||||
 | 
					 | 
				
			||||||
        // let info = CodeMirror.findModeByMIME(note.mime);
 | 
					 | 
				
			||||||
        // if (!info) {
 | 
					 | 
				
			||||||
        //     // Switch back to plain text if CodeMirror does not have a mode for whatever MIME type we're editing.
 | 
					 | 
				
			||||||
        //     // To avoid inheriting a mode from a previously open code note.
 | 
					 | 
				
			||||||
        //     info = CodeMirror.findModeByMIME("text/plain");
 | 
					 | 
				
			||||||
        // }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // this.codeEditor.setOption("mode", info.mime);
 | 
					 | 
				
			||||||
        // CodeMirror.autoLoadMode(this.codeEditor, info.mode);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    show() {
 | 
					    show() {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,18 +17,21 @@ export default class CodeMirror extends EditorView {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private config: EditorConfig;
 | 
					    private config: EditorConfig;
 | 
				
			||||||
    private languageCompartment: Compartment;
 | 
					    private languageCompartment: Compartment;
 | 
				
			||||||
 | 
					    private historyCompartment: Compartment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(config: EditorConfig) {
 | 
					    constructor(config: EditorConfig) {
 | 
				
			||||||
        const languageCompartment = new Compartment();
 | 
					        const languageCompartment = new Compartment();
 | 
				
			||||||
 | 
					        const historyCompartment = new Compartment();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let extensions = [
 | 
					        let extensions = [
 | 
				
			||||||
            languageCompartment.of([]),
 | 
					            languageCompartment.of([]),
 | 
				
			||||||
 | 
					            historyCompartment.of(history()),
 | 
				
			||||||
            syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
 | 
					            syntaxHighlighting(defaultHighlightStyle, { fallback: true }),
 | 
				
			||||||
            highlightActiveLine(),
 | 
					            highlightActiveLine(),
 | 
				
			||||||
            highlightSelectionMatches(),
 | 
					            highlightSelectionMatches(),
 | 
				
			||||||
            bracketMatching(),
 | 
					            bracketMatching(),
 | 
				
			||||||
            lineNumbers(),
 | 
					            lineNumbers(),
 | 
				
			||||||
            indentUnit.of(" ".repeat(4)),
 | 
					            indentUnit.of(" ".repeat(4)),
 | 
				
			||||||
            history(),
 | 
					 | 
				
			||||||
            keymap.of([
 | 
					            keymap.of([
 | 
				
			||||||
                ...defaultKeymap,
 | 
					                ...defaultKeymap,
 | 
				
			||||||
                ...historyKeymap,
 | 
					                ...historyKeymap,
 | 
				
			||||||
@@ -58,6 +61,7 @@ export default class CodeMirror extends EditorView {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
        this.config = config;
 | 
					        this.config = config;
 | 
				
			||||||
        this.languageCompartment = languageCompartment;
 | 
					        this.languageCompartment = languageCompartment;
 | 
				
			||||||
 | 
					        this.historyCompartment = historyCompartment;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #onDocumentUpdated(v: ViewUpdate) {
 | 
					    #onDocumentUpdated(v: ViewUpdate) {
 | 
				
			||||||
@@ -80,6 +84,18 @@ export default class CodeMirror extends EditorView {
 | 
				
			|||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Clears the history of undo/redo. Generally useful when changing to a new document.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    clearHistory() {
 | 
				
			||||||
 | 
					        this.dispatch({
 | 
				
			||||||
 | 
					            effects: [ this.historyCompartment.reconfigure([]) ]
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        this.dispatch({
 | 
				
			||||||
 | 
					            effects: [ this.historyCompartment.reconfigure(history())]
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async setMimeType(mime: string) {
 | 
					    async setMimeType(mime: string) {
 | 
				
			||||||
        const newExtension = [];
 | 
					        const newExtension = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user