From d8d15b528eb71575d59fc8a0fd88fbb931ef7c36 Mon Sep 17 00:00:00 2001 From: zadam Date: Sun, 9 May 2021 21:29:59 +0200 Subject: [PATCH] fix .runOnBackend() API call --- src/public/app/widgets/note_type.js | 6 +++--- src/services/script.js | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/public/app/widgets/note_type.js b/src/public/app/widgets/note_type.js index 3c66ec188..c977629b8 100644 --- a/src/public/app/widgets/note_type.js +++ b/src/public/app/widgets/note_type.js @@ -51,6 +51,8 @@ export default class NoteTypeWidget extends TabAwareWidget { () => ["file", "image", "search"].includes(note.type)); this.$noteTypeDesc.text(await this.findTypeTitle(note.type, note.mime)); + + this.$noteTypeButton.dropdown('hide'); } /** actual body is rendered lazily on note-type button click */ @@ -93,8 +95,6 @@ export default class NoteTypeWidget extends TabAwareWidget { const $link = $(e.target).closest('.dropdown-item'); this.save('code', $link.attr('data-mime-type')); - - this.$noteTypeButton.dropdown('hide'); }); if (this.note.type === 'code' && this.note.mime === mimeType.mime) { @@ -147,7 +147,7 @@ export default class NoteTypeWidget extends TabAwareWidget { } async entitiesReloadedEvent({loadResults}) { - if (loadResults.isNoteReloaded(this.noteId, this.componentId)) { + if (loadResults.isNoteReloaded(this.noteId)) { this.refresh(); } } diff --git a/src/services/script.js b/src/services/script.js index 260179a53..6bd497d16 100644 --- a/src/services/script.js +++ b/src/services/script.js @@ -57,11 +57,11 @@ async function executeScript(script, params, startNoteId, currentNoteId, originE const currentNote = becca.getNote(currentNoteId); const originEntity = becca.getEntityFromName(originEntityName, originEntityId); - currentNote.content = `return (${script}\r\n)(${getParams(params)})`; - currentNote.type = 'code'; - currentNote.mime = 'application/javascript;env=backend'; + // we're just executing an excerpt of the original frontend script in the backend context so we must + // override normal note's content and it's mime type / script environment + const backendOverrideContent = `return (${script}\r\n)(${getParams(params)})`; - const bundle = getScriptBundle(currentNote); + const bundle = getScriptBundle(currentNote, true, null, [], backendOverrideContent); return await executeBundle(bundle, { startNote, originEntity }); } @@ -102,7 +102,7 @@ function getScriptBundleForFrontend(note) { return bundle; } -function getScriptBundle(note, root = true, scriptEnv = null, includedNoteIds = []) { +function getScriptBundle(note, root = true, scriptEnv = null, includedNoteIds = [], backendOverrideContent = null) { if (!note.isContentAvailable) { return; } @@ -116,10 +116,12 @@ function getScriptBundle(note, root = true, scriptEnv = null, includedNoteIds = } if (root) { - scriptEnv = note.getScriptEnv(); + scriptEnv = !!backendOverrideContent + ? 'backend' + : note.getScriptEnv(); } - if (note.type !== 'file' && scriptEnv !== note.getScriptEnv()) { + if (note.type !== 'file' && !root && scriptEnv !== note.getScriptEnv()) { return; } @@ -157,7 +159,7 @@ apiContext.modules['${note.noteId}'] = {}; ${root ? 'return ' : ''}await ((async function(exports, module, require, api` + (modules.length > 0 ? ', ' : '') + modules.map(child => sanitizeVariableName(child.title)).join(', ') + `) { try { -${note.getContent()}; +${backendOverrideContent || note.getContent()}; } catch (e) { throw new Error("Load of script note \\"${note.title}\\" (${note.noteId}) failed with: " + e.message); } if (!module.exports) module.exports = {}; for (const exportKey in exports) module.exports[exportKey] = exports[exportKey];