// ==UserScript== // @name dblp.uni-trier.de CCF等级标注 // @namespace https://github.com/symant233/PublicTools // @icon https://dblp.uni-trier.de/img/favicon.ico // @match https://dblp.uni-trier.de/* // @grant GM_addStyle // @run-at document-end // @version 1.0.3 // @author symant233 // @description 学术会议CCF等级标注(没做期刊的) // @homepageURL https://github.com/symant233/PublicTools // @supportURL https://github.com/symant233/PublicTools/issues // @license GPL-3.0 // @downloadURL none // ==/UserScript== ;(function() { 'use strict'; console.log('CCF等级标注已载入...'); const COLORS = ['mistyrose', 'oldlace', 'honeydew']; // ABC const CCFA = [ "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/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/" ]; const CCFC = [ "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/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 reg = /conf\/.*\//i; function tagging() { const nodes = document.querySelectorAll('.publ-list li[id^=conf]'); nodes.forEach((n) => { if (!n.style.background) { // 若已有背景颜色则不修改 let s = reg.exec(n.id); if (s) { 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%)"; } } }) } // 选择需要观察变动的节点 const targetNode = document.querySelector('.publ-list'); const config = { attributes: true, childList: true, subtree: true }; // 当观察到变动时执行的回调函数 const callback = function(mutationsList, observer) { console.log('mutations length:', mutationsList.length); tagging(); }; // 创建一个观察器实例并传入回调函数 const observer = new MutationObserver(callback); // 以上述配置开始观察目标节点 observer.observe(targetNode, config); // 把图标背景换成透明的 GM_addStyle(`.drop-down>.head { background: rgba(0,0,0,0); border: 2px rgba(0,0,0, 0) solid; }`); })();