// ==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 // @downloadURL https://update.greasyfork.icu/scripts/435874/dblporg%20CCF%E7%AD%89%E7%BA%A7%E6%A0%87%E6%B3%A8.user.js // @updateURL https://update.greasyfork.icu/scripts/435874/dblporg%20CCF%E7%AD%89%E7%BA%A7%E6%A0%87%E6%B3%A8.meta.js // ==/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 中添加 默认新标签页打开链接 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(); } $(`

refined by CCF

`).prependTo("#completesearch-facets > div.hide-body"); })();