Pixiv One-Click Bookmark

Add a button under the image to OneClick Bookmark.

Stan na 29-05-2017. Zobacz najnowsza wersja.

// ==UserScript==
// @name           Pixiv One-Click Bookmark
// @namespace      https://gist.github.com/E-Badapple
// @description    Add a button under the image to OneClick Bookmark.
// @match          www.pixiv.net/search.php*
// @match          www.pixiv.net/bookmark.php*
// @match          www.pixiv.net/member_illust.php?id=*
// @match          www.pixiv.net/ranking.php*
// @match          www.pixiv.net/*bookmark_new_illust.php*
// @version        1.0.7
// @grant          none
// ==/UserScript==

var IfAdd = 1;
var SS = 8;
var S = new Array();
for(var i = 0 ; i < SS ; i++ ){
    S[i] = 0;
}

var alwaysPrivate = false;
var iii=1;
var listener = function(e){
	e.preventDefault();
    e.target.textContent = "Adding...";
    //  e.target.textContent = e.target.getAttribute("href").split("=")[1];
    //var id1 = "bookmark_add.php?type=illust&illust_id="+e.target.getAttribute("href").split("=")[1];
    var id1 = "bookmark_add.php?type=illust&illust_id="+e.target.getAttribute("href").split("=")[1];
    var get = new XMLHttpRequest();
    get.open("GET", id1, true);
    get.onload = function(){
        var id = get.responseText.match(/<input type="hidden" name="id" value="(.*?)">/)[1];
        var tt = get.responseText.match(/<input type="hidden" name="tt" value="(.*?)">/)[1];
        var tagData = get.responseText.match(/<span class="tag c6.*?" data-tag=".*?">/g);
        var tags = (tagData !== null) ? tagData.map(function(x){return x.match(/data-tag="(.*?)">/)[1];}) : [];
        var restrict = (alwaysPrivate || (tags.indexOf("R-18") !== -1)) ? "1" : "0";
        var post = new XMLHttpRequest();
        post.open("POST", "https://www.pixiv.net/bookmark_add.php", true);
        post.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        post.onload = function(){
            //e.target.textContent = "Complete";
            e.target.style = "background-color:#9e9a93";
            e.target.innerHTML = "BookMarking";
            e.target.removeEventListener("click", listener, false);
        };
        post.send("type=illust&id=" + id + "&tt=" + tt + "&restrict=" + restrict + "&comment=&mode=add&from_sid=&submit=&tag=" + tags.join(" "));
    };
    get.send();
};

/*
var listener2 = function(e){
	e.preventDefault();
    //e.target.firstChild.textContent = "Adding...";
    e.target.innerHTML = "Adding...";
    e.target.setAttribute("class","");
    
    //  e.target.textContent = e.target.getAttribute("href").split("=")[1];
    var id1 = "bookmark_add.php?type=illust&illust_id="+e.target.getAttribute("href").split("=")[1];
    var get = new XMLHttpRequest();
    get.open("GET", id1, true);
    get.onload = function(){
        var id = get.responseText.match(/<input type="hidden" name="id" value="(.*?)">/)[1];
        var tt = get.responseText.match(/<input type="hidden" name="tt" value="(.*?)">/)[1];
        var tagData = get.responseText.match(/<span class="tag c6.*?" data-tag=".*?">/g);
        var tags = (tagData !== null) ? tagData.map(function(x){return x.match(/data-tag="(.*?)">/)[1];}) : [];
        var restrict = (alwaysPrivate || (tags.indexOf("R-18") !== -1)) ? "1" : "0";
        var post = new XMLHttpRequest();
        post.open("POST", "http://www.pixiv.net/bookmark_add.php", true);
        post.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        post.onload = function(){
            //e.target.innerHTML = "Complete";
            e.target.parentNode.textContent = "Complete";
            e.target.removeEventListener("click", listener, false);
        };
        post.send("type=illust&id=" + id + "&tt=" + tt + "&restrict=" + restrict + "&comment=&mode=add&from_sid=&submit=&tag=" + tags.join(" "));
    };
    get.send();
};
*/

var listener3 = function(e){
	e.preventDefault();
    e.target.textContent = "Adding...";
    //  e.target.textContent = e.target.getAttribute("href").split("=")[1];
    var id1 = "bookmark_add.php?type=illust&illust_id="+e.target.getAttribute("href").split("id=")[1];
    var get = new XMLHttpRequest();
    get.open("GET", id1, true);
    get.onload = function(){
        var id = get.responseText.match(/<input type="hidden" name="id" value="(.*?)">/)[1];
        var tt = get.responseText.match(/<input type="hidden" name="tt" value="(.*?)">/)[1];
        var tagData = get.responseText.match(/<span class="tag c6.*?" data-tag=".*?">/g);
        var tags = (tagData !== null) ? tagData.map(function(x){return x.match(/data-tag="(.*?)">/)[1];}) : [];
        var restrict = (alwaysPrivate || (tags.indexOf("R-18") !== -1)) ? "1" : "0";
        var post = new XMLHttpRequest();
        post.open("POST", "http://www.pixiv.net/bookmark_add.php", true);
        post.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        post.onload = function(){
            e.target.textContent = "Complete";
            e.target.removeEventListener("click", listener, false);
        };
        post.send("type=illust&id=" + id + "&tt=" + tt + "&restrict=" + restrict + "&comment=&mode=add&from_sid=&submit=&tag=" + tags.join(" "));
    };
    get.send();
};

var CL2 = document.getElementsByClassName("bookmark-count").length;
function GETClass2(){
    if ( document.getElementsByClassName("bookmark-count").length != CL2 || S[2] === 0){
    CL2 = document.getElementsByClassName("bookmark-count").length;
    var CLi = 0;
        while(CLi < CL2){
            //var a = document.getElementsByClassName("_icon sprites-bookmark-badge")[CLi];
            //var b = document.getElementsByClassName("_icon sprites-bookmark-badge")[CLi].parentNode.getAttribute("href");
            //a.setAttribute("href",b);
            var b = document.getElementsByClassName("bookmark-count")[CLi].getAttribute("href");
            if( document.getElementsByClassName("bookmark-count")[CLi].innerHTML == "Add BookMark" )
            document.getElementsByClassName("bookmark-count")[CLi].addEventListener("click", listener, false);
            //document.getElementsByClassName("bookmark-count")[CLi].firstChild.addEventListener("click", listener2, false);
            CLi++;
        }
        if(S[2] === 0){ S[2]++; }
    }
    Cli = 0;
}

/*
var CL4 = document.getElementsByClassName("meta-box page-count").length;
function GETClass4(){
     if ( document.getElementsByClassName("meta-box page-count").length != CL4 || S[4] === 0){
    CL4 = document.getElementsByClassName("meta-box page-count").length;
    var CLi = 0;
        while(CLi < CL4){
            document.getElementsByClassName("meta-box page-count")[CLi].addEventListener("click", listener3, false);
            CLi++;
        }
        if(S[4] === 0){ S[4]++; }
    }
    Cli = 0;
}
*/

function addElementA(Class,id,MCLi,IfBookMark){
    var id3 = "/bookmark_detail.php?illust_id="+id;
    var parent = document.getElementsByClassName(Class)[MCLi];
    var b = document.createElement("ul");
    var a = document.createElement("a");
    a.setAttribute("class", "bookmark-count __ui-tooltip");
    a.setAttribute("href",id3);
    if( IfBookMark === 0 ) a.innerHTML = "Add BookMark";
    else{ 
        a.innerHTML = "BookMarking";
        a.setAttribute("style","background-color:#9e9a93");
    }
    if( !parent.getElementsByClassName("bookmark-count __ui-tooltip")[0] ){
        parent.appendChild(b);
        parent.appendChild(a);
    }
    /*
    var d = document.getElementsByClassName("bookmark-count __ui-tooltip")[MCLi];
    var c = document.createElement("li");
    c.setAttribute("class","_icon sprites-bookmark-badge");
    c.setAttribute("href",id3);
    d.appendChild(c);
    */
}

var MCLa = document.getElementsByClassName("image-item").length;

function AddClass(){
    
    var MCLii = 0;
    var id2;
    /*if( MCLa != document.getElementsByClassName("image-item").length || S[0] ===0 ){*/
        MCLa = document.getElementsByClassName("image-item").length;
        while( MCLii < MCLa ){
            if( document.getElementsByClassName("image-item")[MCLii].getElementsByClassName("bookmark-count __ui-tooltip").length > 0 ){
                if( document.getElementsByClassName("image-item")[MCLii].getElementsByClassName("bookmark-count __ui-tooltip").length > 1 ){
                    var IfD = document.getElementsByClassName("image-item")[MCLii].getElementsByClassName("bookmark-count __ui-tooltip").length;
                    var MCLii2 = 1;
                    while( MCLii2 < IfD ){
                        var IfD2 = document.getElementsByClassName("image-item")[MCLii].getElementsByClassName("bookmark-count __ui-tooltip")[MCLii2];
                        IfD2.parentNode.removeChild(IfD2);
                        MCLii2++;
                    }
                }
            }
            else{
            id2 = document.getElementsByClassName("image-item")[MCLii].firstChild.getAttribute("href");
            id2 = id2.split("=")[2];
            var id3 = "/member_illust.php?mode=medium&illust_id=" + id2;
                CheckBookMark("image-item",id2,MCLii);
            }
            MCLii++;
        }
        
    /*}*/
    if(S[0] === 0){ S[0]++; }
}

var MCLa2 = document.getElementsByClassName("ranking-item").length - 1 ;

function AddClass2(){
    var MCLii = 0;
    var id2;
    if( MCLa2 != document.getElementsByClassName("ranking-item").length - 1 || S[1] ===0 ){
        MCLa2 = document.getElementsByClassName("ranking-item").length - 1;
        while( MCLii < MCLa2 ){
            if( document.getElementsByClassName("bookmark-count __ui-tooltip")[MCLii] )
            {
            
            }
            else{
            id2 = document.getElementsByClassName("ranking-item")[MCLii].getElementsByClassName("ranking-image-item")[0].getAttribute("id");
            id2 = id2.split("i")[1];
                //var id3 = "/member_illust.php?mode=medium&illust_id="+id2;
                CheckBookMark("ranking-item",id2,MCLii);
             //addElementA("ranking-item",id2,MCLii);
            }
            MCLii++;
        }
    }
    if(S[1] === 0){ S[1]++; }
}


function CheckBookMark(Class,id,MCLi)
{
    var xmlhttp;
    var x;
    var idUrl = "/member_illust.php?mode=medium&illust_id=" + id;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            x=xmlhttp.responseText;
            if( x.indexOf("add-bookmark") > -1 ) addElementA(Class,id,MCLi,0);
            else addElementA(Class,id,MCLi,1);
        }
    };
    xmlhttp.open("GET",idUrl,true);
    xmlhttp.send();
}

function CheckChange(){
    if( IfAdd == 1 ) {
        if( MCLa == document.getElementsByClassName("image-item").length ){
            IfAdd = IfAdd++;
            AddClass();
        }
        else{
            MCLa = document.getElementsByClassName("image-item").length;
            IfAdd = IfAdd++;
        }
    }
    else {
        MCLa = document.getElementsByClassName("image-item").length;
        IfAdd = 1;
    }
}


//if(window.location.pathname == "member_illust.php")
//var t5 = window.setInterval(AddClass,1000); 
var t5 = window.setInterval(CheckChange,1000); 
var t6 = window.setInterval(AddClass2,1000); 
var t1 = window.setInterval(GETClass2,1000); 
//var t4 = window.setInterval(GETClass4,1000); 
长期地址
遇到问题?请前往 GitHub 提 Issues。