Greasy Fork

Greasy Fork is available in English.

Pixiv 一键收藏

One-click fav on Pixiv

当前为 2018-02-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name              Pixiv quick fav
// @name:zh-CN        Pixiv 一键收藏
// @namespace         https://twitter.com/ikenaikoto
// @version           0.2
// @description       One-click fav on Pixiv
// @description:zh-cn Pixiv 一键收藏,避免烦人的页面跳转
// @author            fireattack
// @match             *://www.pixiv.net/member_illust.php?mode=medium&illust_id=*
// ==/UserScript==

function urlencodeFormData(fd) { //From: https://stackoverflow.com/questions/7542586/new-formdata-application-x-www-form-urlencoded
    var s = '';

    function encode(s) {
        return encodeURIComponent(s).replace(/%20/g, '+');
    }
    for (var pair of fd.entries()) {
        if (typeof pair[1] == 'string') {
            s += (s ? '&' : '') + encode(pair[0]) + '=' + encode(pair[1]);
        }
    }
    return s;
}

var favBtn = document.querySelector('.bookmark-container');
if (!favBtn.querySelector('a:last-child').className.includes('bookmarked')){
    
    var sucess, loading, done;    
    
    switch (favBtn.querySelector('span:last-child').textContent) {
      case '添加收藏':  //Chinese
        success = '成功!';
        loading = '收藏中...';
        done = '编辑收藏';
        break;
      case 'ブックマークに追加':  //Japanese
        success = '完成!';
        loading = '読み込み中...';
        done = 'ブックマークを編集';
        break;
      default:
        success = 'Done!';
        loading = 'Bookmarking..';
        done = 'Edit Bookmark';
    }
    
    favBtn.onclick = (event) => {
        var data = new FormData();
        data.append('mode', 'save_illust_bookmark');
        data.append('illust_id', pixiv.context.illustId);
        data.append('restrict', '0');
        data.append('comment', '');
        data.append('tags', '');
        data.append('tt', pixiv.context.token);
        data = urlencodeFormData(data);

        var xhr = new XMLHttpRequest();
        xhr.open('POST', '/rpc/index.php', true);
        xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
        xhr.onload = () => {
            var jsonResponse = JSON.parse(xhr.responseText);
            if (jsonResponse.error)
                window.alert('Error!');
            else favBtn.querySelector('span:last-child').textContent = success;
            setTimeout(() => {
                favBtn.querySelector('a').className = '_bookmark-toggle-button bookmarked edit-bookmark';
                favBtn.querySelector('span:last-child').textContent = done;
                favBtn.onclick = null;
            }, 1000);
        };

        xhr.send(data);

        favBtn.querySelector('span:last-child').textContent = loading;
        event.preventDefault();
    };    
}