Poipiku Remark

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

目前為 2021-03-26 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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;
}