Drafts 19.1 on Mojave 10.14.6
Script:
// Open URLs in Draft
// RV 2020-04-07 at 10:19
// Opens all URL md-links in a draft
// Alt. 1: If you have Markdown links:
let re = /\[(.*?)\]\((.+?)\)/g;
let pos = 2;
// // Alt. 2: Plain URLs, simplified pattern, `http(s)//` required!:
// let re = /(https?:\/\/)([a-z0-9]{3,40}\.)+[a-z]{2,6}[^ \t\n\(\)'";:]*/gi;
// let pos = 1;
(() => {
let text = draft.content;
let links = [...text.matchAll(re)]; // convert to array
if (links.length == 0) {
app.displayInfoMessage('No markdown links found!');
return;
} else if (links.length == 1) {
openURL(links[0][pos]);
} else {
selectURLs(links);
}
})()
function selectURLs(links) {
let p = Prompt.create();
p.title = 'URLs in current draft';
p.message = 'Select URL to open:';
if (device.systemName == 'macOS') {
// Open all URL's (on Mac only)
p.addButton('Open All URLs', -1);
}
let i = 0;
for (let link of links) {
let title = link[1];
if (title == '') {
title = link[pos];
}
p.addButton(title, i);
i++;
}
if (!p.show()) {
context.cancel('canceled by user');
return;
}
i = parseInt(p.buttonPressed);
if (i == -1) {
for (const link of links) {
// Open all URL's (on Mac only)
openURL(link[pos]);
}
} else {
openURL(links[i][pos]);
}
}
function openURL(url) {
if (!url.match(/:\/\//)) {
url = 'http://' + url;
}
// try {
// let result = app.openURL(url, false);
// } catch(err) {
// app.displayErrorMessage(err.message + ': ' + url);
// }
let result = app.openURL(url, false)
if (result) {
return true;
} else {
app.displayErrorMessage('Invalid: ' + url);
return false;
}
}