Merge branch 'master' into stable

This commit is contained in:
azivner 2018-03-10 20:33:58 -05:00
commit 0fdb6af98a
4 changed files with 33 additions and 4 deletions

View file

@ -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;
}
}
};
}

Binary file not shown.

View file

@ -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(', ') + `);
`;
}

View file

@ -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;