Skip to content

Instantly share code, notes, and snippets.

@muness
Last active October 12, 2022 13:37
Show Gist options
  • Save muness/3741bfa2afa5e58d38a420c50cefaa38 to your computer and use it in GitHub Desktop.
Save muness/3741bfa2afa5e58d38a420c50cefaa38 to your computer and use it in GitHub Desktop.
Add Obsidian Links next to Amazing Marvin tasks
// ==UserScript==
// @name Add Obsidian Links in Amazing Marvin
// @namespace https:/217castle.com
// @updateURL https://gist.githubusercontent.com/muness/3741bfa2afa5e58d38a420c50cefaa38/raw/am-obsidian.user.js
// @downloadURL https://gist.githubusercontent.com/muness/3741bfa2afa5e58d38a420c50cefaa38/raw/am-obsidian.user.js
// @version 0.1.3
// @author Muness Castle
// @description In Amazing Marvin, this script finds Wiki links and adds links to Obsidian
// @require https://cdn.jsdelivr.net/gh/CoeJoder/waitForKeyElements.js@v1.2/waitForKeyElements.js
// @match https://app.amazingmarvin.com/*
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_registerMenuCommand
// @grant GM_addStyle
// ==/UserScript==
function addObsidianLinkToTaskThatMatchesRegEx(task,regExp) {
var wikilinks = [...task.innerText.matchAll(regExp)];
wikilinks.forEach(element => {
var wiki = element[1];
if(wiki.indexOf('|') > 0) {
wiki = wiki.substring(0,wiki.indexOf('|'));
}
task.insertAdjacentHTML("afterend",
`<div class="open-in-obsidian"><a href='obsidian://advanced-uri?vault=${getVault()}&filepath=${wiki}'>${wiki}</a><div>`);
}
);
}
const wikilinksRegexp = /\[\[([^\]]*)\]\]/g;
function addObsidianLinksToAMTasks() {
document.querySelectorAll('.open-in-obsidian').forEach(e => e.remove());
var tasks = document.getElementsByTagName('span');
for (var n = 0; n < tasks.length; n++) {
addObsidianLinkToTaskThatMatchesRegEx(tasks[n],wikilinksRegexp);
}
}
waitForKeyElements("[data-item-type]", addObsidianLinksToAMTasks, false);
waitForKeyElements(".open-in-obsidian", addObsidianLinksToAMTasks, false);
function getVault(){
return GM_getValue('vault', '');
}
function setVault(vault){
if(vault !== null) return GM_setValue('vault', vault);
}
function configureVault(){
setVault(prompt("Vault: ", getVault()));
addObsidianLinksToAMTasks();
}
GM_registerMenuCommand("Vault", configureVault);
if (getVault() == '') { alert('configure your Vault setting'); }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment