Action
JS Snippets
Inserts code from a draft with snippets.
- each snippet is headed by a title line and a comments line.
- both preceeded by ‘// ’ comment tag.
- Don’t include other comment lines inside the snippets!
Steps
-
script
// JS Snippets // RV 2020-03-08 at 12:25 EST // Inserts code from a draft with snippets. // each snippet is headed by a title line and a comments line. // both preceeded by '// ' comment tag. // Don't include other comment lines inside the snippets! const uuid = '00DDC27C-9A81-4C28-BAAD-F2DF041E0A82'; main: { try { var text = Draft.find(uuid).content } catch (e) { alert(` Wrong UUID! Insert UUID of your snippet draft at line 9 of this script!`); // context.fail('Wrong UUID!'); makeSnippetDraft(); break main; } let snippets = text.split('\n\n// '); let titles = []; let snipDict = {}; for (const item of snippets.slice(1)) { // Skip draft title lines // make title array and snippet dictionary: let snip = item.split('\n'); let title = snip[0]; let body = snip.slice(1).join('\n'); titles.push(title); snipDict[title] = body; } let p = Prompt.create(); p.title = "Snippets Collection"; p.message = "Insert JS snippet in code:"; p.addSwitch("sw", "Include title", false); for (const button of titles) { p.addButton(button); } if (p.show()) { let btn = p.buttonPressed; let snippet = ''; if (p.fieldValues['sw']) { snippet = `// ${btn}\n${snipDict[btn]}\n\n`; } else { snippet = `${snipDict[btn]}\n\n`; } // alert(snippet); editor.setSelectedText(snippet); } else { context.cancel(); } } function makeSnippetDraft() { var d = Draft.create(); const now = new Date(); const dt = now.toString("yyyy-MM-dd, HH:mm"); d.content = `// Snippet Collection // ${dt} // To be used with action: 'JS Snippets' \n` + snippetSamples(); d.languageGrammar = "JavaScript"; d.update(); d.addTag("script"); d.update(); app.setClipboard(d.uuid) alert(`New sample draft created UUID: ${d.uuid} UUID aready in Clipboard :) Paste in line 9 of this script!`); // editor.load(d); } function snippetSamples() { let samples = ` // for of loop // Makes a markdown numbered list: let myList = ['line 1', 'line 2', 'line 3']; let newList = []; i = 1 for (const item of myList) { newList.push(i + '. ' + item) i += 1; } alert(newList.join('\\n')) // for i++ loop let text = '' for (i = 0; i < 5; i++) { text += 'Test ' + i + '\\n'; } alert(text); // Prompt template // Delete or replace all vars, labels, etc to suit your needs: let p = Prompt.create(); p.title = "title"; p.message = "message"; p.addTextField("field", "Label", ""); p.addTextView("text", "Label", "", {"height":60,"keyboard":"default"}); p.addSwitch("sw", "Label", false); p.addDatePicker("dt", "Label", new Date(), {"mode":"dateAndTime"}); p.addPicker('pick', 'Label', [['pick1', 'pick2']], [0]); p.addSelect('select', 'Label', ['sel1', 'sel2'], ['sel2'], false); let buttons = ["btn1", "btn2"]; for (var button of buttons) { p.addButton(button); } if (p.show()) { var field = p.fieldValues['field']; var myText = p.fieldValues['text']; var sw = p.fieldValues['sw']; var dt = p.fieldValues['dt']; var listIndex = p.fieldValues['pick']; // integer var selected = p.fieldValues['select']; switch (p.buttonPressed) { case 'btn1': break; case 'btn2': break; default: app.displayErrorMessage("switch/case not implemented!"); break; } } else { context.cancel(); } `; return samples; }
Options
-
After Success Default Notification Info Log Level Info
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.