index.js 1.6 KB
Newer Older
N
nem035 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
'use strict';

const appInstance = require('../app');
const createEditor = require('./create');
const Executor = require('./executor');

function Editor(tracerManager) {
  if (!tracerManager) {
    throw 'Cannot create Editor. Missing the tracerManager';
  }

  ace.require('ace/ext/language_tools');

  this.dataEditor = createEditor('data');
  this.codeEditor = createEditor('code');

  // Setting data

  this.setData = (data) => {
    this.dataEditor.setValue(data, -1);
  };

  this.setCode = (code) => {
    this.codeEditor.setValue(code, -1);
  };

  this.setContent = (({
    data,
    code
  }) => {
    this.setData(data);
    this.setCode(code);
  });

  // Clearing data

  this.clearData = () => {
    this.dataEditor.setValue('');
  };

  this.clearCode = () => {
    this.codeEditor.setValue('');
  };

  this.clearContent = () => {
    this.clearData();
    this.clearCode();
  };

  this.execute = () => {
    const data = this.dataEditor.getValue();
    const code = this.codeEditor.getValue();
    return Executor.executeDataAndCode(tracerManager, data, code);
  };

  // listeners

  this.dataEditor.on('change', () => {
    const data = this.dataEditor.getValue();
    const lastFileUsed = appInstance.getLastFileUsed();
    if (lastFileUsed) {
      appInstance.updateCachedFile(lastFileUsed, {
        data
      });
    }
    Executor.executeData(tracerManager, data);
  });

  this.codeEditor.on('change', () => {
    const code = this.codeEditor.getValue();
    const lastFileUsed = appInstance.getLastFileUsed();
    if (lastFileUsed) {
      appInstance.updateCachedFile(lastFileUsed, {
        code
      });
    }
  });
};

module.exports = Editor;