fixed frontend script execution

This commit is contained in:
azivner 2018-03-04 14:21:11 -05:00
parent d239ef2956
commit 3b9d1df05c
6 changed files with 27 additions and 21 deletions

View File

@ -1,4 +1,4 @@
const api = (function() { function Api() {
const $pluginButtons = $("#plugin-buttons"); const $pluginButtons = $("#plugin-buttons");
async function activateNote(notePath) { async function activateNote(notePath) {
@ -14,8 +14,10 @@ const api = (function() {
} }
return { return {
__modules: {},
__notes: {},
addButtonToToolbar, addButtonToToolbar,
activateNote, activateNote,
getInstanceName: noteTree.getInstanceName getInstanceName: noteTree.getInstanceName
} }
})(); }

View File

@ -116,7 +116,16 @@ async function stopWatch(what, func) {
} }
function executeScript(script) { function executeScript(script) {
eval(script); const completeScript = `
(async function() {
const api = Api();
${script}
})();`;
console.log(completeScript);
eval(completeScript);
} }
function formatValueWithWhitespace(val) { function formatValueWithWhitespace(val) {

View File

@ -23,15 +23,15 @@ router.post('/job', auth.checkApiAuth, wrap(async (req, res, next) => {
})); }));
router.get('/startup', auth.checkApiAuth, wrap(async (req, res, next) => { router.get('/startup', auth.checkApiAuth, wrap(async (req, res, next) => {
const noteIds = await attributes.getNoteIdsWithAttribute("run", "frontend_startup");
const repository = new Repository(req); const repository = new Repository(req);
const notes = await attributes.getNotesWithAttribute(repository, "run", "frontend_startup");
const scripts = []; const scripts = [];
for (const noteId of noteIds) { for (const note of notes) {
const note = await repository.getNote(noteId); const bundle = await script.getScriptBundle(note);
scripts.push(await script.getNoteScript(note)); scripts.push(bundle.script);
} }
res.send(scripts); res.send(scripts);
@ -40,8 +40,9 @@ router.get('/startup', auth.checkApiAuth, wrap(async (req, res, next) => {
router.get('/subtree/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => { router.get('/subtree/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => {
const repository = new Repository(req); const repository = new Repository(req);
const note = await repository.getNote(req.params.noteId); const note = await repository.getNote(req.params.noteId);
const bundle = await script.getScriptBundle(note);
res.send(await script.getNoteScript(note, repository)); res.send(bundle.script);
})); }));
router.get('/render/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => { router.get('/render/:noteId', auth.checkApiAuth, wrap(async (req, res, next) => {

View File

@ -3,10 +3,10 @@
const sql = require('./sql'); const sql = require('./sql');
const utils = require('./utils'); const utils = require('./utils');
const sync_table = require('./sync_table'); const sync_table = require('./sync_table');
const Repository = require('./repository');
const BUILTIN_ATTRIBUTES = [ const BUILTIN_ATTRIBUTES = [
'run_on_startup', 'frontend_startup',
'backend_startup',
'disable_versioning', 'disable_versioning',
'calendar_root', 'calendar_root',
'hide_in_autocomplete', 'hide_in_autocomplete',
@ -27,9 +27,7 @@ async function getNoteIdWithAttribute(name, value) {
AND attributes.value = ?`, [name, value]); AND attributes.value = ?`, [name, value]);
} }
async function getNotesWithAttribute(dataKey, name, value) { async function getNotesWithAttribute(repository, name, value) {
const repository = new Repository(dataKey);
let notes; let notes;
if (value !== undefined) { if (value !== undefined) {
@ -44,8 +42,8 @@ async function getNotesWithAttribute(dataKey, name, value) {
return notes; return notes;
} }
async function getNoteWithAttribute(dataKey, name, value) { async function getNoteWithAttribute(repository, name, value) {
const notes = getNotesWithAttribute(dataKey, name, value); const notes = getNotesWithAttribute(repository, name, value);
return notes.length > 0 ? notes[0] : null; return notes.length > 0 ? notes[0] : null;
} }

View File

@ -101,10 +101,6 @@ async function getRenderScript(note) {
return "async function() {" + subTreeScripts + note.content + "\r\n}"; return "async function() {" + subTreeScripts + note.content + "\r\n}";
} }
async function getNoteScript(note) {
}
async function getScriptBundle(note, includedNoteIds = []) { async function getScriptBundle(note, includedNoteIds = []) {
if (!note.isJavaScript()) { if (!note.isJavaScript()) {
return; return;
@ -150,6 +146,6 @@ module.exports = {
executeNote, executeNote,
executeScript, executeScript,
setJob, setJob,
getNoteScript, getScriptBundle,
getRenderScript getRenderScript
}; };

View File

@ -31,7 +31,7 @@ function ScriptContext(dataKey, startNote, allNotes) {
}; };
this.getNotesWithAttribute = async function (attrName, attrValue) { this.getNotesWithAttribute = async function (attrName, attrValue) {
return await attributes.getNotesWithAttribute(dataKey, attrName, attrValue); return await attributes.getNotesWithAttribute(repository, attrName, attrValue);
}; };
this.getNoteWithAttribute = async function (attrName, attrValue) { this.getNoteWithAttribute = async function (attrName, attrValue) {