Greasy Fork is available in English.

dblp.org CCF等级标注

学术会议、学术期刊 CCF等级标注

// ==UserScript==
// @name        dblp.org CCF等级标注
// @namespace   https://github.com/symant233/PublicTools
// @icon        https://dblp.uni-trier.de/img/favicon.ico
// @match       https://dblp.uni-trier.de/*
// @match       https://dblp.org/*
// @match       https://dblp.dagstuhl.de/*
// @grant       GM_addStyle
// @run-at      document-end
// @version     2.1.6
// @author      symant233
// @description 学术会议、学术期刊 CCF等级标注
// @homepageURL https://github.com/symant233/PublicTools
// @supportURL  https://github.com/symant233/PublicTools/issues
// @license     GPL-3.0
// ==/UserScript==
;(function() {
    'use strict';
    console.log('CCF等级标注已载入...');
    const COLORS = ['mistyrose', 'oldlace', 'honeydew']; // ABC
    if (localStorage.getItem('showOthers') === null) localStorage.setItem('showOthers', 'true');
    let showOthers = localStorage.getItem('showOthers') === 'false' ? false : true; // 是否显示非CCF的论文 默认显示
    // 学术会议开始
    const CCFA = [
        "conf/cscw/",
        "conf/chi/",
        "conf/sigmod/",
        "conf/kdd/",
        "conf/icde/",
        "conf/sigir/",
        "conf/vldb/",
        "conf/ppopp/",
        "conf/fast/",
        "conf/dac/",
        "conf/hpca/",
        "conf/micro/",
        "conf/sc/",
        "conf/asplos/",
        "conf/isca/",
        "conf/usenix/",
        "conf/sigcomm/",
        "conf/mobicom/",
        "conf/infocom/",
        "conf/nsdi/",
        "conf/ccs/",
        "conf/eurocrypt/",
        "conf/sp/",
        "conf/crypto/",
        "conf/uss/",
        "conf/pldi/",
        "conf/popl/",
        "conf/sigsoft/",
        "conf/sosp/",
        "conf/oopsla/",
        "conf/kbse/",
        "conf/icse/",
        "conf/issta/",
        "conf/osdi/",
        "conf/pldi/",
        "conf/popl/",
        "conf/sigsoft/",
        "conf/sosp/",
        "conf/oopsla/",
        "conf/kbse/",
        "conf/icse/",
        "conf/issta/",
        "conf/osdi/",
        "conf/stoc/",
        "conf/soda/",
        "conf/cav/",
        "conf/focs/",
        "conf/lics/",
        "conf/mm/",
        "conf/siggraph/",
        "conf/vr/",
        "conf/visualization/",
        "conf/aaai/",
        "conf/nips/",
        "conf/acl/",
        "conf/cvpr/",
        "conf/iccv/",
        "conf/icml/",
        "conf/ijcai/",
        "conf/aaai/",
        "conf/nips/",
        "conf/acl/",
        "conf/cvpr/",
        "conf/iccv/",
        "conf/icml/",
        "conf/ijcai/",
        "conf/www/",
        "conf/rtss/"
    ];
    const CCFB = [
        "conf/cikm/",
        "conf/wsdm/",
        "conf/pods/",
        "conf/dasfaa/",
        "conf/ecml/",
        "conf/pkdd/",
        "conf/semweb/",
        "conf/icdm/",
        "conf/icdt/",
        "conf/edbt/",
        "conf/cidr/",
        "conf/sdm/",
        "conf/cloud/",
        "conf/spaa/",
        "conf/podc/",
        "conf/fpga/",
        "conf/cgo/",
        "conf/date/",
        "conf/eurosys/",
        "conf/cluster/",
        "conf/iccd/",
        "conf/iccad/",
        "conf/icdcs/",
        "conf/codes/",
        "conf/hipeac/",
        "conf/sigmetrics/",
        "conf/IEEEpact/",
        "conf/icpp/",
        "conf/ics/",
        "conf/vee/",
        "conf/ipps/",
        "conf/performance/",
        "conf/hpdc/",
        "conf/itc/",
        "conf/lisa/",
        "conf/mss/",
        "conf/rtas/",
        "conf/sensys/",
        "conf/conext/",
        "conf/secon/",
        "conf/ipsn/",
        "conf/mobisys/",
        "conf/icnp/",
        "conf/mobihoc/",
        "conf/nossdav/",
        "conf/iwqos/",
        "conf/imc/",
        "conf/acsac/",
        "conf/asiacrypt/",
        "conf/esorics/",
        "conf/fse/",
        "conf/csfw/",
        "conf/srds/",
        "conf/ches/",
        "conf/dsn/",
        "conf/raid/",
        "conf/pkc/",
        "conf/ndss/",
        "conf/tcc/",
        "conf/ecoop/",
        "conf/etaps/",
        "conf/iwpc/",
        "conf/re/",
        "conf/caise/",
        "conf/icfp/",
        "conf/lctrts/",
        "conf/models/",
        "conf/cp/",
        "conf/icsoc/",
        "conf/wcre/",
        "conf/icsm/",
        "conf/vmcai/",
        "conf/icws/",
        "conf/middleware/",
        "conf/sas/",
        "conf/esem/",
        "conf/fm/",
        "conf/issre/",
        "conf/hotos/",
        "conf/ecoop/",
        "conf/etaps/",
        "conf/iwpc/",
        "conf/re/",
        "conf/caise/",
        "conf/icfp/",
        "conf/lctrts/",
        "conf/models/",
        "conf/cp/",
        "conf/icsoc/",
        "conf/wcre/",
        "conf/icsm/",
        "conf/vmcai/",
        "conf/icws/",
        "conf/middleware/",
        "conf/sas/",
        "conf/esem/",
        "conf/fm/",
        "conf/issre/",
        "conf/hotos/",
        "conf/compgeom/",
        "conf/esa/",
        "conf/coco/",
        "conf/icalp/",
        "conf/cade/",
        "conf/concur/",
        "conf/hybrid/",
        "conf/sat/",
        "conf/mir/",
        "conf/si3d/",
        "conf/sca/",
        "conf/dcc/",
        "conf/eurographics/",
        "conf/vissym/",
        "conf/sgp/",
        "conf/rt/",
        "conf/icassp/",
        "conf/icmcs/",
        "conf/ismar/",
        "conf/pg/",
        "conf/sma/",
        "conf/colt/",
        "conf/emnlp/",
        "conf/ecai/",
        "conf/eccv/",
        "conf/icra/",
        "conf/aips/",
        "conf/iccbr/",
        "conf/coling/",
        "conf/kr/",
        "conf/uai/",
        "conf/atal/",
        "conf/ppsn/",
        "conf/group/",
        "conf/iui/",
        "conf/tabletop/",
        "conf/uist/",
        "conf/ecscw/",
        "conf/percom/",
        "conf/mhci/",
        "conf/cogsci/",
        "conf/bibm/",
        "conf/emsoft/",
        "conf/recomb/",
        "conf/par/"
    ];
    const CCFC = [
        "conf/ACMdis/",
        "conf/assets/",
        "conf/conll/",
        "conf/cf/",
        "conf/nocs/",
        "conf/asap/",
        "conf/aspdac/",
        "conf/systor/",
        "conf/europar/",
        "conf/ets/",
        "conf/fpl/",
        "conf/fccm/",
        "conf/glvlsi/",
        "conf/ats/",
        "conf/hpcc/",
        "conf/hipc/",
        "conf/mascots/",
        "conf/ispa/",
        "conf/ccgrid/",
        "conf/npc/",
        "conf/ica3pp/",
        "conf/cases/",
        "conf/fpt/",
        "conf/icpads/",
        "conf/iscas/",
        "conf/islped/",
        "conf/ispd/",
        "conf/hoti/",
        "conf/vts/",
        "conf/ancs/",
        "conf/apnoms/",
        "conf/forte/",
        "conf/lcn/",
        "conf/globecom/",
        "conf/icc/",
        "conf/icccn/",
        "conf/mass/",
        "conf/p2p/",
        "conf/ipccc/",
        "conf/wowmom/",
        "conf/iscc/",
        "conf/wcnc/",
        "conf/networking/",
        "conf/im/",
        "conf/msn/",
        "conf/mswim/",
        "conf/wasa/",
        "conf/hotnets/",
        "conf/wisec/",
        "conf/sacmat/",
        "conf/drm/",
        "conf/ih/",
        "conf/acns/",
        "conf/ccs/",
        "conf/acisp/",
        "conf/ctrsa/",
        "conf/dimva/",
        "conf/dfrws/",
        "conf/fc/",
        "conf/trustcom/",
        "conf/sec/",
        "conf/securecomm/",
        "conf/isw/",
        "conf/icdf2c/",
        "conf/icics/",
        "conf/nspw/",
        "conf/pam/",
        "conf/pet/",
        "conf/sacrypt/",
        "conf/soups/",
        "conf/pepm/",
        "conf/paste/",
        "conf/aplas/",
        "conf/apsec/",
        "conf/ease/",
        "conf/iceccs/",
        "conf/icst/",
        "conf/ispass/",
        "conf/scam/",
        "conf/compsac/",
        "conf/icfem/",
        "conf/tools/",
        "conf/qsic/",
        "conf/IEEEscc/",
        "conf/ispw/",
        "conf/seke/",
        "conf/icsr/",
        "conf/icwe/",
        "conf/spin/",
        "conf/atva/",
        "conf/lopstr/",
        "conf/tase/",
        "conf/msr/",
        "conf/refsq/",
        "conf/wicsa/",
        "conf/apweb/",
        "conf/dexa/",
        "conf/ecir/",
        "conf/esws/",
        "conf/webdb/",
        "conf/er/",
        "conf/mdm/",
        "conf/ssdbm/",
        "conf/waim/",
        "conf/ssd/",
        "conf/pakdd/",
        "conf/wise/",
        "conf/csl/",
        "conf/fmcad/",
        "conf/fsttcs/",
        "conf/dsaa/",
        "conf/ictac/",
        "conf/ipco/",
        "conf/rta/",
        "conf/isaac/",
        "conf/mfcs/",
        "conf/stacs/",
        "conf/vrst/",
        "conf/ca/",
        "conf/cgi/",
        "conf/interspeech/",
        "conf/gmp/",
        "conf/apvis/",
        "conf/3dim/",
        "conf/cadgraphics/",
        "conf/icip/",
        "conf/mmm/",
        "conf/pcm/",
        "conf/smi/",
        "conf/aistats/",
        "conf/accv/",
        "conf/acml/",
        "conf/bmvc/",
        "conf/nlpcc/",
        "conf/gecco/",
        "conf/ictai/",
        "conf/iros/",
        "conf/alt/",
        "conf/icann/",
        "conf/fgr/",
        "conf/icdar/",
        "conf/ilp/",
        "conf/ksem/",
        "conf/iconip/",
        "conf/icpr/",
        "conf/icb/",
        "conf/ijcnn/",
        "conf/pricai/",
        "conf/naacl/",
        "conf/icmi/",
        "conf/graphicsinterface/",
        "conf/uic/",
        "conf/haptics/",
        "conf/interact/",
        "conf/acmidc/",
        "conf/cscwd/",
        "conf/coopis/",
        "conf/mobiquitous/",
        "conf/avi/",
        "conf/amia/",
        "conf/apbc/",
        "conf/bigdataconf/",
        "conf/IEEEcloud/",
        "conf/smc/",
        "conf/cosit/",
        "conf/isbra/"
    ];
    // 学术期刊开始
    const JCCFA = [
        "journals/tocs/",
        "journals/tos/",
        "journals/tcad/",
        "journals/tc/",
        "journals/tpds/",
        "journals/jsac/",
        "journals/tmc/",
        "journals/ton/",
        "journals/tdsc/",
        "journals/tifs/",
        "journals/joc/",
        "journals/toplas/",
        "journals/tosem/",
        "journals/tse/",
        "journals/tods/",
        "journals/tois/",
        "journals/tkde/",
        "journals/vldb/",
        "journals/tit/",
        "journals/iandc/",
        "journals/siamcomp/",
        "journals/tog/",
        "journals/tip/",
        "journals/tvcg/",
        "journals/ai/",
        "journals/pami/",
        "journals/ijcv/",
        "journals/jmlr/",
        "journals/jacm/",
        "journals/pieee/"
    ];
    const JCCFB = [
        "journals/taco/",
        "journals/taas/",
        "journals/todaes/",
        "journals/tecs/",
        "journals/trets/",
        "journals/tvlsi/",
        "journals/jpdc/",
        "journals/jsa/",
        "journals/toit/",
        "journals/tomccap/",
        "journals/tosn/",
        "journals/cn/",
        "journals/tcom/",
        "journals/twc/",
        "journals/tissec/",
        "journals/compsec/",
        "journals/dcc/",
        "journals/jcs/",
        "journals/ase/",
        "journals/ese/",
        "journals/tsc/",
        "journals/iet-sen/",
        "journals/infsof/",
        "journals/jfp/",
        "journals/smr/",
        "journals/jss/",
        "journals/re/",
        "journals/scp/",
        "journals/sosym/",
        "journals/stvr/",
        "journals/spe/",
        "journals/tkdd/",
        "journals/tweb/",
        "journals/aei/",
        "journals/dke/",
        "journals/datamine/",
        "journals/ejis/",
        "journals/geoinformatica/",
        "journals/ipm/",
        "journals/isci/",
        "journals/is/",
        "journals/jasis/",
        "journals/ws/",
        "journals/kais/",
        "journals/talg/",
        "journals/tocl/",
        "journals/toms/",
        "journals/algorithmica/",
        "journals/cc/",
        "journals/fac/",
        "journals/fmsd/",
        "journals/informs/",
        "journals/jcss/",
        "journals/jgo/",
        "journals/jsc/",
        "journals/mscs/",
        "journals/tcs/",
        "journals/tomccap/",
        "journals/cagd/",
        "journals/cgf/",
        "journals/cad/",
        "journals/cvgip/",
        "journals/tcsv/",
        "journals/tmm/",
        "journals/siamis/",
        "journals/speech/",
        "journals/tap/",
        "journals/tslp/",
        "journals/aamas/",
        "journals/coling/",
        "journals/cviu/",
        "journals/dke/",
        "journals/ec/",
        "journals/taffco/",
        "journals/taslp/",
        "journals/tcyb/",
        "journals/tec/",
        "journals/tfs/",
        "journals/tnn/",
        "journals/ijar/",
        "journals/jair/",
        "journals/jar/",
        "journals/ml/",
        "journals/neco/",
        "journals/nn/",
        "journals/bioinformatics/",
        "journals/bib/",
        "journals/tase/",
        "journals/tgrs/",
        "journals/tits/",
        "journals/tmi/",
        "journals/trob/",
        "journals/tcbb/",
        "journals/jcst/",
        "journals/jamia/",
        "journals/ploscb/",
        "journals/chinaf/",
        "journals/cj/",
        "journals/wwwj/"
    ];
    const JCCFC = [
        "journals/iet-its/",
        "journals/jetc/",
        "journals/concurrency/",
        "journals/dc/",
        "journals/fgcs/",
        "journals/tcc/",
        "journals/integration/",
        "journals/grid/",
        "journals/mam/",
        "journals/rts/",
        "journals/tjs/",
        "journals/adhoc/",
        "journals/comcom/",
        "journals/tnsm/",
        "journals/iet-com/",
        "journals/jnca/",
        "journals/monet/",
        "journals/networks/",
        "journals/ppna/",
        "journals/wicomm/",
        "journals/winet/",
        "journals/ejisec/",
        "journals/iet-ifs/",
        "journals/imcs/",
        "journals/ijics/",
        "journals/ijisp/",
        "journals/istr/",
        "journals/scn/",
        "journals/cl/",
        "journals/ijseke/",
        "journals/sttt/",
        "journals/jlp/",
        "journals/jwe/",
        "journals/soca/",
        "journals/sqj/",
        "journals/tplp/",
        "journals/dpd/",
        "journals/iam/",
        "journals/ipl/",
        "journals/ir/",
        "journals/ijcis/",
        "journals/gis/",
        "journals/ijis/",
        "journals/ijkm/",
        "journals/ijswis/",
        "journals/jcis/",
        "journals/jdm/",
        "journals/jiis/",
        "journals/jsis/",
        "journals/acta/",
        "journals/apal/",
        "journals/dam/",
        "journals/fuin/",
        "journals/lisp/",
        "journals/ipl/",
        "journals/jc/",
        "journals/logcom/",
        "journals/jsyml/",
        "journals/lmcs/",
        "journals/siamdm/",
        "journals/mst/",
        "journals/comgeo/",
        "journals/cg/",
        "journals/dcg/",
        "journals/spl/",
        "journals/iet-ipr/",
        "journals/jvcir/",
        "journals/mms/",
        "journals/mta/",
        "journals/sigpro/",
        "journals/spic/",
        "journals/vc/",
        "journals/talip/",
        "journals/apin/",
        "journals/artmed/",
        "journals/alife/",
        "journals/ci/",
        "journals/csl/",
        "journals/connection/",
        "journals/dss/",
        "journals/eaai/",
        "journals/es/",
        "journals/eswa/",
        "journals/fss/",
        "journals/tciaig/",
        "journals/ivc/",
        "journals/ida/",
        "journals/ijcia/",
        "journals/ijis/",
        "journals/ijns/",
        "journals/ijprai/",
        "journals/ijufks/",
        "journals/ijdar/",
        "journals/jetai/",
        "journals/kbs/",
        "journals/mt/",
        "journals/mva/",
        "journals/nc/",
        "journals/nle/",
        "journals/nca/",
        "journals/npl/",
        "journals/ijon/",
        "journals/paa/",
        "journals/prl/",
        "journals/soco/",
        "journals/wias/",
        "journals/bmcbi/",
        "journals/cas/",
        "journals/fcsc/",
        "journals/lgrs/",
        "journals/titb/",
        "journals/tbd/",
        "journals/jbi/",
        "journals/mia/"
    ];
    const reg = /(conf|journals)\/.*\//i;
    // 遍历标记函数
    function tagging() {
        const nodes = document.querySelectorAll('.publ-list > li[class*="entry"]');
        nodes.forEach((n) => {
            if (!n.style.background || (!showOthers && n.style.display != "none") || (showOthers && n.style.display == "none")) { // 若已有背景颜色or不看其余论文且没被设为不显示,则不修改
                let s = reg.exec(n.id);
                if (s && s[0].startsWith('conf')) {
                    if (CCFA.indexOf(s[0]) !== -1) n.style.background = COLORS[0];
                    else if (CCFB.indexOf(s[0]) !== -1) n.style.background = COLORS[1];
                    else if (CCFC.indexOf(s[0]) !== -1) n.style.background = COLORS[2];
                    else {
                        n.style.background = "rgb(255 255 255 / 0%)";
                        if (!showOthers) {n.style.display = "none";}
                        else {n.style.display = "table";}
                    }
                } else if (s) { // starts with journals
                    if (JCCFA.indexOf(s[0]) !== -1) n.style.background = COLORS[0];
                    else if (JCCFB.indexOf(s[0]) !== -1) n.style.background = COLORS[1];
                    else if (JCCFC.indexOf(s[0]) !== -1) n.style.background = COLORS[2];
                    else {
                        n.style.background = "rgb(255 255 255 / 0%)";
                        if (!showOthers) {n.style.display = "none";}
                        else {n.style.display = "table";}
                    }
                }
                // 根据DOI一键跳转到sci-hub
                try{
                    let doi = n.getElementsByTagName('a')[0]
                    if (!doi.href.startsWith('https://sci')) {
                        doi.href = 'https://sci-hub.ru/' + doi.href.replace(/^.+doi\.org\//i,'');
                    }
                }catch(e){}
            }
        })
    }
    // 选择需要观察变动的节点
    const targetNode = document.querySelector('#main');
    const config = { attributes: false, childList: true, subtree: true };
    // 当观察到变动时执行的回调函数
    const callback = function(mutationsList, observer) {
        console.log('mutations length:', mutationsList.length);
        tagging();
    };
    tagging();
    // 创建一个观察器实例并传入回调函数
    const observer = new MutationObserver(callback);
    // 以上述配置开始观察目标节点
    observer.observe(targetNode, config);
    // 把图标背景换成透明的
    GM_addStyle(`
        .drop-down>.head {    
            background: rgba(0,0,0,0) !important;
            border: 2px rgba(0,0,0, 0) solid !important;
        }
        .display-none{
            display: block !important;
        }
    `);
    // head 中添加 <base target="_blank"> 默认新标签页打开链接
    const b = document.createElement('base');
    b.setAttribute('target', '_blank');
    document.querySelector('head').appendChild(b);
    // switch CCF display
    document.toogleCCF = function() {
        showOthers = !showOthers;
        localStorage.setItem('showOthers', showOthers);
        tagging();
    }
    $(`<div class="refine-by">
        <p><b>refined by CCF</b></p>
        <ul class="options">
            <li style="background-color:powderblue;"><button class="text" onclick="toogleCCF()">switch</button></li>
        </ul></div>
    `).prependTo("#completesearch-facets > div.hide-body");
})();