NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Toodledo Links In New Tab
// @namespace http://bjrn.net
// @description Makes links in Toodledo task notes open in a new tab, rather than open in place and replace the Toodledo page.
// @include https://www.toodledo.com/*
// @license CC BY http://creativecommons.org/licenses/by/3.0/
// @version 1
// @grant none
// ==/UserScript==
// Based on script from http://userscripts-mirror.org/scripts/show/149337 but adapted to only modify Toodledo note links.
if (document.body){
// Check all links in the body now
checkNode(document.body);
// Use a MutationObserver (Fx14+) to watch for additions to the document that could include new links
var MutOb, chgMon, i, httpels, opts;
// To disable this feature (might improve performance), comment out the following line:
var MutOb = (window.MutationObserver) ? window.MutationObserver : window.WebKitMutationObserver;
if (MutOb){
chgMon = new MutOb(function(mutationSet){
mutationSet.forEach(function(mutation){
// when additions to the document are detected, check for links
for (i=0; i<mutation.addedNodes.length; i++){
if (mutation.addedNodes[i].nodeType == 1){
checkNode(mutation.addedNodes[i]);
}
}
});
});
// attach chgMon to document.body
opts = {childList: true, subtree: true};
chgMon.observe(document.body, opts);
}
/* // For testing only -- all links cyan
var sty = document.createElement("style");
sty.setAttribute("type", "text/css");
sty.appendChild(document.createTextNode("a{background-color:#0ff}"));
document.body.appendChild(sty);
*/
}
function checkNode(el){
// Find links that do not have a target attribute; we don't want to change existing targets
var aLinks = el.querySelectorAll("div[class=note] > a[href]:not([target])");
var href = "";
if (aLinks.length > 0){
for (var j = 0; j < aLinks.length; j++){
// Check links that do not start with "javascript:"
href = aLinks[j].href.toLowerCase();
if (href.indexOf("javascript:") !== 0){
// Add the target regardless of site
aLinks[j].setAttribute("target", "_blank");
/* // For testing only
aLinks[j].style.backgroundColor = "#ff0";
*/
}
}
}
}