VT Custom Mturk Tab Titles

Adds new settings to the very bottom of your Dashboard page that allow you to set tab titles for urls.

Versión del día 16/09/2014. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         VT Custom Mturk Tab Titles
// @version      0.8001
// @description  Adds new settings to the very bottom of your Dashboard page that allow you to set tab titles for urls.  
// @author       Cristo
// @include      https://www.mturk.com*
// @grant       GM_getValue
// @grant       GM_setValue
// @copyright    2012+, You
// @namespace https://greasyfork.org/users/1973
// ==/UserScript==

//In the footer of the Dashboard page you'll find two new links "Add Title" and "Saved Title".
//Click "Add Title"
//Two boxes will appear and allow you to enter a new tab title for a URL.
//You can add * to the end of any url to match all pages that start with what you entered.
// * Example - https://www.mturk.com* will match all mturk urls but be overwritten by https://www.mturk.com/mturk/myhits
//Clcik "Saved Title"
//Shows all save titles.
//Hover your mouse over a title to reveal the URL. URLs are highlighted automatically to make copying simple.
//Click to delete.

var titles;
var urls;
var title = document.getElementsByTagName("title")[0]; 

if (GM_getValue("titlelist") == undefined) {
    titles = [];
    urls = [];
} else {
    titles = GM_getValue("titlelist");
    urls = GM_getValue("urllist");
}
for (var u = 0; u < urls.length; u++) {                    
    if (urls[u].indexOf("*") > -1){
        var create = urls[u].replace(/[^a-zA-Z ]/g, "");
        var createish = create + "(.*)";
        var created = new RegExp(createish);
        var sring = document.URL.toString().replace(/[^a-zA-Z ]/g, "");
        if (sring.match(created)) {
            title.innerHTML = titles[u];
        }
    } else {
        if (urls[u] == document.URL.toString()) {
            title.innerHTML = titles[u];
        }
    }
}

if(document.URL.toString() == "https://www.mturk.com/mturk/dashboard"){
    var foot = document.getElementsByClassName("footer_separator")[0].nextSibling.nextSibling;
    //For Chets AMT
    //var foot = document.getElementsByClassName("footer")[0];     
    
    var foottable = document.createElement("table");
    foottable.style.textAlign = "center";
    foottable.style.marginLeft = "auto";
    foottable.style.marginRight = "auto";
    foot.parentNode.insertBefore(foottable, foot.nextSibling);
    
    var td1 = document.createElement("td");
    var td2 = document.createElement("td");
    var td3 = document.createElement("td");
    foottable.appendChild(td1);
    foottable.appendChild(td2);
    foottable.appendChild(td3);
    
    var trig1 = document.createElement("span");
    trig1.style.color = "#1170A0";
    trig1.style.textDecoration = "underline";
    trig1.style.cursor = "pointer";
    trig1.innerHTML =  "Add Titles";
    td1.appendChild(trig1);
    
    td2.innerHTML = "&nbsp"+"|"+"&nbsp";
    
    var trig2 = document.createElement("span");
    trig2.style.color = "#1170A0";
    trig2.style.textDecoration = "underline";
    trig2.style.cursor = "pointer";
    trig2.innerHTML =  "Saved Titles";
    td3.appendChild(trig2);
    
    var divy = document.createElement("div");
    divy.style.textAlign = "center";
    foottable.parentNode.insertBefore(divy, foottable.nextSibling);    
    
    var check;										
    
    trig1.addEventListener( "click", function(){
        if (check == "table0"){
            divy.innerHTML = "";
            check = "nope";
        } else {
            divy.innerHTML = "";
            var table0 = document.createElement("table");
            table0.style.marginLeft = "auto";
            table0.style.marginRight = "auto";
            table0.style.textAlign = "center";
            check = "table0"; 							 
            divy.appendChild(table0);
            var topRow = document.createElement("tr");
            var middleRow = document.createElement("tr");
            table0.appendChild(topRow);
            topRow.parentNode.insertBefore(middleRow, topRow.nextSibling);
            
            var nameRow = document.createElement("td");
            topRow.appendChild(nameRow);
            var ptag1 = document.createElement("p");
            nameRow.appendChild(ptag1);
            ptag1.innerHTML = "Tab Name";
            
            var urlRow = document.createElement("td");
            nameRow.parentNode.insertBefore(urlRow, nameRow.nextSibling);
            var ptag2 = document.createElement("p");
            urlRow.appendChild(ptag2);
            ptag2.innerHTML = "URL";          
            
            var inputRow1 = document.createElement("td");
            middleRow.appendChild(inputRow1);
            var input1 = document.createElement("input");
            inputRow1.appendChild(input1);
            input1.type = "text";
            
            var inputRow2 = document.createElement("td");
            inputRow1.parentNode.insertBefore(inputRow2, inputRow1.nextSibling);
            var input2 = document.createElement("input");
            inputRow2.appendChild(input2);
            input2.type = "text";        	
            
            var addBut = document.createElement("span");
            addBut.style.color = "#1170A0";
            addBut.style.textDecoration = "underline";
            addBut.style.cursor = "pointer";
            addBut.innerHTML =  "Add";
            table0.parentNode.insertBefore(addBut, table0.nextSibling);
            
            addBut.addEventListener( "click", function() {
                var userName;
                var userUrl;
                if (input1.value.length < 1) {
                    userName = "Blank";
                } else {
                    userName = input1.value;
                }
                if (input2.value.length < 1) {
                    userUrl = "Blank";
                } else {
                    userUrl = input2.value;
                }
                titles.push(userName);
                urls.push(userUrl);
                var both = [];
                for (var w = 0; w < titles.length; w++){
                    both.push({ "A": titles[w], "B": urls[w] });
                }
                both.sort(function(a,b){
                    return a.B.length - b.B.length;
                });
                var temptitles = [];
                var tempurls = [];
                for (var h = 0; h < both.length; h++) {
                    temptitles.push(both[h].A);
                    tempurls.push(both[h].B);
                } 
                titles = temptitles;
                urls = tempurls;
                GM_setValue("titlelist", titles);
                GM_setValue("urllist", urls);
                input1.value = "";
                input2.value = "";
            }, false);
        }}, false);     
    
    trig2.addEventListener( "click", function(){
        if (check == "table"){
            divy.innerHTML = "";
            check = "nope";
        } else {
            divy.innerHTML = "";
            var table = document.createElement("table");
            table.style.marginLeft = "auto";
            table.style.marginRight = "auto";
            table.style.textAlign = "center";
            check = "table";   			     
            divy.appendChild(table);
            
            for (var g = 0; g < GM_getValue("urllist").length; g++){
                var row = document.createElement("tr");
                table.appendChild(row);
                var cell1 = document.createElement("td");
                row.appendChild(cell1);
                var emptyP = document.createElement("p");
                emptyP.style.color = "#7fb4cf";
                emptyP.style.textDecoration = "underline";
                emptyP.style.cursor = "pointer";
                cell1.appendChild(emptyP);
                emptyP.setAttribute("class","urltable");
                emptyP.innerHTML = GM_getValue("titlelist")[g];
            }
            function overit(l) {
                var inex1 = l.target.innerHTML;
                var switchp1 = GM_getValue("titlelist").indexOf(inex1);
                l.target.innerHTML = GM_getValue('urllist')[switchp1];
                var selection = window.getSelection();        
                var range = document.createRange();
                range.selectNodeContents(this);
                selection.removeAllRanges();
                selection.addRange(range);
            }    
            function outofit(l) {
                var newDex;
                var inex2 = l.target.innerHTML;
                if (inex2.indexOf("&amp;") > -1){
                    newDex = inex2.replace(/&amp;/g,"&");
                } else {
                    newDex = inex2;
                }
                var switchp2 = GM_getValue("urllist").indexOf(newDex);
                l.target.innerHTML = GM_getValue("titlelist")[switchp2];
            }    
            function gonenow(l) {
                var inexd = l.target.innerHTML;
                var dele = GM_getValue("urllist").indexOf(inexd);
                titles.splice(dele,1);
                urls.splice(dele,1);
                GM_setValue("titlelist", titles);
                GM_setValue("urllist", urls);
            }
            var pps = document.getElementsByClassName("urltable");
            for (var p = 0; p < pps.length; p++) {
                pps[p].addEventListener("mouseover", overit, false);
                pps[p].addEventListener("mouseout", outofit, false);
                pps[p].addEventListener("click", gonenow, false); 
            }
        }}, false);
}