diff options
| author | andrewdkim <adkim414@gmail.com> | 2019-07-29 12:24:03 -0400 | 
|---|---|---|
| committer | andrewdkim <adkim414@gmail.com> | 2019-07-29 12:24:03 -0400 | 
| commit | 10a5b5a99ae77d890412b3a3d25b6b85c935f25b (patch) | |
| tree | 506f98d8632df09cfc1f9d25bf0e81891575f623 /src/client/views/ScriptingRepl.tsx | |
| parent | afe2355cd66c98e391965ebfe022d8f8607ac794 (diff) | |
| parent | e7ea2028f54787d6c92fb22b789f17b7268d3793 (diff) | |
Merged from master
Diffstat (limited to 'src/client/views/ScriptingRepl.tsx')
| -rw-r--r-- | src/client/views/ScriptingRepl.tsx | 50 | 
1 files changed, 19 insertions, 31 deletions
diff --git a/src/client/views/ScriptingRepl.tsx b/src/client/views/ScriptingRepl.tsx index 9e538cf1b..e05195ca0 100644 --- a/src/client/views/ScriptingRepl.tsx +++ b/src/client/views/ScriptingRepl.tsx @@ -4,41 +4,16 @@ import { observable, action } from 'mobx';  import './ScriptingRepl.scss';  import { Scripting, CompileScript, ts, Transformer } from '../util/Scripting';  import { DocumentManager } from '../util/DocumentManager'; -import { DocumentView } from './nodes/DocumentView';  import { OverlayView } from './OverlayView';  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';  import { library } from '@fortawesome/fontawesome-svg-core';  import { faCaretDown, faCaretRight } from '@fortawesome/free-solid-svg-icons'; +import { DocumentIconContainer } from './nodes/DocumentIcon';  library.add(faCaretDown);  library.add(faCaretRight);  @observer -export class DocumentIcon extends React.Component<{ view: DocumentView, index: number }> { -    render() { -        const view = this.props.view; -        const transform = view.props.ScreenToLocalTransform().scale(view.props.ContentScaling()).inverse(); -        const { x, y, width, height } = transform.transformBounds(0, 0, view.props.PanelWidth(), view.props.PanelHeight()); - -        return ( -            <div className="documentIcon-outerDiv" style={{ -                position: "absolute", -                transform: `translate(${x + width / 2}px, ${y}px)`, -            }}> -                <p>${this.props.index}</p> -            </div> -        ); -    } -} - -@observer -export class DocumentIconContainer extends React.Component { -    render() { -        return DocumentManager.Instance.DocumentViews.map((dv, i) => <DocumentIcon key={i} index={i} view={dv} />); -    } -} - -@observer  export class ScriptingObjectDisplay extends React.Component<{ scrollToBottom: () => void, value: { [key: string]: any }, name?: string }> {      @observable collapsed = true; @@ -95,6 +70,7 @@ export class ScriptingValueDisplay extends React.Component<{ scrollToBottom: ()  @observer  export class ScriptingRepl extends React.Component {      @observable private commands: { command: string, result: any }[] = []; +    private commandsHistory: string[] = [];      @observable private commandString: string = "";      private commandBuffer: string = ""; @@ -113,13 +89,22 @@ export class ScriptingRepl extends React.Component {                  Scripting.getGlobals().forEach(global => knownVars[global] = 1);                  return root => {                      function visit(node: ts.Node) { +                        let skip = false; +                        if (ts.isIdentifier(node)) { +                            if (ts.isParameter(node.parent)) { +                                skip = true; +                                knownVars[node.text] = 1; +                            } +                        }                          node = ts.visitEachChild(node, visit, context);                          if (ts.isIdentifier(node)) {                              const isntPropAccess = !ts.isPropertyAccessExpression(node.parent) || node.parent.expression === node;                              const isntPropAssign = !ts.isPropertyAssignment(node.parent) || node.parent.name !== node; -                            if (isntPropAccess && isntPropAssign && !(node.text in knownVars) && !(node.text in globalThis)) { -                                const match = node.text.match(/\$([0-9]+)/); +                            if (ts.isParameter(node.parent)) { +                                // delete knownVars[node.text]; +                            } else if (isntPropAccess && isntPropAssign && !(node.text in knownVars) && !(node.text in globalThis)) { +                                const match = node.text.match(/\d([0-9]+)/);                                  if (match) {                                      const m = parseInt(match[1]);                                      usedDocuments.push(m); @@ -143,17 +128,20 @@ export class ScriptingRepl extends React.Component {          switch (e.key) {              case "Enter": {                  const docGlobals: { [name: string]: any } = {}; -                DocumentManager.Instance.DocumentViews.forEach((dv, i) => docGlobals[`$${i}`] = dv.props.Document); +                DocumentManager.Instance.DocumentViews.forEach((dv, i) => docGlobals[`d${i}`] = dv.props.Document);                  const globals = Scripting.makeMutableGlobalsCopy(docGlobals);                  const script = CompileScript(this.commandString, { typecheck: false, addReturn: true, editable: true, params: { args: "any" }, transformer: this.getTransformer(), globals });                  if (!script.compiled) { +                    this.commands.push({ command: this.commandString, result: script.errors });                      return;                  }                  const result = script.run({ args: this.args });                  if (!result.success) { +                    this.commands.push({ command: this.commandString, result: result.error.toString() });                      return;                  }                  this.commands.push({ command: this.commandString, result: result.result }); +                this.commandsHistory.push(this.commandString);                  this.maybeScrollToBottom(); @@ -168,7 +156,7 @@ export class ScriptingRepl extends React.Component {                      if (this.historyIndex === 0) {                          this.commandBuffer = this.commandString;                      } -                    this.commandString = this.commands[this.commands.length - 1 - this.historyIndex].command; +                    this.commandString = this.commandsHistory[this.commands.length - 1 - this.historyIndex];                  }                  break;              } @@ -179,7 +167,7 @@ export class ScriptingRepl extends React.Component {                          this.commandString = this.commandBuffer;                          this.commandBuffer = "";                      } else { -                        this.commandString = this.commands[this.commands.length - 1 - this.historyIndex].command; +                        this.commandString = this.commandsHistory[this.commands.length - 1 - this.historyIndex];                      }                  }                  break;  | 
