mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-20 02:37:41 -05:00
[PROPOSAL] REPL output replacement (#439)
* fix OutputManager _append setter * fix OutputManager change parameters * fix OutputCtxManager __init__ and change methods * replacing OutputManager pyscript.write with write function * add optional output-append attribute to py-repl * add appendOutput(default: true) to base component * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update pyscriptjs/src/components/pyrepl.ts Co-authored-by: woxtu <woxtup@gmail.com> * change from output-append flag to output-mode attribute * removed type annotation * repositioned setOutputMode call for auto-generated REPLs to work * fixed indentation error for indented input * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * added preEvaluate method * moved output-mode logic to preEvaluate * remove static write method from PyScript, add write method to Element * removed err parameter from OutputCtxManager * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add PyScript.write back with a deprecation warning * fix wrong input name Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: woxtu <woxtup@gmail.com> Co-authored-by: Fabio Pliger <fabio.pliger@gmail.com>
This commit is contained in:
@@ -141,11 +141,6 @@ export class PyRepl extends BaseEvalElement {
|
||||
|
||||
if (this.hasAttribute('output')) {
|
||||
this.errorElement = this.outputElement = document.getElementById(this.getAttribute('output'));
|
||||
|
||||
// in this case, the default output-mode is append, if hasn't been specified
|
||||
if (!this.hasAttribute('output-mode')) {
|
||||
this.setAttribute('output-mode', 'append');
|
||||
}
|
||||
} else {
|
||||
if (this.hasAttribute('std-out')) {
|
||||
this.outputElement = document.getElementById(this.getAttribute('std-out'));
|
||||
@@ -176,6 +171,13 @@ export class PyRepl extends BaseEvalElement {
|
||||
this.outputElement.hidden = false;
|
||||
}
|
||||
|
||||
preEvaluate(): void {
|
||||
this.setOutputMode("replace");
|
||||
if(!this.appendOutput) {
|
||||
this.outputElement.innerHTML = '';
|
||||
}
|
||||
}
|
||||
|
||||
postEvaluate(): void {
|
||||
this.outputElement.hidden = false;
|
||||
this.outputElement.style.display = 'block';
|
||||
@@ -189,8 +191,15 @@ export class PyRepl extends BaseEvalElement {
|
||||
const newPyRepl = document.createElement('py-repl');
|
||||
newPyRepl.setAttribute('root', this.getAttribute('root'));
|
||||
newPyRepl.id = this.getAttribute('root') + '-' + nextExecId.toString();
|
||||
newPyRepl.setAttribute('auto-generate', '');
|
||||
this.removeAttribute('auto-generate');
|
||||
|
||||
if(this.hasAttribute('auto-generate')) {
|
||||
newPyRepl.setAttribute('auto-generate', '');
|
||||
this.removeAttribute('auto-generate');
|
||||
}
|
||||
|
||||
if(this.hasAttribute('output-mode')) {
|
||||
newPyRepl.setAttribute('output-mode', this.getAttribute('output-mode'));
|
||||
}
|
||||
|
||||
const addReplAttribute = (attribute: string) => {
|
||||
if (this.hasAttribute(attribute)) {
|
||||
@@ -209,9 +218,10 @@ export class PyRepl extends BaseEvalElement {
|
||||
|
||||
getSourceFromElement(): string {
|
||||
const sourceStrings = [
|
||||
`output_manager.change("` + this.outputElement.id + `")`,
|
||||
`output_manager.change(out="${this.outputElement.id}", append=True)`,
|
||||
...this.editor.state.doc.toString().split('\n'),
|
||||
];
|
||||
|
||||
return sourceStrings.join('\n');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user