Skip to content

Instantly share code, notes, and snippets.

@djfjfnfn
Created April 18, 2023 17:32
Show Gist options
  • Save djfjfnfn/bc464beaefc8229fcb65ccdffb443cbd to your computer and use it in GitHub Desktop.
Save djfjfnfn/bc464beaefc8229fcb65ccdffb443cbd to your computer and use it in GitHub Desktop.
iOS Drafts Action JavaScript
var search = () => {
let searchterm = draft.processTemplate("[[selection_only]]");
if (searchterm.length == 0) {
searchterm = draft.processTemplate("[[draft]]");
}
let regex = /\[([^\[]+)\]\(([^\)]+)\)|([a-zA-Z]+:\/\/[^\s]+)|([a-zA-Z]+:\/\/\s*)/ig;
let match;
let urls = [];
while ((match = regex.exec(searchterm)) !== null) {
if (match[2]) {
// 匹配到了markdown格式的URL
let url = match[2];
urls.push(url);
} else {
// 匹配到了其他格式的URL
let url = match[0];
urls.push(url);
}
}
if (urls.length == 1) {
// 只匹配到一个URL,直接打开
let url = urls[0];
app.openURL(url);
} else if (urls.length > 1) {
// 匹配到多个URL,让用户选择
let p = Prompt.create();
p.title = "选择一个URL";
p.message = "请选择要打开的URL:";
urls.forEach((url, index) => {
p.addButton(url, index);
});
let didSelect = p.show();
if (didSelect) {
let selectedIndex = p.buttonPressed;
let selectedUrl = urls[selectedIndex];
let url = selectedUrl;
app.openURL(url);
}
} else {
// 没有匹配到url时,读取本地json文件
var bookmark = Bookmark.findOrCreate("JSONFolder");
var fmLocal = FileManager.createForBookmark(bookmark);
var jsonString = fmLocal.readString("/URLScheme_DraftsAction.json");
var jsonDict = JSON.parse(jsonString);
// 获取搜索内容最后一个空格后的字符
var keyString = searchterm.split(" ").pop();
// 获取搜索内容最后一个空格前的内容
var valueString = searchterm.substring(0, searchterm.lastIndexOf(" "));
// 检查是否存在匹配的key
if (jsonDict.hasOwnProperty(keyString)) {
// 获取对应key的value中%s的替换内容
var urlStringTemplate = jsonDict[keyString];
var urlStringFinal = urlStringTemplate.replace("%s", valueString);
app.openURL(urlStringFinal);
} else {
// 没有匹配到key,以默认方式搜索打开全部获取的内容
app.openURL(`x-web-search://?${encodeURIComponent(searchterm)}`);
}
}
}
search();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment