From 354999f37ac0b8204dee97dbd36e8ec396ea8172 Mon Sep 17 00:00:00 2001 From: azivner Date: Fri, 9 Mar 2018 19:28:38 -0500 Subject: [PATCH 1/2] fix weight tracker script --- src/scripts/Weight Tracker.tar | Bin 224256 -> 224255 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/scripts/Weight Tracker.tar b/src/scripts/Weight Tracker.tar index 0a88916577bfe5de4c9e34d4fbab7f09932c18fe..591f41f53ba2174480599c8d33ebde4964673de3 100644 GIT binary patch delta 25 gcmZp;!TbL@Z$k@X3)2>6!!+i^g3RrvY0Rft0f_Diga7~l delta 26 hcmex=owwlzZ$k@X3)2>6!!(wXjLhQgCTYy4Spk)33IYHC From f6c7f6a0f20fef7e60c81dcc45eaedeb7d5ff451 Mon Sep 17 00:00:00 2001 From: azivner Date: Sat, 10 Mar 2018 11:53:51 -0500 Subject: [PATCH 2/2] added require() method for commonJS compliancy --- src/public/javascripts/api.js | 16 +++++++++++++++- src/services/script.js | 6 ++++-- src/services/script_context.js | 15 ++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/public/javascripts/api.js b/src/public/javascripts/api.js index f7d0e745a..0d12f7a9c 100644 --- a/src/public/javascripts/api.js +++ b/src/public/javascripts/api.js @@ -1,8 +1,22 @@ function ScriptContext(startNote, allNotes) { + const modules = {}; + return { - modules: {}, + modules: modules, notes: toObject(allNotes, note => [note.noteId, note]), apis: toObject(allNotes, note => [note.noteId, ScriptApi(startNote, note)]), + require: moduleNoteIds => { + return moduleName => { + const candidates = allNotes.filter(note => moduleNoteIds.includes(note.noteId)); + const note = candidates.find(c => c.title === moduleName); + + if (!note) { + throw new Error("Could not find module note " + moduleName); + } + + return modules[note.noteId].exports; + } + } }; } diff --git a/src/services/script.js b/src/services/script.js index 452eaf2ba..b8676c3ec 100644 --- a/src/services/script.js +++ b/src/services/script.js @@ -111,13 +111,15 @@ async function getScriptBundle(note, root = true, scriptEnv = null, includedNote } } + const moduleNoteIds = modules.map(mod => mod.noteId); + if (note.isJavaScript()) { bundle.script += ` apiContext.modules['${note.noteId}'] = {}; -${root ? 'return ' : ''}await (async function(exports, module, api` + (modules.length > 0 ? ', ' : '') + +${root ? 'return ' : ''}await (async function(exports, module, require, api` + (modules.length > 0 ? ', ' : '') + modules.map(child => sanitizeVariableName(child.title)).join(', ') + `) { ${note.content} -})({}, apiContext.modules['${note.noteId}'], apiContext.apis['${note.noteId}']` + (modules.length > 0 ? ', ' : '') + +})({}, apiContext.modules['${note.noteId}'], apiContext.require(${JSON.stringify(moduleNoteIds)}), apiContext.apis['${note.noteId}']` + (modules.length > 0 ? ', ' : '') + modules.map(mod => `apiContext.modules['${mod.noteId}'].exports`).join(', ') + `); `; } diff --git a/src/services/script_context.js b/src/services/script_context.js index 687231bfa..3dd375305 100644 --- a/src/services/script_context.js +++ b/src/services/script_context.js @@ -15,6 +15,18 @@ function ScriptContext(dataKey, startNote, allNotes) { this.modules = {}; this.notes = utils.toObject(allNotes, note => [note.noteId, note]); this.apis = utils.toObject(allNotes, note => [note.noteId, new ScriptApi(dataKey, startNote, note)]); + this.require = moduleNoteIds => { + return moduleName => { + const candidates = allNotes.filter(note => moduleNoteIds.includes(note.noteId)); + const note = candidates.find(c => c.title === moduleName); + + if (!note) { + throw new Error("Could not find module note " + moduleName); + } + + return this.modules[note.noteId].exports; + } + }; } function ScriptApi(dataKey, startNote, currentNote) { @@ -26,7 +38,8 @@ function ScriptApi(dataKey, startNote, currentNote) { this.utils = { unescapeHtml: utils.unescapeHtml, - isoDateTimeStr: utils.dateStr + isoDateTimeStr: utils.dateStr, + isoDateStr: date => utils.dateStr(date).substr(0, 10) }; this.getInstanceName = () => config.General ? config.General.instanceName : null;