There are 30 previous versions of this script.
// ==UserScript==
// @name mb. TAGGER LINKS NOW
// @version 2012.1106.2230
// @description musicbrainz.org: Quickly show or update "TAGGER" links with desired port
// @namespace http://userscripts.org/scripts/show/88065
// @author Tristan DANIEL (PATATE12 aka. jesus2099/shamo)
// @licence CC BY-NC-SA 3.0 FR (http://creativecommons.org/licenses/by-nc-sa/3.0/fr/)
// @grant none
// @match *://*.musicbrainz.org/*
// @run-at document-end
// ==/UserScript==
if(self.location.href.match(/^https?:\/\/([^.]+\.)?musicbrainz\.org\/.*$/)){/*@matchopera*/(function(){"use strict";
var userjs = "jesus2099userjs88065";
var classic = self.location.href.match(/\/\/classic\.mu/i);
var MBS = self.location.protocol+"//"+self.location.host;
/* ----- - ----- CONFIG */
var automatic = true; /*will background load tport (only when none) so TAGGER buttons do appear on next page browsing without bother triggering it manually*/
var tagger_port = "8000";/*first time default only (then using remembered setting)*/
var url = "/search"+(classic?"/textsearch.html":"")+"?type=label&query="+userjs+"&tport=%tagger-port%";
var txt_notaggerlinks = "%tagger-img% (%tagger-port%)"; /* %tagger-port% variable shows the current port and %tagger-img% the tagger image */
var txt_taggerlinksloaded = "%tagger-img% (%tagger-port%)";
var txt_loading = "\u231b\u00a0loading\u2026";
var bgcolour = "#6f9";
var taggerImgUrl = MBS+"/static/images/icons/mblookup-tagger.png"; /*replaces %tagger-img% in txt and chgtxt*/
/* ----- - END OF CONFIG */
var RE_GUID = "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}";
var portStorage = userjs+"_tport";
var iframename = classic?"hiddeniframe":"tagger-iframe";
var taggerlinks = hasIframe(document, iframename);
var con, a, menu, taggerlink;
if (localStorage) {
var savedport = localStorage.getItem(portStorage);
if (savedport) { tagger_port = savedport; }
}
if (taggerlinks && (taggerlink = document.querySelector("a[target='"+iframename+"']"))) {
var tport = taggerlink.getAttribute("href");
if (tport) {
tport = tport.match(/^https?:\/\/[^/]+:([0-9]+)\//);
if (tport) {
tagger_port = tport[1];
if (savedport && tagger_port != savedport && localStorage) { localStorage.setItem(portStorage, tagger_port); }
}
}
}
if (menu = document.querySelector("table#mainmenu-table table tr, div#header-menu ul")) {
a = document.createElement("a");
var wtxt = (taggerlinks?txt_taggerlinksloaded:txt_notaggerlinks).replace(/%tagger-port%/, tagger_port);
var wfrg = document.createDocumentFragment();
var warr = wtxt.split("%tagger-img%");
if (warr.length > 1) {
wfrg.appendChild(document.createTextNode(warr[0]));
var img = document.createElement("img");
img.setAttribute("src", taggerImgUrl);
img.setAttribute("alt", "tagger");
img.style.setProperty("vertical-align", "bottom");
wfrg.appendChild(img);
wfrg.appendChild(document.createTextNode(warr[1]));
}
else {
wfrg.appendChild(document.createTextNode(wtxt));
}
a.appendChild(wfrg);
a.style.setProperty("cursor", "pointer");
a.setAttribute("title", (!taggerlinks?"CTRL+":"")+"CLICK to change port (currently on port "+tagger_port+")");
a.addEventListener("click", function(e) {
if (e.ctrlKey || taggerlinks) {
var tport = window.prompt("CHANGE TAGGER PORT\n\nCurrent tagger port is "+tagger_port+".\nEnter new tagger port below:", tagger_port);
if (!tport || (tport == tagger_port && taggerlinks)) {
return false;
}
else {
tagger_port = tport;
localStorage.setItem(portStorage, tport);
}
}
loadu(e, false);
}, false);
if (classic) {
a.style.setProperty("display", "block");
a.style.setProperty("padding", "3px 7px");
a.addEventListener("mouseover", function(e){this.style.setProperty("background-color","#77a");}, false);
a.addEventListener("mouseout", function(e){this.style.removeProperty("background-color");}, false);
con = document.createElement("td");
con.style.setProperty("border-right", "none");
con.style.setProperty("border-left", "solid black 1px");
con.style.setProperty("padding", "0");
menu.appendChild(con);
} else {
con = document.createElement("li");
menu.insertBefore(con, menu.firstChild);
}
con.appendChild(a);
if (!taggerlinks) { con.style.setProperty("background-color", bgcolour); }
if (!taggerlinks && automatic) { loadu(null, true); }
}
function loadu(e, auto) {
var autoreload = auto && !/(&|\?)tport=[0-9]+/.test(self.location.href) && (new RegExp("^"+MBS+"/(?:artist/"+RE_GUID+"/releases.*|cdtoc/.*|label/"+RE_GUID+"[^/].*|recording/"+RE_GUID+"(?!.+edits?).*|release/"+RE_GUID+"(?!.+edits?).*|release-group/"+RE_GUID+")$")).test(self.location.href);
con.style.setProperty("opacity", ".5");
if (autoreload || !auto) {
removeChildren(a);
a.appendChild(document.createTextNode(txt_loading));
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {
if (this.readyState == 4) {
if (this.status < 400 && this.status > 199 && this.responseText.match(new RegExp("<iframe name=\""+iframename+"\""))) {
if (auto && !autoreload) {
con.style.setProperty("opacity", "1");
con.style.removeProperty("background-color");
a.setAttribute("title", a.getAttribute("title")+" \n \u261e AUTO-LOAD seems to have WORKED");
} else {
top.location.reload(true);
}
}
else {
con.style.setProperty("opacity", "1");
con.style.setProperty("background-color", "gold");
if (auto) {
a.setAttribute("title", a.getAttribute("title")+" \n \u261e AUTO-LOAD seems to have FAILED");
} else {
removeChildren(a);
a.appendChild(document.createTextNode("Error "+this.status+" (retry)"));
}
}
}
};
xhr.open("get", url.replace(/%tagger-port%/, tagger_port), true);
xhr.send(null);
}
function hasIframe(doc, frm) {
var iframes = doc.getElementsByTagName("iframe");
for (var fr=0; fr < iframes.length; fr++) {
if (iframes[fr].getAttribute("name") == frm) return iframes[fr];
}
return null;
}
function removeChildren(p) {
while (p && p.hasChildNodes()) { p.removeChild(p.firstChild); }
}
})();}