Action
Process draft as menu
This action selects a draft and prompts its content as a menu. The selected item in the menu is then appended to the current line.
The selected draft is:
- the first draft in a drafts query, which title equals the current line, or, if there’s none,
- the draft selected in a menu prompting all the drafts which title contains the current line.
When the draft is picked, its content is parsed and all the lines beginning with ‘- ’ will be processed as items in the menu to be prompted.
Variables:
- JOIN is used to separate the current line and the selected item in the menu (default is ‘: ’ ; use ‘\n’ to insert a line separation).
- FOLDERFILTER is used to filter the drafts query (default is ‘all’ ; or use ‘inbox’, ‘archive’ or ‘flagged’).
- TAGFILTER is used to filter the queried drafts with a tag or several tags (default is “, ie no tag filter).
Steps
-
script
const JOIN = ': ', TAGFILTER = '', FOLDERFILTER = 'all'; let f = () => { let [loc, len] = editor.getSelectedLineRange(), title = editor.getTextInRange(loc, len).trim().split('\n').shift().trim(); len = title.length; if (len < 3) { alert('Title is too short!'); return; } let ws = Workspace.create(); ws.tagFilter = TAGFILTER; ws.tagFilterRequireAll = true; ws.queryString = `title:"${title}"`; let drafts = ws.query(FOLDERFILTER), draftsLen = drafts.length, thisDraft; if (draftsLen > 0) { for (let d of drafts) { if (d.title.trim() == title) { thisDraft = d; break; } } if (!thisDraft) { let p = Prompt.create(); p.title = 'Draft: ' + title; let draftsList = drafts.sort(function(a, b) {return a.title.localeCompare(b.title, 'en', {ignorePunctuation: true})}).map(d => d.title); p.addSelect('drafts', '', draftsList, [draftsList[0]]); p.addButton('OKAY'); thisDraft = !p.show() ? false : drafts.filter(d => d.title == p.fieldValues['drafts'][0])[0]; } } if (!thisDraft) { alert('Found no draft!'); return; } title = thisDraft.title.trim(); let lines = thisDraft.content.split('\n').filter(l => l.startsWith('- ')).map(l => l.replace(/^- /, '').trim()); p = Prompt.create(); p.title = title; p.addSelect('lines', '', lines, [lines[0]]); p.addButton('OKAY'); if (!p.show()) { return; } let str = title + JOIN + p.fieldValues['lines'][0]; editor.setTextInRange(loc, len, str); editor.setSelectedRange(loc + str.length, 0); } f(); editor.activate();
Options
-
After Success Default Notification Info Log Level Info