import treeService from './tree.js'; import server from './server.js'; import utils from './utils.js'; import infoService from './info.js'; import linkService from './link.js'; import treeCache from './tree_cache.js'; import noteDetailService from './note_detail.js'; import noteTypeService from './note_type.js'; import noteTooltipService from './note_tooltip.js'; import protectedSessionService from'./protected_session.js'; /** * This is the main frontend API interface for scripts. It's published in the local "api" object. * * @constructor * @hideconstructor */ function FrontendScriptApi(startNote, currentNote, originEntity = null) { const $pluginButtons = $("#plugin-buttons"); /** @property {object} note where script started executing */ this.startNote = startNote; /** @property {object} note where script is currently executing */ this.currentNote = currentNote; /** @property {object|null} entity whose event triggered this execution */ this.originEntity = originEntity; /** * Activates note in the tree and in the note detail. * * @method * @param {string} notePath (or noteId) * @returns {Promise} */ this.activateNote = treeService.activateNote; /** * Activates newly created note. Compared to this.activateNote() also refreshes tree. * * @param {string} notePath (or noteId) * @return {Promise} */ this.activateNewNote = async notePath => { await treeService.reload(); await treeService.activateNote(notePath, noteDetailService.focusOnTitle); }; /** * @typedef {Object} ToolbarButtonOptions * @property {string} title * @property {string} [icon] - name of the JAM icon to be used (e.g. "clock" for "jam-clock" icon) * @property {function} action - callback handling the click on the button * @property {string} [shortcut] - keyboard shortcut for the button, e.g. "alt+t" */ /** * Adds new button the the plugin area. * * @param {ToolbarButtonOptions} opts */ this.addButtonToToolbar = opts => { const buttonId = "toolbar-button-" + opts.title.replace(/[^a-zA-Z0-9]/g, "-"); const button = $('