Greasy Fork

Greasy Fork is available in English.

花瓣画板归档

try to take over the world!

当前为 2018-11-28 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         花瓣画板归档
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       javanli
// @match        http://huaban.com/*
// @grant        none
// @run-at       document-start
// ==/UserScript==
// tiny-pinyin@https://github.com/creeperyang/pinyin
!function (N, A) { "object" == typeof exports && "object" == typeof module ? module.exports = A() : "function" == typeof define && define.amd ? define([], A) : "object" == typeof exports ? exports.Pinyin = A() : N.Pinyin = A() }(this, function () { return function (N) { function A(I) { if (t[I]) return t[I].exports; var U = t[I] = { i: I, l: !1, exports: {} }; return N[I].call(U.exports, U, U.exports, A), U.l = !0, U.exports } var t = {}; return A.m = N, A.c = t, A.i = function (N) { return N }, A.d = function (N, t, I) { A.o(N, t) || Object.defineProperty(N, t, { configurable: !1, enumerable: !0, get: I }) }, A.n = function (N) { var t = N && N.__esModule ? function () { return N.default } : function () { return N }; return A.d(t, "a", t), t }, A.o = function (N, A) { return Object.prototype.hasOwnProperty.call(N, A) }, A.p = "", A(A.s = 3) }([function (N, A, t) { "use strict"; function I(N) { N && ("function" == typeof N && (N = [N]), N.forEach && N.forEach(function (N) { "function" == typeof N && N(o) })) } function U(N) { return N || null === i ? ("object" === ("undefined" == typeof Intl ? "undefined" : n(Intl)) && Intl.Collator ? (f = new Intl.Collator(["zh-Hans-CN", "zh-CN"]), i = 1 === Intl.Collator.supportedLocalesOf(["zh-CN"]).length) : i = !1, i) : i } function e(N) { var A = o.UNIHANS, t = o.PINYINS, I = o.EXCEPTIONS, U = { source: N }; if (N in I) return U.type = E, U.target = I[N], U; var e = -1, r = void 0; if (N.charCodeAt(0) < 256) return U.type = H, U.target = N, U; if ((r = f.compare(N, G)) < 0) return U.type = u, U.target = N, U; if (0 === r) U.type = E, e = 0; else { if ((r = f.compare(N, O)) > 0) return U.type = u, U.target = N, U; 0 === r && (U.type = E, e = A.length - 1) } if (U.type = E, e < 0) for (var n = 0, i = A.length - 1; n <= i;) { e = ~~((n + i) / 2); var S = A[e]; if (0 === (r = f.compare(N, S))) break; r > 0 ? n = e + 1 : i = e - 1 } return r < 0 && e-- , U.target = t[e], U.target || (U.type = u, U.target = U.source), U } function r(N) { if ("string" != typeof N) throw new Error("argument should be string."); if (!U()) throw new Error("not support Intl or zh-CN language."); return N.split("").map(function (N) { return e(N) }) } var n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (N) { return typeof N } : function (N) { return N && "function" == typeof Symbol && N.constructor === Symbol && N !== Symbol.prototype ? "symbol" : typeof N }, o = t(2), G = "阿", O = "鿿", H = 1, E = 2, u = 3, i = null, f = void 0; N.exports = { isSupported: U, parse: r, patchDict: I, genToken: e, convertToPinyin: function (N, A, t) { return r(N).map(function (N) { return t && N.type === E ? N.target.toLowerCase() : N.target }).join(A || "") } } }, function (N, A, t) { "use strict"; A = N.exports = function (N) { N.EXCEPTIONS = { "嗲": "DIA", "碡": "ZHOU", "聒": "GUO", "炔": "QUE", "蚵": "KE", "砉": "HUA", "嬷": "MO", "蹊": "XI", "丬": "PAN", "霰": "XIAN", "豉": "CHI", "饧": "XING", "帧": "ZHEN", "芎": "XIONG", "谁": "SHUI", "钶": "KE" }, N.UNIHANS[91] = "伕", N.UNIHANS[347] = "仚", N.UNIHANS[393] = "诌", N.UNIHANS[39] = "婤", N.UNIHANS[50] = "腠", N.UNIHANS[369] = "攸", N.UNIHANS[123] = "乯", N.UNIHANS[171] = "刕", N.UNIHANS[102] = "佝", N.UNIHANS[126] = "犿", N.UNIHANS[176] = "列", N.UNIHANS[178] = "刢", N.UNIHANS[252] = "娝", N.UNIHANS[330] = "偸" }, A.shouldPatch = function (N) { return "function" == typeof N && ("FOU" === N("伕").target && "XIA" === N("仚").target && "ZHONG" === N("诌").target && "CHONG" === N("婤").target && "CONG" === N("腠").target && "YONG" === N("攸").target && "HOU" === N("乯").target && "LENG" === N("刕").target && "GONG" === N("佝").target && "HUAI" === N("犿").target && "LIAO" === N("列").target && "LIN" === N("刢").target && "E" === N("钶").target) } }, function (N, A, t) { "use strict"; var I = ["阿", "哎", "安", "肮", "凹", "八", "挀", "扳", "邦", "勹", "陂", "奔", "伻", "屄", "边", "灬", "憋", "汃", "冫", "癶", "峬", "嚓", "偲", "参", "仓", "撡", "冊", "嵾", "曽", "叉", "芆", "辿", "伥", "抄", "车", "抻", "阷", "吃", "充", "抽", "出", "欻", "揣", "巛", "刅", "吹", "旾", "逴", "呲", "匆", "凑", "粗", "汆", "崔", "邨", "搓", "咑", "呆", "丹", "当", "刀", "嘚", "扥", "灯", "氐", "甸", "刁", "爹", "丁", "丟", "东", "吺", "厾", "耑", "垖", "吨", "多", "妸", "诶", "奀", "鞥", "儿", "发", "帆", "匚", "飞", "分", "丰", "覅", "仏", "紑", "夫", "旮", "侅", "甘", "冈", "皋", "戈", "给", "根", "刯", "工", "勾", "估", "瓜", "乖", "关", "光", "归", "丨", "呙", "哈", "咍", "佄", "夯", "茠", "诃", "黒", "拫", "亨", "噷", "叿", "齁", "乎", "花", "怀", "欢", "巟", "灰", "昏", "吙", "丌", "加", "戋", "江", "艽", "阶", "巾", "坕", "冂", "丩", "凥", "姢", "噘", "军", "咔", "开", "刊", "忼", "尻", "匼", "肎", "劥", "空", "抠", "扝", "夸", "蒯", "宽", "匡", "亏", "坤", "扩", "垃", "来", "兰", "啷", "捞", "肋", "勒", "崚", "哩", "俩", "奁", "良", "撩", "毟", "拎", "伶", "溜", "囖", "龙", "瞜", "噜", "驴", "娈", "掠", "抡", "罗", "呣", "妈", "埋", "嫚", "牤", "猫", "么", "呅", "门", "甿", "咪", "宀", "喵", "乜", "民", "名", "谬", "摸", "哞", "毪", "嗯", "拏", "腉", "囡", "囔", "孬", "疒", "娞", "恁", "能", "妮", "拈", "娘", "鸟", "捏", "囜", "宁", "妞", "农", "羺", "奴", "女", "奻", "疟", "黁", "挪", "喔", "讴", "妑", "拍", "眅", "乓", "抛", "呸", "喷", "匉", "丕", "囨", "剽", "氕", "姘", "乒", "钋", "剖", "仆", "七", "掐", "千", "呛", "悄", "癿", "亲", "靑", "卭", "丘", "区", "峑", "缺", "夋", "呥", "穣", "娆", "惹", "人", "扔", "日", "茸", "厹", "邚", "挼", "堧", "婑", "瞤", "捼", "仨", "毢", "三", "桒", "掻", "閪", "森", "僧", "杀", "筛", "山", "伤", "弰", "奢", "申", "升", "尸", "収", "书", "刷", "衰", "闩", "双", "脽", "吮", "说", "厶", "忪", "捜", "苏", "狻", "夊", "孙", "唆", "他", "囼", "坍", "汤", "夲", "忑", "熥", "剔", "天", "旫", "帖", "厅", "囲", "偷", "凸", "湍", "推", "吞", "乇", "穵", "歪", "弯", "尣", "危", "昷", "翁", "挝", "乌", "夕", "虲", "仙", "乡", "灱", "些", "心", "星", "凶", "休", "吁", "吅", "削", "坃", "丫", "恹", "央", "幺", "倻", "一", "囙", "应", "哟", "佣", "优", "扜", "囦", "曰", "晕", "帀", "災", "兂", "匨", "傮", "则", "贼", "怎", "増", "扎", "捚", "沾", "张", "佋", "蜇", "贞", "争", "之", "中", "州", "朱", "抓", "拽", "专", "妆", "隹", "宒", "卓", "乲", "宗", "邹", "租", "钻", "厜", "尊", "昨", "兙"], U = ["A", "AI", "AN", "ANG", "AO", "BA", "BAI", "BAN", "BANG", "BAO", "BEI", "BEN", "BENG", "BI", "BIAN", "BIAO", "BIE", "BIN", "BING", "BO", "BU", "CA", "CAI", "CAN", "CANG", "CAO", "CE", "CEN", "CENG", "CHA", "CHAI", "CHAN", "CHANG", "CHAO", "CHE", "CHEN", "CHENG", "CHI", "CHONG", "CHOU", "CHU", "CHUA", "CHUAI", "CHUAN", "CHUANG", "CHUI", "CHUN", "CHUO", "CI", "CONG", "COU", "CU", "CUAN", "CUI", "CUN", "CUO", "DA", "DAI", "DAN", "DANG", "DAO", "DE", "DEN", "DENG", "DI", "DIAN", "DIAO", "DIE", "DING", "DIU", "DONG", "DOU", "DU", "DUAN", "DUI", "DUN", "DUO", "E", "EI", "EN", "ENG", "ER", "FA", "FAN", "FANG", "FEI", "FEN", "FENG", "FIAO", "FO", "FOU", "FU", "GA", "GAI", "GAN", "GANG", "GAO", "GE", "GEI", "GEN", "GENG", "GONG", "GOU", "GU", "GUA", "GUAI", "GUAN", "GUANG", "GUI", "GUN", "GUO", "HA", "HAI", "HAN", "HANG", "HAO", "HE", "HEI", "HEN", "HENG", "HM", "HONG", "HOU", "HU", "HUA", "HUAI", "HUAN", "HUANG", "HUI", "HUN", "HUO", "JI", "JIA", "JIAN", "JIANG", "JIAO", "JIE", "JIN", "JING", "JIONG", "JIU", "JU", "JUAN", "JUE", "JUN", "KA", "KAI", "KAN", "KANG", "KAO", "KE", "KEN", "KENG", "KONG", "KOU", "KU", "KUA", "KUAI", "KUAN", "KUANG", "KUI", "KUN", "KUO", "LA", "LAI", "LAN", "LANG", "LAO", "LE", "LEI", "LENG", "LI", "LIA", "LIAN", "LIANG", "LIAO", "LIE", "LIN", "LING", "LIU", "LO", "LONG", "LOU", "LU", "LV", "LUAN", "LVE", "LUN", "LUO", "M", "MA", "MAI", "MAN", "MANG", "MAO", "ME", "MEI", "MEN", "MENG", "MI", "MIAN", "MIAO", "MIE", "MIN", "MING", "MIU", "MO", "MOU", "MU", "N", "NA", "NAI", "NAN", "NANG", "NAO", "NE", "NEI", "NEN", "NENG", "NI", "NIAN", "NIANG", "NIAO", "NIE", "NIN", "NING", "NIU", "NONG", "NOU", "NU", "NV", "NUAN", "NVE", "NUN", "NUO", "O", "OU", "PA", "PAI", "PAN", "PANG", "PAO", "PEI", "PEN", "PENG", "PI", "PIAN", "PIAO", "PIE", "PIN", "PING", "PO", "POU", "PU", "QI", "QIA", "QIAN", "QIANG", "QIAO", "QIE", "QIN", "QING", "QIONG", "QIU", "QU", "QUAN", "QUE", "QUN", "RAN", "RANG", "RAO", "RE", "REN", "RENG", "RI", "RONG", "ROU", "RU", "RUA", "RUAN", "RUI", "RUN", "RUO", "SA", "SAI", "SAN", "SANG", "SAO", "SE", "SEN", "SENG", "SHA", "SHAI", "SHAN", "SHANG", "SHAO", "SHE", "SHEN", "SHENG", "SHI", "SHOU", "SHU", "SHUA", "SHUAI", "SHUAN", "SHUANG", "SHUI", "SHUN", "SHUO", "SI", "SONG", "SOU", "SU", "SUAN", "SUI", "SUN", "SUO", "TA", "TAI", "TAN", "TANG", "TAO", "TE", "TENG", "TI", "TIAN", "TIAO", "TIE", "TING", "TONG", "TOU", "TU", "TUAN", "TUI", "TUN", "TUO", "WA", "WAI", "WAN", "WANG", "WEI", "WEN", "WENG", "WO", "WU", "XI", "XIA", "XIAN", "XIANG", "XIAO", "XIE", "XIN", "XING", "XIONG", "XIU", "XU", "XUAN", "XUE", "XUN", "YA", "YAN", "YANG", "YAO", "YE", "YI", "YIN", "YING", "YO", "YONG", "YOU", "YU", "YUAN", "YUE", "YUN", "ZA", "ZAI", "ZAN", "ZANG", "ZAO", "ZE", "ZEI", "ZEN", "ZENG", "ZHA", "ZHAI", "ZHAN", "ZHANG", "ZHAO", "ZHE", "ZHEN", "ZHENG", "ZHI", "ZHONG", "ZHOU", "ZHU", "ZHUA", "ZHUAI", "ZHUAN", "ZHUANG", "ZHUI", "ZHUN", "ZHUO", "ZI", "ZONG", "ZOU", "ZU", "ZUAN", "ZUI", "ZUN", "ZUO", ""], e = { "曾": "ZENG", "沈": "SHEN", "嗲": "DIA", "碡": "ZHOU", "聒": "GUO", "炔": "QUE", "蚵": "KE", "砉": "HUA", "嬤": "MO", "嬷": "MO", "蹒": "PAN", "蹊": "XI", "丬": "PAN", "霰": "XIAN", "莘": "XIN", "豉": "CHI", "饧": "XING", "筠": "JUN", "长": "CHANG", "帧": "ZHEN", "峙": "SHI", "郍": "NA", "芎": "XIONG", "谁": "SHUI" }; N.exports = { PINYINS: U, UNIHANS: I, EXCEPTIONS: e } }, function (N, A, t) { "use strict"; var I = t(0), U = t(1); I.isSupported() && U.shouldPatch(I.genToken) && I.patchDict(U), N.exports = I }]) });

// get request
function httpGetAsync(theUrl, callback) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function () {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous
    xmlHttp.setRequestHeader("X-Request", 'JSON');
    xmlHttp.setRequestHeader("X-Requested-With", 'XMLHttpRequest');
    xmlHttp.setRequestHeader("Accept", 'application/json');
    xmlHttp.send(null);
}
function strcomp(strA, strB) {
    return strA.toLowerCase().localeCompare(strB.toLowerCase());
}
function boardComp(boardA,boardB){
    let strA = boardA.title;
    let strB = boardB.title;
    return strcomp(strA,strB)
}
function getBoardHtml(board){
    let pins = board.pins;
    let placeholderStyle = '';
    if(pins.length > 0){
        placeholderStyle = 'style="background-image: url(http://img.hb.aicdn.com/'+ pins[0].file.key +');"'
    }
    return '<div class="archived-board" onclick="window.location=\'/boards/'+ board.board_id +'/\';">\
        <div class="ab-pin-placeholder" '+ placeholderStyle +'></div>\
            <div class="ab-pin-title">'+ board.title +'</div>\
            <div class="ab-pin-count">'+ board.pin_count +'</div>\
    </div>'
}
function getBoardsHTML(boards){
    let html = ''
    for(let board of boards){
        html += getBoardHtml(board)
    }
    return html
}
function genHTML(keyList,map){
    // let html = '<div onclick="app.requireLogin(function() {app.showDialogBox(\'create_board\');});" class="wfc add-board"><div class="inner"><i></i><span>创建画板</span></div></div>'
    let html = ''
    for(let key of keyList){
        html += '</br><h1 class="key-'+key+'">'+key+'</h1></br>'
        let boards = map[key]
        html += getBoardsHTML(boards)
    }
    html = '<div id="archived-boards">' + html + '</div>'
    return html
}
(function() {
    'use strict';
    document.addEventListener('keydown', function(event) {
        if(event.ctrlKey || event.shiftKey || event.altKey){
            return
        }
        let dom = document.querySelector('.key-'+event.key);
        if(dom){
            let top = dom.getBoundingClientRect().top+(window.pageYOffset||document.documentElement.scrollTop)-(document.documentElement.clientTop||0);
            console.log(event.key,dom,top)
            window.scrollTo(0,top - 80)
            event.preventDefault()
            return false
        }

    });
    document.addEventListener('DOMContentLoaded', function(){
        if(window.Cookie.read('uid') != window.app.page.user.user_id){
            return
        }
        let url = window.app.page.$url + '?' + String.uniqueID() + '&limit=100&wfl=1'
        httpGetAsync(url, (data) => {
            // handle boards data
            let parsed = JSON.parse(data)
            let boards = parsed.user.boards;
            let map = {}
            let keyList = []
            for(let board of boards){
                let title = board.title;
                board.sortFlag = '_'
                if(title.length > 0){
                    let parsed = Pinyin.parse(title[0])
                    if(parsed.length > 0 && parsed[0].target){
                        board.sortFlag = Pinyin.parse(title[0])[0].target[0].toLowerCase()
                    }
                }
                let key = board.sortFlag
                if(map[key]){
                    map[key].push(board)
                }
                else{
                    map[key] = [board]
                    keyList.push(key)
                }
            }
            keyList.sort(strcomp)
            for(let key of keyList){
                let boards = map[key]
                boards.sort(boardComp)
            }
            document.querySelector('#user_page .wrapper').innerHTML += genHTML(keyList,map)
        })
        var css = document.createElement("style");
            css.type = "text/css";
            css.innerHTML = `
#user_page #waterfall {
display:none;
}
#user_page .loading {
    visibility: hidden;
    height: 0;
    width: 0;
padding: 0;
    border: 0;
    margin: 0;
}
#archived-boards {
position: relative;
min-height: 500px;
margin: 16px auto 0;
}
.archived-board {
width: 300px;
height: 100px;
display: inline-block;
background-color: white;
border-radius: 8px;
vertical-align:top;
    line-height: 100px;
    margin: 10px 35px;
}
.ab-pin-placeholder {
    width: 100px;
    height: 100px;
display: inline-block;
vertical-align:top;
    background-size: cover;
    background-repeat: no-repeat;
    background-position: 50% 50%;
}
.ab-pin-title {
    font-size: 16px;
    font-weight:bold;
    display: inline-block;
vertical-align:top;
}
.ab-pin-count {
    font-size: 16px;
    display: inline-block;
vertical-align:top;
}
`
            document.body.appendChild(css);
    },false);
})();