Bläddra i källkod

Finish observablestring implementation

Steven Silvester 8 år sedan
förälder
incheckning
e0d4ce1934
4 ändrade filer med 24 tillägg och 6 borttagningar
  1. 1 1
      src/codeeditor/editor.ts
  2. 2 1
      src/codemirror/editor.ts
  3. 19 2
      src/codemirror/model.ts
  4. 2 2
      src/notebook/cells/editor.ts

+ 1 - 1
src/codeeditor/editor.ts

@@ -321,7 +321,7 @@ namespace CodeEditor {
     /**
     /**
      * The text stored in the model.
      * The text stored in the model.
      */
      */
-    value: IObservableString;
+    readonly value: IObservableString;
 
 
     /**
     /**
      * A mime type of the model.
      * A mime type of the model.

+ 2 - 1
src/codemirror/editor.ts

@@ -89,8 +89,9 @@ class CodeMirrorEditor implements CodeEditor.IEditor {
       return;
       return;
     }
     }
     this._isDisposed = true;
     this._isDisposed = true;
-    this._editor = null;
     this._model.dispose();
     this._model.dispose();
+    this._model = null;
+    this._editor = null;
   }
   }
 
 
   /**
   /**

+ 19 - 2
src/codemirror/model.ts

@@ -159,20 +159,37 @@ class CodeMirrorModel implements CodeEditor.IModel {
    * Handle value changes.
    * Handle value changes.
    */
    */
   private _onValueChanged(value: IObservableString, change: ObservableString.IChangedArgs): void {
   private _onValueChanged(value: IObservableString, change: ObservableString.IChangedArgs): void {
-    // TODO
+    if (this._changeGuard) {
+      return;
+    }
+    let doc = this._doc;
+    switch (change.type) {
+    case 'set':
+      doc.setValue(change.value);
+      break;
+    default:
+      let from = doc.posFromIndex(change.start);
+      let to = doc.posFromIndex(change.end);
+      doc.replaceRange(change.value, from, to);
+    }
   }
   }
 
 
   /**
   /**
    * Handles document changes.
    * Handles document changes.
    */
    */
   protected _onDocChange(doc: CodeMirror.Doc, change: CodeMirror.EditorChange) {
   protected _onDocChange(doc: CodeMirror.Doc, change: CodeMirror.EditorChange) {
-    // TODO
+    if (change.origin !== 'setValue') {
+      this._changeGuard = true;
+      this._value.text = doc.getValue();
+      this._changeGuard = false;
+    }
   }
   }
 
 
   private _mimetype = '';
   private _mimetype = '';
   private _value = new ObservableString();
   private _value = new ObservableString();
   private _isDisposed = false;
   private _isDisposed = false;
   private _doc: CodeMirror.Doc;
   private _doc: CodeMirror.Doc;
+  private _changeGuard = false;
   private _selections = new CodeEditor.Selections();
   private _selections = new CodeEditor.Selections();
 }
 }
 
 

+ 2 - 2
src/notebook/cells/editor.ts

@@ -388,8 +388,8 @@ class CodeCellEditorWidget extends CodeEditorWidget implements ICellEditorWidget
     switch (args.name) {
     switch (args.name) {
     case 'source':
     case 'source':
       let editorModel = this.editor.model;
       let editorModel = this.editor.model;
-      if (editorModel.value !== args.newValue) {
-        editorModel.value = args.newValue;
+      if (editorModel.value.text !== args.newValue) {
+        editorModel.value.text = args.newValue;
       }
       }
       break;
       break;
     default:
     default: