Poipiku Remark

给 poipiku 作品和用户添加备注,支持分组。

当前为 2021-03-26 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Poipiku Remark
// @namespace    https://greasyfork.org/zh-CN/users/8659-fc4soda
// @version      20210325
// @description  给 poipiku 作品和用户添加备注,支持分组。
// @author       fc4soda
// @match        https://poipiku.com/*
// @grant               GM_info
// @grant               GM.info
// @grant               GM.getValue
// @grant               GM.setValue
// @grant               GM.deleteValue
// @grant               GM.listValues
// @grant               GM.openInTab
// ==/UserScript==

// TODO 手机上用户页没显示编辑框
// TODO: 自动填写密码

/* jshint esversion: 6 */

const addonName = '8659-pr-';
const ICON = {};
const PAGE_TYPE = {
    'USER1': 'USER1', // https://poipiku.com/928521/
    'WORK1': 'WORK1', // https://poipiku.com/IllustViewPcV.jsp?ID=928521&TD=3996609
    'WORK2': 'WORK2', // https://poipiku.com/928521/2382608.html
};

// id:用户id td:作品id
var itemClass = '.script-link', listClass='.script-list', editboxClass= addonName + 'editbox';
var workItemClass = 'IllustThumbImg', idSelector = 'data-'+addonName+'id', tdSelector = 'data-'+addonName+'td', workItemClass2='IllustItemThumb';

(function() {
    'use strict';
'use esversion: 6';

    // 判断不同页面使用不同选择器
    var url = window.location.href;
    var pageType = checkPage(url);
    switch(pageType) {
        case PAGE_TYPE.USER1:
            userPageFunc();
            break;
        case PAGE_TYPE.WORK1:
        case PAGE_TYPE.WORK2:
            var regex = /(\d+)/g;
            var idtd = url.match(regex);
            var id = idtd[0], td = idtd[1];
            workPageFunc(id, td);
            break;
        default:
    }
})();

function workPageFunc(id, td){
    var work = document.getElementsByClassName(workItemClass2);
    for(let item of work){
        var oldVal = GM.getValue(addonName+id+'-'+td);
        oldVal.then((val) => {
            if(val != null){
                console.log("getVal",val);
                var editbox = newEditbox(id, td);
                editbox.value = val;
                editbox.addEventListener("change", storeVal);
                item.parentElement.insertBefore(editbox, item.nextSibling);
            }
        });
    }
}

function userPageFunc(){
    var elements = document.getElementsByClassName(workItemClass);
    for(let item of elements){
        var href = item.href;
        if (href == null){
            continue;
        }

        let regex = /(\d+)/g;
        let idtd = href.match(regex);
        var oldVal = GM.getValue(addonName+idtd[0]+'-'+idtd[1]);
        oldVal.then((val) => {
            if(val != null){
                console.log("getVal",val);
                var editbox = newEditbox(idtd[0], idtd[1]);
                editbox.value = val;
                editbox.addEventListener("change", storeVal);
                item.parentElement.insertBefore(editbox, item.nextSibling);
            }
        });



    }
}

function newEditbox(id, td){
    let editbox = document.createElement("textarea");
        editbox.class = editboxClass;
        editbox.setAttribute(idSelector, id);
        editbox.setAttribute(tdSelector, td);
    return editbox
}


function storeVal(event){
    var element = event.target;
    if(element.class == editboxClass){
        var id = element.getAttribute(idSelector);
        var td = element.getAttribute(tdSelector);
        var val = element.value;
        console.log('set', id+'-'+td, val);
        if (val!=null){
            GM.setValue(addonName+id+'-'+td, val);
        }
    }
    //console.log("change", element);
}

// USER1 https://poipiku.com/928521/
// WORK1 https://poipiku.com/IllustViewPcV.jsp?ID=928521&TD=3996609
// WORK2 https://poipiku.com/928521/2382608.html
function checkPage(url){
    // TODO 修改WORK1的匹配方式
    // TODO 取id td并返回
    var arr = url.split('?');
    if(arr.length==2){
        return PAGE_TYPE.WORK1;
    }
    var regex = /poipiku\.com\/\d+\/\d+\.html/;
    if(regex.test(url)){
        return PAGE_TYPE.WORK2;
    }
    return PAGE_TYPE.USER1;
}