Action
Post > Quote
Posted by thechelsuk,
Last update
9 days ago
UPDATES
19 days ago
Remove prompt for the url and citation, this script looks for content that matches a url and an author.
Updating the share capture template makes these easier to use.
19 days ago
Remove prompt for the url and citation, this script looks for content that matches a url and an author.
Updating the share capture template makes these easier to use.
21 days ago
Fixed handling of url encoding to stop drafts being truncated by #
26 days ago
Updated description
About
Prompts user for title, source, author and creates a Jekyll quote post in working copy in the _posts/year folder using the date and title to create the filename. This adds the relevant front matter.
Use a template that includes the following.
Source: <url>
Author: <name)
Tip
If you find this useful and want to support me, you can tip at ko-fi.com/thechelsuk
Steps
-
script
/* * @title: Regular Post to Working Copy * @author: TheChelsUk * @notes: Create markdown blog post in Working Copy * Extracts title from first line, source: and author: from bottom of draft */ var credential = Credential.create("Jekyll path", "Jekyll path"); credential.addTextField("jekyll-repo", "Jekyll repo name"); credential.addTextField("jekyll-path", "Path to your jekyll posts directory"); credential.addTextField("working-copy-key", "Working Copy x-url-callback key"); var result = credential.authorize(); if (!result) { alert("Failed to obtain required Jekyll data. Please check it and try again."); context.cancel("Failed to obtain required Jekyll data. Please check it and try again."); } else { if ((typeof(credential.getValue("jekyll-repo")) === 'undefined' || String(credential.getValue("jekyll-repo")).length === 0) || (typeof(credential.getValue("jekyll-path")) === 'undefined' || String(credential.getValue("jekyll-path")).length === 0) || (typeof(credential.getValue("working-copy-key")) === 'undefined' || String(credential.getValue("working-copy-key")).length === 0)) { alert("Repo values are invalid. Please rerun action and enter token again"); credential.forget(); context.cancel("Repo values were invalid."); } else { var content = draft.content, date = new Date(), now = new Date().toISOString().substr(0, 10), lines = content.split('\n'), title = '', source = '', author = '', cleanedContent = ''; // Extract title from first line (remove # if present) if (lines.length > 0) { title = lines[0].replace(/^#+\s*/, '').trim(); } if (!title) { alert("No title found on first line of draft"); context.cancel(); } // Extract source and author from bottom of draft var sourceMatch = content.match(/source:\s*(.+?)$/mi); var authorMatch = content.match(/author:\s*(.+?)$/mi); if (sourceMatch) { source = sourceMatch[1].trim(); } if (authorMatch) { author = authorMatch[1].trim(); } // Remove title, source, and author lines from content cleanedContent = content; // Remove first line (title) cleanedContent = cleanedContent.replace(/^.*\n/, ''); // Remove source: line cleanedContent = cleanedContent.replace(/source:\s*.+$/mi, ''); // Remove author: line cleanedContent = cleanedContent.replace(/author:\s*.+$/mi, ''); // Clean up extra whitespace cleanedContent = cleanedContent.trim(); // Create filename from title var titleArr = title.split(' '), fileName = now + '-'; titleArr.map((t) => fileName += `${t}-`); fileName = fileName.replace(/-$/, ''); fileName += '.md'; // Assemble post frontmatter var newDraft = ''; newDraft += '---\n'; newDraft += '\n'; newDraft += 'layout: post\n'; newDraft += 'date: ' + now + '\n'; if (source !== '') { newDraft += 'link: ' + source + '\n'; } newDraft += 'title: ' + title + '\n'; if (author !== '') { newDraft += 'cited: ' + author + '\n'; } newDraft += '\n'; newDraft += '---\n'; newDraft += '\n'; newDraft += cleanedContent; // Set draft content editor.setText(newDraft); // Send to working copy var year = new Date().getFullYear().toString(), baseURL = 'working-copy://x-callback-url/write/?key=' + credential.getValue("working-copy-key") + '&repo=' + encodeURIComponent(credential.getValue("jekyll-repo")) + '&path=' + encodeURIComponent(credential.getValue("jekyll-path")) + '/' + year + '/' + encodeURIComponent(fileName.toLowerCase()) + '&text=' + encodeURIComponent(newDraft), cb = CallbackURL.create(); cb.baseURL = baseURL; if (cb.open()) { app.displaySuccessMessage('Post created: ' + fileName); } else { app.displayErrorMessage('Failed to send to Working Copy'); context.fail(); } } }
Options
-
After Success Archive Notification Info Log Level Info
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.