diff options
author | bobzel <zzzman@gmail.com> | 2024-05-17 14:55:36 -0400 |
---|---|---|
committer | bobzel <zzzman@gmail.com> | 2024-05-17 14:55:36 -0400 |
commit | 0b451af28e5aef6b749da61e8a9fcd0a840789ac (patch) | |
tree | bdee4e28ee4715b69299a8da1b615c70b6adc445 /src/client/views/ScriptBox.tsx | |
parent | 8c1b420a143e4b72ec551277887c211ca6ca003b (diff) | |
parent | 38a382a03675d6a50ec7de75f05025efd093f570 (diff) |
merged with new master
Diffstat (limited to 'src/client/views/ScriptBox.tsx')
-rw-r--r-- | src/client/views/ScriptBox.tsx | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/client/views/ScriptBox.tsx b/src/client/views/ScriptBox.tsx index 623201ed1..9c36e6d26 100644 --- a/src/client/views/ScriptBox.tsx +++ b/src/client/views/ScriptBox.tsx @@ -1,17 +1,18 @@ +/* eslint-disable react/require-default-props */ import { action, makeObservable, observable } from 'mobx'; import { observer } from 'mobx-react'; import * as React from 'react'; +import { emptyFunction } from '../../Utils'; import { Doc, Opt } from '../../fields/Doc'; +import { DocData } from '../../fields/DocSymbols'; import { ScriptField } from '../../fields/ScriptField'; import { ScriptCast } from '../../fields/Types'; -import { emptyFunction } from '../../Utils'; import { DragManager } from '../util/DragManager'; import { CompileScript } from '../util/Scripting'; import { EditableView } from './EditableView'; -import { DocumentIconContainer } from './nodes/DocumentIcon'; import { OverlayView } from './OverlayView'; import './ScriptBox.scss'; -import { DocData } from '../../fields/DocSymbols'; +import { DocumentIconContainer } from './nodes/DocumentIcon'; export interface ScriptBoxProps { onSave: (text: string, onError: (error: string) => void) => void; @@ -25,6 +26,7 @@ export interface ScriptBoxProps { export class ScriptBox extends React.Component<ScriptBoxProps> { @observable private _scriptText: string; + overlayDisposer?: () => void; constructor(props: ScriptBoxProps) { super(props); @@ -42,7 +44,6 @@ export class ScriptBox extends React.Component<ScriptBoxProps> { console.log('ScriptBox: ' + error); }; - overlayDisposer?: () => void; onFocus = () => { this.overlayDisposer?.(); this.overlayDisposer = OverlayView.Instance.addElement(<DocumentIconContainer />, { x: 0, y: 0 }); @@ -53,21 +54,35 @@ export class ScriptBox extends React.Component<ScriptBoxProps> { }; render() { - let onFocus: Opt<() => void> = undefined, - onBlur: Opt<() => void> = undefined; + let onFocus: Opt<() => void>; + let onBlur: Opt<() => void>; if (this.props.showDocumentIcons) { onFocus = this.onFocus; onBlur = this.onBlur; } - const params = <EditableView contents={''} display={'block'} maxHeight={72} height={35} fontSize={28} GetValue={() => ''} SetValue={(value: string) => (this.props.setParams?.(value.split(' ').filter(s => s !== ' ')) ? true : true)} />; + const params = ( + <EditableView + contents="" + display="block" + maxHeight={72} + height={35} + fontSize={28} + GetValue={() => ''} + SetValue={(value: string) => { + this.props.setParams?.(value.split(' ').filter(s => s !== ' ')); + return true; + }} + /> + ); return ( <div className="scriptBox-outerDiv"> <div style={{ display: 'flex', flexDirection: 'column', height: '100%' }}> - <textarea className="scriptBox-textarea" onChange={this.onChange} value={this._scriptText} onFocus={onFocus} onBlur={onBlur}></textarea> + <textarea className="scriptBox-textarea" onChange={this.onChange} value={this._scriptText} onFocus={onFocus} onBlur={onBlur} /> <div style={{ background: 'beige' }}>{params}</div> </div> <div className="scriptBox-toolbar"> <button + type="button" onClick={e => { this.props.onSave(this._scriptText, this.onError); e.stopPropagation(); @@ -75,6 +90,7 @@ export class ScriptBox extends React.Component<ScriptBoxProps> { Save </button> <button + type="button" onClick={e => { this.props.onCancel && this.props.onCancel(); e.stopPropagation(); @@ -85,11 +101,12 @@ export class ScriptBox extends React.Component<ScriptBoxProps> { </div> ); } - //let l = docList(this.source[0].data).length; if (l) { let ind = this.target[0].index !== undefined ? (this.target[0].index+1) % l : 0; this.target[0].index = ind; this.target[0].proto = getProto(docList(this.source[0].data)[ind]);} + // let l = docList(this.source[0].data).length; if (l) { let ind = this.target[0].index !== undefined ? (this.target[0].index+1) % l : 0; this.target[0].index = ind; this.target[0].proto = getProto(docList(this.source[0].data)[ind]);} + // eslint-disable-next-line react/sort-comp public static EditButtonScript(title: string, doc: Doc, fieldKey: string, clientX: number, clientY: number, contextParams?: { [name: string]: string }, defaultScript?: ScriptField) { let overlayDisposer: () => void = emptyFunction; const script = ScriptCast(doc[fieldKey]) || defaultScript; - let originalText: string | undefined = undefined; + let originalText: string | undefined; if (script) { originalText = script.script.originalScript; } @@ -105,14 +122,14 @@ export class ScriptBox extends React.Component<ScriptBoxProps> { if (!text) { doc[DocData][fieldKey] = undefined; } else { - const script = CompileScript(text, { + const compScript = CompileScript(text, { params: { this: Doc.name, ...contextParams }, typecheck: false, editable: true, transformer: DocumentIconContainer.getTransformer(), }); - if (!script.compiled) { - onError(script.errors.map(error => error.messageText).join('\n')); + if (!compScript.compiled) { + onError(compScript.errors.map(error => error.messageText).join('\n')); return; } @@ -124,9 +141,9 @@ export class ScriptBox extends React.Component<ScriptBoxProps> { div.style.display = 'inline-block'; div.style.transform = `translate(${clientX}px, ${clientY}px)`; div.innerHTML = 'button'; - params.length && DragManager.StartButtonDrag([div], text, doc.title + '-instance', {}, params, (button: Doc) => {}, clientX, clientY); + params.length && DragManager.StartButtonDrag([div], text, doc.title + '-instance', {}, params, () => {}, clientX, clientY); - doc[DocData][fieldKey] = new ScriptField(script); + doc[DocData][fieldKey] = new ScriptField(compScript); overlayDisposer(); } }} |