Version in base suite: 1.46.0+dfsg-1 Base version: ublock-origin_1.46.0+dfsg-1 Target version: ublock-origin_1.62.0+dfsg-0+deb12u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/u/ublock-origin/ublock-origin_1.46.0+dfsg-1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/u/ublock-origin/ublock-origin_1.62.0+dfsg-0+deb12u1.dsc /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ad.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ae.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/af.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ag.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ai.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/al.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/am.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ao.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/aq.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ar.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/as.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/at.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/au.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/aw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ax.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/az.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ba.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bb.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bd.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/be.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bh.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bi.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bj.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bo.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bq.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/br.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bs.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bv.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/by.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/bz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ca.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cd.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ch.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ci.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ck.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/co.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cv.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cx.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cy.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/cz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/de.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/dj.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/dk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/dm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/do.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/dz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ec.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ee.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/eg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/eh.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/er.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/es.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/et.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/fi.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/fj.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/fk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/fm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/fo.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/fr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ga.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gb-eng.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gb-nir.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gb-sct.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gb-wls.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gb.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gd.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ge.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gh.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gi.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gp.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gq.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gs.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/gy.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/hk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/hm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/hn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/hr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ht.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/hu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/id.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ie.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/il.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/im.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/in.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/io.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/iq.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ir.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/is.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/it.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/je.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/jm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/jo.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/jp.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ke.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kh.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ki.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/km.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kp.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ky.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/kz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/la.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lb.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/li.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ls.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/lv.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ly.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ma.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/md.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/me.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mh.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ml.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mo.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mp.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mq.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ms.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mv.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mx.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/my.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/mz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/na.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/nc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ne.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/nf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ng.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ni.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/nl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/no.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/np.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/nr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/nu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/nz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/om.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pa.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pe.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ph.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ps.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/pw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/py.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/qa.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/re.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ro.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/rs.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ru.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/rw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sa.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sb.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sd.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/se.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sh.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/si.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sj.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/so.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ss.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/st.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sv.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sx.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sy.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/sz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/td.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/th.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tj.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tl.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/to.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tr.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tv.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/tz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ua.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ug.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/um.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/us.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/uy.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/uz.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/va.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/vc.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ve.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/vg.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/vi.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/vn.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/vu.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/wf.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ws.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/xk.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/ye.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/yt.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/za.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/zm.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/zw.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/icon_16-loading.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/icon_32-loading.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/icon_64-loading.png |binary /srv/release.debian.org/tmp/NTjMMFw_cp/ublock-origin-1.62.0+dfsg/src/img/icon_64-off.png |binary ublock-origin-1.62.0+dfsg/.eslintrc.yml | 30 ublock-origin-1.62.0+dfsg/.github/ISSUE_TEMPLATE/config.yml | 25 ublock-origin-1.62.0+dfsg/.github/workflows/main.yml | 75 ublock-origin-1.62.0+dfsg/.github/workflows/mv3.yml | 53 ublock-origin-1.62.0+dfsg/.gitignore | 2 ublock-origin-1.62.0+dfsg/.jshintrc | 3 ublock-origin-1.62.0+dfsg/CHANGELOG.md | 317 ublock-origin-1.62.0+dfsg/CONTRIBUTING.md | 32 ublock-origin-1.62.0+dfsg/MANIFESTO.md | 11 ublock-origin-1.62.0+dfsg/Makefile | 26 ublock-origin-1.62.0+dfsg/README.md | 116 ublock-origin-1.62.0+dfsg/RELEASE.HEAD.md | 12 ublock-origin-1.62.0+dfsg/assets/assets.dev.json | 932 ublock-origin-1.62.0+dfsg/assets/assets.json | 597 ublock-origin-1.62.0+dfsg/assets/resources/scriptlets.js | 1847 ublock-origin-1.62.0+dfsg/debian/changelog | 70 ublock-origin-1.62.0+dfsg/debian/control | 15 ublock-origin-1.62.0+dfsg/debian/copyright | 44 ublock-origin-1.62.0+dfsg/debian/missing-sources/hsluv.ts | 374 ublock-origin-1.62.0+dfsg/debian/patches/CVE-2025-4215.patch | 96 ublock-origin-1.62.0+dfsg/debian/patches/disable-nonfree-filters-by-default.patch | 4 ublock-origin-1.62.0+dfsg/debian/patches/make-assets.patch | 18 ublock-origin-1.62.0+dfsg/debian/patches/series | 1 ublock-origin-1.62.0+dfsg/debian/rules | 6 ublock-origin-1.62.0+dfsg/debian/watch | 6 ublock-origin-1.62.0+dfsg/dist/README.md | 156 ublock-origin-1.62.0+dfsg/dist/chromium/publish-beta.py | 4 ublock-origin-1.62.0+dfsg/dist/chromium/publish-stable.py | 190 ublock-origin-1.62.0+dfsg/dist/description/description-am.txt | 49 ublock-origin-1.62.0+dfsg/dist/description/description-en.txt | 22 ublock-origin-1.62.0+dfsg/dist/description/description-ga.txt | 49 ublock-origin-1.62.0+dfsg/dist/firefox/publish-signed-beta.py | 4 ublock-origin-1.62.0+dfsg/dist/firefox/updates.json | 6 ublock-origin-1.62.0+dfsg/dist/mv3/chromium/publish-beta.py | 195 ublock-origin-1.62.0+dfsg/dist/mv3/firefox/publish-signed-beta.py | 326 ublock-origin-1.62.0+dfsg/dist/mv3/firefox/updates.json | 13 ublock-origin-1.62.0+dfsg/dist/mv3/firefox/updates.template.json | 13 ublock-origin-1.62.0+dfsg/dist/mv3/log.txt | 3005 ublock-origin-1.62.0+dfsg/dist/mv3/publish-beta.py | 196 ublock-origin-1.62.0+dfsg/dist/version | 2 ublock-origin-1.62.0+dfsg/platform/browser/main.js | 20 ublock-origin-1.62.0+dfsg/platform/chromium/is-webrtc-supported.js | 4 ublock-origin-1.62.0+dfsg/platform/chromium/manifest.json | 24 ublock-origin-1.62.0+dfsg/platform/chromium/vapi-background-ext.js | 148 ublock-origin-1.62.0+dfsg/platform/chromium/webext.js | 52 ublock-origin-1.62.0+dfsg/platform/common/vapi-background.js | 522 ublock-origin-1.62.0+dfsg/platform/common/vapi-client-extra.js | 312 ublock-origin-1.62.0+dfsg/platform/common/vapi-client.js | 62 ublock-origin-1.62.0+dfsg/platform/common/vapi-common.js | 168 ublock-origin-1.62.0+dfsg/platform/common/vapi.js | 6 ublock-origin-1.62.0+dfsg/platform/dig/snfe.js | 29 ublock-origin-1.62.0+dfsg/platform/firefox/manifest.json | 31 ublock-origin-1.62.0+dfsg/platform/firefox/vapi-background-ext.js | 430 ublock-origin-1.62.0+dfsg/platform/firefox/webext.js | 2 ublock-origin-1.62.0+dfsg/platform/mv3/README.md | 31 ublock-origin-1.62.0+dfsg/platform/mv3/chromium/manifest.json | 56 ublock-origin-1.62.0+dfsg/platform/mv3/description/en.md | 3 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.am.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ar.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.az.txt | 11 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.be.txt | 13 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bg.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bn.txt | 35 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.br_FR.txt | 30 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bs.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ca.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cs.txt | 7 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cv.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cy.txt | 30 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.da.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.de.txt | 13 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.el.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.en_GB.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.eo.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.es.txt | 27 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.et.txt | 25 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.eu.txt | 35 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fa.txt | 7 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fi.txt | 21 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fil.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fr.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fy.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ga.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.gl.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.gu.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.he.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hi.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hr.txt | 7 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hu.txt | 29 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hy.txt | 35 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.id.txt | 29 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.it.txt | 19 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ja.txt | 19 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ka.txt | 7 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.kk.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.kn.txt | 13 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ko.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ku.txt | 30 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.lt.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.lv.txt | 21 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.mk.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ml.txt | 35 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.mr.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ms.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.nb.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.nl.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.oc.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pa.txt | 30 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pl.txt | 7 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pt_BR.txt | 27 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pt_PT.txt | 17 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ro.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ru.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.si.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sk.txt | 11 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sl.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.so.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sq.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sr.txt | 29 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sv.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sw.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ta.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.te.txt | 23 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.th.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.tr.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.uk.txt | 7 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ur.txt | 9 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.vi.txt | 31 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.zh_CN.txt | 5 ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.zh_TW.txt | 25 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/am/messages.json | 278 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ar/messages.json | 294 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/az/messages.json | 296 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/be/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bg/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bn/messages.json | 320 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/br_FR/messages.json | 282 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bs/messages.json | 282 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ca/messages.json | 254 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cs/messages.json | 262 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cv/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cy/messages.json | 282 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/da/messages.json | 260 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/de/messages.json | 272 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/el/messages.json | 266 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/en/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/en_GB/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/eo/messages.json | 286 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/es/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/et/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/eu/messages.json | 284 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fa/messages.json | 290 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fi/messages.json | 262 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fil/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fr/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fy/messages.json | 254 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ga/messages.json | 278 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/gl/messages.json | 326 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/gu/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/he/messages.json | 284 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hi/messages.json | 260 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hr/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hu/messages.json | 326 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hy/messages.json | 324 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/id/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/it/messages.json | 276 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ja/messages.json | 260 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ka/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/kk/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/kn/messages.json | 300 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ko/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/lt/messages.json | 264 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/lv/messages.json | 270 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/mk/messages.json | 326 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ml/messages.json | 324 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/mr/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ms/messages.json | 290 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/nb/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/nl/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/oc/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pa/messages.json | 282 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pl/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pt_BR/messages.json | 278 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pt_PT/messages.json | 260 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ro/messages.json | 262 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ru/messages.json | 260 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/si/messages.json | 316 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sk/messages.json | 266 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sl/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/so/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sq/messages.json | 260 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sr/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sv/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sw/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ta/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/te/messages.json | 284 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/th/messages.json | 282 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/tr/messages.json | 270 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/uk/messages.json | 256 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ur/messages.json | 308 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/vi/messages.json | 266 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/zh_CN/messages.json | 258 ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/zh_TW/messages.json | 280 ublock-origin-1.62.0+dfsg/platform/mv3/extension/about.html | 43 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/dashboard-common.css | 12 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/dashboard.css | 82 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/filtering-mode.css | 17 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/matched-rules.css | 28 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/popup.css | 63 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/settings.css | 181 ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/strictblock.css | 158 ublock-origin-1.62.0+dfsg/platform/mv3/extension/dashboard.html | 152 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/about.js | 33 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/admin.js | 121 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/background.js | 420 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/config.js | 76 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/dashboard-common.js | 30 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/dashboard.js | 112 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/debug.js | 128 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/ext.js | 83 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/fetch.js | 2 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/filter-lists.js | 449 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/matched-rules.js | 48 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/mode-manager.js | 530 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/popup.js | 112 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/report.js | 154 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/ruleset-manager.js | 760 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting-manager.js | 768 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-declarative.js | 126 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-generic.js | 57 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-procedural.js | 244 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-specific.entity.js | 86 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-specific.js | 120 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/settings.js | 435 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/storage.js | 44 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/strictblock.js | 295 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/theme.js | 2 ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/utils.js | 34 ublock-origin-1.62.0+dfsg/platform/mv3/extension/managed_storage.json | 27 ublock-origin-1.62.0+dfsg/platform/mv3/extension/manifest.json | 42 ublock-origin-1.62.0+dfsg/platform/mv3/extension/matched-rules.html | 32 ublock-origin-1.62.0+dfsg/platform/mv3/extension/popup.html | 14 ublock-origin-1.62.0+dfsg/platform/mv3/extension/report.html | 61 ublock-origin-1.62.0+dfsg/platform/mv3/extension/settings.html | 110 ublock-origin-1.62.0+dfsg/platform/mv3/extension/strictblock.html | 49 ublock-origin-1.62.0+dfsg/platform/mv3/firefox/background.html | 10 ublock-origin-1.62.0+dfsg/platform/mv3/firefox/manifest.json | 64 ublock-origin-1.62.0+dfsg/platform/mv3/make-rulesets.js | 1429 ublock-origin-1.62.0+dfsg/platform/mv3/make-scriptlets.js | 189 ublock-origin-1.62.0+dfsg/platform/mv3/safe-replace.js | 41 ublock-origin-1.62.0+dfsg/platform/mv3/salvage-ruleids.mjs | 117 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-current-script.entity.js | 181 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-current-script.js | 184 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.entity.js | 139 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.js | 143 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.entity.js | 113 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.js | 117 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-declarative.js | 51 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-declarative.template.js | 51 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generic.js | 65 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generic.template.js | 61 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generichigh.template.css | 26 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-procedural.js | 51 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-procedural.template.js | 51 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.entity.js | 51 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.js | 87 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.template.js | 51 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/json-prune.js | 160 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.entity.js | 113 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.js | 118 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-fetch-if.js | 143 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-setinterval-if.js | 121 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.entity.js | 117 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.js | 121 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.entity.js | 154 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.js | 159 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-xhr-if.js | 145 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/scriptlet.template.js | 147 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/set-constant.entity.js | 199 ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/set-constant.js | 202 ublock-origin-1.62.0+dfsg/platform/nodejs/.eslintrc.json | 38 ublock-origin-1.62.0+dfsg/platform/nodejs/README.md | 158 ublock-origin-1.62.0+dfsg/platform/nodejs/build.js | 2 ublock-origin-1.62.0+dfsg/platform/nodejs/index.js | 79 ublock-origin-1.62.0+dfsg/platform/npm/README.md | 170 ublock-origin-1.62.0+dfsg/platform/npm/demo.js | 121 ublock-origin-1.62.0+dfsg/platform/npm/package-lock.json | 91 ublock-origin-1.62.0+dfsg/platform/npm/package.json | 4 ublock-origin-1.62.0+dfsg/platform/npm/test.js | 2 ublock-origin-1.62.0+dfsg/platform/npm/tests/_common.js | 2 ublock-origin-1.62.0+dfsg/platform/npm/tests/leaks.js | 2 ublock-origin-1.62.0+dfsg/platform/npm/tests/request-data.js | 2 ublock-origin-1.62.0+dfsg/platform/npm/tests/snfe.js | 2 ublock-origin-1.62.0+dfsg/platform/npm/tests/wasm.js | 2 ublock-origin-1.62.0+dfsg/platform/opera/manifest.json | 24 ublock-origin-1.62.0+dfsg/platform/thunderbird/manifest.json | 20 ublock-origin-1.62.0+dfsg/src/1p-filters.html | 21 ublock-origin-1.62.0+dfsg/src/3p-filters.html | 86 ublock-origin-1.62.0+dfsg/src/_locales/am/messages.json | 1266 ublock-origin-1.62.0+dfsg/src/_locales/ar/messages.json | 138 ublock-origin-1.62.0+dfsg/src/_locales/az/messages.json | 100 ublock-origin-1.62.0+dfsg/src/_locales/be/messages.json | 104 ublock-origin-1.62.0+dfsg/src/_locales/bg/messages.json | 110 ublock-origin-1.62.0+dfsg/src/_locales/bn/messages.json | 126 ublock-origin-1.62.0+dfsg/src/_locales/br_FR/messages.json | 1314 ublock-origin-1.62.0+dfsg/src/_locales/bs/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/ca/messages.json | 104 ublock-origin-1.62.0+dfsg/src/_locales/cs/messages.json | 124 ublock-origin-1.62.0+dfsg/src/_locales/cv/messages.json | 108 ublock-origin-1.62.0+dfsg/src/_locales/cy/messages.json | 1314 ublock-origin-1.62.0+dfsg/src/_locales/da/messages.json | 110 ublock-origin-1.62.0+dfsg/src/_locales/de/messages.json | 214 ublock-origin-1.62.0+dfsg/src/_locales/el/messages.json | 134 ublock-origin-1.62.0+dfsg/src/_locales/en/messages.json | 110 ublock-origin-1.62.0+dfsg/src/_locales/en_GB/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/eo/messages.json | 108 ublock-origin-1.62.0+dfsg/src/_locales/es/messages.json | 108 ublock-origin-1.62.0+dfsg/src/_locales/et/messages.json | 108 ublock-origin-1.62.0+dfsg/src/_locales/eu/messages.json | 98 ublock-origin-1.62.0+dfsg/src/_locales/fa/messages.json | 112 ublock-origin-1.62.0+dfsg/src/_locales/fi/messages.json | 122 ublock-origin-1.62.0+dfsg/src/_locales/fil/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/fr/messages.json | 100 ublock-origin-1.62.0+dfsg/src/_locales/fy/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/ga/messages.json | 1266 ublock-origin-1.62.0+dfsg/src/_locales/gl/messages.json | 350 ublock-origin-1.62.0+dfsg/src/_locales/gu/messages.json | 108 ublock-origin-1.62.0+dfsg/src/_locales/he/messages.json | 124 ublock-origin-1.62.0+dfsg/src/_locales/hi/messages.json | 134 ublock-origin-1.62.0+dfsg/src/_locales/hr/messages.json | 106 ublock-origin-1.62.0+dfsg/src/_locales/hu/messages.json | 214 ublock-origin-1.62.0+dfsg/src/_locales/hy/messages.json | 100 ublock-origin-1.62.0+dfsg/src/_locales/id/messages.json | 118 ublock-origin-1.62.0+dfsg/src/_locales/it/messages.json | 126 ublock-origin-1.62.0+dfsg/src/_locales/ja/messages.json | 108 ublock-origin-1.62.0+dfsg/src/_locales/ka/messages.json | 186 ublock-origin-1.62.0+dfsg/src/_locales/kk/messages.json | 140 ublock-origin-1.62.0+dfsg/src/_locales/kn/messages.json | 258 ublock-origin-1.62.0+dfsg/src/_locales/ko/messages.json | 96 ublock-origin-1.62.0+dfsg/src/_locales/lt/messages.json | 116 ublock-origin-1.62.0+dfsg/src/_locales/lv/messages.json | 104 ublock-origin-1.62.0+dfsg/src/_locales/mk/messages.json | 324 ublock-origin-1.62.0+dfsg/src/_locales/ml/messages.json | 100 ublock-origin-1.62.0+dfsg/src/_locales/mr/messages.json | 100 ublock-origin-1.62.0+dfsg/src/_locales/ms/messages.json | 104 ublock-origin-1.62.0+dfsg/src/_locales/nb/messages.json | 112 ublock-origin-1.62.0+dfsg/src/_locales/nl/messages.json | 102 ublock-origin-1.62.0+dfsg/src/_locales/oc/messages.json | 122 ublock-origin-1.62.0+dfsg/src/_locales/pa/messages.json | 1314 ublock-origin-1.62.0+dfsg/src/_locales/pl/messages.json | 114 ublock-origin-1.62.0+dfsg/src/_locales/pt_BR/messages.json | 404 ublock-origin-1.62.0+dfsg/src/_locales/pt_PT/messages.json | 134 ublock-origin-1.62.0+dfsg/src/_locales/ro/messages.json | 98 ublock-origin-1.62.0+dfsg/src/_locales/ru/messages.json | 116 ublock-origin-1.62.0+dfsg/src/_locales/si/messages.json | 292 ublock-origin-1.62.0+dfsg/src/_locales/sk/messages.json | 98 ublock-origin-1.62.0+dfsg/src/_locales/sl/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/so/messages.json | 96 ublock-origin-1.62.0+dfsg/src/_locales/sq/messages.json | 224 ublock-origin-1.62.0+dfsg/src/_locales/sr/messages.json | 106 ublock-origin-1.62.0+dfsg/src/_locales/sv/messages.json | 176 ublock-origin-1.62.0+dfsg/src/_locales/sw/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/ta/messages.json | 94 ublock-origin-1.62.0+dfsg/src/_locales/te/messages.json | 122 ublock-origin-1.62.0+dfsg/src/_locales/th/messages.json | 168 ublock-origin-1.62.0+dfsg/src/_locales/tr/messages.json | 122 ublock-origin-1.62.0+dfsg/src/_locales/uk/messages.json | 114 ublock-origin-1.62.0+dfsg/src/_locales/ur/messages.json | 104 ublock-origin-1.62.0+dfsg/src/_locales/vi/messages.json | 146 ublock-origin-1.62.0+dfsg/src/_locales/zh_CN/messages.json | 118 ublock-origin-1.62.0+dfsg/src/_locales/zh_TW/messages.json | 212 ublock-origin-1.62.0+dfsg/src/about.html | 4 ublock-origin-1.62.0+dfsg/src/advanced-settings.html | 4 ublock-origin-1.62.0+dfsg/src/asset-viewer.html | 17 ublock-origin-1.62.0+dfsg/src/code-viewer.html | 53 ublock-origin-1.62.0+dfsg/src/css/1p-filters.css | 10 ublock-origin-1.62.0+dfsg/src/css/3p-filters.css | 249 ublock-origin-1.62.0+dfsg/src/css/advanced-settings.css | 1 ublock-origin-1.62.0+dfsg/src/css/asset-viewer.css | 1 ublock-origin-1.62.0+dfsg/src/css/code-viewer.css | 68 ublock-origin-1.62.0+dfsg/src/css/codemirror.css | 191 ublock-origin-1.62.0+dfsg/src/css/common.css | 59 ublock-origin-1.62.0+dfsg/src/css/dashboard-common.css | 2 ublock-origin-1.62.0+dfsg/src/css/dashboard.css | 18 ublock-origin-1.62.0+dfsg/src/css/devtools.css | 1 ublock-origin-1.62.0+dfsg/src/css/document-blocked.css | 33 ublock-origin-1.62.0+dfsg/src/css/dom-inspector.css | 41 ublock-origin-1.62.0+dfsg/src/css/dyna-rules.css | 1 ublock-origin-1.62.0+dfsg/src/css/epicker-ui.css | 142 ublock-origin-1.62.0+dfsg/src/css/fa-icons.css | 15 ublock-origin-1.62.0+dfsg/src/css/logger-ui-inspector.css | 9 ublock-origin-1.62.0+dfsg/src/css/logger-ui.css | 456 ublock-origin-1.62.0+dfsg/src/css/popup-fenix.css | 190 ublock-origin-1.62.0+dfsg/src/css/settings.css | 4 ublock-origin-1.62.0+dfsg/src/css/support.css | 39 ublock-origin-1.62.0+dfsg/src/css/themes/default.css | 13 ublock-origin-1.62.0+dfsg/src/css/whitelist.css | 1 ublock-origin-1.62.0+dfsg/src/dashboard.html | 36 ublock-origin-1.62.0+dfsg/src/devtools.html | 12 ublock-origin-1.62.0+dfsg/src/document-blocked.html | 20 ublock-origin-1.62.0+dfsg/src/dyna-rules.html | 6 ublock-origin-1.62.0+dfsg/src/img/flags-of-the-world/README | 9 ublock-origin-1.62.0+dfsg/src/img/fontawesome/fontawesome-defs.svg | 3 ublock-origin-1.62.0+dfsg/src/js/1p-filters.js | 252 ublock-origin-1.62.0+dfsg/src/js/3p-filters.js | 1012 ublock-origin-1.62.0+dfsg/src/js/about.js | 2 ublock-origin-1.62.0+dfsg/src/js/advanced-settings.js | 13 ublock-origin-1.62.0+dfsg/src/js/arglist-parser.js | 116 ublock-origin-1.62.0+dfsg/src/js/asset-viewer.js | 26 ublock-origin-1.62.0+dfsg/src/js/assets.js | 966 ublock-origin-1.62.0+dfsg/src/js/background.js | 176 ublock-origin-1.62.0+dfsg/src/js/base64-custom.js | 105 ublock-origin-1.62.0+dfsg/src/js/benchmarks.js | 160 ublock-origin-1.62.0+dfsg/src/js/biditrie.js | 48 ublock-origin-1.62.0+dfsg/src/js/broadcast.js | 85 ublock-origin-1.62.0+dfsg/src/js/cachestorage.js | 984 ublock-origin-1.62.0+dfsg/src/js/click2load.js | 7 ublock-origin-1.62.0+dfsg/src/js/cloud-ui.js | 3 ublock-origin-1.62.0+dfsg/src/js/code-viewer.js | 311 ublock-origin-1.62.0+dfsg/src/js/codemirror/search-thread.js | 18 ublock-origin-1.62.0+dfsg/src/js/codemirror/search.js | 160 ublock-origin-1.62.0+dfsg/src/js/codemirror/ubo-dynamic-filtering.js | 2 ublock-origin-1.62.0+dfsg/src/js/codemirror/ubo-static-filtering.js | 1122 ublock-origin-1.62.0+dfsg/src/js/commands.js | 30 ublock-origin-1.62.0+dfsg/src/js/console.js | 2 ublock-origin-1.62.0+dfsg/src/js/contentscript-extra.js | 100 ublock-origin-1.62.0+dfsg/src/js/contentscript.js | 64 ublock-origin-1.62.0+dfsg/src/js/contextmenu.js | 84 ublock-origin-1.62.0+dfsg/src/js/cosmetic-filtering.js | 208 ublock-origin-1.62.0+dfsg/src/js/dashboard-common.js | 12 ublock-origin-1.62.0+dfsg/src/js/dashboard.js | 51 ublock-origin-1.62.0+dfsg/src/js/devtools.js | 192 ublock-origin-1.62.0+dfsg/src/js/diff-updater.js | 288 ublock-origin-1.62.0+dfsg/src/js/document-blocked.js | 50 ublock-origin-1.62.0+dfsg/src/js/dom-inspector.js | 68 ublock-origin-1.62.0+dfsg/src/js/dom.js | 39 ublock-origin-1.62.0+dfsg/src/js/dyna-rules.js | 170 ublock-origin-1.62.0+dfsg/src/js/dynamic-net-filtering.js | 5 ublock-origin-1.62.0+dfsg/src/js/epicker-ui.js | 259 ublock-origin-1.62.0+dfsg/src/js/fa-icons.js | 7 ublock-origin-1.62.0+dfsg/src/js/filtering-context.js | 249 ublock-origin-1.62.0+dfsg/src/js/filtering-engines.js | 2 ublock-origin-1.62.0+dfsg/src/js/hnswitches.js | 2 ublock-origin-1.62.0+dfsg/src/js/hntrie.js | 57 ublock-origin-1.62.0+dfsg/src/js/html-filtering.js | 83 ublock-origin-1.62.0+dfsg/src/js/httpheader-filtering.js | 51 ublock-origin-1.62.0+dfsg/src/js/i18n.js | 66 ublock-origin-1.62.0+dfsg/src/js/logger-ui-inspector.js | 434 ublock-origin-1.62.0+dfsg/src/js/logger-ui.js | 855 ublock-origin-1.62.0+dfsg/src/js/logger.js | 48 ublock-origin-1.62.0+dfsg/src/js/lz4.js | 49 ublock-origin-1.62.0+dfsg/src/js/messaging.js | 655 ublock-origin-1.62.0+dfsg/src/js/mrucache.js | 58 ublock-origin-1.62.0+dfsg/src/js/pagestore.js | 296 ublock-origin-1.62.0+dfsg/src/js/popup-fenix.js | 239 ublock-origin-1.62.0+dfsg/src/js/redirect-engine.js | 593 ublock-origin-1.62.0+dfsg/src/js/redirect-resources.js | 67 ublock-origin-1.62.0+dfsg/src/js/resources/attribute.js | 305 ublock-origin-1.62.0+dfsg/src/js/resources/base.js | 38 ublock-origin-1.62.0+dfsg/src/js/resources/cookie.js | 419 ublock-origin-1.62.0+dfsg/src/js/resources/href-sanitizer.js | 188 ublock-origin-1.62.0+dfsg/src/js/resources/localstorage.js | 235 ublock-origin-1.62.0+dfsg/src/js/resources/parse-replace.js | 54 ublock-origin-1.62.0+dfsg/src/js/resources/prevent-settimeout.js | 236 ublock-origin-1.62.0+dfsg/src/js/resources/proxy-apply.js | 109 ublock-origin-1.62.0+dfsg/src/js/resources/replace-argument.js | 120 ublock-origin-1.62.0+dfsg/src/js/resources/run-at.js | 96 ublock-origin-1.62.0+dfsg/src/js/resources/safe-self.js | 219 ublock-origin-1.62.0+dfsg/src/js/resources/scriptlets.js | 3530 ublock-origin-1.62.0+dfsg/src/js/resources/set-constant.js | 287 ublock-origin-1.62.0+dfsg/src/js/resources/shared.js | 44 ublock-origin-1.62.0+dfsg/src/js/resources/spoof-css.js | 163 ublock-origin-1.62.0+dfsg/src/js/reverselookup-worker.js | 15 ublock-origin-1.62.0+dfsg/src/js/reverselookup.js | 51 ublock-origin-1.62.0+dfsg/src/js/s14e-serializer.js | 1435 ublock-origin-1.62.0+dfsg/src/js/scriptlet-filtering-core.js | 302 ublock-origin-1.62.0+dfsg/src/js/scriptlet-filtering.js | 697 ublock-origin-1.62.0+dfsg/src/js/scriptlets/cosmetic-logger.js | 93 ublock-origin-1.62.0+dfsg/src/js/scriptlets/cosmetic-off.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/cosmetic-on.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/cosmetic-report.js | 142 ublock-origin-1.62.0+dfsg/src/js/scriptlets/dom-inspector.js | 666 ublock-origin-1.62.0+dfsg/src/js/scriptlets/dom-survey-elements.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/dom-survey-scripts.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/epicker.js | 324 ublock-origin-1.62.0+dfsg/src/js/scriptlets/load-3p-css.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/load-large-media-all.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/load-large-media-interactive.js | 111 ublock-origin-1.62.0+dfsg/src/js/scriptlets/noscript-spoof.js | 39 ublock-origin-1.62.0+dfsg/src/js/scriptlets/scriptlet-loglevel-1.js | 49 ublock-origin-1.62.0+dfsg/src/js/scriptlets/scriptlet-loglevel-2.js | 49 ublock-origin-1.62.0+dfsg/src/js/scriptlets/should-inject-contentscript.js | 10 ublock-origin-1.62.0+dfsg/src/js/scriptlets/subscriber.js | 2 ublock-origin-1.62.0+dfsg/src/js/scriptlets/updater.js | 118 ublock-origin-1.62.0+dfsg/src/js/settings.js | 76 ublock-origin-1.62.0+dfsg/src/js/start.js | 306 ublock-origin-1.62.0+dfsg/src/js/static-dnr-filtering.js | 367 ublock-origin-1.62.0+dfsg/src/js/static-ext-filtering-db.js | 138 ublock-origin-1.62.0+dfsg/src/js/static-ext-filtering.js | 73 ublock-origin-1.62.0+dfsg/src/js/static-filtering-io.js | 7 ublock-origin-1.62.0+dfsg/src/js/static-filtering-parser.js | 5259 ublock-origin-1.62.0+dfsg/src/js/static-net-filtering.js | 2942 ublock-origin-1.62.0+dfsg/src/js/storage.js | 837 ublock-origin-1.62.0+dfsg/src/js/support.js | 124 ublock-origin-1.62.0+dfsg/src/js/tab.js | 86 ublock-origin-1.62.0+dfsg/src/js/tasks.js | 2 ublock-origin-1.62.0+dfsg/src/js/text-encode.js | 2 ublock-origin-1.62.0+dfsg/src/js/text-utils.js | 2 ublock-origin-1.62.0+dfsg/src/js/theme.js | 13 ublock-origin-1.62.0+dfsg/src/js/traffic.js | 761 ublock-origin-1.62.0+dfsg/src/js/ublock.js | 81 ublock-origin-1.62.0+dfsg/src/js/uri-utils.js | 2 ublock-origin-1.62.0+dfsg/src/js/url-net-filtering.js | 2 ublock-origin-1.62.0+dfsg/src/js/urlskip.js | 166 ublock-origin-1.62.0+dfsg/src/js/utils.js | 85 ublock-origin-1.62.0+dfsg/src/js/wasm/biditrie.wat | 2 ublock-origin-1.62.0+dfsg/src/js/wasm/hntrie.wat | 2 ublock-origin-1.62.0+dfsg/src/js/whitelist.js | 58 ublock-origin-1.62.0+dfsg/src/lib/codemirror/mode/css/css.js | 864 ublock-origin-1.62.0+dfsg/src/lib/codemirror/mode/htmlmixed/htmlmixed.js | 153 ublock-origin-1.62.0+dfsg/src/lib/codemirror/mode/javascript/javascript.js | 942 ublock-origin-1.62.0+dfsg/src/lib/codemirror/mode/xml/xml.js | 413 ublock-origin-1.62.0+dfsg/src/lib/codemirror/theme/night.css | 27 ublock-origin-1.62.0+dfsg/src/lib/js-beautify/LICENSE | 9 ublock-origin-1.62.0+dfsg/src/lib/js-beautify/README | 5 ublock-origin-1.62.0+dfsg/src/lib/js-beautify/beautifier.min.js | 2 ublock-origin-1.62.0+dfsg/src/lib/lz4/README.md | 6 ublock-origin-1.62.0+dfsg/src/lib/lz4/lz4-block-codec-any.js | 2 ublock-origin-1.62.0+dfsg/src/lib/lz4/lz4-block-codec.wat | 6 ublock-origin-1.62.0+dfsg/src/lib/publicsuffixlist/publicsuffixlist.js | 10 ublock-origin-1.62.0+dfsg/src/lib/regexanalyzer/CHANGES.md | 11 ublock-origin-1.62.0+dfsg/src/lib/regexanalyzer/regex.js | 1180 ublock-origin-1.62.0+dfsg/src/logger-ui.html | 69 ublock-origin-1.62.0+dfsg/src/popup-fenix.html | 20 ublock-origin-1.62.0+dfsg/src/settings.html | 4 ublock-origin-1.62.0+dfsg/src/support.html | 62 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/addthis_widget.js | 39 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/chartbeat.js | 3 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/click2load.html | 2 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/dom-inspector.html | 25 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/epicker-ui.html | 16 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/fingerprint2.js | 32 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/google-ima.js | 85 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/googlesyndication_adsbygoogle.js | 8 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/googletagservices_gpt.js | 3 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/ligatus_angular-tag.js | 29 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/monkeybroker.js | 43 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/mxpnl_mixpanel.js | 51 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop-vast2.xml | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop-vast3.xml | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop-vast4.xml | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop-vmap1.0.xml | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop-vmap1.xml | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop.css | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/noop.json | 1 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/popads.js | 2 ublock-origin-1.62.0+dfsg/src/web_accessible_resources/window.open-defuser.js | 115 ublock-origin-1.62.0+dfsg/src/whitelist.html | 18 ublock-origin-1.62.0+dfsg/tools/copy-common-files.sh | 1 ublock-origin-1.62.0+dfsg/tools/import-crowdin.sh | 1 ublock-origin-1.62.0+dfsg/tools/make-assets.sh | 24 ublock-origin-1.62.0+dfsg/tools/make-chromium-meta.py | 2 ublock-origin-1.62.0+dfsg/tools/make-chromium.sh | 2 ublock-origin-1.62.0+dfsg/tools/make-firefox-meta.py | 2 ublock-origin-1.62.0+dfsg/tools/make-firefox.sh | 4 ublock-origin-1.62.0+dfsg/tools/make-mv3.sh | 180 ublock-origin-1.62.0+dfsg/tools/make-nodejs.sh | 4 ublock-origin-1.62.0+dfsg/tools/make-npm.sh | 1 ublock-origin-1.62.0+dfsg/tools/make-opera.sh | 5 ublock-origin-1.62.0+dfsg/tools/make-thunderbird.sh | 2 ublock-origin-1.62.0+dfsg/uAssets/.github/ISSUE_TEMPLATE/bug_report.yml | 107 ublock-origin-1.62.0+dfsg/uAssets/.github/ISSUE_TEMPLATE/config.yml | 5 ublock-origin-1.62.0+dfsg/uAssets/.github/ISSUE_TEMPLATE/report_from_ubo.yml | 82 ublock-origin-1.62.0+dfsg/uAssets/.github/ISSUE_TEMPLATE/specific_report_from_ubo.yml | 35 ublock-origin-1.62.0+dfsg/uAssets/.github/ISSUE_TEMPLATE/specific_report_from_ubol.yml | 94 ublock-origin-1.62.0+dfsg/uAssets/.github/workflows/del-runs-comments.yml | 19 ublock-origin-1.62.0+dfsg/uAssets/.github/workflows/main.yml | 17 ublock-origin-1.62.0+dfsg/uAssets/.github/workflows/on-issue-comment.yml | 21 ublock-origin-1.62.0+dfsg/uAssets/.github/workflows/on-youtube-issue.yml | 32 ublock-origin-1.62.0+dfsg/uAssets/.github/workflows/update-3rd-party-assets.yml | 5 ublock-origin-1.62.0+dfsg/uAssets/.github/workflows/update-easylist.yml | 14 ublock-origin-1.62.0+dfsg/uAssets/.gitignore | 2 ublock-origin-1.62.0+dfsg/uAssets/Makefile | 8 ublock-origin-1.62.0+dfsg/uAssets/README.md | 42 ublock-origin-1.62.0+dfsg/uAssets/dnr/default.json | 2 ublock-origin-1.62.0+dfsg/uAssets/filters/annoyances-cookies.txt | 3299 ublock-origin-1.62.0+dfsg/uAssets/filters/annoyances-others.txt | 7810 + ublock-origin-1.62.0+dfsg/uAssets/filters/annoyances.txt | 6585 - ublock-origin-1.62.0+dfsg/uAssets/filters/badlists.txt | 68 ublock-origin-1.62.0+dfsg/uAssets/filters/badware.txt | 6327 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-2020.txt | 2976 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-2021.txt | 3556 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-2022.txt | 3519 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-2023.txt | 5466 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-2024.txt | 4606 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-2025.txt | 608 ublock-origin-1.62.0+dfsg/uAssets/filters/filters-mobile.txt | 160 ublock-origin-1.62.0+dfsg/uAssets/filters/filters.txt |10092 - ublock-origin-1.62.0+dfsg/uAssets/filters/lan-block.txt | 86 ublock-origin-1.62.0+dfsg/uAssets/filters/legacy.txt | 25 ublock-origin-1.62.0+dfsg/uAssets/filters/privacy.txt | 1442 ublock-origin-1.62.0+dfsg/uAssets/filters/quick-fixes.txt | 530 ublock-origin-1.62.0+dfsg/uAssets/filters/resource-abuse.txt | 92 ublock-origin-1.62.0+dfsg/uAssets/filters/ubo-link-shorteners.txt | 1518 ublock-origin-1.62.0+dfsg/uAssets/filters/ubol-filters.txt | 322 ublock-origin-1.62.0+dfsg/uAssets/filters/unbreak.txt | 3145 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist-annoyances.template | 22 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist-chat.template | 7 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist-cookies.template | 23 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist-newsletters.template | 28 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist-notifications.template | 22 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist-social.template | 22 ublock-origin-1.62.0+dfsg/uAssets/templates/easylist.template | 41 ublock-origin-1.62.0+dfsg/uAssets/templates/easyprivacy.template | 57 ublock-origin-1.62.0+dfsg/uAssets/templates/ublock-annoyances.template | 8 ublock-origin-1.62.0+dfsg/uAssets/templates/ublock-badware.template | 8 ublock-origin-1.62.0+dfsg/uAssets/templates/ublock-filters.template | 20 ublock-origin-1.62.0+dfsg/uAssets/templates/ublock-privacy.template | 10 ublock-origin-1.62.0+dfsg/uAssets/templates/ublock-quick-fixes.template | 8 ublock-origin-1.62.0+dfsg/uAssets/templates/ublock-unbreak.template | 8 ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt |54229 -------- ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt |31433 ---- ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist-annoyances.txt | 3839 ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist-chat.txt | 238 ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist-cookies.txt |27511 ++++ ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist-newsletters.txt | 5741 ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist-notifications.txt | 1626 ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist-social.txt |13273 ++ ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easylist.txt |64871 ++++++++++ ublock-origin-1.62.0+dfsg/uAssets/thirdparties/easylist/easyprivacy.txt |53422 ++++++++ ublock-origin-1.62.0+dfsg/uAssets/thirdparties/publicsuffix.org/list/effective_tld_names.dat | 9084 - ublock-origin-1.62.0+dfsg/uAssets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt | 8080 - ublock-origin-1.62.0+dfsg/uAssets/tools/easylist/make-easylist.js | 106 ublock-origin-1.62.0+dfsg/uAssets/tools/easylist/package.json | 6 ublock-origin-1.62.0+dfsg/uAssets/tools/make-diffpatch.sh | 100 ublock-origin-1.62.0+dfsg/uAssets/tools/make-easylist.mjs | 201 ublock-origin-1.62.0+dfsg/uAssets/tools/make-easylist.sh | 25 ublock-origin-1.62.0+dfsg/uAssets/tools/make-ublock.sh | 21 ublock-origin-1.62.0+dfsg/uAssets/tools/need-patch.mjs | 81 ublock-origin-1.62.0+dfsg/uAssets/tools/update-3rdparties.sh | 10 ublock-origin-1.62.0+dfsg/uAssets/tools/update-diffpatches.sh | 115 900 files changed, 278753 insertions(+), 156984 deletions(-) diff -Nru ublock-origin-1.46.0+dfsg/.eslintrc.yml ublock-origin-1.62.0+dfsg/.eslintrc.yml --- ublock-origin-1.46.0+dfsg/.eslintrc.yml 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/.eslintrc.yml 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,30 @@ +env: + browser: true + es2022: true +extends: eslint:recommended +parserOptions: + sourceType: module +rules: + eqeqeq: + - warn + - always + indent: + - error + - 4 + - ignoredNodes: + - Program > BlockStatement + - Program > ExpressionStatement > CallExpression > ArrowFunctionExpression > BlockStatement + - Program > ExpressionStatement > CallExpression > FunctionExpression > BlockStatement + - Program > IfStatement > BlockStatement + - Program > VariableDeclaration > VariableDeclarator > CallExpression > ArrowFunctionExpression > BlockStatement + - CallExpression > MemberExpression + - ArrayExpression > * + - ObjectExpression > * + no-control-regex: off + no-empty: off + sort-imports: warn + strict: warn +globals: + browser: readonly + chrome: readonly + vAPI: readonly diff -Nru ublock-origin-1.46.0+dfsg/.github/ISSUE_TEMPLATE/config.yml ublock-origin-1.62.0+dfsg/.github/ISSUE_TEMPLATE/config.yml --- ublock-origin-1.46.0+dfsg/.github/ISSUE_TEMPLATE/config.yml 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/.github/ISSUE_TEMPLATE/config.yml 2025-02-09 18:18:39.000000000 +0000 @@ -1,17 +1,14 @@ blank_issues_enabled: false contact_links: - - name: Bug report - url: https://github.com/uBlockOrigin/uBlock-issues - about: Bugs and feature requests are now in a separate repository - - name: Questions and support - url: https://old.reddit.com/r/uBlockOrigin/ - about: Answers to questions and other kinds of help support is provided on the subreddit r/uBlockOrigin - - name: Filter issues/website is broken + - name: Support Forum + url: https://www.reddit.com/r/uBlockOrigin/ + about: For support, questions, or help, visit /r/uBlockOrigin. + - name: uBlock Origin (uBO) Issues + url: https://github.com/uBlockOrigin/uBlock-issues/issues + about: Report issues with uBO in the uBO issue tracker. + - name: Filter List Issues url: https://github.com/uBlockOrigin/uAssets/issues - about: Please report any issues with specific websites to uAssets issue tracker - - name: New filter list - url: https://github.com/uBlockOrigin/uBlock-issues/blob/master/README.md#ublock-issues - about: Opening issues for adding new filter lists is now disallowed and such issues will be declined and closed - - name: Issues with Firefox 56 or older - url: https://github.com/gorhill/uBlock-for-firefox-legacy/issues - about: If you are using uBlock Origin for Firefox legacy, please write the issues to its issue tracker + about: Report issues with filter lists or broken website functionality in the uAssets issue tracker. + - name: uBO Lite (uBOL) Issues + url: https://github.com/uBlockOrigin/uBOL-home/issues + about: Report issues specific to the Manifest Version 3 (MV3) variant in the uBOL issue tracker. diff -Nru ublock-origin-1.46.0+dfsg/.github/workflows/main.yml ublock-origin-1.62.0+dfsg/.github/workflows/main.yml --- ublock-origin-1.46.0+dfsg/.github/workflows/main.yml 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/.github/workflows/main.yml 2025-02-09 18:18:39.000000000 +0000 @@ -7,9 +7,6 @@ permissions: contents: read -# I used the following project as template to get started: -# https://github.com/dessant/search-by-image/blob/master/.github/workflows/ci.yml - jobs: build: permissions: @@ -19,65 +16,39 @@ if: startsWith(github.ref, 'refs/tags/') steps: - name: Clone repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: persist-credentials: false - name: Clone uAssets run: | tools/pull-assets.sh - # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html - name: Get release information - id: release_info run: | - echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} + echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV + - name: Build MV2 packages + run: | + tools/make-chromium.sh ${{ env.VERSION }} + tools/make-firefox.sh ${{ env.VERSION }} + tools/make-thunderbird.sh ${{ env.VERSION }} + tools/make-npm.sh ${{ env.VERSION }} + - name: Assemble release notes + run: | + > release.body.txt + grep -m1 -B10000 -- "----------" CHANGELOG.md >> release.body.txt + sed -e 's/%version%/${{ env.VERSION }}/g' RELEASE.HEAD.md >> release.body.txt - name: Create GitHub release id: create_release - uses: actions/create-release@v1 + uses: softprops/action-gh-release@v2 env: GITHUB_TOKEN: ${{ github.token }} with: - tag_name: ${{ steps.release_info.outputs.VERSION }} - release_name: ${{ steps.release_info.outputs.VERSION }} + tag_name: ${{ env.VERSION }} + name: ${{ env.VERSION }} + draft: true prerelease: true - - name: Build MV2 packages - run: | - tools/make-chromium.sh ${{ steps.release_info.outputs.VERSION }} - tools/make-firefox.sh ${{ steps.release_info.outputs.VERSION }} - tools/make-thunderbird.sh ${{ steps.release_info.outputs.VERSION }} - tools/make-npm.sh ${{ steps.release_info.outputs.VERSION }} - - name: Upload Chromium package - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.chromium.zip - asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.chromium.zip - asset_content_type: application/octet-stream - - name: Upload Firefox package - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.firefox.xpi - asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.firefox.xpi - asset_content_type: application/octet-stream - - name: Upload Thunderbird package - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.thunderbird.xpi - asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.thunderbird.xpi - asset_content_type: application/octet-stream - - name: Upload NodeJS package - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/build/uBlock0_${{ steps.release_info.outputs.VERSION }}.npm.tgz - asset_name: uBlock0_${{ steps.release_info.outputs.VERSION }}.npm.tgz - asset_content_type: application/octet-stream + body_path: release.body.txt + files: | + dist/build/uBlock0_${{ env.VERSION }}.chromium.zip + dist/build/uBlock0_${{ env.VERSION }}.firefox.xpi + dist/build/uBlock0_${{ env.VERSION }}.thunderbird.xpi + dist/build/uBlock0_${{ env.VERSION }}.npm.tgz diff -Nru ublock-origin-1.46.0+dfsg/.github/workflows/mv3.yml ublock-origin-1.62.0+dfsg/.github/workflows/mv3.yml --- ublock-origin-1.46.0+dfsg/.github/workflows/mv3.yml 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/.github/workflows/mv3.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -name: uBO Lite release - -on: workflow_dispatch - -permissions: - contents: read - -# I used the following project as template to get started: -# https://github.com/dessant/search-by-image/blob/master/.github/workflows/ci.yml - -jobs: - build: - permissions: - contents: write # for creating release - name: Build packages - runs-on: ubuntu-latest - steps: - - name: Clone repository - uses: actions/checkout@v3 - with: - persist-credentials: false - # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html - - name: Build uBOLite MV3 packages - run: | - tools/make-mv3.sh full - echo "PACKAGE=$(basename $(ls dist/build/uBOLite_*.mv3.zip))" >> $GITHUB_ENV - echo "TAGNAME=$(basename $(ls dist/build/uBOLite_*.mv3.zip) .mv3.zip)" >> $GITHUB_ENV - RELEASENAME=${TAGNAME/_/ } - echo "RELEASENAME=$RELEASENAME" >> $GITHUB_ENV - cp dist/build/uBOLite.mv3/log.txt dist/mv3/ - - name: Commit uBOLite MV3 build log file - # https://github.com/marketplace/actions/github-action-for-committing-changes-to-a-repository - uses: devops-infra/action-commit-push@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - commit_message: Update build log file - - name: Create GitHub release - id: create_release - uses: ncipollo/release-action@v1 - env: - GITHUB_TOKEN: ${{ github.token }} - with: - tag: ${{ env.TAGNAME }} - prerelease: true - - name: Upload uBOLite MV3 package - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: dist/build/${{ env.PACKAGE }} - asset_name: ${{ env.PACKAGE }} - asset_content_type: application/octet-stream diff -Nru ublock-origin-1.46.0+dfsg/.gitignore ublock-origin-1.62.0+dfsg/.gitignore --- ublock-origin-1.46.0+dfsg/.gitignore 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/.gitignore 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,6 @@ *.bak *.pem +__pycache__/ +node_modules/ /dist/build/ /tmp/ diff -Nru ublock-origin-1.46.0+dfsg/.jshintrc ublock-origin-1.62.0+dfsg/.jshintrc --- ublock-origin-1.46.0+dfsg/.jshintrc 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/.jshintrc 2025-02-09 18:18:39.000000000 +0000 @@ -2,9 +2,10 @@ "browser": true, "devel": true, "eqeqeq": true, - "esversion": 8, + "esversion": 11, "globals": { "chrome": false, // global variable in Chromium, Chrome, Opera + "globalThis": false, "self": false, "vAPI": false, "URLSearchParams": false, diff -Nru ublock-origin-1.46.0+dfsg/CHANGELOG.md ublock-origin-1.62.0+dfsg/CHANGELOG.md --- ublock-origin-1.46.0+dfsg/CHANGELOG.md 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/CHANGELOG.md 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,317 @@ +- [Fix deserialization of ArrayBuffer shared by multiple TypedArrays](https://github.com/gorhill/uBlock/commit/c92a518218) +- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/cb6c11ab6f) +- [Improve `urlskip=` filter option](https://github.com/gorhill/uBlock/commit/a7aa755f18) +- [Improve `parse-properties-to-match` scriptlet helper](https://github.com/gorhill/uBlock/commit/7494eaf621) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/9bf8d53ebe) +- [Improve quote usage in filter options and scriptlets](https://github.com/gorhill/uBlock/commit/8ba71f09d7) +- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/7ed3470844) +- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/3417fe3d5d) +- [Block media elements unconditionally when max size is set to 0](https://github.com/gorhill/uBlock/commit/36db7f8327) + - Regression from +- [Visually separate scriptlet parameters in active line](https://github.com/gorhill/uBlock/commit/076e9fa73e) +- [Mitigate potentially delayed execution of scriptlets in Firefox](https://github.com/gorhill/uBlock/commit/b1a00145bd) +- [Improve `prevent-setTimeout`/`prevent-setInterval` scriptlets](https://github.com/gorhill/uBlock/commit/3b7fa79a68) +- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/adced29b5b) +- [Add `-safebase64` directive to `urlskip=` option](https://github.com/gorhill/uBlock/commit/bcc058eba7) +- [Improve `urlskip=` filter option](https://github.com/gorhill/uBlock/commit/77ed83ff2f) +- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/5f5e3d730f) +- [Improve `trusted-set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/c8174d6032) +- [Add support for EasyList `{ remove: true }` cosmetic filter syntax](https://github.com/gorhill/uBlock/commit/ff5fc61753) +- [Keep moving related scriptlets into separate files](https://github.com/gorhill/uBlock/commit/e5a088738d) +- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/ce4908b341) +- [Improve `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/41616df866) +- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/e613282698) + +---------- + +# 1.61.2 + +## Fixes / changes + +- [Better handle unexpected conditions when deserializing](https://github.com/gorhill/uBlock/commit/4c299bfca9) +- [Fix potential infinite async loop](https://github.com/gorhill/uBlock/commit/335d947c10) (issue found by @Rob--W) + +---------- + +# 1.61.0 + +## Fixes / changes + +- [Improve `prevent-refresh` scriptlet](https://github.com/gorhill/uBlock/commit/8884f259c1) +- [Improve `googlesyndication_adsbygoogle.js` scriptlet](https://github.com/gorhill/uBlock/commit/f645e8f0d2) +- [Offer ability to skip redirects in strict-blocked page](https://github.com/gorhill/uBlock/commit/20b54185fa) +- [Add `-blocked` directive to `urlskip=` option](https://github.com/gorhill/uBlock/commit/d04dc4c767) +- [Add `trusted-set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/11ca4a3923) +- [Remove `64:ff9b:` as private network block](https://github.com/gorhill/uBlock/commit/2621c908c3) +- [Ensure `urlskip=` redirects only to `https:`](https://github.com/gorhill/uBlock/commit/32f27c5131) +- [Add support to `urlskip=` media resources](https://github.com/gorhill/uBlock/commit/ce9fc5dc14) +- [Add `-uricomponent` to `urlskip=` option](https://github.com/gorhill/uBlock/commit/01eebffc1f) +- [Add `forbidden`/`forever` as safe cookie values](https://github.com/gorhill/uBlock/commit/4d982d9972) (by @ryanbr) +- [Add regex extraction transformation step to `urlskip=` option](https://github.com/gorhill/uBlock/commit/c86ed5287b) +- [Improve `prevent-window-open` scriptlet](https://github.com/gorhill/uBlock/commit/85877b12ed) +- [Add support to parse Adguard's `[$domain=/.../]` regex-based modifier](https://github.com/gorhill/uBlock/commit/58bfe4c846) +- [Validate result type of XPath expressions](https://github.com/gorhill/uBlock/commit/c746633693) +- [Fix npm test suite](https://github.com/gorhill/uBlock/commit/818cb2d801) +- [Add ability to lookup parameter name in `urlskip=`](https://github.com/gorhill/uBlock/commit/64b2086ba4) +- [Mind that BroadcastChannel contructor can throw in Firefox](https://github.com/gorhill/uBlock/commit/6d2b3375f8) +- [Add `trusted-override-element-method` scriptlet](https://github.com/gorhill/uBlock/commit/95b0ce5e3a) +- [Add `trusted-prevent-dom-bypass` scriptlet](https://github.com/gorhill/uBlock/commit/1abc864742) +- [Improve `prevent-xhr` scriptlet; add `trusted-prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/fe49ced2ac) +- [Skip dns resolution when requests are proxied through http](https://github.com/gorhill/uBlock/commit/4305bfbdb1) +- [Blocking large media elements also prevents autoplay, regardless of size](https://github.com/gorhill/uBlock/commit/73ce4e6bcf) +- [Do not discard `!#else` block for unknown preprocessor tokens](https://github.com/gorhill/uBlock/commit/6cac645830) +- [Add ability to decode base64 in `urlskip=`](https://github.com/gorhill/uBlock/commit/e81e70937f) +- [Fix images not properly downloading on click](https://github.com/gorhill/uBlock/commit/aec0bd39e3) + +---------- + +# 1.60.0 + +## Fixes / changes + +- [Add advanced setting `dnsResolveEnabled`](https://github.com/gorhill/uBlock/commit/760b2ffce6) +- [Fix contextual menu quirks](https://github.com/gorhill/uBlock/commit/0a6dc47a72) +- [Fix exception thrown in `spoof-css` in Firefox](https://github.com/gorhill/uBlock/commit/11c3a16036) +- [Throttle down repeated scriptlet logging information](https://github.com/gorhill/uBlock/commit/e8f6f3ddff) +- [Improve scriptlet helper `proxy-apply`](https://github.com/gorhill/uBlock/commit/547fae4842) +- [Add an entry in _Report_ page for badware/phishing category](https://github.com/gorhill/uBlock/commit/e18a3707c7) +- [New static network filter option `urlskip=`](https://github.com/gorhill/uBlock/commit/266ec4894b) +- [Rewrite cname uncloaking code to account for new `ipaddress=` option](https://github.com/gorhill/uBlock/commit/6acf97bf51) +- [Avoid using dns.resolve() for proxied DNS resolution](https://github.com/gorhill/uBlock/commit/d5f14ffa32) +- [Add support for `lan`/`loopback` values to `ipaddress=` option](https://github.com/gorhill/uBlock/commit/030d7334e4) +- [New static network filter option `ipaddress=`](https://github.com/gorhill/uBlock/commit/c6dedd253f) +- [Add ability to quote static network option values](https://github.com/gorhill/uBlock/commit/20115697e5) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/e8202af11d) +- [Apply CSP/PP injections to `object` resources](https://github.com/gorhill/uBlock/commit/89f02098fd) +- [Improve `xml-prune` scriptlet](https://github.com/gorhill/uBlock/commit/c8307f58a3) +- [Add support for `application/dash+xml` in `replace=` option](https://github.com/gorhill/uBlock/commit/91125d29cf) +- [Add ability to directly evaluate static network filtering engine](https://github.com/gorhill/uBlock/commit/b7ed3b45ed) +- [Fix `prevent-window-open` for when logger is open](https://github.com/gorhill/uBlock/commit/f552f655cb) +- [Improve `prevent-window-open` scriptlet](https://github.com/gorhill/uBlock/commit/7f11d6216e) +- [Improve `validate-constant` scriptlet helper](https://github.com/gorhill/uBlock/commit/ae5dc6299e) +- [Improve `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/0dcb985601) +- [Improve `prevent-xhr` scriptlet](https://github.com/gorhill/uBlock/commit/3a249f395c) +- [Add noop resources for redirect purpose](https://github.com/gorhill/uBlock/commit/59a9a43a83) +- [Use helper function to lookup safe cookie values](https://github.com/gorhill/uBlock/commit/79e10323ad) +- [Add `checked`/`unchecked` to `set-cookie`](https://github.com/gorhill/uBlock/commit/3e2171f550) (by @ryanbr) +- [Add `allowed`/`denied` to `set-local-storage-item`](https://github.com/gorhill/uBlock/commit/41c2258f91) (by @ryanbr) +- [Fix plain exceptions not overriding block filters using `header=` option](https://github.com/gorhill/uBlock/commit/1cb660b94e) +- [Improve various scriptlets](https://github.com/gorhill/uBlock/commit/56dfdd2568) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/db3dc69bcc) +- [Improve `remove-attr.js` scriptlet](https://github.com/gorhill/uBlock/commit/fb037e97d0) +- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/4f0d1301ab) + +---------- + +# 1.59.0 + +## Fixes / changes + +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/84be9cde6d) +- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/8afd9e233d) +- [Improve `set-constant` scriptlet](https://github.com/gorhill/uBlock/commit/77feb25c4d) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/e785b99338) +- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/66e3a1ad47) +- [Fix CSP/PP header injection in non-document resources](https://github.com/gorhill/uBlock/commit/c90f4933df) +- [Add `trusted-suppress-native-method` scriptlet](https://github.com/gorhill/uBlock/commit/97d11c03c2) +- [Add support for `$currentISODate$` in `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/a3576ea651) +- [Add `essential` and `nonessential` to set-cookie](https://github.com/gorhill/uBlock/commit/37d31a82d8) (by @ryanbr) +- [Fix distance calculation in picker](https://github.com/gorhill/uBlock/commit/9569969b55) +- [Fix bad serialization of Date objects](https://github.com/gorhill/uBlock/commit/c154aaa69c) +- [Fix race condition when loading redirect/scriptlet resources](https://github.com/gorhill/uBlock/commit/896737d098) +- [Improve logging in `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/8eb3b19c69) +- [Add `:matches-prop()` pseudo CSS operator](https://github.com/gorhill/uBlock/commit/aca7674bac) +- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/b4d8750f44) +- [Improve `trusted-replace-node-text` scriptlet](https://github.com/gorhill/uBlock/commit/cb0f65e035) +- [Improve `trusted-replace-(fetch|xhr)-response` scriptlets](https://github.com/gorhill/uBlock/commit/9072772f61) +- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/91ee5bdeae) +- [Add `isodate` as available placeholder for auto-comment](https://github.com/gorhill/uBlock/commit/d5208ee5dd) +- [Improve `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/fa6740a059) +- [Classify generic cosmetic filters with comma as highly generic](https://github.com/gorhill/uBlock/commit/8f81833efc) +- [Raise max buffer size for response body filtering](https://github.com/gorhill/uBlock/commit/82a3992896) +- [Trim end of class tokens in generic cosmetic filtering's surveyor](https://github.com/gorhill/uBlock/commit/8ea1bac80b) +- [Improve `trusted-set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/0e1e4b82c5) + +---------- + +# 1.58.0 + +## Fixes / changes + +- [Fallback to `requestAnimationFrame` when `requestIdleCallback` is not available](https://github.com/gorhill/uBlock/commit/59ffc96e89) +- [Improve `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/ee67cd6284) +- [Replace EasyDutch with AdGuard Dutch](https://github.com/gorhill/uBlock/commit/ca7d2ad61d) +- [Add checksum validation when loading trie buffers in selfie](https://github.com/gorhill/uBlock/commit/0e6d607484) +- [Catch exceptions in API calls for the sake of old Chromium versions](https://github.com/gorhill/uBlock/commit/bb479b0a66) +- [Add `accept`/`reject` to `set-local-storage-item`](https://github.com/gorhill/uBlock/commit/363ad6795c) (by @ryanbr) +- [Use raw string for regex patterns in python scripts](https://github.com/gorhill/uBlock/commit/923452b788) +- [Improve `noeval-if` scriptlet](https://github.com/gorhill/uBlock/commit/4d8ee35ef7) +- [Improve `trusted-set-local-storage-item` scriptlet](https://github.com/gorhill/uBlock/commit/2ccc3135c1) +- [Fix potential corruption when reading serialized data](https://github.com/gorhill/uBlock/commit/c098eb8625) +- [Improve `remove-[attr|class]` scriptlets](https://github.com/gorhill/uBlock/commit/91dfcbef2a) +- [Improve dashboard layout at high zoom factor](https://github.com/gorhill/uBlock/commit/6152f5269e) +- [Add a console pane to the logger](https://github.com/gorhill/uBlock/commit/3b4f02db21) +- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/277e90a4a7) +- [Fix bad date computation in auto-comment feature](https://github.com/gorhill/uBlock/commit/a5f6c35bb0) +- [Fix regression breaking import of `file://` lists](https://github.com/gorhill/uBlock/commit/c223a8cd39) +- [Add `trusted-replace-outbound-text` scriptlet](https://github.com/gorhill/uBlock/commit/21e1ee30ee) +- [Improve `[trusted-]set-cookie` scriptlets](https://github.com/gorhill/uBlock/commit/49ff7cffb1) + +---------- + +# 1.57.2 + +## Fixes / changes + +- [Fix stray lists in redesigned cache storage](https://github.com/gorhill/uBlock/commit/defd68ef7d) + +---------- + +# 1.57.0 + +## Fixes / changes + +- [Do not block large media resources when loaded as top-level document](https://github.com/gorhill/uBlock/commit/3919a16bb8) +- [Properly manage cache storage regarding managed user filters](https://github.com/gorhill/uBlock/commit/90ab1a76ab) +- [Improve `[trusted-]set-cookie` scriptlets](https://github.com/gorhill/uBlock/commit/11a48561e0) +- [Fixed Belgian and Nepali flags for Windows Chromium users](https://github.com/gorhill/uBlock/commit/499c80bd8a) (by @DandelionSprout) +- [Mind that `tabs.sendMessage` can throw](https://github.com/gorhill/uBlock/commit/3f7374c1f1) +- [Improve `set-cookie` scriptlet](https://github.com/gorhill/uBlock/commit/9146134874) +- [Append wildcard character only when filter starts & ends with `/`](https://github.com/gorhill/uBlock/commit/1cb190e102) +- [Fix failure to create popup logger window sometimes](https://github.com/gorhill/uBlock/commit/c8762945d9) +- [Improve json-prune-related scriptlets](https://github.com/gorhill/uBlock/commit/e7a0f8c781) +- [Support maximizing editor to viewport size](https://github.com/gorhill/uBlock/commit/664dd95700) +- [Add advanced setting to force popup panel orientation](https://github.com/gorhill/uBlock/commit/0d77ccded7) +- [Add checkboxes to "My filters" pane](https://github.com/gorhill/uBlock/commit/46ea5519c1) +- [Assume UTF-8 when no encoding can be looked up](https://github.com/gorhill/uBlock/commit/63acdcbdeb) +- [Fix issue with "My filters" pane on mobile](https://github.com/gorhill/uBlock/commit/24d94e559d) +- [Support aborting "Pick" mode in element picker](https://github.com/gorhill/uBlock/commit/a557f62112) +- [Remove sections with no lists in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/0f4e50db07) +- [Add "Social widgets", "Cookie notices" sections in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/21a76e32a1) +- [No longer disable generic cosmetic filters by default on mobile](https://github.com/gorhill/uBlock/commit/7a768e7b1a) +- [Improve `spoof-css` scriptlet](https://github.com/gorhill/uBlock/commit/603239970d) +- [Make asset updater compatible with non-persistent background page](https://github.com/gorhill/uBlock/commit/96704f2fda) +- [Move dragbar to the top of element picker dialog](https://github.com/gorhill/uBlock/commit/953c978d59) + - [Move "Quit" button to top bar in element picker](https://github.com/gorhill/uBlock/commit/6266c4718d) +- [Add advanced setting `requestStatsDisabled`](https://github.com/gorhill/uBlock/commit/e02ea69c86) +- [First lookup matching stock lists when importing URLs](https://github.com/gorhill/uBlock/commit/2b16a10b82) +- [Reset filter lists in worker when creating filters via "Block element"](https://github.com/gorhill/uBlock/commit/b0067b79d5) +- [Remove trusted-source requirement when using `badfilter`](https://github.com/gorhill/uBlock/commit/3c299b8632) +- [Redesign cache storage](https://github.com/gorhill/uBlock/commit/086766a924) +- [Don't match network filter-derived regexes against non-network URIs](https://github.com/gorhill/uBlock/commit/2262a129ec) +- [Remove obsolete trusted directives](https://github.com/gorhill/uBlock/commit/439a059cca) +- [Support logging details of calls to `json-prune-fetch-response`](https://github.com/gorhill/uBlock/commit/e527a8f9af) +- [Escape special whitespace characters in attribute values](https://github.com/gorhill/uBlock/commit/be3e366019) + +---------- + +# 1.56.0 + +## Fixes / changes + +- [Mind that multiple `uritransform` may apply to a single request](https://github.com/gorhill/uBlock/commit/2a5a444482) +- [Fix incorrect built-in filtering expression in logger](https://github.com/gorhill/uBlock/commit/9bff0c2f94) +- [Fix improper invalidation of valid `uritransform` exception filters](https://github.com/gorhill/uBlock/commit/21ec5a277c) +- [Improve `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/b22b3d729b) +- [Fix Chartbeat flicker control `div`'s](https://github.com/gorhill/uBlock/commit/397d6d47b9) (by @ryanbr) +- [Fix potential exfiltration of browsing history by a rogue list author through `permissions=`](https://github.com/gorhill/uBlock/commit/7b138b58c6) +- [Ignore event handler-related attributes in `set-attr` scriptlet](https://github.com/gorhill/uBlock/commit/3037ae5f04) (suggested by @distinctmondaylilac) +- [Fix potential exfiltration of browsing history by a rogue list author through `csp=`](https://github.com/gorhill/uBlock/commit/db5656f607) (reported by @distinctmondaylilac) +- [Output scriptlet logging information to the logger](https://github.com/gorhill/uBlock/commit/869a653fdf) +- [Fix decompiling of scriptlet parameters](https://github.com/gorhill/uBlock/commit/49dd68ef3d) +- [Add support for `extraMatch` in `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/45e62c939f) +- [Remove minimum height constraint from "My filters" pane](https://github.com/gorhill/uBlock/commit/f624c835c2) +- [Unregister all scriptlets when disabling uBO on a specific site](https://github.com/gorhill/uBlock/commit/13dcd844a7) +- [Allow `uritransform` to process the hash part of a URL](https://github.com/gorhill/uBlock/commit/b19094339f) +- [Remember presentation state of "My rules" pane](https://github.com/gorhill/uBlock/commit/3d1b100646) +- [Fix improperly assembled `!#include` sublists](https://github.com/gorhill/uBlock/commit/0e00010b91) +- [Mark procedural filters with pseudo-elements selector as invalid](https://github.com/gorhill/uBlock/commit/757b8be9cd) +- [Prevent access to picker when "My filters" is not enabled](https://github.com/gorhill/uBlock/commit/bc641fc024) +- [Provide visual feedback when applying changes in "Filter lists" pane](https://github.com/gorhill/uBlock/commit/c4bb8a0f64) +- [Empty query parameters must still use `=`](https://github.com/gorhill/uBlock/commit/1cac61a9a4) +- [Add support to toggle no-scripting switch with keyboard shortcut](https://github.com/gorhill/uBlock/commit/936444883f) +- [Do not exceed rate-limited calls to `handlerBehaviorChanged()`](https://github.com/gorhill/uBlock/commit/63fe18a761) +- [Shield some code paths against potentially tampered global properties](https://github.com/gorhill/uBlock/commit/534d877e95) (in scriptlets) +- [Do not prevent applying changes when lists are updating](https://github.com/gorhill/uBlock/commit/f6b726136c) +- [Add `elements` vararg to `prevent-addEventListener` scriptlet](https://github.com/gorhill/uBlock/commit/060f9d68fc) +- [Do not use tab character as field separator](https://github.com/gorhill/uBlock/commit/a9eb9630cf) (in logger) +- [Prevent `:others()` from hiding `html` tag](https://github.com/gorhill/uBlock/commit/9a104bcbd2) + +---------- + +# 1.55.0 + +## Fixes / changes + +- [Discard repeating adjacent entries in the logger](https://github.com/gorhill/uBlock/commit/55e4cee6e8) +- [Mind drop events in filter expression field of logger](https://github.com/gorhill/uBlock/commit/c8b7d1a526) +- [Improve `xml-prune` scriptlet](https://github.com/gorhill/uBlock/commit/d7063a052f) +- [Fix message entries overflowing in logger](https://github.com/gorhill/uBlock/commit/49c8310e22) +- [Add support for `application/x-javascript` in `replace=` option](https://github.com/gorhill/uBlock/commit/abeadf18eb) +- [Extend support for differential updates to imported lists](https://github.com/gorhill/uBlock/commit/443c1f81e1) +- [Add detection of mismatched `!#if`-`!#endif` in linter](https://github.com/gorhill/uBlock/commit/9f4b31a96f) +- [Support links to update lists which are differential update-friendly](https://github.com/gorhill/uBlock/commit/5e3f9695b4) +- [Remove "Purge all caches" button from "Filter lists" pane](https://github.com/gorhill/uBlock/commit/bd7ce41224) +- [Add support for `all` list token in updater-link feature](https://github.com/gorhill/uBlock/commit/14926913f7) +- [Fix logging of broad exception filter `#@#+js()`](https://github.com/gorhill/uBlock/commit/4305ea9c0c) +- [Improve `no-xhr-if` scriptlet](https://github.com/gorhill/uBlock/commit/d01ad24291) +- [Ensure cache storage backend is selected before access](https://github.com/gorhill/uBlock/commit/bfa28b960e) +- [Fix popup panel rendering when embedded in logger](https://github.com/gorhill/uBlock/commit/4183ce477a) +- [Add visual hint in support information re. differential update](https://github.com/gorhill/uBlock/commit/7e44db763e) +- [Remove obsolete web accessible resources](https://github.com/gorhill/uBlock/commit/310bfec6a1) +- [Rename `urltransform` to `uritransform`](https://github.com/gorhill/uBlock/commit/cdc5e89f52) +- [Vertically expand/collapse in steps in dom inspector](https://github.com/gorhill/uBlock/commit/885bc3875b) +- [Reset the DOM inspector when URL in top context changes](https://github.com/gorhill/uBlock/commit/c744c87607) +- [Support shadow-piercing combinator `>>>` in `trusted-click-element`](https://github.com/gorhill/uBlock/commit/941077a25c) +- [Isolate DOM inspector layers from page context](https://github.com/gorhill/uBlock/commit/ee83a4304a) +- [Refactoring: Replace DOM events with broadcast channels](https://github.com/gorhill/uBlock/commit/67fb969572) +- [Support non-default sticky lists](https://github.com/gorhill/uBlock/commit/ea7d411bc2) +- [Add enableLazyLoad function](https://github.com/gorhill/uBlock/commit/a8cf08325d) (by @spazmodius ) +- [Change frequency of save-to-storage blocking stats](https://github.com/gorhill/uBlock/commit/5a338b7210) +- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/6aeab2adbc) +- [Catch cases of `! Expires:` field with no value](https://github.com/gorhill/uBlock/commit/9ce958432d) + +---------- + +# 1.54.0 + +## New + +Differential update of filter lists, as a result of discussions at . Resulting spec is [here](https://github.com/ameshkov/diffupdates). + +![inkscape](https://github.com/gorhill/uBlock/assets/585534/3ee3567b-e24f-4d39-90e2-915b39a114fb) + +The goal is to **NOT** be ranked among the "most popular projects" by bandwidth usage (as per [jsDelivr's public stats](https://www.jsdelivr.com/statistics)): + +![jsDelivr stats](https://github.com/gorhill/uBlock/assets/585534/96c7e0fa-ffcc-4879-a01e-e340b4f0fa9e) + +It is expected that differential updates will lower both requests and bandwidth usage. + +To benefit the much shorter update period enabled by differential updates, you must let uBO auto-update the filter lists. Forcing a manual update will prevent differential updates until the next time a list auto-update. + +## Fixes / changes + +- [Enable path for native `has()` selector in Firefox](https://github.com/gorhill/uBlock/commit/c5724c1cce) +- [Allow scriptlets to be injected in `about:blank`](https://github.com/gorhill/uBlock/commit/3fd2588650) +- [Fix faulty `as` vararg in `set-constant` scriptlet](https://github.com/gorhill/uBlock/commit/c292a90b90) +- [Add support to redirect to `noop.json`](https://github.com/gorhill/uBlock/commit/bd8a91ed3a) +- [More improvements to the `google-ima` shim script](https://github.com/gorhill/uBlock/commit/c1d8f5908d) (by @kzar) +- [All exceptions filters are exempt from requiring a trusted source](https://github.com/gorhill/uBlock/commit/d2b8d990e6) +- [Add `trusted-set-session-storage-item` scriptlet](https://github.com/gorhill/uBlock/commit/f3d6a21e7a) +- [Allow the use of quotes in `set-cookie` scriptlet ](https://github.com/gorhill/uBlock/commit/7c562d0c5c) +- [Allow the use of quotes in `set-(local|session)-storage-item`](https://github.com/gorhill/uBlock/commit/decafc5cbf) +- [Add ability to trigger cookie removal on specific events](https://github.com/gorhill/uBlock/commit/ef311ddbec) +- [Ensure CSSTree does not hold a reference onto last parsed string](https://github.com/gorhill/uBlock/commit/1dba557c9a) +- [Lower minimum Expires value to 4h](https://github.com/gorhill/uBlock/commit/2360bc02f3) +- [Properly reset needle length in unserialized buffer](https://github.com/gorhill/uBlock/commit/8ed1ad9c9d) +- [Add additional flags to regional lists](https://github.com/gorhill/uBlock/commit/0962366524) (by @DandelionSprout) +- [Harden scriptlets which need to serialize function code into string](https://github.com/gorhill/uBlock/commit/7823d98070) +- [Reset `g` regexes before use in `rmnt`/`rpnt` scriptlets](https://github.com/gorhill/uBlock/commit/cdc3f66a6b) +- [Apply response filtering according to mime type](https://github.com/gorhill/uBlock/commit/6417f54299) +- [Add t/f to set-cookie](https://github.com/gorhill/uBlock/commit/4ab1c36ac9) (by @ryanbr) +- [Have `urltransform=` use the same syntax as `replace=`](https://github.com/gorhill/uBlock/commit/d7c99b46e6) +- [Implement network filter option `replace=`](https://github.com/gorhill/uBlock/commit/7c3e060c01) (Firefox only because [filterResponseData](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData#browser_compatibility)) +- [Prevent evaluating the SNFE until fully loaded](https://github.com/gorhill/uBlock/commit/89b272775a) +- [Add support for differential update of filter lists](https://github.com/gorhill/uBlock/commit/d05ff8ffeb) + +---------- diff -Nru ublock-origin-1.46.0+dfsg/CONTRIBUTING.md ublock-origin-1.62.0+dfsg/CONTRIBUTING.md --- ublock-origin-1.46.0+dfsg/CONTRIBUTING.md 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/CONTRIBUTING.md 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,31 @@ -# Submitting issues +# Contributions -Submit on . +Please refer to the sections below to find the appropriate destination for your contributions. Thank you for your support! -Issue tracker here is read-only for non-[prior contributors](https://github.com/gorhill/uBlock/graphs/contributors). +--- + +### Translations + +You can help translate uBO via [Crowdin](https://crowdin.com/project/ublock). + +--- + +### Reporting Issues + +The issue tracker in this repository is deprecated. Use the links below to report your issues. + +#### Support Forum + +For support, questions, or assistance, please visit [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/). + +#### Filter List Issues + +Report issues related to filter lists or broken website functionality in the [uAssets issue tracker](https://github.com/uBlockOrigin/uAssets/issues). + +#### uBlock Origin (uBO) Issues + +For issues specifically about uBO, please use the [uBO issue tracker](https://github.com/uBlockOrigin/uBlock-issues/issues). + +#### uBO Lite (uBOL) Issues + +For issues related to the Manifest Version 3 (MV3) variant, report them in the [uBOL issue tracker](https://github.com/uBlockOrigin/uBOL-home/issues). diff -Nru ublock-origin-1.46.0+dfsg/MANIFESTO.md ublock-origin-1.62.0+dfsg/MANIFESTO.md --- ublock-origin-1.46.0+dfsg/MANIFESTO.md 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/MANIFESTO.md 2025-02-09 18:18:39.000000000 +0000 @@ -1,10 +1,7 @@ -### This is uBlock's manifesto +uBlock Origin (uBO)'s manifesto: -1. The **user decides** what web content is acceptable or not in their browser. +The **user decides** what web content is acceptable in their browser. -The uBlock project does not support Adblock Plus' _"Acceptable Ads Manifesto"_, -because the _"Acceptable Ads"_ marketing campaign is really the business -plan of a for-profit entity. +The uBO project does not support Adblock Plus' _"Acceptable Ads Manifesto"_ because the _"Acceptable Ads"_ marketing campaign is the business plan of a for-profit entity. -Users are best placed to know what is or is not acceptable to them. uBlock's -sole purpose is to give users the means to enforce their own choices. +Users are the best placed to know what is or is not acceptable to them. uBO's sole purpose is to give users the means to enforce their choices. diff -Nru ublock-origin-1.46.0+dfsg/Makefile ublock-origin-1.62.0+dfsg/Makefile --- ublock-origin-1.46.0+dfsg/Makefile 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/Makefile 2025-02-09 18:18:39.000000000 +0000 @@ -1,11 +1,12 @@ # https://stackoverflow.com/a/6273809 run_options := $(filter-out $@,$(MAKECMDGOALS)) -.PHONY: all clean test lint chromium firefox npm dig mv3 mv3-quick \ +.PHONY: all clean cleanassets test lint chromium opera firefox npm dig \ + mv3 mv3-quick mv3-chromium mv3-firefox \ compare maxcost medcost mincost modifiers record wasm -sources := $(wildcard assets/resources/* dist/version src/* src/*/* src/*/*/* src/*/*/*/*) -platform := $(wildcard platform/* platform/*/* platform/*/*/* platform/*/*/*/*) +sources := $(wildcard assets/* assets/*/* dist/version src/* src/*/* src/*/*/* src/*/*/*/*) +platform := $(wildcard platform/* platform/*/* platform/*/*/* platform/*/*/*/* platform/*/*/*/*/*) assets := dist/build/uAssets all: chromium firefox npm @@ -16,6 +17,12 @@ # Build the extension for Chromium. chromium: dist/build/uBlock0.chromium +dist/build/uBlock0.opera: tools/make-opera.sh $(sources) $(platform) $(assets) + tools/make-opera.sh + +# Build the extension for Opera. +opera: dist/build/uBlock0.opera + dist/build/uBlock0.firefox: tools/make-firefox.sh $(sources) $(platform) $(assets) tools/make-firefox.sh all @@ -49,8 +56,15 @@ dig-snfe: dig cd dist/build/uBlock0.dig && npm run snfe $(run_options) -mv3: tools/make-mv3.sh $(sources) $(platform) - tools/make-mv3.sh +dist/build/uBOLite.chromium: tools/make-mv3.sh $(sources) $(platform) + tools/make-mv3.sh chromium + +mv3-chromium: dist/build/uBOLite.chromium + +dist/build/uBOLite.firefox: tools/make-mv3.sh $(sources) $(platform) + tools/make-mv3.sh firefox + +mv3-firefox: dist/build/uBOLite.firefox mv3-quick: tools/make-mv3.sh $(sources) $(platform) tools/make-mv3.sh quick @@ -64,6 +78,8 @@ clean: rm -rf dist/build tmp/node_modules +cleanassets: + rm -rf dist/build/mv3-data dist/build/uAssets # Not real targets, just convenient for auto-completion at shell prompt compare: diff -Nru ublock-origin-1.46.0+dfsg/README.md ublock-origin-1.62.0+dfsg/README.md --- ublock-origin-1.46.0+dfsg/README.md 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/README.md 2025-02-09 18:18:39.000000000 +0000 @@ -5,6 +5,7 @@ [![Badge NPM]][NPM] [![Badge Mozilla]][Mozilla] [![Badge Chrome]][Chrome] +[![Badge Edge]][Edge] *** @@ -22,54 +23,83 @@

Get uBlock Origin for Firefox -Get uBlock Origin for Chromium Get uBlock Origin for Microsoft Edge Get uBlock Origin for Opera +Get uBlock Origin for Thunderbird

*** -uBO is **NOT** an "ad blocker"; it is a [wide-spectrum content blocker][Blocking] for Chromium and Firefox with CPU and memory efficiency as primary features. After a new installation, the default behavior of uBO is to block ads, trackers, and malware sites through [EasyList][EasyList], [EasyPrivacy][EasyPrivacy], [Peter Lowe's Blocklist][Peter Lowe's Blocklist], [Online Malicious URL Blocklist][Malicious Blocklist], and uBO's [filter lists][uBO Filters]. +

+Get uBlock Origin for Chromium
+IMPORTANT: About Google Chrome's "This extension may soon no longer be supported" +

+ +*** + +uBlock Origin (uBO) is a CPU and memory-efficient [wide-spectrum content blocker][Blocking] for Chromium and Firefox. It blocks ads, trackers, coin miners, popups, annoying anti-blockers, malware sites, etc., by default using [EasyList][EasyList], [EasyPrivacy][EasyPrivacy], [Peter Lowe's Blocklist][Peter Lowe's Blocklist], [Online Malicious URL Blocklist][Malicious Blocklist], and uBO [filter lists][uBO Filters]. There are many other lists available to block even more. Hosts files are also supported. uBO uses the EasyList filter syntax and [extends][Extended Syntax] the syntax to work with custom rules and filters. + +You may easily unselect any preselected filter lists if you think uBO blocks too much. For reference, Adblock Plus installs with only EasyList, ABP filters, and Acceptable Ads enabled by default. + +It is important to note that using a blocker is **NOT** [theft]. Do not fall for this creepy idea. The _ultimate_ logical consequence of `blocking = theft` is the criminalization of the inalienable right to privacy. + +Ads, "unintrusive" or not, are just the visible portion of the privacy-invading means entering your browser when you visit most sites. **uBO's primary goal is to help users neutralize these privacy-invading methods** in a way that welcomes those users who do not wish to use more technical means. *** * [Documentation](#documentation) -* [General Information](#general-information) * [Installation](#installation) + * [Firefox](#firefox) + * [Thunderbird](#thunderbird) * [Chromium](#chromium) - * [Firefox / Firefox for Android](#firefox--firefox-for-android) + * [All Programs](#all-programs) + * [Enterprise Deployment](#enterprise-deployment) * [Release History](#release-history) +* [Translations](#translations) * [About](#about) -* [License](#license) -* [Privacy Policy] -* [Wiki](https://github.com/gorhill/uBlock/wiki) ## Documentation - Basic mode | Advanced-user mode -:----------:|:------------------: -[Popup user interface] | [A point-and-click firewall that is configurable on a per-site basis][Dynamic Filters] -
.
.
|
Configure as you wish.
The image shows 3rd-party scripts and frames blocked by default everywhere.
+ + + + + + + + + + + + + + + + + +
Basic ModeAdvanced Mode
The simple popup user interface for an install-it-and-forget-it type of installation that is configured optimally by default.The advanced popup user interface includes a point-and-click firewall that is configurable on a per-site basis.
-Visit the [wiki][Wiki] for documentation. +Visit the [Wiki][Wiki] for documentation. For support, questions, or help, visit [/r/uBlockOrigin][Reddit]. -## General Information +## Installation -uBO is **NOT** an "ad blocker"; it is a wide-spectrum content blocker. uBO blocks ads through the EasyList filter syntax and [extends][Extended Syntax] the syntax to work with custom rules and filters. Furthermore, the advanced mode allows uBO to work in [default-deny mode][Default Deny], which will cause [all 3rd-party network requests][3rd Party Requests] to be blocked by default unless allowed by the user. +[Required Permissions][Permissions] -It is important to note that using a blocker is **NOT** [theft]. Do not fall for this creepy idea. The _ultimate_ logical consequence of `blocking = theft` is the criminalization of the inalienable right to privacy. +#### Firefox -Ads, "unintrusive" or not, are just the visible portion of the privacy-invading means entering your browser when you visit most sites. **uBO's primary goal is to help users neutralize these privacy-invading methods** in a way that welcomes those users who do not wish to use more technical, involved means (such as [uMatrix]). +[Firefox Add-ons][Mozilla] -EasyList, EasyPrivacy, Peter Lowe's Blocklist, Online Malicious URL Blocklist, and uBO's filter lists are default enabled when you install uBO. Many other lists are available to block trackers, analytics, and more. Hosts files are also supported. +[Development Builds][Beta] -Once you install uBO, you may easily unselect any preselected filter lists if you think uBO blocks too much. For reference, Adblock Plus installs with only EasyList, ABP filters, and Acceptable Ads enabled by default. +uBO [works best][Works Best] on Firefox and is available for desktop and Android versions. -## Installation +#### Thunderbird -[Required Permissions][Permissions] +[Thunderbird Add-ons][Thunderbird] + +In Thunderbird, uBlock Origin does not affect emails, just feeds. #### Chromium @@ -79,21 +109,13 @@ [Opera Add-ons][Opera] -[Development Build][Chrome Dev] +[Development Builds][Chrome Dev] uBO should be compatible with any Chromium-based browser. -#### Firefox / Firefox for Android - -[Firefox Add-ons][Mozilla] - -[Development Build][Beta] +#### All Programs -#### All Browsers - -Do **NOT** use any other content blocker concurrently with uBO to benefit from its higher efficiency. uBO will [perform][Performance] as well as or better than most of the other popular ad blockers. Other blockers can prevent uBO's privacy or anti-blocker-defusing features from working correctly. - -Do **NOT** use uBO along with other [similarly-purposed blockers][Similarly-Purposed]. +Do **NOT** use uBO with any other content blocker. uBO [performs][Performance] as well as or better than most popular blockers. Other blockers can prevent uBO's privacy or anti-blocker-defusing features from working correctly. [Manual Installation][Manual Installation] @@ -105,36 +127,37 @@ [Releases Page][Releases] +## Translations + +Help translate uBO via [Crowdin][Crowdin]. + ## About [Manifesto][Manifesto] -Free. Open-source. For users by users. No donations sought. - -Without the preset filter lists, this extension is nothing. If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +[Privacy Policy][Privacy Policy] -You can help contribute by translating uBO on [Crowdin]. +[GPLv3 License][License] -## License +Free. Open-source. For users by users. No donations sought. -[GPLv3][License] +If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which are available to use by all for free. [Peter Lowe's Blocklist]: https://pgl.yoyo.org/adservers/ [Malicious Blocklist]: https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist -[3rd Party Requests]: https://requestpolicycontinued.github.io/#what-are-cross-site-requests -[Similarly-Purposed]: https://twitter.com/gorhill/status/1033706103782170625 [Performance]: https://www.debugbear.com/blog/chrome-extension-performance-2021#how-do-ad-blockers-and-privacy-tools-affect-browser-performance [EasyPrivacy]: https://easylist.to/#easyprivacy -[Chrome Dev]: https://chrome.google.com/webstore/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii +[Thunderbird]: https://addons.thunderbird.net/thunderbird/addon/ublock-origin/ +[Chrome Dev]: https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii [EasyList]: https://easylist.to/#easylist [Mozilla]: https://addons.mozilla.org/addon/ublock-origin/ [Crowdin]: https://crowdin.com/project/ublock -[Chrome]: https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm +[Chrome]: https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm [Reddit]: https://www.reddit.com/r/uBlockOrigin/ -[Theft]: https://twitter.com/LeaVerou/status/518154828166725632 +[Theft]: https://x.com/LeaVerou/status/518154828166725632 [Opera]: https://addons.opera.com/extensions/details/ublock/ [Edge]: https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak [NPM]: https://www.npmjs.com/package/@gorhill/ubo-core @@ -144,27 +167,22 @@ [Nicole Rolls]: https://github.com/nicole-ashley - -[Popup User Interface]: https://github.com/gorhill/uBlock/wiki/Quick-guide:-popup-user-interface [Manual Installation]: https://github.com/gorhill/uBlock/tree/master/dist#install [Extended Syntax]: https://github.com/gorhill/uBlock/wiki/Static-filter-syntax#extended-syntax -[Dynamic Filters]: https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-quick-guide [Privacy Policy]: https://github.com/gorhill/uBlock/wiki/Privacy-policy -[Default Deny]: https://github.com/gorhill/uBlock/wiki/Dynamic-filtering:-default-deny [uBO Filters]: https://github.com/uBlockOrigin/uAssets/tree/master/filters [Permissions]: https://github.com/gorhill/uBlock/wiki/Permissions [Commit Rate]: https://github.com/gorhill/uBlock/commits/master +[Works Best]: https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox [Deployment]: https://github.com/gorhill/uBlock/wiki/Deploying-uBlock-Origin [Blocking]: https://github.com/gorhill/uBlock/wiki/Blocking-mode [Releases]: https://github.com/gorhill/uBlock/releases -[UMatrix]: https://github.com/gorhill/uMatrix [Issues]: https://github.com/uBlockOrigin/uBlock-issues/issues [Beta]: https://github.com/gorhill/uBlock/blob/master/dist/README.md#for-beta-version [Wiki]: https://github.com/gorhill/uBlock/wiki - [Badge Localization]: https://d322cqt584bo4o.cloudfront.net/ublock/localized.svg @@ -172,6 +190,6 @@ [Badge Mozilla]: https://img.shields.io/amo/rating/ublock-origin?label=Firefox [Badge License]: https://img.shields.io/badge/License-GPLv3-blue.svg [Badge Chrome]: https://img.shields.io/chrome-web-store/rating/cjpalhdlnbpafiamejdnhcphjbkeiagm?label=Chrome +[Badge Edge]: https://img.shields.io/badge/dynamic/json?label=Edge&color=brightgreen&query=%24.averageRating&suffix=%2F%35&url=https%3A%2F%2Fmicrosoftedge.microsoft.com%2Faddons%2Fgetproductdetailsbycrxid%2Fodfafepnkmbhccpbejgmiehpchacaeak [Badge Issues]: https://img.shields.io/github/issues/uBlockOrigin/uBlock-issues [Badge NPM]: https://img.shields.io/npm/v/@gorhill/ubo-core - diff -Nru ublock-origin-1.46.0+dfsg/RELEASE.HEAD.md ublock-origin-1.62.0+dfsg/RELEASE.HEAD.md --- ublock-origin-1.46.0+dfsg/RELEASE.HEAD.md 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/RELEASE.HEAD.md 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,12 @@ +[Commits to Master Since This Release](https://github.com/gorhill/uBlock/compare/%version%...master) + +#### How to Install the Developer Build: + +- **Firefox**: Download the build from [uBlock0_%version%.firefox.signed.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.firefox.signed.xpi). + - uBO works best on Firefox, check out [why](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox). + +- **Chromium**: Install directly from the [Chrome Web Store](https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii). + +- **Thunderbird**: Download [uBlock0_%version%.thunderbird.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.thunderbird.xpi) and drag it into Thunderbird's _Add-ons Manager_ (requires Thunderbird 91+). + +- **Node.js**: You can import from [npm](https://www.npmjs.com/package/@gorhill/ubo-core) or download and unzip [uBlock0_%version%.npm.tgz](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.npm.tgz). diff -Nru ublock-origin-1.46.0+dfsg/assets/assets.dev.json ublock-origin-1.62.0+dfsg/assets/assets.dev.json --- ublock-origin-1.46.0+dfsg/assets/assets.dev.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/assets/assets.dev.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,932 @@ +{ + "assets.json": { + "content": "internal", + "updateAfter": 13, + "contentURL": [ + "https://raw.githubusercontent.com/gorhill/uBlock/master/assets/assets.dev.json", + "assets/assets.dev.json" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/ublock/assets.dev.json", + "https://ublockorigin.pages.dev/ublock/assets.dev.json", + "https://cdn.jsdelivr.net/gh/gorhill/uBlock@master/assets/assets.dev.json", + "https://cdn.statically.io/gh/gorhill/uBlock/master/assets/assets.dev.json" + ] + }, + "public_suffix_list.dat": { + "content": "internal", + "updateAfter": 19, + "contentURL": [ + "https://publicsuffix.org/list/public_suffix_list.dat", + "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat" + ] + }, + "ublock-badlists": { + "content": "internal", + "updateAfter": 29, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/badlists.txt", + "assets/ublock/badlists.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/badlists.txt", + "https://ublockorigin.pages.dev/filters/badlists.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badlists.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt" + ] + }, + "ublock-filters": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Ads", + "tags": "ads", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/filters.txt", + "assets/ublock/filters.min.txt", + "assets/ublock/filters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt", + "https://ublockorigin.pages.dev/filters/filters.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-badware": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Badware risks", + "tags": "malware security", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/badware.txt", + "assets/ublock/badware.min.txt", + "assets/ublock/badware.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt", + "https://ublockorigin.pages.dev/filters/badware.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets", + "instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks" + }, + "ublock-privacy": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Privacy", + "tags": "privacy", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/privacy.txt", + "assets/ublock/privacy.min.txt", + "assets/ublock/privacy.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt", + "https://ublockorigin.pages.dev/filters/privacy.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-unbreak": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Unbreak", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/unbreak.txt", + "assets/ublock/unbreak.min.txt", + "assets/ublock/unbreak.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt", + "https://ublockorigin.pages.dev/filters/unbreak.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "ublock-quick-fixes": { + "content": "filters", + "group": "default", + "parent": "uBlock filters", + "title": "uBlock filters – Quick fixes", + "contentURL": [ + "https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt", + "assets/ublock/quick-fixes.min.txt", + "assets/ublock/quick-fixes.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt", + "https://ublockorigin.pages.dev/filters/quick-fixes.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "adguard-generic": { + "content": "filters", + "group": "ads", + "off": true, + "title": "AdGuard – Ads", + "tags": "ads", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-mobile": { + "content": "filters", + "group": "ads", + "off": true, + "title": "AdGuard – Mobile Ads", + "tags": "ads mobile", + "ua": "mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist": { + "content": "filters", + "group": "ads", + "title": "EasyList", + "tags": "ads", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt", + "assets/thirdparties/easylist/easylist.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist.txt" + ], + "supportURL": "https://easylist.to/" + }, + "adguard-spyware-url": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "AdGuard URL Tracking Protection", + "tags": "privacy", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-spyware": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "AdGuard Tracking Protection", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "block-lan": { + "content": "filters", + "group": "privacy", + "off": true, + "title": "Block Outsider Intrusion into LAN", + "tags": "privacy security", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/lan-block.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/lan-block.txt", + "https://ublockorigin.pages.dev/filters/lan-block.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/lan-block.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "easyprivacy": { + "content": "filters", + "group": "privacy", + "title": "EasyPrivacy", + "tags": "privacy", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt", + "assets/thirdparties/easylist/easyprivacy.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easyprivacy.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt", + "https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt" + ], + "supportURL": "https://easylist.to/" + }, + "urlhaus-1": { + "content": "filters", + "group": "malware", + "title": "Online Malicious URL Blocklist", + "contentURL": [ + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt" + ], + "cdnURLs": [ + "https://curbengh.github.io/malware-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.pages.dev/urlhaus-filter-ag-online.txt" + ], + "supportURL": "https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist" + }, + "curben-phishing": { + "content": "filters", + "group": "malware", + "off": true, + "title": "Phishing URL Blocklist", + "contentURL": "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", + "cdnURLs": [ + "https://curbengh.github.io/phishing-filter/phishing-filter.txt", + "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", + "https://phishing-filter.pages.dev/phishing-filter.txt" + ], + "supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist" + }, + "adguard-cookies": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "AdGuard – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "ublock-cookies-adguard": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "fanboy-cookiemonster": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", + "off": true, + "title": "EasyList – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-cookies.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "ublock-cookies-easylist": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "adguard-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "AdGuard – Social Widgets", + "tags": "annoyances social", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "fanboy-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "EasyList – Social Widgets", + "tags": "annoyances social", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-social.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "supportURL": "https://easylist.to/" + }, + "fanboy-thirdparty_social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "off": true, + "title": "Fanboy – Anti-Facebook", + "tags": "privacy", + "contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt", + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" + }, + "adguard-popup-overlays": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Popup Overlays", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-mobile-app-banners": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Mobile App Banners", + "tags": "annoyances mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-other-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Other Annoyances", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-widgets": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Widgets", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Other Annoyances", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-chat": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Chat Widgets", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-newsletters": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Newsletter Notices", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-newsletters.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-newsletters.txt" + ], + "supportURL": "https://easylist.to/" + }, + "easylist-notifications": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Notifications", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-notifications.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-notifications.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-notifications.txt" + ], + "supportURL": "https://easylist.to/" + }, + "ublock-annoyances": { + "content": "filters", + "group": "annoyances", + "off": true, + "title": "uBlock filters – Annoyances", + "tags": "annoyances", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt", + "https://ublockorigin.pages.dev/filters/annoyances.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "dpollock-0": { + "content": "filters", + "group": "multipurpose", + "updateAfter": 13, + "off": true, + "title": "Dan Pollock’s hosts file", + "tags": "ads privacy security", + "contentURL": "https://someonewhocares.org/hosts/hosts", + "supportURL": "https://someonewhocares.org/hosts/" + }, + "plowe-0": { + "content": "filters", + "group": "multipurpose", + "updateAfter": 13, + "title": "Peter Lowe’s Ad and tracking server list", + "tags": "ads privacy security", + "preferred": true, + "contentURL": [ + "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", + "assets/thirdparties/pgl.yoyo.org/as/serverlist.txt", + "assets/thirdparties/pgl.yoyo.org/as/serverlist" + ], + "supportURL": "https://pgl.yoyo.org/adservers/" + }, + "ALB-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇦🇱al 🇽🇰xk: Adblock List for Albania", + "tags": "ads albania shqipja", + "lang": "sq", + "contentURL": "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt", + "supportURL": "https://github.com/AnXh3L0/blocklist" + }, + "ara-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR", + "tags": "ads arabic اَلْعَرَبِيَّةُ‎", + "lang": "ar", + "contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=98" + }, + "BGR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇧🇬bg: Bulgarian Adblock list", + "tags": "ads bulgarian България macedonian Македонија", + "lang": "bg mk", + "contentURL": "https://stanev.org/abp/adblock_bg.txt", + "supportURL": "https://stanev.org/abp/" + }, + "CHN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)", + "tags": "ads chinese 中文", + "lang": "ug zh", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/224.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "CZE-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak", + "tags": "ads czech česká slovak slovenská", + "lang": "cs sk", + "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt", + "supportURL": "https://github.com/tomasko126/easylistczechandslovak" + }, + "DEU-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany", + "tags": "ads german deutschland luxembourgish lëtzebuerg romansh", + "lang": "de dsb hsb lb rm", + "contentURL": [ + "https://easylist.to/easylistgermany/easylistgermany.txt", + "https://easylist-downloads.adblockplus.org/easylistgermany.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=90" + }, + "EST-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇪ee: Eesti saitidele kohandatud filter", + "tags": "ads estonian", + "lang": "et", + "contentURL": "https://adblock.ee/list.txt", + "supportURL": "https://adblock.ee" + }, + "FIN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇫🇮fi: Adblock List for Finland", + "tags": "ads finnish", + "lang": "fi", + "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt", + "supportURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition" + }, + "FRA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇫🇷fr 🇨🇦ca: AdGuard Français", + "tags": "ads french", + "lang": "ar br ff fr lb oc son", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "GRC-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter", + "tags": "ads greek", + "lang": "el", + "contentURL": "https://www.void.gr/kargig/void-gr-filters.txt", + "supportURL": "https://github.com/kargig/greek-adblockplus-filter" + }, + "HRV-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters", + "tags": "ads croatian serbian bosnian", + "lang": "bs hr sr", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/SerboCroatianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/SerboCroatianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt#readme" + }, + "HUN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇺hu: hufilter", + "tags": "ads hungarian", + "lang": "hu", + "contentURL": "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt", + "supportURL": "https://github.com/hufilter/hufilter" + }, + "IDN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇩id 🇲🇾my: ABPindo", + "tags": "ads indonesian malay", + "lang": "id ms", + "contentURL": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt", + "supportURL": "https://github.com/ABPindo/indonesianadblockrules" + }, + "IND-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList", + "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu", + "lang": "as bn gu hi kn ml mr ne pa si ta te", + "contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt", + "supportURL": "https://github.com/mediumkreation/IndianList" + }, + "IRN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇷ir: PersianBlocker", + "tags": "ads af ir persian pashto tajik tj", + "lang": "fa ps tg", + "contentURL": [ + "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/MasterKia/PersianBlocker@main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "supportURL": "https://github.com/MasterKia/PersianBlocker" + }, + "ISL-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇸is: Icelandic ABP List", + "tags": "ads icelandic", + "lang": "is", + "contentURL": "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt", + "supportURL": "https://github.com/brave/adblock-lists/issues" + }, + "ISR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇱il: EasyList Hebrew", + "tags": "ads hebrew", + "lang": "he", + "contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt", + "supportURL": "https://github.com/easylist/EasyListHebrew" + }, + "ITA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇮🇹it: EasyList Italy", + "tags": "ads italian", + "lang": "it lij", + "contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=96" + }, + "JPN-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇯🇵jp: AdGuard Japanese", + "tags": "ads japanese 日本語", + "lang": "ja", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "KOR-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇰🇷kr: List-KR", + "tags": "ads korean 한국어", + "lang": "ko", + "contentURL": "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt", + "supportURL": "https://github.com/List-KR/List-KR#readme" + }, + "LTU-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇱🇹lt: EasyList Lithuania", + "tags": "ads lithuanian", + "lang": "lt", + "contentURL": "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/EasyList-Lithuania/easylist_lithuania@master/easylistlithuania.txt", + "https://cdn.statically.io/gh/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt" + ], + "supportURL": "https://github.com/EasyList-Lithuania/easylist_lithuania" + }, + "LVA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇱🇻lv: Latvian List", + "tags": "ads latvian", + "lang": "lv", + "contentURL": "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt", + "supportURL": "https://github.com/Latvian-List/adblock-latvian" + }, + "MKD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇲🇰mk: Macedonian adBlock Filters", + "tags": "ads macedonian", + "lang": "mk", + "contentURL": "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters", + "supportURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters" + }, + "NLD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇳🇱nl 🇧🇪be: AdGuard Dutch", + "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za", + "lang": "af fy nl", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/8.txt", + "cdnURLs": null, + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "NOR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre", + "tags": "ads norwegian danish icelandic", + "lang": "nb nn no da is", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt" + }, + "POL-0": { + "content": "filters", + "group": "regions", + "parent": "🇵🇱pl: Oficjalne Polskie Filtry", + "off": true, + "title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin", + "tags": "ads polish polski", + "lang": "szl pl", + "contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt", + "supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues", + "instructionURL": "https://github.com/MajkiIT/polish-ads-filter#polish-filters-for-adblock-ublock-origin--adguard" + }, + "POL-2": { + "content": "filters", + "group": "regions", + "parent": "🇵🇱pl: Oficjalne Polskie Filtry", + "off": true, + "title": "🇵🇱pl: Oficjalne polskie filtry przeciwko alertom o Adblocku", + "tags": "ads polish polski", + "lang": "szl pl", + "contentURL": "https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt", + "supportURL": "https://github.com/olegwukr/polish-privacy-filters/issues" + }, + "ROU-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light", + "tags": "ads romanian română moldavian moldovenească молдовеняскэ", + "lang": "ro", + "contentURL": [ + "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt" + ], + "supportURL": "https://github.com/tcptomato/ROad-Block" + }, + "RUS-0": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek", + "lang": "be kk tt ru uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt", + "https://cdn.statically.io/gh/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt", + "https://raw.githubusercontent.com/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "RUS-1": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/cntblock.txt", + "https://cdn.statically.io/gh/easylist/ruadlist/master/cntblock.txt", + "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "spa-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish", + "tags": "ads aragonese basque catalan spanish español galician guarani", + "lang": "an ast ca cak es eu gl gn trs quz", + "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=103" + }, + "spa-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese", + "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português", + "lang": "an ast ca cak es eu gl gn trs pt quz", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "SVN-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇸🇮si: Slovenian List", + "tags": "ads slovenian slovenski", + "lang": "sl", + "contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt", + "supportURL": "https://github.com/betterwebleon/slovenian-list" + }, + "SWE-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇸🇪se: Frellwit's Swedish Filter", + "tags": "ads swedish svenska", + "lang": "sv", + "contentURL": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt", + "cdnURLs": [ + "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/swefilter/swefilter.min.txt", + "https://cdn.jsdelivr.net/gh/lassekongo83/Frellwits-filter-lists@swefilter/swefilter.min.txt" + ], + "supportURL": "https://github.com/lassekongo83/Frellwits-filter-lists" + }, + "THA-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇹🇭th: EasyList Thailand", + "tags": "ads thai ไทย", + "lang": "th", + "contentURL": "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt", + "supportURL": "https://github.com/easylist-thailand/easylist-thailand" + }, + "TUR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇹🇷tr: AdGuard Turkish", + "tags": "ads turkish türkçe", + "lang": "tr", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "UKR-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇺🇦ua: Ukrainian Filters", + "tags": "ads ukraine україна", + "lang": "uk", + "contentURL": "https://raw.githubusercontent.com/ukrainianfilters/lists/main/combined/uBO/uBO.txt", + "supportURL": "https://github.com/ukrainianfilters/lists" + }, + "VIE-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇻🇳vn: ABPVN List", + "tags": "ads vietnamese việt", + "lang": "vi", + "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt", + "supportURL": "https://abpvn.com/" + } +} diff -Nru ublock-origin-1.46.0+dfsg/assets/assets.json ublock-origin-1.62.0+dfsg/assets/assets.json --- ublock-origin-1.46.0+dfsg/assets/assets.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/assets/assets.json 2025-02-09 18:18:39.000000000 +0000 @@ -9,7 +9,6 @@ "cdnURLs": [ "https://ublockorigin.github.io/uAssetsCDN/ublock/assets.json", "https://ublockorigin.pages.dev/ublock/assets.json", - "https://gitcdn.link/cdn/gorhill/uBlock/master/assets/assets.json", "https://cdn.jsdelivr.net/gh/gorhill/uBlock@master/assets/assets.json", "https://cdn.statically.io/gh/gorhill/uBlock/master/assets/assets.json" ] @@ -19,7 +18,6 @@ "updateAfter": 19, "contentURL": [ "https://publicsuffix.org/list/public_suffix_list.dat", - "https://gitcdn.link/cdn/publicsuffix/list/master/public_suffix_list.dat", "assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat" ] }, @@ -33,7 +31,6 @@ "cdnURLs": [ "https://ublockorigin.github.io/uAssetsCDN/filters/badlists.txt", "https://ublockorigin.pages.dev/filters/badlists.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt", "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badlists.txt", "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badlists.txt" ] @@ -41,106 +38,94 @@ "ublock-filters": { "content": "filters", "group": "default", - "title": "uBlock filters", + "parent": "uBlock filters", + "title": "uBlock filters – Ads", + "tags": "ads", "contentURL": [ "https://ublockorigin.github.io/uAssets/filters/filters.txt", + "assets/ublock/filters.min.txt", "assets/ublock/filters.txt" ], "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/filters.txt", - "https://ublockorigin.pages.dev/filters/filters.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/filters.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.txt" + "https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt", + "https://ublockorigin.pages.dev/filters/filters.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/filters.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/filters.min.txt" ], "supportURL": "https://github.com/uBlockOrigin/uAssets" }, "ublock-badware": { "content": "filters", "group": "default", + "parent": "uBlock filters", "title": "uBlock filters – Badware risks", + "tags": "malware security", "contentURL": [ "https://ublockorigin.github.io/uAssets/filters/badware.txt", + "assets/ublock/badware.min.txt", "assets/ublock/badware.txt" ], "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/badware.txt", - "https://ublockorigin.pages.dev/filters/badware.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/badware.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.txt" + "https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt", + "https://ublockorigin.pages.dev/filters/badware.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/badware.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/badware.min.txt" ], "supportURL": "https://github.com/uBlockOrigin/uAssets", "instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks" }, "ublock-privacy": { "content": "filters", - "updateAfter": 13, "group": "default", + "parent": "uBlock filters", "title": "uBlock filters – Privacy", + "tags": "privacy", "contentURL": [ "https://ublockorigin.github.io/uAssets/filters/privacy.txt", + "assets/ublock/privacy.min.txt", "assets/ublock/privacy.txt" ], "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.txt", - "https://ublockorigin.pages.dev/filters/privacy.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/privacy.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.txt" - ], - "supportURL": "https://github.com/uBlockOrigin/uAssets" - }, - "ublock-abuse": { - "content": "filters", - "updateAfter": 13, - "group": "default", - "title": "uBlock filters – Resource abuse", - "contentURL": [ - "https://ublockorigin.github.io/uAssets/filters/resource-abuse.txt", - "assets/ublock/resource-abuse.txt" - ], - "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/resource-abuse.txt", - "https://ublockorigin.pages.dev/filters/resource-abuse.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/resource-abuse.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/resource-abuse.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/resource-abuse.txt" + "https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt", + "https://ublockorigin.pages.dev/filters/privacy.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/privacy.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/privacy.min.txt" ], "supportURL": "https://github.com/uBlockOrigin/uAssets" }, "ublock-unbreak": { "content": "filters", "group": "default", + "parent": "uBlock filters", "title": "uBlock filters – Unbreak", "contentURL": [ "https://ublockorigin.github.io/uAssets/filters/unbreak.txt", + "assets/ublock/unbreak.min.txt", "assets/ublock/unbreak.txt" ], "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.txt", - "https://ublockorigin.pages.dev/filters/unbreak.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/unbreak.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.txt" + "https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt", + "https://ublockorigin.pages.dev/filters/unbreak.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/unbreak.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/unbreak.min.txt" ], "supportURL": "https://github.com/uBlockOrigin/uAssets" }, "ublock-quick-fixes": { "content": "filters", - "updateAfter": 1, "group": "default", + "parent": "uBlock filters", "title": "uBlock filters – Quick fixes", "contentURL": [ "https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt", + "assets/ublock/quick-fixes.min.txt", "assets/ublock/quick-fixes.txt" ], "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.txt", - "https://ublockorigin.pages.dev/filters/quick-fixes.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.txt" + "https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt", + "https://ublockorigin.pages.dev/filters/quick-fixes.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/quick-fixes.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/quick-fixes.min.txt" ], "supportURL": "https://github.com/uBlockOrigin/uAssets" }, @@ -148,66 +133,65 @@ "content": "filters", "group": "ads", "off": true, - "title": "AdGuard Base", + "title": "AdGuard – Ads", + "tags": "ads", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "adguard-mobile": { "content": "filters", "group": "ads", "off": true, - "title": "AdGuard Mobile Ads", + "title": "AdGuard – Mobile Ads", + "tags": "ads mobile", "ua": "mobile", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "easylist": { "content": "filters", "group": "ads", "title": "EasyList", + "tags": "ads", + "preferred": true, "contentURL": [ "https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt", - "assets/thirdparties/easylist/easylist.txt", - "assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt" + "assets/thirdparties/easylist/easylist.txt" ], "cdnURLs": [ - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt", "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist.txt", "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist.txt", - "https://easylist.to/easylist/easylist.txt" + "https://ublockorigin.pages.dev/thirdparties/easylist.txt" ], "supportURL": "https://easylist.to/" }, - "adguard-spyware": { + "adguard-spyware-url": { "content": "filters", "group": "privacy", "off": true, - "title": "AdGuard Tracking Protection", - "contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "title": "AdGuard URL Tracking Protection", + "tags": "privacy", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, - "adguard-spyware-url": { + "adguard-spyware": { "content": "filters", "group": "privacy", "off": true, - "title": "AdGuard URL Tracking Protection", - "contentURL": "https://filters.adtidy.org/extension/ublock/filters/17.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "title": "AdGuard Tracking Protection", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "block-lan": { "content": "filters", "group": "privacy", "off": true, "title": "Block Outsider Intrusion into LAN", + "tags": "privacy security", "contentURL": "https://ublockorigin.github.io/uAssets/filters/lan-block.txt", "cdnURLs": [ "https://ublockorigin.github.io/uAssetsCDN/filters/lan-block.txt", "https://ublockorigin.pages.dev/filters/lan-block.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt", "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/lan-block.txt", "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/lan-block.txt" ], @@ -217,16 +201,16 @@ "content": "filters", "group": "privacy", "title": "EasyPrivacy", + "tags": "privacy", + "preferred": true, "contentURL": [ "https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt", - "assets/thirdparties/easylist/easyprivacy.txt", - "assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt" + "assets/thirdparties/easylist/easyprivacy.txt" ], "cdnURLs": [ - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt", "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easyprivacy.txt", "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easyprivacy.txt", - "https://easylist.to/easylist/easyprivacy.txt" + "https://ublockorigin.pages.dev/thirdparties/easyprivacy.txt" ], "supportURL": "https://easylist.to/" }, @@ -235,13 +219,13 @@ "group": "malware", "title": "Online Malicious URL Blocklist", "contentURL": [ - "https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-online.txt", + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", "assets/thirdparties/urlhaus-filter/urlhaus-filter-online.txt" ], "cdnURLs": [ - "https://curbengh.github.io/malware-filter/urlhaus-filter-online.txt", - "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-online.txt", - "https://malware-filter.pages.dev/urlhaus-filter-online.txt" + "https://curbengh.github.io/malware-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.gitlab.io/urlhaus-filter/urlhaus-filter-ag-online.txt", + "https://malware-filter.pages.dev/urlhaus-filter-ag-online.txt" ], "supportURL": "https://gitlab.com/malware-filter/urlhaus-filter#malicious-url-blocklist" }, @@ -250,7 +234,7 @@ "group": "malware", "off": true, "title": "Phishing URL Blocklist", - "contentURL": "https://malware-filter.gitlab.io/malware-filter/phishing-filter.txt", + "contentURL": "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", "cdnURLs": [ "https://curbengh.github.io/phishing-filter/phishing-filter.txt", "https://malware-filter.gitlab.io/phishing-filter/phishing-filter.txt", @@ -258,93 +242,251 @@ ], "supportURL": "https://gitlab.com/malware-filter/phishing-filter#phishing-url-blocklist" }, - "curben-pup": { + "adguard-cookies": { "content": "filters", - "group": "malware", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "AdGuard – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/18.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "ublock-cookies-adguard": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "AdGuard/uBO – Cookie Notices", + "off": true, + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" + }, + "fanboy-cookiemonster": { + "content": "filters", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", "off": true, - "title": "PUP Domains Blocklist", - "contentURL": "https://malware-filter.gitlab.io/malware-filter/pup-filter.txt", + "title": "EasyList – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" + ], "cdnURLs": [ - "https://curbengh.github.io/pup-filter/pup-filter.txt", - "https://malware-filter.gitlab.io/pup-filter/pup-filter.txt", - "https://pup-filter.pages.dev/pup-filter.txt" + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-cookies.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-cookies.txt", + "https://secure.fanboy.co.nz/fanboy-cookiemonster_ubo.txt" ], - "supportURL": "https://gitlab.com/malware-filter/pup-filter#pup-domains-blocklist" + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" }, - "adguard-annoyance": { + "ublock-cookies-easylist": { "content": "filters", - "group": "social", + "group": "annoyances", + "group2": "cookies", + "parent": "EasyList/uBO – Cookie Notices", "off": true, - "title": "AdGuard Annoyances", - "contentURL": "https://filters.adtidy.org/extension/ublock/filters/14.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "title": "uBlock filters – Cookie Notices", + "tags": "annoyances cookies", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances-cookies.txt", + "https://ublockorigin.pages.dev/filters/annoyances-cookies.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances-cookies.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances-cookies.txt" + ], + "supportURL": "https://github.com/uBlockOrigin/uAssets" }, "adguard-social": { "content": "filters", - "group": "social", + "group": "annoyances", + "group2": "social", + "parent": null, "off": true, - "title": "AdGuard Social Media", + "title": "AdGuard – Social Widgets", + "tags": "annoyances social", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/4.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "fanboy-social": { + "content": "filters", + "group": "annoyances", + "group2": "social", + "parent": null, + "off": true, + "title": "EasyList – Social Widgets", + "tags": "annoyances social", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-social.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-social.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-social.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-social.txt", + "https://secure.fanboy.co.nz/fanboy-social_ubo.txt" + ], + "supportURL": "https://easylist.to/" }, "fanboy-thirdparty_social": { "content": "filters", - "group": "social", + "group": "annoyances", + "group2": "social", "off": true, - "title": "Anti-Facebook", + "title": "Fanboy – Anti-Facebook", + "tags": "privacy", "contentURL": "https://secure.fanboy.co.nz/fanboy-antifacebook.txt", "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" }, - "fanboy-annoyance": { + "adguard-popup-overlays": { "content": "filters", - "group": "social", + "group": "annoyances", + "parent": "AdGuard – Annoyances", "off": true, - "title": "Fanboy’s Annoyance", - "contentURL": "https://secure.fanboy.co.nz/fanboy-annoyance.txt", - "supportURL": "https://easylist.to/" + "title": "AdGuard – Popup Overlays", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/19.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, - "fanboy-cookiemonster": { + "adguard-mobile-app-banners": { "content": "filters", - "group": "social", + "group": "annoyances", + "parent": "AdGuard – Annoyances", "off": true, - "title": "EasyList Cookie", - "contentURL": "https://secure.fanboy.co.nz/fanboy-cookiemonster.txt", - "supportURL": "https://github.com/easylist/easylist/issues" + "title": "AdGuard – Mobile App Banners", + "tags": "annoyances mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/20.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, - "fanboy-social": { + "adguard-other-annoyances": { "content": "filters", - "group": "social", + "group": "annoyances", + "parent": "AdGuard – Annoyances", "off": true, - "title": "Fanboy’s Social", + "title": "AdGuard – Other Annoyances", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/21.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "adguard-widgets": { + "content": "filters", + "group": "annoyances", + "parent": "AdGuard – Annoyances", + "off": true, + "title": "AdGuard – Widgets", + "tags": "annoyances", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/22.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" + }, + "easylist-annoyances": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Other Annoyances", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-annoyances.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-annoyances.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-annoyances.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-annoyances.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-chat": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Chat Widgets", + "tags": "annoyances", + "preferred": true, + "contentURL": "https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt", + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-chat.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-chat.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-chat.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-chat.txt" + ], + "supportURL": "https://github.com/easylist/easylist#fanboy-lists" + }, + "easylist-newsletters": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Newsletter Notices", + "tags": "annoyances", + "preferred": true, "contentURL": [ - "https://easylist.to/easylist/fanboy-social.txt", - "https://secure.fanboy.co.nz/fanboy-social.txt" + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-newsletters.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-newsletters.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-newsletters.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-newsletters.txt" + ], + "supportURL": "https://easylist.to/" + }, + "easylist-notifications": { + "content": "filters", + "group": "annoyances", + "parent": "EasyList – Annoyances", + "off": true, + "title": "EasyList – Notifications", + "tags": "annoyances", + "preferred": true, + "contentURL": [ + "https://ublockorigin.github.io/uAssets/thirdparties/easylist-notifications.txt" + ], + "cdnURLs": [ + "https://ublockorigin.github.io/uAssetsCDN/thirdparties/easylist-notifications.txt", + "https://ublockorigin.pages.dev/thirdparties/easylist-notifications.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/thirdparties/easylist-notifications.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/thirdparties/easylist-notifications.txt" ], "supportURL": "https://easylist.to/" }, "ublock-annoyances": { "content": "filters", - "group": "social", - "title": "uBlock filters – Annoyances", + "group": "annoyances", "off": true, + "title": "uBlock filters – Annoyances", + "tags": "annoyances", "contentURL": "https://ublockorigin.github.io/uAssets/filters/annoyances.txt", "cdnURLs": [ - "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.txt", - "https://ublockorigin.pages.dev/filters/annoyances.txt", - "https://gitcdn.link/cdn/uBlockOrigin/uAssetsCDN/main/filters/annoyances.txt", - "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.txt", - "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.txt" + "https://ublockorigin.github.io/uAssetsCDN/filters/annoyances.min.txt", + "https://ublockorigin.pages.dev/filters/annoyances.min.txt", + "https://cdn.jsdelivr.net/gh/uBlockOrigin/uAssetsCDN@main/filters/annoyances.min.txt", + "https://cdn.statically.io/gh/uBlockOrigin/uAssetsCDN/main/filters/annoyances.min.txt" ], "supportURL": "https://github.com/uBlockOrigin/uAssets" }, "dpollock-0": { "content": "filters", "group": "multipurpose", - "updateAfter": 11, + "updateAfter": 13, "off": true, "title": "Dan Pollock’s hosts file", + "tags": "ads privacy security", "contentURL": "https://someonewhocares.org/hosts/hosts", "supportURL": "https://someonewhocares.org/hosts/" }, @@ -353,6 +495,8 @@ "group": "multipurpose", "updateAfter": 13, "title": "Peter Lowe’s Ad and tracking server list", + "tags": "ads privacy security", + "preferred": true, "contentURL": [ "https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext", "assets/thirdparties/pgl.yoyo.org/as/serverlist.txt", @@ -364,7 +508,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "ALB: Adblock List for Albania", + "title": "🇦🇱al 🇽🇰xk: Adblock List for Albania", + "tags": "ads albania shqipja", "lang": "sq", "contentURL": "https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt", "supportURL": "https://github.com/AnXh3L0/blocklist" @@ -373,7 +518,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "ara: Liste AR", + "title": "🇪🇬eg 🇸🇦sa 🇲🇦ma 🇩🇿dz: Liste AR", + "tags": "ads arabic اَلْعَرَبِيَّةُ‎", "lang": "ar", "contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt", "supportURL": "https://forums.lanik.us/viewforum.php?f=98" @@ -382,7 +528,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "BGR: Bulgarian Adblock list", + "title": "🇧🇬bg: Bulgarian Adblock list", + "tags": "ads bulgarian България macedonian Македонија", "lang": "bg mk", "contentURL": "https://stanev.org/abp/adblock_bg.txt", "supportURL": "https://stanev.org/abp/" @@ -391,7 +538,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "CHN: AdGuard Chinese (中文)", + "title": "🇨🇳cn 🇹🇼tw: AdGuard Chinese (中文)", + "tags": "ads chinese 中文", "lang": "ug zh", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/224.txt", "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" @@ -400,7 +548,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "CZE, SVK: EasyList Czech and Slovak", + "title": "🇨🇿cz 🇸🇰sk: EasyList Czech and Slovak", + "tags": "ads czech česká slovak slovenská", "lang": "cs sk", "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt", "supportURL": "https://github.com/tomasko126/easylistczechandslovak" @@ -409,7 +558,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "DEU: EasyList Germany", + "title": "🇩🇪de 🇨🇭ch 🇦🇹at: EasyList Germany", + "tags": "ads german deutschland luxembourgish lëtzebuerg romansh", "lang": "de dsb hsb lb rm", "contentURL": [ "https://easylist.to/easylistgermany/easylistgermany.txt", @@ -421,25 +571,28 @@ "content": "filters", "group": "regions", "off": true, - "title": "EST: Eesti saitidele kohandatud filter", + "title": "🇪🇪ee: Eesti saitidele kohandatud filter", + "tags": "ads estonian", "lang": "et", - "contentURL": "https://adblock.ee/list.php", - "supportURL": "https://adblock.ee/" + "contentURL": "https://adblock.ee/list.txt", + "supportURL": "https://adblock.ee" }, "FIN-0": { "content": "filters", "group": "regions", "off": true, - "title": "FIN: Adblock List for Finland", + "title": "🇫🇮fi: Adblock List for Finland", + "tags": "ads finnish", "lang": "fi", - "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/master/Finland_adb.txt", + "contentURL": "https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/gh-pages/Finland_adb.txt", "supportURL": "https://github.com/finnish-easylist-addition/finnish-easylist-addition" }, "FRA-0": { "content": "filters", "group": "regions", "off": true, - "title": "FRA: AdGuard Français", + "title": "🇫🇷fr 🇨🇦ca: AdGuard Français", + "tags": "ads french", "lang": "ar br ff fr lb oc son", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/16.txt", "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" @@ -448,25 +601,42 @@ "content": "filters", "group": "regions", "off": true, - "title": "GRC: Greek AdBlock Filter", + "title": "🇬🇷gr 🇨🇾cy: Greek AdBlock Filter", + "tags": "ads greek", "lang": "el", "contentURL": "https://www.void.gr/kargig/void-gr-filters.txt", "supportURL": "https://github.com/kargig/greek-adblockplus-filter" }, + "HRV-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇭🇷hr 🇷🇸rs: Dandelion Sprout's Serbo-Croatian filters", + "tags": "ads croatian serbian bosnian", + "lang": "bs hr sr", + "contentURL": [ + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/SerboCroatianList.txt", + "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/SerboCroatianList.txt", + "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/SerboCroatianList.txt" + ], + "supportURL": "https://github.com/DandelionSprout/adfilt#readme" + }, "HUN-0": { "content": "filters", "group": "regions", "off": true, - "title": "HUN: hufilter", + "title": "🇭🇺hu: hufilter", + "tags": "ads hungarian", "lang": "hu", - "contentURL": "https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt", + "contentURL": "https://cdn.jsdelivr.net/gh/hufilter/hufilter@gh-pages/hufilter-ublock.txt", "supportURL": "https://github.com/hufilter/hufilter" }, "IDN-0": { "content": "filters", "group": "regions", "off": true, - "title": "IDN, MYS: ABPindo", + "title": "🇮🇩id 🇲🇾my: ABPindo", + "tags": "ads indonesian malay", "lang": "id ms", "contentURL": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt", "supportURL": "https://github.com/ABPindo/indonesianadblockrules" @@ -475,7 +645,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "IND, LKA, NPL: IndianList", + "title": "🇮🇳in 🇱🇰lk 🇳🇵np: IndianList", + "tags": "ads assamese bengali gujarati hindi kannada malayalam marathi nepali punjabi sinhala tamil telugu", "lang": "as bn gu hi kn ml mr ne pa si ta te", "contentURL": "https://easylist-downloads.adblockplus.org/indianlist.txt", "supportURL": "https://github.com/mediumkreation/IndianList" @@ -484,11 +655,15 @@ "content": "filters", "group": "regions", "off": true, - "title": "IRN: PersianBlocker", - "lang": "fa", + "title": "🇮🇷ir: PersianBlocker", + "tags": "ads af ir persian pashto tajik tj", + "lang": "fa ps tg", "contentURL": [ "https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt", - "https://gitcdn.link/cdn/MasterKia/PersianBlocker/main/PersianBlocker.txt", + "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" + ], + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/MasterKia/PersianBlocker@main/PersianBlocker.txt", "https://cdn.statically.io/gh/MasterKia/PersianBlocker/main/PersianBlocker.txt" ], "supportURL": "https://github.com/MasterKia/PersianBlocker" @@ -497,16 +672,18 @@ "content": "filters", "group": "regions", "off": true, - "title": "ISL: Icelandic ABP List", + "title": "🇮🇸is: Icelandic ABP List", + "tags": "ads icelandic", "lang": "is", - "contentURL": "https://adblock.gardar.net/is.abp.txt", - "supportURL": "https://adblock.gardar.net/" + "contentURL": "https://raw.githubusercontent.com/brave/adblock-lists/master/custom/is.txt", + "supportURL": "https://github.com/brave/adblock-lists/issues" }, "ISR-0": { "content": "filters", "group": "regions", "off": true, - "title": "ISR: EasyList Hebrew", + "title": "🇮🇱il: EasyList Hebrew", + "tags": "ads hebrew", "lang": "he", "contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt", "supportURL": "https://github.com/easylist/EasyListHebrew" @@ -515,7 +692,8 @@ "content": "filters", "group": "regions", "off": true, - "title": "ITA: EasyList Italy", + "title": "🇮🇹it: EasyList Italy", + "tags": "ads italian", "lang": "it lij", "contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt", "supportURL": "https://forums.lanik.us/viewforum.php?f=96" @@ -524,35 +702,31 @@ "content": "filters", "group": "regions", "off": true, - "title": "JPN: AdGuard Japanese", + "title": "🇯🇵jp: AdGuard Japanese", + "tags": "ads japanese 日本語", "lang": "ja", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "KOR-1": { "content": "filters", "group": "regions", "off": true, - "title": "KOR: List-KR", + "title": "🇰🇷kr: List-KR", + "tags": "ads korean 한국어", "lang": "ko", - "contentURL": "https://raw.githubusercontent.com/List-KR/List-KR/master/filter-uBO.txt", - "cdnURLs": [ - "https://cdn.jsdelivr.net/gh/List-KR/List-KR@master/filter-uBO.txt", - "https://cdn.statically.io/gh/List-KR/List-KR/master/filter-uBO.txt", - "https://gitcdn.link/cdn/List-KR/List-KR/master/filter-uBO.txt" - ], + "contentURL": "https://cdn.jsdelivr.net/gh/List-KR/List-KR@latest/filter-uBlockOrigin.txt", "supportURL": "https://github.com/List-KR/List-KR#readme" }, "LTU-0": { "content": "filters", "group": "regions", "off": true, - "title": "LTU: EasyList Lithuania", + "title": "🇱🇹lt: EasyList Lithuania", + "tags": "ads lithuanian", "lang": "lt", "contentURL": "https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt", "cdnURLs": [ - "https://gitcdn.link/cdn/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt", "https://cdn.jsdelivr.net/gh/EasyList-Lithuania/easylist_lithuania@master/easylistlithuania.txt", "https://cdn.statically.io/gh/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt" ], @@ -562,36 +736,42 @@ "content": "filters", "group": "regions", "off": true, - "title": "LVA: Latvian List", + "title": "🇱🇻lv: Latvian List", + "tags": "ads latvian", "lang": "lv", "contentURL": "https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt", "supportURL": "https://github.com/Latvian-List/adblock-latvian" }, + "MKD-0": { + "content": "filters", + "group": "regions", + "off": true, + "title": "🇲🇰mk: Macedonian adBlock Filters", + "tags": "ads macedonian", + "lang": "mk", + "contentURL": "https://raw.githubusercontent.com/DeepSpaceHarbor/Macedonian-adBlock-Filters/master/Filters", + "supportURL": "https://github.com/DeepSpaceHarbor/Macedonian-adBlock-Filters" + }, "NLD-0": { "content": "filters", "group": "regions", "off": true, - "title": "NLD: EasyDutch", + "title": "🇳🇱nl 🇧🇪be: AdGuard Dutch", + "tags": "ads afrikaans be belgië frisian dutch flemish nederlands netherlands nl sr suriname za", "lang": "af fy nl", - "contentURL": "https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.txt", - "cdnURLs": [ - "https://cdn.statically.io/gh/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.txt", - "https://cdn.jsdelivr.net/gh/EasyDutch-uBO/EasyDutch@gh-pages/EasyDutch.txt", - "https://cdn.statically.io/gl/BPower0036/EasyDutch/raw/gh-pages/EasyDutch.txt" - ], - "supportURL": "https://github.com/EasyDutch-uBO/EasyDutch/" + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/8.txt", + "cdnURLs": null, + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "NOR-0": { "content": "filters", "group": "regions", "off": true, - "title": "NOR, DNK, ISL: Dandelion Sprouts nordiske filtre", + "title": "🇳🇴no 🇩🇰dk 🇮🇸is: Dandelion Sprouts nordiske filtre", + "tags": "ads norwegian danish icelandic", "lang": "nb nn no da is", "contentURL": [ - "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt" - ], - "cdnURLs": [ - "https://gitcdn.link/cdn/DandelionSprout/adfilt/master/NorwegianList.txt", + "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt", "https://cdn.jsdelivr.net/gh/DandelionSprout/adfilt@master/NorwegianList.txt", "https://cdn.statically.io/gl/DandelionSprout/adfilt/master/NorwegianList.txt" ], @@ -600,8 +780,10 @@ "POL-0": { "content": "filters", "group": "regions", + "parent": "🇵🇱pl: Oficjalne Polskie Filtry", "off": true, - "title": "POL: Oficjalne Polskie Filtry do AdBlocka, uBlocka Origin i AdGuarda", + "title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin", + "tags": "ads polish polski", "lang": "szl pl", "contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt", "supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues", @@ -610,8 +792,10 @@ "POL-2": { "content": "filters", "group": "regions", + "parent": "🇵🇱pl: Oficjalne Polskie Filtry", "off": true, - "title": "POL: Oficjalne polskie filtry przeciwko alertom o Adblocku", + "title": "🇵🇱pl: Oficjalne polskie filtry przeciwko alertom o Adblocku", + "tags": "ads polish polski", "lang": "szl pl", "contentURL": "https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt", "supportURL": "https://github.com/olegwukr/polish-privacy-filters/issues" @@ -620,10 +804,10 @@ "content": "filters", "group": "regions", "off": true, - "title": "ROU: Romanian Ad (ROad) Block List Light", + "title": "🇷🇴ro 🇲🇩md: Romanian Ad (ROad) Block List Light", + "tags": "ads romanian română moldavian moldovenească молдовеняскэ", "lang": "ro", "contentURL": [ - "https://road.adblock.ro/lista.txt", "https://raw.githubusercontent.com/tcptomato/ROad-Block/master/road-block-filters-light.txt" ], "supportURL": "https://github.com/tcptomato/ROad-Block" @@ -631,14 +815,32 @@ "RUS-0": { "content": "filters", "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", "off": true, - "title": "RUS: RU AdList", + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek", "lang": "be kk tt ru uk uz", "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt", "cdnURLs": [ - "https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/RuAdList-uBO.txt", - "https://cdn.statically.io/gh/easylist/ruadlist/master/RuAdList-uBO.txt", - "https://gitcdn.link/cdn/easylist/ruadlist/master/RuAdList-uBO.txt" + "https://cdn.jsdelivr.net/gh/dimisa-RUAdList/RUAdListCDN@main/lists/ruadlist.ubo.min.txt", + "https://cdn.statically.io/gh/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt", + "https://raw.githubusercontent.com/dimisa-RUAdList/RUAdListCDN/main/lists/ruadlist.ubo.min.txt" + ], + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" + }, + "RUS-1": { + "content": "filters", + "group": "regions", + "parent": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList", + "off": true, + "title": "🇷🇺ru 🇺🇦ua 🇺🇿uz 🇰🇿kz: RU AdList: Counters", + "tags": "ads belarusian беларуская kazakh tatar russian русский ukrainian українська uzbek be kk tt ru uk uz", + "contentURL": "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt", + "cdnURLs": [ + "https://cdn.jsdelivr.net/gh/easylist/ruadlist@master/cntblock.txt", + "https://cdn.statically.io/gh/easylist/ruadlist/master/cntblock.txt", + "https://raw.githubusercontent.com/easylist/ruadlist/master/cntblock.txt" ], "supportURL": "https://forums.lanik.us/viewforum.php?f=102", "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" @@ -647,8 +849,9 @@ "content": "filters", "group": "regions", "off": true, - "title": "spa: EasyList Spanish", - "lang": "an ast ca cak es eu gn gl trs quz", + "title": "🇪🇸es 🇦🇷ar 🇲🇽mx 🇨🇴co: EasyList Spanish", + "tags": "ads aragonese basque catalan spanish español galician guarani", + "lang": "an ast ca cak es eu gl gn trs quz", "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt", "supportURL": "https://forums.lanik.us/viewforum.php?f=103" }, @@ -656,17 +859,18 @@ "content": "filters", "group": "regions", "off": true, - "title": "spa, por: AdGuard Spanish/Portuguese", + "title": "🇪🇸es 🇦🇷ar 🇧🇷br 🇵🇹pt: AdGuard Spanish/Portuguese", + "tags": "ads aragonese basque catalan spanish español galician guarani portuguese português", "lang": "an ast ca cak es eu gl gn trs pt quz", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "SVN-0": { "content": "filters", "group": "regions", "off": true, - "title": "SVN: Slovenian List", + "title": "🇸🇮si: Slovenian List", + "tags": "ads slovenian slovenski", "lang": "sl", "contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt", "supportURL": "https://github.com/betterwebleon/slovenian-list" @@ -675,16 +879,22 @@ "content": "filters", "group": "regions", "off": true, - "title": "SWE: Frellwit's Swedish Filter", + "title": "🇸🇪se: Frellwit's Swedish Filter", + "tags": "ads swedish svenska", "lang": "sv", "contentURL": "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt", + "cdnURLs": [ + "https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/swefilter/swefilter.min.txt", + "https://cdn.jsdelivr.net/gh/lassekongo83/Frellwits-filter-lists@swefilter/swefilter.min.txt" + ], "supportURL": "https://github.com/lassekongo83/Frellwits-filter-lists" }, "THA-0": { "content": "filters", "group": "regions", "off": true, - "title": "THA: EasyList Thailand", + "title": "🇹🇭th: EasyList Thailand", + "tags": "ads thai ไทย", "lang": "th", "contentURL": "https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt", "supportURL": "https://github.com/easylist-thailand/easylist-thailand" @@ -693,17 +903,18 @@ "content": "filters", "group": "regions", "off": true, - "title": "TUR: AdGuard Turkish", + "title": "🇹🇷tr: AdGuard Turkish", + "tags": "ads turkish türkçe", "lang": "tr", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt", - "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", - "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters" }, "VIE-1": { "content": "filters", "group": "regions", "off": true, - "title": "VIE: ABPVN List", + "title": "🇻🇳vn: ABPVN List", + "tags": "ads vietnamese việt", "lang": "vi", "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt", "supportURL": "https://abpvn.com/" diff -Nru ublock-origin-1.46.0+dfsg/assets/resources/scriptlets.js ublock-origin-1.62.0+dfsg/assets/resources/scriptlets.js --- ublock-origin-1.46.0+dfsg/assets/resources/scriptlets.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/assets/resources/scriptlets.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,1847 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -// The lines below are skipped by the resource parser. Purpose is clean -// jshinting. -(function() { -// >>>> start of private namespace -'use strict'; - - - - - -/// abort-current-script.js -/// alias acs.js -/// alias abort-current-inline-script.js -/// alias acis.js -// Issues to mind before changing anything: -// https://github.com/uBlockOrigin/uBlock-issues/issues/2154 -(function() { - const target = '{{1}}'; - if ( target === '' || target === '{{1}}' ) { return; } - const reRegexEscape = /[.*+?^${}()|[\]\\]/g; - const needle = '{{2}}'; - const reNeedle = (( ) => { - if ( needle === '' || needle === '{{2}}' ) { return /^/; } - if ( /^\/.+\/$/.test(needle) ) { - return new RegExp(needle.slice(1,-1)); - } - return new RegExp(needle.replace(reRegexEscape, '\\$&')); - })(); - const context = '{{3}}'; - const reContext = (( ) => { - if ( context === '' || context === '{{3}}' ) { return; } - if ( /^\/.+\/$/.test(context) ) { - return new RegExp(context.slice(1,-1)); - } - return new RegExp(context.replace(reRegexEscape, '\\$&')); - })(); - const thisScript = document.currentScript; - const chain = target.split('.'); - let owner = window; - let prop; - for (;;) { - prop = chain.shift(); - if ( chain.length === 0 ) { break; } - owner = owner[prop]; - if ( owner instanceof Object === false ) { return; } - } - let value; - let desc = Object.getOwnPropertyDescriptor(owner, prop); - if ( - desc instanceof Object === false || - desc.get instanceof Function === false - ) { - value = owner[prop]; - desc = undefined; - } - const magic = String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - const scriptTexts = new WeakMap(); - const getScriptText = elem => { - let text = elem.textContent; - if ( text.trim() !== '' ) { return text; } - if ( scriptTexts.has(elem) ) { return scriptTexts.get(elem); } - const [ , mime, content ] = - /^data:([^,]*),(.+)$/.exec(elem.src.trim()) || - [ '', '', '' ]; - try { - switch ( true ) { - case mime.endsWith(';base64'): - text = self.atob(content); - break; - default: - text = self.decodeURIComponent(content); - break; - } - } catch(ex) { - } - scriptTexts.set(elem, text); - return text; - }; - const validate = ( ) => { - const e = document.currentScript; - if ( e instanceof HTMLScriptElement === false ) { return; } - if ( e === thisScript ) { return; } - if ( reContext !== undefined && reContext.test(e.src) === false ) { - return; - } - if ( reNeedle.test(getScriptText(e)) === false ) { return; } - throw new ReferenceError(magic); - }; - Object.defineProperty(owner, prop, { - get: function() { - validate(); - return desc instanceof Object - ? desc.get.call(owner) - : value; - }, - set: function(a) { - validate(); - if ( desc instanceof Object ) { - desc.set.call(owner, a); - } else { - value = a; - } - } - }); - const oe = window.onerror; - window.onerror = function(msg) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe.apply(this, arguments); - } - }.bind(); -})(); - - -/// abort-on-property-read.js -/// alias aopr.js -(function() { - const magic = String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - const abort = function() { - throw new ReferenceError(magic); - }; - const makeProxy = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - const desc = Object.getOwnPropertyDescriptor(owner, chain); - if ( !desc || desc.get !== abort ) { - Object.defineProperty(owner, chain, { - get: abort, - set: function(){} - }); - } - return; - } - const prop = chain.slice(0, pos); - let v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v ) { - makeProxy(v, chain); - return; - } - const desc = Object.getOwnPropertyDescriptor(owner, prop); - if ( desc && desc.set !== undefined ) { return; } - Object.defineProperty(owner, prop, { - get: function() { return v; }, - set: function(a) { - v = a; - if ( a instanceof Object ) { - makeProxy(a, chain); - } - } - }); - }; - const owner = window; - let chain = '{{1}}'; - makeProxy(owner, chain); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.indexOf(magic) !== -1 ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -})(); - - -/// abort-on-property-write.js -/// alias aopw.js -(function() { - const magic = String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - let prop = '{{1}}'; - let owner = window; - for (;;) { - const pos = prop.indexOf('.'); - if ( pos === -1 ) { break; } - owner = owner[prop.slice(0, pos)]; - if ( owner instanceof Object === false ) { return; } - prop = prop.slice(pos + 1); - } - delete owner[prop]; - Object.defineProperty(owner, prop, { - set: function() { - throw new ReferenceError(magic); - } - }); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.indexOf(magic) !== -1 ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -})(); - - -/// abort-on-stack-trace.js -/// alias aost.js -// Status is currently experimental -(function() { - let chain = '{{1}}'; - let needle = '{{2}}'; - let logLevel = '{{3}}'; - const reRegexEscape = /[.*+?^${}()|[\]\\]/g; - if ( needle === '' || needle === '{{2}}' ) { - needle = '^'; - } else if ( /^\/.+\/$/.test(needle) ) { - needle = needle.slice(1,-1); - } else { - needle = needle.replace(reRegexEscape, '\\$&'); - } - const reNeedle = new RegExp(needle); - const magic = String.fromCharCode(Math.random() * 26 + 97) + - Math.floor( - (0.25 + Math.random() * 0.75) * Number.MAX_SAFE_INTEGER - ).toString(36).slice(-8); - const log = console.log.bind(console); - const ErrorCtor = self.Error; - const mustAbort = function(err) { - let docURL = self.location.href; - const pos = docURL.indexOf('#'); - if ( pos !== -1 ) { - docURL = docURL.slice(0, pos); - } - // Normalize stack trace - const lines = []; - for ( let line of err.stack.split(/[\n\r]+/) ) { - if ( line.includes(magic) ) { continue; } - line = line.trim(); - let match = /(.*?@)?(\S+)(:\d+):\d+\)?$/.exec(line); - if ( match === null ) { continue; } - let url = match[2]; - if ( url.startsWith('(') ) { url = url.slice(1); } - if ( url === docURL ) { - url = 'inlineScript'; - } else if ( url.startsWith('') ) { - url = 'injectedScript'; - } - let fn = match[1] !== undefined - ? match[1].slice(0, -1) - : line.slice(0, match.index).trim(); - if ( fn.startsWith('at') ) { fn = fn.slice(2).trim(); } - let rowcol = match[3]; - lines.push(' ' + `${fn} ${url}${rowcol}:1`.trim()); - } - lines[0] = `stackDepth:${lines.length-1}`; - const stack = lines.join('\t'); - const r = reNeedle.test(stack); - if ( - logLevel === '1' || - logLevel === '2' && r || - logLevel === '3' && !r - ) { - log(stack.replace(/\t/g, '\n')); - } - return r; - }; - const makeProxy = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - let v = owner[chain]; - Object.defineProperty(owner, chain, { - get: function() { - if ( mustAbort(new ErrorCtor(magic)) ) { - throw new ReferenceError(magic); - } - return v; - }, - set: function(a) { - if ( mustAbort(new ErrorCtor(magic)) ) { - throw new ReferenceError(magic); - } - v = a; - }, - }); - return; - } - const prop = chain.slice(0, pos); - let v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v ) { - makeProxy(v, chain); - return; - } - const desc = Object.getOwnPropertyDescriptor(owner, prop); - if ( desc && desc.set !== undefined ) { return; } - Object.defineProperty(owner, prop, { - get: function() { return v; }, - set: function(a) { - v = a; - if ( a instanceof Object ) { - makeProxy(a, chain); - } - } - }); - }; - const owner = window; - makeProxy(owner, chain); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.indexOf(magic) !== -1 ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -})(); - - -/// addEventListener-defuser.js -/// alias aeld.js -// https://github.com/uBlockOrigin/uAssets/issues/9123#issuecomment-848255120 -(function() { - let needle1 = '{{1}}'; - if ( needle1 === '' || needle1 === '{{1}}' ) { - needle1 = '.?'; - } else if ( /^\/.+\/$/.test(needle1) ) { - needle1 = needle1.slice(1,-1); - } else { - needle1 = needle1.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needle1 = new RegExp(needle1); - let needle2 = '{{2}}'; - if ( needle2 === '' || needle2 === '{{2}}' ) { - needle2 = '.?'; - } else if ( /^\/.+\/$/.test(needle2) ) { - needle2 = needle2.slice(1,-1); - } else { - needle2 = needle2.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needle2 = new RegExp(needle2); - self.EventTarget.prototype.addEventListener = new Proxy( - self.EventTarget.prototype.addEventListener, - { - apply: function(target, thisArg, args) { - let type, handler; - try { - type = String(args[0]); - handler = String(args[1]); - } catch(ex) { - } - if ( - needle1.test(type) === false || - needle2.test(handler) === false - ) { - return target.apply(thisArg, args); - } - } - } - ); -})(); - - -/// addEventListener-logger.js -/// alias aell.js -// https://github.com/uBlockOrigin/uAssets/issues/9123#issuecomment-848255120 -(function() { - const log = console.log.bind(console); - self.EventTarget.prototype.addEventListener = new Proxy( - self.EventTarget.prototype.addEventListener, - { - apply: function(target, thisArg, args) { - let type, handler; - try { - type = String(args[0]); - handler = String(args[1]); - } catch(ex) { - } - log('uBO: addEventListener("%s", %s)', type, handler); - return target.apply(thisArg, args); - } - } - ); -})(); - - -/// json-prune.js -// -// When no "prune paths" argument is provided, the scriptlet is -// used for logging purpose and the "needle paths" argument is -// used to filter logging output. -// -// https://github.com/uBlockOrigin/uBlock-issues/issues/1545 -// - Add support for "remove everything if needle matches" case -// -(function() { - const rawPrunePaths = '{{1}}'; - const rawNeedlePaths = '{{2}}'; - const prunePaths = rawPrunePaths !== '{{1}}' && rawPrunePaths !== '' - ? rawPrunePaths.split(/ +/) - : []; - let needlePaths; - let log, reLogNeedle; - if ( prunePaths.length !== 0 ) { - needlePaths = prunePaths.length !== 0 && - rawNeedlePaths !== '{{2}}' && rawNeedlePaths !== '' - ? rawNeedlePaths.split(/ +/) - : []; - } else { - log = console.log.bind(console); - let needle; - if ( rawNeedlePaths === '' || rawNeedlePaths === '{{2}}' ) { - needle = '.?'; - } else if ( rawNeedlePaths.charAt(0) === '/' && rawNeedlePaths.slice(-1) === '/' ) { - needle = rawNeedlePaths.slice(1, -1); - } else { - needle = rawNeedlePaths.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - reLogNeedle = new RegExp(needle); - } - const findOwner = function(root, path, prune = false) { - let owner = root; - let chain = path; - for (;;) { - if ( typeof owner !== 'object' || owner === null ) { - return false; - } - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - if ( prune === false ) { - return owner.hasOwnProperty(chain); - } - if ( chain === '*' ) { - for ( const key in owner ) { - if ( owner.hasOwnProperty(key) === false ) { continue; } - delete owner[key]; - } - } else if ( owner.hasOwnProperty(chain) ) { - delete owner[chain]; - } - return true; - } - const prop = chain.slice(0, pos); - if ( - prop === '[]' && Array.isArray(owner) || - prop === '*' && owner instanceof Object - ) { - const next = chain.slice(pos + 1); - let found = false; - for ( const key of Object.keys(owner) ) { - found = findOwner(owner[key], next, prune) || found; - } - return found; - } - if ( owner.hasOwnProperty(prop) === false ) { return false; } - owner = owner[prop]; - chain = chain.slice(pos + 1); - } - }; - const mustProcess = function(root) { - for ( const needlePath of needlePaths ) { - if ( findOwner(root, needlePath) === false ) { - return false; - } - } - return true; - }; - const pruner = function(o) { - if ( log !== undefined ) { - const json = JSON.stringify(o, null, 2); - if ( reLogNeedle.test(json) ) { - log('uBO:', location.hostname, json); - } - return o; - } - if ( mustProcess(o) === false ) { return o; } - for ( const path of prunePaths ) { - findOwner(o, path, true); - } - return o; - }; - JSON.parse = new Proxy(JSON.parse, { - apply: function() { - return pruner(Reflect.apply(...arguments)); - }, - }); - Response.prototype.json = new Proxy(Response.prototype.json, { - apply: function() { - return Reflect.apply(...arguments).then(o => pruner(o)); - }, - }); -})(); - - -// Imported from: -// https://github.com/NanoAdblocker/NanoFilters/blob/1f3be7211bb0809c5106996f52564bf10c4525f7/NanoFiltersSource/NanoResources.txt#L126 -// -// Speed up or down setInterval, 3 optional arguments. -// The payload matcher, a string literal or a JavaScript RegExp, defaults -// to match all. -// delayMatcher -// The delay matcher, an integer, defaults to 1000. -// Use `*` to match any delay. -// boostRatio - The delay multiplier when there is a match, 0.5 speeds up by -// 2 times and 2 slows down by 2 times, defaults to 0.05 or speed up -// 20 times. Speed up and down both cap at 50 times. -/// nano-setInterval-booster.js -/// alias nano-sib.js -(function() { - let needleArg = '{{1}}'; - if ( needleArg === '{{1}}' ) { needleArg = ''; } - let delayArg = '{{2}}'; - if ( delayArg === '{{2}}' ) { delayArg = ''; } - let boostArg = '{{3}}'; - if ( boostArg === '{{3}}' ) { boostArg = ''; } - if ( needleArg === '' ) { - needleArg = '.?'; - } else if ( needleArg.charAt(0) === '/' && needleArg.slice(-1) === '/' ) { - needleArg = needleArg.slice(1, -1); - } else { - needleArg = needleArg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const reNeedle = new RegExp(needleArg); - let delay = delayArg !== '*' ? parseInt(delayArg, 10) : -1; - if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; } - let boost = parseFloat(boostArg); - boost = isNaN(boost) === false && isFinite(boost) - ? Math.min(Math.max(boost, 0.02), 50) - : 0.05; - self.setInterval = new Proxy(self.setInterval, { - apply: function(target, thisArg, args) { - const [ a, b ] = args; - if ( - (delay === -1 || b === delay) && - reNeedle.test(a.toString()) - ) { - args[1] = b * boost; - } - return target.apply(thisArg, args); - } - }); -})(); - - -// Imported from: -// https://github.com/NanoAdblocker/NanoFilters/blob/1f3be7211bb0809c5106996f52564bf10c4525f7/NanoFiltersSource/NanoResources.txt#L82 -// -// Speed up or down setTimeout, 3 optional arguments. -// funcMatcher -// The payload matcher, a string literal or a JavaScript RegExp, defaults -// to match all. -// delayMatcher -// The delay matcher, an integer, defaults to 1000. -// Use `*` to match any delay. -// boostRatio - The delay multiplier when there is a match, 0.5 speeds up by -// 2 times and 2 slows down by 2 times, defaults to 0.05 or speed up -// 20 times. Speed up and down both cap at 50 times. -/// nano-setTimeout-booster.js -/// alias nano-stb.js -(function() { - let needleArg = '{{1}}'; - if ( needleArg === '{{1}}' ) { needleArg = ''; } - let delayArg = '{{2}}'; - if ( delayArg === '{{2}}' ) { delayArg = ''; } - let boostArg = '{{3}}'; - if ( boostArg === '{{3}}' ) { boostArg = ''; } - if ( needleArg === '' ) { - needleArg = '.?'; - } else if ( needleArg.charAt(0) === '/' && needleArg.slice(-1) === '/' ) { - needleArg = needleArg.slice(1, -1); - } else { - needleArg = needleArg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const reNeedle = new RegExp(needleArg); - let delay = delayArg !== '*' ? parseInt(delayArg, 10) : -1; - if ( isNaN(delay) || isFinite(delay) === false ) { delay = 1000; } - let boost = parseFloat(boostArg); - boost = isNaN(boost) === false && isFinite(boost) - ? Math.min(Math.max(boost, 0.02), 50) - : 0.05; - self.setTimeout = new Proxy(self.setTimeout, { - apply: function(target, thisArg, args) { - const [ a, b ] = args; - if ( - (delay === -1 || b === delay) && - reNeedle.test(a.toString()) - ) { - args[1] = b * boost; - } - return target.apply(thisArg, args); - } - }); -})(); - - -/// noeval-if.js -(function() { - let needle = '{{1}}'; - if ( needle === '' || needle === '{{1}}' ) { - needle = '.?'; - } else if ( needle.slice(0,1) === '/' && needle.slice(-1) === '/' ) { - needle = needle.slice(1,-1); - } else { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needle = new RegExp(needle); - window.eval = new Proxy(window.eval, { // jshint ignore: line - apply: function(target, thisArg, args) { - const a = args[0]; - if ( needle.test(a.toString()) === false ) { - return target.apply(thisArg, args); - } - } - }); -})(); - - -/// no-fetch-if.js -(function() { - let arg1 = '{{1}}'; - if ( arg1 === '{{1}}' ) { arg1 = ''; } - const needles = []; - for ( const condition of arg1.split(/\s+/) ) { - if ( condition === '' ) { continue; } - const pos = condition.indexOf(':'); - let key, value; - if ( pos !== -1 ) { - key = condition.slice(0, pos); - value = condition.slice(pos + 1); - } else { - key = 'url'; - value = condition; - } - if ( value === '' ) { - value = '^'; - } else if ( value.startsWith('/') && value.endsWith('/') ) { - value = value.slice(1, -1); - } else { - value = value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needles.push({ key, re: new RegExp(value) }); - } - const log = needles.length === 0 ? console.log.bind(console) : undefined; - self.fetch = new Proxy(self.fetch, { - apply: function(target, thisArg, args) { - let proceed = true; - try { - let details; - if ( args[0] instanceof self.Request ) { - details = args[0]; - } else { - details = Object.assign({ url: args[0] }, args[1]); - } - const props = new Map(); - for ( const prop in details ) { - let v = details[prop]; - if ( typeof v !== 'string' ) { - try { v = JSON.stringify(v); } - catch(ex) { } - } - if ( typeof v !== 'string' ) { continue; } - props.set(prop, v); - } - if ( log !== undefined ) { - const out = Array.from(props) - .map(a => `${a[0]}:${a[1]}`) - .join(' '); - log(`uBO: fetch(${out})`); - } - proceed = needles.length === 0; - for ( const { key, re } of needles ) { - if ( - props.has(key) === false || - re.test(props.get(key)) === false - ) { - proceed = true; - break; - } - } - } catch(ex) { - } - return proceed - ? Reflect.apply(target, thisArg, args) - : Promise.resolve(new Response()); - } - }); -})(); - - -/// no-floc.js -// https://github.com/uBlockOrigin/uBlock-issues/issues/1553 -(function() { - if ( Document instanceof Object === false ) { return; } - if ( Document.prototype.interestCohort instanceof Function === false ) { - return; - } - Document.prototype.interestCohort = new Proxy( - Document.prototype.interestCohort, - { - apply: function() { - return Promise.reject(); - } - } - ); -})(); - - -/// refresh-defuser.js -// https://www.reddit.com/r/uBlockOrigin/comments/q0frv0/while_reading_a_sports_article_i_was_redirected/hf7wo9v/ -(function() { - const arg1 = '{{1}}'; - const defuse = ( ) => { - const meta = document.querySelector('meta[http-equiv="refresh" i][content]'); - if ( meta === null ) { return; } - const s = arg1 === '' || arg1 === '{{1}}' - ? meta.getAttribute('content') - : arg1; - const ms = Math.max(parseFloat(s) || 0, 0) * 1000; - setTimeout(( ) => { window.stop(); }, ms); - }; - if ( document.readyState === 'loading' ) { - document.addEventListener('DOMContentLoaded', defuse, { once: true }); - } else { - defuse(); - } -})(); - - -/// remove-attr.js -/// alias ra.js -(function() { - const token = '{{1}}'; - if ( token === '' || token === '{{1}}' ) { return; } - const tokens = token.split(/\s*\|\s*/); - let selector = '{{2}}'; - if ( selector === '' || selector === '{{2}}' ) { - selector = `[${tokens.join('],[')}]`; - } - let behavior = '{{3}}'; - let timer; - const rmattr = ( ) => { - timer = undefined; - try { - const nodes = document.querySelectorAll(selector); - for ( const node of nodes ) { - for ( const attr of tokens ) { - node.removeAttribute(attr); - } - } - } catch(ex) { - } - }; - const mutationHandler = mutations => { - if ( timer !== undefined ) { return; } - let skip = true; - for ( let i = 0; i < mutations.length && skip; i++ ) { - const { type, addedNodes, removedNodes } = mutations[i]; - if ( type === 'attributes' ) { skip = false; } - for ( let j = 0; j < addedNodes.length && skip; j++ ) { - if ( addedNodes[j].nodeType === 1 ) { skip = false; break; } - } - for ( let j = 0; j < removedNodes.length && skip; j++ ) { - if ( removedNodes[j].nodeType === 1 ) { skip = false; break; } - } - } - if ( skip ) { return; } - timer = self.requestIdleCallback(rmattr, { timeout: 17 }); - }; - const start = ( ) => { - rmattr(); - if ( /\bstay\b/.test(behavior) === false ) { return; } - const observer = new MutationObserver(mutationHandler); - observer.observe(document, { - attributes: true, - attributeFilter: tokens, - childList: true, - subtree: true, - }); - }; - if ( document.readyState !== 'complete' && /\bcomplete\b/.test(behavior) ) { - self.addEventListener('load', start, { once: true }); - } else if ( document.readyState !== 'loading' || /\basap\b/.test(behavior) ) { - start(); - } else { - self.addEventListener('DOMContentLoaded', start, { once: true }); - } -})(); - - -/// remove-class.js -/// alias rc.js -(function() { - const token = '{{1}}'; - if ( token === '' || token === '{{1}}' ) { return; } - const tokens = token.split(/\s*\|\s*/); - let selector = '{{2}}'; - if ( selector === '' || selector === '{{2}}' ) { - selector = '.' + tokens.map(a => CSS.escape(a)).join(',.'); - } - let behavior = '{{3}}'; - let timer; - const rmclass = function() { - timer = undefined; - try { - const nodes = document.querySelectorAll(selector); - for ( const node of nodes ) { - node.classList.remove(...tokens); - } - } catch(ex) { - } - }; - const mutationHandler = mutations => { - if ( timer !== undefined ) { return; } - let skip = true; - for ( let i = 0; i < mutations.length && skip; i++ ) { - const { type, addedNodes, removedNodes } = mutations[i]; - if ( type === 'attributes' ) { skip = false; } - for ( let j = 0; j < addedNodes.length && skip; j++ ) { - if ( addedNodes[j].nodeType === 1 ) { skip = false; break; } - } - for ( let j = 0; j < removedNodes.length && skip; j++ ) { - if ( removedNodes[j].nodeType === 1 ) { skip = false; break; } - } - } - if ( skip ) { return; } - timer = self.requestIdleCallback(rmclass, { timeout: 67 }); - }; - const start = ( ) => { - rmclass(); - if ( /\bstay\b/.test(behavior) === false ) { return; } - const observer = new MutationObserver(mutationHandler); - observer.observe(document, { - attributes: true, - attributeFilter: [ 'class' ], - childList: true, - subtree: true, - }); - }; - if ( document.readyState !== 'complete' && /\bcomplete\b/.test(behavior) ) { - self.addEventListener('load', start, { once: true }); - } else if ( document.readyState === 'loading' ) { - self.addEventListener('DOMContentLoaded', start, { once: true }); - } else { - start(); - } -})(); - - -/// no-requestAnimationFrame-if.js -/// alias norafif.js -(function() { - let needle = '{{1}}'; - if ( needle === '{{1}}' ) { needle = ''; } - const needleNot = needle.charAt(0) === '!'; - if ( needleNot ) { needle = needle.slice(1); } - if ( needle.startsWith('/') && needle.endsWith('/') ) { - needle = needle.slice(1, -1); - } else if ( needle !== '' ) { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const log = needleNot === false && needle === '' ? console.log : undefined; - const reNeedle = new RegExp(needle); - window.requestAnimationFrame = new Proxy(window.requestAnimationFrame, { - apply: function(target, thisArg, args) { - const a = String(args[0]); - let defuse = false; - if ( log !== undefined ) { - log('uBO: requestAnimationFrame("%s")', a); - } else { - defuse = reNeedle.test(a) !== needleNot; - } - if ( defuse ) { - args[0] = function(){}; - } - return target.apply(thisArg, args); - } - }); -})(); - - -/// set-constant.js -/// alias set.js -(function() { - const chain = '{{1}}'; - let cValue = '{{2}}'; - const thisScript = document.currentScript; - if ( cValue === 'undefined' ) { - cValue = undefined; - } else if ( cValue === 'false' ) { - cValue = false; - } else if ( cValue === 'true' ) { - cValue = true; - } else if ( cValue === 'null' ) { - cValue = null; - } else if ( cValue === "''" ) { - cValue = ''; - } else if ( cValue === '[]' ) { - cValue = []; - } else if ( cValue === '{}' ) { - cValue = {}; - } else if ( cValue === 'noopFunc' ) { - cValue = function(){}; - } else if ( cValue === 'trueFunc' ) { - cValue = function(){ return true; }; - } else if ( cValue === 'falseFunc' ) { - cValue = function(){ return false; }; - } else if ( /^\d+$/.test(cValue) ) { - cValue = parseFloat(cValue); - if ( isNaN(cValue) ) { return; } - if ( Math.abs(cValue) > 0x7FFF ) { return; } - } else { - return; - } - let aborted = false; - const mustAbort = function(v) { - if ( aborted ) { return true; } - aborted = - (v !== undefined && v !== null) && - (cValue !== undefined && cValue !== null) && - (typeof v !== typeof cValue); - return aborted; - }; - // https://github.com/uBlockOrigin/uBlock-issues/issues/156 - // Support multiple trappers for the same property. - const trapProp = function(owner, prop, configurable, handler) { - if ( handler.init(owner[prop]) === false ) { return; } - const odesc = Object.getOwnPropertyDescriptor(owner, prop); - let prevGetter, prevSetter; - if ( odesc instanceof Object ) { - owner[prop] = cValue; - if ( odesc.get instanceof Function ) { - prevGetter = odesc.get; - } - if ( odesc.set instanceof Function ) { - prevSetter = odesc.set; - } - } - try { - Object.defineProperty(owner, prop, { - configurable, - get() { - if ( prevGetter !== undefined ) { - prevGetter(); - } - return handler.getter(); // cValue - }, - set(a) { - if ( prevSetter !== undefined ) { - prevSetter(a); - } - handler.setter(a); - } - }); - } catch(ex) { - } - }; - const trapChain = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - trapProp(owner, chain, false, { - v: undefined, - init: function(v) { - if ( mustAbort(v) ) { return false; } - this.v = v; - return true; - }, - getter: function() { - return document.currentScript === thisScript - ? this.v - : cValue; - }, - setter: function(a) { - if ( mustAbort(a) === false ) { return; } - cValue = a; - } - }); - return; - } - const prop = chain.slice(0, pos); - const v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v instanceof Object || typeof v === 'object' && v !== null ) { - trapChain(v, chain); - return; - } - trapProp(owner, prop, true, { - v: undefined, - init: function(v) { - this.v = v; - return true; - }, - getter: function() { - return this.v; - }, - setter: function(a) { - this.v = a; - if ( a instanceof Object ) { - trapChain(a, chain); - } - } - }); - }; - trapChain(window, chain); -})(); - - -/// no-setInterval-if.js -/// alias nosiif.js -(function() { - let needle = '{{1}}'; - const needleNot = needle.charAt(0) === '!'; - if ( needleNot ) { needle = needle.slice(1); } - let delay = '{{2}}'; - if ( delay === '{{2}}' ) { delay = undefined; } - let delayNot = false; - if ( delay !== undefined ) { - delayNot = delay.charAt(0) === '!'; - if ( delayNot ) { delay = delay.slice(1); } - delay = parseInt(delay, 10); - } - if ( needle === '' || needle === '{{1}}' ) { - needle = ''; - } else if ( needle.startsWith('/') && needle.endsWith('/') ) { - needle = needle.slice(1,-1); - } else { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const log = needleNot === false && needle === '' && delay === undefined - ? console.log - : undefined; - const reNeedle = new RegExp(needle); - window.setInterval = new Proxy(window.setInterval, { - apply: function(target, thisArg, args) { - const a = String(args[0]); - const b = args[1]; - if ( log !== undefined ) { - log('uBO: setInterval("%s", %s)', a, b); - } else { - let defuse; - if ( needle !== '' ) { - defuse = reNeedle.test(a) !== needleNot; - } - if ( defuse !== false && delay !== undefined ) { - defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; - } - if ( defuse ) { - args[0] = function(){}; - } - } - return target.apply(thisArg, args); - } - }); -})(); - - -/// no-setTimeout-if.js -/// alias nostif.js -/// alias setTimeout-defuser.js -(function() { - let needle = '{{1}}'; - const needleNot = needle.charAt(0) === '!'; - if ( needleNot ) { needle = needle.slice(1); } - let delay = '{{2}}'; - if ( delay === '{{2}}' ) { delay = undefined; } - let delayNot = false; - if ( delay !== undefined ) { - delayNot = delay.charAt(0) === '!'; - if ( delayNot ) { delay = delay.slice(1); } - delay = parseInt(delay, 10); - } - if ( needle === '' || needle === '{{1}}' ) { - needle = ''; - } else if ( needle.startsWith('/') && needle.endsWith('/') ) { - needle = needle.slice(1,-1); - } else { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const log = needleNot === false && needle === '' && delay === undefined - ? console.log - : undefined; - const reNeedle = new RegExp(needle); - window.setTimeout = new Proxy(window.setTimeout, { - apply: function(target, thisArg, args) { - const a = String(args[0]); - const b = args[1]; - if ( log !== undefined ) { - log('uBO: setTimeout("%s", %s)', a, b); - } else { - let defuse; - if ( needle !== '' ) { - defuse = reNeedle.test(a) !== needleNot; - } - if ( defuse !== false && delay !== undefined ) { - defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; - } - if ( defuse ) { - args[0] = function(){}; - } - } - return target.apply(thisArg, args); - } - }); -})(); - - -/// webrtc-if.js -(function() { - let good = '{{1}}'; - if ( good.startsWith('/') && good.endsWith('/') ) { - good = good.slice(1, -1); - } else { - good = good.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - let reGood; - try { - reGood = new RegExp(good); - } catch(ex) { - return; - } - const rtcName = window.RTCPeerConnection - ? 'RTCPeerConnection' - : (window.webkitRTCPeerConnection ? 'webkitRTCPeerConnection' : ''); - if ( rtcName === '' ) { return; } - const log = console.log.bind(console); - const neuteredPeerConnections = new WeakSet(); - const isGoodConfig = function(instance, config) { - if ( neuteredPeerConnections.has(instance) ) { return false; } - if ( config instanceof Object === false ) { return true; } - if ( Array.isArray(config.iceServers) === false ) { return true; } - for ( const server of config.iceServers ) { - const urls = typeof server.urls === 'string' - ? [ server.urls ] - : server.urls; - if ( Array.isArray(urls) ) { - for ( const url of urls ) { - if ( reGood.test(url) ) { return true; } - } - } - if ( typeof server.username === 'string' ) { - if ( reGood.test(server.username) ) { return true; } - } - if ( typeof server.credential === 'string' ) { - if ( reGood.test(server.credential) ) { return true; } - } - } - neuteredPeerConnections.add(instance); - return false; - }; - const peerConnectionCtor = window[rtcName]; - const peerConnectionProto = peerConnectionCtor.prototype; - peerConnectionProto.createDataChannel = - new Proxy(peerConnectionProto.createDataChannel, { - apply: function(target, thisArg, args) { - if ( isGoodConfig(target, args[1]) === false ) { - log('uBO:', args[1]); - return Reflect.apply(target, thisArg, args.slice(0, 1)); - } - return Reflect.apply(target, thisArg, args); - }, - }); - window[rtcName] = - new Proxy(peerConnectionCtor, { - construct: function(target, args) { - if ( isGoodConfig(target, args[0]) === false ) { - log('uBO:', args[0]); - return Reflect.construct(target); - } - return Reflect.construct(target, args); - } - }); -})(); - - -/// no-xhr-if.js -(function() { - const xhrInstances = new WeakMap(); - let arg1 = '{{1}}'; - if ( arg1 === '{{1}}' ) { arg1 = ''; } - const needles = []; - for ( const condition of arg1.split(/\s+/) ) { - if ( condition === '' ) { continue; } - const pos = condition.indexOf(':'); - let key, value; - if ( pos !== -1 ) { - key = condition.slice(0, pos); - value = condition.slice(pos + 1); - } else { - key = 'url'; - value = condition; - } - if ( value === '' ) { - value = '^'; - } else if ( value.startsWith('/') && value.endsWith('/') ) { - value = value.slice(1, -1); - } else { - value = value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needles.push({ key, re: new RegExp(value) }); - } - const log = needles.length === 0 ? console.log.bind(console) : undefined; - self.XMLHttpRequest = class extends self.XMLHttpRequest { - open(...args) { - if ( log !== undefined ) { - log(`uBO: xhr.open(${args.join(', ')})`); - } else { - const argNames = [ 'method', 'url' ]; - const haystack = new Map(); - for ( let i = 0; i < args.length && i < argNames.length; i++ ) { - haystack.set(argNames[i], args[i]); - } - if ( haystack.size !== 0 ) { - let matches = true; - for ( const { key, re } of needles ) { - matches = re.test(haystack.get(key) || ''); - if ( matches === false ) { break; } - } - if ( matches ) { - xhrInstances.set(this, haystack); - } - } - } - return super.open(...args); - } - send(...args) { - const haystack = xhrInstances.get(this); - if ( haystack === undefined ) { - return super.send(...args); - } - Object.defineProperties(this, { - readyState: { value: 4, writable: false }, - response: { value: '', writable: false }, - responseText: { value: '', writable: false }, - responseURL: { value: haystack.get('url'), writable: false }, - responseXML: { value: '', writable: false }, - status: { value: 200, writable: false }, - statusText: { value: 'OK', writable: false }, - }); - this.dispatchEvent(new Event('readystatechange')); - this.dispatchEvent(new Event('load')); - this.dispatchEvent(new Event('loadend')); - } - }; -})(); - - -// https://github.com/uBlockOrigin/uAssets/issues/10323#issuecomment-992312847 -// https://github.com/AdguardTeam/Scriptlets/issues/158 -// https://github.com/uBlockOrigin/uBlock-issues/discussions/2270 -/// window-close-if.js -(function() { - const arg1 = '{{1}}'; - let reStr; - let subject = ''; - if ( arg1 === '{{1}}' || arg1 === '' ) { - reStr = '^'; - } else if ( /^\/.*\/$/.test(arg1) ) { - reStr = arg1.slice(1, -1); - subject = window.location.href; - } else { - reStr = arg1.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - subject = `${window.location.pathname}${window.location.search}`; - } - try { - const re = new RegExp(reStr); - if ( re.test(subject) ) { - window.close(); - } - } catch(ex) { - console.log(ex); - } -})(); - - -// https://github.com/gorhill/uBlock/issues/1228 -/// window.name-defuser.js -(function() { - if ( window === window.top ) { - window.name = ''; - } -})(); - - -// Experimental: Generic nuisance overlay buster. -// if this works well and proves to be useful, this may end up -// as a stock tool in uBO's popup panel. -/// overlay-buster.js -(function() { - if ( window !== window.top ) { - return; - } - var tstart; - var ttl = 30000; - var delay = 0; - var delayStep = 50; - var buster = function() { - var docEl = document.documentElement, - bodyEl = document.body, - vw = Math.min(docEl.clientWidth, window.innerWidth), - vh = Math.min(docEl.clientHeight, window.innerHeight), - tol = Math.min(vw, vh) * 0.05, - el = document.elementFromPoint(vw/2, vh/2), - style, rect; - for (;;) { - if ( el === null || el.parentNode === null || el === bodyEl ) { - break; - } - style = window.getComputedStyle(el); - if ( parseInt(style.zIndex, 10) >= 1000 || style.position === 'fixed' ) { - rect = el.getBoundingClientRect(); - if ( rect.left <= tol && rect.top <= tol && (vw - rect.right) <= tol && (vh - rect.bottom) < tol ) { - el.parentNode.removeChild(el); - tstart = Date.now(); - el = document.elementFromPoint(vw/2, vh/2); - bodyEl.style.setProperty('overflow', 'auto', 'important'); - docEl.style.setProperty('overflow', 'auto', 'important'); - continue; - } - } - el = el.parentNode; - } - if ( (Date.now() - tstart) < ttl ) { - delay = Math.min(delay + delayStep, 1000); - setTimeout(buster, delay); - } - }; - var domReady = function(ev) { - if ( ev ) { - document.removeEventListener(ev.type, domReady); - } - tstart = Date.now(); - setTimeout(buster, delay); - }; - if ( document.readyState === 'loading' ) { - document.addEventListener('DOMContentLoaded', domReady); - } else { - domReady(); - } -})(); - - -// https://github.com/uBlockOrigin/uAssets/issues/8 -/// alert-buster.js -(function() { - window.alert = new Proxy(window.alert, { - apply: function(a) { - console.info(a); - }, - }); -})(); - - -// https://github.com/uBlockOrigin/uAssets/issues/58 -/// gpt-defuser.js -(function() { - const noopfn = function() { - }; - let props = '_resetGPT resetGPT resetAndLoadGPTRecovery _resetAndLoadGPTRecovery setupGPT setupGPTuo'; - props = props.split(/\s+/); - while ( props.length ) { - var prop = props.pop(); - if ( typeof window[prop] === 'function' ) { - window[prop] = noopfn; - } else { - Object.defineProperty(window, prop, { - get: function() { return noopfn; }, - set: noopfn - }); - } - } -})(); - - -// Prevent web pages from using RTCPeerConnection(), and report attempts in console. -/// nowebrtc.js -(function() { - var rtcName = window.RTCPeerConnection ? 'RTCPeerConnection' : ( - window.webkitRTCPeerConnection ? 'webkitRTCPeerConnection' : '' - ); - if ( rtcName === '' ) { return; } - var log = console.log.bind(console); - var pc = function(cfg) { - log('Document tried to create an RTCPeerConnection: %o', cfg); - }; - const noop = function() { - }; - pc.prototype = { - close: noop, - createDataChannel: noop, - createOffer: noop, - setRemoteDescription: noop, - toString: function() { - return '[object RTCPeerConnection]'; - } - }; - var z = window[rtcName]; - window[rtcName] = pc.bind(window); - if ( z.prototype ) { - z.prototype.createDataChannel = function() { - return { - close: function() {}, - send: function() {} - }; - }.bind(null); - } -})(); - - -// https://github.com/uBlockOrigin/uAssets/issues/88 -/// golem.de.js -(function() { - const rael = window.addEventListener; - window.addEventListener = function(a, b) { - rael(...arguments); - let haystack; - try { - haystack = b.toString(); - } catch(ex) { - } - if ( - typeof haystack === 'string' && - /^\s*function\s*\(\)\s*\{\s*window\.clearTimeout\(r\)\s*\}\s*$/.test(haystack) - ) { - b(); - } - }.bind(window); -})(); - - -// https://forums.lanik.us/viewtopic.php?f=64&t=32278 -// https://www.reddit.com/r/chrome/comments/58eix6/ublock_origin_not_working_on_certain_sites/ -/// upmanager-defuser.js -(function() { - var onerror = window.onerror; - window.onerror = function(msg, source, lineno, colno, error) { - if ( typeof msg === 'string' && msg.indexOf('upManager') !== -1 ) { - return true; - } - if ( onerror instanceof Function ) { - onerror.call(window, msg, source, lineno, colno, error); - } - }; - Object.defineProperty(window, 'upManager', { value: function() {} }); -})(); - - -// https://github.com/uBlockOrigin/uAssets/issues/110 -/// smartadserver.com.js -(function() { - Object.defineProperties(window, { - SmartAdObject: { value: function(){} }, - SmartAdServerAjax: { value: function(){} }, - smartAd: { value: { LoadAds: function() {}, Register: function() {} } } - }); -})(); - - -// https://github.com/reek/anti-adblock-killer/issues/3774#issuecomment-348536138 -// https://github.com/uBlockOrigin/uAssets/issues/883 -/// adfly-defuser.js -(function() { - // Based on AdsBypasser - // License: - // https://github.com/adsbypasser/adsbypasser/blob/master/LICENSE - var isDigit = /^\d$/; - var handler = function(encodedURL) { - var var1 = "", var2 = "", i; - for (i = 0; i < encodedURL.length; i++) { - if (i % 2 === 0) { - var1 = var1 + encodedURL.charAt(i); - } else { - var2 = encodedURL.charAt(i) + var2; - } - } - var data = (var1 + var2).split(""); - for (i = 0; i < data.length; i++) { - if (isDigit.test(data[i])) { - for (var ii = i + 1; ii < data.length; ii++) { - if (isDigit.test(data[ii])) { - var temp = parseInt(data[i],10) ^ parseInt(data[ii],10); - if (temp < 10) { - data[i] = temp.toString(); - } - i = ii; - break; - } - } - } - } - data = data.join(""); - var decodedURL = window.atob(data).slice(16, -16); - window.stop(); - window.onbeforeunload = null; - window.location.href = decodedURL; - }; - try { - var val; - var flag = true; - window.Object.defineProperty(window, "ysmm", { - configurable: false, - set: function(value) { - if (flag) { - flag = false; - try { - if (typeof value === "string") { - handler(value); - } - } catch (err) { } - } - val = value; - }, - get: function() { - return val; - } - }); - } catch (err) { - window.console.error("Failed to set up Adfly bypasser!"); - } -})(); - - -// https://github.com/uBlockOrigin/uAssets/issues/913 -/// disable-newtab-links.js -(function() { - document.addEventListener('click', function(ev) { - var target = ev.target; - while ( target !== null ) { - if ( target.localName === 'a' && target.hasAttribute('target') ) { - ev.stopPropagation(); - ev.preventDefault(); - break; - } - target = target.parentNode; - } - }); -})(); - - -/// damoh-defuser.js -(function() { - const handled = new WeakSet(); - let asyncTimer; - const cleanVideo = function() { - asyncTimer = undefined; - const v = document.querySelector('video'); - if ( v === null ) { return; } - if ( handled.has(v) ) { return; } - handled.add(v); - v.pause(); - v.controls = true; - let el = v.querySelector('meta[itemprop="contentURL"][content]'); - if ( el === null ) { return; } - v.src = el.getAttribute('content'); - el = v.querySelector('meta[itemprop="thumbnailUrl"][content]'); - if ( el !== null ) { v.poster = el.getAttribute('content'); } - }; - const cleanVideoAsync = function() { - if ( asyncTimer !== undefined ) { return; } - asyncTimer = window.requestAnimationFrame(cleanVideo); - }; - const observer = new MutationObserver(cleanVideoAsync); - observer.observe(document, { childList: true, subtree: true }); -})(); - - -/// twitch-videoad.js -// https://github.com/uBlockOrigin/uAssets/issues/5184 -// https://github.com/pixeltris/TwitchAdSolutions/commit/6be4c5313035 -// https://github.com/pixeltris/TwitchAdSolutions/commit/3d2883ea9e3a -// https://github.com/pixeltris/TwitchAdSolutions/commit/7233b5fd2284 -// https://github.com/pixeltris/TwitchAdSolutions/commit/aad8946dab2b -(function() { - if ( /(^|\.)twitch\.tv$/.test(document.location.hostname) === false ) { return; } - window.fetch = new Proxy(window.fetch, { - apply: function(target, thisArg, args) { - const [ url, init ] = args; - if ( - typeof url === 'string' && - url.includes('gql') && - init instanceof Object && - init.headers instanceof Object && - typeof init.body === 'string' && - init.body.includes('PlaybackAccessToken') && - init.body.includes('"isVod":true') === false - ) { - const { headers } = init; - if ( typeof headers['X-Device-Id'] === 'string' ) { - headers['X-Device-Id'] = 'twitch-web-wall-mason'; - } - if ( typeof headers['Device-ID'] === 'string' ) { - headers['Device-ID'] = 'twitch-web-wall-mason'; - } - } - return Reflect.apply(target, thisArg, args); - } - }); -})(); - - -// https://github.com/NanoAdblocker/NanoFilters/issues/149 -/// cookie-remover.js -(function() { - const needle = '{{1}}'; - let reName = /./; - if ( /^\/.+\/$/.test(needle) ) { - reName = new RegExp(needle.slice(1,-1)); - } else if ( needle !== '' && needle !== '{{1}}' ) { - reName = new RegExp(needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); - } - const removeCookie = function() { - document.cookie.split(';').forEach(cookieStr => { - let pos = cookieStr.indexOf('='); - if ( pos === -1 ) { return; } - let cookieName = cookieStr.slice(0, pos).trim(); - if ( !reName.test(cookieName) ) { return; } - let part1 = cookieName + '='; - let part2a = '; domain=' + document.location.hostname; - let part2b = '; domain=.' + document.location.hostname; - let part2c, part2d; - let domain = document.domain; - if ( domain ) { - if ( domain !== document.location.hostname ) { - part2c = '; domain=.' + domain; - } - if ( domain.startsWith('www.') ) { - part2d = '; domain=' + domain.replace('www', ''); - } - } - let part3 = '; path=/'; - let part4 = '; Max-Age=-1000; expires=Thu, 01 Jan 1970 00:00:00 GMT'; - document.cookie = part1 + part4; - document.cookie = part1 + part2a + part4; - document.cookie = part1 + part2b + part4; - document.cookie = part1 + part3 + part4; - document.cookie = part1 + part2a + part3 + part4; - document.cookie = part1 + part2b + part3 + part4; - if ( part2c !== undefined ) { - document.cookie = part1 + part2c + part3 + part4; - } - if ( part2d !== undefined ) { - document.cookie = part1 + part2d + part3 + part4; - } - }); - }; - removeCookie(); - window.addEventListener('beforeunload', removeCookie); -})(); - - - -/// xml-prune.js -(function() { - let selector = '{{1}}'; - if ( selector === '{{1}}' ) { - selector = ''; - } - if ( selector === '' ) { return; } - let selectorCheck = '{{2}}'; - if ( selectorCheck === '{{2}}' ) { - selectorCheck = ''; - } - let urlPattern = '{{3}}'; - if ( urlPattern === '{{3}}' ) { - urlPattern = ''; - } - let reUrl; - if ( urlPattern === '' ) { - reUrl = /^/; - } else if ( /^\/.*\/$/.test(urlPattern) ) { - reUrl = new RegExp(urlPattern.slice(1, -1)); - } else { - reUrl = new RegExp(urlPattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); - } - const pruner = text => { - if ( (/^\s*\s*$/.test(text)) === false ) { - return text; - } - try { - const xmlParser = new DOMParser(); - const xmlDoc = xmlParser.parseFromString(text, 'text/xml'); - if ( selectorCheck !== '' && xmlDoc.querySelector(selectorCheck) === null ) { - return text; - } - const elems = xmlDoc.querySelectorAll(selector); - if ( elems.length !== 0 ) { - for ( const elem of elems ) { - elem.remove(); - } - const serializer = new XMLSerializer(); - text = serializer.serializeToString(xmlDoc); - } - } catch(ex) { - } - return text; - }; - const urlFromArg = arg => { - if ( typeof arg === 'string' ) { return arg; } - if ( arg instanceof Request ) { return arg.url; } - return String(arg); - }; - const realFetch = self.fetch; - self.fetch = new Proxy(self.fetch, { - apply: function(target, thisArg, args) { - if ( reUrl.test(urlFromArg(args[0])) === false ) { - return Reflect.apply(target, thisArg, args); - } - return realFetch(...args).then(realResponse => - realResponse.text().then(text => - new Response(pruner(text), { - status: realResponse.status, - statusText: realResponse.statusText, - headers: realResponse.headers, - }) - ) - ); - } - }); -})(); - - - -/// m3u-prune.js -// https://en.wikipedia.org/wiki/M3U -(function() { - let m3uPattern = '{{1}}'; - if ( m3uPattern === '{{1}}' ) { - m3uPattern = ''; - } - let urlPattern = '{{2}}'; - if ( urlPattern === '{{2}}' ) { - urlPattern = ''; - } - const regexFromArg = arg => { - if ( arg === '' ) { return /^/; } - if ( /^\/.*\/$/.test(arg) ) { return new RegExp(arg.slice(1, -1)); } - return new RegExp( - arg.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*+/g, '.*?') - ); - }; - const reM3u = regexFromArg(m3uPattern); - const reUrl = regexFromArg(urlPattern); - const pruneSpliceoutBlock = (lines, i) => { - if ( lines[i].startsWith('#EXT-X-CUE:TYPE="SpliceOut"') === false ) { - return false; - } - lines[i] = undefined; i += 1; - if ( lines[i].startsWith('#EXT-X-ASSET:CAID') ) { - lines[i] = undefined; i += 1; - } - if ( lines[i].startsWith('#EXT-X-SCTE35:') ) { - lines[i] = undefined; i += 1; - } - if ( lines[i].startsWith('#EXT-X-CUE-IN') ) { - lines[i] = undefined; i += 1; - } - if ( lines[i].startsWith('#EXT-X-SCTE35:') ) { - lines[i] = undefined; i += 1; - } - return true; - }; - const pruneInfBlock = (lines, i) => { - if ( lines[i].startsWith('#EXTINF') === false ) { return false; } - if ( reM3u.test(lines[i+1]) === false ) { return false; } - lines[i] = lines[i+1] = undefined; i += 2; - if ( lines[i].startsWith('#EXT-X-DISCONTINUITY') ) { - lines[i] = undefined; i += 1; - } - return true; - }; - const pruner = text => { - if ( (/^\s*#EXTM3U/.test(text)) === false ) { return text; } - const lines = text.split(/\n\r|\n|\r/); - for ( let i = 0; i < lines.length; i++ ) { - if ( lines[i] === undefined ) { continue; } - if ( pruneSpliceoutBlock(lines, i) ) { continue; } - if ( pruneInfBlock(lines, i) ) { continue; } - } - return lines.filter(l => l !== undefined).join('\n'); - }; - const urlFromArg = arg => { - if ( typeof arg === 'string' ) { return arg; } - if ( arg instanceof Request ) { return arg.url; } - return String(arg); - }; - const realFetch = self.fetch; - self.fetch = new Proxy(self.fetch, { - apply: function(target, thisArg, args) { - if ( reUrl.test(urlFromArg(args[0])) === false ) { - return Reflect.apply(target, thisArg, args); - } - return realFetch(...args).then(realResponse => - realResponse.text().then(text => - new Response(pruner(text), { - status: realResponse.status, - statusText: realResponse.statusText, - headers: realResponse.headers, - }) - ) - ); - } - }); - self.XMLHttpRequest.prototype.open = new Proxy(self.XMLHttpRequest.prototype.open, { - apply: async (target, thisArg, args) => { - if ( reUrl.test(urlFromArg(args[1])) === false ) { - return Reflect.apply(target, thisArg, args); - } - thisArg.addEventListener('readystatechange', function() { - if ( thisArg.readyState !== 4 ) { return; } - const type = thisArg.responseType; - if ( type !== '' && type !== 'text' ) { return; } - const textin = thisArg.responseText; - const textout = pruner(textin); - if ( textout === textin ) { return; } - Object.defineProperty(thisArg, 'response', { value: textout }); - Object.defineProperty(thisArg, 'responseText', { value: textout }); - }); - return Reflect.apply(target, thisArg, args); - } - }); -})(); - - - -// These lines below are skipped by the resource parser. -// <<<< end of private namespace -})(); diff -Nru ublock-origin-1.46.0+dfsg/debian/changelog ublock-origin-1.62.0+dfsg/debian/changelog --- ublock-origin-1.46.0+dfsg/debian/changelog 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/changelog 2025-06-10 15:15:46.000000000 +0000 @@ -1,3 +1,73 @@ +ublock-origin (1.62.0+dfsg-0+deb12u1) bookworm; urgency=medium + + * Backport 1.62.0+dfsg to bookworm to improve user experience and ad filter + capabilities. + * Fix CVE-2025-4215: + A remote attacker could abuse an inefficient regular expression in + ublock-origin's filters to cause a denial-of-service and freeze a web + browser. (Closes: #1104635) + + -- Markus Koschany Tue, 10 Jun 2025 17:15:46 +0200 + +ublock-origin (1.62.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.62.0+dfsg. + + -- Markus Koschany Sun, 09 Feb 2025 19:20:16 +0100 + +ublock-origin (1.60.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.60.0+dfsg. (Closes: #1078943) + + -- Markus Koschany Wed, 02 Oct 2024 09:10:25 +0200 + +ublock-origin (1.57.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.57.0+dfsg. + + -- Markus Koschany Sat, 06 Apr 2024 16:19:34 +0200 + +ublock-origin (1.55.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.55.0+dfsg. + + -- Markus Koschany Sun, 21 Jan 2024 21:18:52 +0100 + +ublock-origin (1.54.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.54.0+dfsg. + + -- Markus Koschany Sun, 03 Dec 2023 19:00:28 +0100 + +ublock-origin (1.53.3rc0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.53.3rc0+dfsg. (Closes: #1055315) + + -- Markus Koschany Fri, 10 Nov 2023 05:24:39 +0100 + +ublock-origin (1.52.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.52.0+dfsg. (Closes: #1052658) + + -- Markus Koschany Wed, 27 Sep 2023 01:39:18 +0200 + +ublock-origin (1.51.0+dfsg-2) unstable; urgency=medium + + * Replace js-beautify and csstree Javascript libraries with system libraries. + Document the licenses of js-beautify, csstree and hsluv in debian/copyright. + Add the missing source file of hsluv.js to debian/missing-sources. + Thanks to Bastien Roucariès for the report. (Closes: #1042757) + + -- Markus Koschany Sat, 19 Aug 2023 01:01:05 +0200 + +ublock-origin (1.51.0+dfsg-1) unstable; urgency=medium + + * New upstream version 1.51.0+dfsg. (Closes: #1039061) + * Build the minified asset filters from source. Build-depend on nodejs. + * d/control: Remove obsolete Breaks and Replaces. + + -- Markus Koschany Sat, 22 Jul 2023 00:43:04 +0200 + ublock-origin (1.46.0+dfsg-1) unstable; urgency=medium * New upstream version 1.46.0+dfsg. diff -Nru ublock-origin-1.46.0+dfsg/debian/control ublock-origin-1.62.0+dfsg/debian/control --- ublock-origin-1.46.0+dfsg/debian/control 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/control 2025-06-10 15:15:46.000000000 +0000 @@ -8,9 +8,12 @@ Build-Depends: binaryen, debhelper-compat (= 13), + nodejs, + node-css-tree, + node-js-beautify, python3, wabt -Standards-Version: 4.6.2 +Standards-Version: 4.7.0 Homepage: https://github.com/gorhill/uBlock Vcs-Git: https://salsa.debian.org/webext-team/ublock-origin.git Vcs-Browser: https://salsa.debian.org/webext-team/ublock-origin @@ -36,13 +39,9 @@ Depends: ${misc:Depends} Recommends: - firefox (>= 50) | firefox-esr (>= 50) + firefox | firefox-esr Suggests: ublock-origin-doc -Breaks: - webext-ublock-origin (<< 1.29.0) -Replaces: - webext-ublock-origin (<< 1.29.0) Description: lightweight and efficient ads, malware, trackers blocker (Firefox) uBlock is a small footprint blocker for against web ads, malware, trackers, analytics and similar invasive items. @@ -61,10 +60,6 @@ chromium Suggests: ublock-origin-doc -Breaks: - webext-ublock-origin (<< 1.29.0) -Replaces: - webext-ublock-origin (<< 1.29.0) Description: lightweight and efficient ads, malware, trackers blocker (Chromium) uBlock is a small footprint blocker for against web ads, malware, trackers, analytics and similar invasive items. diff -Nru ublock-origin-1.46.0+dfsg/debian/copyright ublock-origin-1.62.0+dfsg/debian/copyright --- ublock-origin-1.46.0+dfsg/debian/copyright 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/copyright 2025-06-10 15:15:46.000000000 +0000 @@ -22,12 +22,11 @@ uAssets/thirdparties/someonewhocares.org Files: * -Copyright: (C) 2014-2022 The uBlock Origin authors - (C) 2014-2022 Raymond Hill +Copyright: (C) 2014-2025 The uBlock Origin authors + (C) 2014-2025 Raymond Hill License: GPL-3+ -Files: uAssets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt - uAssets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt +Files: uAssets/thirdparties/easylist/* Copyright: (C) 2015 The EasyList authors (https://easylist.adblockplus.org/) License: GPL-3+ or CC-BY-SA-3.0+ @@ -44,14 +43,31 @@ Copyright: Swatinem License: LGPL-3 +Files: src/lib/hsluv/* +Copyright: 2012-2022 Alexei Boronine + 2016 Florian Dormont +License: MIT + +Files: src/lib/js-beautify/* +Copyright: 2007-2018 Einar Lielmanis, Liam Newman, and contributors +License: MIT + Files: src/js/codemirror/* Copyright: by Marijn Haverbeke and others License: MIT Files: src/lib/lz4/* -Copyright: 2018-2021, Raymond Hill +Copyright: 2018-2023, Raymond Hill License: BSD-2-clause +Files: src/lib/csstree/* +Copyright: 2016-2022 by Roman Dvornov +License: MIT + +Files: src/lib/punycode.js +Copyright: Mathias Bynens +License: MIT + Files: src/css/fonts/Inter/* Copyright: 2016-2020 The Inter Project Authors License: SIL-OFL-1.1 @@ -95,17 +111,33 @@ . Copy Left +Files: src/img/flags-of-the-world/* +Copyright: no-copyright +License: public-domain + Flag images are in the public domain (exempt from copyright). + They are completely free for non-commercial and even commercial use. + You can also download all flags." + +Files: src/img/fontawesome/* +Copyright: Dave Gandy +License: SIL-OFL-1.1 Files: debian/* Copyright: 2015 Matthew Bekkema 2016 Sean Whitton - 2018-2022, Markus Koschany + 2018-2025, Markus Koschany License: GPL-3+ Files: debian/upstream/* Copyright: (C) 2014-2016 The uBlock Origin authors License: GPL-3+ +Files: debian/missing-sources/hsluv.ts +Copyright: 2012-2022 Alexei Boronine + 2016 Florian Dormont +License: MIT + + License: GPL-3+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru ublock-origin-1.46.0+dfsg/debian/missing-sources/hsluv.ts ublock-origin-1.62.0+dfsg/debian/missing-sources/hsluv.ts --- ublock-origin-1.46.0+dfsg/debian/missing-sources/hsluv.ts 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/missing-sources/hsluv.ts 2025-06-10 15:15:46.000000000 +0000 @@ -0,0 +1,374 @@ +export class Hsluv { + private static hexChars: string = "0123456789abcdef"; + private static refY: number = 1.0; + private static refU: number = 0.19783000664283; + private static refV: number = 0.46831999493879; + private static kappa: number = 903.2962962; + private static epsilon: number = 0.0088564516; + private static m_r0: number = 3.240969941904521; + private static m_r1: number = -1.537383177570093; + private static m_r2: number = -0.498610760293; + private static m_g0: number = -0.96924363628087; + private static m_g1: number = 1.87596750150772; + private static m_g2: number = 0.041555057407175; + private static m_b0: number = 0.055630079696993; + private static m_b1: number = -0.20397695888897; + private static m_b2: number = 1.056971514242878; + + // RGB + public hex: string = '#000000'; + public rgb_r: number = 0; + public rgb_g: number = 0; + public rgb_b: number = 0; + + // CIE XYZ + public xyz_x: number = 0; + public xyz_y: number = 0; + public xyz_z: number = 0; + + // CIE LUV + public luv_l: number = 0; + public luv_u: number = 0; + public luv_v: number = 0; + + // CIE LUV LCh + public lch_l: number = 0; + public lch_c: number = 0; + public lch_h: number = 0; + + // HSLuv + public hsluv_h: number = 0; + public hsluv_s: number = 0; + public hsluv_l: number = 0; + + // HPLuv + public hpluv_h: number = 0; + public hpluv_p: number = 0; + public hpluv_l: number = 0; + + // 6 lines in slope-intercept format: R < 0, R > 1, G < 0, G > 1, B < 0, B > 1 + public r0s: number = 0; + public r0i: number = 0; + public r1s: number = 0; + public r1i: number = 0; + + public g0s: number = 0; + public g0i: number = 0; + public g1s: number = 0; + public g1i: number = 0; + + public b0s: number = 0; + public b0i: number = 0; + public b1s: number = 0; + public b1i: number = 0; + + private static fromLinear(c: number): number { + if (c <= 0.0031308) { + return 12.92 * c; + } else { + return 1.055 * Math.pow(c, 1 / 2.4) - 0.055; + } + } + + private static toLinear(c: number): number { + if (c > 0.04045) { + return Math.pow((c + 0.055) / 1.055, 2.4); + } else { + return c / 12.92; + } + } + + private static yToL(Y: number): number { + if (Y <= Hsluv.epsilon) { + return Y / Hsluv.refY * Hsluv.kappa; + } else { + return 116 * Math.pow(Y / Hsluv.refY, 1 / 3) - 16; + } + } + + private static lToY(L: number): number { + if (L <= 8) { + return Hsluv.refY * L / Hsluv.kappa; + } else { + return Hsluv.refY * Math.pow((L + 16) / 116, 3); + } + } + + private static rgbChannelToHex(chan: number): string { + const c = Math.round(chan * 255); + const digit2 = c % 16; + const digit1 = (c - digit2) / 16 | 0; + return Hsluv.hexChars.charAt(digit1) + Hsluv.hexChars.charAt(digit2); + } + + private static hexToRgbChannel(hex: string, offset: number): number { + const digit1 = Hsluv.hexChars.indexOf(hex.charAt(offset)); + const digit2 = Hsluv.hexChars.indexOf(hex.charAt(offset + 1)); + const n = digit1 * 16 + digit2; + return n / 255.0; + } + + private static distanceFromOriginAngle(slope: number, intercept: number, angle: number): number { + const d = intercept / (Math.sin(angle) - slope * Math.cos(angle)); + if (d < 0) { + return Infinity; + } else { + return d; + } + } + + private static distanceFromOrigin(slope: number, intercept: number): number { + return Math.abs(intercept) / Math.sqrt(Math.pow(slope, 2) + 1); + } + + private static min6(f1: number, f2: number, f3: number, f4: number, f5: number, f6: number): number { + return Math.min(f1, Math.min(f2, Math.min(f3, Math.min(f4, Math.min(f5, f6))))); + } + + public rgbToHex(): void { + this.hex = "#"; + this.hex += Hsluv.rgbChannelToHex(this.rgb_r); + this.hex += Hsluv.rgbChannelToHex(this.rgb_g); + this.hex += Hsluv.rgbChannelToHex(this.rgb_b); + } + + public hexToRgb(): void { + this.hex = this.hex.toLowerCase(); + this.rgb_r = Hsluv.hexToRgbChannel(this.hex, 1); + this.rgb_g = Hsluv.hexToRgbChannel(this.hex, 3); + this.rgb_b = Hsluv.hexToRgbChannel(this.hex, 5); + } + + public xyzToRgb(): void { + this.rgb_r = Hsluv.fromLinear(Hsluv.m_r0 * this.xyz_x + Hsluv.m_r1 * this.xyz_y + Hsluv.m_r2 * this.xyz_z); + this.rgb_g = Hsluv.fromLinear(Hsluv.m_g0 * this.xyz_x + Hsluv.m_g1 * this.xyz_y + Hsluv.m_g2 * this.xyz_z); + this.rgb_b = Hsluv.fromLinear(Hsluv.m_b0 * this.xyz_x + Hsluv.m_b1 * this.xyz_y + Hsluv.m_b2 * this.xyz_z); + } + + public rgbToXyz(): void { + const lr = Hsluv.toLinear(this.rgb_r); + const lg = Hsluv.toLinear(this.rgb_g); + const lb = Hsluv.toLinear(this.rgb_b); + this.xyz_x = 0.41239079926595 * lr + 0.35758433938387 * lg + 0.18048078840183 * lb; + this.xyz_y = 0.21263900587151 * lr + 0.71516867876775 * lg + 0.072192315360733 * lb; + this.xyz_z = 0.019330818715591 * lr + 0.11919477979462 * lg + 0.95053215224966 * lb; + } + + public xyzToLuv(): void { + const divider = this.xyz_x + 15 * this.xyz_y + 3 * this.xyz_z; + let varU = 4 * this.xyz_x; + let varV = 9 * this.xyz_y; + if (divider !== 0) { + varU /= divider; + varV /= divider; + } else { + varU = NaN; + varV = NaN; + } + this.luv_l = Hsluv.yToL(this.xyz_y); + if (this.luv_l === 0) { + this.luv_u = 0; + this.luv_v = 0; + } else { + this.luv_u = 13 * this.luv_l * (varU - Hsluv.refU); + this.luv_v = 13 * this.luv_l * (varV - Hsluv.refV); + } + } + + public luvToXyz(): void { + if (this.luv_l === 0) { + this.xyz_x = 0; + this.xyz_y = 0; + this.xyz_z = 0; + return; + } + const varU = this.luv_u / (13 * this.luv_l) + Hsluv.refU; + const varV = this.luv_v / (13 * this.luv_l) + Hsluv.refV; + this.xyz_y = Hsluv.lToY(this.luv_l); + this.xyz_x = 0 - 9 * this.xyz_y * varU / ((varU - 4) * varV - varU * varV); + this.xyz_z = (9 * this.xyz_y - 15 * varV * this.xyz_y - varV * this.xyz_x) / (3 * varV); + } + + public luvToLch(): void { + this.lch_l = this.luv_l; + this.lch_c = Math.sqrt(this.luv_u * this.luv_u + this.luv_v * this.luv_v); + if (this.lch_c < 0.00000001) { + this.lch_h = 0; + } else { + const hrad = Math.atan2(this.luv_v, this.luv_u); + this.lch_h = hrad * 180.0 / Math.PI; + if (this.lch_h < 0) { + this.lch_h = 360 + this.lch_h; + } + } + } + + + public lchToLuv(): void { + const hrad = this.lch_h / 180.0 * Math.PI; + this.luv_l = this.lch_l; + this.luv_u = Math.cos(hrad) * this.lch_c; + this.luv_v = Math.sin(hrad) * this.lch_c; + } + + public calculateBoundingLines(l: number): void { + const sub1 = Math.pow(l + 16, 3) / 1560896; + const sub2 = sub1 > Hsluv.epsilon ? sub1 : l / Hsluv.kappa; + const s1r = sub2 * (284517 * Hsluv.m_r0 - 94839 * Hsluv.m_r2); + const s2r = sub2 * (838422 * Hsluv.m_r2 + 769860 * Hsluv.m_r1 + 731718 * Hsluv.m_r0); + const s3r = sub2 * (632260 * Hsluv.m_r2 - 126452 * Hsluv.m_r1); + const s1g = sub2 * (284517 * Hsluv.m_g0 - 94839 * Hsluv.m_g2); + const s2g = sub2 * (838422 * Hsluv.m_g2 + 769860 * Hsluv.m_g1 + 731718 * Hsluv.m_g0); + const s3g = sub2 * (632260 * Hsluv.m_g2 - 126452 * Hsluv.m_g1); + const s1b = sub2 * (284517 * Hsluv.m_b0 - 94839 * Hsluv.m_b2); + const s2b = sub2 * (838422 * Hsluv.m_b2 + 769860 * Hsluv.m_b1 + 731718 * Hsluv.m_b0); + const s3b = sub2 * (632260 * Hsluv.m_b2 - 126452 * Hsluv.m_b1); + this.r0s = s1r / s3r; + this.r0i = s2r * l / s3r; + this.r1s = s1r / (s3r + 126452); + this.r1i = (s2r - 769860) * l / (s3r + 126452); + this.g0s = s1g / s3g; + this.g0i = s2g * l / s3g; + this.g1s = s1g / (s3g + 126452); + this.g1i = (s2g - 769860) * l / (s3g + 126452); + this.b0s = s1b / s3b; + this.b0i = s2b * l / s3b; + this.b1s = s1b / (s3b + 126452); + this.b1i = (s2b - 769860) * l / (s3b + 126452); + } + + public calcMaxChromaHpluv(): number { + const r0 = Hsluv.distanceFromOrigin(this.r0s, this.r0i); + const r1 = Hsluv.distanceFromOrigin(this.r1s, this.r1i); + const g0 = Hsluv.distanceFromOrigin(this.g0s, this.g0i); + const g1 = Hsluv.distanceFromOrigin(this.g1s, this.g1i); + const b0 = Hsluv.distanceFromOrigin(this.b0s, this.b0i); + const b1 = Hsluv.distanceFromOrigin(this.b1s, this.b1i); + return Hsluv.min6(r0, r1, g0, g1, b0, b1); + } + + public calcMaxChromaHsluv(h: number): number { + const hueRad = h / 360 * Math.PI * 2; + const r0 = Hsluv.distanceFromOriginAngle(this.r0s, this.r0i, hueRad); + const r1 = Hsluv.distanceFromOriginAngle(this.r1s, this.r1i, hueRad); + const g0 = Hsluv.distanceFromOriginAngle(this.g0s, this.g0i, hueRad); + const g1 = Hsluv.distanceFromOriginAngle(this.g1s, this.g1i, hueRad); + const b0 = Hsluv.distanceFromOriginAngle(this.b0s, this.b0i, hueRad); + const b1 = Hsluv.distanceFromOriginAngle(this.b1s, this.b1i, hueRad); + return Hsluv.min6(r0, r1, g0, g1, b0, b1); + } + + public hsluvToLch(): void { + if (this.hsluv_l > 99.9999999) { + this.lch_l = 100; + this.lch_c = 0; + } else if (this.hsluv_l < 0.00000001) { + this.lch_l = 0; + this.lch_c = 0; + } else { + this.lch_l = this.hsluv_l; + this.calculateBoundingLines(this.hsluv_l); + const max = this.calcMaxChromaHsluv(this.hsluv_h); + this.lch_c = max / 100 * this.hsluv_s; + } + this.lch_h = this.hsluv_h; + } + + public lchToHsluv(): void { + if (this.lch_l > 99.9999999) { + this.hsluv_s = 0; + this.hsluv_l = 100; + } else if (this.lch_l < 0.00000001) { + this.hsluv_s = 0; + this.hsluv_l = 0; + } else { + this.calculateBoundingLines(this.lch_l); + const max = this.calcMaxChromaHsluv(this.lch_h); + this.hsluv_s = this.lch_c / max * 100; + this.hsluv_l = this.lch_l; + } + this.hsluv_h = this.lch_h; + } + + public hpluvToLch(): void { + if (this.hpluv_l > 99.9999999) { + this.lch_l = 100; + this.lch_c = 0; + } else if (this.hpluv_l < 0.00000001) { + this.lch_l = 0; + this.lch_c = 0; + } else { + this.lch_l = this.hpluv_l; + this.calculateBoundingLines(this.hpluv_l); + const max = this.calcMaxChromaHpluv(); + this.lch_c = max / 100 * this.hpluv_p; + } + this.lch_h = this.hpluv_h; + } + + public lchToHpluv(): void { + if (this.lch_l > 99.9999999) { + this.hpluv_p = 0; + this.hpluv_l = 100; + } else if (this.lch_l < 0.00000001) { + this.hpluv_p = 0; + this.hpluv_l = 0; + } else { + this.calculateBoundingLines(this.lch_l); + const max = this.calcMaxChromaHpluv(); + this.hpluv_p = this.lch_c / max * 100; + this.hpluv_l = this.lch_l; + } + this.hpluv_h = this.lch_h; + } + + public hsluvToRgb(): void { + this.hsluvToLch(); + this.lchToLuv(); + this.luvToXyz(); + this.xyzToRgb(); + } + + public hpluvToRgb(): void { + this.hpluvToLch(); + this.lchToLuv(); + this.luvToXyz(); + this.xyzToRgb(); + } + + public hsluvToHex(): void { + this.hsluvToRgb(); + this.rgbToHex(); + } + + public hpluvToHex(): void { + this.hpluvToRgb(); + this.rgbToHex(); + } + + public rgbToHsluv(): void { + this.rgbToXyz(); + this.xyzToLuv(); + this.luvToLch(); + this.lchToHpluv(); + this.lchToHsluv(); + } + + public rgbToHpluv(): void { + this.rgbToXyz(); + this.xyzToLuv(); + this.luvToLch(); + this.lchToHpluv(); + this.lchToHpluv(); + } + + public hexToHsluv(): void { + this.hexToRgb(); + this.rgbToHsluv(); + } + + public hexToHpluv(): void { + this.hexToRgb(); + this.rgbToHpluv(); + } +} diff -Nru ublock-origin-1.46.0+dfsg/debian/patches/CVE-2025-4215.patch ublock-origin-1.62.0+dfsg/debian/patches/CVE-2025-4215.patch --- ublock-origin-1.46.0+dfsg/debian/patches/CVE-2025-4215.patch 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/patches/CVE-2025-4215.patch 2025-06-10 15:15:46.000000000 +0000 @@ -0,0 +1,96 @@ +From: Markus Koschany +Date: Tue, 10 Jun 2025 17:20:18 +0200 +Subject: CVE-2025-4215 + +Bug-Debian: https://bugs.debian.org/1104635 +Origin: https://github.com/gorhill/uBlock/commit/eaedaf5b10d2f7857c6b77fbf7d4a80681d4d46c +--- + src/js/1p-filters.js | 4 ++-- + src/js/arglist-parser.js | 4 ++-- + src/js/static-filtering-parser.js | 4 ++-- + src/js/whitelist.js | 6 +++--- + 4 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/js/1p-filters.js b/src/js/1p-filters.js +index 70ce256..b6237a7 100644 +--- a/src/js/1p-filters.js ++++ b/src/js/1p-filters.js +@@ -111,12 +111,12 @@ function currentStateChanged() { + } + + function getEditorText() { +- const text = cmEditor.getValue().replace(/\s+$/, ''); ++ const text = cmEditor.getValue().trimEnd(); + return text === '' ? text : `${text}\n`; + } + + function setEditorText(text) { +- cmEditor.setValue(text.replace(/\s+$/, '') + '\n\n'); ++ cmEditor.setValue(`${text.trimEnd()}\n\n`); + } + + /******************************************************************************/ +diff --git a/src/js/arglist-parser.js b/src/js/arglist-parser.js +index d8200df..708029e 100644 +--- a/src/js/arglist-parser.js ++++ b/src/js/arglist-parser.js +@@ -32,7 +32,7 @@ export class ArglistParser { + this.transform = false; + this.failed = false; + this.reWhitespaceStart = /^\s+/; +- this.reWhitespaceEnd = /\s+$/; ++ this.reWhitespaceEnd = /(?:^|\S)(\s+)$/; + this.reOddTrailingEscape = /(?:^|[^\\])(?:\\\\)*\\$/; + this.reTrailingEscapeChars = /\\+$/; + } +@@ -90,7 +90,7 @@ export class ArglistParser { + } + rightWhitespaceCount(s) { + const match = this.reWhitespaceEnd.exec(s); +- return match === null ? 0 : match[0].length; ++ return match === null ? 0 : match[1].length; + } + indexOfNextArgSeparator(pattern, separatorCode) { + this.argBeg = this.argEnd = separatorCode !== this.separatorCode +diff --git a/src/js/static-filtering-parser.js b/src/js/static-filtering-parser.js +index d3b4ca48..678f625 100644 +--- a/src/js/static-filtering-parser.js ++++ b/src/js/static-filtering-parser.js +@@ -762,7 +762,7 @@ export class AstFilterParser { + this.selectorCompiler = new ExtSelectorCompiler(options); + // Regexes + this.reWhitespaceStart = /^\s+/; +- this.reWhitespaceEnd = /\s+$/; ++ this.reWhitespaceEnd = /(?:^|\S)(\s+)$/; + this.reCommentLine = /^(?:!|#\s|####|\[adblock)/i; + this.reExtAnchor = /(#@?(?:\$\?|\$|%|\?)?#).{1,2}/; + this.reInlineComment = /(?:\s+#).*?$/; +@@ -2737,7 +2737,7 @@ export class AstFilterParser { + + rightWhitespaceCount(s) { + const match = this.reWhitespaceEnd.exec(s); +- return match === null ? 0 : match[0].length; ++ return match === null ? 0 : match[1].length; + } + + nextCommaInCommaSeparatedListString(s, start) { +diff --git a/src/js/whitelist.js b/src/js/whitelist.js +index b8f0eaa..a946f35 100644 +--- a/src/js/whitelist.js ++++ b/src/js/whitelist.js +@@ -101,12 +101,12 @@ uBlockDashboard.patchCodeMirrorEditor(cmEditor); + /******************************************************************************/ + + function getEditorText() { +- let text = cmEditor.getValue().replace(/\s+$/, ''); +- return text === '' ? text : text + '\n'; ++ const text = cmEditor.getValue().trimEnd(); ++ return text === '' ? text : `${text}\n`; + } + + function setEditorText(text) { +- cmEditor.setValue(text.replace(/\s+$/, '') + '\n'); ++ cmEditor.setValue(`${text.trimEnd()}\n`); + } + + /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/debian/patches/disable-nonfree-filters-by-default.patch ublock-origin-1.62.0+dfsg/debian/patches/disable-nonfree-filters-by-default.patch --- ublock-origin-1.46.0+dfsg/debian/patches/disable-nonfree-filters-by-default.patch 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/patches/disable-nonfree-filters-by-default.patch 2025-06-10 15:15:46.000000000 +0000 @@ -7,10 +7,10 @@ 1 file changed, 1 insertion(+) diff --git a/assets/assets.json b/assets/assets.json -index 8d31169..1dd44ff 100644 +index 6cd042e..4b920b1 100644 --- a/assets/assets.json +++ b/assets/assets.json -@@ -349,6 +349,7 @@ +@@ -491,6 +491,7 @@ "supportURL": "https://someonewhocares.org/hosts/" }, "plowe-0": { diff -Nru ublock-origin-1.46.0+dfsg/debian/patches/make-assets.patch ublock-origin-1.62.0+dfsg/debian/patches/make-assets.patch --- ublock-origin-1.46.0+dfsg/debian/patches/make-assets.patch 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/patches/make-assets.patch 2025-06-10 15:15:46.000000000 +0000 @@ -1,16 +1,16 @@ From: Markus Koschany -Date: Mon, 23 Jan 2023 22:24:29 +0100 +Date: Sat, 22 Jul 2023 00:42:40 +0200 Subject: make assets --- - tools/make-assets.sh | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) + tools/make-assets.sh | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tools/make-assets.sh b/tools/make-assets.sh -index f26d2fa..b23d66e 100755 +index 139abbf..1564313 100755 --- a/tools/make-assets.sh +++ b/tools/make-assets.sh -@@ -13,15 +13,14 @@ cp -R ./assets $DES/ +@@ -22,16 +22,15 @@ fi mkdir $DES/thirdparties @@ -24,8 +24,10 @@ cp -R $ASSETS_MAIN/thirdparties/urlhaus-filter $DES/thirdparties/ mkdir -p $DES/thirdparties/easylist --cp $ASSETS_PROD/thirdparties/easy*.txt $DES/thirdparties/easylist/ -+cp $ASSETS_PROD/thirdparties/easylist-downloads.adblockplus.org/*.txt $DES/thirdparties/easylist/ +-cp $ASSETS_PROD/thirdparties/easylist.txt $DES/thirdparties/easylist/ +-cp $ASSETS_PROD/thirdparties/easyprivacy.txt $DES/thirdparties/easylist/ ++cp $ASSETS_PROD/thirdparties/easylist/easylist.txt $DES/thirdparties/easylist/ ++cp $ASSETS_PROD/thirdparties/easylist/easyprivacy.txt $DES/thirdparties/easylist/ mkdir $DES/ublock - cp $ASSETS_PROD/filters/* $DES/ublock/ + cp $ASSETS_PROD/filters/badlists.txt $DES/ublock/badlists.txt diff -Nru ublock-origin-1.46.0+dfsg/debian/patches/series ublock-origin-1.62.0+dfsg/debian/patches/series --- ublock-origin-1.46.0+dfsg/debian/patches/series 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/patches/series 2025-06-10 15:15:46.000000000 +0000 @@ -1,2 +1,3 @@ disable-nonfree-filters-by-default.patch make-assets.patch +CVE-2025-4215.patch diff -Nru ublock-origin-1.46.0+dfsg/debian/rules ublock-origin-1.62.0+dfsg/debian/rules --- ublock-origin-1.46.0+dfsg/debian/rules 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/rules 2025-06-10 15:15:46.000000000 +0000 @@ -11,6 +11,12 @@ wat2wasm src/js/wasm/biditrie.wat -o src/js/wasm/biditrie.wasm wat2wasm src/lib/publicsuffixlist/wasm/publicsuffixlist.wat -o src/lib/publicsuffixlist/wasm/publicsuffixlist.wasm wasm-opt src/lib/lz4/lz4-block-codec.wasm -O4 -o src/lib/lz4/lz4-block-codec.wasm + # Replace embedded copy of csstree.esm.js with corresponding Debian file from src:node-css-tree + cp /usr/share/nodejs/css-tree/dist/csstree.esm.js src/lib/csstree/css-tree.js + # Replace embedded copy of js-beautify with Debian's system library node-js-beautify + cp /usr/share/nodejs/js-beautify/js/lib/beautifier.min.js src/lib/js-beautify/beautifier.min.js + # Build the minified asset filters + cd uAssets && ./tools/make-ublock.sh # Build the browser-specific versions of ublock-origin ./tools/make-firefox.sh ./tools/make-chromium.sh diff -Nru ublock-origin-1.46.0+dfsg/debian/watch ublock-origin-1.62.0+dfsg/debian/watch --- ublock-origin-1.46.0+dfsg/debian/watch 2023-01-23 21:02:37.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/debian/watch 2025-06-10 15:15:46.000000000 +0000 @@ -1,3 +1,3 @@ -version=3 -opts=repacksuffix=+dfsg,dversionmangle=s/\+(repack|dfsg|ds|deb)\d*$// \ -https://github.com/gorhill/uBlock/releases .*/(\d.*)\.tar\.gz +version=4 +opts=dversionmangle=s/(\da?)[\+\.\-~](?:dfsg|debian|ds|repack|repacked)\.?\d*$/$1/,uversionmangle=s/-beta/~beta/;s/-rc/~rc/ \ +https://github.com/gorhill/uBlock/tags .*/@ANY_VERSION@@ARCHIVE_EXT@ diff -Nru ublock-origin-1.46.0+dfsg/dist/README.md ublock-origin-1.62.0+dfsg/dist/README.md --- ublock-origin-1.46.0+dfsg/dist/README.md 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/README.md 2025-02-09 18:18:39.000000000 +0000 @@ -1,81 +1,103 @@ -## INSTALL +# INSTALL -### Chromium +## Chromium -- Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). -- Rename the unzipped directory to `ublock` - - When you later update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version. - - This will ensure that all the extension settings will be preserved - - As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved. -- Go to chromium/chrome *Extensions*. -- Click to check *Developer mode*. -- Click *Load unpacked extension...*. -- In the file selector dialog: - - Select the directory `ublock` which was created above. - - Click *Open*. +1. Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). +2. Rename the unzipped directory to `ublock`. + - When you update manually, replace the **content** of the `ublock` folder with the **content** of the latest zipped version. This ensures all extension settings are preserved. + - As long as the extension loads from the same folder path as it was originally installed, your settings will be kept. +3. Open Chromium/Chrome and go to *Extensions*. +4. Click to enable *Developer mode*. +5. Click *Load unpacked extension...*. +6. In the file selector dialog: + - Select the `ublock` directory you created. + - Click *Open*. -The extension will now be available in your chromium/chromium-based browser. +The extension will now be available in your Chromium/Chromium-based browser. -Remember that you have to update manually also. For some users, updating manually is actually an advantage because: -- You can update when **you** want -- If ever a new version sucks, you can easily just re-install the previous one +**Note:** You must update manually. For some users, manual updates are beneficial because: +- You can update when **you** want. +- If a new version is unsatisfactory, you can easily reinstall the previous one. -### Firefox +## Firefox -Compatible with Firefox 52 and beyond. +Compatible with Firefox 52 and beyond. -#### For stable release version +### For Stable Release Version -This works only if you set `xpinstall.signatures.required` to `false` in `about:config`.[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox) +This method only works if you set `xpinstall.signatures.required` to `false` in `about:config`.[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox) -- Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). - - Right-click and choose _"Save As..."_. -- Drag and drop the previously downloaded `ublock0.firefox.xpi` into Firefox +1. Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). + - Right-click and choose _"Save As..."_. +2. Drag and drop the downloaded `ublock0.firefox.xpi` into Firefox. -#### For beta version +### For Beta Version - Click on `ublock0.firefox.signed.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). -#### Location of uBO settings +### Location of uBO Settings -On Linux, the settings are saved in a JSON file located at `~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js`. - -When you uninstall the extension, Firefox deletes that file, so all your settings are lost when you uninstall. - -### Firefox legacy - -Compatible with Firefox 24-56, [Pale Moon](https://www.palemoon.org/) and [SeaMonkey](http://www.seamonkey-project.org/). - -- Download `ublock0.firefox-legacy.xpi` ([latest release desirable](https://github.com/gorhill/uBlock-for-firefox-legacy/releases)). - - Right-click and select "Save Link As..." -- Drag and drop the previously downloaded `ublock0.firefox-legacy.xpi` into Firefox - -With Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`.[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox) - -Your uBlock Origin settings are kept intact even after you uninstall the addon. - -On Linux, the settings are saved in a SQlite file located at `~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite`. - -On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite`. - -### Build instructions (for developers) - -- Clone [uBlock repo](https://github.com/gorhill/uBlock): `git clone https://github.com/gorhill/uBlock.git` -- Set path to uBlock: `cd uBlock` -- The official version of uBO is in the `master` branch - - `git checkout master` -- Build the plugin: - - Chromium: `make chromium` - - Firefox: `make firefox` - - NPM package: `make npm` -- Load the result of the build into your browser: - - Chromium: - - Navigate to `chrome://extensions/` - - Check _"Developer mode"_ - - Click _"Load unpacked"_ - - Select `/uBlock/dist/build/uBlock0.chromium/` - - Firefox: - - Navigate to `about:debugging#/runtime/this-firefox` - - Click _"Load Temporary Add-on..."_ - - Select `/uBlock/dist/build/uBlock0.firefox/` - +On Linux, the settings are saved in a JSON file located at: +``` +~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js +``` +When you uninstall the extension, Firefox deletes this file, and all your settings will be lost. + +### Firefox Legacy + +Compatible with Firefox 24-56, [Pale Moon](https://www.palemoon.org/), and [SeaMonkey](https://www.seamonkey-project.org/). + +1. Download `ublock0.firefox-legacy.xpi` ([latest release desirable](https://github.com/gorhill/uBlock-for-firefox-legacy/releases)). + - Right-click and select "Save Link As..." +2. Drag and drop the downloaded `ublock0.firefox-legacy.xpi` into Firefox. + +For Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`.[see "Add-on signing in Firefox"](https://support.mozilla.org/en-US/kb/add-on-signing-in-firefox) + +Your uBlock Origin settings are preserved even after uninstalling the addon. + +- On Linux, settings are saved in a SQLite file located at: +``` +~/.mozilla/firefox/[profile name]/extension-data/ublock0.sqlite +``` +- On Windows, settings are saved in a SQLite file located at: +``` +%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite +``` + +## Build Instructions (for Developers) + +1. Clone the [uBlock repository](https://github.com/gorhill/uBlock): + ```bash + git clone https://github.com/gorhill/uBlock.git + ``` +2. Set the path to uBlock: + ```bash + cd uBlock + ``` +3. The official version of uBO is in the `master` branch: + ```bash + git checkout master + ``` +4. Build the plugin: + - Chromium: + ```bash + make chromium + ``` + - Firefox: + ```bash + make firefox + ``` + - NPM package: + ```bash + make npm + ``` +5. Load the result of the build into your browser: + - **Chromium:** + - Navigate to `chrome://extensions/` + - Check _"Developer mode"_ + - Click _"Load unpacked"_ + - Select `/uBlock/dist/build/uBlock0.chromium/` + - **Firefox:** + - Navigate to `about:debugging#/runtime/this-firefox` + - Click _"Load Temporary Add-on..."_ + - Select `/uBlock/dist/build/uBlock0.firefox/` diff -Nru ublock-origin-1.46.0+dfsg/dist/chromium/publish-beta.py ublock-origin-1.62.0+dfsg/dist/chromium/publish-beta.py --- ublock-origin-1.46.0+dfsg/dist/chromium/publish-beta.py 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/chromium/publish-beta.py 2025-02-09 18:18:39.000000000 +0000 @@ -43,9 +43,9 @@ github_repo = 'uBlock' # Load/save auth secrets -# The build directory is excluded from git +# The tmp directory is excluded from git ubo_secrets = dict() -ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets') +ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets') if os.path.isfile(ubo_secrets_filename): with open(ubo_secrets_filename) as f: ubo_secrets = json.load(f) diff -Nru ublock-origin-1.46.0+dfsg/dist/chromium/publish-stable.py ublock-origin-1.62.0+dfsg/dist/chromium/publish-stable.py --- ublock-origin-1.46.0+dfsg/dist/chromium/publish-stable.py 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/chromium/publish-stable.py 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,190 @@ +#!/usr/bin/env python3 + +import datetime +import json +import os +import re +import requests +import shutil +import subprocess +import sys +import tempfile +import time +import zipfile + +from string import Template + +# - Download target (raw) uBlock0.chromium.zip from GitHub +# - This is referred to as "raw" package +# - This will fail if not a dev build +# - Upload uBlock0.chromium.zip to Chrome store +# - Publish uBlock0.chromium.zip to Chrome store + +# Find path to project root +projdir = os.path.split(os.path.abspath(__file__))[0] +while not os.path.isdir(os.path.join(projdir, '.git')): + projdir = os.path.normpath(os.path.join(projdir, '..')) + +# We need a version string to work with +if len(sys.argv) >= 2 and sys.argv[1]: + version = sys.argv[1] +else: + version = input('Github release version: ') +version.strip() +if not re.search('^\d+\.\d+\.\d+$', version): + print('Error: Invalid version string.') + exit(1) + +cs_extension_id = 'cjpalhdlnbpafiamejdnhcphjbkeiagm' +tmpdir = tempfile.TemporaryDirectory() +raw_zip_filename = 'uBlock0_' + version + '.chromium.zip' +raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename) +github_owner = 'gorhill' +github_repo = 'uBlock' + +# Load/save auth secrets +# The tmp directory is excluded from git +ubo_secrets = dict() +ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets') +if os.path.isfile(ubo_secrets_filename): + with open(ubo_secrets_filename) as f: + ubo_secrets = json.load(f) + +def input_secret(prompt, token): + if token in ubo_secrets: + prompt += ' ✔' + prompt += ': ' + value = input(prompt).strip() + if len(value) == 0: + if token not in ubo_secrets: + print('Token error:', token) + exit(1) + value = ubo_secrets[token] + elif token not in ubo_secrets or value != ubo_secrets[token]: + ubo_secrets[token] = value + exists = os.path.isfile(ubo_secrets_filename) + with open(ubo_secrets_filename, 'w') as f: + json.dump(ubo_secrets, f, indent=2) + if not exists: + os.chmod(ubo_secrets_filename, 0o600) + return value + + +# GitHub API token +github_token = input_secret('Github token', 'github_token') +github_auth = 'token ' + github_token + +# +# Get metadata from GitHub about the release +# + +# https://developer.github.com/v3/repos/releases/#get-a-single-release +print('Downloading release info from GitHub...') +release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version) +headers = { 'Authorization': github_auth, } +response = requests.get(release_info_url, headers=headers) +if response.status_code != 200: + print('Error: Release not found: {0}'.format(response.status_code)) + exit(1) +release_info = response.json() + +# +# Extract URL to raw package from metadata +# + +# Find url for uBlock0.chromium.zip +raw_zip_url = '' +for asset in release_info['assets']: + if asset['name'] == raw_zip_filename: + raw_zip_url = asset['url'] +if len(raw_zip_url) == 0: + print('Error: Release asset URL not found') + exit(1) + +# +# Download raw package from GitHub +# + +# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset +print('Downloading raw zip package from GitHub...') +headers = { + 'Authorization': github_auth, + 'Accept': 'application/octet-stream', +} +response = requests.get(raw_zip_url, headers=headers) +# Redirections are transparently handled: +# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history +if response.status_code != 200: + print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code)) + exit(1) +with open(raw_zip_filepath, 'wb') as f: + f.write(response.content) +print('Downloaded raw package saved as {0}'.format(raw_zip_filepath)) + +# +# Upload to Chrome store +# + +# Auth tokens +cs_id = input_secret('Chrome store id', 'cs_id') +cs_secret = input_secret('Chrome store secret', 'cs_secret') +cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh') + +print('Uploading to Chrome store...') +with open(raw_zip_filepath, 'rb') as f: + print('Generating access token...') + auth_url = 'https://accounts.google.com/o/oauth2/token' + auth_payload = { + 'client_id': cs_id, + 'client_secret': cs_secret, + 'grant_type': 'refresh_token', + 'refresh_token': cs_refresh, + } + auth_response = requests.post(auth_url, data=auth_payload) + if auth_response.status_code != 200: + print('Error: Auth failed -- server error {0}'.format(auth_response.status_code)) + print(auth_response.text) + exit(1) + response_dict = auth_response.json() + if 'access_token' not in response_dict: + print('Error: Auth failed -- no access token') + exit(1) + # Prepare access token + cs_auth = 'Bearer ' + response_dict['access_token'] + headers = { + 'Authorization': cs_auth, + 'x-goog-api-version': '2', + } + # Upload + print('Uploading package...') + upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id) + upload_response = requests.put(upload_url, headers=headers, data=f) + f.close() + if upload_response.status_code != 200: + print('Upload failed -- server error {0}'.format(upload_response.status_code)) + print(upload_response.text) + exit(1) + response_dict = upload_response.json(); + if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS': + print('Upload failed -- server error {0}'.format(response_dict['uploadState'])) + exit(1) + print('Upload succeeded.') + # Publish + print('Publishing package...') + publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id) + headers = { + 'Authorization': cs_auth, + 'x-goog-api-version': '2', + 'Content-Length': '0', + } + publish_response = requests.post(publish_url, headers=headers) + if publish_response.status_code != 200: + print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code)) + exit(1) + response_dict = publish_response.json(); + if 'status' not in response_dict or response_dict['status'][0] != 'OK': + print('Publishing failed -- server error {0}'.format(response_dict['status'])) + exit(1) + print('Publishing succeeded.') + +print('All done.') diff -Nru ublock-origin-1.46.0+dfsg/dist/description/description-am.txt ublock-origin-1.62.0+dfsg/dist/description/description-am.txt --- ublock-origin-1.46.0+dfsg/dist/description/description-am.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/description/description-am.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -Amharic - -Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared - -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. - -*** - -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. - -Out of the box, these lists of filters are loaded and enforced: - -- EasyList -- Peter Lowe’s Ad server list -- EasyPrivacy -- Malware domains - -More lists are available for you to select if you wish: - -- Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS -- Spam404 -- And many others - -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. - -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. - -*** - -Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. - -*** - -Free. -Open source with public license (GPLv3) -For users by users. - -Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Contributors @ Crowdin: https://crowdin.net/project/ublock - -*** - -It's quite an early version, keep this in mind when you review. - -Project change log: -https://github.com/gorhill/uBlock/releases diff -Nru ublock-origin-1.46.0+dfsg/dist/description/description-en.txt ublock-origin-1.62.0+dfsg/dist/description/description-en.txt --- ublock-origin-1.46.0+dfsg/dist/description/description-en.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/description/description-en.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,10 @@ -uBlock Origin (uBO) is **NOT** an "ad blocker"; it is a wide-spectrum content blocker with CPU and memory efficiency as primary features. - -*** - -Out of the box, uBO blocks ads, trackers, coin miners, popups, etc. through the following lists of filters, enabled by default: +uBlock Origin (uBO) is a CPU and memory-efficient wide-spectrum content blocker that blocks ads, trackers, coin miners, popups, annoying anti-blockers, etc., using the following list of filters, enabled by default: - EasyList (ads) - EasyPrivacy (tracking) -- Peter Lowe’s Ad and tracking server list +- Peter Lowe's Blocklist - Online Malicious URL Blocklist -- uBO owned lists +- uBO filter lists More lists are available for you to select if you wish: @@ -22,16 +18,16 @@ *** -Free. -Open source with public license (GPLv3). -For users by users. +Free. Open source with public license (GPLv3). For users by users. No donations sought. If you ever want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. +You can help contribute by translating uBO on Crowdin. + *** - [Documentation](https://github.com/gorhill/uBlock#ublock-origin) + [Documentation](https://github.com/gorhill/uBlock#ublock-origin-ubo) [Release Notes](https://github.com/gorhill/uBlock/releases) - [Community Support on Reddit](https://www.reddit.com/r/uBlockOrigin/) + [Support Forum on Reddit](https://www.reddit.com/r/uBlockOrigin/) [Contributors on GitHub](https://github.com/gorhill/uBlock/graphs/contributors) - [Contributors on Crowdin](https://crowdin.com/project/ublock) + [Contribute on Crowdin](https://crowdin.com/project/ublock) diff -Nru ublock-origin-1.46.0+dfsg/dist/description/description-ga.txt ublock-origin-1.62.0+dfsg/dist/description/description-ga.txt --- ublock-origin-1.46.0+dfsg/dist/description/description-ga.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/description/description-ga.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -An efficient blocker: easy on memory and CPU footprint, and yet can load and enforce thousands more filters than other popular blockers out there. - -Illustrated overview of its efficiency: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared - -Usage: The big power button in the popup is to permanently disable/enable uBlock for the current web site. It applies to the current web site only, it is not a global power button. - -*** - -Flexible, it's more than an "ad blocker": it can also read and create filters from hosts files. - -Out of the box, these lists of filters are loaded and enforced: - -- EasyList -- Peter Lowe’s Ad server list -- EasyPrivacy -- Malware domains - -More lists are available for you to select if you wish: - -- Fanboy’s Enhanced Tracking List -- Dan Pollock’s hosts file -- hpHosts’s Ad and tracking servers -- MVPS HOSTS -- Spam404 -- And many others - -Of course, the more filters enabled, the higher the memory footprint. Yet, even after adding Fanboy's two extra lists, hpHosts’s Ad and tracking servers, uBlock still has a lower memory footprint than other very popular blockers out there. - -Also, be aware that selecting some of these extra lists may lead to higher likelihood of web site breakage -- especially those lists which are normally used as hosts file. - -*** - -Without the preset lists of filters, this extension is nothing. So if ever you really do want to contribute something, think about the people working hard to maintain the filter lists you are using, which were made available to use by all for free. - -*** - -Free. -Open source with public license (GPLv3) -For users by users. - -Contributors @ Github: https://github.com/gorhill/uBlock/graphs/contributors -Contributors @ Crowdin: https://crowdin.net/project/ublock - -*** - -It's quite an early version, keep this in mind when you review. - -Project change log: -https://github.com/gorhill/uBlock/releases diff -Nru ublock-origin-1.46.0+dfsg/dist/firefox/publish-signed-beta.py ublock-origin-1.62.0+dfsg/dist/firefox/publish-signed-beta.py --- ublock-origin-1.46.0+dfsg/dist/firefox/publish-signed-beta.py 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/firefox/publish-signed-beta.py 2025-02-09 18:18:39.000000000 +0000 @@ -69,9 +69,9 @@ github_repo = 'uBlock' # Load/save auth secrets -# The build directory is excluded from git +# The tmp directory is excluded from git ubo_secrets = dict() -ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets') +ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets') if os.path.isfile(ubo_secrets_filename): with open(ubo_secrets_filename) as f: ubo_secrets = json.load(f) diff -Nru ublock-origin-1.46.0+dfsg/dist/firefox/updates.json ublock-origin-1.62.0+dfsg/dist/firefox/updates.json --- ublock-origin-1.46.0+dfsg/dist/firefox/updates.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/firefox/updates.json 2025-02-09 18:18:39.000000000 +0000 @@ -3,9 +3,9 @@ "uBlock0@raymondhill.net": { "updates": [ { - "version": "1.45.3.106", - "browser_specific_settings": { "gecko": { "strict_min_version": "68.0" } }, - "update_link": "https://github.com/gorhill/uBlock/releases/download/1.45.3rc6/uBlock0_1.45.3rc6.firefox.signed.xpi" + "version": "1.61.3.103", + "browser_specific_settings": { "gecko": { "strict_min_version": "78.0" } }, + "update_link": "https://github.com/gorhill/uBlock/releases/download/1.61.3rc3/uBlock0_1.61.3rc3.firefox.signed.xpi" } ] } diff -Nru ublock-origin-1.46.0+dfsg/dist/mv3/chromium/publish-beta.py ublock-origin-1.62.0+dfsg/dist/mv3/chromium/publish-beta.py --- ublock-origin-1.46.0+dfsg/dist/mv3/chromium/publish-beta.py 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/mv3/chromium/publish-beta.py 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,195 @@ +#!/usr/bin/env python3 + +import datetime +import json +import os +import re +import requests +import shutil +import subprocess +import sys +import tempfile +import time +import zipfile + +from string import Template + +# - Download target (raw) uBOLite_*.chromium.mv3.zip from GitHub +# - This is referred to as "raw" package +# - This will fail if not a dev build +# - Upload uBOLite_*.chromium.mv3.zip to Chrome store +# - Publish uBOLite_*.chromium.mv3.zip to Chrome store + +# Find path to project root +projdir = os.path.split(os.path.abspath(__file__))[0] +while not os.path.isdir(os.path.join(projdir, '.git')): + projdir = os.path.normpath(os.path.join(projdir, '..')) + +# We need a version string to work with +if len(sys.argv) >= 2 and sys.argv[1]: + version = sys.argv[1] +else: + version = input('Github release version: ') +version.strip() +if not re.search('^uBOLite_\d+\.\d+\.\d+\.\d+$', version): + print('Error: Invalid version string.') + exit(1) + +cs_extension_id = 'ddkjiahejlhfcafbddmgiahcphecmpfh' +tmpdir = tempfile.TemporaryDirectory() +raw_zip_filename = '' +raw_zip_filepath = '' +github_owner = 'gorhill' +github_repo = 'uBlock' + +# Load/save auth secrets +# The build directory is excluded from git +ubo_secrets = dict() +ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets') +if os.path.isfile(ubo_secrets_filename): + with open(ubo_secrets_filename) as f: + ubo_secrets = json.load(f) + +def input_secret(prompt, token): + if token in ubo_secrets: + prompt += ' ✔' + prompt += ': ' + value = input(prompt).strip() + if len(value) == 0: + if token not in ubo_secrets: + print('Token error:', token) + exit(1) + value = ubo_secrets[token] + elif token not in ubo_secrets or value != ubo_secrets[token]: + ubo_secrets[token] = value + exists = os.path.isfile(ubo_secrets_filename) + with open(ubo_secrets_filename, 'w') as f: + json.dump(ubo_secrets, f, indent=2) + if not exists: + os.chmod(ubo_secrets_filename, 0o600) + return value + + +# GitHub API token +github_token = input_secret('Github token', 'github_token') +github_auth = 'token ' + github_token + +# +# Get metadata from GitHub about the release +# + +# https://developer.github.com/v3/repos/releases/#get-a-single-release +print('Downloading release info from GitHub...') +release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version) +headers = { 'Authorization': github_auth, } +response = requests.get(release_info_url, headers=headers) +if response.status_code != 200: + print('Error: Release not found: {0}'.format(response.status_code)) + exit(1) +release_info = response.json() + +# +# Extract URL to raw package from metadata +# + +# Find url for uBOLite_*.chromium.mv3.zip +raw_zip_url = '' +for asset in release_info['assets']: + if re.search('uBOLite_\d+.\d+.\d+.\d+.chromium.mv3.zip', asset['name']): + raw_zip_url = asset['url'] + raw_zip_filename = asset['name'] + raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename) +if len(raw_zip_url) == 0: + print('Error: Release asset URL not found') + exit(1) +if len(raw_zip_filepath) == 0: + print('Error: Invalid release asset file not set') + exit(1) + +# +# Download raw package from GitHub +# + +# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset +print('Downloading raw zip package from GitHub...') +headers = { + 'Authorization': github_auth, + 'Accept': 'application/octet-stream', +} +response = requests.get(raw_zip_url, headers=headers) +# Redirections are transparently handled: +# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history +if response.status_code != 200: + print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code)) + exit(1) +with open(raw_zip_filepath, 'wb') as f: + f.write(response.content) +print('Downloaded raw package saved as {0}'.format(raw_zip_filepath)) + +# +# Upload to Chrome store +# + +# Auth tokens +cs_id = input_secret('Chrome store id', 'cs_id') +cs_secret = input_secret('Chrome store secret', 'cs_secret') +cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh') + +print('Uploading to Chrome store...') +with open(raw_zip_filepath, 'rb') as f: + print('Generating access token...') + auth_url = 'https://accounts.google.com/o/oauth2/token' + auth_payload = { + 'client_id': cs_id, + 'client_secret': cs_secret, + 'grant_type': 'refresh_token', + 'refresh_token': cs_refresh, + } + auth_response = requests.post(auth_url, data=auth_payload) + if auth_response.status_code != 200: + print('Error: Auth failed -- server error {0}'.format(auth_response.status_code)) + print(auth_response.text) + exit(1) + response_dict = auth_response.json() + if 'access_token' not in response_dict: + print('Error: Auth failed -- no access token') + exit(1) + # Prepare access token + cs_auth = 'Bearer ' + response_dict['access_token'] + headers = { + 'Authorization': cs_auth, + 'x-goog-api-version': '2', + } + # Upload + print('Uploading package...') + upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id) + upload_response = requests.put(upload_url, headers=headers, data=f) + f.close() + if upload_response.status_code != 200: + print('Upload failed -- server error {0}'.format(upload_response.status_code)) + print(upload_response.text) + exit(1) + response_dict = upload_response.json(); + if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS': + print('Upload failed -- server error {0}'.format(response_dict['uploadState'])) + exit(1) + print('Upload succeeded.') + # Publish + print('Publishing package...') + publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id) + headers = { + 'Authorization': cs_auth, + 'x-goog-api-version': '2', + 'Content-Length': '0', + } + publish_response = requests.post(publish_url, headers=headers) + if publish_response.status_code != 200: + print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code)) + exit(1) + response_dict = publish_response.json(); + if 'status' not in response_dict or response_dict['status'][0] != 'OK': + print('Publishing failed -- server error {0}'.format(response_dict['status'])) + exit(1) + print('Publishing succeeded.') + +print('All done.') diff -Nru ublock-origin-1.46.0+dfsg/dist/mv3/firefox/publish-signed-beta.py ublock-origin-1.62.0+dfsg/dist/mv3/firefox/publish-signed-beta.py --- ublock-origin-1.46.0+dfsg/dist/mv3/firefox/publish-signed-beta.py 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/mv3/firefox/publish-signed-beta.py 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,326 @@ +#!/usr/bin/env python3 + +import datetime +import json +import jwt +import os +import re +import requests +import shutil +import subprocess +import sys +import tempfile +import time +import zipfile + +from string import Template + +# - Download target (raw) uBlock0.firefox.xpi from GitHub +# - This is referred to as "raw" package +# - This will fail if not a dev build +# - Modify raw package to make it self-hosted +# - This is referred to as "unsigned" package +# - Ask AMO to sign uBlock0.firefox.xpi +# - Generate JWT to be used for communication with server +# - Upload unsigned package to AMO +# - Wait for a valid download URL for signed package +# - Download signed package as uBlock0.firefox.signed.xpi +# - This is referred to as "signed" package +# - Upload uBlock0.firefox.signed.xpi to GitHub +# - Remove uBlock0.firefox.xpi from GitHub +# - Modify updates.json to point to new version +# - Commit changes to repo + +# Find path to project root +projdir = os.path.split(os.path.abspath(__file__))[0] +while not os.path.isdir(os.path.join(projdir, '.git')): + projdir = os.path.normpath(os.path.join(projdir, '..')) +# Check that found project root is valid +version_filepath = os.path.join(projdir, 'dist', 'version') +if not os.path.isfile(version_filepath): + print('Version file not found.') + exit(1) + +# We need a version string to work with +if len(sys.argv) >= 2 and sys.argv[1]: + tag_version = sys.argv[1] +else: + tag_version = input('Github release version: ') +tag_version.strip() +match = re.search('^uBOLite_(\d+\.\d+\.\d+.\d+)$', tag_version) +if not match: + print('Error: Invalid version string.') + exit(1) +ext_version = match.group(1); + +extension_id = 'uBOLite@raymondhill.net' +tmpdir = tempfile.TemporaryDirectory() +raw_xpi_filename = tag_version + '.firefox.mv3.xpi' +raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename) +unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBOLite.firefox.unsigned.xpi') +signed_xpi_filename = tag_version + '.firefox.signed.mv3.xpi' +signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename) +github_owner = 'gorhill' +github_repo = 'uBlock' + +# Load/save auth secrets +# The tmp directory is excluded from git +ubo_secrets = dict() +ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets') +if os.path.isfile(ubo_secrets_filename): + with open(ubo_secrets_filename) as f: + ubo_secrets = json.load(f) + +def input_secret(prompt, token): + if token in ubo_secrets: + prompt += ' ✔' + prompt += ': ' + value = input(prompt).strip() + if len(value) == 0: + if token not in ubo_secrets: + print('Token error:', token) + exit(1) + value = ubo_secrets[token] + elif token not in ubo_secrets or value != ubo_secrets[token]: + ubo_secrets[token] = value + exists = os.path.isfile(ubo_secrets_filename) + with open(ubo_secrets_filename, 'w') as f: + json.dump(ubo_secrets, f, indent=2) + if not exists: + os.chmod(ubo_secrets_filename, 0o600) + return value + +# GitHub API token +github_token = input_secret('Github token', 'github_token') +github_auth = 'token ' + github_token + +# +# Get metadata from GitHub about the release +# + +# https://developer.github.com/v3/repos/releases/#get-a-single-release +print('Downloading release info from GitHub...') +release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version) +headers = { 'Authorization': github_auth, } +response = requests.get(release_info_url, headers=headers) +if response.status_code != 200: + print('Error: Release not found: {0}'.format(response.status_code)) + exit(1) +release_info = response.json() + +# +# Extract URL to raw package from metadata +# + +# Find url for uBlock0.firefox.xpi +raw_xpi_url = '' +for asset in release_info['assets']: + if asset['name'] == signed_xpi_filename: + print('Error: Found existing signed self-hosted package.') + exit(1) + if asset['name'] == raw_xpi_filename: + raw_xpi_url = asset['url'] +if len(raw_xpi_url) == 0: + print('Error: Release asset URL not found') + exit(1) + +# +# Download raw package from GitHub +# + +# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset +print('Downloading raw xpi package from GitHub...') +headers = { + 'Authorization': github_auth, + 'Accept': 'application/octet-stream', +} +response = requests.get(raw_xpi_url, headers=headers) +# Redirections are transparently handled: +# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history +if response.status_code != 200: + print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code)) + exit(1) +with open(raw_xpi_filepath, 'wb') as f: + f.write(response.content) +print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath)) + +# +# Convert the package to a self-hosted one: add `update_url` to the manifest +# +min_browser_version = '114.0'; + +print('Converting raw xpi package into self-hosted xpi package...') +with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin: + with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout: + for item in zipin.infolist(): + data = zipin.read(item.filename) + if item.filename == 'manifest.json': + manifest = json.loads(bytes.decode(data)) + min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version'] + manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/mv3/firefox/updates.json'.format(github_owner, github_repo) + data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode() + zipout.writestr(item, data) + +# +# Ask AMO to sign the self-hosted package +# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on +# - https://pyjwt.readthedocs.io/en/latest/usage.html +# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html +# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html +# + +amo_api_key = '' +amo_secret = '' + +def get_jwt_auth(): + global amo_api_key + if amo_api_key == '': + amo_api_key = input_secret('AMO API key', 'amo_api_key') + global amo_secret + if amo_secret == '': + amo_secret = input_secret('AMO API secret', 'amo_secret') + amo_nonce = os.urandom(8).hex() + jwt_payload = { + 'iss': amo_api_key, + 'jti': amo_nonce, + 'iat': datetime.datetime.utcnow(), + 'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15), + } + return 'JWT ' + jwt.encode(jwt_payload, amo_secret) + +print('Ask AMO to sign self-hosted xpi package...') +with open(unsigned_xpi_filepath, 'rb') as f: + # https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/ + # "We recommend allowing up to 15 minutes." + interval = 60 # check every 60 seconds + countdown = 60 * 60 / interval # for at most 60 minutes + headers = { 'Authorization': get_jwt_auth(), } + data = { 'channel': 'unlisted' } + files = { 'upload': f, } + signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version) + print('Submitting package to be signed...') + response = requests.put(signing_url, headers=headers, data=data, files=files) + if response.status_code != 202: + print('Error: Creating new version failed -- server error {0}'.format(response.status_code)) + print(response.text) + exit(1) + print('Request for signing self-hosted xpi package succeeded.') + signing_request_response = response.json(); + f.close() + print('Waiting for AMO to process the request to sign the self-hosted xpi package...') + # Wait for signed package to be ready + signing_check_url = signing_request_response['url'] + while True: + time.sleep(interval) + sys.stdout.write('.') + sys.stdout.flush() + countdown -= 1 + if countdown <= 0: + print('Error: AMO signing timed out') + exit(1) + headers = { 'Authorization': get_jwt_auth(), } + response = requests.get(signing_check_url, headers=headers) + if response.status_code != 200: + print('Error: AMO signing failed -- server error {0}'.format(response.status_code)) + print(response.text) + exit(1) + signing_check_response = response.json() + if not signing_check_response['processed']: + continue + if not signing_check_response['valid']: + print('Error: AMO validation failed') + print(response.text) + exit(1) + if not signing_check_response['files'] or len(signing_check_response['files']) == 0: + continue + if not signing_check_response['files'][0]['signed']: + continue + if not signing_check_response['files'][0]['download_url']: + print('Error: AMO signing failed') + print(response.text) + exit(1) + print('\r') + print('Self-hosted xpi package successfully signed.') + download_url = signing_check_response['files'][0]['download_url'] + print('Downloading signed self-hosted xpi package from {0}...'.format(download_url)) + response = requests.get(download_url, headers=headers) + if response.status_code != 200: + print('Error: Download signed package failed -- server error {0}'.format(response.status_code)) + print(response.text) + exit(1) + with open(signed_xpi_filepath, 'wb') as f: + f.write(response.content) + f.close() + print('Signed self-hosted xpi package downloaded.') + break + +# +# Upload signed package to GitHub +# + +# https://developer.github.com/v3/repos/releases/#upload-a-release-asset +print('Uploading signed self-hosted xpi package to GitHub...') +with open(signed_xpi_filepath, 'rb') as f: + url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename) + headers = { + 'Authorization': github_auth, + 'Content-Type': 'application/zip', + } + response = requests.post(url, headers=headers, data=f.read()) + if response.status_code != 201: + print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code)) + exit(1) + +# +# Remove raw package from GitHub +# + +# https://developer.github.com/v3/repos/releases/#delete-a-release-asset +print('Remove raw xpi package from GitHub...') +headers = { 'Authorization': github_auth, } +response = requests.delete(raw_xpi_url, headers=headers) +if response.status_code != 204: + print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code)) + +# +# Update updates.json to point to new package -- but only if just-signed +# package is higher version than current one. +# + +# Be sure we are in sync with potentially modified files on remote +r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE) +rout = bytes.decode(r.stdout).strip() + +def int_from_version(version): + parts = version.split('.') + if len(parts) == 3: + parts.append('0') + return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3]) + +print('Update GitHub to point to newly signed self-hosted xpi package...') +updates_json_filepath = os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.json') +with open(updates_json_filepath) as f: + updates_json = json.load(f) + f.close() + previous_version = updates_json['addons'][extension_id]['updates'][0]['version'] + if int_from_version(ext_version) > int_from_version(previous_version): + with open(os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.template.json')) as f: + template_json = Template(f.read()) + f.close() + updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version) + with open(updates_json_filepath, 'w') as f: + f.write(updates_json) + f.close() + # - Stage the changed file + r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE) + rout = bytes.decode(r.stdout).strip() + if len(rout) >= 2 and rout[1] == 'M': + subprocess.run(['git', 'add', updates_json_filepath]) + # - Commit the staged file + r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE) + rout = bytes.decode(r.stdout).strip() + if len(rout) >= 2 and rout[0] == 'M': + subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath]) + subprocess.run(['git', 'push', 'origin', 'HEAD']) + +print('All done.') diff -Nru ublock-origin-1.46.0+dfsg/dist/mv3/firefox/updates.json ublock-origin-1.62.0+dfsg/dist/mv3/firefox/updates.json --- ublock-origin-1.46.0+dfsg/dist/mv3/firefox/updates.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/mv3/firefox/updates.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,13 @@ +{ + "addons": { + "uBOLite@raymondhill.net": { + "updates": [ + { + "version": "1.0.23.8125", + "browser_specific_settings": { "gecko": { "strict_min_version": "114.0" } }, + "update_link": "https://github.com/gorhill/uBlock/releases/download/uBOLite_1.0.23.8125/uBOLite_1.0.23.8125.firefox.signed.mv3.xpi" + } + ] + } + } +} diff -Nru ublock-origin-1.46.0+dfsg/dist/mv3/firefox/updates.template.json ublock-origin-1.62.0+dfsg/dist/mv3/firefox/updates.template.json --- ublock-origin-1.46.0+dfsg/dist/mv3/firefox/updates.template.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/mv3/firefox/updates.template.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,13 @@ +{ + "addons": { + "uBOLite@raymondhill.net": { + "updates": [ + { + "version": "$ext_version", + "browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } }, + "update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/$tag_version.firefox.signed.mv3.xpi" + } + ] + } + } +} diff -Nru ublock-origin-1.46.0+dfsg/dist/mv3/log.txt ublock-origin-1.62.0+dfsg/dist/mv3/log.txt --- ublock-origin-1.46.0+dfsg/dist/mv3/log.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/mv3/log.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,3005 +0,0 @@ -Version: 0.1.22.12166 -============================ -Listset for 'default': - Fetching remote https://ublockorigin.github.io/uAssets/filters/filters.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/badware.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/privacy.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/resource-abuse.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/unbreak.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt - Fetching remote https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt - Fetching remote https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt - Fetching remote https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext - Fetching remote https://ublockorigin.github.io/uAssets/filters/filters-2020.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/filters-2021.txt - Fetching remote https://ublockorigin.github.io/uAssets/filters/filters-2022.txt -Input filter count: 78892 - Accepted filter count: 76448 - Rejected filter count: 158 -Output rule count: 21541 - Plain good: 20206 - Maybe good (regexes): 128 - redirect=: 292 - removeparams= (accepted/discarded): 25/12 - csp=: 60 - Unsupported: 830 - Could not salvage rule with only entity-based domain= option: megalink.* - Could not salvage rule with only entity-based domain= option: samehadaku.* - Could not salvage rule with only entity-based domain= option: oploverz.* - Could not salvage rule with only entity-based domain= option: mangaku.* - Could not salvage rule with only entity-based domain= option: vinaurl.* - Could not salvage rule with only entity-based domain= option: komikcast.* - Could not salvage rule with only entity-based domain= option: movs4u.* - Could not salvage rule with only entity-based domain= option: movieon21.* - Could not salvage rule with only entity-based domain= option: aagmaal.* - Could not salvage rule with only entity-based domain= option: otakudesu.* - Could not salvage rule with only entity-based domain= option: myflixer.* - Could not salvage rule with only entity-based domain= option: ouo.* - Could not salvage rule with only entity-based domain= option: dewimg.*|imgtown.*|imgviu.*|mazpic.*|outletpic.*|picrok.* - Could not salvage rule with only entity-based domain= option: povvldeo.* - Could not salvage rule with only entity-based domain= option: vinaurl.* - Could not salvage rule with only entity-based domain= option: mirrorace.* - Could not salvage rule with only entity-based domain= option: the-voice-of-germany.* - Could not salvage rule with only entity-based domain= option: linkvertise.* - regexFilter is not RE2-compatible: ^https:\/\/a\.[-0-9a-z]{4,16}\.(?:club|com?|cyou|info|net|ru|site|top?|xxx|xyz)\/(?=[a-z]{0,6}[0-9A-Z])[0-9a-zA-Z]{7}\.js$ - Could not salvage rule with only entity-based domain= option: 1movies.* - Could not salvage rule with only entity-based domain= option: 1movies.* - Could not salvage rule with only entity-based domain= option: vizcloud.*|vizcloud2.* - Could not salvage rule with only entity-based domain= option: slreamplay.* - Could not salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.* - Could not salvage rule with only entity-based domain= option: sexwebvideo.* - Could not salvage rule with only entity-based domain= option: dutchycorp.* - regexFilter is not RE2-compatible: ^https?:\/\/((?!www)[a-z]{3,}|\d{2})?\.?[-0-9a-z]{6,}\.[a-z]{2,6}\/(?:[a-z]{6,8}\/)?\/?\?u=[0-9a-z]{7}&o=[0-9a-z]{7} - regexFilter is not RE2-compatible: ^https?:\/\/((?!www)[a-z]{3,}|\d{2})?\.?[-0-9a-z]{6,}\.[a-z]{2,6}\/(?:[a-z]{6,8}\/)?\/?\?o=[0-9a-z]{7}&u=[0-9a-z]{7} - Could not salvage rule with only entity-based domain= option: the-voice-of-germany.* - Could not salvage rule with only entity-based domain= option: pobre.* - regexFilter is not RE2-compatible: ^https?:\/\/((?!www)[a-z]{3,}|\d{2})?\.?[-0-9a-z]{6,}\.[a-z]{2,6}\/(?:[a-z]{6,8}\/)?\/?\?u=[0-9a-z]{7}&o=[0-9a-z]{7} - regexFilter is not RE2-compatible: ^https?:\/\/((?!www)[a-z]{3,}|\d{2})?\.?[-0-9a-z]{6,}\.[a-z]{2,6}\/(?:[a-z]{6,8}\/)?\/?\?o=[0-9a-z]{7}&u=[0-9a-z]{7} - regexFilter is not RE2-compatible: ^https:\/\/(?:www\d\.)?[-a-z]{6,}\.(?:com|info|net|org)\/(?=[-_a-zA-Z]{0,42}\d)(?=[-_0-9a-z]{0,42}[A-Z])[-_0-9a-zA-Z]{43}\/\?cid=[-_0-9a-zA-Z]{16,36}(?:&qs\d=\S+)?&sid=[_0-9a-f]{1,32}$ - regexFilter is not RE2-compatible: ^https:\/\/(?:www\d\.)?[-a-z]{6,}\.(?:com|info|net|org)\/(?=[-_a-zA-Z]{0,42}\d)(?=[-_0-9a-z]{0,42}[A-Z])[-_0-9a-zA-Z]{43}\/\?sid=[_0-9a-f]{1,32}(?:&qs\d=\S+)?&cid=[-_0-9a-zA-Z]{16,36}$ - Could not salvage rule with only entity-based domain= option: 1337x.*|1337x.g3g.*|unblockit.*|x1337x.* - Could not salvage rule with only entity-based domain= option: pussyspace.* - regexFilter is not RE2-compatible: \/img\/(?!new).+\.gif - Could not salvage rule with only entity-based domain= option: slreamplay.* - regexFilter is not RE2-compatible: \/[a-z]{4,}\/(?!holly7)[0-9a-z]{3,}\d\.\d\.\d{1,2}\.[0-9a-f]{32}\.js$ - Could not salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.* - Could not salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.* - regexFilter is not RE2-compatible: ^http:\/\/img[a-z]+\.(?:buzz|site|store|xyz)\/(?!shrinker).* - Could not salvage rule with only entity-based domain= option: strcloud.*|streamta.*|streamtape.*|strtape.*|strtapeadblock.*|strtpe.* - Could not salvage rule with only entity-based domain= option: bigkickass.*|kat.*|kat2.*|katbay.*|katfreak.*|kathydra.*|katkickass.*|katkickass.*|kattracker.*|kick4ss.*|kickass-usa.*|kickass.*|kickass2.*|kickassaustralia.*|kickassbay.*|kickassdb.*|kickassfull.*|kickassgo.*|kickasshydra.*|kickassindia.*|kickasskat.*|kickassminds.*|kickassmovies.*|kickasspk.*|kickasst.*|kickasstorrents.*|kickasstorrents2.*|kickasstracker.*|kickasstrusty.*|kickassuk.*|kickassunlocked.*|kickassz.*|kkat.*|kkickass.*|thekat.*|thekickass.*|topkickass.*|torrentkat.*|torrentskickass.* - Could not salvage rule with only entity-based domain= option: isohunt.*|isohunters.*|isohunthydra.*|isohunting.*|isohunts.*|isohuntx.*|isohuntz.*|myisohunt.* - FilterStrictParty: Strict partyness strict3p not supported - Could not salvage rule with only entity-based domain= option: torrentproject2.* - Could not salvage rule with only entity-based domain= option: upvid.* - Could not salvage rule with only entity-based domain= option: uptomega.* - Could not salvage rule with only entity-based domain= option: clicknupload.* - Could not salvage rule with only entity-based domain= option: uplinkto.* - Could not salvage rule with only entity-based domain= option: link1s.* - Could not salvage rule with only entity-based domain= option: moviesda1.* - Could not salvage rule with only entity-based domain= option: dloader.* - Could not salvage rule with only entity-based domain= option: isaidub.* - Could not salvage rule with only entity-based domain= option: direct-cloud.* - Could not salvage rule with only entity-based domain= option: databasegdriveplayer.* - Could not salvage rule with only entity-based domain= option: 10starhd.* - Could not salvage rule with only entity-based domain= option: earnload.* - Could not salvage rule with only entity-based domain= option: databasegdriveplayer.* - Could not salvage rule with only entity-based domain= option: vipleague.* - Could not salvage rule with only entity-based domain= option: my1ink.*|myl1nk.*|myli3k.*|mylink.* - Could not salvage rule with only entity-based domain= option: sxyprn.* - Could not salvage rule with only entity-based domain= option: palimas.* - Could not salvage rule with only entity-based domain= option: vjav.* - Could not salvage rule with only entity-based domain= option: linkshorts.* - Could not salvage rule with only entity-based domain= option: mazpic.* - Could not salvage rule with only entity-based domain= option: picrok.* - Could not salvage rule with only entity-based domain= option: imgviu.* - Could not salvage rule with only entity-based domain= option: outletpic.* - Could not salvage rule with only entity-based domain= option: dewimg.* - Could not salvage rule with only entity-based domain= option: imgtown.* - Could not salvage rule with only entity-based domain= option: oploverz.* - Could not salvage rule with only entity-based domain= option: readcomiconline.* - Could not salvage rule with only entity-based domain= option: adsrt.* - Could not salvage rule with only entity-based domain= option: animeflv.* - Could not salvage rule with only entity-based domain= option: povvldeo.* - Could not salvage rule with only entity-based domain= option: kiss-anime.* - Could not salvage rule with only entity-based domain= option: japscan.* - Could not salvage rule with only entity-based domain= option: downloadhub.* - Could not salvage rule with only entity-based domain= option: 9xbuddy.* - Could not salvage rule with only entity-based domain= option: viprow.* - Could not salvage rule with only entity-based domain= option: anitube.* - Could not salvage rule with only entity-based domain= option: dramacool9.* - Could not salvage rule with only entity-based domain= option: hdfriday.* - Could not salvage rule with only entity-based domain= option: extramovies.* - Could not salvage rule with only entity-based domain= option: atomixhq.*|pctfenix.* - Could not salvage rule with only entity-based domain= option: shortearn.* - Could not salvage rule with only entity-based domain= option: lookmovie.* - Could not salvage rule with only entity-based domain= option: okstream.* - Could not salvage rule with only entity-based domain= option: megavideo.* - Could not salvage rule with only entity-based domain= option: tmearn.* - Could not salvage rule with only entity-based domain= option: leechall.* - Could not salvage rule with only entity-based domain= option: torrentgalaxy.* - Could not salvage rule with only entity-based domain= option: allcalidad.* - Could not salvage rule with only entity-based domain= option: movieshub.* - Could not salvage rule with only entity-based domain= option: dailysport.* - Could not salvage rule with only entity-based domain= option: mkvcinemas.* - Could not salvage rule with only entity-based domain= option: pelispedia.* - Could not salvage rule with only entity-based domain= option: linkviet.* - Could not salvage rule with only entity-based domain= option: btdb.* - Could not salvage rule with only entity-based domain= option: animesvision.* - Could not salvage rule with only entity-based domain= option: miniurl.* - regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$ - regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.website\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$ - Could not salvage rule with only entity-based domain= option: uploadhub.* - Could not salvage rule with only entity-based domain= option: bollyflix.* - Could not salvage rule with only entity-based domain= option: veranime.*|verhentai.* - Could not salvage rule with only entity-based domain= option: shortzzy.* - Could not salvage rule with only entity-based domain= option: xtits.* - Could not salvage rule with only entity-based domain= option: shorttey.* - Could not salvage rule with only entity-based domain= option: hdmovieplus.* - Could not salvage rule with only entity-based domain= option: img4fap.* - Could not salvage rule with only entity-based domain= option: elitetorrent.* - Could not salvage rule with only entity-based domain= option: lite-link.* - Could not salvage rule with only entity-based domain= option: adcorto.* - Could not salvage rule with only entity-based domain= option: 720pstream.* - Could not salvage rule with only entity-based domain= option: toonanime.* - Could not salvage rule with only entity-based domain= option: hog.* - Could not salvage rule with only entity-based domain= option: samehadaku.* - Could not salvage rule with only entity-based domain= option: atishmkv.* - Could not salvage rule with only entity-based domain= option: hdhub4u.* - Could not salvage rule with only entity-based domain= option: 10starhd.* - Could not salvage rule with only entity-based domain= option: livetvon.* - Could not salvage rule with only entity-based domain= option: mazpic.* - Could not salvage rule with only entity-based domain= option: picrok.* - Could not salvage rule with only entity-based domain= option: imgviu.* - Could not salvage rule with only entity-based domain= option: outletpic.* - Could not salvage rule with only entity-based domain= option: dewimg.* - Could not salvage rule with only entity-based domain= option: imgtown.* - Could not salvage rule with only entity-based domain= option: btdb.* - regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$ - regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.website\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$ - Could not salvage rule with only entity-based domain= option: databasegdriveplayer.* - Could not salvage rule with only entity-based domain= option: 10starhd.* - Could not salvage rule with only entity-based domain= option: sxyprn.* - Could not salvage rule with only entity-based domain= option: txxx.* - Could not salvage rule with only entity-based domain= option: mazpic.* - Could not salvage rule with only entity-based domain= option: picrok.* - Could not salvage rule with only entity-based domain= option: imgviu.* - Could not salvage rule with only entity-based domain= option: outletpic.* - Could not salvage rule with only entity-based domain= option: dewimg.* - Could not salvage rule with only entity-based domain= option: imgtown.* - Could not salvage rule with only entity-based domain= option: povvldeo.* - Could not salvage rule with only entity-based domain= option: btdb.* - regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$ - regexFilter is not RE2-compatible: ^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.website\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$ - Could not salvage rule with only entity-based domain= option: databasegdriveplayer.* - Could not salvage rule with only entity-based domain= option: xtits.* - Could not salvage rule with only entity-based domain= option: animesa.* - Could not salvage rule with only entity-based domain= option: 10starhd.* - Could not salvage rule with only entity-based domain= option: hqq.* - Could not salvage rule with only entity-based domain= option: bloomberg.* - Could not salvage rule with only entity-based domain= option: my1ink.*|myl1nk.*|myli3k.*|mylink.* - Could not salvage rule with only entity-based domain= option: my1ink.*|myl1nk.*|myli3k.*|mylink.* - Could not salvage rule with only entity-based domain= option: hqq.* - Could not salvage rule with only entity-based domain= option: einthusan.* - Could not salvage rule with only entity-based domain= option: pasty.* - Could not salvage rule with only entity-based domain= option: pasty.* - Could not salvage rule with only entity-based domain= option: sms24.* - Could not salvage rule with only entity-based domain= option: viafree.* - Could not salvage rule with only entity-based domain= option: hotfrog.* - Could not salvage rule with only entity-based domain= option: goodstream.* - Could not salvage rule with only entity-based domain= option: bloomberg.* - Could not salvage rule with only entity-based domain= option: bloomberg.* - Could not salvage rule with only entity-based domain= option: bloomberg.* - Could not salvage rule with only entity-based domain= option: allestoringen.*|downdetector.*|xn--allestrungen-9ib.* - Could not salvage rule with only entity-based domain= option: allestoringen.*|downdetector.*|xn--allestrungen-9ib.* - Could not salvage rule with only entity-based domain= option: allestoringen.*|downdetector.*|xn--allestrungen-9ib.* - Could not salvage rule with only entity-based domain= option: tube8.* - Could not salvage rule with only entity-based domain= option: tvnow.* - Could not salvage rule with only entity-based domain= option: tvnow.* - Could not salvage rule with only entity-based domain= option: audible.* - Could not salvage rule with only entity-based domain= option: savethechildren.* - Could not salvage rule with only entity-based domain= option: sms24.* - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: viafree.* - Could not salvage rule with only entity-based domain= option: viafree.* - Could not salvage rule with only entity-based domain= option: streamingcommunity.* - Could not salvage rule with only entity-based domain= option: streamingcommunity.* - Could not salvage rule with only entity-based domain= option: filepress.* - Could not salvage rule with only entity-based domain= option: bloomberg.* - Could not salvage rule with only entity-based domain= option: itesco.*|tesco.* - Could not salvage rule with only entity-based domain= option: soap2day.* - Could not salvage rule with only entity-based domain= option: 2embed.* - Could not salvage rule with only entity-based domain= option: pussyspace.* - Could not salvage rule with only entity-based domain= option: soap2day.* - Could not salvage rule with only entity-based domain= option: slreamplay.* - Could not salvage rule with only entity-based domain= option: pouvideo.*|povvideo.*|povw1deo.*|povwideo.*|powv1deo.*|powvibeo.*|powvideo.*|powvldeo.* - Unsupported regex-based removeParam: /utm_source|utm_campaign|utm_content/ - Unsupported regex-based removeParam: /utm_source|utm_campaign|utm_content/ - Unsupported regex-based removeParam: /utm_source|utm_campaign|utm_content/ - Unsupported regex-based removeParam: /ad/ - Unsupported regex-based removeParam: /u_h|u_his|u_w|u_ah|u_aw|u_cd|u_sd|u_tz|cookie/ - Unsupported regex-based removeParam: /^\/_ui\/desktop\/common\/js\/uiAnalytics\// - Could not salvage rule with only entity-based domain= option: 1movies.* - Could not salvage rule with only entity-based domain= option: 1movies.* - Unsupported regex-based removeParam: /^ad/ - Unsupported regex-based removeParam: /^ad/ - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Unsupported regex-based removeParam: /^((?!SMIL|formats).)*$/ - Unsupported modifier exception - Unsupported modifier exception - Could not salvage rule with only entity-based domain= option: isohunt.*|isohunters.*|isohunthydra.*|isohunting.*|isohunts.*|isohuntx.*|isohuntz.*|myisohunt.* - Could not salvage rule with only entity-based domain= option: torrentproject2.* - Unsupported regex-based removeParam: /^(?:correlator|f[cr-w]|p[e-sv]|[abdeg-or-x])/ - Unsupported regex-based removeParam: /^(?:correlator|f[cr-w]|p[e-sv]|u_|ga_|url|dt|adk)/ - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Could not salvage rule with only entity-based domain= option: the-voice-of-germany.* - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: pobre.* - Unsupported modifier exception - Could not salvage rule with only entity-based domain= option: bigkickass.*|kat.*|kat2.*|katbay.*|katfreak.*|kathydra.*|katkickass.*|katkickass.*|kattracker.*|kick4ss.*|kickass-usa.*|kickass.*|kickass2.*|kickassaustralia.*|kickassbay.*|kickassdb.*|kickassfull.*|kickassgo.*|kickasshydra.*|kickassindia.*|kickasskat.*|kickassminds.*|kickassmovies.*|kickasspk.*|kickasst.*|kickasstorrents.*|kickasstorrents2.*|kickasstracker.*|kickasstrusty.*|kickassuk.*|kickassunlocked.*|kickassz.*|kkat.*|kkickass.*|thekat.*|thekickass.*|topkickass.*|torrentkat.*|torrentskickass.* - Could not salvage rule with only entity-based domain= option: isohunt.*|isohunters.*|isohunthydra.*|isohunting.*|isohunts.*|isohuntx.*|isohuntz.*|myisohunt.* - Could not salvage rule with only entity-based domain= option: torrentproject2.* - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Invalid network filter in default: ||indiatimes.com^$image,redirect-rule=1x1.gif - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=linkneverdie.net - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=web.de - Invalid network filter in default: ||succeedscene.com/ads_*/ads.load.js$script,redirect-rule=noop.js - Invalid network filter in default: *$image,redirect-rule=32x32.png,domain=afreesms.com - Invalid network filter in default: *$xhr,redirect-rule=1x1.gif,domain=ign.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ignboards.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=9to5google.com|9to5mac.com|9to5toys.com|dronedj.com|electrek.co|marketrealist.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=playhydrax.com - Invalid network filter in default: *$image,redirect-rule=32x32.png,domain=freeplayervideo.com|nazarickol.com|player-cdn.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=kimcartoon.* - Invalid network filter in default: *$3p,script,redirect-rule=noopjs,domain=cbs.com|paramountplus.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=mylink.*|my1ink.*|myl1nk.*|myli3k.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=mp4upload.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=magesy.*|majesy.*|mage.si|magesypro.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=magesy.*|majesy.* - Invalid network filter in default: ||vkcdnservice.com^$script,redirect-rule=noopjs,3p - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=adbull.org - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=simply-hentai.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=arkadium.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ouo.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=viki.com - Invalid network filter in default: ||adservice.google.com^$script,redirect-rule=noopjs,domain=next-episode.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=aternos.org - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=xfreehd.com - Invalid network filter in default: ||thebookee.net^$image,redirect-rule=1x1.gif,1p - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=dubsports.to - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=freeopenvpn.org - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=spiegel.de - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=spiegel.de - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=onlinefreecourse.net - Invalid network filter in default: /ap-plugin-scripteo/frontend/img/728x90.png$image,redirect-rule=1x1.gif - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=megaup.net - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=strikeout.* - Invalid network filter in default: ||wpfc.ml/b.gif$image,redirect-rule=1x1.gif,domain=satcesc.com - Invalid network filter in default: ||a-ads.com^$frame,redirect-rule=noopframe,domain=dogefaucet.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=vipbox.* - Invalid network filter in default: ||ugdturner.com/xd.sjs$script,redirect-rule=noopjs,domain=nba.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=animedao.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=youmath.it - Invalid network filter in default: ||googlesyndication.com^$image,redirect-rule=1x1.gif,domain=educatiocenter.online - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=o2tvseries.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=faucetcrypto.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=duellinksmeta.com - Invalid network filter in default: *$script,domain=delcotimes.com|macombdaily.com|santacruzsentinel.com|saratogian.com|theoaklandpress.com|trentonian.com,redirect-rule=noopjs - Invalid network filter in default: *$image,domain=delcotimes.com|macombdaily.com|santacruzsentinel.com|saratogian.com|theoaklandpress.com|trentonian.com,redirect-rule=2x2.png - Invalid network filter in default: *$script,domain=ebookdz.com,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=marie-claire.es - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=serpadres.es - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=miarevista.es - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=muyhistoria.es - Invalid network filter in default: ||adblockanalytics.com^$xhr,redirect-rule=noop.txt - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=muyinteresante.es - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=linkdrop.net - Invalid network filter in default: *$image,1p,redirect-rule=1x1.gif,domain=leechpremium.link - Invalid network filter in default: @@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=leechpremium.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=mac-torrent-download.net - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=pentafaucet.com - Invalid network filter in default: ||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=3dzip.org - Invalid network filter in default: ||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=fatgirlskinny.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=canaltdt.es - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=amni8.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=audiotools.blog - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=smallseotools.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=hpjav.tv - Invalid network filter in default: *$1p,image,redirect-rule=1x1.gif,domain=rte.ie - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=6play.fr - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=youku.com - Invalid network filter in default: *#$image,domain=freshstuff4you.com,redirect-rule=2x2.png - Invalid network filter in default: *$image,domain=app.trangchu.news|azmath.info|scratch247.info,redirect-rule=1x1.gif - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=debilizator.tv - Invalid network filter in default: ||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule=noopjs:10,domain=simsdom.com - Invalid network filter in default: ||fautsy.com/adblock.php$xhr,redirect-rule=nooptext,1p - Invalid network filter in default: ||googlesyndication.com/pagead/show_ads.js$script,redirect-rule=noopjs,domain=iblogbox.com - Invalid network filter in default: ||ads-twitter.com/uwt.js$xhr,3p,redirect-rule=noop.txt - Invalid network filter in default: ||link-to.net^$image,redirect-rule=1x1.gif,1p - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=finobe.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=photopea.com - Invalid network filter in default: *$script,3p,domain=gsmturkey.net,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ustream.to - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=thehouseofportable.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=streameast.*|thestreameast.io - Invalid network filter in default: *$image,redirect-rule=32x32.png,domain=streameast.*|thestreameast.io - Invalid network filter in default: *$script,3p,redirect-rule=noopjs,domain=freecourseweb.com - Invalid network filter in default: *$image,domain=grafixfather.com,redirect-rule=1x1.gif - Invalid network filter in default: ||googlesyndication.com/pagead/$script,redirect-rule=noopjs,domain=freetutorialseu.com|freetutorialsus.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=linternaute.com - Invalid network filter in default: *$script,domain=vidup.io,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=tf1.fr - Invalid network filter in default: ||mairdumont.com^$script,redirect-rule=noopjs,domain=kachelmannwetter.com - Invalid network filter in default: ||md-nx.com^$script,redirect-rule=noopjs,domain=meteologix.com|weather.us - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=extremereportbot.com - Invalid network filter in default: *$script,xhr,redirect-rule=noopjs,domain=1001tracklists.com - Invalid network filter in default: *$script,3p,redirect-rule=noopjs,domain=leechall.download|leechall.com - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=script-stack.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=wstream.video - Invalid network filter in default: ||newsjizz.in^$image,redirect-rule=1x1.gif,1p - Invalid network filter in default: ||bebi.com^$script,redirect-rule=noopjs,domain=lifestylehack.info - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=unfriend-app.com - Invalid network filter in default: ||flsaudio.com^$image,redirect-rule=1x1.gif,1p - Invalid network filter in default: *$image,redirect-rule=32x32.png,domain=bluemediafiles.* - Invalid network filter in default: */assets.sidearmsports.com/$script,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=12thman.com|acusports.com|atlantic10.com|auburntigers.com|baylorbears.com|bceagles.com|bgsufalcons.com|big12sports.com|bigten.org|bradleybraves.com|butlersports.com|cmumavericks.com|conferenceusa.com|cyclones.com|dartmouthsports.com|daytonflyers.com|dbupatriots.com|dbusports.com|denverpioneers.com|fduknights.com|fgcuathletics.com|fightinghawks.com|fightingillini.com|floridagators.com|friars.com|friscofighters.com|gamecocksonline.com|goarmywestpoint.com|gobison.com|goblueraiders.com|gobobcats.com|gocards.com|gocreighton.com|godeacs.com|goexplorers.com|goetbutigers.com|gofrogs.com|gogriffs.com|gogriz.com|golobos.com|gomarquette.com|gopack.com|gophersports.com|goprincetontigers.com|gopsusports.com|goracers.com|goshockers.com|goterriers.com|gotigersgo.com|gousfbulls.com|govandals.com|gowyo.com|goxavier.com|gozags.com|gozips.com|griffinathletics.com|guhoyas.com|gwusports.com|hailstate.com|hamptonpirates.com|hawaiiathletics.com|hokiesports.com|huskers.com|icgaels.com|iuhoosiers.com|jsugamecocksports.com|longbeachstate.com|loyolaramblers.com|lrtrojans.com|lsusports.net|morrisvillemustangs.com|msuspartans.com|muleriderathletics.com|mutigers.com|navysports.com|nevadawolfpack.com|niuhuskies.com|nulakers.ca|nkunorse.com|nuhuskies.com|nusports.com|oceanbreezenyc.org|okstate.com|olemisssports.com|omavs.com|ovcsports.com|owlsports.com|purduesports.com|redstormsports.com|richmondspiders.com|sfajacks.com|shupirates.com|siusalukis.com|smcgaels.com|smumustangs.com|soconsports.com|soonersports.com|themw.com|tulsahurricane.com|txst.com|txstatebobcats.com|ubbulls.com|ucfknights.com|ucirvinesports.com|uconnhuskies.com|uhcougars.com|uicflames.com|umterps.com|uncwsports.com|unipanthers.com|unlvrebels.com|uoflsports.com|usdtoreros.com|utahstateaggies.com|utepathletics.com|utrockets.com|uvmathletics.com|uwbadgers.com|villanova.com|wkusports.com|wmubroncos.com|woffordterriers.com|1pack1goal.com|bcuathletics.com|bubraves.com|goblackbears.com|golightsgo.com|gomcpanthers.com|goutsa.com|mercerbears.com|pirateblue.com|pirateblue.net|pirateblue.org|quinnipiacbobcats.com|towsontigers.com|tribeathletics.com|tribeclub.com|utepminermaniacs.com|utepminers.com|wkutickets.com|aopathletics.org|atlantichockeyonline.com|bigsouthnetwork.com|bigsouthsports.com|chawomenshockey.com|dbupatriots.org|drakerelays.org|ecac.org|ecacsports.com|emueagles.com|emugameday.com|gculopes.com|godrakebulldog.com|godrakebulldogs.com|godrakebulldogs.net|goeags.com|goislander.com|goislanders.com|gojacks.com|gomacsports.com|gseagles.com|hubison.com|iowaconference.com|ksuowls.com|lonestarconference.org|mascac.org|midwestconference.org|mountaineast.org|niu-pack.com|niuhuskies.com|oswegolakers.com|ovcdigitalnetwork.com|pacersports.com|rmacsports.org|rollrivers.com|samfordsports.com|uncpbraves.com|usfdons.com|wiacsports.com|alaskananooks.com|broncathleticfund.com|cameronaggies.com|columbiacougars.com|etownbluejays.com|gobadgers.ca|golancers.ca|gometrostate.com|gothunderbirds.ca|kentstatesports.com|lehighsports.com|lopers.com|lycoathletics.com|lycomingathletics.com|maraudersports.com|mauiinvitational.com|msumavericks.com|nauathletics.com|nueagles.com|nwusports.com|patriotathleticfund.com|pittband.com|principiaathletics.com|roadrunnersathletics.com|sidearmsocial.com|snhupenmen.com|stablerarena.com|stoutbluedevils.com|uwlathletics.com|yumacs.com|collegefootballplayoff.com|csurams.com|cubuffs.com|gobearcats.com|gohuskies.com|mgoblue.com|osubeavers.com|pittsburghpanthers.com|rolltide.com|texassports.com|thesundevils.com|uclabruins.com|wvuathletics.com|wvusports.com|arizonawildcats.com|calbears.com|cuse.com|georgiadogs.com|goducks.com|goheels.com|insidekstatesports.com|insidekstatesports.info|insidekstatesports.net|insidekstatesports.org|k-stateathletics.com|k-statefootball.net|k-statefootball.org|k-statesports.com|k-statesports.net|k-statesports.org|k-statewomenshoops.com|k-statewomenshoops.net|k-statewomenshoops.org|kstateathletics.com|kstatefootball.net|kstatefootball.org|kstatesports.com|kstatewomenshoops.com|kstatewomenshoops.net|kstatewomenshoops.org|ksuathletics.com|ksusports.com|scarletknights.com|showdownforrelief.com|syracusecrunch.com|texastech.com|theacc.com|ukathletics.com|usctrojans.com|utahutes.com|utsports.com|wsucougars.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=animeshouse.net - Invalid network filter in default: *$media,redirect-rule=noop-0.1s.mp3,3p,domain=gmx.*|web.de - Invalid network filter in default: ||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect-rule=noopjs,domain=adshrink.it - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=turkanime.* - Invalid network filter in default: *$frame,domain=forum.release-apk.com,redirect-rule=noopframe - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=forum.release-apk.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=freevocabulary.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=hentaihaven.xxx - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$redirect-rule=googlesyndication_adsbygoogle.js,script,domain=arabseed.* - Invalid network filter in default: ||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=jmusic.me,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=btik.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=work.ink - Invalid network filter in default: *$script,domain=work.ink,redirect-rule=noopjs - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=sznlink.xyz - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=camera.aeonax.com - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=audioblog.com - Invalid network filter in default: *$script,redirect-rule=empty,domain=streamz.vg|streamzz.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=texviewer.herokuapp.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=881903.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=myschool-eng.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ehubsoft.herokuapp.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=onemanhua.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=laksa19.github.io - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=kurnasional.blogspot.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=puregym.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=tgbeautymedia.blogspot.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=sportif.id - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=motorsport.tv - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=allkaicerteam.com - Invalid network filter in default: *$image,redirect-rule=2x2.png,domain=redbox.com - Invalid network filter in default: *$xhr,redirect-rule=noop.txt,domain=tunein.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=luscious.net - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=vidlii.com - Invalid network filter in default: *$image,redirect-rule=2x2.png,domain=mobilelegends.shop - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=onehack.us - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=savesubs.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=duit.cc|ockles.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=olinevid.com - Invalid network filter in default: ||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect-rule=noopjs,domain=btgyama.blogspot.com - Invalid network filter in default: *$script,domain=btgyama.blogspot.com,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=thumpertalk.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=promo-visits.site|satoshi-win.xyz|shorterall.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=bigbrothercanada.ca - Invalid network filter in default: *$script,1p,redirect-rule=noopjs,domain=pstream.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=onbatch.my.id - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=fishki.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=pandora.com - Invalid network filter in default: *$xhr,3p,redirect-rule=nooptext,domain=podu.me - Invalid network filter in default: */ads$media,redirect-rule=noopmp3-0.1s,domain=podu.me - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=apps2app.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=download.web.id - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=thisav.com - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,xhr,redirect-rule=googlesyndication_adsbygoogle.js:5,domain=~zipextractor.app - Invalid network filter in default: ||googleads.g.doubleclick.net/$xhr,redirect-rule=nooptext - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=arcai.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=lumiafirmware.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=my-code4you.blogspot.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=made-by.org - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=akunssh.net - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=desktophut.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=desktophut.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=dropgalaxy.com|techthematter.xyz - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=dropgalaxy.com|techthematter.xyz - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=dropgalaxy.*|financemonk.net|techthematter.xyz - Invalid network filter in default: *$image,redirect-rule=32x32.png,domain=dropgalaxy.*|financemonk.net|techthematter.xyz - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=runmods.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=minorpatch.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=sythe.org - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=tapetus.pl - Invalid network filter in default: *$media,redirect-rule=noopmp3-0.1s,domain=eroasmr.com - Invalid network filter in default: ||oklivetv.com^$xhr,1p,redirect-rule=nooptext - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=oklivetv.com - Invalid network filter in default: ||doubleclick.net^$frame,redirect-rule=noopframe,domain=cpu-world.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=freebinchecker.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=bandab.com.br - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=animesanka.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=sms24.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=hhkungfu.tv - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=pricez.co.il - Invalid network filter in default: ||tv3play.skaties.lv/static/scripts/ima3.js^$script,redirect-rule=noopjs,domain=skaties.lv - Invalid network filter in default: ||tv3play.skaties.lv/static/scripts/trackdb/events.gif^$image,redirect-rule=1x1.gif,domain=skaties.lv - Invalid network filter in default: ||mssl.fwmrm.net/libs/adm/6.11.0/LinkTag2.js^$redirect-rule=noopjs,script,domain=skaties.lv - Invalid network filter in default: ||googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=onlinecoursebay.com,redirect-rule=noopjs - Invalid network filter in default: *$xhr,domain=megainteresting.com,redirect-rule=nooptext - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=pcprogramasymas.* - Invalid network filter in default: ||static.adsafeprotected.com/vans-adapter-google-ima.js$script,redirect-rule=noopjs,domain=motortrend.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=siamblockchain.com - Invalid network filter in default: *$object,redirect-rule=noopframe,domain=larvelfaucet.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=booogle.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=dcode.fr - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=ctrlv.* - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,domain=coursevania.com,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=katholisches.info - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=atozmath.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=supreme-gamers.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=puressh.net - Invalid network filter in default: *$image,redirect-rule=2x2.png,domain=tel-emporio10.blogspot.com - Invalid network filter in default: *$xhr,domain=indianwebseries.*,redirect-rule=nooptext - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=dynast.io - Invalid network filter in default: *$script,domain=outerspace.com.br,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noop.js,domain=flowsoft7.com - Invalid network filter in default: *$xhr,3p,redirect-rule=nooptext,domain=simkl.com - Invalid network filter in default: *$script,3p,redirect-rule=noopjs,domain=simkl.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=sorasi.net - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=monara.net - Invalid network filter in default: *$script,domain=ad-doge.com,redirect-rule=noopjs - Invalid network filter in default: ||delivery.adrecover.com^$image,redirect-rule=1x1.gif - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=nulleb.com - Invalid network filter in default: *$script,3p,redirect-rule=noopjs,domain=staples.ca - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=iinbinlist.com|osqa.net|vanhawks.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=speedtesting.herokuapp.com|excelviewer.herokuapp.com|exifviewer.herokuapp.com|pdfrecover.herokuapp.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=purposegames.com - Invalid network filter in default: *$image,redirect-rule=32x32.png,domain=bitfly.io - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=downloadrepack.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=danc.uk - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=vuiit.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=seotechman.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=markiza.sk - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=linuxgizmos.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=humannootropicsindex.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=iammagnus.com|dailyvideoreports.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=youneed.win - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=freesslvpn.us|robotvpn.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=maskinbladet.dk|fritidsmarkedet.dk - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=polska-ie.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=vidmoly.me|vidmoly.net|vidmoly.to - Invalid network filter in default: *$script,domain=evoload.io,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ufckhabib.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=muynegociosyeconomia.es - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=unityassets4free.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=lewdninja.com|new.lewd.ninja - Invalid network filter in default: ||advertserve.com/servlet/view/banner/$frame,redirect-rule=noop.html,domain=trk-imps.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=davidbaptistechirot.blogspot.com - Invalid network filter in default: ||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=pngtosvg.com - Invalid network filter in default: ||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=sitarchive.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=telek.top - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=thevideos.ga - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=codimth.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=fiyaplatform.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=taufiqhdyt.com - Invalid network filter in default: ||googlesyndication.com^$script,redirect-rule=googlesyndication_adsbygoogle.js,domain=mr9soft.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=getitall.top - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=freemagazines.top - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=anihub.tv - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=konnoznet.xyz - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=examsnet.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=hitbits.io - Invalid network filter in default: ||adsafeprotected.com/vans-adapter-google-ima.js^$redirect-rule=noopjs,script,domain=unilad.co.uk - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=topnewsshow.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=rollercoin.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=windowsmatters.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=masbrooo.com|2ndrun.tv - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=fr.de - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=kursors.lv - Invalid network filter in default: *$script,domain=gainbtc.*,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ghostsnet.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=fashion.noemoda.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=fashion.noemoda.com - Invalid network filter in default: *$script,domain=novelmultiverse.com,redirect-rule=noopjs - Invalid network filter in default: ||api.adinplay.com^$redirect-rule=noopjs,script,domain=taming.io - Invalid network filter in default: *$image,3p,redirect-rule=1x1.gif,domain=world4.eu - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=cybermania.ws - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=pinoyalbums.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=jnckmedia.com - Invalid network filter in default: ||googletagmanager.com/gtag/js^$redirect-rule=google-analytics_analytics.js,domain=guardaserie.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=cryptojunkie.net - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=vpnstunnel.com - Invalid network filter in default: ||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule=noop.js,domain=anidraw.net - Invalid network filter in default: ||static.adsafeprotected.com/vans-adapter-google-ima.js^$script,redirect-rule=noopjs,domain=sportbible.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=telegraf.rs|telegraf.tv - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=cozinha.minhasdelicias.com - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/show_ads.js^$script,redirect-rule=noopjs,domain=thetimetube.com - Invalid network filter in default: ||googleads.g.doubleclick.net/pagead/$xhr,redirect-rule=nooptext,domain=danshort.com - Invalid network filter in default: ||evolok.net/*/authorize/*$xhr,redirect-rule=nooptext,domain=nation.africa - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/$redirect-rule=noopjs,script,domain=overbits.herokuapp.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=pewgame.com - Invalid network filter in default: ||raw.githubusercontent.com/*/just-detect-adblock/*$3p,xhr,redirect-rule=nooptext - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$redirect-rule=googlesyndication_adsbygoogle.js,script,domain=crypto-fun-faucet.de - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$redirect-rule=googlesyndication_adsbygoogle.js,script,domain=unityassetcollection.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=claimfreebits.com - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$redirect-rule=googlesyndication_adsbygoogle.js,script,domain=persianhive.com - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js^$redirect-rule=googlesyndication_adsbygoogle.js,script,domain=andreyex.ru - Invalid network filter in default: ||sentry-cdn.com^$script,redirect-rule=noopjs,domain=mcmfaucets.xyz - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=rechub.tv - Invalid network filter in default: ||googletagmanager.com/gtag/js$script,redirect-rule=noopjs,domain=rotana.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=ver-television.online - Invalid network filter in default: ||antiblock.b-cdn.net/banner_ad.png$image,redirect-rule=1x1.gif,domain=getpaidstock.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=getpaidstock.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=upvideo.to - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=simplebits.io - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=costumbresmexico.com - Invalid network filter in default: ||adsafeprotected.com/$script,redirect-rule=noopjs,domain=gamingbible.co.uk - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=chiemgau24.de|ovb-online.de|rosenheim24.de|bgland24.de|innsalzach24.de|mangfall24.de|wasserburg24.de - Invalid network filter in default: ||iclickcdn.com^$script,redirect-rule=noopjs,domain=gifans.com - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=streamon.to - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=streamon.to - Invalid network filter in default: ||doubleclick.net^$xhr,redirect-rule=nooptext,domain=liveschauen.com - Invalid network filter in default: ||googleads.g.doubleclick.net^$xhr,redirect-rule=nooptext,domain=weltwebcams.com - Invalid network filter in default: ||sentry-cdn.com^$script,redirect-rule=noopjs,domain=freebitz.xyz - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=gbnews.uk - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=cinemakottaga.ml - Invalid network filter in default: ||explosivemenu.com^$image,redirect-rule=1x1.gif,1p - Invalid network filter in default: host-cdn.net^$image,redirect-rule=32x32.png,domain=maxstream.video - Invalid network filter in default: @@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$xhr,redirect-rule,domain=carousell.* - Invalid network filter in default: ||sentry-cdn.com^$script,redirect-rule=noopjs,domain=phoenixfaucets.xyz|proinfinity.fun - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=howstuffworks.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=userload.* - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/$script,redirect-rule=noopjs,domain=timesnowhindi.com|tvid.in - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=shaalaa.com - Invalid network filter in default: ||doubleclick.net/tag/js/gpt.js$xhr,redirect-rule=noop.txt,domain=link.rota.cc - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=elahmad.com - Invalid network filter in default: *$redirect-rule=noopjs,script,domain=elahmad.com - Invalid network filter in default: /images/ads.$image,redirect-rule=1x1.gif - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=rbxscripts.xyz - Invalid network filter in default: ||adbox.lv^$script,redirect-rule=noop.js,domain=mail.ee - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=bowfile.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=bowfile.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=bowfile.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=plex.tv - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=1cloudfile.com - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=1cloudfile.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=loomi.tv - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=freevpn4you.net - Invalid network filter in default: /px.gif?$image,redirect-rule=1x1.gif - Invalid network filter in default: ||cse.google.com/adsense/search/async-ads.js$xhr,redirect-rule=noop.txt,domain=asiaon.top - Invalid network filter in default: *$script,domain=miraculous.to,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=paraphrasetool.com - Invalid network filter in default: *$image,domain=upshrink.com,redirect-rule=1x1.gif - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=romania.bz - Invalid network filter in default: /banner.gif?$image,redirect-rule=1x1.gif - Invalid network filter in default: *$script,domain=wyze.com,redirect-rule=noopjs - Invalid network filter in default: /reclama/ads.js$script,redirect-rule=prebid-ads.js - Invalid network filter in default: *$object,redirect-rule=empty,domain=sonixgvn.net - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=zwielkopolski24.pl - Invalid network filter in default: ||d2klx87bgzngce.cloudfront.net/jquery.swipebox.min.js$xhr,domain=filmisub.com,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=coin-free.com|kienthucrangmieng.com|techmart4u.in|chinhnhacoban.com|chamcuuhoc.com|hocchannuoi.com|thuocdangian.net|hoclamdaubep.com|tai-mui-hong.com|95news.com|vnpttelle.com|dhlgame.com|nhacremix.biz|hynews.biz|fanclup.info - Invalid network filter in default: ||adclixx.net^$script,3p,redirect-rule=nobab2.js:10 - Invalid network filter in default: ||adnetasia.com^$script,3p,redirect-rule=nobab2.js:10 - Invalid network filter in default: ||adtrackers.net^$script,3p,redirect-rule=nobab2.js:10 - Invalid network filter in default: ||bannertrack.net^$script,3p,redirect-rule=nobab2.js:10 - Invalid network filter in default: ||ads.twitter.com/favicon.ico$image,3p,redirect-rule=32x32.png - Invalid network filter in default: ||advertising.yahoo.com/favicon.ico$image,3p,redirect-rule=32x32.png - Invalid network filter in default: ||doubleclickbygoogle.com/favicon.ico$image,3p,redirect-rule=32x32.png - Invalid network filter in default: ||google.com/adsense/start/images/favicon.ico$image,3p,redirect-rule=32x32.png - Invalid network filter in default: ||gstatic.com/adx/doubleclick.ico$image,3p,redirect-rule=32x32.png - Invalid network filter in default: /ads-prebid.js$script,redirect-rule=prebid-ads.js - Invalid network filter in default: /prebid-ads.js$script,redirect-rule=prebid-ads.js,domain=~exey.io - Invalid network filter in default: /prebid-ads/adsensebase.js$script,redirect-rule=prebid-ads.js - Invalid network filter in default: /prebid-article-ad-ad-300x250.js$script,redirect-rule=prebid-ads.js - Invalid network filter in default: ||doubleclick.net^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||media.fastclick.net^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||ads.facebook.com^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||advice-ads.s3.amazonaws.com^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||ads.youtube.com^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||ads.reddit.com^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||ads-api.twitter.com^$xhr,redirect-rule=nooptext,domain=~twitter.com - Invalid network filter in default: ||ads.pinterest.com^$xhr,redirect-rule=noop.txt - Invalid network filter in default: ||www.sfr.fr^$script,redirect-rule=noop.js,domain=red-by-sfr.fr - Invalid network filter in default: *$image,redirect-rule=2x2.png,domain=searchenginereports.net - Invalid network filter in default: ||geoplugin.net^$xhr,redirect-rule=noop.txt,domain=taotronics.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=upvizzz.xyz - Invalid network filter in default: *$frame,domain=noviny.sk,redirect-rule=noopframe - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=masterduelmeta.com - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=stol.it - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=pinoyfaucet.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=crunchyscan.fr - Invalid network filter in default: ||googletagmanager.com^$script,redirect-rule=noopjs,domain=gainbtc.click|multiclaim.net|proinfinity.fun - Invalid network filter in default: ||googletagmanager.com/gtag/js$script,xhr,redirect-rule=googletagmanager_gtm.js:5 - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=faucetpot.me - Invalid network filter in default: *$xhr,redirect-rule=noop.txt,domain=thingiverse.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=mrlabtest.com - Invalid network filter in default: *$script,domain=multiclaim.net,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=vimm.net - Invalid network filter in default: *$script,domain=surfline.com,redirect-rule=noopjs - Invalid network filter in default: *.png#$image,redirect-rule=1x1.gif - Invalid network filter in default: *.gif#$image,redirect-rule=1x1.gif - Invalid network filter in default: *.jpg#$image,redirect-rule=1x1.gif - Invalid network filter in default: *.svg#$image,redirect-rule=1x1.gif - Invalid network filter in default: ||doubleclick.net^$xhr,redirect-rule=nooptext,domain=soccerstreams-100.* - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=gamingfactor.xyz - Invalid network filter in default: *$image,domain=play.tv3.lv,redirect-rule=1x1.gif - Invalid network filter in default: *$script,domain=play.tv3.lv,redirect-rule=noopjs - Invalid network filter in default: *$image,domain=play.tv3.lt,redirect-rule=1x1.gif - Invalid network filter in default: *$script,domain=play.tv3.lt,redirect-rule=noopjs - Invalid network filter in default: *$image,domain=play.tv3.ee,redirect-rule=1x1.gif - Invalid network filter in default: *$script,domain=play.tv3.ee,redirect-rule=noopjs - Invalid network filter in default: ||vlitag.com^$script,redirect-rule=noopjs,domain=mangasco.com - Invalid network filter in default: ||sumfaucet.com/adblock.php$xhr,redirect-rule=nooptext,1p - Invalid network filter in default: ||media.net^$object,redirect-rule=noopjs - Invalid network filter in default: ||google-analytics.com^$object,redirect-rule=noopjs - Invalid network filter in default: ||doubleclick.net^$object,redirect-rule=noopjs - Invalid network filter in default: ||secure.quantserve.com^$object,redirect-rule=noopjs - Invalid network filter in default: ||amazon-adsystem.com^$object,redirect-rule=noopjs - Invalid network filter in default: ||ssl.geoplugin.net/javascript.gp$xhr,redirect-rule=noopjs - Invalid network filter in default: *#*/ad/$image,redirect-rule=1x1.gif - Invalid network filter in default: ||a-ads.com^$xhr,redirect-rule=nooptext,domain=ezcoin.it - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=elkjop.no - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=madtrx.fun - Invalid network filter in default: *$script,domain=freesolana.top,redirect-rule=noopjs - Invalid network filter in default: ||surfe.pro/js/net.js$script,xhr,redirect-rule=noop.js - Invalid network filter in default: *$media,redirect-rule=noopmp3-0.1s,domain=149.56.24.226 - Invalid network filter in default: ||static.doubleclick.net/instream/ad_status.js$xhr,redirect-rule=noop.js,domain=sshinjector.net - Invalid network filter in default: ||googlesyndication.com^$script,redirect-rule=noopjs,domain=youfiles.herokuapp.com - Invalid network filter in default: /prebid-add.js$script,redirect-rule=prebid-ads.js - Invalid network filter in default: ||cxense.com/cx.$script,redirect-rule=noop.js,domain=japannews.yomiuri.co.jp - Invalid network filter in default: *$script,domain=discuss.com.hk,redirect-rule=noopjs - Invalid network filter in default: @@||g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=pomponik.pl - Invalid network filter in default: *$xhr,script,domain=tamrieltradecentre.com,redirect-rule=noopjs - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=tamrieltradecentre.com - Invalid network filter in default: ||matystudios.github.io/banner_ad.png$image,redirect-rule=2x2.png - Invalid network filter in default: ||www3.doubleclick.net^$xhr,redirect-rule=noop.txt,domain=lineups.fun - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=vogel.de|elektronikpraxis.de - Invalid network filter in default: *$script,domain=tieutietkiem.com,redirect-rule=noopjs - Invalid network filter in default: *$frame,domain=adclickersbot.com,redirect-rule=noopframe - Invalid network filter in default: *$image,domain=adclickersbot.com,redirect-rule=1x1.gif - Invalid network filter in default: ||scripts.cleverwebserver.com^$script,redirect-rule=noop.js - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=allcryptoz.net|crewbase.net|crewus.net|shinbhu.net|shinchu.net|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net - Invalid network filter in default: *$script,domain=faucetbtc.net,redirect-rule=noopjs - Invalid network filter in default: ||googletagmanager.com^$xhr,domain=streamingcommunity.*,redirect-rule=noop.js - Invalid network filter in default: ||thaudray.com^$script,xhr,redirect-rule=noop.js,domain=streamingcommunity.* - Invalid network filter in default: *$script,domain=lightnovelworld.com,redirect-rule=noop.js - Invalid network filter in default: ||pagead2.googlesyndication.com/pagead/show_ads.js$xhr,redirect-rule=noop.js,domain=spinbot.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=easymc.io - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=feyorra.site - Invalid network filter in default: *$script,domain=doge25.in,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=btcbunch.com - Invalid network filter in default: *$script,xhr,domain=intibia.com,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=pianoweb.fr,redirect-rule=noopjs - Invalid network filter in default: ||doubleclick.net^$frame,redirect-rule=noopframe,domain=play.aidungeon.io - Invalid network filter in default: ||bmfads.com^$script,redirect-rule=noopjs - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=ksl.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=liveone.com - Invalid network filter in default: *$xhr,script,redirect-rule=noopjs,domain=freemcserver.net - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=freemcserver.net - Invalid network filter in default: *$3p,xhr,redirect-rule=noop.txt,domain=mangahosted.com - Invalid network filter in default: ||realsrv.com^$xhr,redirect-rule=noop.txt,domain=koushoku.org - Invalid network filter in default: *$3p,script,redirect-rule=noop.js,domain=koushoku.org - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=sprawdzwegiel.pl - Invalid network filter in default: ||nitropay.com/1.gif?$image,3p,redirect-rule=1x1.gif - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=ygosu.com|loawa.com|feedclick.net|algumon.com|sportalkorea.com|ondemandkorea.com - Invalid network filter in default: *$script,xhr,redirect-rule=noopjs,domain=ygosu.com|loawa.com|feedclick.net|algumon.com|sportalkorea.com|ondemandkorea.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=ygosu.com|loawa.com|feedclick.net|algumon.com|sportalkorea.com|ondemandkorea.com - Invalid network filter in default: /player/player_ads.html?advertising_id=$frame,1p,redirect-rule=noop.html - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=cryptowidgets.net|wiki-topia.com - Invalid network filter in default: ||officepoolstop.com/images/ads/*$image,1p,redirect-rule=1x1.gif - Invalid network filter in default: ||nautiljon.com/static/js/adblock_detector.js$script,redirect-rule=noopjs - Invalid network filter in default: ||googlesyndication.com/favicon.ico$image,redirect-rule=1x1.gif - Invalid network filter in default: ||yieldmo.com^$script,redirect-rule=noopjs,domain=cloudcomputingtopics.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=freebinance.top - Invalid network filter in default: ||porno365.bingo^$image,1p,redirect-rule=1x1.gif - Invalid network filter in default: ||thothd.com^$image,1p,redirect-rule=1x1.gif - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=insurancegold.in - Invalid network filter in default: ||imasdk.googleapis.com^$script,redirect-rule=noopjs,domain=panhandle.newschannelnebraska.com - Invalid network filter in default: ||thisiswaldo.com/static/js$script,redirect-rule=noop.js - Invalid network filter in default: ||cloudfront.net/prebid_$script,redirect-rule=noop.js - Invalid network filter in default: /^https?:\/\/(?:[a-z]{2}\.)?[0-9a-z]{7,16}\.com\/[a-z](?=[a-z]{0,25}[0-9A-Z])[0-9a-zA-Z]{3,26}\/(?:[1-5]\d{4}|[3-9]\d{3})\??(?:_=\d+|v=\d)?$/$script,redirect-rule=noop.js - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=haxina.com - Invalid network filter in default: ||coinzillatag.com^$script,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=bitcotasks.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=freelitecoin.top|freetron.top - Invalid network filter in default: *$script,domain=faucetcrypto.net,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=short.freeltc.top,redirect-rule=noopjs - Invalid network filter in default: *$image,domain=my.optikservers.com,redirect-rule=1x1.gif - Invalid network filter in default: *$script,domain=criptoshark.com,redirect-rule=noopjs - Invalid network filter in default: *$script,xhr,domain=hatecoin.me,redirect-rule=noopjs - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=anydebrid.com|hotdebrid.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=anydebrid.com|hotdebrid.com - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=hacksnation.com - Invalid network filter in default: ||imasdk.googleapis.com^$script,redirect-rule=noopjs,domain=mynorthwest.com - Invalid network filter in default: *$script,domain=adshnk.com,redirect-rule=noopjs - Invalid network filter in default: ||npttech.com/advertising.js$script,redirect-rule=noop.js - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=ssbsblg.blogspot.com - Invalid network filter in default: *$3p,script,redirect-rule=noop.js,domain=toolxox.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=nobitafc.com - Invalid network filter in default: ||js.wpadmngr.com/static/adManager.js$script,redirect-rule=noopjs - Invalid network filter in default: ||mail-ads.google.com^$xhr,domain=rxd-mods.xyz,redirect-rule=nooptext - Invalid network filter in default: ||ad.71i.de/somtag/config/$script,redirect-rule=noopjs,domain=sat1.de|wetter.com - Invalid network filter in default: *$script,redirect-rule=noop.js,domain=soranews24.com - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=soranews24.com - Invalid network filter in default: ||tpc.googlesyndication.com^$image,redirect-rule=1x1.gif,domain=soranews24.com - Invalid network filter in default: @@||amazon-adsystem.com/aax2/apstag.js$script,redirect-rule,domain=youpouch.com - Invalid network filter in default: *$script,domain=termux.xyz,redirect-rule=noopjs - Invalid network filter in default: ||adoto.net/dashboard/display/items.php$xhr,redirect-rule=nooptext - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=cloud-computing-central.com - Invalid network filter in default: *$script,domain=blog.freeoseocheck.com|blog.coinscap.info|blog.cookinguide.net,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=koamnewsnow.com,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=manga-oni.com,redirect-rule=noopjs - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=dobreprogramy.pl,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=grabcrypto.co,redirect-rule=noopjs - Invalid network filter in default: ||mstm.motorsport.com^$script,1p,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=rendimentibtp.it,redirect-rule=noopjs - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=rocketnews24.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=kruidvat.nl - Invalid network filter in default: ||jsdelivr.net^*/fp.min.js$script,redirect-rule=fingerprint3.js:10 - Invalid network filter in default: @@||google-analytics.com/ga.js$script,redirect-rule,domain=download-chromium.appspot.com - Invalid network filter in default: ||googlesyndication.com/safeframe/*/container.html$frame,redirect-rule=noop.html,domain=los40.com - Invalid network filter in default: ||assets.adobedtm.com/*/satelliteLib$script,redirect-rule=noopjs,domain=8world.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,redirect-rule=noopjs,domain=8world.com - Invalid network filter in default: ||player.ooyala.com^$script,redirect-rule=noopjs,domain=8world.com - Invalid network filter in default: ||amazonaws.com^$xhr,redirect-rule=nooptext,domain=viu.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=ilmeteo.it - Invalid network filter in default: ||px.moatads.com/pixel.gif$image,domain=abcya.com,redirect-rule=1x1.gif - Invalid network filter in default: ||amazon-adsystem.com/*/apstag.js$script,redirect-rule=amazon_apstag.js - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=play.cadenaser.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=corriere.it - Invalid network filter in default: ||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js,domain=asmhentai.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=hopkinssports.com - Invalid network filter in default: *$script,domain=larena.it,redirect-rule=noopjs - Invalid network filter in default: *$xhr,redirect-rule=noopjs,domain=themeslide.com - Invalid network filter in default: ||doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js,domain=aristeguinoticias.com - Invalid network filter in default: ||doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js,domain=usnews.com - Invalid network filter in default: ||otaserve.net^$frame,redirect-rule=noop.html,domain=chan.sankakucomplex.com - Invalid network filter in default: ||securepubads.g.doubleclick.net/tag/js/gpt.js^$script,redirect-rule=googletagservices_gpt.js,domain=pimylifeup.com - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js,domain=indigenousoap.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=seeitlive.co - Invalid network filter in default: ||static.adsafeprotected.com/vans-adapter-google-ima.js^$script,redirect-rule=noopjs,domain=tyla.com - Invalid network filter in default: ||epimg.net/t.gif$image,redirect-rule=1x1.gif,domain=as.com - Invalid network filter in default: ||news38.de/resources/*$image,1p,redirect-rule=1x1.gif - Invalid network filter in default: @@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=golf.com - Invalid network filter in default: ||assets.revistavanityfair.es/images/transparent_pixel.gif$image,1p,redirect-rule=1x1.gif - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=animalchannel.co|homehacks.co|parentingisnteasy.co|seeitlive.co|spotlightstories.co - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=bela.gifts - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=lingvolive.com - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js,domain=ultimateclassicrock.com - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager.com/gtm.js,domain=ultimateclassicrock.com - Invalid network filter in default: ||google-analytics.com/analytics.js$script,redirect-rule=noopjs,domain=hudsonvalleypost.com|seacoastcurrent.com|popcrush.com,important - Invalid network filter in default: ||googletagmanager.com/gtm.js$script,redirect-rule=noopjs,domain=hudsonvalleypost.com|seacoastcurrent.com|popcrush.com,important - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,3p,redirect-rule,domain=k2radio.com|kowb1290.com|koel.com|loudwire.com - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,3p,redirect-rule,domain=k2radio.com|kowb1290.com|koel.com|loudwire.com - Invalid network filter in default: @@||googletagmanager.com^$redirect-rule,domain=invisibleoranges.com|nj1015.com|tasteofcountry.com|wyrk.com|xxlmag.com - Invalid network filter in default: @@||google-analytics.com^$redirect-rule,domain=invisibleoranges.com|nj1015.com|tasteofcountry.com|wyrk.com|xxlmag.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js^$script,redirect-rule=noopjs,domain=weather.com - Invalid network filter in default: ||clustrmaps.com^$image,redirect-rule=1x1.gif - Invalid network filter in default: @@||amazon-adsystem.com/*/apstag.js$script,redirect-rule=amazon_apstag.js,domain=video.sky.it - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager.com/gtm.js,domain=autotrader.ca - Invalid network filter in default: ||wdr.de/*/tracker/tracker.min.js$script,redirect-rule=noop.js,domain=sportschau.de - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=corsair.com - Invalid network filter in default: @@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=gamedeveloper.com - Invalid network filter in default: @@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=heim.jp - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=mf-realty.jp - Invalid network filter in default: ||cloudflare.com/cdn-cgi/trace$xhr,3p,redirect-rule=noop.txt,domain=~funimation.com|~1bit.space|~1bitspace.com - Invalid network filter in default: ||d2r1yp2w7bby2u.cloudfront.net/js/localforage.min.js$script,redirect-rule=noopjs,domain=sonyliv.com - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule,domain=simon.com - Invalid network filter in default: ||natureetdecouvertes.com^$1p,image,redirect-rule=2x2.png - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule,domain=nordvpn.com - Invalid network filter in default: @@||cloudflare.com/cdn-cgi/trace$xhr,redirect-rule=noop.txt,domain=benchmarkuniverse.com - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=sammobile.com - Invalid network filter in default: ||prebid.elespectador.com^$script,redirect-rule=googletagservices_gpt.js,1p,important - Invalid network filter in default: ||rudaw.net/images/$image,1p,redirect-rule=1x1.gif,important - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js,domain=layrite.com - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager.com/gtm.js,domain=aeriagames.com - Invalid network filter in default: *$script,redirect-rule=noop.js,domain=nissan.co.jp - Invalid network filter in default: ||dan-ball.jp/*.gif$image,redirect-rule=1x1.gif - Invalid network filter in default: *$image,domain=asfan.as.com,redirect-rule=1x1.gif - Invalid network filter in default: ||booking.rm.dk/selvbooking/*/analytics/*$xhr,1p,redirect-rule=nooptext - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js:5,domain=stern.de - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager_gtm.js:5,domain=stern.de - Invalid network filter in default: ||elpais.com/t.gif$image,1p,redirect-rule=1x1.gif,important - Invalid network filter in default: ||tag.atom.gamedistribution.com^$xhr,redirect-rule=nooptext,1p - Invalid network filter in default: @@||googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=html5.gamedistribution.com - Invalid network filter in default: ||hits.informer.com/log.php$image,domain=funny.pho.to,redirect-rule=1x1.gif - Invalid network filter in default: @@/prebid-ads/adsensebase.js$script,redirect-rule=prebid-ads.js,domain=darkreading.com - Invalid network filter in default: *$frame,domain=mcrypto.club|luckydice.net,redirect-rule=noopframe - Invalid network filter in default: ||cryptocoinsad.com/ads/show.php$frame,redirect-rule=noop.html - Invalid network filter in default: ||wpfc.ml^$image,redirect-rule=1x1.gif,domain=thestoryexchange.org - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager_gtm.js:5,domain=ebay-kleinanzeigen.de - Invalid network filter in default: *$image,domain=novelgames.com,redirect-rule=1x1.gif - Invalid network filter in default: *$script,domain=novelgames.com,redirect-rule=noopjs - Invalid network filter in default: *$xhr,domain=novelgames.com,redirect-rule=nooptext - Invalid network filter in default: @@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule=googletagservices_gpt.js:5,domain=olx.pt - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule=google-analytics.com/analytics.js:5,domain=xeroshoes.com - Invalid network filter in default: @@||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:5,domain=xeroshoes.com - Invalid network filter in default: @@||googletagmanager.com/gtm.js$script,redirect-rule=googletagmanager_gtm.js:5,domain=xeroshoes.com - Invalid network filter in default: @@||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:5,domain=myshows.me - Invalid network filter in default: @@||googletagservices.com/tag/js/gpt.js$script,redirect-rule,domain=thedailybeast.com - Invalid network filter in default: ||imasdk.googleapis.com/js/sdkloader/ima3.js$script,domain=ultimedia.com,redirect-rule=noopjs - Invalid network filter in default: @@||pagead2.googlesyndication.com/pagead/js/adsbygoogle.js$script,redirect-rule,domain=amachamusic.chagasi.com - Invalid network filter in default: @@||amazon-adsystem.com/*/apstag.js$script,redirect-rule,domain=weather.com - Invalid network filter in default: @@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,redirect-rule,domain=honestjohn.co.uk - Invalid network filter in default: @@||googletagmanager.com/gtag/js$script,redirect-rule,domain=contactpoints.org - Invalid network filter in default: ||encar.com/js/*/analytics.js$script,1p,redirect-rule=noop.js - Invalid network filter in default: @@||google-analytics.com/analytics.js$script,redirect-rule,domain=youtube.videodeck.net - Invalid network filter in default: ||samash.com^$script,redirect-rule=noopjs - Invalid network filter in default: ||arcgis.com/apps/instant/node_modules/templates-common-library/structuralFunctionality/telemetry/AppMeasurement.js$script,1p,redirect-rule=noopjs - Invalid network filter in default: *$script,domain=wp.pl|money.pl|o2.pl|parenting.pl|pudelek.pl|autokult.pl|gadzetomania.pl|fotoblogia.pl|komorkomania.pl|polygamia.pl|abczdrowie.pl,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=rjno1.com - Invalid network filter in default: *$image,domain=fcdn.lauta.media,redirect-rule=32x32.png - Invalid network filter in default: ||adform.net^$domain=fcdn.lauta.media,script,xhr,redirect-rule=noopjs - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=promo-visits.site|satoshi-win.xyz|shorterall.com - Invalid network filter in default: ||googletagmanager.com/gtag/js$script,redirect-rule=googletagmanager_gtm.js:10,domain=satoshi-win.xyz - Invalid network filter in default: ||id5-sync.com^$image,redirect-rule=1x1.gif,domain=satoshi-win.xyz - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=allcryptoz.net|crewbase.net|crewus.net|shinbhu.net|shinchu.net|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net - Invalid network filter in default: *$xhr,redirect-rule=nooptext,domain=allcryptoz.net|crewbase.net|crewus.net|shinbhu.net|shinchu.net|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net - Invalid network filter in default: *$image,redirect-rule=1x1.gif,domain=allcryptoz.net|crewbase.net|crewus.net|shinbhu.net|shinchu.net|thumb8.net|thumb9.net|topcryptoz.net|uniqueten.net|ultraten.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=next-episode.net - Invalid network filter in default: *$script,redirect-rule=noopjs,domain=dragontea.ink - Invalid network filter in default: *$frame,redirect-rule=noopframe,domain=dragontea.ink - Invalid network filter in default: *$image,redirect-rule=nooptext,domain=dragontea.ink - Invalid network filter in default: ||googlesyndication.com/safeframe/$frame,redirect-rule=noop.html,domain=rocketnews24.com|youpouch.com - Invalid network filter in default: ||googlesyndication.com/safeframe/$frame,redirect-rule=noop.html,domain=soranews24.com - Invalid network filter in default: *$frame,domain=techcyan.com|kiktu.com|upshrink.com,redirect-rule=noopframe - Invalid network filter in default: *$frame,domain=welt.de,redirect-rule=noopframe - Invalid network filter in default: *$script,domain=welt.de,redirect-rule=noopjs - Invalid network filter in default: $webrtc,domain=ack.net|allthetests.com|azvideo.net|champion.gg|clicknupload.link|colourlovers.com|csgolounge.com|dispatch.com|fastplay.to|go4up.com|gounlimited.to|janjua.pw|janjua.tv|jpost.com|megaup.net|merriam-webster.com|netdna-storage.com|ouo.io|ouo.press|rlslog.net|sourceforge.net|spanishdict.com|telegram.com|torlock.icu|torlock2.com|uptobox.com|videowood.tv|vidtodo.com|yts.gs|yts.mx -Rejected cosmetic filters: 211 - Entity-based filter not supported: div.ellip > span:has-text(/^Ads?$/):upward(2) - Entity-based filter not supported: [href^="https://www.googleadservices.com/pagead/aclk?"][href$="adurl="]:upward(3) - Entity-based filter not supported: :not(:matches-path(/^/search\?.*tbm=shop|^/shopping/)) *:not([class^="sh-sr__shop-result-group"]) [href^="/aclk"][href$="adurl="]:upward(3) - Entity-based filter not supported: .sh-sr__shop-result-group[data-hveid] .sh-sp__btn:matches-css(font-size: 13px):upward(.sh-sr__shop-result-group):has(a[href^="/aclk"][href$="adurl="]) - Entity-based filter not supported: c-wiz div[data-hveid] > div > div > ul:has(> li[style="max-width:200px;"] > div > div[data-hveid] > a[href*="/aclk"]):upward(3) - Entity-based filter not supported: div[data-section-id] > a[href^="/aclk"][href*="placesheetAdFix="][href*="adurl="]:upward(1) - Entity-based filter not supported: :matches-path(/travel/hotels/) div[data-is-promoted="true"] - Entity-based filter not supported: div.container:style(margin-top: 0px !important) - Invalid filter: timesofindia.indiatimes.com##:xpath(//p[contains(text(),"Ad ")]/../..) - Invalid filter: timesofindia.indiatimes.com##[onclick] .btxt:matches-css-before(content:/Ad/):xpath(../../..) - Invalid filter: indiatimes.com##[onclick] .btxt:has-text(/Ad/):xpath(../../..) - Invalid filter: indiatimes.com##[onclick] p:has-text(/Ad/):xpath(../../..) - Invalid filter: indiatimes.com##[onclick] p:matches-css-before(content:/Ad /):xpath(../..):not(p:has-text(/MAHA/i)):not(p:has-text(/Times/i)) - Invalid filter: samayam.com##[onclick] p:matches-css-before(content:/Ad /):xpath(../..):not(p:has-text(/MAHA/i)):not(p:has-text(/Times/i)) - Invalid filter: samayam.com##:xpath(//span[(text()='Ad')]/../../..) - Invalid filter: indiatimes.com##[onclick] h5:has-text(/Ad/):xpath(../../..) - Invalid filter: m.timesofindia.com##.brand_ctn:has-text(/Ad:/):xpath(../..) - Invalid filter: m.timesofindia.com##span:has-text(/Ad:/):xpath(../..) - Invalid filter: m.timesofindia.com##p:has-text(/Ad:/):xpath(../../..) - Invalid filter: indiatimes.com##p:matches-css(background-image: /colombia-icon/):xpath(../..) - Invalid filter: indiatimes.com##div:matches-css(background-image: /colombia_/):xpath(../..) - Invalid filter: economictimes.indiatimes.com##:xpath(//span[contains(text(),"More from ")]/../preceding-sibling::div) - Invalid filter: economictimes.indiatimes.com##:xpath(//span[contains(text(),"Around The")]) - Invalid filter: economictimes.indiatimes.com##:xpath(//p[contains(text(),"Ad:")]/../..) - Entity-based filter not supported: [id^="sas_"]:style(height: 1px !important) - Invalid filter: finanzen.net##:xpath('//*[contains(text(),"Werbung")]') + [class] - Invalid filter: finanzen.net##:xpath(//*[contains(text(),"Werbung")]) + [class] - Entity-based filter not supported: .s-widget > [data-cel-widget^="MAIN"] > [data-cel-widget^="tetris"] > div[id^="CardInstance"][class^="_tetris-"]:upward(3) - Entity-based filter not supported: .a-carousel-card > div > div[cel_widget_id^="adplacements:"]:upward(2):remove() - Entity-based filter not supported: #similarities_feature_div span[id^="ad-feedback-text"]:upward(#similarities_feature_div) - Entity-based filter not supported: .download-links-dontblock > LI:has-text(Anon) - Entity-based filter not supported: .download-links-dontblock > LI:has-text(Stream) - Entity-based filter not supported: .no-top-radius div > a[href]:has-text(VPN) - Invalid filter: quora.com##:xpath(//div[not(@class="ui_qtext_para") and contains(text(), 'ad by')]/parent::div/parent::div/parent::div[@id]) - Invalid filter: quora.com##:xpath(//div[not(@class="ui_qtext_para") and contains(text(), 'promoted') and contains(text(), 'by')]/parent::a/parent::div/parent::div/parent::div[@id]) - Invalid filter: quora.com##:xpath(//div[not(@class="ui_qtext_para") and contains(text(), 'Quora') and contains(text(), 'by') and contains(text(), 'Business')]/parent::a/parent::div/parent::div/parent::div[@id]) - Invalid filter: quora.com##:xpath(//span[contains(text(), 'by')]/ancestor::*[contains(concat(' ', @class, ' '), ' external_link ')]/../../..) - Invalid filter: quora.com##:xpath(//p[(text()='d')]/../../../../..) - Entity-based filter not supported: .adsbyvli:upward(div[style$="width: 610px;"]) - Entity-based filter not supported: #leftside .adsbyvli:upward(div[style$="height: 90px;"]) - Invalid filter: primewire.*##:xpath('//*[contains(text(),"Sponsored")]'):upward(2) - Invalid filter: primewire.*##:xpath(//*[contains(text(),"Sponsored")]):upward(2) - Entity-based filter not supported: .trtbl:has-text(VPN) - Invalid filter: torrentfunk.com##:xpath(//strong[contains(text(),"VPN")]/../../..) - Entity-based filter not supported: [class]:not(body):not(html):has-text(/Protect your privacy/i) - Entity-based filter not supported: [class]:not(body):not(html):has-text(Sponsored) - Invalid filter: torlock.*##:xpath(//strong[contains(text(),"VPN")]/../../..) - Invalid filter: torlock2.*##:xpath(//strong[contains(text(),"VPN")]/../../..) - Entity-based filter not supported: body.modal-open:style(overflow: auto!important) - Entity-based filter not supported: TR:has-text(Stream:) - Entity-based filter not supported: .table2:has-text(Sponsored) - Entity-based filter not supported: div[id][style="width: 728px; height: 90px;"]:upward(#pub1) - Invalid filter: nytimes.com##:xpath(//div[starts-with(@id, "dfp-ad")]/../..) - Invalid filter: nytimes3xbfgragh.onion##:xpath(//div[starts-with(@id, "dfp-ad")]/../..) - Entity-based filter not supported: .btn-danger:has-text(/download/i) - Entity-based filter not supported: .vpn-link:upward(1) - Entity-based filter not supported: .content.page.page-video .video-content > div[class] > div > div[class] > div[class][style^="background-image:"]:style(background-image: none !important;) - Entity-based filter not supported: .page-video > div.video-videos-slider ~ div[class]:matches-css(justify-content: center) - Entity-based filter not supported: .video-content > div[class] > div.text > a[href="#"]:upward(2) - Invalid filter: spankwire.com##:xpath('//*[contains(text(),"Advertisement")]'):upward(1) - Invalid filter: spankwire.com##:xpath(//*[contains(text(),"Advertisement")]):upward(1) - Invalid filter: 1337x.*##:xpath('//*[contains(text(),"Hide your IP")]/..') - Invalid filter: x1337x.*##:xpath('//*[contains(text(),"Hide your IP")]/..') - Invalid filter: 1337x.unblock2.xyz##:xpath('//*[contains(text(),"Hide your IP")]/..') - Invalid filter: 1337x.unblocked.*##:xpath('//*[contains(text(),"Hide your IP")]/..') - Invalid filter: 1337x.unblockit.*##:xpath('//*[contains(text(),"Hide your IP")]/..') - Invalid filter: 1337x.*##:xpath(//*[contains(text(),"Hide your IP")]/..) - Invalid filter: x1337x.*##:xpath(//*[contains(text(),"Hide your IP")]/..) - Invalid filter: 1337x.unblock2.xyz##:xpath(//*[contains(text(),"Hide your IP")]/..) - Invalid filter: 1337x.unblocked.*##:xpath(//*[contains(text(),"Hide your IP")]/..) - Invalid filter: 1337x.unblockit.*##:xpath(//*[contains(text(),"Hide your IP")]/..) - Invalid filter: pussyspace.*##:xpath(//span[contains(text(),"PARTNER")]/..) - Entity-based filter not supported: #web:style(display: block !important;) - Entity-based filter not supported: .adsbyvli:upward(div[style^="width: 300px; height: 250px"]) - Invalid filter: pcbolsa.com##.InfoPcBolsaAdBlock:xpath(..) - Entity-based filter not supported: .position-absolute:style(opacity: 0 !important;) - Entity-based filter not supported: .adsbytrafficjunky:upward(li) - Entity-based filter not supported: div > [href*=".html"]:upward(div) - Entity-based filter not supported: li:has-text(100% Anonym) - Entity-based filter not supported: button[id]:has-text(/High-speed/i) - Invalid filter: ettv.*##:xpath('//*[contains(text(),"VPN")]'):upward(2) - Invalid filter: ettv.*##:xpath(//*[contains(text(),"VPN")]):upward(2) - Entity-based filter not supported: .column > .card > .adv:upward(2) - Entity-based filter not supported: #list-eps:style(display:block!important) - Entity-based filter not supported: .les-title:has-text(HD) - Entity-based filter not supported: [href]:has-text(PLAY) - Entity-based filter not supported: tr:has-text(VPN) - Entity-based filter not supported: .head:has-text(Adv) - Entity-based filter not supported: .uk-card-secondary:has-text(VPN) - Entity-based filter not supported: [class="close ico"]:upward(1) - Entity-based filter not supported: table.movie_version:has-text(Promo) - Entity-based filter not supported: div.row:has-text(in HD) - Entity-based filter not supported: h2.widget-title:has-text(Advertisement) - Entity-based filter not supported: .btn_d:has-text(/high/i) - Entity-based filter not supported: [class^="ad_btn"]:upward(center) - Invalid filter: ndtv.com##.composite-branding.branding:has-text(/sponsored/i):xpath(..) - Invalid filter: ndtv.com##:xpath(//div[contains(text(),"Advert")]) - Invalid filter: extratorrent.*##:xpath(//a[contains(text(),"VPN")]/../../..) - Entity-based filter not supported: .links_table > .fix-table > table > tbody > tr:has-text(Patrocinador) - Entity-based filter not supported: input[value^="http"]:style(width: 70% !important) - Entity-based filter not supported: li.s-item:has(span:has-text(/S[^P]*?P[^O]*?O[^N]*?N[^S]*?S[^O]*?O[^R]*?R[^E]*?E[^D]*?D/)) - Entity-based filter not supported: .s-item__title-tag:has-text(/^SPONSORED$/):upward(.s-item) - Invalid filter: ebay.*##.s-item:has-text(Sponsored):xpath('//*[string-length(@aria-labelledby) = 8]'):upward(.s-item) - Invalid filter: ebay.*##.s-item:has-text(Sponsored):xpath(//*[string-length(@aria-labelledby) = 8]):upward(.s-item) - Entity-based filter not supported: #content-embed:style(display: block!important) - Invalid filter: washingtonpost.com##:xpath('//*[(text()='AD')]/..') - Invalid filter: washingtonpost.com##:xpath(//*[(text()='AD')]/..) - Entity-based filter not supported: div.col-md-4:nth-of-type(1):has-text(Usennet) - Entity-based filter not supported: .panel-featured-success.panel-featured-bottom.panel-featured-top.panel.text-center:has([alt="Usennet.nl"]):upward(1) - Entity-based filter not supported: #adBanner:style(height:25px !important;left:-3000px !important;position:absolute !important) - Entity-based filter not supported: iframe[src^="//sports24.site/"]:upward(div) - Entity-based filter not supported: div[style^="width:300px;height:250px"]:upward(1) - Entity-based filter not supported: div[data-player] > .container:style(max-width: 100% !important;) - Invalid filter: sports24.*##:xpath('//*[contains(text(),"Watch HD")]') - Invalid filter: sports24.*##:xpath(//*[contains(text(),"Watch HD")]) - Entity-based filter not supported: .btn-outline-primary:has-text(/HD$/) - Invalid filter: bitcointalk.org##:xpath(//span[contains(text(),"Advert")]/../..) - Entity-based filter not supported: div.col-xs-12:has-text(MMPORG OYUNLAR) - Entity-based filter not supported: .panel-title:has-text(REKLAM) - Entity-based filter not supported: .table-hover.table > tbody > tr:has-text(Descargar Premium) - Entity-based filter not supported: a[href*=".yabo816."]:remove() - Invalid filter: trakt.tv##:xpath('//*[(text()='Advertisement')]/..') - Invalid filter: trakt.tv##:xpath(//*[(text()='Advertisement')]/..) - Entity-based filter not supported: button:has(span:has-text(Skip)) - Invalid filter: pelis-gratis.com##.holder > li [href*="/descargar.html"]:xpath(../..) - Entity-based filter not supported: main.py-4:style(min-height:0px !important) - Entity-based filter not supported: [style^="font-weight"]:has-text(PREMIUM) - Entity-based filter not supported: .placeholder-content:style(display: inline-block !important) - Invalid filter: akvi.icu##:xpath('//*[contains(text(),"Disable")]') - Invalid filter: akvi.icu##:xpath(//*[contains(text(),"Disable")]) - Entity-based filter not supported: .s-item__sep:matches-css(display: none):remove() - Invalid filter: ebay.*##:xpath(//span[(text()='S')]):upward(.s-item) - Entity-based filter not supported: [id^="cookieConsent"]:upward(1) - Entity-based filter not supported: div#responseads:style(display:block !important) - Entity-based filter not supported: #component_2 > div[class^="_"] > div > div[class^="iab_"][style="min-height:90px"]:upward(2) - Entity-based filter not supported: .ui_container > div[class] > div[class^="_"] > .iab_medRec:only-child:upward(1) - Entity-based filter not supported: #playVideo:style(display: block !important; visibility: visible !important;) - Entity-based filter not supported: #player_embed:style(display: block !important; visibility: visible !important;) - Entity-based filter not supported: .jw-reset.jw-wrapper:style(z-index:2147483647 !important) - Entity-based filter not supported: #f13 > b:has-text(Sponsor):upward(4) - Entity-based filter not supported: td#f13:nth-of-type(3) > table:nth-of-type(4) > tbody > tr > td:upward(3) - Entity-based filter not supported: .g-recaptcha:upward(form > div):style(display: block !important;) - Entity-based filter not supported: [style="display:none"]:style(display: block !important;) - Entity-based filter not supported: div[data-test-id="pin"] span:not([class]):has-text(/Promoted by|広告/):upward([data-grid-item="true"]) - Invalid filter: masterduelmeta.com##:xpath('//*[contains(text(),"adblock")]'):upward(3) - Invalid filter: masterduelmeta.com##:xpath(//*[contains(text(),"adblock")]):upward(3) - Entity-based filter not supported: .adunitContainer:upward(3) - Entity-based filter not supported: table:has-text(VPN) - Entity-based filter not supported: #download_link:style(display: block !important;) - Invalid filter: financerites.*##p:has-text([ad_) - Entity-based filter not supported: h4:has-text(Ads) - Entity-based filter not supported: [style]:has-text(PREMIUM) - Invalid filter: wp.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: money.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: o2.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: parenting.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: pudelek.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: autokult.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: gadzetomania.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: fotoblogia.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: komorkomania.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: polygamia.pl##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: open.fm##:xpath('//*[string-length(@href) > 1600]') - Invalid filter: wp.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: money.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: o2.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: parenting.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: pudelek.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: autokult.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: gadzetomania.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: fotoblogia.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: komorkomania.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: polygamia.pl##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: open.fm##:xpath(//*[string-length(@href) > 1600]) - Invalid filter: haveibeenpwned.com##.actionsBar:-abp-has(.why1Password) - Invalid filter: haveibeenpwned.com##.bodyGradient>:-abp-has(.why1Password) - Invalid filter: pornhub.com##:-abp-properties(height: 300px; width: 315px;) - Invalid filter: pornhub.com##:-abp-properties(float: right; margin-top: 30px; width: 50%;) - Invalid filter: youporn.com##:-abp-properties(float: right; margin-top: 30px; width: 50%;) - Invalid filter: redtube.com##:-abp-properties(*data:image*) - Invalid filter: tube8.com##:-abp-properties(*data:image*) - Invalid filter: tube8.es##:-abp-properties(*data:image*) - Invalid filter: tube8.fr##:-abp-properties(*data:image*) - Invalid filter: xvideos.com##:-abp-properties(*data:image*) - Invalid filter: youjizz.com##:-abp-properties(*data:image*) - Invalid filter: youporn.com##:-abp-properties(*data:image*) - Invalid filter: youporngay.com##:-abp-properties(*data:image*) - Invalid filter: redtube.com##:-abp-properties(base64) - Invalid filter: tube8.com##:-abp-properties(base64) - Invalid filter: tube8.es##:-abp-properties(base64) - Invalid filter: tube8.fr##:-abp-properties(base64) - Invalid filter: xvideos.com##:-abp-properties(base64) - Invalid filter: youjizz.com##:-abp-properties(base64) - Invalid filter: youporn.com##:-abp-properties(base64) - Invalid filter: youporngay.com##:-abp-properties(base64) - Invalid filter: redtube.com##:-abp-properties(data:) - Invalid filter: tube8.com##:-abp-properties(data:) - Invalid filter: tube8.es##:-abp-properties(data:) - Invalid filter: tube8.fr##:-abp-properties(data:) - Invalid filter: xvideos.com##:-abp-properties(data:) - Invalid filter: youjizz.com##:-abp-properties(data:) - Invalid filter: youporn.com##:-abp-properties(data:) - Invalid filter: youporngay.com##:-abp-properties(data:) - Invalid filter: redtube.com##:-abp-properties(image/) - Invalid filter: tube8.com##:-abp-properties(image/) - Invalid filter: tube8.es##:-abp-properties(image/) - Invalid filter: tube8.fr##:-abp-properties(image/) - Invalid filter: xvideos.com##:-abp-properties(image/) - Invalid filter: youjizz.com##:-abp-properties(image/) - Invalid filter: youporn.com##:-abp-properties(image/) - Invalid filter: youporngay.com##:-abp-properties(image/) -CSS-generic: 16592 plain CSS selectors -CSS-specific domain-based: 8192 distinct filters - Combined into 5098 distinct entries -CSS-specific entity-based: 630 distinct filters - Combined into 332 distinct entries -CSS-specific injectable files: 21 - 0m32sq4, 14hqqb4, 1i19tpc, 1hpucno, 0o1ss5o, 0ersnbc, 0dohb2o, 1nujg7c, 0h8tbk4, 1eqq8lg, 047ud3s, 17k3emg, 19oh6ek, 0fm0ue4, 10th3qs, 1an4e88, 0p3j5kk, 04m1gc4, 00hu8d4, 1blq3us, default -Declarative-related distinct filters: 269 distinct combined selectors -Procedural-related distinct filters: 365 distinct combined selectors -Discarded unsupported scriptlet filter: +js(aost, document.body.appendChild) -Discarded unsupported scriptlet filter: +js(aost, Math, onerror) -Discarded unsupported scriptlet filter: +js(aost, Math.random, injectedScript) -Discarded unsupported scriptlet filter: +js(aost, Math.random, /injectedScript.*inlineScript/) -Discarded unsupported scriptlet filter: +js(aost, Math.random, /(?=.*onerror)(?=^(?!.*(https)))/) -Discarded unsupported scriptlet filter: +js(nobab) -Discarded unsupported scriptlet filter: +js(noeval) -Discarded unsupported scriptlet filter: +js(golem.de) -Discarded unsupported scriptlet filter: +js(aost, open, setPopUnder) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, _0x) -Discarded unsupported scriptlet filter: +js(nowebrtc) -Discarded unsupported scriptlet filter: +js(nano-stb, , 10000) -Discarded unsupported scriptlet filter: +js(nofab) -Discarded unsupported scriptlet filter: +js(popads.net) -Discarded unsupported scriptlet filter: +js(nano-stb, _0x, *) -Discarded unsupported scriptlet filter: +js(nano-sib) -Discarded unsupported scriptlet filter: +js(cookie-remover, video_view_count) -Discarded unsupported scriptlet filter: +js(ra, style, #over) -Discarded unsupported scriptlet filter: +js(ra, data-ad-img|data-ad-target, , stay) -Discarded unsupported scriptlet filter: +js(aost, String.prototype.charCodeAt, ai_) -Discarded unsupported scriptlet filter: +js(ra, checked, input#chkIsAdd) -Discarded unsupported scriptlet filter: +js(aost, document.querySelectorAll, /onload inlineScript|onload https/) -Discarded unsupported scriptlet filter: +js(popads-dummy) -Discarded unsupported scriptlet filter: +js(ra, checked, #addon) -Discarded unsupported scriptlet filter: +js(nano-stb, tick()) -Discarded unsupported scriptlet filter: +js(nano-stb, redirect, 4000) -Discarded unsupported scriptlet filter: +js(disable-newtab-links) -Discarded unsupported scriptlet filter: +js(aost, onload, inlineScript) -Discarded unsupported scriptlet filter: +js(ra, onclick) -Discarded unsupported scriptlet filter: +js(nano-sib, , 1200, 0) -Discarded unsupported scriptlet filter: +js(adfly-defuser) -Discarded unsupported scriptlet filter: +js(ra, href|target, a[href="https://imgprime.com/view.php"][target="_blank"], complete) -Discarded unsupported scriptlet filter: +js(nano-stb) -Discarded unsupported scriptlet filter: +js(ra, href, a[href="https://vpn-choice.com"]) -Discarded unsupported scriptlet filter: +js(noeval-if, replace) -Discarded unsupported scriptlet filter: +js(nano-stb, timeUpdater, , 0) -Discarded unsupported scriptlet filter: +js(nano-sib, myTimer, 1500) -Discarded unsupported scriptlet filter: +js(nano-sib, countdown, 2000) -Discarded unsupported scriptlet filter: +js(noeval-if, ExoLoader) -Discarded unsupported scriptlet filter: +js(ra, src, iframe#claimAd) -Discarded unsupported scriptlet filter: +js(nano-sib, downloadTimer) -Discarded unsupported scriptlet filter: +js(aost, Math.random, stackDepth:4) -Discarded unsupported scriptlet filter: +js(aost, Math.random, inlineScript) -Discarded unsupported scriptlet filter: +js(ra, href|target, a[href^="https://tm-offers.gamingadult.com/"]) -Discarded unsupported scriptlet filter: +js(aost, Math, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-sib, , , 0) -Discarded unsupported scriptlet filter: +js(nano-sib, counter, 2000) -Discarded unsupported scriptlet filter: +js(ra, disabled, input) -Discarded unsupported scriptlet filter: +js(nano-sib, , 1800) -Discarded unsupported scriptlet filter: +js(ra, srcdoc, iframe) -Discarded unsupported scriptlet filter: +js(aost, Math, /(?=^(?!.*(api|jquery|inlineScript|form|Progress)))/) -Discarded unsupported scriptlet filter: +js(ra, onclick, button[name="imgContinue"][onclick]) -Discarded unsupported scriptlet filter: +js(ra, target, #continuetoimage > [href]) -Discarded unsupported scriptlet filter: +js(ra, href|target, #continuetoimage > [href][onclick]\, #overlayera > #ajax_load_indicator > #page_effect > [href][onclick]) -Discarded unsupported scriptlet filter: +js(ra, target) -Discarded unsupported scriptlet filter: +js(ra, href, [href*="ccbill"]) -Discarded unsupported scriptlet filter: +js(aost, Math.round, inlineScript) -Discarded unsupported scriptlet filter: +js(rc, hide, .button-checkbox) -Discarded unsupported scriptlet filter: +js(rc, btn-disable, button) -Discarded unsupported scriptlet filter: +js(ra, disabled, button) -Discarded unsupported scriptlet filter: +js(nano-sib, time) -Discarded unsupported scriptlet filter: +js(nano-sib, time, 2500) -Discarded unsupported scriptlet filter: +js(nano-stb, , 1400) -Discarded unsupported scriptlet filter: +js(nano-stb, run) -Discarded unsupported scriptlet filter: +js(nano-stb, , ,0) -Discarded unsupported scriptlet filter: +js(ra, href, #clickfakeplayer) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick^="window.open"]) -Discarded unsupported scriptlet filter: +js(nano-stb, tick) -Discarded unsupported scriptlet filter: +js(nano-stb, "#proceed", 9000) -Discarded unsupported scriptlet filter: +js(ra, onclick, input) -Discarded unsupported scriptlet filter: +js(ra, onclick, button, stay) -Discarded unsupported scriptlet filter: +js(nano-sib, clearInterval, *) -Discarded unsupported scriptlet filter: +js(nano-stb, , , 0.02) -Discarded unsupported scriptlet filter: +js(nano-sib, seconds) -Discarded unsupported scriptlet filter: +js(nano-sib, , ,0.02) -Discarded unsupported scriptlet filter: +js(nano-sib, inner) -Discarded unsupported scriptlet filter: +js(nano-sib, circle_animation) -Discarded unsupported scriptlet filter: +js(nano-stb, CountBack, 990) -Discarded unsupported scriptlet filter: +js(ra, disabled, button[id="invisibleCaptchaShortlink"]) -Discarded unsupported scriptlet filter: +js(ra, onmouseover|onclick|onmouseout, .save-btn.pull-right) -Discarded unsupported scriptlet filter: +js(nano-sib, timer, 1000, 0.6) -Discarded unsupported scriptlet filter: +js(aost, document.getElementById, onLoadEvent) -Discarded unsupported scriptlet filter: +js(refresh-defuser) -Discarded unsupported scriptlet filter: +js(aost, absda) -Discarded unsupported scriptlet filter: +js(ra, onclick, , stay) -Discarded unsupported scriptlet filter: +js(aost, Object, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-stb, , ,0.02) -Discarded unsupported scriptlet filter: +js(noeval-if, tmohentai) -Discarded unsupported scriptlet filter: +js(cookie-remover, ref_cookie) -Discarded unsupported scriptlet filter: +js(nano-stb, seconds) -Discarded unsupported scriptlet filter: +js(aost, Object, mark) -Discarded unsupported scriptlet filter: +js(nano-sib, countdown) -Discarded unsupported scriptlet filter: +js(nano-sib, web_counter) -Discarded unsupported scriptlet filter: +js(nano-sib, video_counter) -Discarded unsupported scriptlet filter: +js(nano-stb, notification_state, 12000) -Discarded unsupported scriptlet filter: +js(ra, oncontextmenu) -Discarded unsupported scriptlet filter: +js(ra, class, div.intAdX) -Discarded unsupported scriptlet filter: +js(ra, class, div[class^="img"][class$="ad"]) -Discarded unsupported scriptlet filter: +js(alert-buster) -Discarded unsupported scriptlet filter: +js(nano-sib,/SplashScreen|BannerAd/) -Discarded unsupported scriptlet filter: +js(nano-stb,/SplashScreen|BannerAd/) -Discarded unsupported scriptlet filter: +js(nano-sib, i--) -Discarded unsupported scriptlet filter: +js(nano-sib, , *, 0) -Discarded unsupported scriptlet filter: +js(ra, data-ff-code) -Discarded unsupported scriptlet filter: +js(aost, document.addEventListener, blocker) -Discarded unsupported scriptlet filter: +js(aost, String.prototype.charCodeAt, $) -Discarded unsupported scriptlet filter: +js(ra, style, ins, complete) -Discarded unsupported scriptlet filter: +js(nano-sib, curAd) -Discarded unsupported scriptlet filter: +js(noeval-if, debugger) -Discarded unsupported scriptlet filter: +js(nano-sib, js-btn-skip, 1000) -Discarded unsupported scriptlet filter: +js(nano-sib, clearInterval) -Discarded unsupported scriptlet filter: +js(nano-stb, startDownload, 8000) -Discarded unsupported scriptlet filter: +js(ra, href, .link) -Discarded unsupported scriptlet filter: +js(ra, href, .fake_player > a[href]) -Discarded unsupported scriptlet filter: +js(aost, console.log, stackDepth:2) -Discarded unsupported scriptlet filter: +js(aost, String.prototype.charCodeAt, https) -Discarded unsupported scriptlet filter: +js(ra, target, .clickbutton) -Discarded unsupported scriptlet filter: +js(noeval-if, fab) -Discarded unsupported scriptlet filter: +js(ra, onclick, .btn-success.get-link, stay) -Discarded unsupported scriptlet filter: +js(ra, disabled, .btn-primary) -Discarded unsupported scriptlet filter: +js(nano-stb, /.?/, , 0.02) -Discarded unsupported scriptlet filter: +js(ra, oncontextmenu, body) -Discarded unsupported scriptlet filter: +js(aost, atob, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-sib, timer) -Discarded unsupported scriptlet filter: +js(aost, encodeURIComponent, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-stb, , , 0) -Discarded unsupported scriptlet filter: +js(nano-stb, , 10000, 0) -Discarded unsupported scriptlet filter: +js(nano-sib, gotolink) -Discarded unsupported scriptlet filter: +js(rc, hidden, button) -Discarded unsupported scriptlet filter: +js(ra, data-ppcnt_ads, main[onclick]) -Discarded unsupported scriptlet filter: +js(ra, onClick) -Discarded unsupported scriptlet filter: +js(nano-sib, show_download_links) -Discarded unsupported scriptlet filter: +js(nano-stb, downloadbtn) -Discarded unsupported scriptlet filter: +js(nano-sib, , 800) -Discarded unsupported scriptlet filter: +js(nano-sib, , ,0) -Discarded unsupported scriptlet filter: +js(nano-stb, counter) -Discarded unsupported scriptlet filter: +js(rc, twig-body) -Discarded unsupported scriptlet filter: +js(ra, href, [rel^="noopener"]) -Discarded unsupported scriptlet filter: +js(aost, $, /(?=^(?!.*(https)))/) -Discarded unsupported scriptlet filter: +js(noeval-if, popUnderStage) -Discarded unsupported scriptlet filter: +js(ra, data-item, a[href='']) -Discarded unsupported scriptlet filter: +js(ra, href, a[href][target="_blank"]) -Discarded unsupported scriptlet filter: +js(nano-sib, counter, *) -Discarded unsupported scriptlet filter: +js(aost, Object.assign, bidsBackHandler) -Discarded unsupported scriptlet filter: +js(nano-sib, countDown) -Discarded unsupported scriptlet filter: +js(aost, Math, showModal) -Discarded unsupported scriptlet filter: +js(nano-sib, runDownload) -Discarded unsupported scriptlet filter: +js(aost, EventTarget.prototype.addEventListener, stackDepth:3) -Discarded unsupported scriptlet filter: +js(ra, data-ppcnt_ads|onclick, #main) -Discarded unsupported scriptlet filter: +js(noeval-if, fab_alert) -Discarded unsupported scriptlet filter: +js(ra, href, a[href*="/ads.php"][target="_blank"]) -Discarded unsupported scriptlet filter: +js(nano-sib, , 100, 0) -Discarded unsupported scriptlet filter: +js(cookie-remover, /^/) -Discarded unsupported scriptlet filter: +js(nano-stb, readyToVote, 12000) -Discarded unsupported scriptlet filter: +js(nano-sib, timer, 1500) -Discarded unsupported scriptlet filter: +js(ra, onclick, a[href^="magnet:"][onclick]) -Discarded unsupported scriptlet filter: +js(norafif, getElementById) -Discarded unsupported scriptlet filter: +js(nano-sib, , 1500) -Discarded unsupported scriptlet filter: +js(ra, target, #SafelinkGenerate) -Discarded unsupported scriptlet filter: +js(nano-sib, , , 0.3) -Discarded unsupported scriptlet filter: +js(nano-stb, , 7000, 0) -Discarded unsupported scriptlet filter: +js(nano-sib, sec--) -Discarded unsupported scriptlet filter: +js(nano-stb, timer--) -Discarded unsupported scriptlet filter: +js(ra, onclick, a[href][onclick^="getFullStory"]) -Discarded unsupported scriptlet filter: +js(nano-sib, #timer) -Discarded unsupported scriptlet filter: +js(noeval-if, adsbygoogle) -Discarded unsupported scriptlet filter: +js(nano-sib, timer, 1100) -Discarded unsupported scriptlet filter: +js(ra, onclick, .player > div[onclick]) -Discarded unsupported scriptlet filter: +js(aost, Math, onreadystatechange) -Discarded unsupported scriptlet filter: +js(aost, Math.random, /\st\.[a-zA-Z]*\s/) -Discarded unsupported scriptlet filter: +js(aost, Object, /(?=^(?!.*(https)))/) -Discarded unsupported scriptlet filter: +js(aost, Object, webpack) -Discarded unsupported scriptlet filter: +js(aost, Math.random, /\st\.[a-zA-Z]*\sinlineScript/) -Discarded unsupported scriptlet filter: +js(aost, Object, /(?=^(?!.*(https)))/) -Discarded unsupported scriptlet filter: +js(aost, XMLHttpRequest, rocket) -Discarded unsupported scriptlet filter: +js(ra, onclick, body) -Discarded unsupported scriptlet filter: +js(ra, onclick, .previewhd > a) -Discarded unsupported scriptlet filter: +js(aost, Object.prototype.hasOwnProperty, /(?=^(?!.*(Array|Object|facebook|google)))/) -Discarded unsupported scriptlet filter: +js(cookie-remover, PageCount) -Discarded unsupported scriptlet filter: +js(norafif, style.opacity) -Discarded unsupported scriptlet filter: +js(aost, Math.random, ) -Discarded unsupported scriptlet filter: +js(ra, onclick, a.thumb.mvi-cover) -Discarded unsupported scriptlet filter: +js(aost, jQuery, ai_adb) -Discarded unsupported scriptlet filter: +js(aost, JSON.parse, computed) -Discarded unsupported scriptlet filter: +js(nano-stb, timer) -Discarded unsupported scriptlet filter: +js(aost, XMLHttpRequest, onreadystatechange) -Discarded unsupported scriptlet filter: +js(ra, href|target, a[href^="https://tipstertube.com/bookmaker/"][target="_blank"], stay) -Discarded unsupported scriptlet filter: +js(nano-sib, time, , 0) -Discarded unsupported scriptlet filter: +js(nano-stb, countDown) -Discarded unsupported scriptlet filter: +js(aost, localStorage, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-sib, counter) -Discarded unsupported scriptlet filter: +js(nano-stb, countdown, 10000) -Discarded unsupported scriptlet filter: +js(aost, _pop, _init) -Discarded unsupported scriptlet filter: +js(ra, href|target|data-ipshover-target|data-ipshover|data-autolink|rel, a[href^="https://thumpertalk.com/link/click/"][target="_blank"]) -Discarded unsupported scriptlet filter: +js(nano-sib, secs) -Discarded unsupported scriptlet filter: +js(nano-sib, download) -Discarded unsupported scriptlet filter: +js(aost, Math.floor, /computed|\$\./) -Discarded unsupported scriptlet filter: +js(aost, Math.floor, ) -Discarded unsupported scriptlet filter: +js(aost, Math.floor, randStr) -Discarded unsupported scriptlet filter: +js(nano-sib, _0x) -Discarded unsupported scriptlet filter: +js(aost, Math.round, onload) -Discarded unsupported scriptlet filter: +js(aost, document.getElementById, inlineScript) -Discarded unsupported scriptlet filter: +js(rc, hidden, video) -Discarded unsupported scriptlet filter: +js(ra, href, #continue) -Discarded unsupported scriptlet filter: +js(noeval-if, _0x) -Discarded unsupported scriptlet filter: +js(nano-sib, timer.remove) -Discarded unsupported scriptlet filter: +js(noeval-if, deblocker) -Discarded unsupported scriptlet filter: +js(nano-sib, downloadButton) -Discarded unsupported scriptlet filter: +js(aost, $, :1:1) -Discarded unsupported scriptlet filter: +js(nano-sib, timePassed) -Discarded unsupported scriptlet filter: +js(nano-sib, wpsafe-time) -Discarded unsupported scriptlet filter: +js(rc, get-link, .ybtn.get-link[target="_blank"], stay) -Discarded unsupported scriptlet filter: +js(nano-sib, timeleft) -Discarded unsupported scriptlet filter: +js(ra, disabled, input[id="button1"][class="btn btn-primary"][disabled]) -Discarded unsupported scriptlet filter: +js(nano-stb, .fadeIn(), 3000) -Discarded unsupported scriptlet filter: +js(ra, style, div[style="display: none;"]) -Discarded unsupported scriptlet filter: +js(ra, type, [src*="SPOT"], asap stay) -Discarded unsupported scriptlet filter: +js(rc, get-link, .btn-success.get-link[target="_blank"], stay) -Discarded unsupported scriptlet filter: +js(nano-sib, counter--) -Discarded unsupported scriptlet filter: +js(nano-sib, (i-1)) -Discarded unsupported scriptlet filter: +js(ra, class, div#player) -Discarded unsupported scriptlet filter: +js(ra, href|target, a[onclick^="getActionContent"]) -Discarded unsupported scriptlet filter: +js(nano-sib, freeRemind) -Discarded unsupported scriptlet filter: +js(nano-sib, skipOptions) -Discarded unsupported scriptlet filter: +js(ra, onclick, #invisibleCaptchaShortlink) -Discarded unsupported scriptlet filter: +js(ra, onclick, a.btn-success.get-link) -Discarded unsupported scriptlet filter: +js(nano-sib, countDown, 1150, 0.5) -Discarded unsupported scriptlet filter: +js(nano-sib, btn-success) -Discarded unsupported scriptlet filter: +js(aost, Math, ai_) -Discarded unsupported scriptlet filter: +js(nano-stb, load_ads) -Discarded unsupported scriptlet filter: +js(rc, has-sidebar-adz|DashboardPage-inner, div[class^="DashboardPage-inner"], stay) -Discarded unsupported scriptlet filter: +js(rc, hasStickyAd, div.hasStickyAd[class^="SetPage"], stay) -Discarded unsupported scriptlet filter: +js(rc, has-adz, div.has-adz, stay) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, make_rand_div) -Discarded unsupported scriptlet filter: +js(nano-sib, timercounter) -Discarded unsupported scriptlet filter: +js(nano-sib, count, *) -Discarded unsupported scriptlet filter: +js(rc, rekl_test) -Discarded unsupported scriptlet filter: +js(aost, _pop) -Discarded unsupported scriptlet filter: +js(rc, cnx-ad-container|cnx-ad-bid-slot) -Discarded unsupported scriptlet filter: +js(aost, localStorage, stackDepth:1) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick^="pop"]) -Discarded unsupported scriptlet filter: +js(ra, href|target|data-onclick, a[id="dl"][data-onclick^="window.open"], stay) -Discarded unsupported scriptlet filter: +js(aost, foreverJQ, /document.createElement|stackDepth:2/) -Discarded unsupported scriptlet filter: +js(nano-stb, _0x, 15000) -Discarded unsupported scriptlet filter: +js(nano-stb, location.href, 8000) -Discarded unsupported scriptlet filter: +js(aost, Math, ) -Discarded unsupported scriptlet filter: +js(aost, Math.random, computed) -Discarded unsupported scriptlet filter: +js(aost, $, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-sib, sec) -Discarded unsupported scriptlet filter: +js(aost, Math, https) -Discarded unsupported scriptlet filter: +js(rc, disabled, #skip-btn) -Discarded unsupported scriptlet filter: +js(aost, Element.prototype.matches, litespeed) -Discarded unsupported scriptlet filter: +js(aost, HTMLSelectElement, Object) -Discarded unsupported scriptlet filter: +js(nano-stb, aTagChange, 12000) -Discarded unsupported scriptlet filter: +js(aost, fetch, inlineScript) -Discarded unsupported scriptlet filter: +js(ra, onclick, a[onclick^="setTimeout"]) -Discarded unsupported scriptlet filter: +js(rc, vjs-hidden, .vjs-control-bar, stay) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick*="open"]) -Discarded unsupported scriptlet filter: +js(nano-sib, game) -Discarded unsupported scriptlet filter: +js(ra, href, .mvi-cover) -Discarded unsupported scriptlet filter: +js(aost, console, onload) -Discarded unsupported scriptlet filter: +js(nano-sib, hard_work) -Discarded unsupported scriptlet filter: +js(ra, href, .t-out-span [href*="utm_source"], stay) -Discarded unsupported scriptlet filter: +js(ra, src, .t-out-span [src*=".gif"], stay) -Discarded unsupported scriptlet filter: +js(nano-sib, counter, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-sib, , , 0.02) -Discarded unsupported scriptlet filter: +js(rc, hidden, .panel-body > .text-center > button) -Discarded unsupported scriptlet filter: +js(ra, disabled, .panel-body > .text-center > button) -Discarded unsupported scriptlet filter: +js(ra, class, [data-name*="|"], stay) -Discarded unsupported scriptlet filter: +js(nano-stb, isScrexed, 5000) -Discarded unsupported scriptlet filter: +js(nano-sib, timePassed, 1300) -Discarded unsupported scriptlet filter: +js(nano-stb, st2) -Discarded unsupported scriptlet filter: +js(nano-stb, subentry, 4000) -Discarded unsupported scriptlet filter: +js(nano-sib, timer, 1800) -Discarded unsupported scriptlet filter: +js(nano-sib, download_delay) -Discarded unsupported scriptlet filter: +js(aost, document.getElementById, disable) -Discarded unsupported scriptlet filter: +js(nano-stb, /__ez|window.location.href/, *) -Discarded unsupported scriptlet filter: +js(nano-sib, countc) -Discarded unsupported scriptlet filter: +js(aost, XMLHttpRequest, injectedScript) -Discarded unsupported scriptlet filter: +js(ra, href, [href="/"]) -Discarded unsupported scriptlet filter: +js(aost, Math, _0x) -Discarded unsupported scriptlet filter: +js(window-close-if, /protect?) -Discarded unsupported scriptlet filter: +js(nano-sib, distance) -Discarded unsupported scriptlet filter: +js(nano-stb, countdown) -Discarded unsupported scriptlet filter: +js(nano-stb, location.href, 18000) -Discarded unsupported scriptlet filter: +js(ra, href, [onclick], stay) -Discarded unsupported scriptlet filter: +js(nano-sib, timeLeft) -Discarded unsupported scriptlet filter: +js(nano-sib, count) -Discarded unsupported scriptlet filter: +js(ra, disabled, #downloadbtn) -Discarded unsupported scriptlet filter: +js(ra, onmousedown, .ob-dynamic-rec-link, stay) -Discarded unsupported scriptlet filter: +js(aost, onload, /app.js) -Discarded unsupported scriptlet filter: +js(ra, disabled, a#redirect-btn) -Discarded unsupported scriptlet filter: +js(rc, disabled, a#redirect-btn) -Discarded unsupported scriptlet filter: +js(nano-stb, show, 4000) -Discarded unsupported scriptlet filter: +js(ra, onclick, form > button) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, create_ad) -Discarded unsupported scriptlet filter: +js(nano-sib, contador) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, /^(?!.*(jquery|setDocument|inlineScript|gstatic|google|root|cgi).*)/) -Discarded unsupported scriptlet filter: +js(nano-sib, display) -Discarded unsupported scriptlet filter: +js(nano-stb, download_loading, *) -Discarded unsupported scriptlet filter: +js(nano-sib, second) -Discarded unsupported scriptlet filter: +js(nano-stb, submit, 5000) -Discarded unsupported scriptlet filter: +js(ra, href, .unlock-step-link) -Discarded unsupported scriptlet filter: +js(nano-stb, fa-unlock, 3000) -Discarded unsupported scriptlet filter: +js(ra, href, [href*="discord"]) -Discarded unsupported scriptlet filter: +js(cookie-remover) -Discarded unsupported scriptlet filter: +js(nano-sib, updatePercentage, 100, 0.02) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, /(?=^(?!.*(https)))/) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, /(?=^(?!.*(http)))/) -Discarded unsupported scriptlet filter: +js(aost, String.prototype.charCodeAt, /(?=^(?!.*(https|Object)))/) -Discarded unsupported scriptlet filter: +js(nano-sib, current()) -Discarded unsupported scriptlet filter: +js(nano-sib, l, , 0) -Discarded unsupported scriptlet filter: +js(nano-stb, setinteracted, 2000) -Discarded unsupported scriptlet filter: +js(ra, href, .MediaStep, stay) -Discarded unsupported scriptlet filter: +js(nano-stb, waiting, 5000) -Discarded unsupported scriptlet filter: +js(nano-stb, finalButton, *) -Discarded unsupported scriptlet filter: +js(nano-stb, modalTimer, 1500) -Discarded unsupported scriptlet filter: +js(ra, disabled, button#myClickButton) -Discarded unsupported scriptlet filter: +js(ra, style, button#finalButton) -Discarded unsupported scriptlet filter: +js(nano-stb, [native code]) -Discarded unsupported scriptlet filter: +js(nano-stb, recurseMyFunction) -Discarded unsupported scriptlet filter: +js(nano-stb, myCount) -Discarded unsupported scriptlet filter: +js(ra, onclick, .dialogBtnClick) -Discarded unsupported scriptlet filter: +js(ra, onclick, #localpp) -Discarded unsupported scriptlet filter: +js(nano-stb, downloadBtn, *) -Discarded unsupported scriptlet filter: +js(aost, Date.now, afScript) -Discarded unsupported scriptlet filter: +js(ra, onclick, .btn) -Discarded unsupported scriptlet filter: +js(nano-sib, /verify_text|isCompleted/, *) -Discarded unsupported scriptlet filter: +js(nano-stb, document[_0x, *) -Discarded unsupported scriptlet filter: +js(xml-prune, Period[id*="-roll-"][id*="-ad-"], , pubads.g.doubleclick.net/ondemand) -Discarded unsupported scriptlet filter: +js(nano-stb, , 3000) -Discarded unsupported scriptlet filter: +js(window-close-if, /link-) -Discarded unsupported scriptlet filter: +js(window-close-if, /telephone-service) -Discarded unsupported scriptlet filter: +js(window-close-if, /^/) -Discarded unsupported scriptlet filter: +js(aost, document.querySelectorAll, /(?=^(?!.*(https|Parse|Image)))/) -Discarded unsupported scriptlet filter: +js(nano-sib, cnDownloadBtn, 1200, 0.02) -Discarded unsupported scriptlet filter: +js(nano-sib, _0x, , 0.02) -Discarded unsupported scriptlet filter: +js(ra, href, [href="/bestporn.html"]) -Discarded unsupported scriptlet filter: +js(ra, disabled, button#getlink) -Discarded unsupported scriptlet filter: +js(ra, disabled, button#gotolink) -Discarded unsupported scriptlet filter: +js(ra, disabled, .downloadbtn) -Discarded unsupported scriptlet filter: +js(ra, onclick, #direct_link > a[onclick]) -Discarded unsupported scriptlet filter: +js(ra, disabled, .get-link) -Discarded unsupported scriptlet filter: +js(rc, disabled, .get-link) -Discarded unsupported scriptlet filter: +js(nano-stb, shortenbl) -Discarded unsupported scriptlet filter: +js(nano-stb, enbll) -Discarded unsupported scriptlet filter: +js(ra, href, [onclick^="pop"]) -Discarded unsupported scriptlet filter: +js(aost, btoa, /https|stackDepth:3/) -Discarded unsupported scriptlet filter: +js(rc, td-ad-background-link) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick^="track"]) -Discarded unsupported scriptlet filter: +js(ra, onmousedown, [onmousedown^="return enc(this,'https://track.rediff.com"]) -Discarded unsupported scriptlet filter: +js(cookie-remover, realm.cookiesAndJavascript) -Discarded unsupported scriptlet filter: +js(aost, btoa, send) -Discarded unsupported scriptlet filter: +js(aost, Math.floor, injectedScript) -Discarded unsupported scriptlet filter: +js(aost, document.cookie) -Discarded unsupported scriptlet filter: +js(ra, data-outbound-url, .outbound) -Discarded unsupported scriptlet filter: +js(nano-stb, /outboundLink/) -Discarded unsupported scriptlet filter: +js(ra, class|style, div[id^="los40_gpt"]) -Discarded unsupported scriptlet filter: +js(ra, onclick, a[href][onclick^="trackOutboundLink"]) -Discarded unsupported scriptlet filter: +js(fingerprint2) -Discarded unsupported scriptlet filter: +js(ra, data-woman-ex, a[href][data-woman-ex]) -Discarded unsupported scriptlet filter: +js(ra, data-trm-action|data-trm-category|data-trm-label, .trm_event, stay) -Discarded unsupported scriptlet filter: +js(aost, History, /(^(?!.*(Function|HTMLDocument).*))/) -Discarded unsupported scriptlet filter: +js(nano-sib, skipAdSeconds, , 0.02) -Discarded unsupported scriptlet filter: +js(ra, class|id, .breadcrumb + div, asap) -Discarded unsupported scriptlet filter: +js(ra, style|height, amp-img) -Discarded unsupported scriptlet filter: +js(aost, Object, /gdpr.*inlineScript/) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 2003 -Scriptlet-related injectable files: 11 - default.json-prune.js, default.set-constant.js, default.no-settimeout-if.js, default.abort-on-property-read.js, default.no-addeventlistener-if.js, default.no-setinterval-if.js, default.no-fetch-if.js, default.abort-current-script.js, default.no-windowopen-if.js, default.abort-on-property-write.js, default.no-xhr-if.js -Discarded unsupported scriptlet filter: +js(nobab) -Discarded unsupported scriptlet filter: +js(noeval) -Discarded unsupported scriptlet filter: +js(nosiif, nrWrapper) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, _0x) -Discarded unsupported scriptlet filter: +js(nowebrtc) -Discarded unsupported scriptlet filter: +js(nofab) -Discarded unsupported scriptlet filter: +js(popads.net) -Discarded unsupported scriptlet filter: +js(nano-sib) -Discarded unsupported scriptlet filter: +js(cookie-remover, video_view_count) -Discarded unsupported scriptlet filter: +js(nosiif, visibility, 1000) -Discarded unsupported scriptlet filter: +js(nano-stb, grecaptcha.ready, *) -Discarded unsupported scriptlet filter: +js(nosiif, _0x) -Discarded unsupported scriptlet filter: +js(ra, data-ad-img|data-ad-target, , stay) -Discarded unsupported scriptlet filter: +js(aost, String.prototype.charCodeAt, ai_) -Discarded unsupported scriptlet filter: +js(ra, checked, input#chkIsAdd) -Discarded unsupported scriptlet filter: +js(nosiif, /devtools|0x/) -Discarded unsupported scriptlet filter: +js(nosiif, /0x|google|ecoded|==/) -Discarded unsupported scriptlet filter: +js(popads-dummy) -Discarded unsupported scriptlet filter: +js(disable-newtab-links) -Discarded unsupported scriptlet filter: +js(no-xhr-if, ads) -Discarded unsupported scriptlet filter: +js(ra, onclick) -Discarded unsupported scriptlet filter: +js(nano-stb) -Discarded unsupported scriptlet filter: +js(noeval-if, replace) -Discarded unsupported scriptlet filter: +js(ra, href, #opfk) -Discarded unsupported scriptlet filter: +js(aost, Math, inlineScript) -Discarded unsupported scriptlet filter: +js(nano-sib, , , 0) -Discarded unsupported scriptlet filter: +js(no-xhr-if, /^(?!.*(einthusan\.io|yahoo|rtnotif|ajax|quantcast|bugsnag))/) -Discarded unsupported scriptlet filter: +js(ra, onmousemove, button) -Discarded unsupported scriptlet filter: +js(ra, onclick, button[id][onclick*=".html"]) -Discarded unsupported scriptlet filter: +js(nano-stb, /.?/, 4000) -Discarded unsupported scriptlet filter: +js(noeval-if, ppu) -Discarded unsupported scriptlet filter: +js(json-prune, urls, urls.0) -Discarded unsupported scriptlet filter: +js(aost, String.fromCharCode, stackDepth:3) -Discarded unsupported scriptlet filter: +js(no-fetch-if, adsbygoogle) -Discarded unsupported scriptlet filter: +js(nano-stb, disabled) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, inlineScript) -Discarded unsupported scriptlet filter: +js(ra, href, #clickfakeplayer) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick^="window.open"]) -Discarded unsupported scriptlet filter: +js(nano-stb, tick) -Discarded unsupported scriptlet filter: +js(nano-sib, seconds) -Discarded unsupported scriptlet filter: +js(nano-sib, time.html, 1000) -Discarded unsupported scriptlet filter: +js(aost, absda) -Discarded unsupported scriptlet filter: +js(aost, Object, inlineScript) -Discarded unsupported scriptlet filter: +js(ra, type, input[value^="http"]) -Discarded unsupported scriptlet filter: +js(nano-stb, seconds) -Discarded unsupported scriptlet filter: +js(nosiif, /^/) -Discarded unsupported scriptlet filter: +js(json-prune, server) -Discarded unsupported scriptlet filter: +js(no-xhr-if, googlesyndication) -Discarded unsupported scriptlet filter: +js(nosiif, .submit) -Discarded unsupported scriptlet filter: +js(nano-sib, i--) -Discarded unsupported scriptlet filter: +js(nosiif, 0x) -Discarded unsupported scriptlet filter: +js(noeval-if, debugger) -Discarded unsupported scriptlet filter: +js(nosiif, visibility) -Discarded unsupported scriptlet filter: +js(ra, href, a#clickfakeplayer) -Discarded unsupported scriptlet filter: +js(ra, href, .fake_player > [href][target]) -Discarded unsupported scriptlet filter: +js(nano-sib, timer) -Discarded unsupported scriptlet filter: +js(no-fetch-if, googlesyndication) -Discarded unsupported scriptlet filter: +js(no-fetch-if, /adtrue\.com|eningspon\.com|freychang\.fun|orquideassp\.com|popunder/) -Discarded unsupported scriptlet filter: +js(no-xhr-if, /a-mo\.net|adnxs\.com|bidder\.criteo\.com|creativecdn\.com|e-planning\.net|quantumdex\.io/) -Discarded unsupported scriptlet filter: +js(nosiif, adblock) -Discarded unsupported scriptlet filter: +js(ra, target, #downloadvideo) -Discarded unsupported scriptlet filter: +js(nano-stb, counter) -Discarded unsupported scriptlet filter: +js(noeval-if, AdBlock) -Discarded unsupported scriptlet filter: +js(rc, preloader, .preloader) -Discarded unsupported scriptlet filter: +js(rc, placeholder-content, h5) -Discarded unsupported scriptlet filter: +js(aost, Math.random, t.pt) -Discarded unsupported scriptlet filter: +js(json-prune, clickAnywhere urls) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick*="window.open"]) -Discarded unsupported scriptlet filter: +js(ra, target|href, a[href^="//"]) -Discarded unsupported scriptlet filter: +js(aost, String.prototype.charCodeAt, _0x) -Discarded unsupported scriptlet filter: +js(json-prune, data.attributes.config.freewheel data.attributes.config.featureFlags.dPlayer) -Discarded unsupported scriptlet filter: +js(aost, Math.random, /\st\.[a-zA-Z]*\s/) -Discarded unsupported scriptlet filter: +js(aost, Object, /(?=^(?!.*(https)))/) -Discarded unsupported scriptlet filter: +js(aost, Math.random, /\st\.[a-zA-Z]*\sinlineScript/) -Discarded unsupported scriptlet filter: +js(aost, XMLHttpRequest, /inlineScript|stackDepth:1/) -Discarded unsupported scriptlet filter: +js(aost, XMLHttpRequest, inlineScript) -Discarded unsupported scriptlet filter: +js(aost, JSON.parse, computed) -Discarded unsupported scriptlet filter: +js(aost, localStorage, inlineScript) -Discarded unsupported scriptlet filter: +js(aost, Math.floor, ) -Discarded unsupported scriptlet filter: +js(ra, href, .button[href^="javascript"]) -Discarded unsupported scriptlet filter: +js(ra, href, a#clickfkplayer) -Discarded unsupported scriptlet filter: +js(ra, uk-sticky, header, stay) -Discarded unsupported scriptlet filter: +js(ra, style, body, stay) -Discarded unsupported scriptlet filter: +js(aost, document.createElement, /(?=^(?!.*(http)))/) -Discarded unsupported scriptlet filter: +js(nano-stb, downloadBtn, *) -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 7 - default.no-settimeout-if.js, default.no-addeventlistener-if.js, default.abort-on-property-read.js, default.abort-current-script.js, default.set-constant.js, default.no-windowopen-if.js, default.abort-on-property-write.js -============================ -Listset for 'alb-0': - Fetching remote https://raw.githubusercontent.com/AnXh3L0/blocklist/master/albanian-easylist-addition/Albania.txt -Input filter count: 34 - Accepted filter count: 31 - Rejected filter count: 0 -Output rule count: 28 - Plain good: 25 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 3 - Could not salvage rule with only entity-based domain= option: filma24.* - Could not salvage rule with only entity-based domain= option: www.filma24.* - Could not salvage rule with only entity-based domain= option: filma24.* -Rejected cosmetic filters: 4 - Invalid filter: gazetatema.net###content > div > a:has-text() - Invalid filter: lajmifundit.al##.td_block_template_1 > a:has-text() - Invalid filter: lajmifundit.al##.td_block_template_1 > center > a:has-text() - Entity-based filter not supported: div.col-8:style(width: 100% !important) -CSS-generic: 6 plain CSS selectors -CSS-specific domain-based: 226 distinct filters - Combined into 104 distinct entries -CSS-specific entity-based: 13 distinct filters - Combined into 2 distinct entries -CSS-specific injectable files: 2 - 1v508t4, alb-0 -Declarative-related distinct filters: 2 distinct combined selectors -Procedural-related distinct filters: 4 distinct combined selectors -============================ -Listset for 'bgr-0': - Fetching remote https://stanev.org/abp/adblock_bg.txt -Input filter count: 673 - Accepted filter count: 673 - Rejected filter count: 0 -Output rule count: 664 - Plain good: 664 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -CSS-generic: 3 plain CSS selectors -CSS-specific domain-based: 361 distinct filters - Combined into 185 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 0nj0u7c -============================ -Listset for 'chn-0': - Fetching remote https://filters.adtidy.org/extension/ublock/filters/224.txt -Input filter count: 18152 - Accepted filter count: 18104 - Rejected filter count: 0 -Output rule count: 6562 - Plain good: 6498 - Maybe good (regexes): 17 - redirect=: 36 - removeparams= (accepted/discarded): 0/0 - csp=: 6 - Unsupported: 5 - regexFilter is not RE2-compatible: ^(?!.*(bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com)).*$ - Unsupported modifier exception - Unsupported modifier exception - Invalid network filter in chn-0: @@||ad.alimama.com^$genericblock - Invalid network filter in chn-0: @@||cmechina.net^$genericblock -Rejected cosmetic filters: 3 - Invalid filter: theav.xyz##.q-body--prevent-scroll: { position: static !important; } - Invalid filter: 69xx.one##.q-body--prevent-scroll: { position: static !important; } - Invalid filter: theporn.cc##.q-body--prevent-scroll: { position: static !important; } -CSS-generic: 664 plain CSS selectors -CSS-specific domain-based: 6360 distinct filters - Combined into 2623 distinct entries -CSS-specific entity-based: 4 distinct filters - Combined into 2 distinct entries -CSS-specific injectable files: 12 - 10c4t9k, 1epmmac, 0dine18, 1nda2qo, 047b4k4, 1kh0c1s, 0uqr3ec, 0on9dh0, 179qh1c, 069n58c, 0g5sn8o, chn-0 -Declarative-related distinct filters: 50 distinct combined selectors -Procedural-related distinct filters: 90 distinct combined selectors -Discarded unsupported scriptlet filter: +js(abort-on-stack-trace, document.createElement, make_rand_div) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, adhtml, 10005) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, blockText, 1005) -Discarded unsupported scriptlet filter: +js(noeval-if, ADS_BLOCKED) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, _0x, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, adCountDown, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, .s--, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, video-ad-timeout, *, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, r--, , 0.02) -Discarded unsupported scriptlet filter: +js(remove-attr, onclick, a) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, CloseAd, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, /timerAdCountdown|_0x/, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, timerAdCountdown, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, timerAdCountdownCount, , 0.02) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 83 -Scriptlet-related injectable files: 10 - chn-0.set-constant.js, chn-0.no-fetch-if.js, chn-0.no-settimeout-if.js, chn-0.no-addeventlistener-if.js, chn-0.no-setinterval-if.js, chn-0.abort-on-property-read.js, chn-0.abort-current-script.js, chn-0.abort-on-property-write.js, chn-0.json-prune.js, chn-0.no-windowopen-if.js -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 1 - chn-0.abort-current-script.js -============================ -Listset for 'cze-0': - Fetching remote https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt - Fetching remote https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters_ublock.txt -Input filter count: 228 - Accepted filter count: 228 - Rejected filter count: 0 -Output rule count: 124 - Plain good: 117 - Maybe good (regexes): 0 - redirect=: 4 - removeparams= (accepted/discarded): 0/0 - csp=: 1 - Unsupported: 2 - Invalid network filter in cze-0: *$image,redirect-rule=1x1.gif,domain=seznamzpravy.cz|sport.cz|seznam.cz|sbazar.cz|firmy.cz|super.cz|garaz.cz|stream.cz - Invalid network filter in cze-0: *$xhr,redirect-rule=nooptext,domain=seznamzpravy.cz|sport.cz|seznam.cz|sbazar.cz|firmy.cz|super.cz|garaz.cz|stream.cz -Rejected cosmetic filters: 1 - Invalid filter: konzolista.cz##.v-card--link:-abp-has(.ad) -CSS-generic: 36 plain CSS selectors -CSS-specific domain-based: 225 distinct filters - Combined into 146 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 0d34j1c -Declarative-related distinct filters: 7 distinct combined selectors -Procedural-related distinct filters: 5 distinct combined selectors -Discarded unsupported scriptlet filter: +js(nofab) -Discarded unsupported scriptlet filter: +js(nobab) -Discarded unsupported scriptlet filter: +js(nano-sib, ntmt_retest_btn_countdown_do, 1000) -Discarded unsupported scriptlet filter: +js(nano-stb, vendor-load, 3000) -Discarded unsupported scriptlet filter: +js(ra, style, body) -Discarded unsupported scriptlet filter: +js(aost, $.cookie, inlineScript) -Discarded unsupported scriptlet filter: +js(cookie-remover, /^_?adb/) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 27 -Scriptlet-related injectable files: 6 - cze-0.abort-on-property-read.js, cze-0.abort-current-script.js, cze-0.set-constant.js, cze-0.abort-on-property-write.js, cze-0.no-addeventlistener-if.js, cze-0.no-setinterval-if.js -============================ -Listset for 'deu-0': - Fetching remote https://easylist.to/easylistgermany/easylistgermany.txt -Input filter count: 2210 - Accepted filter count: 2210 - Rejected filter count: 0 -Output rule count: 1704 - Plain good: 1700 - Maybe good (regexes): 3 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 1 - Invalid network filter in deu-0: @@||gofeminin.de^$genericblock -Rejected cosmetic filters: 2 - Invalid filter: golem.de##li[data-article-id]:-abp-has(h3:-abp-properties(ANZEIGE)) - Invalid filter: golem.de##li[data-article-id]:-abp-has(span.media__kicker:-abp-properties(ANZEIGE)) -CSS-generic: 351 plain CSS selectors -CSS-specific domain-based: 2070 distinct filters - Combined into 1205 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 5 - 0m96u24, 16h9va8, 16p5lko, 1gpa7kc, 1chdoqs -Procedural-related distinct filters: 53 distinct combined selectors -============================ -Listset for 'fin-0': - Fetching remote https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/master/Finland_adb.txt - Fetching remote https://raw.githubusercontent.com/finnish-easylist-addition/finnish-easylist-addition/master/Finland_adb_uBO_extras.txt -Input filter count: 179 - Accepted filter count: 179 - Rejected filter count: 0 -Output rule count: 157 - Plain good: 148 - Maybe good (regexes): 3 - redirect=: 3 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 3 - regexFilter is not RE2-compatible: telsu\.fi\/(?![^>]*\.\w{3}$).+ - regexFilter is not RE2-compatible: telsu\.fi\/(?![^>].*\.(jpg|png|svg|ico)$).+ - regexFilter is not RE2-compatible: telsu\.fi\/img\/(?!cloudcity|mindmax|navibg|prg|tvohjelmat) -Rejected cosmetic filters: 1 - Invalid filter: fin.afterdawn.com##.header:not(:matches-media((min-width: 750px))) + div[class] + div[class] .mobile-top-ad:not(+ .boxes):style(margin: -10px auto !important) -CSS-generic: 52 plain CSS selectors -CSS-specific domain-based: 988 distinct filters - Combined into 426 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 17u9qi4, 09be90g -Declarative-related distinct filters: 15 distinct combined selectors -Procedural-related distinct filters: 92 distinct combined selectors -Discarded unsupported scriptlet filter: +js(rc, st__hidden, #gamewrapper) -Discarded unsupported scriptlet filter: +js(rc, Profile__TopCard--advertisement, , stay) -Discarded unsupported scriptlet filter: +js(rc, SearchResultList--advertisement, , stay) -Discarded unsupported scriptlet filter: +js(rc, SearchResultList__Row--advertisement, , stay) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 4 -Scriptlet-related injectable files: 3 - fin-0.no-settimeout-if.js, fin-0.abort-current-script.js, fin-0.abort-on-property-read.js -============================ -Listset for 'fra-0': - Fetching remote https://filters.adtidy.org/extension/ublock/filters/16.txt -Input filter count: 21143 - Accepted filter count: 20582 - Rejected filter count: 546 -Output rule count: 6606 - Plain good: 6553 - Maybe good (regexes): 7 - redirect=: 29 - removeparams= (accepted/discarded): 0/0 - csp=: 6 - Unsupported: 11 - regexFilter is not RE2-compatible: ^https?:\/\/vitamiiin\.com\/(?!wp-content|uploads|plugins|themes)(.*) - regexFilter is not RE2-compatible: ^(?!.*(bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com)).*$ - Could not salvage rule with only entity-based domain= option: downdetector.* - Could not salvage rule with only entity-based domain= option: vidembed.* - Could not salvage rule with only entity-based domain= option: vidembed.* - Could not salvage rule with only entity-based domain= option: fmovies.* - Could not salvage rule with only entity-based domain= option: fmovies.* - Unsupported modifier exception - Unsupported modifier exception - Invalid network filter in fra-0: @@$webrtc,domain=stream4free.live - Invalid network filter in fra-0: $webrtc,domain=11anim.com|1337x.st|1337x.to|2ddl.ms|ajplugins.com|allitebooks.com|androidadult.com|animeid.tv|animekb.net|animeland.tv|animezone.pl|avametrie.fr|avgle.com|bindassbros.com|blizzboygames.net|bonstreams.net|catrumahminimalis.me|centrum-dramy.pl|cestpasbien.pro|chatytvgratis.net|cinemitas.com|cinestrenostv.tv|clik.pw|cmacapps.com|cocostreaming.com|crictime.com|crictime.is|daclips.com|datpiff.com|ddl.to|ddmix.net|ddownload.com|deltabit.co|deportesmax.info|descargas2020.com|djs.sk|dl-protect.info|dompl3.info|doodstream.co|doodstream.com|draculastream.org|drakula.top|dropapk.com|dropapk.to|dualpaste.net|earnwithshortlink.com|ebook-planete.org|ebookdz.com|fileone.tv|filmeserialeonline.org|filmtelecharger.net|flashx.net|flashx.tv|fluvore.com|free-telecharger.com|free-telecharger.net|free-telecharger.org|free-telecharger.xyz|freecardano.com|freenem.com|fullmatchesandshows.com|gamestorrent.co|ganol.ru|ganool.im|ganool123.com|gtaall.com|gum-gum-streaming.com|hdvid.online|healthoptimizer.net|heapfiles.com|hq-porns.com|ianimes.org|iegy.best|imagenesmy.com|imgazure.com|immunicity.st|istream2watch.com|ithepiratebay.com|javher.com|jheberg.net|jkanime.net|kinohabr.net|kinokrad.co|kinoprofi.org|kinostuff.com|kinox.me|kinox.tv|kiss-anime.ws|kissasian.ch|kissasian.sh|kooralive.info|kora-live.tv|lafmacun.net|larati.net|latino-webtv.com|leggendaweb.com|leitor.net|lemondedekevin.fr|lewd.ninja|liketvw.com|liveflashplayer.org|lordhd.com|love-drama.pl|ma-famille-dabord-streaming.com|mangaku.in|mejortorrent.org|mejortorrent1.com|mkvcage.com|modsbase.com|monova.org|movie4k.is|movie4k.org|movies123.ac|mp4mania.xyz|multiimg.com|myfeed4u.com|mywatchseries.stream|netiap.com|nicoblog.org|nonpiusolo.com|o2tvseries.com|oasivip.com|oceanoffgames.com|oipeirates.online|onion.ly|onion.pet|openload.cc|openload.ch|openload.fun|opensubtitles.org|ovid.online|ovid.tv|papstream.info|pastehere.xyz|pcgamestorrents.com|pdf-giant.com|peeplink.in|pelislatino3gp.biz|pinoybay.ch|piratebayblocked.com|planet-streaming.net|planete-bd.org|planetfools.com|povwideo.cc|powvideo.cc|powvideo.net|putload.tv|radiofly.ws|reactor.cc|readmanga.today|regarder-le-bureau-des-legendes-streaming.com|regarder-malcolm-streaming.com|regarder-peaky-blinders-streaming.xyz|rivosport.co|rojadirecta.fr|sawlive.tv|scuseami.net|senmanga.com|sharemods.com|sherlockonline.ru|shippuden.tv|short.pe|shrink-service.it|sintelevisor.com|sleeptimer.org|slyid.com|solarmovie.one|sorteosrd.com|srt.am|starmusiq.one|strdef.world|stream2watch.org|stream4free.live|streambeam.io|streamcdn.to|streamcloud.eu|streamhunter.net|streamhunter.top|streamplay.me|streamplay.to|subswiki.com|supervideo.tv|tamilmv.cz|tarjetarojatvonline.com|telerium.tv|teleriumtv.net|theappguruz.com|thepiratebay.cr|thepiratebay.vip|thevid.net|thevid.tv|thevideo.ch|thevideo.io|thevideo.me|thevideo.us|tomadivx.tv|topsimages.com|torlock.com|torlock2.com|tpbprox.com|tubetitties.com|tvshqiphd.com|uii.io|ukpass.co|unblocked2.fun|unblocked2.vip|unblocksites.co|up-4.net|upbom.com|upbom.net|upload.ee|uploadfiles.eu|uploadocean.com|uppom.live|uptostream.com|upvid.host|vcrypt.net|veehd.com|vergol.com|verliga1.net|vertelevisor.com|vev.io|vev.red|videobin.co|videowood.tv|vidfile.net|vidoza.co|vidoza.net|vidshare.tv|vidup.io|vidup.tv|viewasian.tv|vup.to|watchonline.to|watchpornfree.ws|wstream.to|wstream.video|x1337x.eu|x1337x.se|x1337x.ws|xclusivejams.com|xfilesharing.com|xrivonet.info|xvideosharing.com|yify-torrent.org|zeroshare.me|zipansion.com|zone-ebook.com -CSS-generic: 2406 plain CSS selectors -CSS-specific domain-based: 2052 distinct filters - Combined into 1165 distinct entries -CSS-specific entity-based: 3 distinct filters - Combined into 2 distinct entries -CSS-specific injectable files: 6 - 0uu5nhk, 16ab7r0, 05k9bg4, 0unu1ek, 1rh6ilk, fra-0 -Declarative-related distinct filters: 32 distinct combined selectors -Procedural-related distinct filters: 74 distinct combined selectors -Discarded unsupported scriptlet filter: +js(abort-on-stack-trace, document.createEvent, Object.trigger) -Discarded unsupported scriptlet filter: +js(remove-attr, href, a[href]#clickfakeplayer) -Discarded unsupported scriptlet filter: +js(remove-class, with-ad, div) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, #regarder, 7000, 0.02) -Discarded unsupported scriptlet filter: +js(remove-attr, href|target, a[href]#clickfakeplayer) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 58 -Scriptlet-related injectable files: 10 - fra-0.no-fetch-if.js, fra-0.abort-current-script.js, fra-0.set-constant.js, fra-0.abort-on-property-read.js, fra-0.abort-on-property-write.js, fra-0.no-settimeout-if.js, fra-0.no-setinterval-if.js, fra-0.no-addeventlistener-if.js, fra-0.json-prune.js, fra-0.no-windowopen-if.js -============================ -Listset for 'grc-0': - Fetching remote https://www.void.gr/kargig/void-gr-filters.txt -Input filter count: 455 - Accepted filter count: 455 - Rejected filter count: 0 -Output rule count: 434 - Plain good: 434 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -CSS-generic: 1 plain CSS selectors -CSS-specific domain-based: 492 distinct filters - Combined into 165 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 1s6equc -Declarative-related distinct filters: 5 distinct combined selectors -Procedural-related distinct filters: 2 distinct combined selectors -============================ -Listset for 'hun-0': - Fetching remote https://raw.githubusercontent.com/hufilter/hufilter/master/hufilter-ublock.txt -Input filter count: 326 - Accepted filter count: 326 - Rejected filter count: 0 -Output rule count: 202 - Plain good: 201 - Maybe good (regexes): 1 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -Rejected cosmetic filters: 2 - Invalid filter: autosjog.hu##p + center:-abp-has(iframe[data-src*="facebook"]) - Invalid filter: hirado.hu##.hover_bkgr_fricc:-abp-has(.facebookPopupCloseButton) -CSS-generic: 60 plain CSS selectors -CSS-specific domain-based: 1118 distinct filters - Combined into 457 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 1k6d35o, 0q1b0fo -Declarative-related distinct filters: 15 distinct combined selectors -Procedural-related distinct filters: 8 distinct combined selectors -Discarded unsupported scriptlet filter: +js(ra, style, body, stay) -Discarded unsupported scriptlet filter: +js(rc, modal-open, body) -Discarded unsupported scriptlet filter: +js(window.open-defuser.js) -Discarded unsupported scriptlet filter: +js(ra, class, section[class="life-section l-section-main article-section l-section-article"]) -Discarded unsupported scriptlet filter: +js(ra, oncontextmenu) -Discarded unsupported scriptlet filter: +js(rc, bottom-l, body, stay) -Discarded unsupported scriptlet filter: +js(rc, bottom-s, body, stay) -Discarded unsupported scriptlet filter: +js(rc, modal-open, body, stay) -Discarded unsupported scriptlet filter: +js(rc, have-ad, body) -Discarded unsupported scriptlet filter: +js(ra, style, body) -Discarded unsupported scriptlet filter: +js(rc, darken, body) -Discarded unsupported scriptlet filter: +js(rc, blurry, body > :not(.m-fbPopup), stay) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 16 -Scriptlet-related injectable files: 5 - hun-0.abort-current-script.js, hun-0.set-constant.js, hun-0.no-settimeout-if.js, hun-0.abort-on-property-write.js, hun-0.no-addeventlistener-if.js -============================ -Listset for 'idn-0': - Fetching remote https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt -Input filter count: 4279 - Accepted filter count: 4279 - Rejected filter count: 0 -Output rule count: 3035 - Plain good: 3035 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -Rejected cosmetic filters: 1 - Invalid filter: neonime.net##[data-src^="https://neonime.net/wp-content/"]:xpath(..) -CSS-generic: 228 plain CSS selectors -CSS-specific domain-based: 748 distinct filters - Combined into 418 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 16j1s2c, 1p8jqt8 -Declarative-related distinct filters: 2 distinct combined selectors -============================ -Listset for 'ind-0': - Fetching remote https://easylist-downloads.adblockplus.org/indianlist.txt -Input filter count: 5355 - Accepted filter count: 5355 - Rejected filter count: 0 -Output rule count: 5317 - Plain good: 5317 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -Rejected cosmetic filters: 1 - Invalid filter: cricketkhabara.com##div[id^="AS_O_LHS_"] > div:nth-child(15 + n) -CSS-specific domain-based: 3381 distinct filters - Combined into 2342 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 10 - 1uep4cc, 108kan8, 0o7s4c8, 1lma5p4, 1kas0f0, 0reeku0, 0o3egto, 0qet990, 0tkm29g, 1uhnbf4 -Procedural-related distinct filters: 51 distinct combined selectors -============================ -Listset for 'irn-0': - Fetching remote https://raw.githubusercontent.com/MasterKia/PersianBlocker/main/PersianBlocker.txt -Input filter count: 1427 - Accepted filter count: 1427 - Rejected filter count: 0 -Output rule count: 550 - Plain good: 515 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 8/26 - csp=: 0 - Unsupported: 27 - FilterStrictParty: Strict partyness strict3p not supported - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^promo/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /promo/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /promo/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /itm/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^utm_/ -CSS-generic: 14 plain CSS selectors -CSS-specific domain-based: 687 distinct filters - Combined into 333 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 1ajokus, 1bs0jro -Declarative-related distinct filters: 40 distinct combined selectors -Procedural-related distinct filters: 62 distinct combined selectors -Discarded unsupported scriptlet filter: +js(nano-sib) -Discarded unsupported scriptlet filter: +js(nano-stb) -Discarded unsupported scriptlet filter: +js(ra, onselectstart|oncopy|oncontextmenu, body) -Discarded unsupported scriptlet filter: +js(rc, ads-track, , stay) -Discarded unsupported scriptlet filter: +js(nano-stb, document.getElementById, *, 0.01) -Discarded unsupported scriptlet filter: +js(window-close-if, /[Ss][Mm][Oo][Ss][Tt][Aa][Ff][Aa][Mm][Oo][Oo][Ss][Aa][Vv][Ii]/) -Discarded unsupported scriptlet filter: +js(cookie-remover, tracker_visitor_id) -Discarded unsupported scriptlet filter: +js(ra, draggable, , stay) -Discarded unsupported scriptlet filter: +js(nano-stb, , , 0) -Discarded unsupported scriptlet filter: +js(ra, disabled, , stay) -Discarded unsupported scriptlet filter: +js(nano-sib, , , 0) -Discarded unsupported scriptlet filter: +js(cookie-remover, captcha_key) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 39 -Scriptlet-related injectable files: 7 - irn-0.no-windowopen-if.js, irn-0.no-xhr-if.js, irn-0.set-constant.js, irn-0.abort-current-script.js, irn-0.abort-on-property-read.js, irn-0.no-addeventlistener-if.js, irn-0.no-settimeout-if.js -============================ -Listset for 'isl-0': - Fetching remote https://adblock.gardar.net/is.abp.txt -Input filter count: 68 - Accepted filter count: 68 - Rejected filter count: 0 -Output rule count: 68 - Plain good: 68 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -Rejected cosmetic filters: 1 - Invalid filter: pressan.is###13_3623 -CSS-specific domain-based: 121 distinct filters - Combined into 43 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 10m5bbk -============================ -Listset for 'isr-0': - Fetching remote https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt - Fetching remote https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew-uBO.txt -Input filter count: 708 - Accepted filter count: 707 - Rejected filter count: 1 -Output rule count: 283 - Plain good: 250 - Maybe good (regexes): 4 - redirect=: 10 - removeparams= (accepted/discarded): 0/0 - csp=: 1 - Unsupported: 18 - regexFilter is not RE2-compatible: haaretz\.co\.il\/(?!.*\.(js)($|\?)).* - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+(api-mail|dal|dcx|isc|iscwne|6days|animals|astrology|b|buzzit|calendar|cars|celebs|e|elections|euro|fashion|finance|food|forums|fun|healthy|home|judaism|kids|mag|maps|milon|movies|mundial|nadlan|news|nick|olympics|search|sports|tags|tech|translate|travel|tv-guide|tv|usaelections|viva|vod|weather|www)\.walla\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+walla\.co\.il\.?(\/|:|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+www\.sheee\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+sheee\.co\.il\.?(\/|:|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+www\.(walla(news|shops|tours|art|print)|hamal|sheee)\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+(walla(news|shops|tours|art|print)|hamal|sheee)\.co\.il\.?(\/|:|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+:\/+(www\.(walla(news|shops|tours|art|print)|hamal)|(api-mail|dal|dcx|isc|iscwne|www)\.walla)\.co\.il\.?(\/|:|$))^[a-zA-Z0-9\-]+:\/+([a-zA-Z0-9\-]+\.)+(walla(news|shops|tours|art|print)?|hamal)\.co\.il\.?(\/|:|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*((gov|idf|muni|ac|k12|net)\.il|(google|blogspot|phpbb|minifier|enable|nagich|nagishplus|nagishly|livedns|user-a|emap|23tv|glz|icast|ecast|mediacast|live1|siz|gif|meduzot|telesport|teleline|livegames|2net|weather2day|mekorotapp|e-vrit|fav|slash|rabbi|kaplanopensource|systematics|israelcoronamap|icdn|wcdn|wallanews|wallashops|wallatours|wallaart|wallaprint|hamal|sheee|globes|madlan|yad2|mipo|b144|bezeq|yes|fxp|nick|d|maariv|iol|dominos|magazineitsuv|doctors|mishpati|lawguide|arcdb|zebarur|wlcdn|linicom|erate)\.co\.il|(kan|kankids|makan|iba|oref|iaf|parks|imj|nli|bh|isoc|hebrew-academy|kineret|teva|zavit|ip6|profile)\.org\.il)\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.il\.?([\/\:]|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*(facebook|fbcdn|dmcdn|slideshare|cloudfront|cloudflare|fastly|fastlylb|gammacdn|edgecastcdn|footprint|incapdns|cloudapp|brightcove|jsdelivr|akamai|akamaihd|akamaized|akamaiedge|akahost|ctedgecdn|2mdn|edgesuite|azurewebsites|azureedge|windows|hwcdn|zencdn|llnwd|llnwi|boltdns|msecnd|bitsngo|nocookie|datatables|docdroid|algolia|anvato|maphub|dwcdn|typekit|edgefonts|recaptcha|ampproject|yastatic|behance|darksky|twitchcdn|ttvnw|jtvnw|dailyuploads|deviantart|8ch|b-cdn|vodgc|hlsplayer|streamlock|web-view|streamgates|cdnwz|playgorithm|vidiom|radwarecloud|f-static|chartbeat|doubleclick|advsnx|sc-static|artipbox)\.net\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.net\.?([\/\:]|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*(flowplayer|amara|h5p|d3js|ampproject|promisejs|backbonejs|angularjs|dojotoolkit|openstreetmap|wmflabs|wikimapia|wikimedia|wikipedia|w3|schema|archive|mozilla|documentcloud|w|mathjax|userway|pannellum|tmdb|muses|openweathermap|uploadimage|postimages|postimage|imgsafe|4chan|4channel|4cdn|telegram|olympic|pbs|pbskids|npr|ntp|gnu|creativecommons|eff|icann|iana|ietf|wikileaks|ourworldindata|cdn77|browser-update|consensu|wp-accessibility|covid19maps|coronaisrael)\.org\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.org\.?([\/\:]|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:\.]+\.)*(google|gstatic|googleapis|jquery|youtube|ytimg|facebook|fbsbx|twitter|twimg|instagram|cdninstagram|pinterest|pinimg|tumblr|giphy|vimeo|vimeocdn|dailymotion|flickr|staticflickr|soundcloud|sndcdn|scribd|scribdassets|sharethis|addthis|addthisedge|addthiscdn|reddit|redditmedia|redditstatic|redditgifts|linkedin|licdn|fontawesome|image-maps|cloudflare|bootstrapcdn|unpkg|cdnjs|stackpathdns|stackpathcdn|maxcdn|maxcdn-edge|netdna-ssl|netdna-cdn|kxcdn|ssl-cdn|muicss|tinymce|createjs|github|githubusercontent|aspnetcdn|azure|amazonaws|elasticbeanstalk|rackcdn|netlify|jwplayer|jwpcdn|jwpltx|jwpsrv|jwplatform|brightcove|brightcovecdn|flowplayer|foliovision|streamable|omnystudio|omnycontent|mixcloud|iheart|bandcamp|bcbits|podbean|buzzsprout|nobexpartners|podtail|spreaker|simplecast|spotify|vocaroo|embedly|iframely|snapwidget|thinglink|infogram|highcharts|printfriendly|algolianet|gravatar|imgur|imgflip|gifer|gfycat|tenor|unsplash|freepik|svgur|svgshare|icons8|iconfinder|iconarchive|iconscout|flaticon|kindpng|pngitem|disqus|disquscdn|disqusservice|oneall|oneallcdn|tapatalk|tapatalk-cdn|mapbox|maptiler|mapquest|arcgis|arcgisonline|esri|here|ted|tedcdn|kickstarter|riddle|strawpoll|9gag|9cache|imageshack|tinypic|photobox|photobucket|imgbox|imagebam|gifyu|makeagif|reactiongifs|gifbin|gif-finder|kym-cdn|gyazo|prntscr|pastebin|rawgit|rawgithub|knockoutjs|gridstackjs|ravenjs|liveleak|metacafe|mcstatic|ign|ignimgs|365scores|buzzfeed|digg|stumbleupon|mix|getpocket|blogspot|wordpress|wp|videopress|wptavern|livejournal|withgoogle|googlegroups|googleusercontent|googlevideo|ggpht|youtube-nocookie|appspot|firebaseio|firebaseapp|libring|hcaptcha|paypal|paypalobjects|amazon|media-amazon|media-imdb|ebay|apple|microsoft|live|bing|msn|yahoo|yimg|yahooapis|duckduckgo|yandex|webflow|rtlcss|dropbox|dropboxusercontent|dropboxstatic|dropbox-dns|timeanddate|momentjs|weather|accuweather|theweathernetwork|windy|sat24|rainviewer|uvlens|statcounter|adobe|onesignal|livefyre|pushwoosh|tinypass|addtoany|addthisevent|addevent|addtocalendar|sumo|sumome|chatango|bitly|tinyurl|ipcamlive|playstation|discord|discordapp|mixer|tiktok|tiktokcdn|ttwstatic|muscdn|ibytedtos|rumble|bitchute|parler|gab|deviantart|firefoxusercontent|box|feedly|feedburner|phpbb|vk|userapi|whatsapp|vroptimal-3dx-assets|bbc|cnn|go|nytimes|nyt|today|gofundme|fifa|uefa|nba|turner|xkcd|mtvnservices|cc|tmz|bugsnag|zoro|hebcal|fontsproject|kayma|kayma-dashboards|kayma-insights|kampyle|vicomi|openweb|kaltura|cincopa|avplayer|vidnt|peer5|h-cdn|bynetcdn|cdnwiz|best-tv|viewbix|streamrail|smv-cdn|cloudvideoplatform|waze|hunchbots|jeeng|cloudinary|sphereup|poloriz|applicaster|cloudwm|cloudwm-waf|negishim|accessibe|accessibeapp|acsbap|vollotech|mk-sense|allyable|shortaudition|spaceil|clear-map|segmanta|opinionstage|playbuzz|apester|qmerce|outbrain|taboola|taboolasyndication|googleoptimize|google-analytics|googletagservices|googletagmanager|googleadservices|googlesyndication|dynamicyield|scorecardresearch|serving-sys|chartbeat|exposebox|coralogix|browsiprod|ip-api|petametrics|cooladata|hotjar|pusher|carto|fortvision|fortcdn|getsentry|trackjs|gamezhero|nick|nickjr|teennick|travelriskmap|sinclairstoryline|fresnobee|nbcchicago|magazina-il|raxcdn|pagewiz|pas-rahav|aniview|adnxs|sekindo)\.com\.?([\/\:]|$))^[a-zA-Z0-9\-]+\:\/+[^\/\:]+\.com\.?([\/\:]|$) - regexFilter is not RE2-compatible: ^(?![a-zA-Z0-9\-]+\:\/+([^\/\:]+\.(il|com|net|org|gov|mil|edu|int|(ac|nhs)\.uk)|[0-9\.]+|([^\/\:\.]+\.)*(omny\.fm|github\.io|socket\.io|codepen\.io|polyfill\.io|embed\.ly|iframe\.ly|infogr\.am|flourish\.studio|flourish\.rocks|uri\.sh|po\.st|plyr\.io|piano\.io|spot\.im|spots\.im|periscope\.tv|pscp\.tv|vine\.co|popkey\.co|tenor\.co|redd\.it|ibb\.co|vgy\.me|postimg\.cc|imageshack\.us|prnt\.sc|imagesup\.co|weserv\.nl|telesco\.pe|powr\.io|simplecast\.fm|anchor\.fm|pippa\.io|last\.fm|scdn\.co|adobe\.io|lmao\.ninja|disease\.sh|web\.app|twitch\.tv|rmbl\.ws|vid\.me|h-cdn\.co|minute\.ly|vttp\.co|tldw\.me|feeder\.co|del\.icio\.us|telegram\.me|yandex\.ru|dailymail\.co\.uk|bbc\.net\.uk|bbc\.co\.uk|cnn\.io|bit\.ly|goo\.gl|g\.co|youtu\.be|t\.co|t\.me|fb\.me|m\.me|instagr\.am|wa\.me|amzn\.to|wp\.me|git\.io|docdro\.id|arcg\.is|ow\.ly|disq\.us|discord\.gg|tiny\.cc|ex\.co|nagishly\.co|user1st\.info|knesset\.tv|103\.fm|nickjr\.tv|logidea\.info|zoomanalytics\.co|firstimpression\.io|rtk\.io|trb\.tv|ren\.tv|atom-data\.io|sentry\.io|outbid\.io))\.?([\/\:]|$))^[^\/\:\.]+\:\/+[^\/\:\.] - Invalid network filter in isr-0: ||doubleclick.net^$xhr,redirect-rule=nooptext,domain=13news.co.il|13tv.co.il - Invalid network filter in isr-0: *$webrtc,domain=walla.co.il - Invalid network filter in isr-0: *$webrtc,domain=ynet.co.il - Invalid network filter in isr-0: *$webrtc,domain=mako.co.il - Invalid network filter in isr-0: *$webrtc,domain=globes.co.il - Invalid network filter in isr-0: *$webrtc,domain=calcalist.co.il - Invalid network filter in isr-0: *$webrtc,domain=13news.co.il|13tv.co.il - Invalid network filter in isr-0: *$webrtc,domain=yad2.co.il -Rejected cosmetic filters: 2 - Invalid filter: haaretz.co.il##span:has([href*="promo"]):xpath(..) - Entity-based filter not supported: #afterLoad:style(display: block !important) -CSS-generic: 5 plain CSS selectors -CSS-specific domain-based: 377 distinct filters - Combined into 120 distinct entries -CSS-specific entity-based: 1 distinct filters - Combined into 1 distinct entries -CSS-specific injectable files: 2 - 0at4bf0, isr-0 -Declarative-related distinct filters: 3 distinct combined selectors -Discarded unsupported scriptlet filter: +js(nowebrtc) -Discarded unsupported scriptlet filter: +js(aost, Math, injectedScript) -Discarded unsupported scriptlet filter: +js(cookie-remover, /r13_maavron/) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 12 -Scriptlet-related injectable files: 6 - isr-0.abort-on-property-read.js, isr-0.no-settimeout-if.js, isr-0.abort-on-property-write.js, isr-0.no-addeventlistener-if.js, isr-0.set-constant.js, isr-0.abort-current-script.js -============================ -Listset for 'ita-0': - Fetching remote https://easylist-downloads.adblockplus.org/easylistitaly.txt -Input filter count: 5706 - Accepted filter count: 5706 - Rejected filter count: 0 -Output rule count: 5432 - Plain good: 5427 - Maybe good (regexes): 4 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 1 - Invalid network filter in ita-0: $webrtc,domain=hentaisaturn.com|italydownload.com|mitoitalico.com|semprehawk.com -CSS-generic: 359 plain CSS selectors -CSS-specific domain-based: 3317 distinct filters - Combined into 2103 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 9 - 0bv6itg, 19d3m90, 0d79a1c, 0us1uv8, 124vgoo, 1ipijg8, 0m7f27g, 14hmpr0, 0aka1v8 -Procedural-related distinct filters: 21 distinct combined selectors -============================ -Listset for 'jpn-1': - Fetching remote https://filters.adtidy.org/extension/ublock/filters/7.txt -Input filter count: 1277 - Accepted filter count: 1276 - Rejected filter count: 0 -Output rule count: 860 - Plain good: 822 - Maybe good (regexes): 13 - redirect=: 21 - removeparams= (accepted/discarded): 0/1 - csp=: 0 - Unsupported: 4 - regexFilter is not RE2-compatible: \/kyodopress_cms\/wp-content\/(themes\/kyodopress\/img_banner\/(?!bn_newspaper\.gif)|banners).* - regexFilter is not RE2-compatible: ^(?!.*(bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com)).*$ - Unsupported regex-based removeParam: /^(cookie|ga_|u_)/ - Invalid network filter in jpn-1: ||fundingchoicesmessages.google.com^$script,redirect-rule=noop.js,domain=rocketnews24.com|youpouch.com -CSS-generic: 70 plain CSS selectors -CSS-specific domain-based: 4061 distinct filters - Combined into 2213 distinct entries -CSS-specific entity-based: 15 distinct filters - Combined into 8 distinct entries -CSS-specific injectable files: 10 - 1aoaikk, 0e8puao, 1cu9bm0, 0dv2mck, 0f37cnc, 1khf7f0, 1rc0pgk, 0d95sdk, 1m6jr28, jpn-1 -Declarative-related distinct filters: 98 distinct combined selectors -Procedural-related distinct filters: 513 distinct combined selectors -Discarded unsupported scriptlet filter: +js(remove-class, visited, #oRslt li a.visited, stay) -Discarded unsupported scriptlet filter: +js(remove-attr, style|height, amp-img) -Discarded unsupported scriptlet filter: +js(remove-attr, onclick, .amazoom1[onclick^="clickcat"][target="_blank"]) -Discarded unsupported scriptlet filter: +js(remove-attr, onclick, div[data-js][style*="background"], stay) -Discarded unsupported scriptlet filter: +js(remove-attr, onclick, [onclick^="location.href=\'https://px.a8.net"]) -Discarded unsupported scriptlet filter: +js(remove-attr, href, a[href^="https://a.r10.to/"]) -Discarded unsupported scriptlet filter: +js(remove-attr, class, #s-post) -Discarded unsupported scriptlet filter: +js(remove-attr, class, section[itemprop="articleBody"]) -Discarded unsupported scriptlet filter: +js(remove-class, with-ad, section.main) -Discarded unsupported scriptlet filter: +js(remove-attr, href, .game_amazon > a[href*=".amazon."]) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, .run()}, 1000) -Discarded unsupported scriptlet filter: +js(remove-class, has-topbanner, body > header.has-topbanner) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, simplegameAdCountDown, 1000, 0.02) -Discarded unsupported scriptlet filter: +js(noeval-if, hoihoi) -Discarded unsupported scriptlet filter: +js(remove-attr, data-popup-url) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, aeriaGamesAdCountDown, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, u(!0), 5000) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, [native code], 15000) -Discarded unsupported scriptlet filter: +js(remove-attr, onclick, span > a[onclick]) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, visibility, 4000) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, [native code], 2000, 0.3) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, [native code], 3000, 0.25) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, [native code], 4000, 0.2) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 51 -Scriptlet-related injectable files: 7 - jpn-1.no-settimeout-if.js, jpn-1.no-fetch-if.js, jpn-1.abort-current-script.js, jpn-1.set-constant.js, jpn-1.no-addeventlistener-if.js, jpn-1.abort-on-property-read.js, jpn-1.no-windowopen-if.js -Discarded unsupported scriptlet filter: +js(no-fetch-if, cdn.adschill.com) -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 2 - jpn-1.no-settimeout-if.js, jpn-1.abort-current-script.js -============================ -Listset for 'kor-1': - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filter-uBO.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/3rd_domains.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/1st_domains.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/general_elemhide.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/specific_ELEMHIDE.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/general_url.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/general_url.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/specific_URL.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/specific_ELEMHIDE.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/allowlist.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/extended_css_ELEMHIDE.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/extended_css_INJECTION.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/specific_REDIRECT.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/extended_css_ELEMHIDE.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/extended_css_INJECTION.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/scriptlets.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/lkscriptlet.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/javascript.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/javascript.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/antiadblock.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/removeparam.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/allowlist.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-share/specific_CSS.txt - Fetching remote https://raw.githubusercontent.com/List-KR/List-KR/master/filters-uBO/specific_CSS.txt -Input filter count: 1068 - Accepted filter count: 1064 - Rejected filter count: 0 -Output rule count: 773 - Plain good: 637 - Maybe good (regexes): 110 - redirect=: 19 - removeparams= (accepted/discarded): 1/0 - csp=: 0 - Unsupported: 6 - regexFilter is not RE2-compatible: ^https:\/\/image\.aladin\.co\.kr\/img\/banner\/flash\/welcome\/nav\/(?!181010)[0-9]+_tab - regexFilter is not RE2-compatible: ^https:\/\/static\.wixstatic\.com\/media\/[0-9a-z]{6}_[a-z0-9]{32}~(?!.+doc).+ - regexFilter is not RE2-compatible: ^https:\/\/(www\.)?kookje\.co\.kr\/(mobile\/)?design\/(?!(bn_what300|.*naver|popup|series\/)).* - regexFilter is not RE2-compatible: ^https:\/\/thumb\.toomics\.com\/upload\/banner\/(?!main|cut) - Unpatchable redirect filter: google-ima3.js - Invalid network filter in kor-1: $redirect-rule=noop.txt,domain=lover900.net|lover901.net|lover902.net|lover903.net|lover904.net|lover905.net|lover906.net|lover907.net|lover908.net|lover909.net -Rejected cosmetic filters: 3 - Invalid filter: m.cafe.naver.com##img[src][alt="매니저 등록 배너"]:matches-path(/&|\\.|\\?)clubid=14605461(&|$)/) - Invalid filter: cafe.naver.com##img[src][alt="매니저 등록 배너"]:matches-path(/&|\\.|\\?)clubid=14605461(&|$)/) - Invalid filter: meeco.kr##.xe_content { opacity: 1 !important; } -CSS-generic: 3 plain CSS selectors -CSS-specific domain-based: 915 distinct filters - Combined into 509 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 0u0ls4g, 0qmvdj4 -Declarative-related distinct filters: 88 distinct combined selectors -Procedural-related distinct filters: 129 distinct combined selectors -Discarded unsupported scriptlet filter: +js(ra, style, html[style^='background-image:'][style*='upload.tgd.kr']) -Discarded unsupported scriptlet filter: +js(ra, placeholder, input#searchMainKeyword) -Discarded unsupported scriptlet filter: +js(ra, placeholder, input#searchKeyword) -Discarded unsupported scriptlet filter: +js(ra, placeholder, input.search_input, asap stay) -Discarded unsupported scriptlet filter: +js(nano-stb, count, , 0.001) -Discarded unsupported scriptlet filter: +js(nobab) -Discarded unsupported scriptlet filter: +js(nobab2) -Discarded unsupported scriptlet filter: +js(nofab) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 57 -Scriptlet-related injectable files: 7 - kor-1.abort-current-script.js, kor-1.set-constant.js, kor-1.no-settimeout-if.js, kor-1.no-xhr-if.js, kor-1.json-prune.js, kor-1.abort-on-property-read.js, kor-1.no-fetch-if.js -============================ -Listset for 'ltu-0': - Fetching remote https://raw.githubusercontent.com/EasyList-Lithuania/easylist_lithuania/master/easylistlithuania.txt -Input filter count: 575 - Accepted filter count: 575 - Rejected filter count: 0 -Output rule count: 524 - Plain good: 520 - Maybe good (regexes): 1 - redirect=: 3 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -CSS-generic: 5 plain CSS selectors -CSS-specific domain-based: 516 distinct filters - Combined into 282 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 114p5ts, 0co18pg -Declarative-related distinct filters: 5 distinct combined selectors -Procedural-related distinct filters: 4 distinct combined selectors -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 7 -Scriptlet-related injectable files: 4 - ltu-0.abort-current-script.js, ltu-0.no-settimeout-if.js, ltu-0.abort-on-property-read.js, ltu-0.no-windowopen-if.js -============================ -Listset for 'lva-0': - Fetching remote https://raw.githubusercontent.com/Latvian-List/adblock-latvian/master/lists/latvian-list.txt -Input filter count: 185 - Accepted filter count: 185 - Rejected filter count: 0 -Output rule count: 144 - Plain good: 144 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -CSS-specific domain-based: 184 distinct filters - Combined into 62 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 04u4kss -============================ -Listset for 'nld-0': - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Block_General.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Block_first_party_Server.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Block_third_party_Server.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Block_Resources.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Block_Whitelist.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Hide_Specific.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Hide_General.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Hide_Whitelist.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/Anti-Adblock.txt - Fetching remote https://raw.githubusercontent.com/EasyDutch-uBO/EasyDutch/gh-pages/EasyDutch/No_uBlock_Filters.txt -Input filter count: 756 - Accepted filter count: 753 - Rejected filter count: 0 -Output rule count: 651 - Plain good: 641 - Maybe good (regexes): 3 - redirect=: 3 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 4 - Could not salvage rule with only entity-based domain= option: allestoringen.* - Invalid network filter in nld-0: @@||imasdk.googleapis.com/js/sdkloader/ima3.js$script,3p,redirect-rule,domain=vrt.be - Invalid network filter in nld-0: *$image,domain=kijk.nl,redirect-rule=1x1.gif - Invalid network filter in nld-0: *$image,redirect-rule=2x2.png,domain=tweakers.net -Rejected cosmetic filters: 2 - Invalid filter: vastgoedjournaal.nl##aside:has([class]:has-text(/advert/i)):has([href]:has([src*="media.prdn.nl"]) - Invalid filter: nlsexfilmpjes.com###left_div li:not(> a[target="_blank"]) -CSS-generic: 15 plain CSS selectors -CSS-specific domain-based: 968 distinct filters - Combined into 658 distinct entries -CSS-specific entity-based: 1 distinct filters - Combined into 1 distinct entries -CSS-specific injectable files: 4 - 0paeau0, 1j8r9m0, 0durh7g, nld-0 -Declarative-related distinct filters: 5 distinct combined selectors -Procedural-related distinct filters: 175 distinct combined selectors -Discarded unsupported scriptlet filter: +js(rc, pui__root--no-seekbar, .pui__root--no-seekbar, stay) -Discarded unsupported scriptlet filter: +js(setTimeout-defuser, AdBlockerCheck) -Discarded unsupported scriptlet filter: +js(nobab) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 16 -Scriptlet-related injectable files: 9 - nld-0.no-settimeout-if.js, nld-0.abort-current-script.js, nld-0.no-fetch-if.js, nld-0.set-constant.js, nld-0.abort-on-property-write.js, nld-0.abort-on-property-read.js, nld-0.no-addeventlistener-if.js, nld-0.no-windowopen-if.js, nld-0.no-setinterval-if.js -============================ -Listset for 'nor-0': - Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianList.txt - Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/AntiAdblockEntries.txt - Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/NordicFilters-NotFirefox.txt - Fetching remote https://raw.githubusercontent.com/DandelionSprout/adfilt/master/NorwegianExperimentalList%20alternate%20versions/NordicFilters-NotBrave.txt -Input filter count: 863 - Accepted filter count: 856 - Rejected filter count: 0 -Output rule count: 488 - Plain good: 435 - Maybe good (regexes): 3 - redirect=: 3 - removeparams= (accepted/discarded): 25/4 - csp=: 1 - Unsupported: 21 - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: eniro.* - Could not salvage rule with only entity-based domain= option: eniro.*|proff.* - Could not salvage rule with only entity-based domain= option: eurosport.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: discoveryplus.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Could not salvage rule with only entity-based domain= option: gamereactor.* - Unsupported regex-based removeParam: /^rs[0-9]/ - Unsupported regex-based removeParam: /^source=partnerads$/ - Unsupported regex-based removeParam: /^source=tradedoubler$/ - Unsupported regex-based removeParam: /^amp;/ -Rejected cosmetic filters: 9 - Entity-based filter not supported: .teaser__native:upward(4) - Entity-based filter not supported: #whitetop:style(margin-top: 0px !important) - Entity-based filter not supported: .n_ListHeader:style(margin-top: 5px !important) - Entity-based filter not supported: .aside-image-with-link:has([href^="https://www.whatsnxt.io/"]) - Entity-based filter not supported: #pagebackground:style(background-image: none !important) - Entity-based filter not supported: .artistyle3:has(h4:has-text(/sponsored/i)) - Entity-based filter not supported: .external_div_bigVideoAd:remove() - Entity-based filter not supported: a[href^="/grtv/"][title*=Sponsored]:upward(1) - Entity-based filter not supported: article.rwd_row:has(a[href$="/sponsoredcontent/"]) -CSS-generic: 124 plain CSS selectors -CSS-specific domain-based: 897 distinct filters - Combined into 495 distinct entries -CSS-specific entity-based: 44 distinct filters - Combined into 13 distinct entries -CSS-specific injectable files: 3 - 051n0pg, 0b7g3rg, nor-0 -Declarative-related distinct filters: 29 distinct combined selectors -Procedural-related distinct filters: 123 distinct combined selectors -Discarded unsupported scriptlet filter: +js(golem.de.js) -Discarded unsupported scriptlet filter: +js(ra, data-track) -Discarded unsupported scriptlet filter: +js(std, (), 2500) -Discarded unsupported scriptlet filter: +js(ra, class, .dfp-loaded) -Discarded unsupported scriptlet filter: +js(nofab) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 14 -Scriptlet-related injectable files: 7 - nor-0.set-constant.js, nor-0.abort-current-script.js, nor-0.abort-on-property-read.js, nor-0.json-prune.js, nor-0.abort-on-property-write.js, nor-0.no-fetch-if.js, nor-0.no-addeventlistener-if.js -Discarded unsupported scriptlet filter: +js(nano-stb, timeDown) -Discarded unsupported scriptlet filter: +js(ra, autoplay) -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 4 - nor-0.no-addeventlistener-if.js, nor-0.set-constant.js, nor-0.abort-current-script.js, nor-0.abort-on-property-write.js -============================ -Listset for 'pol-0': - Fetching remote https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt - Fetching remote https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock.txt - Fetching remote https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock_ublock.txt - Fetching remote https://raw.githubusercontent.com/olegwukr/polish-privacy-filters/master/anti-adblock-suplement.txt -Input filter count: 1430 - Accepted filter count: 1428 - Rejected filter count: 1 -Output rule count: 1054 - Plain good: 973 - Maybe good (regexes): 45 - redirect=: 27 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 9 - regexFilter is not RE2-compatible: ^https:\/\/eku24.net\/images\/slajdy\/(?!zyczenia)[a-z]{3,10}\/[a-zA-Z0-9_-]{10,50}\.jpg - regexFilter is not RE2-compatible: ^https:\/\/(?!horrortube)(?!filman.cc)(?!horlol.pl)[a-z.0-9]{3,15}\.[a-z]{2,3}\/ - regexFilter is not RE2-compatible: https?:\/\/naekranie\.pl\/wp-content\/uploads\/[0-9]{4,4}\/[0-9]{2,2}\/(?!jpg)[0-9a-z]{7,10}$ - regexFilter is not RE2-compatible: https?:\/\/(?!(poczta|bc))[a-z.]{3,15}\.wp\.pl\/.{20,} - regexFilter is not RE2-compatible: ^http:\/\/((?!192\.168)(?!10\.)(?!172\.16)(?!172\.17)(?!172\.18)(?!172\.19)(?!172\.2)(?!172\.30)(?!172\.31)([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\/[a-zA-Z0-9]{30,} - regexFilter is not RE2-compatible: ^(http|https):\/\/www\.portel\.pl\/(?!pasaz)[-a-z0-9A-Z_%$&+=[\].]{1,200}\/[-a-z0-9A-Z_%$&+=[\]/.]{2,200}.(html|htm) - regexFilter is not RE2-compatible: ^(http|https):\/\/(?!www.speedvid)(?!streamcherry.com)(?!vshare)(?!vidoza)(?!www.youtube)[a-zA-Z0-9\W]{5,10}.[a-z]{2,20}\/(?!anime)[\w\W\d]{5,20}\/[a-z]{5,20}\/ - Could not salvage rule with only entity-based domain= option: trojmiasto.* - Could not salvage rule with only entity-based domain= option: trojmiasto.* -Rejected cosmetic filters: 15 - Invalid filter: www.money.pl###app > div > div:matches-css(background-image: /^url\("https:\/\/v\.wpimg\.pl/) - Invalid filter: www.dobreprogramy.pl##:xpath(//div[contains(text(), 'REKLAMA')]) - Invalid filter: www.dobreprogramy.pl##:xpath(//a[not(contains(@href,','))][string-length(@href)>1600]) - Invalid filter: www.wp.pl##:xpath(//div[@data-st-area='Zakupy'][count(*)=2][not(header)]) - Invalid filter: www.wp.pl##:xpath(//div[count(*)=3][img[@class][@src]][*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=0]]) - Invalid filter: wp.pl##:xpath(//div[count(*)=3][img[@class][@src]][*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=0]]) - Invalid filter: parenting.pl##:xpath(//div[count(*)=1][*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=0]]) - Invalid filter: parenting.pl##:xpath(//div[count(*)=1][*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=1]/*[count(*)=0]]) - Invalid filter: elka.pl##:xpath(//*[@align="center"][contains(text(), 'reklama')]) - Invalid filter: miedziowe.pl##:xpath(//*[@align="center"][contains(text(), 'reklama')]) - Invalid filter: google.com##.rllt__link:has( > div[class]:has-text(Reklama)):xpath(..) - Invalid filter: google.pl##.rllt__link:has( > div[class]:has-text(Reklama)):xpath(..) - Invalid filter: stooq.pl##:xpath(//*[@align="center"]/*[@id][contains(text(),"REKLAMA")]) - Invalid filter: stooq.com##:xpath(//*[@align="center"]/*[@id][contains(text(),"REKLAMA")]) - Invalid filter: epidemia-koronawirus.pl##body > div:nth-of-type(1)[style^="display: block;"]:not(#page) -CSS-generic: 61 plain CSS selectors -CSS-specific domain-based: 4160 distinct filters - Combined into 2706 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 11 - 17gfon8, 1veuvgg, 15mh63k, 10trdb0, 1s6btns, 0t127ro, 1ee44p8, 0t0ei1g, 08mbm44, 01l4lb8, 1am0cb8 -Declarative-related distinct filters: 99 distinct combined selectors -Procedural-related distinct filters: 74 distinct combined selectors -Discarded unsupported scriptlet filter: +js(noeval) -Discarded unsupported scriptlet filter: +js(nano-remove-elements-onready.js, #skyBanner) -Discarded unsupported scriptlet filter: +js(aost, WP, r https) -Discarded unsupported scriptlet filter: +js(aost, WP.prebid, onLoad) -Discarded unsupported scriptlet filter: +js(noeval-if, RTCPeerConnection) -Discarded unsupported scriptlet filter: +js(ra, scrolling, iframe#sg-iframe[scrolling="no"], stay) -Discarded unsupported scriptlet filter: +js(nano-stb) -Discarded unsupported scriptlet filter: +js(nano-stb, function, 1000, 0.02) -Discarded unsupported scriptlet filter: +js(nano-remove-elements-onready.js, .screening) -Discarded unsupported scriptlet filter: +js(nano-sib) -Discarded unsupported scriptlet filter: +js(nano-sib, redirectId) -Discarded unsupported scriptlet filter: +js(nano-stb, TheLink) -Discarded unsupported scriptlet filter: +js(insert-iframe, 1, honeypot, https://www.napiprojekt.pl/napisy-42731-Ostatni-U-Boot-(1993), width: 1px !important; height: 1px !important; position: absolute !important; left: -3000px !important) -Discarded unsupported scriptlet filter: +js(ac, active, #m_hot_1) -Discarded unsupported scriptlet filter: +js(ac, box_active, #hot_1) -Discarded unsupported scriptlet filter: +js(set-constant.js, showAds, true) -Discarded unsupported scriptlet filter: +js(abort-on-property-read.js, checkAds) -Discarded unsupported scriptlet filter: +js(setTimeout-defuser.js, hasAdblock) -Discarded unsupported scriptlet filter: +js(abort-on-property-write.js, fuckAdBlock) -Discarded unsupported scriptlet filter: +js(addEventListener-defuser.js, load, onload) -Discarded unsupported scriptlet filter: +js(setTimeout-defuser.js, notDetected) -Discarded unsupported scriptlet filter: +js(set-constant.js, pp_adblock_is_off, trueFunc) -Discarded unsupported scriptlet filter: +js(nofab) -Discarded unsupported scriptlet filter: +js(noeval.js) -Discarded unsupported scriptlet filter: +js(setInterval-defuser.js, muted, 8000) -Discarded unsupported scriptlet filter: +js(setTimeout-defuser.js, Math.round, 5000) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js, $, alert) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js, document.addEventListener, adblocka) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js, atob, decodeURIComponent) -Discarded unsupported scriptlet filter: +js(abort-on-property-write.js, addBlocking) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js,document.getElementById, block) -Discarded unsupported scriptlet filter: +js(setTimeout-defuser.js, AdBlock) -Discarded unsupported scriptlet filter: +js(abort-on-property-write.js, czy_wlaczony_adblock) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js, parseInt, adblock) -Discarded unsupported scriptlet filter: +js(abort-on-property-write.js, Vublock) -Discarded unsupported scriptlet filter: +js(set-constant.js, window.google_jobrunner, noopFunc) -Discarded unsupported scriptlet filter: +js(noeval-if.js, Criteo) -Discarded unsupported scriptlet filter: +js(abort-on-property-write.js, adcashMacros) -Discarded unsupported scriptlet filter: +js(set-constant.js, adsBlocked, noopFunc) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js, String.fromCharCode, /(?:Math|btoa)/) -Discarded unsupported scriptlet filter: +js(nobab) -Discarded unsupported scriptlet filter: +js(no-setTimeout-if.js, adBlockTest, 100) -Discarded unsupported scriptlet filter: +js(set-constant.js, loadElementBlock, noopFunc) -Discarded unsupported scriptlet filter: +js(abort-on-property-write.js, adquestoConfig) -Discarded unsupported scriptlet filter: +js(setInterval-defuser.js, seead) -Discarded unsupported scriptlet filter: +js(abort-current-inline-script.js, IRI, Adblock) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 59 -Scriptlet-related injectable files: 8 - pol-0.no-windowopen-if.js, pol-0.abort-on-property-write.js, pol-0.no-settimeout-if.js, pol-0.abort-current-script.js, pol-0.abort-on-property-read.js, pol-0.set-constant.js, pol-0.no-addeventlistener-if.js, pol-0.no-setinterval-if.js -============================ -Listset for 'rou-1': - Fetching remote https://road.adblock.ro/lista.txt - Fetching remote https://road.adblock.ro/road-ubo.txt -No valid content for undefined -Input filter count: 510 - Accepted filter count: 509 - Rejected filter count: 0 -Output rule count: 409 - Plain good: 406 - Maybe good (regexes): 3 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -Rejected cosmetic filters: 1 - Invalid filter: istoria.md##div.d2011-block-lateral-middle:-abp-has(a[href*="voceabasarabiei.net"]) -CSS-generic: 8 plain CSS selectors -CSS-specific domain-based: 524 distinct filters - Combined into 266 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 0se21us, 0cl2sgo -Procedural-related distinct filters: 29 distinct combined selectors -============================ -Listset for 'rus-0': - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/RuAdList-uBO.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/adservers.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/first_level.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/general_block.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/general_hide.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/popup.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_antisocial.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_block.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_hide.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/specific_special.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/thirdparty.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/advblock/whitelist.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/css-fixes-experimental.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/js-fixes-experimental.txt - Fetching remote https://raw.githubusercontent.com/easylist/ruadlist/master/AWRL-non-sync.txt -Input filter count: 17266 - Accepted filter count: 17247 - Rejected filter count: 16 -Output rule count: 5926 - Plain good: 5837 - Maybe good (regexes): 19 - redirect=: 15 - removeparams= (accepted/discarded): 10/2 - csp=: 40 - Unsupported: 5 - regexFilter is not RE2-compatible: ^(?!.*(24liveblog.com|24liveplus.com|acint.net|addthis.com|addthisedge.com|akamai.net|akamaiedge.net|alloha.tv|ampproject.org|anycomment.io|apester.com|api-ssl.bitly.com|api.corr.life|api.here.com|api.sypexgeo.net|app.hoversignal.com|appsmail.ru|bam.nr-data.net|blogger.com|bootstrapcdn.com|cackle.me|cdn.ampproject.org|cdn.iframe.ly|cdn.rawgit.com|cdnstats.ru|cdnvideo.ru|chartbeat.com|chatango.com|chatbro.com|chimpstatic.com|cloudflare.com|cloudflare.net|cloudfront.net|code.createjs.com|columbus.te.ua|cultserv.ru|disqus.com|disquscdn.com|dmca.com|each.im|ebacdn.com|edgecastcdn.net|ellinagraypel.com|embed.ex.co|embed.widgetpack.com|embedstorage.net|eurosolidarity.org|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fbvkcdn.com|feonet.net|fluidplayer.com|fontawesome.com|fonts.w.tools|freecurrencyrates.com|fwcdn1.com|fwdcdn.com|gcdn.co|getsitecontrol.com|gismeteo.ru|gismeteo.ua|github.io|gitlab.io|google-analytics.com|google.com|googleadservices.com|googleapis.com|googleoptimize.com|googletagmanager.com|googletagservices.com|gravatar.com|gravitec.media|gravitec.net|gstatic.com|hcaptcha.com|hupso.com|hwcdn.net|hypercomments.com|ibytedtos.com|imgsmail.ru|imgur.com|informers.ukr.net|instagram.com|intensedebate.com|intercom.io|intercomcdn.com|intravideo.net|issuu.com|ivideon.com|jivosite.com|jquery.com|js-agent.newrelic.com|jsdelivr.net|jsonip.com|jwpcdn.com|jwplatform.com|keycaptcha.com|kin-x.com|kinogram.best|kinohod.ru|kinoplayer.co|kinotreiler.com|kitbit.net|kodik-add.com|kodikapi.com|libria.fun|licdn.com|likebtn.com|linkedin.com|lp4.io|luxnet.ua|mail.ru|mailchimp.com|mapbox.com|media-imdb.com|media.reformal.ru|mediator.media|meteobar.com|meteonova.ru|mirtesen.ru|netdna-cdn.com|ngenix.net|nuipogoda.ru|odnaknopka.ru|odnoklassniki.ru|ok.ru|oneall.com|onesignal.com|onthe.io|phnx.click|piktochart.com|pinterest.com|pixars.org|platformcraft.ru|playbuzz.com|player|player.panda.video|pljs.ru|plrjs.com|plyr.io|polldaddy.com|polyfill.io|pv.pjtsu.com|quiz.ink|raincaptcha.com|readymag.com|recaptcha.net|relap.io|renteres.ru|rumer.club|s5o.ru|securedtouch.com|selcdn.net|sendpulse.com|pluso.ru|shareaholic.com|shareaholic.net|sharethis.com|shrink.pe|sinoptik.ua|source.mmi.bemobile.ua|sporcle.com|sportradar.com|sportrecs.com|sports.ru|stackpathcdn.com|static.addtoany.com|statically.io|streamvid.club|telegram.im|telegram.org|tenews.org.ua|tenews.te.ua|tiktok.com|tilda.ws|tildacdn.com|tns-counter.ru|tolstoycomments.com|traq.li|trbcdn.net|trbna.com|ttrace.ru|tumblr.com|tvget.ru|tvsok.ru|twimg.com|twitter.com|typekit.net|uanews.org.ua|ui.ill.in.ua|unpkg.com|uptolike.com|userapi.com|usocial.pro|uweb.ru|vicomi.com|vidazoo.com|videocdn.tv|videoplayers.club|viglink.com|viqeo.tv|vk.com|vkontakte.ru|vuukle.com|widget.speechki.org|widget.vp.ru|widgets.getpocket.com|world-weather.ru|wp.com|yabber.cloud|yandex.ru|yandex.st|yastatic.net|yohoho.cc|yohoho.online|yoomoney.ru|youtube-nocookie.com|youtube.com|ytimg.com|zencdn.net)).*$ - regexFilter is not RE2-compatible: ^(?!.*(24liveblog.com|24liveplus.com|acint.net|addthis.com|addthisedge.com|akamai.net|akamaiedge.net|alloha.tv|ampproject.org|anycomment.io|apester.com|api-ssl.bitly.com|api.corr.life|api.here.com|api.sypexgeo.net|app.hoversignal.com|appsmail.ru|bam.nr-data.net|blogger.com|bootstrapcdn.com|cackle.me|cdn.ampproject.org|cdn.iframe.ly|cdn.rawgit.com|cdnstats.ru|cdnvideo.ru|chartbeat.com|chatango.com|chatbro.com|chimpstatic.com|cloudflare.com|cloudflare.net|cloudfront.net|code.createjs.com|columbus.te.ua|cultserv.ru|disqus.com|disquscdn.com|dmca.com|each.im|ebacdn.com|edgecastcdn.net|ellinagraypel.com|embed.ex.co|embed.widgetpack.com|embedstorage.net|eurosolidarity.org|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fbvkcdn.com|feonet.net|fluidplayer.com|fontawesome.com|fonts.w.tools|freecurrencyrates.com|fwcdn1.com|fwdcdn.com|gcdn.co|getsitecontrol.com|gismeteo.ru|gismeteo.ua|github.io|gitlab.io|google-analytics.com|google.com|googleadservices.com|googleapis.com|googleoptimize.com|googletagmanager.com|googletagservices.com|gravatar.com|gravitec.media|gravitec.net|gstatic.com|hcaptcha.com|hupso.com|hwcdn.net|hypercomments.com|ibytedtos.com|imgsmail.ru|imgur.com|informers.ukr.net|instagram.com|intensedebate.com|intercom.io|intercomcdn.com|intravideo.net|issuu.com|ivideon.com|jivosite.com|jquery.com|js-agent.newrelic.com|jsdelivr.net|jsonip.com|jwpcdn.com|jwplatform.com|keycaptcha.com|kin-x.com|kinogram.best|kinohod.ru|kinoplayer.co|kinotreiler.com|kitbit.net|kodik-add.com|kodikapi.com|libria.fun|licdn.com|likebtn.com|linkedin.com|lp4.io|luxnet.ua|mail.ru|mailchimp.com|mapbox.com|media-imdb.com|media.reformal.ru|mediator.media|meteobar.com|meteonova.ru|mirtesen.ru|netdna-cdn.com|ngenix.net|nuipogoda.ru|odnaknopka.ru|odnoklassniki.ru|ok.ru|oneall.com|onesignal.com|onthe.io|phnx.click|piktochart.com|pinterest.com|pixars.org|platformcraft.ru|playbuzz.com|player|player.panda.video|pljs.ru|plrjs.com|plyr.io|polldaddy.com|polyfill.io|pv.pjtsu.com|quiz.ink|raincaptcha.com|readymag.com|recaptcha.net|relap.io|renteres.ru|rumer.club|s5o.ru|securedtouch.com|selcdn.net|sendpulse.com|pluso.ru|shareaholic.com|shareaholic.net|sharethis.com|shrink.pe|sinoptik.ua|source.mmi.bemobile.ua|sporcle.com|sportradar.com|sportrecs.com|sports.ru|stackpathcdn.com|static.addtoany.com|statically.io|streamvid.club|telegram.im|telegram.org|tenews.org.ua|tenews.te.ua|tiktok.com|tilda.ws|tildacdn.com|tns-counter.ru|tolstoycomments.com|traq.li|trbcdn.net|trbna.com|ttrace.ru|tumblr.com|tvget.ru|tvsok.ru|twimg.com|twitter.com|typekit.net|uanews.org.ua|ui.ill.in.ua|unpkg.com|uptolike.com|userapi.com|usocial.pro|uweb.ru|vicomi.com|vidazoo.com|videocdn.tv|videoplayers.club|viglink.com|viqeo.tv|vk.com|vkontakte.ru|vuukle.com|widget.speechki.org|widget.vp.ru|widgets.getpocket.com|world-weather.ru|wp.com|yabber.cloud|yandex.ru|yandex.st|yastatic.net|yohoho.cc|yohoho.online|yoomoney.ru|youtube-nocookie.com|youtube.com|ytimg.com|zencdn.net)).*$ - regexFilter is not RE2-compatible: ^(?!.*(24liveblog.com|24liveplus.com|acint.net|addthis.com|addthisedge.com|akamai.net|akamaiedge.net|alloha.tv|ampproject.org|anycomment.io|apester.com|api-ssl.bitly.com|api.corr.life|api.here.com|api.sypexgeo.net|app.hoversignal.com|appsmail.ru|bam.nr-data.net|blogger.com|bootstrapcdn.com|cackle.me|cdn.ampproject.org|cdn.iframe.ly|cdn.rawgit.com|cdnstats.ru|cdnvideo.ru|chartbeat.com|chatango.com|chatbro.com|chimpstatic.com|cloudflare.com|cloudflare.net|cloudfront.net|code.createjs.com|columbus.te.ua|cultserv.ru|disqus.com|disquscdn.com|dmca.com|each.im|ebacdn.com|edgecastcdn.net|ellinagraypel.com|embed.ex.co|embed.widgetpack.com|embedstorage.net|eurosolidarity.org|facebook.com|facebook.net|fastly.net|fastlylb.net|fbcdn.net|fbvkcdn.com|feonet.net|fluidplayer.com|fontawesome.com|fonts.w.tools|freecurrencyrates.com|fwcdn1.com|fwdcdn.com|gcdn.co|getsitecontrol.com|gismeteo.ru|gismeteo.ua|github.io|gitlab.io|google-analytics.com|google.com|googleadservices.com|googleapis.com|googleoptimize.com|googletagmanager.com|googletagservices.com|gravatar.com|gravitec.media|gravitec.net|gstatic.com|hcaptcha.com|hupso.com|hwcdn.net|hypercomments.com|ibytedtos.com|imgsmail.ru|imgur.com|informers.ukr.net|instagram.com|intensedebate.com|intercom.io|intercomcdn.com|intravideo.net|issuu.com|ivideon.com|jivosite.com|jquery.com|js-agent.newrelic.com|jsdelivr.net|jsonip.com|jwpcdn.com|jwplatform.com|keycaptcha.com|kin-x.com|kinogram.best|kinohod.ru|kinoplayer.co|kinotreiler.com|kitbit.net|kodik-add.com|kodikapi.com|libria.fun|licdn.com|likebtn.com|linkedin.com|lp4.io|luxnet.ua|mail.ru|mailchimp.com|mapbox.com|media-imdb.com|media.reformal.ru|mediator.media|meteobar.com|meteonova.ru|mirtesen.ru|netdna-cdn.com|ngenix.net|nuipogoda.ru|odnaknopka.ru|odnoklassniki.ru|ok.ru|oneall.com|onesignal.com|onthe.io|phnx.click|piktochart.com|pinterest.com|pixars.org|platformcraft.ru|playbuzz.com|player|player.panda.video|pljs.ru|plrjs.com|plyr.io|polldaddy.com|polyfill.io|pv.pjtsu.com|quiz.ink|raincaptcha.com|readymag.com|recaptcha.net|relap.io|renteres.ru|rumer.club|s5o.ru|securedtouch.com|selcdn.net|sendpulse.com|pluso.ru|shareaholic.com|shareaholic.net|sharethis.com|shrink.pe|sinoptik.ua|source.mmi.bemobile.ua|sporcle.com|sportradar.com|sportrecs.com|sports.ru|stackpathcdn.com|static.addtoany.com|statically.io|streamvid.club|telegram.im|telegram.org|tenews.org.ua|tenews.te.ua|tiktok.com|tilda.ws|tildacdn.com|tns-counter.ru|tolstoycomments.com|traq.li|trbcdn.net|trbna.com|ttrace.ru|tumblr.com|tvget.ru|tvsok.ru|twimg.com|twitter.com|typekit.net|uanews.org.ua|ui.ill.in.ua|unpkg.com|uptolike.com|userapi.com|usocial.pro|uweb.ru|vicomi.com|vidazoo.com|videocdn.tv|videoplayers.club|viglink.com|viqeo.tv|vk.com|vkontakte.ru|vuukle.com|widget.speechki.org|widget.vp.ru|widgets.getpocket.com|world-weather.ru|wp.com|yabber.cloud|yandex.ru|yandex.st|yastatic.net|yohoho.cc|yohoho.online|yoomoney.ru|youtube-nocookie.com|youtube.com|ytimg.com|zencdn.net)).*$ - Unsupported modifier exception - Unsupported regex-based removeParam: /autostart|skin_name/ -CSS-generic: 307 plain CSS selectors -CSS-specific domain-based: 9546 distinct filters - Combined into 5248 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 21 - 03ekqt0, 1ppp6cg, 1esn388, 0l1akf0, 105j3ko, 1kc6hds, 1s014fg, 0cu7530, 09ip7hg, 18d7gao, 0u1ta3c, 03fhumc, 1utmnf8, 0e16f84, 14g86bk, 127gd48, 0kf8b64, 0j6ghrg, 1lv97vg, 18slghk, 1krql2c -Declarative-related distinct filters: 499 distinct combined selectors -Procedural-related distinct filters: 221 distinct combined selectors -Discarded unsupported scriptlet filter: +js(cookie-remover, /^bda|^bltsr/) -Discarded unsupported scriptlet filter: +js(cookie-remover, /^bltsr$|^JPIqApiY$|^specific$|^substantial$/) -Discarded unsupported scriptlet filter: +js(cookie-remover, /adblock_/) -Discarded unsupported scriptlet filter: +js(cookie-remover, amedia_is_online) -Discarded unsupported scriptlet filter: +js(cookie-remover, isab) -Discarded unsupported scriptlet filter: +js(cookie-remover, yadb) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, #timer) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, .numcard) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, .time) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, .track-download__timer) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, countdown) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, download_timer) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, js-game-loader-block, 1000, 0.0001) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, ks_counter) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, p) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, timer) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, , 30000, 0.0001) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, timer) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, zat_tick) -Discarded unsupported scriptlet filter: +js(noeval-if, ShadowRoot) -Discarded unsupported scriptlet filter: +js(remove-attr, autoplay, [data-video-player="small"], stay) -Discarded unsupported scriptlet filter: +js(remove-attr, autoplay, video, stay) -Discarded unsupported scriptlet filter: +js(remove-attr, autoplay|loop, .watch-live__link > video, stay) -Discarded unsupported scriptlet filter: +js(remove-attr, autoplay|loop, video, stay) -Discarded unsupported scriptlet filter: +js(remove-attr, class, .js-video-box__container) -Discarded unsupported scriptlet filter: +js(remove-attr, class, [data-igrozhur-promo]) -Discarded unsupported scriptlet filter: +js(remove-attr, data-autoplay, video) -Discarded unsupported scriptlet filter: +js(remove-attr, data-video-play-mode) -Discarded unsupported scriptlet filter: +js(remove-attr, disabled, .uk-modal-footer > button) -Discarded unsupported scriptlet filter: +js(remove-attr, oncontextmenu, [class], stay) -Discarded unsupported scriptlet filter: +js(remove-attr, oncontextmenu|oncopy|onselectstart) -Discarded unsupported scriptlet filter: +js(remove-attr, target, a[href*="#rcmrclid"], stay) -Discarded unsupported scriptlet filter: +js(remove-class, b-global-branding, html) -Discarded unsupported scriptlet filter: +js(remove-class, has-fullscreen-banner|has-right-direct, .public__root, stay) -Discarded unsupported scriptlet filter: +js(remove-class, noscroll, body) -Discarded unsupported scriptlet filter: +js(window-close-if, /dispatch) -Discarded unsupported scriptlet filter: +js(abort-on-stack-trace, Object.prototype.crossDomain, ecbrStart) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 261 -Scriptlet-related injectable files: 10 - rus-0.abort-current-script.js, rus-0.abort-on-property-read.js, rus-0.abort-on-property-write.js, rus-0.no-addeventlistener-if.js, rus-0.json-prune.js, rus-0.no-setinterval-if.js, rus-0.no-settimeout-if.js, rus-0.no-xhr-if.js, rus-0.set-constant.js, rus-0.no-windowopen-if.js -Discarded unsupported scriptlet filter: +js(abort-on-stack-trace, Object.prototype.parallax, window.onload) -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 4 - rus-0.abort-current-script.js, rus-0.set-constant.js, rus-0.abort-on-property-read.js, rus-0.no-settimeout-if.js -============================ -Listset for 'spa-0': - Fetching remote https://easylist-downloads.adblockplus.org/easylistspanish.txt -Input filter count: 1189 - Accepted filter count: 1189 - Rejected filter count: 0 -Output rule count: 692 - Plain good: 684 - Maybe good (regexes): 7 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 1 - Invalid network filter in spa-0: $webrtc,domain=allpeliculas.com|booksmedicos.org|dompl3.info|gnula.biz|jkanime.net|pelispedia.tv -CSS-generic: 236 plain CSS selectors -CSS-specific domain-based: 1312 distinct filters - Combined into 791 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 4 - 1561jrc, 1q56os4, 0nvhl3k, 0rnmck0 -Procedural-related distinct filters: 20 distinct combined selectors -============================ -Listset for 'spa-1': - Fetching remote https://filters.adtidy.org/extension/ublock/filters/9.txt -Input filter count: 1456 - Accepted filter count: 1451 - Rejected filter count: 0 -Output rule count: 965 - Plain good: 930 - Maybe good (regexes): 6 - redirect=: 25 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 4 - Could not salvage rule with only entity-based domain= option: netcine.* - Could not salvage rule with only entity-based domain= option: netcine.* - regexFilter is not RE2-compatible: ^(?!.*(bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com)).*$ - Could not salvage rule with only entity-based domain= option: anitube.* -Rejected cosmetic filters: 1 - Entity-based filter not supported: .featured-slides > li.slide:not([id]):has(a[href^="https://startgaming.net/"]) -CSS-generic: 81 plain CSS selectors -CSS-specific domain-based: 2074 distinct filters - Combined into 1101 distinct entries -CSS-specific entity-based: 7 distinct filters - Combined into 4 distinct entries -CSS-specific injectable files: 6 - 12ka5u4, 143h6gs, 0tl0atg, 0j0r95s, 1n13og8, spa-1 -Declarative-related distinct filters: 73 distinct combined selectors -Procedural-related distinct filters: 116 distinct combined selectors -Discarded unsupported scriptlet filter: +js(remove-class, _theme-banner-upper, html) -Discarded unsupported scriptlet filter: +js(remove-attr, href, a[href^="https://adalites.site/"]) -Discarded unsupported scriptlet filter: +js(remove-class, bgPartners2019, .videoContainer > div.beachPartners + div) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, videoliberado, *, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, .style.display, *, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, player, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, PLAYER, *, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, liberaDownload, *, 0.02) -Discarded unsupported scriptlet filter: +js(remove-class, hided, #framed > div) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, Loading player, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, contador, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, Loading..., , 0.02) -Discarded unsupported scriptlet filter: +js(remove-class, hided, div#player) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, PLAYER LIBERADO, 10000, 0.02) -Discarded unsupported scriptlet filter: +js(remove-attr, href, a[href]#clickfakeplayer) -Discarded unsupported scriptlet filter: +js(noeval-if, _impspcabe) -Discarded unsupported scriptlet filter: +js(remove-attr, href, .leaving-message center > a.btn[onclick^="window.open"][href*="/ads.html"]) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 126 -Scriptlet-related injectable files: 10 - spa-1.abort-current-script.js, spa-1.set-constant.js, spa-1.no-fetch-if.js, spa-1.abort-on-property-read.js, spa-1.no-settimeout-if.js, spa-1.no-xhr-if.js, spa-1.abort-on-property-write.js, spa-1.no-addeventlistener-if.js, spa-1.no-windowopen-if.js, spa-1.json-prune.js -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, adsHandle_noclick, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, redirect, *, 0.02) -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 4 - spa-1.set-constant.js, spa-1.no-windowopen-if.js, spa-1.abort-on-property-read.js, spa-1.abort-current-script.js -============================ -Listset for 'svn-0': - Fetching remote https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt -Input filter count: 148 - Accepted filter count: 148 - Rejected filter count: 0 -Output rule count: 103 - Plain good: 103 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -CSS-generic: 4 plain CSS selectors -CSS-specific domain-based: 349 distinct filters - Combined into 167 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 0qj9l9s -Procedural-related distinct filters: 2 distinct combined selectors -============================ -Listset for 'swe-1': - Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Frellwits-Swedish-Filter.txt - Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Swedish/swe-ubo-filters.txt - Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Swedish/chromium.txt - Fetching remote https://raw.githubusercontent.com/lassekongo83/Frellwits-filter-lists/master/Swedish/not_mobile.txt -Input filter count: 1539 - Accepted filter count: 1539 - Rejected filter count: 0 -Output rule count: 1165 - Plain good: 1145 - Maybe good (regexes): 2 - redirect=: 9 - removeparams= (accepted/discarded): 3/3 - csp=: 2 - Unsupported: 4 - Unsupported regex-based removeParam: /^ap/ - Unsupported regex-based removeParam: /^browser/ - Unsupported regex-based removeParam: /^utm_/ - Invalid network filter in swe-1: ||maxetise.net^$redirect-rule=noop.js,script,domain=feber.se|tjock.se -CSS-generic: 143 plain CSS selectors -CSS-specific domain-based: 646 distinct filters - Combined into 601 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 3 - 01jl3qc, 00ogd6o, 1kqmsbs -Declarative-related distinct filters: 62 distinct combined selectors -Procedural-related distinct filters: 211 distinct combined selectors -Discarded unsupported scriptlet filter: +js(rc, smartbanner-show) -Discarded unsupported scriptlet filter: +js(cookie-remover, page-views) -Discarded unsupported scriptlet filter: +js(rc, closed) -Discarded unsupported scriptlet filter: +js(ra, data-auto-play,,stay) -Discarded unsupported scriptlet filter: +js(nano-sib, dt_fullpage_ad) -Discarded unsupported scriptlet filter: +js(ra, data-auto-play) -Discarded unsupported scriptlet filter: +js(rc, advert-take-over-active) -Discarded unsupported scriptlet filter: +js(rc, no-scroll) -Discarded unsupported scriptlet filter: +js(rc, modal-cacsp-open,,stay) -Discarded unsupported scriptlet filter: +js(ra, data-autoplay, video, stay) -Discarded unsupported scriptlet filter: +js(ra, autoplay) -Discarded unsupported scriptlet filter: +js(rc, modal-open) -Discarded unsupported scriptlet filter: +js(rc, mega-loading, body) -Discarded unsupported scriptlet filter: +js(cookie-remover, lmt) -Discarded unsupported scriptlet filter: +js(rc, with-ads) -Discarded unsupported scriptlet filter: +js(noeval-if, Math.round) -Discarded unsupported scriptlet filter: +js(ra, onclick, [onclick^="ANAL"]) -Discarded unsupported scriptlet filter: +js(noeval) -Discarded unsupported scriptlet filter: +js(cookie-remover, /^ev_did|ev_sid/) -Discarded unsupported scriptlet filter: +js(ra, oncontextmenu) -Discarded unsupported scriptlet filter: +js(rc, cli-barmodal-open) -Discarded unsupported scriptlet filter: +js(rc, layout--locked) -Discarded unsupported scriptlet filter: +js(rc, takeover-loading, body) -Discarded unsupported scriptlet filter: +js(ra, data-start-in-view) -Discarded unsupported scriptlet filter: +js(ra, data-t-label) -Discarded unsupported scriptlet filter: +js(ra, data-t-type) -Discarded unsupported scriptlet filter: +js(ra, data-jsarwt) -Discarded unsupported scriptlet filter: +js(ra, onmousedown|ping, a[href][onmousedown]\, a[href][ping]) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 71 -Scriptlet-related injectable files: 9 - swe-1.no-settimeout-if.js, swe-1.json-prune.js, swe-1.abort-current-script.js, swe-1.no-addeventlistener-if.js, swe-1.no-xhr-if.js, swe-1.set-constant.js, swe-1.abort-on-property-write.js, swe-1.no-setinterval-if.js, swe-1.abort-on-property-read.js -============================ -Listset for 'tha-0': - Fetching remote https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/easylist-thailand.txt - Fetching remote https://raw.githubusercontent.com/easylist-thailand/easylist-thailand/master/subscription/ublock.txt -Input filter count: 764 - Accepted filter count: 764 - Rejected filter count: 0 -Output rule count: 753 - Plain good: 748 - Maybe good (regexes): 3 - redirect=: 2 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -CSS-specific domain-based: 614 distinct filters - Combined into 179 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 1 - 01f249s -Procedural-related distinct filters: 11 distinct combined selectors -Discarded unsupported scriptlet filter: +js(nano-sib, #close_preload, 1000, 0) -Discarded unsupported scriptlet filter: +js(ra, style, .viddeo > .video__) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 3 -Scriptlet-related injectable files: 3 - tha-0.abort-on-property-read.js, tha-0.set-constant.js, tha-0.json-prune.js -============================ -Listset for 'tur-0': - Fetching remote https://filters.adtidy.org/extension/ublock/filters/13.txt -Input filter count: 1662 - Accepted filter count: 1661 - Rejected filter count: 0 -Output rule count: 1240 - Plain good: 1203 - Maybe good (regexes): 13 - redirect=: 16 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 8 - Could not salvage rule with only entity-based domain= option: jetfilmizle.* - Could not salvage rule with only entity-based domain= option: siyahfilmizle.* - Could not salvage rule with only entity-based domain= option: fullhdfilmizlesene.* - Could not salvage rule with only entity-based domain= option: filmmakinesi.* - regexFilter is not RE2-compatible: yenihaberden.com\/d\/other\/(?!yeni-haber-youtube) - Could not salvage rule with only entity-based domain= option: yabancidizi.* - regexFilter is not RE2-compatible: ^(?!.*(bootstrapcdn.com|cdn.ampproject.org|cloudflare.com|cdn.staticfile.org|disqus.com|disquscdn.com|dmca.com|ebacdn.com|facebook.net|fastlylb.net|fbcdn.net|fluidplayer.com|fontawesome.com|github.io|google.com|googleapis.com|googletagmanager.com|gstatic.com|jquery.com|jsdelivr.net|jwpcdn.com|jwplatform.com|polyfill.io|recaptcha.net|shrink.pe|twitter.com|ulogin.ru|unpkg.com|userapi.com|vidazoo.com|vk.com|yandex.|yastatic.net|ytimg.com|zencdn.net|player|youtube.com|cackle.me|googleoptimize.com|vuukle.com|chatango.com|twimg.com|google-analytics.com|hcaptcha.com|raincaptcha.com|media-imdb.com|blogger.com|hwcdn.net|instagram.com|wp.com)).*$ - Invalid network filter in tur-0: ||diziyoucdn.xyz/*.mp4$media,redirect-rule=noop-1s.mp4 -Rejected cosmetic filters: 18 - Entity-based filter not supported: .video-content > div[id^="welcomeDiv"]:remove() - Entity-based filter not supported: .content-container .fw_playerAlti:has(> a[target="_blank"]) - Entity-based filter not supported: .side-box > .fw_playerYaniKat2Ustu:has(> iframe[src*="filmizletv."][src*="/sidrek.htm"]) - Entity-based filter not supported: #contenedor > div[class*="onceki"]:has(> center > iframe[src^="https://www.diziyo."][src*="/rklm/"]) - Entity-based filter not supported: #sol > #embed:has(iframe) ~ #video-onu2:remove() - Entity-based filter not supported: .rek-0:remove() - Entity-based filter not supported: .col.pr-0 > div[class="bg-dt2"]:has(> a[href][target="_blank"]) - Entity-based filter not supported: body:style(margin-top: 0 !important;) - Entity-based filter not supported: header.container:style(margin-top: 0 !important;) - Entity-based filter not supported: .wrapper:style(margin-top: 0 !important;) - Entity-based filter not supported: div.duyuru-izle.duyuru-izle:style(margin-top: 20px !important;) - Entity-based filter not supported: div.orta[style^="margin-top:"]:not(.izle):style(margin-top: 131px !important;) - Entity-based filter not supported: div.orta.izle[style^="margin-top:"]:not(#style_important):style(margin-top: 180px !important;) - Entity-based filter not supported: #mysite:style(margin-top: 0 !important;) - Entity-based filter not supported: div[style="float: left; width: calc(100% - 300px);"]:style(width: 100% !important;) - Entity-based filter not supported: .previd-link:style(visibility: hidden!important;) - Entity-based filter not supported: #episode:style(height: unset !important; width: unset !important; position: unset !important; overflow: unset !important;) - Entity-based filter not supported: html > body:style(background-image: none !important;) -CSS-generic: 107 plain CSS selectors -CSS-specific domain-based: 2957 distinct filters - Combined into 1535 distinct entries -CSS-specific entity-based: 91 distinct filters - Combined into 42 distinct entries -CSS-specific injectable files: 7 - 18cvsv4, 1ngbafo, 1jlejvo, 020f21k, 1mrj2ro, 0599jsc, tur-0 -Declarative-related distinct filters: 119 distinct combined selectors -Procedural-related distinct filters: 237 distinct combined selectors -Discarded unsupported scriptlet filter: +js(remove-attr, data-money, div[data-money]) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, reklam, *, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, timeleft, *, 0.02) -Discarded unsupported scriptlet filter: +js(remove-attr, href, .watch > a[href]) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, timer) -Discarded unsupported scriptlet filter: +js(remove-attr, placeholder, input[id="search-textbox"]) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, /HivePlayer|grounderstext/, *, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, timer, 900, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setTimeout-booster, ifsrc, 2000, 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster) -Discarded unsupported scriptlet filter: +js(remove-class, is-ad-visible) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, , 1000) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 93 -Scriptlet-related injectable files: 11 - tur-0.no-settimeout-if.js, tur-0.set-constant.js, tur-0.no-xhr-if.js, tur-0.no-fetch-if.js, tur-0.abort-on-property-read.js, tur-0.abort-current-script.js, tur-0.abort-on-property-write.js, tur-0.no-addeventlistener-if.js, tur-0.no-windowopen-if.js, tur-0.json-prune.js, tur-0.no-setinterval-if.js -Discarded unsupported scriptlet filter: +js(remove-attr, data-money, div[data-money]) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, money--skip, , 0.02) -Discarded unsupported scriptlet filter: +js(nano-setInterval-booster, window.money_interval) -Discarded unsupported scriptlet filter: +js(json-prune, style, maxActive) -Rejected scriptlet filters: 0 - -Scriptlet-related entity-based injectable files: 4 - tur-0.set-constant.js, tur-0.no-addeventlistener-if.js, tur-0.abort-on-property-read.js, tur-0.no-windowopen-if.js -============================ -Listset for 'vie-1': - Fetching remote https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn_ublock.txt -Input filter count: 723 - Accepted filter count: 723 - Rejected filter count: 0 -Output rule count: 558 - Plain good: 549 - Maybe good (regexes): 3 - redirect=: 4 - removeparams= (accepted/discarded): 0/0 - csp=: 2 - Unsupported: 0 - -Rejected cosmetic filters: 1 - Invalid filter: m.blogtruyen.vn##.mb10.item:-abp-has(a[href^="https://www.vb135.com/"]) -CSS-generic: 9 plain CSS selectors -CSS-specific domain-based: 772 distinct filters - Combined into 406 distinct entries -CSS-specific entity-based: 0 distinct filters - Combined into 0 distinct entries -CSS-specific injectable files: 2 - 0t1hkjs, 1va6b04 -Declarative-related distinct filters: 2 distinct combined selectors -Procedural-related distinct filters: 1 distinct combined selectors -Discarded unsupported scriptlet filter: +js(ra, target|onclick, a[href^="/video/"]) -Rejected scriptlet filters: 0 - -Scriptlet-related distinct filters: 46 -Scriptlet-related injectable files: 9 - vie-1.abort-current-script.js, vie-1.abort-on-property-read.js, vie-1.no-addeventlistener-if.js, vie-1.abort-on-property-write.js, vie-1.no-fetch-if.js, vie-1.no-settimeout-if.js, vie-1.set-constant.js, vie-1.json-prune.js, vie-1.no-xhr-if.js -============================ -Listset for 'block-lan': - Fetching remote https://ublockorigin.github.io/uAssets/filters/lan-block.txt -Input filter count: 44 - Accepted filter count: 44 - Rejected filter count: 0 -Output rule count: 10 - Plain good: 4 - Maybe good (regexes): 6 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -============================ -Listset for 'dpollock-0': - Fetching remote https://someonewhocares.org/hosts/hosts -Input filter count: 11397 - Accepted filter count: 11397 - Rejected filter count: 0 -Output rule count: 1 - Plain good: 1 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -============================ -Listset for 'adguard-spyware-url': - Fetching remote https://filters.adtidy.org/extension/ublock/filters/17.txt -Input filter count: 861 - Accepted filter count: 860 - Rejected filter count: 0 -Output rule count: 322 - Plain good: 0 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 254/68 - csp=: 0 - Unsupported: 68 - Unsupported regex-based removeParam: /^__s=[A-Za-z0-9]{6\,}/ - Unsupported regex-based removeParam: /^event_callback_/ - Unsupported regex-based removeParam: /elq/ - Unsupported regex-based removeParam: /utm_/ - Unsupported regex-based removeParam: /web_only|_branch_referrer/ - Unsupported regex-based removeParam: /premiumVisit|utm_compaign/ - Unsupported regex-based removeParam: /utm_partner_id|frommail/ - Unsupported regex-based removeParam: /^(udid|DeviceID|ver|appbuild|vendor|model|device_name|device_type|instanceid|device_year|connection_class|appsflyerid)/ - Unsupported regex-based removeParam: /^cd\d+/ - Unsupported regex-based removeParam: /^subid/ - Unsupported regex-based removeParam: /^mkt_tok/ - Unsupported regex-based removeParam: /fx_(source|medium|campaign)/ - Unsupported regex-based removeParam: /^ref_/ - Unsupported regex-based removeParam: /^cx_/ - Unsupported regex-based removeParam: /^pickup_list_click/ - Unsupported regex-based removeParam: /distributorid|wfr|ifr|share_relation/ - Unsupported regex-based removeParam: /cUrl|ref/ - Unsupported regex-based removeParam: /topicPageSponsorship|^itm_/ - Unsupported regex-based removeParam: /^utm_/ - Unsupported regex-based removeParam: /^trk/ - Unsupported regex-based removeParam: /^utm_cid/ - Unsupported regex-based removeParam: /entries/ - Unsupported regex-based removeParam: /Version/ - Unsupported regex-based removeParam: /^at_custom/ - Unsupported regex-based removeParam: /mcorgid|mid|ts/ - Unsupported regex-based removeParam: /^dc_trk_/ - Unsupported regex-based removeParam: /^(ppref|ref|pid)=/ - Unsupported regex-based removeParam: /^subid/ - Unsupported regex-based removeParam: /^(_requestid|reff)=/ - Unsupported regex-based removeParam: /^affExtParam/ - Unsupported regex-based removeParam: /^otracker/ - Unsupported regex-based removeParam: /spm=|scm=|from=|keyori=|sugg=|search=|mp=|c=|^abtest|^abbucket|pos=|themeID=|algArgs=|clickTrackInfo=|acm=|item_id=|version=|up_id=|pvid=/ - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported modifier exception - Unsupported regex-based removeParam: /^\/_ui\/desktop\/common\/js\/uiAnalytics\// - Unsupported regex-based removeParam: /_ui\/shared\/common\/js\/analytics\/with-intersection-track.js/ - Unsupported regex-based removeParam: /_ui\/shared\/common\/js\/InappCommunicationManager.js/ - Unsupported regex-based removeParam: /_ui\/shared\/common\/js\/util\/jquery.analytics-utils.js/ - Unsupported regex-based removeParam: /cdt|ref/ - Unsupported regex-based removeParam: ~/^(primer|subset_id)=/ - Unsupported modifier exception -============================ -Listset for 'cname-trackers': - Fetching remote https://raw.githubusercontent.com/AdguardTeam/cname-trackers/master/combined_disguised_trackers.txt -Input filter count: 31427 - Accepted filter count: 31427 - Rejected filter count: 0 -Output rule count: 4 - Plain good: 4 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - -============================ -Listset for 'stevenblack-hosts': - Fetching remote https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts -Input filter count: 166011 - Accepted filter count: 166011 - Rejected filter count: 0 -Output rule count: 2 - Plain good: 2 - Maybe good (regexes): 0 - redirect=: 0 - removeparams= (accepted/discarded): 0/0 - csp=: 0 - Unsupported: 0 - diff -Nru ublock-origin-1.46.0+dfsg/dist/mv3/publish-beta.py ublock-origin-1.62.0+dfsg/dist/mv3/publish-beta.py --- ublock-origin-1.46.0+dfsg/dist/mv3/publish-beta.py 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/mv3/publish-beta.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,196 +0,0 @@ -#!/usr/bin/env python3 - -import datetime -import json -import os -import re -import requests -import shutil -import subprocess -import sys -import tempfile -import time -import zipfile - -from distutils.version import StrictVersion -from string import Template - -# - Download target (raw) uBOLite_*.mv3.zip from GitHub -# - This is referred to as "raw" package -# - This will fail if not a dev build -# - Upload uBOLite_*.mv3.zip to Chrome store -# - Publish uBOLite_*.mv3.zip to Chrome store - -# Find path to project root -projdir = os.path.split(os.path.abspath(__file__))[0] -while not os.path.isdir(os.path.join(projdir, '.git')): - projdir = os.path.normpath(os.path.join(projdir, '..')) - -# We need a version string to work with -if len(sys.argv) >= 2 and sys.argv[1]: - version = sys.argv[1] -else: - version = input('Github release version: ') -version.strip() -if not re.search('^uBOLite_\d+\.\d+\.\d+\.\d+$', version): - print('Error: Invalid version string.') - exit(1) - -cs_extension_id = 'ddkjiahejlhfcafbddmgiahcphecmpfh' -tmpdir = tempfile.TemporaryDirectory() -raw_zip_filename = '' -raw_zip_filepath = '' -github_owner = 'gorhill' -github_repo = 'uBlock' - -# Load/save auth secrets -# The build directory is excluded from git -ubo_secrets = dict() -ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets') -if os.path.isfile(ubo_secrets_filename): - with open(ubo_secrets_filename) as f: - ubo_secrets = json.load(f) - -def input_secret(prompt, token): - if token in ubo_secrets: - prompt += ' ✔' - prompt += ': ' - value = input(prompt).strip() - if len(value) == 0: - if token not in ubo_secrets: - print('Token error:', token) - exit(1) - value = ubo_secrets[token] - elif token not in ubo_secrets or value != ubo_secrets[token]: - ubo_secrets[token] = value - exists = os.path.isfile(ubo_secrets_filename) - with open(ubo_secrets_filename, 'w') as f: - json.dump(ubo_secrets, f, indent=2) - if not exists: - os.chmod(ubo_secrets_filename, 0o600) - return value - - -# GitHub API token -github_token = input_secret('Github token', 'github_token') -github_auth = 'token ' + github_token - -# -# Get metadata from GitHub about the release -# - -# https://developer.github.com/v3/repos/releases/#get-a-single-release -print('Downloading release info from GitHub...') -release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version) -headers = { 'Authorization': github_auth, } -response = requests.get(release_info_url, headers=headers) -if response.status_code != 200: - print('Error: Release not found: {0}'.format(response.status_code)) - exit(1) -release_info = response.json() - -# -# Extract URL to raw package from metadata -# - -# Find url for uBOLite_*.mv3.zip -raw_zip_url = '' -for asset in release_info['assets']: - if re.search('uBOLite_\d+.\d+.\d+.\d+.mv3.zip', asset['name']): - raw_zip_url = asset['url'] - raw_zip_filename = asset['name'] - raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename) -if len(raw_zip_url) == 0: - print('Error: Release asset URL not found') - exit(1) -if len(raw_zip_filepath) == 0: - print('Error: Invalid release asset file not set') - exit(1) - -# -# Download raw package from GitHub -# - -# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset -print('Downloading raw zip package from GitHub...') -headers = { - 'Authorization': github_auth, - 'Accept': 'application/octet-stream', -} -response = requests.get(raw_zip_url, headers=headers) -# Redirections are transparently handled: -# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history -if response.status_code != 200: - print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code)) - exit(1) -with open(raw_zip_filepath, 'wb') as f: - f.write(response.content) -print('Downloaded raw package saved as {0}'.format(raw_zip_filepath)) - -# -# Upload to Chrome store -# - -# Auth tokens -cs_id = input_secret('Chrome store id', 'cs_id') -cs_secret = input_secret('Chrome store secret', 'cs_secret') -cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh') - -print('Uploading to Chrome store...') -with open(raw_zip_filepath, 'rb') as f: - print('Generating access token...') - auth_url = 'https://accounts.google.com/o/oauth2/token' - auth_payload = { - 'client_id': cs_id, - 'client_secret': cs_secret, - 'grant_type': 'refresh_token', - 'refresh_token': cs_refresh, - } - auth_response = requests.post(auth_url, data=auth_payload) - if auth_response.status_code != 200: - print('Error: Auth failed -- server error {0}'.format(auth_response.status_code)) - print(auth_response.text) - exit(1) - response_dict = auth_response.json() - if 'access_token' not in response_dict: - print('Error: Auth failed -- no access token') - exit(1) - # Prepare access token - cs_auth = 'Bearer ' + response_dict['access_token'] - headers = { - 'Authorization': cs_auth, - 'x-goog-api-version': '2', - } - # Upload - print('Uploading package...') - upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id) - upload_response = requests.put(upload_url, headers=headers, data=f) - f.close() - if upload_response.status_code != 200: - print('Upload failed -- server error {0}'.format(upload_response.status_code)) - print(upload_response.text) - exit(1) - response_dict = upload_response.json(); - if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS': - print('Upload failed -- server error {0}'.format(response_dict['uploadState'])) - exit(1) - print('Upload succeeded.') - # Publish - print('Publishing package...') - publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id) - headers = { - 'Authorization': cs_auth, - 'x-goog-api-version': '2', - 'Content-Length': '0', - } - publish_response = requests.post(publish_url, headers=headers) - if publish_response.status_code != 200: - print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code)) - exit(1) - response_dict = publish_response.json(); - if 'status' not in response_dict or response_dict['status'][0] != 'OK': - print('Publishing failed -- server error {0}'.format(response_dict['status'])) - exit(1) - print('Publishing succeeded.') - -print('All done.') diff -Nru ublock-origin-1.46.0+dfsg/dist/version ublock-origin-1.62.0+dfsg/dist/version --- ublock-origin-1.46.0+dfsg/dist/version 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/dist/version 2025-02-09 18:18:39.000000000 +0000 @@ -1 +1 @@ -1.46.0 +1.62.0 \ No newline at end of file diff -Nru ublock-origin-1.46.0+dfsg/platform/browser/main.js ublock-origin-1.62.0+dfsg/platform/browser/main.js --- ublock-origin-1.46.0+dfsg/platform/browser/main.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/browser/main.js 2025-02-09 18:18:39.000000000 +0000 @@ -29,7 +29,7 @@ import staticNetFilteringEngine from './js/static-net-filtering.js'; import { FilteringContext } from './js/filtering-context.js'; import { LineIterator } from './js/text-utils.js'; -import { StaticFilteringParser } from './js/static-filtering-parser.js'; +import * as sfp from './js/static-filtering-parser.js'; import { CompiledListReader, @@ -40,10 +40,11 @@ function compileList(rawText, writer) { const lineIter = new LineIterator(rawText); - const parser = new StaticFilteringParser(true); - const compiler = staticNetFilteringEngine.createCompiler(parser); - - parser.setMaxTokenLength(staticNetFilteringEngine.MAX_TOKEN_LENGTH); + const parser = new sfp.AstFilterParser({ + interactive: true, + maxTokenLength: staticNetFilteringEngine.MAX_TOKEN_LENGTH, + }); + const compiler = staticNetFilteringEngine.createCompiler(); while ( lineIter.eot() === false ) { let line = lineIter.next(); @@ -52,13 +53,10 @@ if ( lineIter.peek(4) !== ' ' ) { break; } line = line.slice(0, -2).trim() + lineIter.next().trim(); } - parser.analyze(line); + parser.parse(line); - if ( parser.shouldIgnore() ) { continue; } - if ( parser.category !== parser.CATStaticNetFilter ) { continue; } - if ( parser.patternHasUnicode() && parser.toASCII() === false ) { - continue; - } + if ( parser.isFilter() === false ) { continue; } + if ( parser.isNetworkFilter() === false ) { continue; } if ( compiler.compile(parser, writer) ) { continue; } if ( compiler.error !== undefined ) { console.info(JSON.stringify({ diff -Nru ublock-origin-1.46.0+dfsg/platform/chromium/is-webrtc-supported.js ublock-origin-1.62.0+dfsg/platform/chromium/is-webrtc-supported.js --- ublock-origin-1.46.0+dfsg/platform/chromium/is-webrtc-supported.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/chromium/is-webrtc-supported.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2015 Raymond Hill This program is free software: you can redistribute it and/or modify @@ -21,7 +21,7 @@ // https://github.com/gorhill/uBlock/issues/533#issuecomment-164292868 // If WebRTC is supported, there won't be an exception if we -// try to instanciate a peer connection object. +// try to instantiate a peer connection object. // https://github.com/gorhill/uBlock/issues/533#issuecomment-168097594 // Because Chromium leaks WebRTC connections after they have been closed diff -Nru ublock-origin-1.46.0+dfsg/platform/chromium/manifest.json ublock-origin-1.62.0+dfsg/platform/chromium/manifest.json --- ublock-origin-1.46.0+dfsg/platform/chromium/manifest.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/chromium/manifest.json 2025-02-09 18:18:39.000000000 +0000 @@ -6,7 +6,8 @@ "browser_action": { "default_icon": { "16": "img/icon_16.png", - "32": "img/icon_32.png" + "32": "img/icon_32.png", + "64": "img/icon_64.png" }, "default_title": "uBlock Origin", "default_popup": "popup-fenix.html" @@ -29,6 +30,9 @@ }, "toggle-cosmetic-filtering": { "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" } }, "content_scripts": [ @@ -53,14 +57,25 @@ "https://filterlists.com/*", "https://forums.lanik.us/*", "https://github.com/*", - "https://*.github.io/*", - "https://*.letsblock.it/*" + "https://*.github.io/*" ], "js": [ "/js/scriptlets/subscriber.js" ], "run_at": "document_idle", "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false } ], "content_security_policy": "script-src 'self'; object-src 'self'", @@ -74,13 +89,14 @@ }, "incognito": "split", "manifest_version": 2, - "minimum_chrome_version": "66.0", + "minimum_chrome_version": "80.0", "name": "uBlock Origin", "options_ui": { "page": "dashboard.html", "open_in_tab": true }, "permissions": [ + "alarms", "contextMenus", "privacy", "storage", diff -Nru ublock-origin-1.46.0+dfsg/platform/chromium/vapi-background-ext.js ublock-origin-1.62.0+dfsg/platform/chromium/vapi-background-ext.js --- ublock-origin-1.46.0+dfsg/platform/chromium/vapi-background-ext.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/chromium/vapi-background-ext.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2017-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,10 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -/* globals browser */ - -'use strict'; - /******************************************************************************/ // https://github.com/uBlockOrigin/uBlock-issues/issues/1659 @@ -90,76 +86,47 @@ ['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image'] ]); - const headerValue = (headers, name) => { - let i = headers.length; - while ( i-- ) { - if ( headers[i].name.toLowerCase() === name ) { - return headers[i].value.trim(); - } - } - return ''; - }; - const parsedURL = new URL('https://www.example.org/'); - // Extend base class to normalize as per platform. + // Extend base class to normalize as per platform vAPI.Net = class extends vAPI.Net { - constructor() { - super(); - this.suspendedTabIds = new Set(); - } - normalizeDetails(details) { // Chromium 63+ supports the `initiator` property, which contains - // the URL of the origin from which the network request was made. - if ( - typeof details.initiator === 'string' && - details.initiator !== 'null' - ) { + // the URL of the origin from which the network request was made + if ( details.initiator && details.initiator !== 'null' ) { details.documentUrl = details.initiator; } - - let type = details.type; - + const type = details.type; if ( type === 'imageset' ) { details.type = 'image'; return; } - - // The rest of the function code is to normalize type if ( type !== 'other' ) { return; } - - // Try to map known "extension" part of URL to request type. - parsedURL.href = details.url; - const path = parsedURL.pathname, - pos = path.indexOf('.', path.length - 6); - if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) { - details.type = type; + // Try to map known "extension" part of URL to request type + if ( details.responseHeaders === undefined ) { + parsedURL.href = details.url; + const path = parsedURL.pathname; + const pos = path.indexOf('.', path.length - 6); + if ( pos !== -1 ) { + details.type = extToTypeMap.get(path.slice(pos + 1)) || type; + } return; } - - // Try to extract type from response headers if present. - if ( details.responseHeaders ) { - type = headerValue(details.responseHeaders, 'content-type'); - if ( type.startsWith('font/') ) { - details.type = 'font'; - return; - } - if ( type.startsWith('image/') ) { - details.type = 'image'; - return; - } - if ( type.startsWith('audio/') || type.startsWith('video/') ) { - details.type = 'media'; - return; - } + // Try to extract type from response headers + const ctype = this.headerValue(details.responseHeaders, 'content-type'); + if ( ctype.startsWith('font/') ) { + details.type = 'font'; + } else if ( ctype.startsWith('image/') ) { + details.type = 'image'; + } else if ( ctype.startsWith('audio/') || ctype.startsWith('video/') ) { + details.type = 'media'; } } // https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/ // Some types can be mapped from 'other', thus include 'other' if and - // only if the caller is interested in at least one of those types. + // only if the caller is interested in at least one of those types denormalizeTypes(types) { if ( types.length === 0 ) { return Array.from(this.validTypes); @@ -184,20 +151,21 @@ // https://github.com/uBlockOrigin/uBlock-issues/issues/2063 // Do not interfere with root document suspendOneRequest(details) { - this.suspendedTabIds.add(details.tabId); + this.onBeforeSuspendableRequest(details); if ( details.type === 'main_frame' ) { return; } - return { - redirectUrl: vAPI.getURL(`web_accessible_resources/empty?secret=${vAPI.warSecret()}`) - }; + return { cancel: true }; } unsuspendAllRequests(discard = false) { - if ( discard !== true ) { - for ( const tabId of this.suspendedTabIds ) { - vAPI.tabs.reload(tabId); - } + if ( discard === true ) { return; } + const toReload = []; + for ( const tabId of this.unprocessedTabs.keys() ) { + toReload.push(tabId); + } + this.removeUnprocessedRequest(); + for ( const tabId of toReload ) { + vAPI.tabs.reload(tabId); } - this.suspendedTabIds.clear(); } }; } @@ -240,19 +208,43 @@ /******************************************************************************/ -vAPI.scriptletsInjector = ((doc, scriptlets) => { - let script; - try { - script = doc.createElement('script'); - script.appendChild(doc.createTextNode(scriptlets)); - (doc.head || doc.documentElement).appendChild(script); - self.uBO_scriptletsInjected = true; - } catch (ex) { - } - if ( script ) { - script.remove(); - script.textContent = ''; - } -}).toString(); +vAPI.scriptletsInjector = (( ) => { + const parts = [ + '(', + function(details) { + if ( typeof self.uBO_scriptletsInjected === 'string' ) { return; } + const doc = document; + const { location } = doc; + if ( location === null ) { return; } + const { hostname } = location; + if ( hostname !== '' && details.hostname !== hostname ) { return; } + let script; + try { + script = doc.createElement('script'); + script.appendChild(doc.createTextNode(details.scriptlets)); + (doc.head || doc.documentElement).appendChild(script); + self.uBO_scriptletsInjected = details.filters; + } catch (ex) { + } + if ( script ) { + script.remove(); + script.textContent = ''; + } + return 0; + }.toString(), + ')(', + 'json-slot', + ');', + ]; + const jsonSlot = parts.indexOf('json-slot'); + return (hostname, details) => { + parts[jsonSlot] = JSON.stringify({ + hostname, + scriptlets: details.mainWorld, + filters: details.filters, + }); + return parts.join(''); + }; +})(); /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/chromium/webext.js ublock-origin-1.62.0+dfsg/platform/chromium/webext.js --- ublock-origin-1.46.0+dfsg/platform/chromium/webext.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/chromium/webext.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2019-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,41 +19,56 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - // `webext` is a promisified api of `chrome`. Entries are added as // the promisification of uBO progress. const promisifyNoFail = function(thisArg, fnName, outFn = r => r) { const fn = thisArg[fnName]; - return function() { + return function(...args) { return new Promise(resolve => { - fn.call(thisArg, ...arguments, function() { - if ( chrome.runtime.lastError instanceof Object ) { - void chrome.runtime.lastError.message; - } - resolve(outFn(...arguments)); - }); + try { + fn.call(thisArg, ...args, function(...args) { + void chrome.runtime.lastError; + resolve(outFn(...args)); + }); + } catch(ex) { + console.error(ex); + resolve(outFn()); + } }); }; }; const promisify = function(thisArg, fnName) { const fn = thisArg[fnName]; - return function() { + return function(...args) { return new Promise((resolve, reject) => { - fn.call(thisArg, ...arguments, function() { - const lastError = chrome.runtime.lastError; - if ( lastError instanceof Object ) { - return reject(lastError.message); - } - resolve(...arguments); - }); + try { + fn.call(thisArg, ...args, function(...args) { + const lastError = chrome.runtime.lastError; + if ( lastError instanceof Object ) { + return reject(lastError.message); + } + resolve(...args); + }); + } catch(ex) { + console.error(ex); + resolve(); + } }); }; }; const webext = { + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/alarms + alarms: { + clear: promisifyNoFail(chrome.alarms, 'clear'), + clearAll: promisifyNoFail(chrome.alarms, 'clearAll'), + create: promisifyNoFail(chrome.alarms, 'create'), + get: promisifyNoFail(chrome.alarms, 'get'), + getAll: promisifyNoFail(chrome.alarms, 'getAll'), + onAlarm: chrome.alarms.onAlarm, + }, // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction browserAction: { setBadgeBackgroundColor: promisifyNoFail(chrome.browserAction, 'setBadgeBackgroundColor'), @@ -95,6 +110,7 @@ query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []), reload: promisifyNoFail(chrome.tabs, 'reload'), remove: promisifyNoFail(chrome.tabs, 'remove'), + sendMessage: promisifyNoFail(chrome.tabs, 'sendMessage'), update: promisifyNoFail(chrome.tabs, 'update', tab => tab instanceof Object ? tab : null), }, // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation diff -Nru ublock-origin-1.46.0+dfsg/platform/common/vapi-background.js ublock-origin-1.62.0+dfsg/platform/common/vapi-background.js --- ublock-origin-1.46.0+dfsg/platform/common/vapi-background.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/common/vapi-background.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-2015 The uBlock Origin authors Copyright (C) 2014-present Raymond Hill @@ -22,14 +22,10 @@ // For background page -/* globals browser */ - -'use strict'; - /******************************************************************************/ -import webext from './webext.js'; import { ubolog } from './console.js'; +import webext from './webext.js'; /******************************************************************************/ @@ -42,11 +38,14 @@ vAPI.canWASM = vAPI.webextFlavor.soup.has('chromium') === false; if ( vAPI.canWASM === false ) { const csp = manifest.content_security_policy; - vAPI.canWASM = csp !== undefined && csp.indexOf("'unsafe-eval'") !== -1; + vAPI.canWASM = csp !== undefined && csp.indexOf("'wasm-unsafe-eval'") !== -1; } vAPI.supportsUserStylesheets = vAPI.webextFlavor.soup.has('user_stylesheet'); +const hasOwnProperty = (o, p) => + Object.prototype.hasOwnProperty.call(o, p); + /******************************************************************************/ vAPI.app = { @@ -88,9 +87,85 @@ }; /******************************************************************************/ -/******************************************************************************/ -vAPI.storage = webext.storage.local; +// Generate segments of random six alphanumeric characters, thus one segment +// is a value out of 36^6 = over 2x10^9 values. + +vAPI.generateSecret = (size = 1) => { + let secret = ''; + while ( size-- ) { + secret += (Math.floor(Math.random() * 2176782336) + 2176782336).toString(36).slice(1); + } + return secret; +}; + +/******************************************************************************* + * + * https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/storage/session + * + * Session (in-memory) storage is promise-based in all browsers, no need for + * a webext polyfill. However, not all browsers supports it in MV2. + * + * */ + +vAPI.sessionStorage = browser.storage.session || { + get() { + return Promise.resolve(); + }, + set() { + return Promise.resolve(); + }, + remove() { + return Promise.resolve(); + }, + clear() { + return Promise.resolve(); + }, + unavailable: true, +}; + +/******************************************************************************* + * + * Data written to and read from storage.local will be mirrored to in-memory + * storage.session. + * + * Data read from storage.local will be first fetched from storage.session, + * then if not available, read from storage.local. + * + * */ + +vAPI.storage = { + get(key, ...args) { + return webext.storage.local.get(key, ...args).catch(reason => { + console.log(reason); + }); + }, + set(...args) { + return webext.storage.local.set(...args).catch(reason => { + console.log(reason); + }); + }, + remove(...args) { + return webext.storage.local.remove(...args).catch(reason => { + console.log(reason); + }); + }, + clear(...args) { + return webext.storage.local.clear(...args).catch(reason => { + console.log(reason); + }); + }, + QUOTA_BYTES: browser.storage.local.QUOTA_BYTES, +}; + +// Not all platforms support getBytesInUse +if ( webext.storage.local.getBytesInUse instanceof Function ) { + vAPI.storage.getBytesInUse = function(...args) { + return webext.storage.local.getBytesInUse(...args).catch(reason => { + console.log(reason); + }); + }; +} /******************************************************************************/ /******************************************************************************/ @@ -115,9 +190,9 @@ set: function(details) { for ( const setting in details ) { - if ( details.hasOwnProperty(setting) === false ) { continue; } + if ( hasOwnProperty(details, setting) === false ) { continue; } switch ( setting ) { - case 'prefetching': + case 'prefetching': { const enabled = !!details[setting]; if ( enabled ) { bp.network.networkPredictionEnabled.clear({ @@ -133,9 +208,9 @@ vAPI.prefetching(enabled); } break; - - case 'hyperlinkAuditing': - if ( !!details[setting] ) { + } + case 'hyperlinkAuditing': { + if ( details[setting] ) { bp.websites.hyperlinkAuditingEnabled.clear({ scope: 'regular', }); @@ -146,7 +221,7 @@ }); } break; - + } case 'webrtcIPAddress': { // https://github.com/uBlockOrigin/uBlock-issues/issues/1928 // https://www.reddit.com/r/uBlockOrigin/comments/sl7p74/ @@ -211,6 +286,12 @@ this.onCreatedNavigationTargetHandler(details); }); browser.webNavigation.onCommitted.addListener(details => { + const { frameId, tabId } = details; + if ( frameId === 0 && tabId > 0 && details.transitionType === 'reload' ) { + if ( vAPI.net && vAPI.net.hasUnprocessedRequest(tabId) ) { + vAPI.net.removeUnprocessedRequest(tabId); + } + } this.onCommittedHandler(details); }); browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { @@ -227,14 +308,17 @@ }); } browser.tabs.onRemoved.addListener((tabId, details) => { + if ( vAPI.net && vAPI.net.hasUnprocessedRequest(tabId) ) { + vAPI.net.removeUnprocessedRequest(tabId); + } this.onRemovedHandler(tabId, details); }); - } + } - async executeScript() { + async executeScript(...args) { let result; try { - result = await webext.tabs.executeScript(...arguments); + result = await webext.tabs.executeScript(...args); } catch(reason) { } @@ -348,22 +432,26 @@ // For some reasons, some platforms do not honor the left,top // position when specified. I found that further calling // windows.update again with the same position _may_ help. + // + // https://github.com/uBlockOrigin/uBlock-issues/issues/2249 + // Mind that the creation of the popup window might fail. if ( details.popup !== undefined && vAPI.windows instanceof Object ) { - const createDetails = { + const basicDetails = { url: details.url, type: details.popup, }; - if ( details.box instanceof Object ) { - Object.assign(createDetails, details.box); - } - const win = await vAPI.windows.create(createDetails); - if ( win === null ) { return; } - if ( details.box instanceof Object === false ) { return; } - if ( - win.left === details.box.left && - win.top === details.box.top - ) { - return; + const shouldRestorePosition = details.box instanceof Object; + const extraDetails = shouldRestorePosition + ? Object.assign({}, basicDetails, details.box) + : basicDetails; + const win = await vAPI.windows.create(extraDetails); + if ( win === null ) { + if ( shouldRestorePosition === false ) { return; } + return vAPI.windows.create(basicDetails); + } + if ( shouldRestorePosition === false ) { return; } + if ( win.left === details.box.left ) { + if ( win.top === details.box.top ) { return; } } vAPI.windows.update(win.id, { left: details.box.left, @@ -459,7 +547,7 @@ targetURL = vAPI.getURL(targetURL); } - vAPI.tabs.update(tabId, { url: targetURL }); + return vAPI.tabs.update(tabId, { url: targetURL }); } async remove(tabId) { @@ -668,14 +756,20 @@ // https://github.com/uBlockOrigin/uBlock-issues/issues/32 // Ensure ImageData for toolbar icon is valid before use. -vAPI.setIcon = (( ) => { +{ const browserAction = vAPI.browserAction; - const titleTemplate = - browser.runtime.getManifest().browser_action.default_title + - ' ({badge})'; + const titleTemplate = `${browser.runtime.getManifest().browser_action.default_title} ({badge})`; const icons = [ - { path: { '16': 'img/icon_16-off.png', '32': 'img/icon_32-off.png' } }, - { path: { '16': 'img/icon_16.png', '32': 'img/icon_32.png' } }, + { path: { + '16': 'img/icon_16-off.png', + '32': 'img/icon_32-off.png', + '64': 'img/icon_64-off.png', + } }, + { path: { + '16': 'img/icon_16.png', + '32': 'img/icon_32.png', + '64': 'img/icon_64.png', + } }, ]; (( ) => { @@ -702,9 +796,8 @@ const imgs = []; for ( let i = 0; i < icons.length; i++ ) { - const path = icons[i].path; - for ( const key in path ) { - if ( path.hasOwnProperty(key) === false ) { continue; } + for ( const key of Object.keys(icons[i].path) ) { + if ( parseInt(key, 10) >= 64 ) { continue; } imgs.push({ i: i, p: key, cached: false }); } } @@ -765,14 +858,18 @@ // bit 2 = badge color // bit 3 = hide badge - return async function(tabId, details) { + vAPI.setIcon = async function(tabId, details) { tabId = toTabId(tabId); if ( tabId === 0 ) { return; } const tab = await vAPI.tabs.get(tabId); if ( tab === null ) { return; } - const { parts, state, badge, color } = details; + const hasUnprocessedRequest = vAPI.net && vAPI.net.hasUnprocessedRequest(tabId); + const { parts, state } = details; + const { badge, color } = hasUnprocessedRequest + ? { badge: '!', color: '#FC0' } + : details; if ( browserAction.setIcon !== undefined ) { if ( parts === undefined || (parts & 0b0001) !== 0 ) { @@ -795,20 +892,32 @@ // - the platform does not support browserAction.setIcon(); OR // - the rendering of the badge is disabled if ( browserAction.setTitle !== undefined ) { - browserAction.setTitle({ - tabId: tab.id, - title: titleTemplate.replace( - '{badge}', - state === 1 ? (badge !== '' ? badge : '0') : 'off' - ) - }); + const title = titleTemplate.replace('{badge}', + state === 1 ? (badge !== '' ? badge : '0') : 'off' + ); + browserAction.setTitle({ tabId: tab.id, title }); } if ( vAPI.contextMenu instanceof Object ) { vAPI.contextMenu.onMustUpdate(tabId); } }; -})(); + + vAPI.setDefaultIcon = function(flavor, text) { + if ( browserAction.setIcon === undefined ) { return; } + browserAction.setIcon({ + path: { + '16': `img/icon_16${flavor}.png`, + '32': `img/icon_32${flavor}.png`, + '64': `img/icon_64${flavor}.png`, + } + }); + browserAction.setBadgeText({ text }); + browserAction.setBadgeBackgroundColor({ + color: text === '!' ? '#FC0' : '#666' + }); + }; +} browser.browserAction.onClicked.addListener(function(tab) { vAPI.tabs.open({ @@ -849,6 +958,7 @@ onPortDisconnect: function(port) { this.ports.delete(port.name); + void browser.runtime.lastError; }, // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/Port @@ -906,71 +1016,11 @@ } }, - broadcast: function(message) { - const messageWrapper = { broadcast: true, msg: message }; - for ( const { port } of this.ports.values() ) { - try { - port.postMessage(messageWrapper); - } catch(ex) { - this.onPortDisconnect(port); - } - } - if ( this.defaultHandler ) { - this.defaultHandler(message, null, ( ) => { }); - } - }, - onFrameworkMessage: function(request, port, callback) { const portDetails = this.ports.get(port.name) || {}; const tabId = portDetails.tabId; const msg = request.msg; switch ( msg.what ) { - case 'connectionAccepted': - case 'connectionRefused': { - const toPort = this.ports.get(msg.fromToken); - if ( toPort !== undefined ) { - msg.tabId = tabId; - toPort.port.postMessage(request); - } else { - msg.what = 'connectionBroken'; - port.postMessage(request); - } - break; - } - case 'connectionRequested': - msg.tabId = tabId; - for ( const { port: toPort } of this.ports.values() ) { - if ( toPort === port ) { continue; } - try { - toPort.postMessage(request); - } catch (ex) { - this.onPortDisconnect(toPort); - } - } - break; - case 'connectionBroken': - case 'connectionCheck': - case 'connectionMessage': { - const toPort = this.ports.get( - port.name === msg.fromToken ? msg.toToken : msg.fromToken - ); - if ( toPort !== undefined ) { - msg.tabId = tabId; - toPort.port.postMessage(request); - } else { - msg.what = 'connectionBroken'; - port.postMessage(request); - } - break; - } - case 'extendClient': - vAPI.tabs.executeScript(tabId, { - file: '/js/vapi-client-extra.js', - frameId: portDetails.frameId, - }).then(( ) => { - callback(); - }); - break; case 'localStorage': { if ( portDetails.privileged !== true ) { break; } const args = msg.args || []; @@ -979,7 +1029,7 @@ }); break; } - case 'userCSS': + case 'userCSS': { if ( tabId === undefined ) { break; } const promises = []; if ( msg.add ) { @@ -1010,6 +1060,9 @@ }); break; } + default: + break; + } }, // Use a wrapper to avoid closure and to allow reuse. @@ -1106,24 +1159,24 @@ // https://github.com/uBlockOrigin/uBlock-issues/issues/550 // Support using a new secret for every network request. -vAPI.warSecret = (( ) => { - const generateSecret = ( ) => { - return Math.floor(Math.random() * 982451653 + 982451653).toString(36); - }; - +{ const root = vAPI.getURL('/'); - const secrets = []; - let lastSecretTime = 0; - - const guard = function(details) { - const url = details.url; - const pos = secrets.findIndex(secret => - url.lastIndexOf(`?secret=${secret}`) !== -1 - ); - if ( pos === -1 ) { - return { cancel: true }; - } - secrets.splice(pos, 1); + const reSecret = /\?secret=(\w+)/; + const shortSecrets = []; + let lastShortSecretTime = 0; + + // Long secrets are valid until revoked or uBO restarts. The realm is one + // value out of 36^18 = over 10^28 values. + const longSecrets = new Set(); + + const guard = details => { + const match = reSecret.exec(details.url); + if ( match === null ) { return { cancel: true }; } + const secret = match[1]; + if ( longSecrets.has(secret) ) { return; } + const pos = shortSecrets.indexOf(secret); + if ( pos === -1 ) { return { cancel: true }; } + shortSecrets.splice(pos, 1); }; browser.webRequest.onBeforeRequest.addListener( @@ -1134,20 +1187,30 @@ [ 'blocking' ] ); - return ( ) => { - if ( secrets.length !== 0 ) { - if ( (Date.now() - lastSecretTime) > 5000 ) { - secrets.splice(0); - } else if ( secrets.length > 256 ) { - secrets.splice(0, secrets.length - 192); + vAPI.warSecret = { + short: ( ) => { + if ( shortSecrets.length !== 0 ) { + if ( (Date.now() - lastShortSecretTime) > 5000 ) { + shortSecrets.splice(0); + } else if ( shortSecrets.length > 256 ) { + shortSecrets.splice(0, shortSecrets.length - 192); + } } - } - lastSecretTime = Date.now(); - const secret = generateSecret(); - secrets.push(secret); - return secret; + lastShortSecretTime = Date.now(); + const secret = vAPI.generateSecret(); + shortSecrets.push(secret); + return secret; + }, + long: previous => { + if ( previous !== undefined ) { + longSecrets.delete(previous); + } + const secret = vAPI.generateSecret(3); + longSecrets.add(secret); + return secret; + }, }; -})(); +} /******************************************************************************/ @@ -1157,14 +1220,16 @@ { const wrrt = browser.webRequest.ResourceType; for ( const typeKey in wrrt ) { - if ( wrrt.hasOwnProperty(typeKey) ) { + if ( hasOwnProperty(wrrt, typeKey) ) { this.validTypes.add(wrrt[typeKey]); } } } this.suspendableListener = undefined; + this.deferredSuspendableListener = undefined; this.listenerMap = new WeakMap(); this.suspendDepth = 0; + this.unprocessedTabs = new Map(); browser.webRequest.onBeforeRequest.addListener( details => { @@ -1177,6 +1242,8 @@ this.denormalizeFilters({ urls: [ 'http://*/*', 'https://*/*' ] }), [ 'blocking' ] ); + + vAPI.setDefaultIcon('-loading', ''); } setOptions(/* options */) { } @@ -1217,11 +1284,37 @@ ); } onBeforeSuspendableRequest(details) { - if ( this.suspendableListener === undefined ) { return; } - return this.suspendableListener(details); + if ( this.suspendableListener !== undefined ) { + return this.suspendableListener(details); + } + this.onUnprocessedRequest(details); } setSuspendableListener(listener) { + for ( const [ tabId, requests ] of this.unprocessedTabs ) { + let i = requests.length; + while ( i-- ) { + const r = listener(requests[i]); + if ( r === undefined || r.cancel !== true ) { + requests.splice(i, 1); + } + } + if ( requests.length !== 0 ) { continue; } + this.unprocessedTabs.delete(tabId); + } + if ( this.unprocessedTabs.size !== 0 ) { + this.deferredSuspendableListener = listener; + listener = details => { + const { tabId, type } = details; + if ( type === 'main_frame' && this.unprocessedTabs.has(tabId) ) { + if ( this.removeUnprocessedRequest(tabId) ) { + return this.suspendableListener(details); + } + } + return this.deferredSuspendableListener(details); + }; + } this.suspendableListener = listener; + vAPI.setDefaultIcon('', ''); } removeListener(which, clientListener) { const actualListener = this.listenerMap.get(clientListener); @@ -1237,6 +1330,41 @@ this.listenerMap.set(clientListener, actualListener); return actualListener; } + handlerBehaviorChanged() { + browser.webRequest.handlerBehaviorChanged(); + } + onUnprocessedRequest(details) { + const { tabId } = details; + if ( tabId === -1 ) { return; } + if ( this.unprocessedTabs.size === 0 ) { + vAPI.setDefaultIcon('-loading', '!'); + } + let requests = this.unprocessedTabs.get(tabId); + if ( requests === undefined ) { + this.unprocessedTabs.set(tabId, (requests = [])); + } + requests.push(Object.assign({}, details)); + } + hasUnprocessedRequest(tabId) { + if ( this.unprocessedTabs.size === 0 ) { return false; } + if ( tabId === undefined ) { return true; } + return this.unprocessedTabs.has(tabId); + } + removeUnprocessedRequest(tabId) { + if ( this.deferredSuspendableListener === undefined ) { + this.unprocessedTabs.clear(); + return true; + } + if ( tabId !== undefined ) { + this.unprocessedTabs.delete(tabId); + } else { + this.unprocessedTabs.clear(); + } + if ( this.unprocessedTabs.size !== 0 ) { return false; } + this.suspendableListener = this.deferredSuspendableListener; + this.deferredSuspendableListener = undefined; + return true; + } suspendOneRequest() { } unsuspendAllRequests() { @@ -1254,6 +1382,14 @@ if ( this.suspendDepth !== 0 ) { return; } this.unsuspendAllRequests(discard); } + headerValue(headers, name) { + for ( const header of headers ) { + if ( header.name.toLowerCase() === name ) { + return header.value.trim(); + } + } + return ''; + } static canSuspend() { return false; } @@ -1265,7 +1401,7 @@ // To be defined by platform-specific code. vAPI.scriptletsInjector = (( ) => { - self.uBO_scriptletsInjected = true; + self.uBO_scriptletsInjected = ''; }).toString(); /******************************************************************************/ @@ -1320,6 +1456,11 @@ // https://github.com/gorhill/uBlock/issues/900 // Also, UC Browser: http://www.upsieutoc.com/image/WXuH +// https://github.com/uBlockOrigin/uAssets/discussions/16939 +// Use a cached version of admin settings, such that there is no blocking +// call on `storage.managed`. The side effect is that any changes to admin +// settings will require an extra extension restart to take effect. + vAPI.adminStorage = (( ) => { if ( webext.storage.managed instanceof Object === false ) { return { @@ -1328,17 +1469,47 @@ }, }; } + const cacheManagedStorage = async ( ) => { + let store; + try { + store = await webext.storage.managed.get(); + } catch(ex) { + } + vAPI.storage.set({ cachedManagedStorage: store || {} }); + }; + return { get: async function(key) { let bin; try { - bin = await webext.storage.managed.get(key); + bin = await vAPI.storage.get('cachedManagedStorage') || {}; + if ( Object.keys(bin).length === 0 ) { + bin = await webext.storage.managed.get() || {}; + } else { + bin = bin.cachedManagedStorage; + } } catch(ex) { + bin = {}; + } + cacheManagedStorage(); + if ( key === undefined || key === null ) { + return bin; } if ( typeof key === 'string' && bin instanceof Object ) { return bin[key]; } - return bin; + const out = {}; + if ( Array.isArray(key) ) { + for ( const k of key ) { + if ( bin[k] === undefined ) { continue; } + out[k] = bin[k]; + } + return out; + } + for ( const [ k, v ] of Object.entries(key) ) { + out[k] = bin[k] !== undefined ? bin[k] : v; + } + return out; } }; })(); @@ -1359,17 +1530,14 @@ start: async function() { if ( this.cache instanceof Promise ) { return this.cache; } if ( this.cache instanceof Object ) { return this.cache; } - this.cache = webext.storage.local.get('localStorage').then(bin => { - this.cache = bin instanceof Object && - bin.localStorage instanceof Object - ? bin.localStorage - : {}; + this.cache = vAPI.storage.get('localStorage').then(bin => { + this.cache = bin && bin.localStorage || {}; }); return this.cache; }, clear: function() { this.cache = {}; - return webext.storage.local.set({ localStorage: this.cache }); + return vAPI.storage.set({ localStorage: this.cache }); }, getItem: function(key) { if ( this.cache instanceof Object === false ) { @@ -1391,7 +1559,7 @@ await this.start(); if ( value === this.cache[key] ) { return; } this.cache[key] = value; - return webext.storage.local.set({ localStorage: this.cache }); + return vAPI.storage.set({ localStorage: this.cache }); }, cache: undefined, }; @@ -1466,7 +1634,7 @@ try { bin = await webext.storage.sync.get(keys); } catch (reason) { - return reason; + return String(reason); } let chunkCount = 0; for ( let i = 0; i < maxChunkCountPerItem; i += 16 ) { @@ -1490,10 +1658,7 @@ const push = async function(details) { const { datakey, data, encode } = details; - if ( - data === undefined || - typeof data === 'string' && data === '' - ) { + if ( data === undefined || typeof data === 'string' && data === '' ) { return deleteChunks(datakey, 0); } const item = { @@ -1501,10 +1666,9 @@ tstamp: Date.now(), data, }; - const json = JSON.stringify(item); const encoded = encode instanceof Function - ? await encode(json) - : json; + ? await encode(item) + : JSON.stringify(item); // Chunkify taking into account QUOTA_BYTES_PER_ITEM: // https://developer.chrome.com/extensions/storage#property-sync @@ -1569,13 +1733,16 @@ i += 1; } encoded = encoded.join(''); - const json = decode instanceof Function - ? await decode(encoded) - : encoded; + let entry = null; try { - entry = JSON.parse(json); - } catch(ex) { + if ( decode instanceof Function ) { + entry = await decode(encoded) || null; + } + if ( typeof entry === 'string' ) { + entry = JSON.parse(entry); + } + } catch(_) { } return entry; }; @@ -1622,3 +1789,26 @@ })(); /******************************************************************************/ +/******************************************************************************/ + +vAPI.alarms = { + create(...args) { + webext.alarms.create(...args); + }, + createIfNotPresent(name, ...args) { + webext.alarms.get(name).then(details => { + if ( details !== undefined ) { return; } + webext.alarms.create(name, ...args); + }); + }, + async clear(...args) { + return webext.alarms.clear(...args); + }, + onAlarm: { + addListener(...args) { + webext.alarms.onAlarm.addListener(...args); + }, + }, +}; + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/common/vapi-client-extra.js ublock-origin-1.62.0+dfsg/platform/common/vapi-client-extra.js --- ublock-origin-1.46.0+dfsg/platform/common/vapi-client-extra.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/common/vapi-client-extra.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,312 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -// For non-background page - -'use strict'; - -/******************************************************************************/ - -// Direct messaging connection ability - -(( ) => { -// >>>>>>>> start of private namespace - -if ( - typeof vAPI !== 'object' || - vAPI.messaging instanceof Object === false || - vAPI.MessagingConnection instanceof Function -) { - return; -} - -const listeners = new Set(); -const connections = new Map(); - -vAPI.MessagingConnection = class { - constructor(handler, details) { - this.messaging = vAPI.messaging; - this.handler = handler; - this.id = details.id; - this.to = details.to; - this.toToken = details.toToken; - this.from = details.from; - this.fromToken = details.fromToken; - this.checkTimer = undefined; - // On Firefox it appears ports are not automatically disconnected - // when navigating to another page. - const ctor = vAPI.MessagingConnection; - if ( ctor.pagehide !== undefined ) { return; } - ctor.pagehide = ( ) => { - for ( const connection of connections.values() ) { - connection.disconnect(); - connection.handler( - connection.toDetails('connectionBroken') - ); - } - }; - window.addEventListener('pagehide', ctor.pagehide); - } - toDetails(what, payload) { - return { - what: what, - id: this.id, - from: this.from, - fromToken: this.fromToken, - to: this.to, - toToken: this.toToken, - payload: payload - }; - } - disconnect() { - if ( this.checkTimer !== undefined ) { - clearTimeout(this.checkTimer); - this.checkTimer = undefined; - } - connections.delete(this.id); - const port = this.messaging.getPort(); - if ( port === null ) { return; } - port.postMessage({ - channel: 'vapi', - msg: this.toDetails('connectionBroken'), - }); - } - checkAsync() { - if ( this.checkTimer !== undefined ) { - clearTimeout(this.checkTimer); - } - this.checkTimer = vAPI.setTimeout( - ( ) => { this.check(); }, - 499 - ); - } - check() { - this.checkTimer = undefined; - if ( connections.has(this.id) === false ) { return; } - const port = this.messaging.getPort(); - if ( port === null ) { return; } - port.postMessage({ - channel: 'vapi', - msg: this.toDetails('connectionCheck'), - }); - this.checkAsync(); - } - receive(details) { - switch ( details.what ) { - case 'connectionAccepted': - this.toToken = details.toToken; - this.handler(details); - this.checkAsync(); - break; - case 'connectionBroken': - connections.delete(this.id); - this.handler(details); - break; - case 'connectionMessage': - this.handler(details); - this.checkAsync(); - break; - case 'connectionCheck': - const port = this.messaging.getPort(); - if ( port === null ) { return; } - if ( connections.has(this.id) ) { - this.checkAsync(); - } else { - details.what = 'connectionBroken'; - port.postMessage({ channel: 'vapi', msg: details }); - } - break; - case 'connectionRefused': - connections.delete(this.id); - this.handler(details); - break; - } - } - send(payload) { - const port = this.messaging.getPort(); - if ( port === null ) { return; } - port.postMessage({ - channel: 'vapi', - msg: this.toDetails('connectionMessage', payload), - }); - } - - static addListener(listener) { - listeners.add(listener); - vAPI.messaging.getPort(); // Ensure a port instance exists - } - static removeListener(listener) { - listeners.delete(listener); - } - static connectTo(from, to, handler) { - const port = vAPI.messaging.getPort(); - if ( port === null ) { return; } - const connection = new vAPI.MessagingConnection(handler, { - id: `${from}-${to}-${vAPI.sessionId}`, - to: to, - from: from, - fromToken: port.name - }); - connections.set(connection.id, connection); - port.postMessage({ - channel: 'vapi', - msg: { - what: 'connectionRequested', - id: connection.id, - from: from, - fromToken: port.name, - to: to, - } - }); - return connection.id; - } - static disconnectFrom(connectionId) { - const connection = connections.get(connectionId); - if ( connection === undefined ) { return; } - connection.disconnect(); - } - static sendTo(connectionId, payload) { - const connection = connections.get(connectionId); - if ( connection === undefined ) { return; } - connection.send(payload); - } - static canDestroyPort() { - return listeners.length === 0 && connections.size === 0; - } - static mustDestroyPort() { - if ( connections.size === 0 ) { return; } - for ( const connection of connections.values() ) { - connection.receive({ what: 'connectionBroken' }); - } - connections.clear(); - } - static canProcessMessage(details) { - if ( details.channel !== 'vapi' ) { return; } - switch ( details.msg.what ) { - case 'connectionAccepted': - case 'connectionBroken': - case 'connectionCheck': - case 'connectionMessage': - case 'connectionRefused': { - const connection = connections.get(details.msg.id); - if ( connection === undefined ) { break; } - connection.receive(details.msg); - return true; - } - case 'connectionRequested': - if ( listeners.length === 0 ) { return; } - const port = vAPI.messaging.getPort(); - if ( port === null ) { break; } - let listener, result; - for ( listener of listeners ) { - result = listener(details.msg); - if ( result !== undefined ) { break; } - } - if ( result === undefined ) { break; } - if ( result === true ) { - details.msg.what = 'connectionAccepted'; - details.msg.toToken = port.name; - const connection = new vAPI.MessagingConnection( - listener, - details.msg - ); - connections.set(connection.id, connection); - } else { - details.msg.what = 'connectionRefused'; - } - port.postMessage(details); - return true; - default: - break; - } - } -}; - -vAPI.messaging.extensions.push(vAPI.MessagingConnection); - -// <<<<<<<< end of private namespace -})(); - -/******************************************************************************/ - -// Broadcast listening ability - -(( ) => { -// >>>>>>>> start of private namespace - -if ( - typeof vAPI !== 'object' || - vAPI.messaging instanceof Object === false || - vAPI.broadcastListener instanceof Object -) { - return; -} - -const listeners = new Set(); - -vAPI.broadcastListener = { - add: function(listener) { - listeners.add(listener); - vAPI.messaging.getPort(); - }, - remove: function(listener) { - listeners.delete(listener); - }, - canDestroyPort() { - return listeners.size === 0; - }, - mustDestroyPort() { - listeners.clear(); - }, - canProcessMessage(details) { - if ( details.broadcast === false ) { return; } - for ( const listener of listeners ) { - listener(details.msg); - } - }, -}; - -vAPI.messaging.extensions.push(vAPI.broadcastListener); - -// <<<<<<<< end of private namespace -})(); - -/******************************************************************************/ - - - - - - - - -/******************************************************************************* - - DO NOT: - - Remove the following code - - Add code beyond the following code - Reason: - - https://github.com/gorhill/uBlock/pull/3721 - - uBO never uses the return value from injected content scripts - -**/ - -void 0; diff -Nru ublock-origin-1.46.0+dfsg/platform/common/vapi-client.js ublock-origin-1.62.0+dfsg/platform/common/vapi-client.js --- ublock-origin-1.46.0+dfsg/platform/common/vapi-client.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/common/vapi-client.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-2015 The uBlock Origin authors Copyright (C) 2014-present Raymond Hill @@ -22,8 +22,6 @@ // For non-background page -'use strict'; - /******************************************************************************/ // https://github.com/chrisaljoudi/uBlock/issues/456 @@ -81,10 +79,9 @@ port: null, portTimer: null, portTimerDelay: 10000, - extended: undefined, - extensions: [], msgIdGenerator: 1, pending: new Map(), + waitStartTime: 0, shuttingDown: false, shutdown: function() { @@ -115,33 +112,16 @@ // revisited to isolate the picker dialog DOM from the page DOM. messageListener: function(details) { if ( typeof details !== 'object' || details === null ) { return; } - - // Response to specific message previously sent - if ( details.msgId !== undefined ) { - const resolver = this.pending.get(details.msgId); - if ( resolver !== undefined ) { - this.pending.delete(details.msgId); - resolver(details.msg); - return; - } - } - - // Unhandled messages - this.extensions.every(ext => ext.canProcessMessage(details) !== true); + if ( details.msgId === undefined ) { return; } + const resolver = this.pending.get(details.msgId); + if ( resolver === undefined ) { return; } + this.pending.delete(details.msgId); + resolver(details.msg); }, messageListenerBound: null, canDestroyPort: function() { - return this.pending.size === 0 && ( - this.extensions.length === 0 || - this.extensions.every(e => e.canDestroyPort()) - ); - }, - - mustDestroyPort: function() { - if ( this.extensions.length === 0 ) { return; } - this.extensions.forEach(e => e.mustDestroyPort()); - this.extensions.length = 0; + return this.pending.size === 0; }, portPoller: function() { @@ -166,7 +146,6 @@ port.onDisconnect.removeListener(this.disconnectListenerBound); this.port = null; } - this.mustDestroyPort(); // service pending callbacks if ( this.pending.size !== 0 ) { const pending = this.pending; @@ -216,13 +195,18 @@ // the main process is no longer reachable: memory leaks and bad // performance become a risk -- especially for long-lived, dynamic // pages. Guard against this. - if ( this.pending.size > 50 ) { - vAPI.shutdown.exec(); + if ( this.pending.size > 64 ) { + if ( (Date.now() - this.waitStartTime) > 60000 ) { + vAPI.shutdown.exec(); + } } const port = this.getPort(); if ( port === null ) { return Promise.resolve(); } + if ( this.pending.size === 0 ) { + this.waitStartTime = Date.now(); + } const msgId = this.msgIdGenerator++; const promise = new Promise(resolve => { this.pending.set(msgId, resolve); @@ -230,22 +214,6 @@ port.postMessage({ channel, msgId, msg }); return promise; }, - - // Dynamically extend capabilities. - // - // https://github.com/uBlockOrigin/uBlock-issues/issues/1571 - // Don't use `self` to access `vAPI`. - extend: function() { - if ( this.extended === undefined ) { - this.extended = vAPI.messaging.send('vapi', { - what: 'extendClient' - }).then(( ) => - typeof vAPI === 'object' && this.extensions.length !== 0 - ).catch(( ) => { - }); - } - return this.extended; - }, }; vAPI.shutdown.add(( ) => { diff -Nru ublock-origin-1.46.0+dfsg/platform/common/vapi-common.js ublock-origin-1.62.0+dfsg/platform/common/vapi-common.js --- ublock-origin-1.46.0+dfsg/platform/common/vapi-common.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/common/vapi-common.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-2015 The uBlock Origin authors Copyright (C) 2014-present Raymond Hill @@ -22,18 +22,123 @@ // For background page or non-background pages -/* global browser */ - -'use strict'; - -/******************************************************************************/ /******************************************************************************/ vAPI.T0 = Date.now(); +vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); + /******************************************************************************/ -vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self); +vAPI.defer = { + create(callback) { + return new this.Client(callback); + }, + once(delay, ...args) { + const delayInMs = vAPI.defer.normalizeDelay(delay); + return new Promise(resolve => { + vAPI.setTimeout( + (...args) => { resolve(...args); }, + delayInMs, + ...args + ); + }); + }, + Client: class { + constructor(callback) { + this.timer = null; + this.type = 0; + this.callback = callback; + } + on(delay, ...args) { + if ( this.timer !== null ) { return; } + const delayInMs = vAPI.defer.normalizeDelay(delay); + this.type = 0; + this.timer = vAPI.setTimeout(( ) => { + this.timer = null; + this.callback(...args); + }, delayInMs || 1); + } + offon(delay, ...args) { + this.off(); + this.on(delay, ...args); + } + onvsync(delay, ...args) { + if ( this.timer !== null ) { return; } + const delayInMs = vAPI.defer.normalizeDelay(delay); + if ( delayInMs !== 0 ) { + this.type = 0; + this.timer = vAPI.setTimeout(( ) => { + this.timer = null; + this.onraf(...args); + }, delayInMs); + } else { + this.onraf(...args); + } + } + onidle(delay, options, ...args) { + if ( this.timer !== null ) { return; } + const delayInMs = vAPI.defer.normalizeDelay(delay); + if ( delayInMs !== 0 ) { + this.type = 0; + this.timer = vAPI.setTimeout(( ) => { + this.timer = null; + this.onric(options, ...args); + }, delayInMs); + } else { + this.onric(options, ...args); + } + } + off() { + if ( this.timer === null ) { return; } + switch ( this.type ) { + case 0: + self.clearTimeout(this.timer); + break; + case 1: + self.cancelAnimationFrame(this.timer); + break; + case 2: + self.cancelIdleCallback(this.timer); + break; + default: + break; + } + this.timer = null; + } + onraf(...args) { + if ( this.timer !== null ) { return; } + this.type = 1; + this.timer = requestAnimationFrame(( ) => { + this.timer = null; + this.callback(...args); + }); + } + onric(options, ...args) { + if ( this.timer !== null ) { return; } + this.type = 2; + this.timer = self.requestIdleCallback(deadline => { + this.timer = null; + this.callback(deadline, ...args); + }, options); + } + ongoing() { + return this.timer !== null; + } + }, + normalizeDelay(delay = 0) { + if ( typeof delay === 'object' ) { + if ( delay.sec !== undefined ) { + return delay.sec * 1000; + } else if ( delay.min !== undefined ) { + return delay.min * 60000; + } else if ( delay.hr !== undefined ) { + return delay.hr * 3600000; + } + } + return delay; + } +}; /******************************************************************************/ @@ -45,6 +150,9 @@ } }; +// https://bugzilla.mozilla.org/show_bug.cgi?id=1858743 +// Add support for native `:has()` for Firefox 121+ + (( ) => { const ua = navigator.userAgent; const flavor = vAPI.webextFlavor; @@ -55,6 +163,7 @@ // This is always true. soup.add('ublock').add('webext'); + soup.add('ipaddress'); // Whether this is a dev build. if ( /^\d+\.\d+\.\d+\D/.test(browser.runtime.getManifest().version) ) { @@ -65,35 +174,24 @@ soup.add('mobile'); } - // Asynchronous - if ( - browser instanceof Object && - typeof browser.runtime.getBrowserInfo === 'function' - ) { - browser.runtime.getBrowserInfo().then(info => { - flavor.major = parseInt(info.version, 10) || flavor.major; - soup.add(info.vendor.toLowerCase()) - .add(info.name.toLowerCase()); - dispatch(); - }); - if ( browser.runtime.getURL('').startsWith('moz-extension://') ) { - soup.add('firefox') - .add('user_stylesheet') - .add('html_filtering'); - flavor.major = 91; - } - return; - } - - // Synchronous -- order of tests is important - const match = /\bChrom(?:e|ium)\/([\d.]+)/.exec(ua); - if ( match !== null ) { - soup.add('chromium') - .add('user_stylesheet'); - flavor.major = parseInt(match[1], 10) || 0; - if ( flavor.major >= 105 ) { - soup.add('native_css_has'); + if ( CSS.supports('selector(a:has(b))') ) { + soup.add('native_css_has'); + } + + // Order of tests is important + if ( browser.runtime.getURL('').startsWith('moz-extension://') ) { + soup.add('firefox') + .add('user_stylesheet') + .add('html_filtering'); + const match = /Firefox\/(\d+)/.exec(ua); + flavor.major = match && parseInt(match[1], 10) || 115; + } else { + const match = /\bChrom(?:e|ium)\/(\d+)/.exec(ua); + if ( match !== null ) { + soup.add('chromium') + .add('user_stylesheet'); } + flavor.major = match && parseInt(match[1], 10) || 120; } // Don't starve potential listeners diff -Nru ublock-origin-1.46.0+dfsg/platform/common/vapi.js ublock-origin-1.62.0+dfsg/platform/common/vapi.js --- ublock-origin-1.46.0+dfsg/platform/common/vapi.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/common/vapi.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2017-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,10 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - -/* global HTMLDocument, XMLDocument */ - // For background page, auxiliary pages, and content scripts. /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/dig/snfe.js ublock-origin-1.62.0+dfsg/platform/dig/snfe.js --- ublock-origin-1.46.0+dfsg/platform/dig/snfe.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/dig/snfe.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -28,8 +28,8 @@ import { strict as assert } from 'assert'; import { createRequire } from 'module'; -import { readFileSync, writeFileSync } from 'fs'; -import { dirname, resolve } from 'path'; +import { readFile, writeFile, mkdir } from 'fs/promises'; +import { dirname } from 'path'; import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -81,11 +81,12 @@ } async function read(path) { - return readFileSync(resolve(__dirname, path), 'utf8'); + return readFile(path, 'utf8'); } async function write(path, data) { - return writeFileSync(resolve(__dirname, path), data, 'utf8'); + await mkdir(dirname(path), { recursive: true }); + return writeFile(path, data, 'utf8'); } /******************************************************************************/ @@ -342,23 +343,19 @@ let start = process.hrtime.bigint(); await engine.useLists([ + read('assets/ublock/filters.min.txt') + .then(raw => ({ name: 'filters', raw })), read('assets/ublock/badware.txt') .then(raw => ({ name: 'badware', raw })), - read('assets/ublock/filters.txt') - .then(raw => ({ name: 'filters', raw })), - read('assets/ublock/filters-2020.txt') - .then(raw => ({ name: 'filters-2020', raw })), - read('assets/ublock/filters-2021.txt') - .then(raw => ({ name: 'filters-2021', raw })), - read('assets/ublock/privacy.txt') + read('assets/ublock/privacy.min.txt') .then(raw => ({ name: 'privacy', raw })), - read('assets/ublock/resource-abuse.txt') - .then(raw => ({ name: 'resource-abuse', raw })), + read('assets/ublock/quick-fixes.txt') + .then(raw => ({ name: 'quick-fixes.txt', raw })), read('assets/ublock/unbreak.txt') .then(raw => ({ name: 'unbreak.txt', raw })), - read('assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt') + read('assets/thirdparties/easylist/easylist.txt') .then(raw => ({ name: 'easylist', raw })), - read('assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt') + read('assets/thirdparties/easylist/easyprivacy.txt') .then(raw => ({ name: 'easyprivacy', raw })), read('assets/thirdparties/pgl.yoyo.org/as/serverlist') .then(raw => ({ name: 'PGL', raw })), diff -Nru ublock-origin-1.46.0+dfsg/platform/firefox/manifest.json ublock-origin-1.62.0+dfsg/platform/firefox/manifest.json --- ublock-origin-1.46.0+dfsg/platform/firefox/manifest.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/firefox/manifest.json 2025-02-09 18:18:39.000000000 +0000 @@ -5,9 +5,11 @@ }, "browser_action": { "browser_style": false, + "default_area": "navbar", "default_icon": { "16": "img/icon_16.png", - "32": "img/icon_32.png" + "32": "img/icon_32.png", + "64": "img/icon_64.png" }, "default_title": "uBlock Origin", "default_popup": "popup-fenix.html" @@ -15,7 +17,10 @@ "browser_specific_settings": { "gecko": { "id": "uBlock0@raymondhill.net", - "strict_min_version": "68.0" + "strict_min_version": "78.0" + }, + "gecko_android": { + "strict_min_version": "79.0" } }, "commands": { @@ -38,6 +43,9 @@ }, "toggle-cosmetic-filtering": { "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" } }, "content_scripts": [ @@ -63,14 +71,25 @@ "https://filterlists.com/*", "https://forums.lanik.us/*", "https://github.com/*", - "https://*.github.io/*", - "https://*.letsblock.it/*" + "https://*.github.io/*" ], "js": [ "/js/scriptlets/subscriber.js" ], "run_at": "document_idle", "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false } ], "default_locale": "en", @@ -80,7 +99,8 @@ "32": "img/ublock.svg", "48": "img/ublock.svg", "64": "img/ublock.svg", - "96": "img/ublock.svg" + "96": "img/ublock.svg", + "128": "img/ublock.svg" }, "manifest_version": 2, "name": "uBlock Origin", @@ -89,6 +109,7 @@ "open_in_tab": true }, "permissions": [ + "alarms", "dns", "menus", "privacy", diff -Nru ublock-origin-1.46.0+dfsg/platform/firefox/vapi-background-ext.js ublock-origin-1.62.0+dfsg/platform/firefox/vapi-background-ext.js --- ublock-origin-1.46.0+dfsg/platform/firefox/vapi-background-ext.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/firefox/vapi-background-ext.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2017-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,12 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -/* globals browser */ - -'use strict'; - -/******************************************************************************/ - import { domainFromHostname, hostnameFromNetworkURL, @@ -32,26 +26,20 @@ /******************************************************************************/ -// Canonical name-uncloaking feature. -let cnameUncloakEnabled = browser.dns instanceof Object; -let cnameUncloakProxied = false; - -// https://github.com/uBlockOrigin/uBlock-issues/issues/911 -// We detect here whether network requests are proxied, and if so, -// de-aliasing of hostnames will be disabled to avoid possible -// DNS leaks. -const proxyDetector = function(details) { - if ( details.proxyInfo instanceof Object ) { - cnameUncloakEnabled = false; - proxyDetectorTryCount = 0; - } - if ( proxyDetectorTryCount === 0 ) { - browser.webRequest.onHeadersReceived.removeListener(proxyDetector); - return; +const dnsAPI = browser.dns || { + resolve() { + return Promise.resolve(); } - proxyDetectorTryCount -= 1; }; -let proxyDetectorTryCount = 0; + +const isPromise = o => o instanceof Promise; +const isResolvedObject = o => o instanceof Object && + o instanceof Promise === false; +const reIPv4 = /^\d+\.\d+\.\d+\.\d+$/ +const skipDNS = proxyInfo => + proxyInfo && (proxyInfo.proxyDNS || proxyInfo.type?.charCodeAt(0) === 0x68 /* h */); + +/******************************************************************************/ // Related issues: // - https://github.com/gorhill/uBlock/issues/1327 @@ -64,26 +52,27 @@ constructor() { super(); this.pendingRequests = []; - this.canUncloakCnames = browser.dns instanceof Object; - this.cnames = new Map([ [ '', null ] ]); + this.dnsList = []; // ring buffer + this.dnsWritePtr = 0; // next write pointer in ring buffer + this.dnsMaxCount = 512; // max size of ring buffer + this.dnsDict = new Map(); // hn to index in ring buffer + this.dnsCacheTTL = 600; // TTL in seconds + this.canUncloakCnames = true; + this.cnameUncloakEnabled = true; this.cnameIgnoreList = null; this.cnameIgnore1stParty = true; this.cnameIgnoreExceptions = true; this.cnameIgnoreRootDocument = true; - this.cnameMaxTTL = 120; this.cnameReplayFullURL = false; - this.cnameFlushTime = Date.now() + this.cnameMaxTTL * 60000; + this.dnsResolveEnabled = true; } + setOptions(options) { super.setOptions(options); if ( 'cnameUncloakEnabled' in options ) { - cnameUncloakEnabled = - this.canUncloakCnames && + this.cnameUncloakEnabled = options.cnameUncloakEnabled !== false; } - if ( 'cnameUncloakProxied' in options ) { - cnameUncloakProxied = options.cnameUncloakProxied === true; - } if ( 'cnameIgnoreList' in options ) { this.cnameIgnoreList = this.regexFromStrList(options.cnameIgnoreList); @@ -100,54 +89,41 @@ this.cnameIgnoreRootDocument = options.cnameIgnoreRootDocument !== false; } - if ( 'cnameMaxTTL' in options ) { - this.cnameMaxTTL = options.cnameMaxTTL || 120; - } if ( 'cnameReplayFullURL' in options ) { this.cnameReplayFullURL = options.cnameReplayFullURL === true; } - this.cnames.clear(); this.cnames.set('', null); - this.cnameFlushTime = Date.now() + this.cnameMaxTTL * 60000; - // https://github.com/uBlockOrigin/uBlock-issues/issues/911 - // Install/remove proxy detector. - if ( vAPI.webextFlavor.major < 80 ) { - const wrohr = browser.webRequest.onHeadersReceived; - if ( cnameUncloakEnabled === false || cnameUncloakProxied ) { - if ( wrohr.hasListener(proxyDetector) ) { - wrohr.removeListener(proxyDetector); - } - } else if ( wrohr.hasListener(proxyDetector) === false ) { - wrohr.addListener( - proxyDetector, - { urls: [ '*://*/*' ] }, - [ 'blocking' ] - ); - } - proxyDetectorTryCount = 32; + if ( 'dnsCacheTTL' in options ) { + this.dnsCacheTTL = options.dnsCacheTTL; + } + if ( 'dnsResolveEnabled' in options ) { + this.dnsResolveEnabled = options.dnsResolveEnabled === true; } + this.dnsList.fill(null); + this.dnsDict.clear(); } + normalizeDetails(details) { + // https://github.com/uBlockOrigin/uBlock-issues/issues/3379 + if ( skipDNS(details.proxyInfo) && details.ip === '0.0.0.0' ) { + details.ip = null; + } const type = details.type; - if ( type === 'imageset' ) { details.type = 'image'; return; } - + if ( type !== 'object' ) { return; } + // Try to extract type from response headers if present. + if ( details.responseHeaders === undefined ) { return; } + const ctype = this.headerValue(details.responseHeaders, 'content-type'); // https://github.com/uBlockOrigin/uBlock-issues/issues/345 // Re-categorize an embedded object as a `sub_frame` if its // content type is that of a HTML document. - if ( type === 'object' && Array.isArray(details.responseHeaders) ) { - for ( const header of details.responseHeaders ) { - if ( header.name.toLowerCase() === 'content-type' ) { - if ( header.value.startsWith('text/html') ) { - details.type = 'sub_frame'; - } - break; - } - } + if ( ctype === 'text/html' ) { + details.type = 'sub_frame'; } } + denormalizeTypes(types) { if ( types.length === 0 ) { return Array.from(this.validTypes); @@ -166,77 +142,21 @@ } return Array.from(out); } + canonicalNameFromHostname(hn) { - const cnRecord = this.cnames.get(hn); - if ( cnRecord !== undefined && cnRecord !== null ) { - return cnRecord.cname; - } - } - processCanonicalName(hn, cnRecord, details) { - if ( cnRecord === null ) { return; } - if ( cnRecord.isRootDocument ) { return; } - const hnBeg = details.url.indexOf(hn); - if ( hnBeg === -1 ) { return; } - const oldURL = details.url; - let newURL = oldURL.slice(0, hnBeg) + cnRecord.cname; - const hnEnd = hnBeg + hn.length; - if ( this.cnameReplayFullURL ) { - newURL += oldURL.slice(hnEnd); - } else { - const pathBeg = oldURL.indexOf('/', hnEnd); - if ( pathBeg !== -1 ) { - newURL += oldURL.slice(hnEnd, pathBeg + 1); - } - } - details.url = newURL; - details.aliasURL = oldURL; - return super.onBeforeSuspendableRequest(details); - } - recordCanonicalName(hn, record, isRootDocument) { - if ( (this.cnames.size & 0b111111) === 0 ) { - const now = Date.now(); - if ( now >= this.cnameFlushTime ) { - this.cnames.clear(); this.cnames.set('', null); - this.cnameFlushTime = now + this.cnameMaxTTL * 60000; - } - } - let cname = - typeof record.canonicalName === 'string' && - record.canonicalName !== hn - ? record.canonicalName - : ''; - if ( - cname !== '' && - this.cnameIgnore1stParty && - domainFromHostname(cname) === domainFromHostname(hn) - ) { - cname = ''; - } - if ( - cname !== '' && - this.cnameIgnoreList !== null && - this.cnameIgnoreList.test(cname) - ) { - cname = ''; - } - const cnRecord = cname !== '' ? { cname, isRootDocument } : null; - this.cnames.set(hn, cnRecord); - return cnRecord; + if ( hn === '' ) { return; } + const dnsEntry = this.dnsFromCache(hn, true); + if ( isResolvedObject(dnsEntry) === false ) { return; } + return dnsEntry.cname; } + regexFromStrList(list) { - if ( - typeof list !== 'string' || - list.length === 0 || - list === 'unset' || - browser.dns instanceof Object === false - ) { + if ( typeof list !== 'string' || list.length === 0 || list === 'unset' ) { return null; } - if ( list === '*' ) { - return /^./; - } + if ( list === '*' ) { return /^./; } return new RegExp( - '(?:^|\.)(?:' + + '(?:^|\\.)(?:' + list.trim() .split(/\s+/) .map(a => a.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')) @@ -244,9 +164,14 @@ ')$' ); } + onBeforeSuspendableRequest(details) { + const hn = hostnameFromNetworkURL(details.url); + const dnsEntry = this.dnsFromCache(hn); + if ( isResolvedObject(dnsEntry) && dnsEntry.ip ) { + details.ip = dnsEntry.ip; + } const r = super.onBeforeSuspendableRequest(details); - if ( cnameUncloakEnabled === false ) { return r; } if ( r !== undefined ) { if ( r.cancel === true || @@ -256,24 +181,144 @@ return r; } } - const hn = hostnameFromNetworkURL(details.url); - const cnRecord = this.cnames.get(hn); - if ( cnRecord !== undefined ) { - return this.processCanonicalName(hn, cnRecord, details); - } - const documentUrl = details.documentUrl || details.url; - const isRootDocument = this.cnameIgnoreRootDocument && - hn === hostnameFromNetworkURL(documentUrl); - return browser.dns.resolve(hn, [ 'canonical_name' ]).then( - rec => { - const cnRecord = this.recordCanonicalName(hn, rec, isRootDocument); - return this.processCanonicalName(hn, cnRecord, details); - }, - ( ) => { - this.cnames.set(hn, null); + if ( isResolvedObject(dnsEntry) ) { + return this.onAfterDNSResolution(hn, details, dnsEntry); + } + if ( skipDNS(details.proxyInfo) ) { return; } + if ( this.dnsShouldResolve(hn) === false ) { return; } + const promise = dnsEntry || this.dnsResolve(hn, details); + return promise.then(( ) => this.onAfterDNSResolution(hn, details)); + } + + onAfterDNSResolution(hn, details, dnsEntry) { + if ( dnsEntry === undefined ) { + dnsEntry = this.dnsFromCache(hn); + if ( isResolvedObject(dnsEntry) === false ) { return; } + } + let proceed = false; + if ( dnsEntry.cname && this.cnameUncloakEnabled ) { + const newURL = this.uncloakURL(hn, dnsEntry, details); + if ( newURL ) { + details.aliasURL = details.url; + details.url = newURL; + proceed = true; } + } + if ( dnsEntry.ip && details.ip !== dnsEntry.ip ) { + details.ip = dnsEntry.ip + proceed = true; + } + if ( proceed === false ) { return; } + // Must call method on base class + return super.onBeforeSuspendableRequest(details); + } + + dnsToCache(hn, record, details) { + const dnsEntry = { hn, until: Date.now() + this.dnsCacheTTL * 1000 }; + if ( record ) { + const cname = this.cnameFromRecord(hn, record, details); + if ( cname ) { dnsEntry.cname = cname; } + const ip = this.ipFromRecord(record); + if ( ip ) { dnsEntry.ip = ip; } + } + this.dnsSetCache(-1, hn, dnsEntry); + return dnsEntry; + } + + dnsFromCache(hn, passive = false) { + const i = this.dnsDict.get(hn); + if ( i === undefined ) { return; } + if ( isPromise(i) ) { return i; } + const dnsEntry = this.dnsList[i]; + if ( dnsEntry !== null && dnsEntry.hn === hn ) { + if ( passive || dnsEntry.until >= Date.now() ) { + return dnsEntry; + } + } + this.dnsSetCache(i); + } + + dnsSetCache(i, hn, after) { + if ( i < 0 ) { + const j = this.dnsDict.get(hn); + if ( typeof j === 'number' ) { + this.dnsList[j] = after; + return; + } + i = this.dnsWritePtr++; + this.dnsWritePtr %= this.dnsMaxCount; + } + const before = this.dnsList[i]; + if ( before ) { + this.dnsDict.delete(before.hn); + } + if ( after ) { + this.dnsDict.set(hn, i); + this.dnsList[i] = after; + } else { + if ( hn ) { this.dnsDict.delete(hn); } + this.dnsList[i] = null; + } + } + + dnsShouldResolve(hn) { + if ( this.dnsResolveEnabled === false ) { return false; } + if ( hn === '' ) { return false; } + const c0 = hn.charCodeAt(0); + if ( c0 === 0x5B /* [ */ ) { return false; } + if ( c0 > 0x39 /* 9 */ ) { return true; } + return reIPv4.test(hn) === false; + } + + dnsResolve(hn, details) { + const promise = dnsAPI.resolve(hn, [ 'canonical_name' ]).then( + rec => this.dnsToCache(hn, rec, details), + ( ) => this.dnsToCache(hn) ); + this.dnsDict.set(hn, promise); + return promise; + } + + cnameFromRecord(hn, record, details) { + const cn = record.canonicalName; + if ( cn === undefined ) { return; } + if ( cn === hn ) { return; } + if ( this.cnameIgnore1stParty ) { + if ( domainFromHostname(cn) === domainFromHostname(hn) ) { return; } + } + if ( this.cnameIgnoreList !== null ) { + if ( this.cnameIgnoreList.test(cn) === false ) { return; } + } + if ( this.cnameIgnoreRootDocument ) { + const origin = hostnameFromNetworkURL(details.documentUrl || details.url); + if ( hn === origin ) { return; } + } + return cn; } + + uncloakURL(hn, dnsEntry, details) { + const hnBeg = details.url.indexOf(hn); + if ( hnBeg === -1 ) { return; } + const oldURL = details.url; + const newURL = oldURL.slice(0, hnBeg) + dnsEntry.cname; + const hnEnd = hnBeg + hn.length; + if ( this.cnameReplayFullURL ) { + return newURL + oldURL.slice(hnEnd); + } + const pathBeg = oldURL.indexOf('/', hnEnd); + if ( pathBeg !== -1 ) { + return newURL + oldURL.slice(hnEnd, pathBeg + 1); + } + return newURL; + } + + ipFromRecord(record) { + const { addresses } = record; + if ( Array.isArray(addresses) === false ) { return; } + if ( addresses.length === 0 ) { return; } + return addresses.join('\n'); + } + suspendOneRequest(details) { const pending = { details: Object.assign({}, details), @@ -286,6 +331,7 @@ this.pendingRequests.push(pending); return pending.promise; } + unsuspendAllRequests(discard = false) { const pendingRequests = this.pendingRequests; this.pendingRequests = []; @@ -297,6 +343,7 @@ ); } } + static canSuspend() { return true; } @@ -304,22 +351,77 @@ /******************************************************************************/ -vAPI.scriptletsInjector = ((doc, scriptlets) => { - let script, url; - try { - const blob = new self.Blob([ scriptlets ], { type: 'text/javascript' }); - url = self.URL.createObjectURL(blob); - script = doc.createElement('script'); - script.async = false; - script.src = url; - (doc.head || doc.documentElement).appendChild(script); - self.uBO_scriptletsInjected = true; - } catch (ex) { - } - if ( url ) { - if ( script ) { script.remove(); } - self.URL.revokeObjectURL(url); - } -}).toString(); +vAPI.scriptletsInjector = (( ) => { + const parts = [ + '(', + function(details) { + if ( typeof self.uBO_scriptletsInjected === 'string' ) { return; } + const doc = document; + const { location } = doc; + if ( location === null ) { return; } + const { hostname } = location; + if ( hostname !== '' && details.hostname !== hostname ) { return; } + // Use a page world sentinel to verify that execution was + // successful + const { sentinel } = details; + let script; + try { + const code = [ + `self['${sentinel}'] = true;`, + details.scriptlets, + ].join('\n'); + script = doc.createElement('script'); + script.appendChild(doc.createTextNode(code)); + (doc.head || doc.documentElement).appendChild(script); + } catch (ex) { + } + if ( script ) { + script.remove(); + script.textContent = ''; + script = undefined; + } + if ( self.wrappedJSObject[sentinel] ) { + delete self.wrappedJSObject[sentinel]; + self.uBO_scriptletsInjected = details.filters; + return 0; + } + // https://github.com/uBlockOrigin/uBlock-issues/issues/235 + // Fall back to blob injection if execution through direct + // injection failed + let url; + try { + const blob = new self.Blob( + [ details.scriptlets ], + { type: 'text/javascript; charset=utf-8' } + ); + url = self.URL.createObjectURL(blob); + script = doc.createElement('script'); + script.async = false; + script.src = url; + (doc.head || doc.documentElement || doc).append(script); + self.uBO_scriptletsInjected = details.filters; + } catch (ex) { + } + if ( url ) { + if ( script ) { script.remove(); } + self.URL.revokeObjectURL(url); + } + return 0; + }.toString(), + ')(', + 'json-slot', + ');', + ]; + const jsonSlot = parts.indexOf('json-slot'); + return (hostname, details) => { + parts[jsonSlot] = JSON.stringify({ + hostname, + scriptlets: details.mainWorld, + filters: details.filters, + sentinel: vAPI.generateSecret(3), + }); + return parts.join(''); + }; +})(); /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/firefox/webext.js ublock-origin-1.62.0+dfsg/platform/firefox/webext.js --- ublock-origin-1.46.0+dfsg/platform/firefox/webext.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/firefox/webext.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2019-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/README.md ublock-origin-1.62.0+dfsg/platform/mv3/README.md --- ublock-origin-1.46.0+dfsg/platform/mv3/README.md 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/README.md 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,31 @@ +# How to build MV3 uBO Lite + +Instructions for reviewers. + +The following assumes a linux environment. + +1. Open Bash console +2. `git clone https://github.com/gorhill/uBlock.git` +3. `cd uBlock` +4. `make mv3-[platform]`, where `[platform]` is either `chromium` or `firefox` +5. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers + +Upon completion of the script, the resulting extension package will become present in: + +- Chromium: `dist/build/uBOLite.chromium` +- Firefox: `dist/build/uBOLite.firefox` + +The folder `dist/build/mv3-data` will cache data fetched from remote servers, so as to avoid fetching repeatedly from remote servers with repeated build commands. Use `make cleanassets` to remove all locally cached filter lists if you want to build with latest versions of filter lists. + +The file `dist/build/mv3-data/log.txt` will contain information about what happened during the build process. + +The entry in the `Makefile` which implement the build process is `tools/make-mv3.sh [platform]`.[1] This Bash script copy various files from uBlock Origin branch and MV3-specific branch into a single folder which will be the final extension package. + +Notably, `tools/make-mv3.sh [platform]` calls a Nodejs script which purpose is to convert the filter lists into various rulesets to be used in a declarative way. The Nodejs version required is 17.5.0 or above. + +All the final rulesets are present in the `dist/build/uBOLite.[platform]/rulesets` in the final extension package. + +--- + +[1] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh +[2] https://github.com/gorhill/uBlock/blob/c4d324362fdb95ff8ef20f0b18f42f0eec955433/tools/make-mv3.sh#L103 diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/chromium/manifest.json ublock-origin-1.62.0+dfsg/platform/mv3/chromium/manifest.json --- ublock-origin-1.46.0+dfsg/platform/mv3/chromium/manifest.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/chromium/manifest.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,56 @@ +{ + "action": { + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png" + }, + "default_popup": "popup.html" + }, + "author": "Raymond Hill", + "background": { + "service_worker": "/js/background.js", + "type": "module" + }, + "declarative_net_request": { + "rule_resources": [ + ] + }, + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png", + "128": "img/icon_128.png" + }, + "manifest_version": 3, + "minimum_chrome_version": "122.0", + "name": "__MSG_extName__", + "options_page": "dashboard.html", + "optional_host_permissions": [ + "" + ], + "permissions": [ + "activeTab", + "declarativeNetRequest", + "scripting", + "storage" + ], + "short_name": "uBO Lite", + "storage": { + "managed_schema": "managed_storage.json" + }, + "version": "1.0", + "web_accessible_resources": [ + { + "resources": [ + "/strictblock.html" + ], + "matches": [ + "" + ], + "use_dynamic_url": true + } + ] +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/en.md ublock-origin-1.62.0+dfsg/platform/mv3/description/en.md --- ublock-origin-1.46.0+dfsg/platform/mv3/description/en.md 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/en.md 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ ## Description -**uBO Lite** (uBOL), an experimental **permission-less** [MV3 API-based](https://developer.chrome.com/docs/extensions/mv3/intro/) content blocker. +**uBO Lite** (uBOL), a **permission-less** [MV3 API-based](https://developer.chrome.com/docs/extensions/mv3/intro/) content blocker. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is [performed reliably](https://developer.chrome.com/docs/extensions/reference/scripting/#method-registerContentScripts) by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. @@ -31,7 +31,6 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.am.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.am.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.am.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.am.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. - -The default ruleset corresponds to uBlock Origin's default filterset: - -- uBlock Origin's built-in filter lists -- EasyList -- EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers - -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. - -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. - -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. - -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. - -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. - -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. - -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. - -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. - -Keep in mind this is still a work in progress, with these end goals: - -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. - -- Entirely declarative for reliability and CPU/memory efficiency. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ar.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ar.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ar.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ar.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBo لايت (uBOL) عبارة عن مانع محتوى من نوع MV3 تجريبي *أقل طلبا للتصريح*. +نسخة مبسطة (uBOL) مانع محتوى من نوع MV3 تجريبي *أقل طلبا للتصاريح* MV3-قاعدة الحظر الأساسية تتوافق مجموعة القواعد الافتراضية مع مجموعة عوامل التصفية الافتراضية لـ uBlock Origin: @@ -6,26 +6,31 @@ - القائمة السهلة - الخصوصية السهلة - قائمة خادم الإعلانات والتتبع لبيتر لوي -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +يمكنك تفعيل المزيد من مجموعات القواعد من خلال زيارة صفحة الخيارات - انقر على أيقونة _الترس_ في لوحة الإشعارات. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL صريح تمامًا، مما يعني أنه لا تحتاج إلى uBOL بشكل دائم لحدوث تصفية المحتوى، يتم إجراء تصفية المحتوى من خلال إضافة CSS/JS بشكل موثوق به بواسطة المتصفح نفسه بدلًا من الإضافة. + هذا يعني أن uBOL نفسه لا يستهلك موارد وحدة المعالجة المركزية/الذاكرة أثناء استمراره في حظر المحتوى. عملية عامل الخدمة في uBOL مطلوبة _فقط_ عند التفاعل مع اللوحة المنبثقة أو صفحة الخيارات. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +لا يتطلب uBOL صلاحية واسعة «لقراءة البيانات وتعديلها» في وقت التثبيت، وبالتالي فإن قدراته محدودة مقارنة بـ uBlock Origin أو إضافات حظر الإعلانات الأخرى التي تتطلب صلاحية واسعة «قراءة البيانات وتعديلها» في وقت التثبيت. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +ومع ذلك، يسمح لك uBOL "بوضوح" بمنح صلاحيات موسعة على مواقع محددة من اختيارك حتى يتمكن من التصفية بشكل أفضل على تلك المواقع باستخدام التصفية التجميلية وإضافة النص. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +لمنح صلاحيات موسعة على موقع معين، افتح اللوحة المنبثقة واختر وضع التصفية إما الأمثل أو الكامل. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +سيحذرك المتصفح من مخاطر منح صلاحيات إضافية التي يطلبها الامتداد على الموقع الحالي، وسيتعين عليك إختيار بما إذا كنت تقبل الطلب أو ترفضه. -Keep in mind this is still a work in progress, with these end goals: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +إذا قبلت طلب uBOL بالحصول على صلاحيات إضافية على الموقع الحالي، فستتمكن من تصفية المحتوى بشكل أفضل للموقع الحالي. -- Entirely declarative for reliability and CPU/memory efficiency. + +بإمكانك اختيار وضع التصفية الافتراضية من خلال صفحة خيارات uBOL. إذا اخترت الوضع الأمثل أو الكامل باعتباره الوضع الافتراضي، فستحتاج إلى منح uBOL الإذن لقراءة البيانات وتعديلها على جميع مواقع الويب. + + +ضع في اعتبارك أن هذا لا يزال عملًا قيد التنفيذ، هذه هي الأهداف النهائية: + +لا يمكنك تحديد الأذونات المستخدمة لاحقًا في التثبيت، تحديدك للأذونات سيكون خلال زيارتك لكل موقع. + +تقريري تمامًا للموثوقية ولكفاءة وحدة المعالجة المركزية/الذاكرة. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.az.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.az.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.az.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.az.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,13 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) *icazəsiz* MV3 əsaslı məzmun bloklayıcısıdır. -The default ruleset corresponds to uBlock Origin's default filterset: +Defolt qaydalar dəsti uBlock Origin-in defolt filtr dəstinə uyğundur: -- uBlock Origin's built-in filter lists +- uBlock Origin-in daxili filtr siyahıları - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Peter Lowe-un Reklam və izləyici server siyahısı -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.be.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.be.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.be.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.be.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,13 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Лайт (uBOL) гэта блакіроўшчык кантэнту з меншымі патрабаваннямі да дазволаў заснаваны на MV3 -The default ruleset corresponds to uBlock Origin's default filterset: +Прадвызначаны набор правіл адпавядае тыпавому набору фільтраў uBlock Origin: -- uBlock Origin's built-in filter lists +- Убудаваныя спісы фільтраў uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Спіс сервераў рэкламы ды адсочвання ад Peter Lowe -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. @@ -28,4 +27,4 @@ - No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. -- Entirely declarative for reliability and CPU/memory efficiency. +- Цалкам дэкларатыўная ацэнка надзейнасці і эфектыўнасці работы працэсара/памяці. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.bg.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bg.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.bg.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bg.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) е експериментален блокер за съдържание *без разрешения*, базиран на MV3. +uBO Lite (uBOL) е блокер за съдържание *без разрешения*, базиран на MV3. Наборът от правила по подразбиране съответства на набора от филтри по подразбиране на uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Списък със сървъри на Peter Lowe за реклами и проследяване -- Проследяване, скрито под CNAME от AdGuard -Можете да добавите още набори от правила, като посетите страницата с опции – щракнете върху иконата _зъбно колело_ в изскачащия панел. +Можете да включите още набори от правила, като посетите страницата с опции – щракнете върху иконата „зъбно колело“ в изскачащия панел. uBOL е изцяло декларативен, което означава, че няма нужда от постоянен процес на uBOL за филтриране, а филтрирането на съдържание, базирано на инжектиране на CSS/JS, се извършва надеждно от самия браузър, а не от разширението. Това означава, че самият uBOL не консумира ресурси на процесора/паметта, докато тече блокирането на съдържанието – работният процес на услугата на uBOL е необходим _само_ когато взаимодействате с изскачащия панел или страниците с опции. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.bn.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bn.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.bn.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bn.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) হল একটি *অনুমতি-হীন* MV3-ভিত্তিক কন্টেন্ট ব্লকার। -The default ruleset corresponds to uBlock Origin's default filterset: +পূর্ব নির্ধারিত নিয়ম সেট uBlock অরিজিনের ডিফল্ট ফিল্টারসেটের সাথে মিলে যায়: -- uBlock Origin's built-in filter lists -- EasyList -- EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- uBlock অরিজিনের বিল্ট ইন ফিল্টার তালিকা +- ইজিলিস্ট +- সহজ গোপনীয়তা +- পিটার লো এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার তালিকা -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL সম্পূর্ণরূপে ঘোষণামূলক, অর্থাৎ ফিল্টারিং করতে একটি স্থায়ী uBOL প্রক্রিয়ার প্রয়োজন নেই, এবং CSS/JS ইনজেকশন-ভিত্তিক বিষয়বস্তু ফিল্টারিং এক্সটেনশনের পরিবর্তে ব্রাউজার নিজেই নির্ভরযোগ্যভাবে এই কাজ করে থাকে। এর মানে হল যে কন্টেন্ট ব্লকিং চলমান থাকা অবস্থায় uBOL নিজেই CPU/মেমরি রিসোর্স ব্যবহার করে না -- uBOL-এর পরিষেবার প্রক্রিয়ার প্রয়োজন শুধুমাত্র_ যখন আপনি পপআপ প্যানেল বা অপশন পেজগুলির সাথে ইন্টারঅ্যাক্ট করেন। -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL-এর ইন্সটল করার সময় বিস্তৃত "পড়ার ও ডেটা পরিবর্তন করার" অনুমতির প্রয়োজন হয় না, তাই ইউব্লক অরিজিন বা অন্যান্য কনটেন্ট ব্লকের তুলনায় এটির সীমিত ক্ষমতা বাক্সের বাইরে রয়েছে যার জন্য ইন্সটল করার সময় বিস্তৃত "ডেটা পড়ুন এবং পরিবর্তন করুন" অনুমতি প্রয়োজন। -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +যাইহোক, uBOL আপনাকে আপনার পছন্দের নির্দিষ্ট সাইটে *স্পষ্টভাবে* বর্ধিত অনুমতি প্রদান করে যাতে এটি কসমেটিক ফিল্টারিং এবং স্ক্রিপ্টলেট ইনজেকশন ব্যবহার করে সেই সাইটগুলিতে আরও ভাল ফিল্টার করতে পারে। -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +একটি সাইটে বর্ধিত অনুমতি প্রদানের জন্য, পপআপ প্যানেল খুলুন এবং একটি উচ্চতর ফিল্টারিং মোড বাছাই করুন যেমন অপটিমাল বা কমপ্লিট। -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +ব্রাউজারটি তখন বর্তমান সাইটে এক্সটেনশন দ্বারা অনুরোধ করা অতিরিক্ত অনুমতি প্রদানের প্রভাব সম্পর্কে আপনাকে সতর্ক করবে এবং আপনি অনুরোধটি গ্রহণ করবেন বা প্রত্যাখ্যান করবেন কিনা তা আপনার ব্রাউজারকে বলতে হবে। -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +আপনি যদি বর্তমান সাইটে অতিরিক্ত অনুমতির জন্য uBOL-এর অনুরোধ গ্রহণ করেন, তাহলে এটি বর্তমান সাইটের জন্য আরও ভালভাবে ফিল্টার করতে সক্ষম হবে। -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +আপনি uBOL এর বিকল্প পৃষ্ঠা থেকে ডিফল্ট ফিল্টারিং মোড সেট করতে পারেন। আপনি যদি অপটিমাল বা কমপ্লিট মোডটিকে ডিফল্ট হিসেবে বেছে নেন, তাহলে আপনাকে uBOL-কে সমস্ত ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার অনুমতি দিতে হবে। -Keep in mind this is still a work in progress, with these end goals: +মনে রাখবেন এই শেষ লক্ষ্যগুলির ফলাফলের সাথে এখনও সংস্করণ কাজ চলছে: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- ইনস্টল করার সময় কোনও বিস্তৃত অনুমতি নেই -- বর্ধিত অনুমতিগুলি প্রতি-সাইট ভিত্তিতে ব্যবহারকারীর দ্বারা স্পষ্টভাবে প্র্রদান করা হয়। -- Entirely declarative for reliability and CPU/memory efficiency. +- নির্ভরযোগ্যতা এবং CPU/মেমরি দক্ষতার জন্য সম্পূর্ণরূপে পূর্বঘোষণামুূলক। diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.br_FR.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.br_FR.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.br_FR.txt 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.br_FR.txt 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,30 @@ +uBO Lite (uBOL) zo ur stanker noazadurioù *hep aotre rekis ebet* diazezet war ar manifesto MV3. + +Ar reolennoù dre ziouer a glot gant silañ dre ziouer uBlock Origin: + +- Rolloù siloù genidik a uBlock Origin +- EasyList +- EasyPrivacy +- Roll bruderezh ha servijerioù heuliañ Peter Lowe + +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. + +Disklêriañ a ra uBOL penn-da-benn, da lavaret eo n'eus ket ezhomm eus un argerzh uBOL padus evit ma c'hoarvezfe ar silañ, ha silañ endalc'hadoù diazezet war enlakaat CSS/JS a vez graet en un doare fizius gant ar merdeer e-unan kentoc'h eget gant an astenn. Kement-se a dalvez ne vez ket gounezet gant uBOL e-unan arc'hwelioù CPU/memor e-pad ma vez stanket an endalc'hadoù -- ezhomm zo eus argerzh al labourer servij uBOL _nemet_ pa vez etregweredet gant ar banell digeriñ pe ar pajennoù dibarzhioù. + +UBOL n'en deus ket ezhomm eus aotreoù ledan "lenn ha kemmañ roadennoù" e-pad ar staliañ, setu perak e c'halloudoù bevennet e-keñver uBlock Origin pe stankerien endalc'hadoù all a c'houlenn aotreoù ledan "lenn ha kemmañ roadennoù" e-pad ar staliañ. + +Koulskoude ez eus tu deoc'h reiñ *sklaer* aotreoù ouzhpenn da uBOL el lec'hiennoù ma fell deoc'h, mod-se e vint silet gwelloc'h en ur implij siloù kened hag ensinkladurioù scriplet. + +Evit reiñ aotreoù ouzhpenn da uBOL en ul lec'hienn bennak, n'ho peus nemet digeriñ ar prenestr pop-up ha diuzañ ul live silañ uheloc'h evel ar mod Gwellañ pe ar mod Klok + +Goude-se e vo kelaouet ac'hanoc'h gant ar merdeer diwar-benn efedoù reiñ an aotreoù ouzhpenn goulennet gant an astenn war al lec'hienn bremanel, ha ret e vo deoc'h lâret d'ar merdeer hag-eñ e vo degemeret pe nac'het ar goulenn ganeoc'h. + +Ma asantit da reiñ muioc'h a aotreoù da uBOL war ar bajenn-mañ e vo silet gwelloc'h. + +Gallout a rit termeniñ ar mod silañ dre ziouer e pajenn arventennoù uBOL. Ma tibabit ar mod Gwellañ pe an hini Klok evel ar mod dre ziouer e vo ret deoc'h aotren uBOL da lenn ha kemmañ roadennoù en holl lec'hiennoù. + +Dalc'hit soñj ez eo uBOL ur raktres war ober c'hoazh hag a zo e bal: + +- Aotreoù ostiz ledan ebet e-pad ar staliañ -- aotreoù astennet a vez roet splann gant an implijer dre lec'hienn. + +- Disklêriañ penn-da-benn evit ar fiziañs hag an efedusted CPU/memor. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.bs.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bs.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.bs.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.bs.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) je blokator sadržaja zasnovan na MV3 *bez dozvole*. -The default ruleset corresponds to uBlock Origin's default filterset: +Zadani skup pravila odgovara zadanom skupu filtera uBlock Origin: -- uBlock Origin's built-in filter lists +- UBlock Origin ugrađene liste filtera - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Oglas Peter Lowe i lista servera za praćenje -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL je potpuno deklarativno, što znači da nema potrebe za trajnim uBOL procesom da bi se filtriranje dogodilo, a filtriranje sadržaja zasnovano na CSS/JS injekcijama se pouzdano izvodi od strane samog pretraživača, a ne ekstenzije. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u toku -- proces uBOL-a servisnog radnika je potreban _samo_ kada stupite u interakciju sa iskačućim panelom ili stranicama sa opcijama. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL ne zahtijeva široku dozvolu za "čitanje i modificiranje podataka" u vrijeme instalacije, stoga su njegove ograničene mogućnosti izvan kutije u poređenju sa uBlock Origin-om ili drugim blokatorima sadržaja koji zahtijevaju široke dozvole za "čitanje i modificiranje podataka" u vrijeme instalacije. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Međutim, uBOL vam omogućava da *eksplicitno* dodijelite proširene dozvole na određenim web lokacijama po vašem izboru kako bi mogao bolje filtrirati te stranice koristeći kozmetičko filtriranje i injekcije skriptleta. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Da biste dali proširene dozvole za datu web lokaciju, otvorite iskačući panel i odaberite viši način filtriranja kao što je Optimal ili Complete. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Pregledač će vas tada upozoriti na efekte odobravanja dodatnih dozvola koje ekstenzija traži na trenutnoj web stranici, a vi ćete morati reći pretraživaču da li prihvatate ili odbijate zahtjev. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Ako prihvatite uBOL-ov zahtjev za dodatnim dozvolama na trenutnoj stranici, moći će bolje filtrirati sadržaj za trenutnu stranicu. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Možete postaviti zadani način filtriranja sa uBOL-ove stranice sa opcijama. Ako odaberete Optimal ili Kompletan način kao zadani, morat ćete dati uBOL-u dozvolu da čita i mijenja podatke na svim web stranicama. -Keep in mind this is still a work in progress, with these end goals: +Imajte na umu da je ovo još uvijek u toku, sa ovim krajnjim ciljevima: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Nema širokih dozvola za host u vrijeme instalacije - proširene dozvole se eksplicitno dodeljuju od strane korisnika na bazi po lokaciji. -- Entirely declarative for reliability and CPU/memory efficiency. +- Potpuno deklarativno za pouzdanost i efikasnost CPU/memorije. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ca.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ca.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ca.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ca.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -L'uBO Lite (uBOL) és un blocador de contingut experimental *sense permís* basat en MV3. +L'uBO Lite (uBOL) és un blocador de contingut *sense permisos* basat en MV3. El conjunt de regles per defecte correspon al conjunt de filtres per defecte d'uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Llista de servidors de seguiment i anuncis de Peter Lowe -- Seguidors encoberts de CNAME d'AdGuard -Podeu afegir més conjunts de regles si visiteu la pàgina d'opcions: feu clic a la icona _Cogs_ al tauler emergent. +Podeu habilitar més conjunts de regles si visiteu la pàgina d'opcions: feu clic a la icona _Cogs_ al tauler emergent. L'uBOL és totalment declaratiu, és a dir, no cal un procés uBOL permanent perquè es produeixi el filtratge, i el filtratge de contingut basat en injecció CSS/JS es realitza de manera fiable pel propi navegador més que per l'extensió. Això vol dir que l'uBOL en si no consumeix recursos de CPU/memòria mentre el bloqueig de contingut està en curs; el procés de treballador de servei d'uBOL només es requereix quan interactueu amb el tauler emergent o les pàgines d'opcions. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.cs.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cs.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.cs.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cs.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) je experimentální blokovač obsahu vyžadující méně oprávnění, založených na MV3. +uBO Lite (uBOL) je blokovač obsahu vyžadující méně oprávnění, založený na MV3. Výchozí sada pravidel koresponduje k výchozím sadám filtrů uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Můžete přidat více sad pravidel navštívením stránky nastavení -- klikněte na ikonu ozubených kol ve vyskakovácím panelu. +Další sady pravidel můžete povolit na stránce nastavení - klikněte na ikonu _Ozubeného kolečka_ ve vyskakovacím panelu. uBOL je zcela deklarativní, což znamená, že pro filtrování není potřeba permanentní proces uBOL a filtrování obsahu založené na vstřikování CSS/JS je spolehlivě prováděno samotným prohlížečem, nikoli rozšířením. To znamená, že samotný uBOL nespotřebovává zdroje CPU/paměti, zatímco probíhá blokování obsahu – proces servisního pracovníka uBOL je vyžadován _pouze_ při interakci s vyskakovacím panelem nebo stránkami nastavení. @@ -22,7 +21,7 @@ Pokud přijmete žádost uBOL o další oprávnění na aktuálním webu, bude moci lépe filtrovat obsah aktuálního webu. -Výchozí režim filtrování můžete nastavit na stránce nastavení uBOL. Pokud jako výchozí zvolíte režim optimální nebo kompletní, budete muset uBOL udělit oprávnění ke čtení a úpravě dat na všech webových stránkách. +Výchozí filtrovací režim můžete nastavit na stránce nastavení uBOL. Pokud jako výchozí zvolíte režim optimální nebo kompletní, budete muset uBOL udělit oprávnění ke čtení a úpravě dat na všech webových stránkách. Mějte na paměti, že toto je stále nedokončená práce s těmito konečnými cíli: diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.cv.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cv.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.cv.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cv.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.cy.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cy.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.cy.txt 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.cy.txt 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,30 @@ +uBO Lite (uBOL) yw blocwr cynnwys MV3 sy'n gweithredu heb ganiatâd safonol. + +Mae'r set reolau ddiofyn yn cyfateb i set hidlo diofyn uBlock Origin: + +- uBlock Origin's built-in filter lists +- EasyList +- EasyPrivacy +- Peter Lowe’s Ad and tracking server list + +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. + +uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. + +uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. + +However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. + +To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. + +The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. + +If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. + +You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. + +Keep in mind this is still a work in progress, with these end goals: + +- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. + +- Entirely declarative for reliability and CPU/memory efficiency. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.da.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.da.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.da.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.da.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) er en eksperimentel *tilladelsesløs* MV3-baseret indholdsblocker. +uBO Lite (uBOL) er en *tilladelsesløs* MV3-baseret indholdsblocker. Standardregelsættet svarer til uBlock Origins standardfiltersæt: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Flere regelsæt kan tilføjes ved at gå til indstillingssiden -- klik på ikonet _Cogs_ i pop op-panelet. +Flere regelsæt kan aktiveres ved at gå til indstillingssiden -- klik på ikonet _Tandhjul_ i pop op-panelet. uBOL er fuldstændig deklarativ, hvilket betyder, at ingen permanent uBOL-proces behøves for at filtreringen kan finde sted, og CSS/JS-injektionsbaseret indholdsfiltrering udføres pålideligt af browseren selv i stedet for af udvidelsen. Dette betyder, at uBOL ikke selv forbruger CPU-/hukommelsesressourcer under indholdsblokeringen -- uBOLs tjenestearbejdsproces er _kun_ nødvendig under interaktion med pop op-panelet eller indstillingssiderne. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.de.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.de.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.de.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.de.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) ist ein experimenteller Inhaltsblocker, der *ohne Berechtigungen* auskommt und auf MV3 basiert. +uBO Lite (uBOL) ist ein Inhaltsblocker, der *ohne Berechtigungen* auskommt und auf MV3 basiert. Die Standardregeln entsprechen den Standardfiltern von uBlock Origin: @@ -6,23 +6,22 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Sie können weitere Regeln hinzufügen, indem Sie die Optionen aufrufen — klicken Sie dazu im Pop-up-Fenster auf das Symbol mit den _Zahnrädern_. +Sie können weitere Regeln aktivieren, indem Sie die Einstellungen aufrufen — klicken Sie dazu im Pop-up-Fenster auf das Symbol mit den _Zahnrädern_. -uBOL ist vollständig deklarativ, d. h. es ist kein permanenter uBOL-Prozess für die Filterung erforderlich, und die auf CSS/JS-Injektion basierende Inhaltsfilterung wird zuverlässig vom Browser selbst und nicht von der Erweiterung durchgeführt. Das bedeutet, dass uBOL selbst keine CPU-/Speicherressourcen verbraucht, während der Inhalt blockiert wird — der uBOL-Service-Worker-Prozess wird _nur_ benötigt, wenn Sie mit dem Pop-up-Fenster oder den Optionen interagieren. +uBOL ist vollständig deklarativ, d. h. es ist kein dauerhafter uBOL-Prozess für das Filtern erforderlich, und die auf CSS/JS-Injektion basierende Inhaltsfilterung wird zuverlässig vom Browser selbst und nicht von der Erweiterung durchgeführt. Das bedeutet, dass uBOL selbst keine CPU-/Speicherressourcen verbraucht, während der Inhalt blockiert wird — der uBOL-Service-Worker-Prozess wird _nur_ benötigt, wenn Sie mit dem Pop-up-Fenster oder den Optionen interagieren. uBOL erfordert bei der Installation keine weitreichende Berechtigung zum Lesen und Ändern von Daten, daher sind die Möglichkeiten im Vergleich zu uBlock Origin oder anderen Inhaltsblockern, die bei der Installation weitreichende Berechtigungen zum Lesen und Ändern von Daten erfordern, von vornherein begrenzt. -Allerdings können Sie mit uBOL *explizit* erweiterte Berechtigungen für bestimmte Websites Ihrer Wahl erteilen, sodass diese Websites mithilfe kosmetischer Filterung und Scriptlet-Injektionen besser gefiltert werden können. +Allerdings können Sie mit uBOL *explizit* erweiterte Berechtigungen für bestimmte Websites Ihrer Wahl erteilen, sodass diese Websites durch kosmetisches Filtern und Scriptlet-Injektionen besser gefiltert werden können. -Um erweiterte Berechtigungen für eine bestimmte Website zu erteilen, öffnen Sie das Pop-up-Fenster und wählen Sie einen stärkeren Filtermodus wie „Optimal” oder „Vollständig”. +Um erweiterte Berechtigungen für eine bestimmte Website zu erteilen, öffnen Sie das Pop-up-Fenster und wählen Sie einen stärkeren Filtermodus wie »Optimal« oder »Vollständig«. Der Browser warnt Sie anschließend über die Auswirkungen der zusätzlichen Berechtigungen, die von der Erweiterung für die aktuelle Website angefordert werden, und Sie können entscheiden, ob Sie zustimmen oder ablehnen. Wenn Sie die Anfrage von uBOL nach zusätzlichen Berechtigungen für die aktuelle Website zustimmen, kann uBOL die Inhalte für die aktuelle Website besser filtern. -Sie können den Standardfiltermodus in den Optionen von uBOL festlegen. Wenn Sie den Modus „Optimal” oder „Vollständig” als Standardmodus wählen, müssen Sie uBOL die Berechtigung erteilen, Daten auf allen Websites lesen und ändern zu dürfen. +Sie können den Standardfiltermodus in den Optionen von uBOL festlegen. Wenn Sie den Modus »Optimal« oder »Vollständig« als Standardmodus wählen, müssen Sie uBOL die Berechtigung erteilen, Daten auf allen Websites lesen und ändern zu dürfen. Denken Sie daran, dass sich dieses Projekt noch in Entwicklung befindet und folgende Ziele verfolgt: diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.el.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.el.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.el.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.el.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -Το uBO Lite (uBOL) είναι ένας πειραματικός αποκλεισμός περιεχομένου *χωρίς άδεια* που βασίζεται σε MV3. +Το uBO Lite (uBOL) είναι πρόσθετο φραγής περιεχομένου που *δεν απαιτεί δικαιώματα* και βασίζεται στο MV3. Το προεπιλεγμένο σύνολο κανόνων αντιστοιχεί στο προεπιλεγμένο σύνολο φίλτρων του uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Μπορείτε να προσθέσετε περισσότερα σύνολα κανόνων μεταβαίνοντας στη σελίδα επιλογών -- κάντε κλικ στο εικονίδιο _Cogs_ στον αναδυόμενο πίνακα. +Μπορείτε να προσθέσετε περισσότερα σύνολα κανόνων από τη σελίδα επιλογών -- κάντε κλικ στο εικονίδιο _γρανάζι_ στον αναδυόμενο πίνακα. Το uBOL είναι εξ'ολοκλήρου δηλωτικό, πράγμα που σημαίνει ότι δεν υπάρχει ανάγκη για μόνιμη διαδικασία uBOL για να πραγματοποιηθεί το φιλτράρισμα, και το φιλτράρισμα περιεχομένου που βασίζεται σε έγχυση CSS/JS εκτελείται αξιόπιστα από το ίδιο το πρόγραμμα περιήγησης και όχι από την επέκταση. Αυτό σημαίνει ότι το ίδιο το uBOL δεν καταναλώνει πόρους CPU/μνήμης ενώ ο αποκλεισμός περιεχομένου είναι σε εξέλιξη -- η διαδικασία του service worker του uBOL απαιτείται _μόνο_ όταν αλληλεπιδράτε με τον αναδυόμενο πίνακα ή τις σελίδες επιλογών. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.en_GB.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.en_GB.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.en_GB.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.en_GB.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.eo.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.eo.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.eo.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.eo.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.es.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.es.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.es.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.es.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) es un bloqueador de contenido experimental con *menos permisos* basado en MV3. +uBO Lite (uBOL) es un bloqueador de contenido con *menos permisos* basado en MV3. -The default ruleset corresponds to uBlock Origin's default filterset: +Por defecto ya trae configuradas las siguientes listas de filtros: -- uBlock Origin's built-in filter lists +- Listas de filtros de uBlock Origin - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Puedes habilitar más conjuntos de reglas visitando la página de opciones, haz clic en el icono de _engranaje_ del panel emergente. -uBOL es completamente declarativo, lo que significa que no hay necesidad de un proceso uBOL permanente para que se produzca el filtrado, y el filtrado de contenido basado en la inyección de CSS/JS es realizado de forma confiable por el propio navegador y no por la extensión. Esto significa que uBOL en sí mismo no consume recursos de CPU/memoria mientras el bloqueo de contenido está en curso, el proceso service worker de uBOL se requiere _solo_ cuando se interactúa con el panel emergente o las páginas de opciones. +uBOL es completamente declarativo, lo que significa que no hay necesidad de un proceso uBOL permanente para que se produzca el filtrado, y el filtrado de contenido basado en la inyección de CSS/JS se realiza de forma confiable por el propio navegador en lugar de la extensión. Esto significa que uBOL en sí mismo no consume recursos de CPU/memoria mientras el bloqueo de contenido está en curso, el proceso service worker de uBOL se requiere _solo_ cuando se interactúa con el panel emergente o las páginas de opciones. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL no requiere amplios permisos para "leer y modificar datos" en el momento de la instalación, de ahí sus capacidades limitadas en comparación con uBlock Origin u otros bloqueadores de contenido que requieren amplios permisos para "leer y modificar datos" en el momento de la instalación. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Sin embargo, uBOL te permite otorgar *explícitamente* permisos extendidos en sitios específicos de tu elección para que pueda filtrar mejor en esos sitios usando filtrado cosmético e inyecciones de scriptlet. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Para otorgar permisos extendidos en un sitio determinado, abre el panel emergente y elige un modo de filtrado superior, como óptimo o completo. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Después el navegador te advertirá sobre los efectos de otorgar los permisos adicionales solicitados por la extensión en el sitio actual, y deberás indicar al navegador si aceptas o rechazas la solicitud. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Si aceptas la solicitud de uBOL para permisos adicionales en el sitio actual, será capaz de filtrar mejor el contenido para el sitio actual. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Puedes establecer el modo de filtrado predeterminado desde la página de opciones de uBOL. Si eliges como predeterminado el modo óptimo o completo, tendrás que otorgar a uBOL el permiso para leer y modificar datos en todos los sitios web. -Keep in mind this is still a work in progress, with these end goals: +Téngase en cuenta que esto todavía es un trabajo en progreso, con estos objetivos finales: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Sin amplios permisos de host en el momento de la instalación, los permisos ampliados son otorgados explícitamente por el usuario en cada sitio. - Completamente declarativo para confiabilidad y eficiencia de la CPU/memoria. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.et.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.et.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.et.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.et.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) on MV3-l põhinev katsetusjärgus *lubadeta* sisutõkestaja. +uBO Lite (uBOL) on MV3-l põhinev *lubadeta* sisutõkestaja. Tavaline reeglitekogum vastab uBlock Origini tavalisele filtritekogumile: -- uBlock Origini sisseehitatud filtriteloendid +- uBlock Origini sisseehitatud filtriloendid - EasyList - EasyPrivacy -Peter Lowe'i reklaamides ja jälitamisserverite loend -- AdGuardi CNAME-varjatud jälgijad +Peter Lowe'i reklaamide ja jälitusserverite loend -Reeglitekogumeid saate lisada valikute lehelt ehk avanenud paneelis klõpsake _Cogs_ ikooni. +Rohkem reegleid valikutest ehk toksake _Cogs_ ikooni hüpikpaneelis. uBOL on läbinisti deklaratiivne ehk filtreerimiseks pole vaja kogu aeg töötavat uBOLi protsessi ja CSS/JS süstipõhist sisu filtreerib tegelikult brauser, mitte laiendus. Teisisõnu, uBOL ei kasuta sisu tõkestamisel protsessori/mälu ressursse. uBOLi teenuse toimimise protsessi on vaja _vaid_ juhul, kui kasutate hüpikpaneeli või valikute lehekülgi. -uBOL ei nõua paigaldamise ajal teadatuntud andmete lugemise ja muutmise luba, seega võrreldes seda nõudva äpiga uBlock Origin või muu sisutõkestiga on uBOL-i piiratus üks selle funktsioonidest. +uBOL ei nõua paigaldamise ajal teadatuntud andmete lugemise ja muutmise luba, seega võrreldes seda nõudva laiendusega uBlock Origin või muu sisutõkestiga on uBOL-i piiratus üks selle funktsioonidest. Kuid uBOL võimaldab *selgesõnaliselt* anda täpsemaid lubasid teie valitud veebilehtedele, et neid saaks paremini filtreerida ilufiltrite ja skriptisüstidega. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Veebilehele täpsustatud lubade andmiseks ava hüpikpaneel ja vali põhjalikum filtreerimisrežiim, näiteks Optimaalne või Põhjalik. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Seejärel hoiatab veebilehitseja praeguse veebilehe laienduse taotletud täiendavate õiguste andmise tagajärgede eest ja peate veebilehitsejale ütlema, kas nõustute taotlusega või keeldute sellest. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Kui nõustute uBOLi taotlusega täiendavate õiguste saamiseks praegusel veebilehel, saab see praeguse veebilehe sisu paremini filtreerida. -You can set the default filtering mode from uBOL's options page. Kui määrate optimaalse või põhjaliku režiimi tavaliseks, peate andma uBOLile loa kõikide veebilehtede andmete lugemiseks ja muutmiseks. +Fltreerimise tavarežiimi saate määrata uBOLi valikute lehelt. Kui määrate optimaalse või põhjaliku režiimi tavaliseks, peate andma uBOLile loa kõikide veebilehtede andmete lugemiseks ja muutmiseks. -Keep in mind this is still a work in progress, with these end goals: +Pidage meeles, et see on veel arendamisel, mille lõppeesmärgid on järgmised: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Paigaldamise ajal laialdased hostiõigused puuduvad – kasutaja annab laiendatud load selgesõnaliselt ja veebilehe põhiselt. -- Entirely declarative for reliability and CPU/memory efficiency. +- Täiesti deklaratiivne töökindluse ja protsessori/mälu tõhususe osas. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.eu.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.eu.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.eu.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.eu.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) irakargarri blokeatzailea de, baimen gutxiekin eta MV3ean basatua -The default ruleset corresponds to uBlock Origin's default filterset: +Lehenespenez, iragazki-zerrenda hauek ditu konfiguratuta: -- uBlock Origin's built-in filter lists -- EasyList -- EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +UblockOrigin-eko filtro lista +ZerrendaErraza +PribazitateaErraza +Peter Lowe-ren Ad and tracker zerrenda -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Ruleta gehiago aktibatu ahal duzu aukerak orria --klikatu _Cogs_ ikonoa panelearen lehioan -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL guztiz deklaratiboa da, hau da, ez dago uBOL prozesu iraunkor baten beharrik iragazketa gertatzeko, eta CSS/JS injekzioan oinarritutako edukien iragazketa nabigatzaileak berak egiten du fidagarritasunez, luzapenaren arabera beharrean. Horrek esan nahi du uBOLek berak ez duela CPU/memoria baliabiderik kontsumitzen edukien blokeoa martxan dagoen bitartean... uBOLren zerbitzuko langileen prozesua _only_ behar da popup panelarekin edo aukera orriekin elkarreragiten denean. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOLek ez du "irakurtzeko eta aldatzeko datuak" baimen zabalik behar instalazio-unean, horregatik bere gaitasun mugatuak uBlock Origin-ekin alderatuta edo beste eduki-blokeatzaile batzuekin alderatuta, "irakurtzeko eta aldatzeko datuak" baimen zabalak behar dituzten instalazio garaian. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Hala ere, uBOLek aukera ematen dizu *esplizituki* baimen hedatuak zure aukeratutako gune espezifikoetan, gune horietan hobeto iragazteko iragazte kosmetikoak eta scriptlet injekzioak erabiliz. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Leku jakin batean baimenak emateko, ireki panel emergentea eta aukeratu goiko iragazteko modu bat, optimo edo oso gisa. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Nabigatzaileak orduan jakinaraziko dizu zer ondorio dituen luzapenak eskatutako baimen gehigarriak emateak egungo gunean, eta nabigatzaileari esan beharko diozu eskaera onartzen duzun edo uko egiten diozun. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Baimen gehigarrien eskaera onartzen baduzu, oraingo gunean edukiak hobeto iragazi ahal izango ditu. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Iragazki modu lehenetsia uBOL-en aukeren orrialdetik ezar dezakezu. Modu hoberena edo osoa aukeratzen baduzu lehenetsitako moduan, uBOL-i webgune guztietako datuak irakurtzeko eta aldatzeko baimena eman beharko diozu. -Keep in mind this is still a work in progress, with these end goals: +Gogoan izan oraindik lan bat dela, azken helburu hauekin: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Instalatzeko garaian, ez dago baimen zabalik. Erabiltzaileak esplizituki ematen ditu baimen zabalduak. -- Entirely declarative for reliability and CPU/memory efficiency. +- Erabat deklaratiboa fidagarritasunagatik eta CPU/memoriaren eraginkortasunagatik. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fa.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fa.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fa.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fa.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,13 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. -The default ruleset corresponds to uBlock Origin's default filterset: +مجموعه قوانین پیش فرض آن مطابق با مجموعه قوانین پیش فرض uBlock Origin است: - uBlock Origin's built-in filter lists - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fi.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fi.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fi.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fi.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) on kokeellinen *käyttöoikeudeton* MV3-pohjainen sisällönestotyökalu. +uBO Lite (uBOL) on *käyttöoikeudeton* MV3-pohjainen sisällönestotyökalu. Oletusarvoiset sääntömääritykset vastaavat uBlock Origin -laajennuksen oletuksia: @@ -6,26 +6,25 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Voit lisätä sääntömäärityksiä asetussivulta -- paina ponnahduspaneelin _Rataskuvaketta_. +Voit aktivoida lisää sääntömäärityksiä laajennuksen asetuksista – paina ponnahduspaneelin _Ratas_-kuvaketta. -uBOL on täysin deklaratiivinen, eli suodatus ei edellytä pysyvää uBOL-prosessia ja CSS-/JS-koodin manipulointiin perustuva sisällöneston suorittaa laajennuksen sijaan luotettavasti selainsovellus. Tämän ansiosta itse uBOL-laajennus ei kuormita prosessoria tai keskusmuistia suodatuksen tapahtuessa -- uBOL:n työprosessia tarvitaan _ainoastaan_ ponnahduspaneelin ja asetussivun käytön yhteydessä. +uBOL on täysin deklaratiivinen, eli suodatus ei edellytä pysyvää uBOL-prosessia ja CSS-/JS-koodin manipulointiin perustuva sisällönsuodatuksen suorittaa laajennusprosessin sijaan luotettavasti selainsovellus. Tämän ansiosta itse uBOL ei kuormita prosessoria tai keskusmuistia sisällöneston tapahtuessa -- uBOL:n työprosessia tarvitaan _ainoastaan_ ponnahduspaneelia ja asetussivuja käytettäessä. -uBO lite ei asennuksen jälkeen vaadi erityistä "oikeutta kaikkien tietojesi lukuun ja muokkaukseen" ja sen vuoksi sen toiminta on muita tätä käyttöoikeutta heti edellyttäviä estotyökaluja, kuten uBlock Orginia, rajoittuneempaa. +uBOL ei edellytä laajan tietojen luku- ja muokkausoikeuden myöntämistä asennuksen yhteydessä, jonka vuoksi sen oletusarvoiset valmiudet ovat uBlock Originia ja muita vastaavia sisällönestotyökaluja rajallisemmat. -On kuitenkin mahdollista myöntää *yksinomaisesti* uBOL:lle laajennetut käyttöoikeudet valikoiduille sivustoille niiden suodatuksen tehostamiseksi deklaratiivisella kosmeettisella suodatuksella ja scriplet-injektoinnilla. +On kuitenkin mahdollista myöntää *yksinomaisesti* uBOL:lle laajennetut käyttöoikeudet sivustokohtaisesti niiden suodatuksen tehostamiseksi kosmeettisella suodatuksella ja scriplet-injektoinnilla. -Laajemmat oikeudet myönnetään avoimelle sivustolle avaamalla ponnahduspaneeli ja valitsemalla korkeampi suodatustasi, kuten Optimaalinen tai Täysi. +Laajemmat oikeudet myönnetään avoimelle sivustolle avaamalla ponnahduspaneeli ja valitsemalla korkeampi suodatustaso, kuten "Optimaalinen" tai "Täysi". -Tällöin selain varoittaa laajennuksen avoimelle sivustolle pyytämien käyttöoikeuksien seurauksista ja pyytää käyttäjää hyväksymään tai hyläämään pyynnön. +Tällöin selain varoittaa laajennuksen avoimelle sivustolle pyytämien käyttöoikeuksien seurauksista ja pyytää hyväksymään tai hylkäämään pyynnön. Jos uBOL:n käyttöoikeuspyyntö avoimelle sivustolle hyväksytään, se pystyy suodattamaan sivuston sisältöä tehokkaammin. -Voit määrittää oletusarvoisen suodatustilan uBOL:n asetussivulta. Jos oletustilaksi valitaan Optimaalinen tai Täysi, on uBOL:lle myönnettävä "oikeus lukea ja muokata tietojasi kaikilla sivustoilla". +Voit asettaa oletusarvoisen suodatustilan uBOL:n asetussivulta. Jos valitset oletustilaksi Optimaalinen tai Täysi, on uBOL:lle myönnettävä oikeus lukea ja muokata tietojasi kaikilla verkkosivustoilla. -Huomioithan, että laajennusta kehitetään edelleen seuraavien tavoitteiden saavuttamiseksi: +Huomioithan, että laajennuksen kehitys vielä kesken, seuraavilla tavoitteilla: - Laajoja käyttöoikeuksia ei tarvita asennusvaiheesssa, vaan laajennetut oikeudet myönnetään aina sivustokohtaisesti käyttäjän toimesta. -- Täysin deklaratiivinen luotettavuutta ja alhaista prosessorin/muistin kuormitusta varten. +- Täysin deklaratiivinen luotettavuutta ja prosessorin/muistin kuormituksen keventämiseksi. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fil.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fil.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fil.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fil.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -Ang uBO Lite (uBOL) ay isang eksperimental at *permission-less* na pangharang ng content na nakabase sa MV3. +Ang uBO Lite (uBOL) ay isang eksperimental at *permission-less* na tagaharang ng content na nakabase sa MV3. Tulad ng uBlock Origin, ito rin ang mga default na listahan ng mga filter: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Listahan ni Peter Lowe sa mga ad at tracking server (Peter Lowe’s Ad and tracking server list) -- Listahan ng AdGuard sa mga Tracker na Nagkukunwari gamit ang CNAME (AdGuard CNAME-Cloaked Trackers) -Makakapagdagdag ka ng higit pang mga patakaran sa pahina ng mga opsyon -- pindutin ang icon ng _gulong_ sa popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. Deklaratibo lamang ang uBOL, kaya hindi nito kailangan ng permanenteng proseso upang mag-filter, at mainam na ginagawa ng browser mismo imbes na ekstensyon ang pagfi-filter sa content na nakabase sa CSS o JS. Ibig-sabihin, hindi kumokonsyumo ng CPU o memorya ang uBOL habang nanghaharang -- ang proseso ng trabahante ng serbisyo ay kailangan _lang_ kung nasa popup panel o pahina ng opsyon ka. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fr.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fr.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fr.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fr.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) est un bloqueur expérimental *à permissions réduites* basé sur le manifeste MV3. +uBO Lite (uBOL) est un bloqueur de contenu *sans permission* basé sur le manifeste MV3. Les règles par défaut correspondent au filtrage par défaut d'uBlock Origin : @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - La liste anti-serveurs pub et pistage de Peter Lowe -- La liste AdGuard anti-pisteurs à camouflage CNAME -Vous pouvez ajouter plus de règles en consultant la page des paramètres -- Cliquez sur l'_Engrenage_ dans le panneau pop-up. +Vous pouvez ajouter plus de règles en consultant la page des paramètres -- Cliquez sur l'icône de l'_Engrenage_ dans le panneau pop-up. uBOL est entièrement déclarative, c'est-à-dire qu'il n'y a pas besoin d'un processus uBOL permanent pour filtrer, et le filtrage basé sur l'injection CSS/JavaScript se fait en toute fiabilité par le navigateur lui-même. Cela veut dire qu'en soi, uBOL ne consomme pas de ressources processeur/mémoire pendant le blocage de contenu -- l'agent de service d'uBOL n'est sollicité _que_ quand vous interagissez avec le panneau pop-up ou la page des paramètres. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fy.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fy.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.fy.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.fy.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is in eksperimintele, *tastimmingsleaze* MV3-basearre ynhâldsblokkearder. +uBO Lite (uBOL) is in *tastimmingsleaze* MV3-basearre ynhâldsblokkearder. De standert regelset komt oerien mei de standert filterset fan uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking-serverlist -- AdGuard CNAME-Cloaked Trackers -Jo kinne mear regelsets tafoegje troch de opsjesside te besykjen – klik op it _tântsjilpiktogram_ yn it pop-uppaniel. +Jo kinne mear regelsets ynskeakelje troch de opsjesside te besykjen – klik op it _tântsjilpiktogram_ yn it pop-uppaniel. uBOL is folslein deklaratyf, wat betsjut dat in permanint uBOL-proses foar de filtering net nedich is, en ynhâldsfiltering op basis fan CSS/JS-ynjeksje op in betroubere manier troch de browser sels útfierd wurdt yn stee fan de útwreiding. Dit betsjut dat uBOL sels gjin CPU-/ûnthâldboarnen brûkt wylst ynhâldsblokkearring aktyf is – it serviceworker-proses fan uBOL is _allinnich_ fereaske as jo mei it pop-uppaniel of de opsjessiden wurkje. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ga.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ga.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ga.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ga.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. - -The default ruleset corresponds to uBlock Origin's default filterset: - -- uBlock Origin's built-in filter lists -- EasyList -- EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers - -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. - -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. - -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. - -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. - -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. - -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. - -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. - -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. - -Keep in mind this is still a work in progress, with these end goals: - -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. - -- Entirely declarative for reliability and CPU/memory efficiency. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.gl.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.gl.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.gl.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.gl.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) é un bloqueador de contido baseado en MV3 *sen permisos. -The default ruleset corresponds to uBlock Origin's default filterset: +O conxunto de regras predeterminado corresponde ao conxunto de filtros predeterminado de uBlock Origin: -- uBlock Origin's built-in filter lists +- Listas de filtros integradas de uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +Lista de servidores de seguimento e anuncios de Peter Lowe -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Podes activar máis grupos de regras indo á páxina de opcións -- preme na roda dentada no panel emerxente. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL é totalmente declarativo, o que significa que non é necesario un proceso permanente de uBOL para que se produza o filtrado e o filtrado de contido baseado en inxección de CSS/JS realízao de forma fiable o propio navegador en lugar da extensión. Isto significa que o propio uBOL non consume recursos de CPU/memoria mentres o bloqueo de contido está en curso -- o proceso do traballador do servizo de uBOL é necesario _só_ cando interactúas co panel emerxente ou coas páxinas de opcións. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL non require amplos permisos de "ler e modificar datos" no momento da instalación, de aí as súas capacidades limitadas fóra da caixa en comparación con uBlock Origin ou outros bloqueadores de contido que requiren amplos permisos de "ler e modificar datos" no momento da instalación. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Non obstante, uBOL permítelle *de forma explícita* conceder permisos estendidos en sitios específicos da súa elección para que poida filtrar mellor neses sitios mediante filtrado cosmético e inxeccións de scriptlet. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Para conceder permisos estendidos nun sitio determinado, abra o panel emerxente e escolle un modo de filtrado superior, como Óptimo ou Completa. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +A continuación, o navegador avisará sobre os efectos da concesión dos permisos adicionais solicitados pola extensión no sitio actual, e terá que indicarlle ao navegador se acepta ou rexeita a solicitude. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Se aceptas a solicitude de uBOL de permisos adicionais no sitio actual, poderá filtrar mellor o contido do sitio actual. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Podes establecer o modo de filtrado predeterminado desde a páxina de opcións de uBOL. Se escolle o modo Óptimo ou Completo como o predeterminado, terá que conceder a uBOL o permiso para ler e modificar datos en todos os sitios web. -Keep in mind this is still a work in progress, with these end goals: +Teña en conta que este aínda é un traballo en curso, cos seguintes obxectivos finais: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Non hai permisos de host amplos no momento da instalación. Os permisos estendidos son concedidos explícitamente polo usuario por cada sitio. -- Entirely declarative for reliability and CPU/memory efficiency. +- Totalmente declarativo para a fiabilidade e a eficiencia da CPU/memoria. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.gu.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.gu.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.gu.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.gu.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.he.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.he.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.he.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.he.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) הוא חוסם תוכן *ללא הרשאות* מבוסס MV3. -The default ruleset corresponds to uBlock Origin's default filterset: +ערכת הכללים ברירת מחדל שמתכתבת עם ערכת המסננים של uBlock Origin: -- uBlock Origin's built-in filter lists +- רשימת מסננים מובנים של uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- רשימת שרתי מודעות ומעקב של פיטר לואו -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +ניתן לאפשר קבוצות חוקים נוספות בדף האפשרויות - עם לחיצה על סמליל _גלגלי השיניים_ בחלונית הקופצת. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL הוא הכרזתי לחלוטין, כלומר אין צורך בתהליך uBOL קבוע כדי שהסינון יתרחש, וסינון תוכן מבוסס הזרקת CSS/JS מבוצע באופן אמין על ידי הדפדפן עצמו ולא על ידי ההרחבה. המשמעות היא ש־uBOL עצמו לא צורכך משאבי מעבד/זיכרון בזמן שחסימת התוכן מתרחשת – תהליך ה־service worker של uBOL נדרש _אך ורק_ בזמן הידוד עם החלון הקופץ או עם עמוד האפשרויות. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL לא דורש הרשאת "קריאה ושינוי נתונים" נרחבות במהלך ההתקנה, לכן היכולות המוגבלות שלה הישר מהקופסה בהשוואה ל־uBlock Origin או חוסמי תוכן אחרים הדורשים הרשאות "קריאה ושינוי נתונים" נרחבות כבר בזמן ההתקנה. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +עם זאת, uBOL מאפשר להעניק *באופן מפורש* הרשאות נרחבות לאתרים מסויימים על פי בחירה, למיטוב הסינון באתרים אלה, באמצעות סינון קוסמטי והזרקות סקריפלטים. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +כדי להעניק הרשאות נרחבות באתר נתון, נא לפתוח את הלוח הקופץ ולבחור באופן סינון גבוה יותר כגון מיטבי או מלא. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +לאחר מכן, תוצג אזהרת דפדפן על השפעות מתן הרשאות נוספות אותן מבקשת ההרחה באתר הנוכחי, הדפדפן ימתין לקבלת תשובה האם לקבל או לדוחות את בקשת ההרשאה. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +אם תקבל את הבקשה של uBOL להרשאות נוספות באתר הנוכחי, הוא יוכל לסנן טוב יותר תוכן עבור האתר הנוכחי. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +ניתן להגדיר את מצב הסינון המוגדר כברירת מחדל מדף האפשרויות של uBOL. אם הבחירה היתה באופןסינון מיטבי או מלא כברירת המחדל, יידרש להעניק ל־uBOL הרשאת קריאה שנוי נתונים בכל אתרי הרשת. -Keep in mind this is still a work in progress, with these end goals: +יש לזכור שזו עדיין 'עבודה בתהליך', עם המטרות הבאות: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- אין הרשאות מארח רחבות בזמן ההתקנה -- הרשאות מורחבות מוענקות במפורש על ידי המשתמש על בסיס לכל אתר. -- Entirely declarative for reliability and CPU/memory efficiency. +הכרזתי לחלוטין, אמין ויעיל בצריכת משאבי מעבד/זיכרון. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hi.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hi.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hi.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hi.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) एक *अनुमति-रहित* MV3-आधारित कन्टेन्ट ब्लॉकर है। -The default ruleset corresponds to uBlock Origin's default filterset: +डिफ़ॉल्ट रूलसेट uBlock Origin के डिफ़ॉल्ट फ़िल्टर सेट के अनुरूप होता है: -- uBlock Origin's built-in filter lists +- uBlock Origin की बिल्ट-इन फ़िल्टर सूचियां - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Peter Lowe की विज्ञापन एवं ट्रैकिंग सर्वर सू‍ची -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +आप विकल्प पृष्ठ पर जाकर और अधिक नियम-सेट सक्षम कर सकते हैं -- पॉपअप पैनल में _Cogs_ आइकन पर क्लिक करें। -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL पूरी तरह से वर्णनात्मक है, जिसका यह अर्थ है कि फ़िल्टरिंग के लिए एक स्थायी uBOL प्रक्रिया की कोई आवश्यकता नहीं है, और CSS/JS इंजेक्शन-आधारित कन्टेन्ट फ़िल्टरिंग एक्सटेंशन के बजाय ब्राउज़र द्वारा विश्वसनीय रूप से की जाती है। इसका यह अर्थ है कि कन्टेन्ट ब्लॉक करते समय uBOL द्वारा सीपीयू/मेमोरी संसाधनों का उपभोग स्वयं नहीं किया जाता है -- uBOL की सर्विस प्रोसेस की आवश्यकता _केवल_ तब होती है जब आप पॉपअप पैनल या विकल्प पृष्ठों पर कोई अंत:क्रिया करते हैं। -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL को इन्सटॉल करते समय "डेटा को पढ़ने और संशोधित करने" की व्यापक अनुमति की आवश्यकता नहीं होती है, अतः इसकी सीमित क्षमताओं तत्काल उपयोगिता की तुलना में uBlock Origin या अन्य कन्टेन्ट ब्लॉकर को इन्सटॉलेशन के समय "डेटा को पढ़ने और संशोधित करने" की व्यापक अनुमतियों की आवश्यकता होती है। -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +हालांकि, uBOL आपको अपनी मनपसंद विशिष्ट साइटों पर विस्तारित अनुमतियां देना *स्पष्ट रूप से* अनुमत करता है ताकि यह कॉस्मेटिक फ़िल्टरिंग और स्क्रिप्टलेट इंजेक्शन का उपयोग करके उन साइटों पर अच्छी तरह से फ़िल्टर कर सके। -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +किसी एक साइट पर विस्तारित अनुमतियां देने के लिए, पॉपअप पैनल खोलें और उच्च फ़िल्टरिंग मोड, जैसे कि 'अनुकूलतम' (ऑप्टिमल) या 'पूर्ण' (कंपलीट) चुनें। -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +इसके बाद ब्राउज़र द्वारा आपको वर्तमान साइट पर एक्सटेंशन द्वारा अनुरोधित अतिरिक्त अनुमतियों को देने के प्रभावों के बारे में चेतावनी दी जाएगी, और आपको ब्राउज़र को यह बताना होगा कि आप अनुरोध को स्वीकार करते हैं या अस्वीकार करते हैं। -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +यदि आप वर्तमान साइट पर अतिरिक्त अनुमतियों के लिए uBOL के अनुरोध को स्वीकार करते हैं, तो यह वर्तमान साइट के लिए कन्टेन्ट अच्छी तरह से फ़िल्टर करने में सक्षम होगा। -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +आप uBOL के विकल्प पृष्ठ से डिफ़ॉल्ट फ़िल्टरिंग मोड को सेट कर सकते हैं। यदि आप 'अनुकूलतम' (ऑप्टिमल) या 'पूर्ण' (कंपलीट) मोड को डिफ़ॉल्ट रूप से चुनते हैं, तो आपको uBOL को सभी वेबसाइटों पर डेटा को पढ़ने और संशोधित करने के लिए अनुमत करना होगा। -Keep in mind this is still a work in progress, with these end goals: +ध्यान रखें कि यह कार्य अभी भी प्रगतिधीन है, और इसके न‍िम्नांकित अंतिम लक्ष्यों तय किये गए हैं: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- इन्सटॉल करते समय कोई व्यापक होस्ट अनुमतियां नहीं -- विस्तारित अनुमतियां उपयोगकर्ता द्वारा हर एक साइट के आधार पर स्पष्ट रूप से दी जाती हैं। -- Entirely declarative for reliability and CPU/memory efficiency. +- विश्वसनीयता और सीपीयू/मेमोरी दक्षता के लिए पूरी तरह वर्णनात्मक। diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hr.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hr.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hr.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hr.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) je eksperimantani bloker sadržaja *bez dopuštenja* baziran na MV3. +uBO Lite (uBOL) je bloker sadržaja *bez dopuštenja* baziran na MV3. Zadana lista pravila odgovara uBlock Origin-ovoj zadanoj listi filtera: @@ -6,13 +6,12 @@ - EasyList - EasyPrivacy - Peter Lowe-ova lista oglasa i pratećih servera -- AdGuard CNAME-prikriveni pratići serveri -Možete dodati više skupova pravila tako što ćete posjetiti stranicu s opcijama -- kliknite ikonu _zupčanika_ na skočnoj ploči. +Možete omogućiti više skupova pravila tako što ćete posjetiti stranicu s opcijama -- kliknite ikonu _Cogs_ na skočnoj ploči. uBOL je u potpunosti deklarativan, što znači da nema potrebe za trajnim uBOL procesom za filtriranje, a filtriranje sadržaja temeljeno na ubacivanju CSS/JS pouzdano izvodi sam preglednik, a ne ekstenzija. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u tijeku -- uBOL-ov servisni radni proces potreban je _samo_ kada komunicirate s skočnom pločom ili stranicama s opcijama. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL ne zahtijeva široku dozvolu za "čitanje i izmjenu podataka" u vrijeme instalacije, stoga ima zadane ograničene mogućnosti u usporedbi s uBlock Origin ili drugim blokatorima sadržaja koji zahtijevaju veću dozvolu za "čitanje i izmjenu podataka" u vrijeme instalacije. Međutim, uBOL vam omogućuje da *eksplicitno* dodijelite proširena dopuštenja na određenim web-stranicama po vašem izboru tako da može bolje filtrirati te web-stranice koristeći kozmetičko filtriranje i injekcijske skripte. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hu.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hu.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hu.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hu.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +A uBO Lite (uBOL) egy *engedélyt nem igénylő* MV3-alapú tartalomblokkoló. Az alapértelmezett szabálykészlet megfelel a uBlock Origin alapértelmezett szűrőkészletének: -- uBlock Origin beépített filter listái +- uBlock Origin beépített szűrőlistái - EasyList - EasyPrivacy -- Peter Lowe hirdetés és nyomkövető szerver listája -- AdGuard CNAME-Cloaked Trackers +- Peter Lowe hirdetési és nyomkövető-kiszolgálókat tartalmazó listája -További szabályokat adhat hozzá a beállítások oldalon - kattintson a _Cogs_ ikonra a felugró panelen. +További szabályokat engedélyezhet a beállítások oldalon – kattintson a _Fogaskerekek_ ikonra a felugró panelen. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +A uBOL teljes mértékben deklaratív, vagyis nincs szükség állandó uBOL folyamatra a szűréshez, és a CSS/JS injektálás-alapú tartalomszűrést maga a böngésző végzi megbízhatóan, nem pedig a kiegészítő. Ez azt jelenti, hogy az uBOL maga nem fogyaszt CPU/memória erőforrásokat, amíg a tartalom blokkolása folyamatban van – az uBOL service worker folyamatára _csak_ akkor van szükség, amikor az felugró panellel vagy a beállítási oldalakkal érintkezik. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +A uBOL nem igényel széles körű „adatok módosítása és olvasása” engedélyt a telepítéskor, ezért korlátozott képességei vannak a uBlock Originhez vagy más tartalomblokkolókhoz képest, amelyek széles körű „adatok olvasása és módosítása” engedélyeket igényelnek a telepítésükkor. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Az uBOL azonban lehetővé teszi, hogy *kifejezetten* kiterjesztett engedélyeket adjon az Ön által választott bizonyos webhelyeknél, hogy jobban szűrhessen ezeken a webhelyeken kozmetikai szűréssel és parancsfájlbeillesztéssel. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Ha kiterjesztett engedélyeket szeretne adni egy adott webhelyen, nyissa meg a felugró panelt, és válasszon magasabb szűrési módot, mint az Optimális vagy a Teljes. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +A böngésző ekkor figyelmezteti Önt a bővítmény által kért további engedélyek megadásának hatásaira az aktuális webhelyen, és közölnie kell a böngészővel, hogy elfogadja-e vagy elutasítja a kérést. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Ha elfogadja az uBOL további engedélyekre vonatkozó kérését az aktuális webhelyen, akkor jobban tudja szűrni az aktuális webhely tartalmát. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Az alapértelmezett szűrési módot az uBOL beállítási oldalán állíthatja be. Ha az Optimális vagy a Teljes módot választja alapértelmezettként, akkor az uBOL-nak engedélyt kell adnia az adatok olvasására és módosítására az összes webhelyen. -Keep in mind this is still a work in progress, with these end goals: +Ne feledje, hogy ez még egy folyamatban lévő fejlesztés, a következő célokkal: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Nincsenek széles körű kiszolgálókra vonatkozó engedélyek a telepítés során – a kiterjesztett engedélyeket a felhasználó kifejezetten webhelyenként adja meg. -- Entirely declarative for reliability and CPU/memory efficiency. +- Teljesen deklaratív a nagyobb megbízhatóság, illetve CPU- és memóriahatékonyság érdekében. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hy.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hy.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.hy.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.hy.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,34 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL)-ը բովանդակության արգելափակիչ է, որը *չի պահանջում թույլտվություններ*, և հիմնված է MV3-ի վրա։ -The default ruleset corresponds to uBlock Origin's default filterset: +Կանոնների լռելյայն փաթեթը համապատասխանում է uBlock Origin-ի լռելյայն զտիչների փաթեթին։ -- uBlock Origin's built-in filter lists +- uBlock Origin-ի ներկառուցված զտիչների ցանկ - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Peter Lowe-ի գովազդային և հետագծող սպասարկիչների ցուցակ -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL-ն ամբողջությամբ դեկլարատիվ է, այսինքն՝ զտման համար անընդհատ կատարվող uBOL գործընթացի կարիք չկա, իսկ CSS/JS արմատավորման վրա հիմնված բովանդակության զտումը հուսալիորեն իրականացվում է զննիչի կողմից, այլ ոչ թե ընդլայնման միջոցով։ Սա նշանակում է, որ uBOL հավելումը չի սպառում մշակիչի/հիշողության որևէ ռեսուրս, երբ տեղի է ունենում գովազդի արգելափակումը. uBOL աշխատանքային գործընթացն աշխատում է _միայն_ երբ Դուք փոփոխություններ եք կատարում դուրս լողացող վահանակում կամ ընտրանքների էջում։ -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL-ը տեղադրման ժամանակ «տվյելները լիովին ընթերցելու և փոփոխելու» թույլտվություն չի պահանջում, ուստի այն ունի սահմանափակ հնարավորություններ՝ համեմատած uBlock Origin-ի և բովանդակության այլ արգելափակիչների հետ, որոնք տեղադրման ժամանակ պահանջում են այդպիսի թույլտվություն։ -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Однако uBOL позволяет *намеренно* давать расширенные разрешения для определенных сайтов - по вашему усмотрению, чтобы эффективнее работать, используя косметическую фильтрацию и scriptlet-внедрения. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Այնուամենայնիվ, uBOL-ը թույլ է տալիս *դիտմամբ* տրամադրել ընդլայնված թույլտվություններ Ձեր ընտրած կայքերի համար, որպեսզի այն կարողանա էլ ավելի լավ զտել այդ կայքերը՝ օգտագործելով կոսմետիկ զտումը և սցենարների արմատավորումները։ -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Для предоставления расширенных разрешений на текущем сайте - откройте всплывающую панель и выберите повышенный режим фильтрации: Оптимальный или Полный. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Ընթացիկ կայքում ընդլայնված թույլտվություններ տրամադրելու համար բացեք դուրս լողացող վահանակը և ընտրեք ընդլայնված զտման ռեժիմ՝ Գերադասելի կամ Ամբողջական։ -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Այնուհետև զննիչը կզգուշացնի Ձեզ ընթացիկ կայքում ընդլայնման կողմից պահանջվող լրացուցիչ թույլտվությունների տրամադրման հետևանքների մասին, և Դուք պետք է ընտրեք՝ ընդունում եք, թե մերժում եք հայտը։ -Keep in mind this is still a work in progress, with these end goals: +Եթե ​​ընդունեք uBOL-ին լրացուցիչ թույլտվություններ տալու հայտը, ապա այն կկարողանա ավելի արդյունավետ կերպով զտել ընթացիկ կայքի բովանդակությունը։ -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +Դուք կարող եք սահմանել զտման լռելյայն ռեժիմը uBOL-ի ընտրանքների էջում։ Եթե ​​որպես լռելյայն ընտրեք «Գերադասելի» կամ «Ամբողջական» ռեժիմը, պետք կլինի uBOL-ին թույլտվություն տրամադրեք կարդալու և փոփոխելու տվյալները բոլոր կայքերում։ -- Entirely declarative for reliability and CPU/memory efficiency. +Հիշեք, որ այս նախագիծը մշակման ակտիվ փուլում է, որ ունի հետևյալ նպատակները. + +- Տեղադրման ընթացքում Սահմանափակ թույլտվություններով աշխատանք տեղադրման ժամանակ. օգտվողը ընդլայնված թույլտվություններ է տալիս իր հայեցողությամբ, յուրաքանչյուր կայքի համար առանձին։ + +- Ամբողջովին դեկլարատիվ է հուսալիության և մշակիչի/հիշողության արտադրողականության համար։ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.id.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.id.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.id.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.id.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) adalah pemblokir konten berbasis MV3 yang membutuhkan lebih sedikit perizinan. -The default ruleset corresponds to uBlock Origin's default filterset: +Kumpulan aturan bawaan sesuai dengan kumpulan penyaringan bawaan uBlock Origin: -- Daftar filter asli uBlock Origin +- Daftar filter bawaan uBlock Origin - EasyList - EasyPrivacy - Daftar server iklan dan pelacak Peter Lowe -- AdGuard CNAME-Cloaked Trackers -kamu dapat menambahkan rulesets di halaman opsi -- klik ikon _Cogs_ di panel popup. +Anda dapat mengaktifkan lebih banyak kumpulan pengaturan dengan mengunjungi halaman opsi - klik ikon _Cogs_ pada panel popup. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL sepenuhnya deklaratif, yang mana tidak membutuhkan proses permanen uBOL agar penyaringan dapat terjadi, dan penyaringan konten berbasis injeksi CSS/JS dilakukan sepenuhnya oleh peramban itu sendiri ketimbang oleh ekstensi. Ini berarti bahwa uBOL sendiri tidak mengkonsumsi sumber daya CPU/memori selama melakukan pemblokiran konten -- proses pekerja layanan uBOL dibutuhkan _hanya_ ketika Anda berinteraksi dengan panel popup atau opsi halaman. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL tidak membutuhkan izin "baca dan modifikasi data" pada waktu penginstalan, maka kemampuannya lebih terbatas jika dibandingkan dengan uBlock Origin atau pemblokir konten lain yang memerlukan izin "baca dan modifikasi data" pada waktu penginstalan. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Namun, uBOL memberi anda opsi untuk *secara eksplisit* memberikan izin tambahan pada situs pilihan Anda, sehingga dapat memfilter situs tersebut dengan lebih baik menggunakan pemfilteran kosmetik dan injeksi scriptlet. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Untuk memberikan izin tambahan pada situs tertentu, buka panel popup dan pilih mode pemfilteran yang lebih tinggi seperti Optimal atau Complete. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Perambaan kemudian akan memperingatkan anda tentang efek memberikan izin tambahan yang diminta oleh ekstensi pada situs saat ini, dan Anda harus memberitahu perambaan apakah anda menyetujui atau menolak permintaan. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Jika Anda menyetujui permintaan uBOL untuk izin tambahan pada situs terkini, uBOL akan dapat menyaring konten dengan lebih baik untuk situs terkini. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Anda dapat menentukan mode penyaringan bawaan dari halaman pengaturan uBOL Jika Anda memilih mode Optimal atau Complete sebagai mode bawaan, Anda perlu memberikan uBOL izin untuk membaca dan mengubah data pada semua situs web. -Keep in mind this is still a work in progress, with these end goals: +Mohon diingat bahwa ini msaih dalam tahap proses pengerjaan, dengan tujuan akhir sebagai berikut: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Tidak ada izin pengguna yang luas saat penginstalan -- izin tambahan diberikan secara eksplisit oleh pengguna berdasarkan tiap situs. -- Entirely declarative for reliability and CPU/memory efficiency. +- Sepenuhnya delkaratif untuk reliabilitas dan CPU/efisiensi memori. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.it.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.it.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.it.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.it.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) è un blocco dei contenuti sperimentale basato su MV3 *senza autorizzazione*. +uBO Lite (uBOL) è un sistema per bloccare contenuti che *non richiede autorizzazioni* basato su MV3. -Il set di regole predefinito corrisponde al set di filtri predefinito di uBlock Origin: +L'insieme di regole predefinito corrisponde all'insieme di filtri predefinito di uBlock Origin: -- Elenchi dei filtri integrati di uBlock Origin +- Liste dei filtri integrati di uBlock Origin - EasyList - EasyPrivacy - Elenco dei server pubblicitari e di tracciamento di Peter Lowe -- Tracker mascherati da AdGuard CNAME -Puoi aggiungere altri set di regole visitando la pagina delle opzioni: fai clic sull'icona _Cogs_ nel pannello a comparsa. +Puoi abilitare altri set di regole visitando la pagina delle opzioni: clicca sull'icona _Cogs_ nel pannello a comparsa. -uBOL è interamente dichiarativo ovvero non è necessario un processo uBOL permanente per eseguire il filtraggio e il filtraggio dei contenuti CSS/JS inietattai viene eseguito in modo affidabile dal browser stesso piuttosto che dall'estensione. Ciò significa che lo stesso uBOL non consuma risorse di CPU/memoria mentre il blocco dei contenuti è in corso: il processo di lavoro di servizio di uBOL è richiesto _solo_ quando interagisci con il pannello popup o le pagine delle opzioni. +uBOL è interamente dichiarativo, ovvero non è necessario che ci sia un processo di uBOL permanente per poter eseguire il filtraggio; e il filtraggio dei contenuti basato sull'iniezione di elementi CSS/JS viene eseguito in modo affidabile dal browser stesso piuttosto che dall'estensione. Ciò significa che lo stesso uBOL non consuma risorse di CPU o memoria mentre il blocco dei contenuti viene eseguito: il processo che esegue il servizio di uBOL è richiesto _solamente_ quando interagisci con il pannello a comparsa o con le pagine delle opzioni. uBOL non richiede un'ampia autorizzazione di "lettura e modifica dei dati" al momento dell'installazione, da qui le sue capacità limitate rispetto a uBlock Origin o ad altre estensioni che richiedono ampie autorizzazioni di "lettura e modifica dei dati" al momento dell'installazione. Tuttavia, uBOL consente di concedere *esplicitamente* permessi estesi a siti specifici di vostra scelta, in modo da poter filtrare meglio tali siti utilizzando il filtraggio cosmetico e le iniezioni di scriptlet. -Per concedere autorizzazioni estese su un determinato sito, apri il pannello popup e scegli una modalità di filtraggio più restrittiva come Ottimale o Completa. +Per concedere autorizzazioni estese su un determinato sito, apri il pannello popup e scegli una modalità di filtraggio più elevata come Ottimale o Completa. -Il browser ti avviserà degli effetti della concessione delle autorizzazioni aggiuntive richieste dall'estensione sul sito corrente e dovrai comunicare al browser se accetti o rifiuti la richiesta. +Il browser quindi ti avviserà degli effetti della concessione delle autorizzazioni aggiuntive richieste dall'estensione sul sito corrente e dovrai comunicare al browser se accetti o rifiuti la richiesta. -Se accetti la richiesta di uBOL per ulteriori autorizzazioni sul sito corrente, sarà in grado di filtrare meglio i contenuti per il sito corrente. +Se accetti la richiesta di uBOL per autorizzazioni aggiuntive sul sito corrente, esso sarà in grado di filtrare meglio il contenuto per il sito corrente. Puoi impostare la modalità di filtraggio predefinita dalla pagina delle opzioni di uBOL. Se scegli come predefinita la modalità Ottimale o Completa, dovrai concedere a uBOL il permesso di leggere e modificare i dati di tutti i siti web. Tieni presente che questo è ancora un work in progress, con questi obiettivi finali: -- Nessuna autorizzazione host ampia al momento dell'installazione: le autorizzazioni estese vengono concesse esplicitamente dall'utente in base al sito. +- Nessuna autorizzazione estesa degli host al momento dell'installazione; le autorizzazioni estese vengono concesse esplicitamente dall'utente in base al sito. - Interamente dichiarativo per l'affidabilità e l'efficienza della CPU/memoria. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ja.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ja.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ja.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ja.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,28 +1,27 @@ -uBO Lite(uBOL)は実験的な*承認なし*の MV3 ベースのコンテンツ ブロッカーです。 +uBO Lite (uBOL) は権限を必要としない MV3 ベースのコンテンツブロッカーです。 -デフォルトのルールセットは uBlock Origin のデフォルトのフィルターセットと一致します。: +デフォルトのルールセットは以下の通りです。uBlock Origin のデフォルトフィルターセットと同じです。 -- uBlock Origin のビルトイン フィルターリスト +- uBlock Origin の内蔵フィルターリスト - EasyList - EasyPrivacy -Peter Lowe の広告とトラッキングサーバーのリスト -- AdGuard の CNAME Cloak トラッカーのリスト +- Peter Lowe’s Ad and tracking server list -オプションページでルールセットを追加できます -- ポップアップ パネルの「歯車」アイコンをクリックします。 +オプションページでルールセットを有効化できます。ポップアップパネルの「歯車」アイコンをクリックしてください。 uBOL は完全に宣言的です。つまり、フィルタリングを行うための恒久的な uBOL プロセスは必要なく、CSS/JS インジェクション ベースのコンテンツフィルタリングは拡張機能ではなくブラウザによって、確実に実行されます。 これは uBOL がコンテンツブロッキングの際に CPU、メモリを消費しないことを意味します。uBOL のサービス ワーカーは ポップアップ パネルや設定ページでのみ必要とされます。 -uBOL はインストール時に広範な「データの読み取りと変更」の権限を要求しません。したがって uBlock Origin やその他の、インストール時に広範な「データの読み取りと変更」の権限を要求するコンテンツ ブロッカーに比べて、行えることが制限されています。 +uBOL はインストール時に広範な「データの読み取りと変更」の権限を要求しません。したがって uBlock Origin やその他の、インストール時に広範な「データの読み取りと変更」の権限を要求するコンテンツブロッカーに比べて、行えることが制限されています。 -しかし、uBOL は特定のサイトに対してユーザーが *明示的に* 拡張された権限を付与することによって、より良いフィルターや綺麗なスクリプトの挿入を可能とします。 +しかし、ユーザーの選んだ特定のサイトに対する拡張権限を「明示的に」付与すれば、そのサイト上で整形フィルターやスクリプトレットの挿入を用いた優れたフィルタリングを行うことができます。 特定のサイトで拡張された権限を付与するには、ポップアップ パネルを開いて、「最適」や「完全」のようなより高いフィルタリングモードを選択します。 -ブラウザは、現在のサイトで拡張機能によってリクエストされた追加の権限を付与することによってもたらされる影響について警告します。承認または拒否することができます。 +ブラウザーは、現在のサイトで拡張機能によってリクエストされた追加の権限を付与することによってもたらされる影響について警告します。承認または拒否することができます。 現在のサイトでの uBOL のリクエストを承認すると、現在のサイトにより良いフィルターを適用できるようになります。 -uBOL の設定ページで規定のフィルタリング モードを設定できます。 「最適」または「完全」を規定のフィルタリング モードに設定した場合、すべてのWebサイトで「データの読み取りと変更」権限を付与する必要があります。 +uBOL の設定ページで既定のフィルタリングモードを設定できます。 「最適」または「完全」を規定のフィルタリング モードに設定した場合、すべてのWebサイトで「データの読み取りと変更」権限を付与する必要があります。 注意として、uBOL はまだ開発途中で、これらの開発目標があります。 diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ka.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ka.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ka.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ka.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) საცდელი, *ნებართვებისგან თავისუფალი*, MV3-ზე დაფუძნებული შიგთავსის შემზღუდავია. +uBO Lite (uBOL) *ნებართვებისგან თავისუფალი* MV3-ზე დაფუძნებული შიგთავსის შემზღუდავია. წესების ნაგულისხმევი კრებული იგივეა, რასაც uBlock Origin იყენებს: @@ -6,15 +6,14 @@ - EasyList - EasyPrivacy - Peter Lowe – სარეკლამო სერვერების სია -- AdGuard – CNAME-ით შენიღბული მეთვალყურეები -შეგიძლიათ სხვა კრებულებიც დაამატეთ პარამეტრების გვერდიდან -- დაწკაპეთ _Cogs_ ხატულაზე ამომხტომ არეში. +შეგიძლიათ სხვა კრებულებიც აამოქმედოთ პარამეტრების გვერდიდან -- დაწკაპეთ _Cogs_ ხატულაზე ამომხტომ არეში. uBOL სრულად დეკლარაციულია, ანუ არაა საჭირო მუდმივად იყოს გაშვებული uBOL-პროცესი გასაფილტრად, CSS/JS ჩანაცვლებით შიგთავსის გაფილტვრას თავად ბრაუზერი უზრუნველყოფს ნაცვლად გაფართოებისა, რაც მეტად საიმედოა. შესაბამისად, uBOL თავად არ დატვირთავს პროცესორს/ოპერატიულს შიგთავსის შეზღუდვის დროს -- uBOL-ის შუამავალი მომსახურე პროცესი საჭიროა _მხოლოდ_ მაშინ, როცა ამომხტომ არესთან ურთიერთქმედებთ ან ცვლით პარამეტრებს. uBOL არ საჭიროებს „მონაცემთა წაკითხვისა და შეცვლის“ სრულ ნებართვას დაყენებისას, ვინაიდან მოკვეცილი შესაძლებლობებითაა წარმოდგენილი uBlock Origin-თან ან რეკლამის სხვა შემზღუდავებთან შედარებით, რომლებიც ერთბაშად ითხოვს „მონაცემთა წაკითხვისა და შეცვლის“ უფლებას დაყენებისთანავე. -თუმცაღა uBOL საშუალებას გაძლევთ *მკაფიო* თანხმობით მიუთითოთ გაფართოებული ნებართვები ცალკეულ საიტებზე სურვილისამებრ, რომ უკეთ შეიზღუდოს შიგთავსი ხილული ელემენტების გაფილტვრითა და პროგრამული ჩამატებებით. +ამასთანავე, uBOL საშუალებას გაძლევთ *მკაფიო* თანხმობით მიუთითოთ გაფართოებული ნებართვები ცალკეულ საიტებზე სურვილისამებრ, რომ უკეთ შეიზღუდოს შიგთავსი ხილული ელემენტების გაფილტვრითა და პროგრამული ჩამატებებით. გაფართოებული ნებართვების მისაცემად მითითებულ საიტზე, გახსენით ამომხტომი არე და აირჩიეთ ფილტრაციის უფრო მაღალი დონე, როგორიცაა „წონასწორული“ ან „სრული“. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.kk.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.kk.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.kk.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.kk.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.kn.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.kn.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.kn.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.kn.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,13 +6,12 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. ಇದರರ್ಥ ವಿಷಯ ನಿರ್ಬಂಧಿಸುವಿಕೆಯು ನಡೆಯುತ್ತಿರುವಾಗ uBOL ಸ್ವತಃ CPU/ಮೆಮೊರಿ ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಳಸುವುದಿಲ್ಲ -- ನೀವು ಪಾಪ್ಅಪ್ ಪ್ಯಾನೆಲ್ ಅಥವಾ ಆಯ್ಕೆಯ ಪುಟಗಳೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸಿದಾಗ uBOL ನ ಸೇವಾ ವರ್ಕರ್ ಪ್ರಕ್ರಿಯೆಯು _ಮಾತ್ರಾ_ ಅಗತ್ಯವಿದೆ. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL ಗೆ ಅನುಸ್ಥಾಪನೆಯ ಸಮಯದಲ್ಲಿ ವಿಶಾಲವಾದ "ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು" ಅನುಮತಿಯ ಅಗತ್ಯವಿರುವುದಿಲ್ಲ, ಆದ್ದರಿಂದ uBlock ಮೂಲಕ್ಕೆ ಹೋಲಿಸಿದರೆ ಅದರ ಸೀಮಿತ ಸಾಮರ್ಥ್ಯಗಳು ಅಥವಾ ಅನುಸ್ಥಾಪನೆಯ ಸಮಯದಲ್ಲಿ ವಿಶಾಲವಾದ "ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು" ಅನುಮತಿಗಳ ಅಗತ್ಯವಿರುವ ಇತರ ವಿಷಯ ಬ್ಲಾಕರ್‌ಗಳಿಗೆ ಹೋಲಿಸಿದರೆ. However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. @@ -22,9 +21,9 @@ If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +You can set the default filtering mode from uBOL's options page. ನೀವು ಆಪ್ಟಿಮಲ್ ಅಥವಾ ಕಂಪ್ಲೀಟ್ ಮೋಡ್ ಅನ್ನು ಡಿಫಾಲ್ಟ್ ಆಗಿ ಆರಿಸಿದರೆ, ಎಲ್ಲಾ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿನ ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು ನೀವು uBOL ಗೆ ಅನುಮತಿಯನ್ನು ನೀಡಬೇಕಾಗುತ್ತದೆ. -Keep in mind this is still a work in progress, with these end goals: +ಈ ಅಂತಿಮ ಗುರಿಗಳೊಂದಿಗೆ ಇದು ಇನ್ನೂ ಪ್ರಗತಿಯಲ್ಲಿದೆ ಎಂಬುದನ್ನು ನೆನಪಿನಲ್ಲಿಡಿ: - No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ko.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ko.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ko.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ko.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite(uBOL)는 *적은 권한을 요구하는* 실험적인 MV3 기반 콘텐츠 차단기입니다. +uBO Lite(uBOL)는 *적은 권한을 요구하는* MV3 기반 콘텐츠 차단기입니다. 기본 규칙 목록은 uBlock Origin의 기본 필터 목록과 대응됩니다. @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -설정 페이지에서 규칙 목록을 더욱 추가할 수 있습니다. 팝업 창의 _Cogs_ 아이콘을 누르세요. +설정 페이지에서 규칙 목록을 더 활성화할 수 있습니다. 팝업 창의 _Cogs_ 아이콘을 누르세요. uBOL은 완전히 선언적이라 필터링 중 영구적으로 실행되는 uBOL 프로세스를 필요로 하지 않으며, CSS/JS 주입 기반 콘텐츠 필터링이 확장 프로그램이 아닌 브라우저 자체에서 더욱 안정적으로 동작합니다. 즉 uBOL 자체는 콘텐츠 차단을 하는 동안 CPU/메모리 리소스를 소비하지 않습니다. uBOL 서비스워커 프로세스는 사용자가 팝업 창이나 설정을 열었을 _때에만_ 동작합니다. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ku.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ku.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ku.txt 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ku.txt 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,30 @@ +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. + +The default ruleset corresponds to uBlock Origin's default filterset: + +- uBlock Origin's built-in filter lists +- EasyList +- EasyPrivacy +- Peter Lowe’s Ad and tracking server list + +You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. + +uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. + +uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. + +However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. + +To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. + +The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. + +If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. + +You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. + +Keep in mind this is still a work in progress, with these end goals: + +- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. + +- Entirely declarative for reliability and CPU/memory efficiency. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.lt.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.lt.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.lt.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.lt.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.lv.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.lv.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.lv.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.lv.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) ir izmēģinājuma *bezatļauju* uz MV# balstīts satura aizturētājs. +uBO Lite (uBOL) ir *bezatļauju* uz MV3 balstīts satura aizturētājs. Noklusējuma nosacījumu kopa atbilst uBokc Origin noklusējuma aizturēšanas kopai: @@ -6,26 +6,25 @@ - EasyList - EasyPrivacy - Pētera Lova (Peter Lowe) reklāmu un izsakošanas serveru saraksts -- AdGuard ar CNAME aizsegtie izsekotāji -Vairāk nosacījumu kopu var pievienot iestatījumu sadaļā -- jāklikšķina _Zobratu_ ikona uznirstošajā logā. +Vairāk nosacījumu kopu var iespējot iestatījumu sadaļā -- jāklikšķina _Zobratu_ ikona uznirstošajā logā. uBOL ir pilnībā vispārīgs, kas nozīmē, ka nav nepieciešamības pēc pastāvīga uBOL procesa, lai notiktu aizturēšana, un uz CSS/JS ievietošanu balstīta satura aizturēšanu uzticami veic pārlūks, nevis paplašinājums. Tas nozīmē, ka uBOL pats par sevi neizmanto procesoru un atmiņu, kamēr satura aizturēšana ir notiekoša -- uBOL pakalpojuma strādņa process ir nepieciešams _tikai_ tad, kad notiek mijiedarbība ar uznirstošo logu vai iestatījumu sadaļām. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL nav nepieciešamas plašas "lasīt un pārveidot datus" atļaujas uzstādīšanas laikā, tāpēc tam ir ierobežotas spējas pēc noklusējuma, salīdzinājumā ar uBlock Origin vai citiem satura aizturētājiem, kas pieprasa plašas "lasīt un pārveidot datus" atļaujas uzstādīšanas laikā. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Tomēr uBOL ļauj piešķirt paplašinātās atļaujas *tieši* noteiktās vietnēs pēc izvēles, lai tas varētu labāk veikt aizturēšanu tajās, izmantojot kosmētisku aizturēšanu un skriptu ievietošanu. Lai nodrošinātu paplašinātas piekļuves tiesības noteiktā vietnē, jāatver uznirstošais logs un jāizvēlas striktāks aizturēšanas veids, kā, piemēram, "Labākais" vai "Pilnīgais". -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Pārlūks tad brīdinās ietekmi, ko radīs paplašinājuma pieprasīto papildu atļauju nodrošināšana pašreizējā vietnē, un būs jānorāda, vai pieprasījums tiek apstiprināts vai noraidīts. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Ja pašreizējā vietnē tiek apstiprināts uBOL papildu atļauju pieprasījums, paplašinājums varēs labāk veikt satura aizturēšanu. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Noklusējuma aizturēšanas veids ir norādāms uBOL uzstādījumu lapā. Ja tiek izvēlēts "Labākais" vai "Pilnīgais" kā noklusējuma, tad būs nepieciešams nodrošināt uBOL tiesības rakstīt un pārveidot datus visās tīmekļa vietnēs. -Keep in mind this is still a work in progress, with these end goals: +Jāpatur prātā, ka šī iespēja joprojām tiek izstrādāta ar šādiem mērķiem: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Nav plašu saimniekdatora atļauju uzstādīšanas laikā -- paplašinātas atļaujas nodrošina lietotājs atsevišķi katrai vietnei. -- Entirely declarative for reliability and CPU/memory efficiency. +- Pilnībā vispārīgs - uzticamībai un procesora/atmiņas lietderīgai izmantošanai. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.mk.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.mk.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.mk.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.mk.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) е *без дозвола* MV3-базиран блокатор на содржини. -The default ruleset corresponds to uBlock Origin's default filterset: +Стандардниот сет на правила одговара на стандардниот филтер сет на uBlock Origin: -- uBlock Origin's built-in filter lists +- Вградени филтер листи на uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Листа на реклами и следачи на Peter Lowe -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Можете да овозможите повеќе сетови на правила посетувајќи ја страницата со опции - кликнете на иконата _запчаник_ во попап панел. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL е целосно декларативен, што значи дека не е потребен траен процес на uBOL за филтрирање да се одвива, а филтрирањето на содржини врз основа на инјекција на CSS/JS се извршува со сигурност од самото браузер, а не од самата екстензија. Ова значи дека самиот uBOL не консумира ресурси на CPU/меморија додека блокирањето на содржини е во тек - процесот на службениот работник на uBOL е потребен _само_ кога ќе е потребен со попап панел или страниците со опции. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL не бара широка дозвола за „читање и модификување на податоци“ во време на инсталација, па затоа неговите ограничени можности излезат од кутијата во споредба со uBlock Origin или други блокатори на содржини кои бараат широка „читање и модификување на податоци“ дозволи во време на инсталација. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Сепак, uBOL ви овозможува *експлицитно* да доделите проширени дозволи на специфични страници по ваш избор, така што може подобро да филтрира на тие страници користејќи козметичко филтрирање и инјекции на скрипти. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +За да доделите проширени дозволи на одредена страница, отворете го исфрлениот панел и изберете повисок режим на филтрирање, како што се Оптимален или Комплетен. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Браузерот ќе ве предупреди за ефектите на задолжителното доделување на дополнителните дозволи кои ги побарала екстензијата на тековната страница, а вие треба да му кажете на браузерот дали ја прифаќате или одбивате побараното. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Ако ја прифатите побараното од uBOL за дополнителни дозволи на тековната страница, тоа ќе може подобро да филтрира содржина за тековната страница. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Можете да го поставите подразбираниот режим на филтрирање од страницата со опции на uBOL. Ако ја изберете Оптималната или Комплетната верзија како подразбирана, ќе треба да му овозможите на uBOL дозвола да чита и модифицира податоци на сите веб-страници. -Keep in mind this is still a work in progress, with these end goals: +Имајте на ум дека ова сè уште е работа во тек, со следниве завршни цели: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Нема широки хост дозволи при инсталација - проширените дозволи се доделуваат експлицитно од корисникот на основа на секоја страница. -- Entirely declarative for reliability and CPU/memory efficiency. +- Целосно декларативен за сигурност и ефикасност на CPU/меморија. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ml.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ml.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ml.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ml.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) ഒരു *അനുമതി-കുറവ്* MV3 അടിസ്ഥാനമാക്കിയുള്ള ഉള്ളടക്ക ബ്ലോക്കറാണ്. -The default ruleset corresponds to uBlock Origin's default filterset: +ഡിഫോൾട്ട് റൂൾസെറ്റ് uBlock Origin-ന്റെ ഡിഫോൾട്ട് ഫിൽട്ടർസെറ്റുമായി യോജിക്കുന്നു: -- uBlock Origin's built-in filter lists -- EasyList -- EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- uBlock ഒറിജിനിന്റെ ബിൽറ്റ്-ഇൻ ഫിൽട്ടർ ലിസ്റ്റുകൾ +- ഈസി ലിസ്റ്റ് +- ഈസി സ്വകാര്യത +- പീറ്റർ ലോവിന്റെ പരസ്യവും ട്രാക്കിംഗ് സെർവർ ലിസ്റ്റും -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL പൂർണ്ണമായും ഡിക്ലറേറ്റീവ് ആണ്, അതായത് ഫിൽട്ടറിംഗ് സംഭവിക്കുന്നതിന് ഒരു സ്ഥിരമായ uBOL പ്രക്രിയയുടെ ആവശ്യമില്ല, കൂടാതെ CSS/JS ഇഞ്ചക്ഷൻ അടിസ്ഥാനമാക്കിയുള്ള ഉള്ളടക്ക ഫിൽട്ടറിംഗ്, എക്സ്റ്റൻഷനേക്കാൾ വിശ്വസനീയമായി ബ്രൗസർ തന്നെ നിർവഹിക്കുന്നു. ഉള്ളടക്കം തടയൽ നടന്നുകൊണ്ടിരിക്കുമ്പോൾ uBOL തന്നെ CPU/മെമ്മറി ഉറവിടങ്ങൾ ഉപയോഗിക്കില്ല എന്നാണ് ഇതിനർത്ഥം -- നിങ്ങൾ പോപ്പ്അപ്പ് പാനലുമായോ ഓപ്‌ഷൻ പേജുകളുമായോ സംവദിക്കുമ്പോൾ _only_ uBOL-ന്റെ സേവന വർക്കർ പ്രോസസ്സ് ആവശ്യമാണ്. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +ഇൻസ്റ്റാളേഷൻ സമയത്ത് uBOL ന് വിശാലമായ "ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും" അനുമതി ആവശ്യമില്ല, അതിനാൽ uBlock ഒറിജിൻ അല്ലെങ്കിൽ മറ്റ് ഉള്ളടക്ക ബ്ലോക്കറുകൾ എന്നിവയുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ അതിന്റെ പരിമിതമായ കഴിവുകൾ ഇൻസ്റ്റാളേഷൻ സമയത്ത് വിശാലമായ "ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും" അനുമതികൾ ആവശ്യമാണ്. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +എന്നിരുന്നാലും, നിങ്ങൾ തിരഞ്ഞെടുക്കുന്ന നിർദ്ദിഷ്ട സൈറ്റുകളിൽ വിപുലീകൃത അനുമതികൾ *വ്യക്തമായി* നൽകാൻ uBOL നിങ്ങളെ അനുവദിക്കുന്നു, അതുവഴി കോസ്മെറ്റിക് ഫിൽട്ടറിംഗും സ്ക്രിപ്റ്റ്ലെറ്റ് കുത്തിവയ്പ്പുകളും ഉപയോഗിച്ച് ആ സൈറ്റുകളിൽ മികച്ച രീതിയിൽ ഫിൽട്ടർ ചെയ്യാൻ കഴിയും. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +തന്നിരിക്കുന്ന സൈറ്റിൽ വിപുലമായ അനുമതികൾ നൽകുന്നതിന്, പോപ്പ്അപ്പ് പാനൽ തുറന്ന് ഒപ്റ്റിമൽ അല്ലെങ്കിൽ കംപ്ലീറ്റ് പോലുള്ള ഉയർന്ന ഫിൽട്ടറിംഗ് മോഡ് തിരഞ്ഞെടുക്കുക. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +നിലവിലെ സൈറ്റിൽ വിപുലീകരണം അഭ്യർത്ഥിച്ച അധിക അനുമതികൾ നൽകുന്നതിന്റെ ഫലങ്ങളെക്കുറിച്ച് ബ്രൗസർ നിങ്ങൾക്ക് മുന്നറിയിപ്പ് നൽകും, നിങ്ങൾ അഭ്യർത്ഥന സ്വീകരിക്കുകയോ നിരസിക്കുകയോ ചെയ്യണോ എന്ന് നിങ്ങൾ ബ്രൗസറിനോട് പറയേണ്ടിവരും. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +നിലവിലെ സൈറ്റിൽ കൂടുതൽ അനുമതികൾക്കായുള്ള uBOL-ന്റെ അഭ്യർത്ഥന നിങ്ങൾ അംഗീകരിക്കുകയാണെങ്കിൽ, നിലവിലെ സൈറ്റിനായി മികച്ച ഉള്ളടക്കം ഫിൽട്ടർ ചെയ്യാൻ അതിന് കഴിയും. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +uBOL-ന്റെ ഓപ്‌ഷൻ പേജിൽ നിന്ന് നിങ്ങൾക്ക് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് സജ്ജമാക്കാൻ കഴിയും. ഒപ്റ്റിമൽ അല്ലെങ്കിൽ കംപ്ലീറ്റ് മോഡ് ഡിഫോൾട്ടായി നിങ്ങൾ തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ, എല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും നിങ്ങൾ uBOL-ന് അനുമതി നൽകേണ്ടതുണ്ട്. -Keep in mind this is still a work in progress, with these end goals: +ഈ അന്തിമ ലക്ഷ്യങ്ങളോടെ ഇത് ഇപ്പോഴും പുരോഗമിക്കുന്ന ഒരു ജോലിയാണെന്ന് ഓർമ്മിക്കുക: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- ഇൻസ്റ്റാളേഷൻ സമയത്ത് ബ്രോഡ് ഹോസ്റ്റ് അനുമതികളൊന്നുമില്ല -- ഓരോ സൈറ്റിന്റെ അടിസ്ഥാനത്തിൽ വിപുലീകൃത അനുമതികൾ ഉപയോക്താവ് വ്യക്തമായി നൽകുന്നു. -- Entirely declarative for reliability and CPU/memory efficiency. +- വിശ്വാസ്യതയ്ക്കും സിപിയു/മെമ്മറി കാര്യക്ഷമതയ്ക്കും പൂർണ്ണമായും പ്രഖ്യാപനം. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.mr.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.mr.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.mr.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.mr.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ms.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ms.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ms.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ms.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) ialah penyekat kandungan berasaskan MV3. -The default ruleset corresponds to uBlock Origin's default filterset: +Set peraturan lalai sepadan dengan set penapis lalai uBlock Origin: -- uBlock Origin's built-in filter lists +- Senarai penapis terbina dalam uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Senarai pelayan iklan dan penjejakan 'Peter Lowe' -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL adalah deklaratif sepenuhnya, bermakna tidak ada keperluan untuk proses uBOL kekal untuk penapisan berlaku, dan penapisan kandungan berasaskan suntikan CSS/JS dilakukan sepenuhnya oleh penyemak imbas itu sendiri dan bukannya oleh sambungan. Ini bermakna uBOL sendiri tidak menggunakan sumber CPU/memori semasa penyekatan kandungan sedang berjalan -- proses pekerja perkhidmatan uBOL diperlukan _hanya_ apabila anda berinteraksi dengan panel timbul atau halaman pilihan. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL tidak memerlukan kebenaran "baca dan ubah suai data" yang luas pada masa pemasangan, oleh itu keupayaan terhadnya di luar kotak berbanding dengan uBlock Origin atau penyekat kandungan lain yang memerlukan kebenaran "baca dan ubah suai data" yang luas pada masa pemasangan. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Walau bagaimanapun, uBOL membenarkan anda *dengan jelas* memberikan kebenaran lanjutan pada tapak tertentu pilihan anda supaya ia boleh menapis dengan lebih baik pada tapak tersebut menggunakan penapisan kosmetik dan suntikan skrip. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Untuk memberikan kebenaran lanjutan pada tapak tertentu, buka panel timbul dan pilih mod penapisan yang lebih tinggi seperti Optimum atau Lengkap. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Penyemak imbas kemudian akan memberi amaran kepada anda tentang kesan pemberian kebenaran tambahan yang diminta oleh sambungan pada tapak semasa dan anda perlu memberitahu penyemak imbas sama ada anda menerima atau menolak permintaan tersebut. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Jika anda menerima permintaan uBOL untuk mendapatkan kebenaran tambahan pada tapak semasa, ia akan dapat menapis kandungan dengan lebih baik untuk tapak semasa. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Anda boleh menetapkan mod penapisan lalai dari halaman pilihan 'uBOL'. Jika anda memilih mod Optimum atau Lengkap sebagai mod lalai, anda perlu memberikan uBOL kebenaran untuk membaca dan mengubah suai data pada semua tapak web. -Keep in mind this is still a work in progress, with these end goals: +Perlu diingat bahawa ini masih dalam proses, dengan matlamat akhir ini: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Tiada kebenaran hos pada masa pemasangan -- kebenaran lanjutan diberikan secara eksplisit oleh pengguna pada asas setiap tapak. -- Entirely declarative for reliability and CPU/memory efficiency. +- Deklaratif sepenuhnya untuk kebolehpercayaan dan kecekapan CPU/memori. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.nb.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.nb.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.nb.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.nb.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) er en eksperimentell *tillatelses-begrenset* MV3-basert innholdsblokkerer. +uBO Lite (uBOL) er en *tillatelses-begrenset* MV3-basert innholdsblokkerer. Standardregelsettet tilsvarer standardfiltersettet til uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Du kan legge til flere regelsett ved å gå til innstillingssiden -- klikk _Tannhjul_-ikonet i oppsprettspanelet. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL er fullstendig deklarativ, noe som betyr at det ikke er behov for en permanent uBOL-prosess for at filtreringen skal skje, og CSS/JS-injeksjonsbasert innholdsfiltrering utføres pålitelig av nettleseren selv i stedet for av utvidelsen. Dette betyr at uBOL selv ikke bruker CPU/minneressurser mens innholdsblokkering pågår -- uBOL's service worker-prosess kreves _bare_ når du samhandler med oppsprettspanelet eller innstillingssidene. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.nl.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.nl.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.nl.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.nl.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is een experimentele, *toestemmingsloze* MV3-gebaseerde inhoudsblokkeerder. +uBO Lite (uBOL) is een *toestemmingsloze* MV3-gebaseerde inhoudsblokkeerder. De standaard regelset komt overeen met de standaard filterset van uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -U kunt meer regelsets toevoegen door de optiespagina te bezoeken -- klik op het _tandwielpictogram_ in het pop-uppaneel. +U kunt meer regelsets inschakelen door de optiespagina te bezoeken -- klik hiervoor op het _tandwielpictogram_ in het pop-uppaneel. uBOL is volledig declaratief, wat betekent dat er geen permanent uBOL-proces voor de filtering nodig is, en inhoudsfiltering op basis van CSS/JS-injectie op een betrouwbare manier door de browser zelf wordt uitgevoerd in plaats van door de extensie. Dit betekent dat uBOL zelf geen CPU-/geheugenbronnen gebruikt terwijl inhoudsblokkering actief is -- het serviceworker-proces van uBOL is _alleen_ vereist als u met het pop-uppaneel of de optiespagina’s werkt. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.oc.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.oc.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.oc.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.oc.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pa.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pa.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pa.txt 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pa.txt 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,30 @@ +uBO Lite (uBOL) ਇੱਕ *ਬਿਨਾਂ ਇਜਾਜ਼ਤਾਂ* ਵਾਲਾ MV3-ਅਧਾਰਿਤ ਸਮੱਗਰੀ ਬਲਾਕਰ ਹੈ। + +ਮੂਲ ਨਿਯਮ-ਸਮੂਹ uBlock Origin ਦੇ ਮੂਲ ਫਿਲਟਰ-ਸਮੂਹ ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ: + +- uBlock Origin ਦੀਆਂ ਬਿਲਟ-ਇਨ ਫਿਲਟਰ ਸੂਚੀਆਂ +-ਸੌਖੀ-ਸੂਚੀ +-ਸੌਖੀ ਪਰਦੇਦਾਰੀ +- Peter Lowe ਦੀ ਇਸ਼ਤਿਹਾਰ ਅਤੇ ਟਰੈਕਿੰਗ ਸਰਵਰ ਸੂਚੀ + +ਤੁਸੀਂ ਚੋਣਾਂ ਸਫ਼ੇ ਨੂੰ ਖੋਲ੍ਹ ਕੇ ਹੋਰ ਰੂਲ-ਸੈੱਟ ਸਮਰੱਥ ਕਰ ਕਦੇ ਹੋ -- ਪੌਪ-ਅੱਪ ਪੈਨਲ ਵਿੱਚ _Cogs_ icon ਨੂੰ ਕਲਿੱਕ ਕਰੋ। + +uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. + +uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. + +However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. + +To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. + +The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. + +ਜੇ ਤੁਸੀਂ ਮੌਜੂਦਾ ਸਾਈਟਾਂ ਉੱਤੇ ਹੋਰ ਇਜਾਜਤਾਂ ਲਈ uBOL ਦੀ ਬੇਨਤੀ ਨੂੰ ਮਨਜ਼ੂਰ ਕੀਤਾ ਤਾਂ ਇਹ ਮੌਜੂਦਾ ਸਾਈਟ ਬਾਰੇ ਵਧੀਆ ਫਿਲਟਰ ਸਮੱਗਰੀ ਨੂੰ ਸਮਰੱਥ ਕਰੇਗੀ। + +You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. + +ਯਾਦ ਰੱਖੋ ਕਿ ਇਹ ਕੰਮ ਹਾਲੇ ਵੀ ਜਾਰੀ ਹੈ, ਜਿਸ ਦੇ ਟੀਚੇ ਇਹ ਹਨ: + +- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. + +- Entirely declarative for reliability and CPU/memory efficiency. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pl.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pl.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pl.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pl.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,13 @@ -uBO Lite (uBOL) to eksperymentalny, *niewymagający uprawnień* bloker treści oparty na MV3. +uBO Lite (uBOL) to *niewymagający uprawnień* bloker treści oparty na MV3. Domyślny zestaw reguł odpowiada domyślnemu zestawowi filtrów uBlock Origin: -– wbudowane listy filtrów uBlock Origin +– wbudowane listy filtrów rozszerzenia uBlock Origin – EasyList – EasyPrivacy – lista serwerów śledzących i reklam Petera Lowe'a -– serwery śledzące ukrywające rzeczywistą nazwę domeny (CNAME) AdGuard -Możesz dodać więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _Trybika_ w wyskakującym panelu. +Możesz włączyć więcej zestawów reguł, odwiedzając stronę opcji – kliknij ikonę _koła zębatego_ w wyskakującym panelu. uBOL jest całkowicie deklaratywny, co oznacza, że nie jest potrzebny stały proces uBOL w celu filtrowania, a filtrowanie treści oparte na wstrzykiwaniu CSS/JS jest wykonywane niezawodnie przez samą przeglądarkę, a nie przez rozszerzenie. Oznacza to, że sam uBOL nie zużywa zasobów procesora/pamięci, gdy trwa blokowanie treści – proces Service Worker uBOL jest wymagany _tylko_ podczas interakcji z panelem wyskakującym lub stronami opcji. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pt_BR.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pt_BR.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pt_BR.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pt_BR.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBlock Origin Lite (uBOL) é um bloqueador de conteúdo baseado em MV3 experimental *sem permissão*. +O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3 com menor permissão. O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBlock Origin: -- Listas de filtros integradas do uBlock Origin +- Listas embutidas dos filtros do uBlock Origin - EasyList - EasyPrivacy -- Lista de filtros de anúncios e rastreadores do Pete Lowe -- Lista de domínios mascarados do AdGuard +- Lista de servidores de anúncios e rastreadores do Peter Lowe -Você pode adicionar mais conjuntos de regras visitando a página de opções -- clique no ícone _Engrenagem_ no painel pop-up. +Você pode ativar mais conjuntos de regras visitando a página das opções — clique no ícone da _Engranagem_ no painel do popup. -O uBOL é totalmente declarativo, o que significa que não há necessidade de um processo uBOL permanente para que a filtragem ocorra, e a filtragem de conteúdo baseada em injeção de CSS/JS é realizada de forma confiável pelo próprio navegador e não pela extensão. Isso significa que o próprio uBOL não consome recursos de CPU/memória enquanto o bloqueio de conteúdo está em andamento -- o processo de service worker do uBOL é necessário _apenas_ quando você interage com o painel pop-up ou as páginas de opções. +O uBOL é totalmente declarativo, significando que não há necessidade de um processo permanente do uBOL para a filtragem ocorrer e a filtragem de conteúdo baseada em injeção do CSS/JS é realizada confiavelmente pelo próprio navegador ao invés da extensão. Isto significa que o próprio uBOL não consome recursos de CPU/memória enquanto o bloqueio de conteúdo está em andamento -- o processo do service worker do uBOL _só_ é necessário quando você interage com o painel do pop-up ou as páginas das opções. -O uBOL não requer permissão ampla de "ler e modificar dados" no momento da instalação, portanto, seus recursos limitados prontos para uso em comparação com o uBlock Origin ou outros bloqueadores de conteúdo que exigem permissões amplas de "ler e modificar dados" no momento da instalação. +O uBOL não requer permissão ampla pra "ler e modificar dados" na hora da instalação, logo suas capacidades limitadas fora da caixa comparadas com o uBlock Origin ou outros bloqueadores de conteúdo requerem permissões amplas pra "ler e modificar dados" na hora da instalação. -No entanto, o uBOL permite que você *explicitamente* conceda permissões estendidas em sites específicos de sua escolha, para que possa filtrar melhor esses sites usando filtragem cosmética e injeções de scriptlet. +Contudo, o uBOL permite a você garantir *explicitamente* permissões estendidas em sites específicos de sua escolha pra que possa filtrar melhor esses sites usando filtragem cosmética e injeções de scriptlet. -Para conceder permissões estendidas em um determinado site, abra o painel pop-up e escolha um modo de filtragem superior, como Otimizado ou Completo. +Pra conceder permissões estendidas num site dado, abra o painel do pop-up e escolha um modo de filtragem superior tal como Otimizado ou Completo. -O navegador irá avisá-lo sobre os efeitos da concessão das permissões adicionais solicitadas pela extensão no site atual, e você terá que informar ao navegador se aceita ou recusa a solicitação. +O navegador então avisará você sobre os efeitos de garantir as permissões adicionais requisitadas pela extensão no site atual e você terá que dizer ao navegador se você aceita ou recusa a requisição. -Se você aceitar a solicitação do uBOL para permissões adicionais no site atual, ele poderá filtrar melhor o conteúdo do site atual. +Se você aceitar a requisição do uBOL por permissões adicionais no site atual ele será capaz de filtrar melhor o conteúdo do site atual. -Você pode definir o modo de filtragem padrão na página de opções do uBOL. Se você escolher o Modo Otimizado ou Modo Completo como o modo padrão, você vai precisar dar a permissão de ler e modificar dados ao uBOL em todos os sites. +Você pode definir o modo de filtragem padrão na página de opções do uBOL. Se você escolher o Modo Otimizado ou Completo como o modo padrão você precisará garantir ao uBOL a permissão de ler e modificar os dados em todos os sites. -Tenha em mente que este ainda é um trabalho em andamento, com estes objetivos finais: +Mantenha em mente que este ainda é um trabalho em progresso com estes objetivos finais: -- Sem permissões amplas de host no momento da instalação -- as permissões estendidas são concedidas explicitamente pelo usuário por site. +- Sem permissões amplas do hospedeiro na hora da instalação -- as permissões estendidas são garantidas explicitamente pelo usuário numa base por site. - Totalmente declarativo para confiabilidade e eficiência de CPU/memória. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pt_PT.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pt_PT.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.pt_PT.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.pt_PT.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -O uBO Lite (uBOL) é um bloqueador de conteúdo baseado em MV3 experimental *sem permissão*. +O uBO Lite (uBOL) é um bloqueador de conteúdo baseado no MV3 *sem permissões*. O conjunto de regras padrão corresponde ao conjunto de filtros padrão do uBlock Origin: @@ -6,26 +6,25 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -Pode adicionar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ no painel pop-up. +Pode ativar mais conjuntos de regras visitando a página de opções -- clique no ícone _Cogs_ na janela flutuante. -O uBOL é totalmente declarativo, o que significa que não há necessidade de um processo uBOL permanente para que a filtragem ocorra, e a filtragem de conteúdo baseada em injeção de CSS/JS é realizada de forma confiável pelo próprio navegador e não pela extensão. Isto significa que o próprio uBOL não consome recursos da CPU/memória enquanto o bloqueio de conteúdo está em curso -- o processo de service worker do uBOL é necessário _apenas_ quando interage com o painel pop-up ou as páginas de opções. +O uBOL é totalmente declarativo, o que elimina a necessidade de um processo ativo constante para a filtragem ocorrer. A injeção de CSS e JS para filtragem de conteúdo é efetuada de maneira confiável pelo navegador, não dependendo da extensão. Isso significa que o uBOL por si só não gasta recursos de CPU/memória enquanto o bloqueio de conteúdo está a acontecer -- o processo do trabalhador de serviço do uBOL é necessário apenas quando se interage com a janela flutuante ou as páginas de opções. uBOL não requer ampla permissão de "ler e modificar dados" no momento da instalação, daí as suas capacidades limitadas de pronto a usar em comparação com uBlock Origin ou outros bloqueadores de conteúdo que requerem amplas permissões de "ler e modificar dados" no momento da instalação. No entanto, o uBOL permite-lhe que *explicitamente* conceda permissões alargadas em websites específicos de sua escolha, para que possa filtrar melhor esses websites usando filtragem cosmética e injeções de scriptlet. -Para conceder permissões alargadas num determinado website, abra o painel pop-up e escolha um modo de filtragem superior, como Ideal ou Completo. +Para conceder permissões alargadas num determinado sítio web, abra a janela flutuante e escolha um modo de filtragem superior, como 'Ideal' ou 'Completo'. -O navegador irá avisá-lo sobre os efeitos da concessão das permissões adicionais solicitadas pela extensão no website atual, e terá que informar ao navegador se aceita ou recusa o pedido. +O navegador irá avisá-lo sobre os efeitos da concessão das permissões adicionais solicitadas pela extensão no site atual, e terá que informar ao navegador se aceita ou recusa o pedido. -Se aceitar o pedido do uBOL para permissões adicionais no website atual, o mesmo poderá filtrar melhor o conteúdo do website atual. +Se aceitar o pedido do uBOL para permissões adicionais no site atual, o mesmo poderá filtrar melhor o conteúdo do site atual. Pode definir o modo de filtragem padrão na página de opções do uBOL. Se escolher o modo Ideal ou Completo como o modo predefinido, terá de conceder ao uBOL a permissão para ler e modificar dados em todos os sítios web. Tenha em mente que este ainda é um trabalho em curso, com estes objetivos finais: -- Sem permissões amplas de host no momento da instalação -- as permissões alargadas são concedidas explicitamente pelo utilizador por website. +- Sem permissões amplas de anfitrião no momento da instalação -- permissões estendidas são concedidas explicitamente pelo utilizador numa base por site. -- Totalmente declarativo para fiabilidade e eficiência da CPU/memória. +- Totalmente declarativo para fiabilidade e eficiência de CPU/memória diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ro.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ro.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ro.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ro.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) este blocant de conținut experimental *fără permisiuni* bazat pe MV3. -The default ruleset corresponds to uBlock Origin's default filterset: +Setul de reguli implicit corespunde setului de filtre implicit al uBlock Origin: -- uBlock Origin's built-in filter lists +Listele de filtre încorporate de uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Oglas Peter Lowe i lista servera za praćenje -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL este în întregime declarativ, ceea ce înseamnă că nu este nevoie de un proces uBOL permanent pentru ca filtrarea să aibă loc, iar filtrarea conținutului pe bază de injecție CSS/JS este realizată în mod sigur de browser în sine, mai degrabă decât de extensie. Aceasta înseamnă că uBOL în sine nu consumă resurse CPU/memorie în timp ce blocarea conținutului este în desfășurare -- procesul de lucru al serviciului uBOL este necesar _doar_ atunci când interacționați cu panoul pop-up sau cu paginile de opțiuni. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL nu necesită permisiunii extinse de „citire și modificare a datelor” în momentul instalării, astfel capacitățile sale limitate din momentul instalării în comparație cu uBlock Origin sau alte blocare de conținut necesită permisiuni largi de „citire și modificare a datelor” în momentul instalării. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Cu toate acestea, uBOL vă permite să acordați *explicit* permisiuni extinse pe anumite site-uri alese de dvs., astfel încât să poată filtra mai bine pe acele site-uri folosind filtrarea cosmetică și injecțiile de scriptlet. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Pentru a acorda permisiuni extinse pe un anumit site, deschideți panoul pop-up și alegeți un mod de filtrare mai ridicat, cum ar fi Optimal sau Complet. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Browser-ul vă va avertiza apoi cu privire la efectele acordării permisiunilor suplimentare solicitate de extensie pe site-ul curent și va trebui să-i precizați browserului dacă acceptați sau refuzați cererea. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Dacă acceptați solicitarea uBOL pentru permisiuni suplimentare pe site-ul curent, acesta va putea filtra mai bine conținutul pentru site-ul curent. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Puteți seta modul implicit de filtrare din pagina de opțiuni a uBOL. Dacă alegeți modul optim sau complet ca implicit, va trebui să acordați lui uBOL permisiunea de a citi și modifica datele de pe toate site-urile web. -Keep in mind this is still a work in progress, with these end goals: +Rețineți că aceasta este în curs de desfășurare, cu aceste obiective finale: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Fără permisiuni de gazdă largi în momentul instalării - permisiunile extinse sunt acordate în mod explicit de către utilizator pe bază de site. -- Entirely declarative for reliability and CPU/memory efficiency. +- Complet declarativ pentru fiabilitate și eficiență CPU/memorie. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ru.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ru.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ru.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ru.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) — экспериментальный блокировщик содержимого, *не требующий разрешений* и основанный на MV3. +uBO Lite (uBOL) — это блокировщик содержимого, *не требующий разрешений*, и основанный на MV3. Стандартный набор правил соответствует типовому набору фильтров uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Список рекламных и отслеживающих серверов от Peter Lowe -- AdGuard трекеры, замаскированные с помощью CNAME -Вы можете добавить больше правил, посетив страницу настроек -- нажмите на значок_Шестеренок на всплывающей панели. +Вы можете активировать больше списков правил на странице настроек -- нажмите на значок _Шестерёнки_ на всплывающей панели. uBOL - полностью декларативный, т.е. для фильтрации не нужен постоянно выполняющийся uBOL процесс, а фильтрация контента, основанная на внедрении CSS/JS, производится непосредственно браузером. Это значит, что дополнение uBOL не расходует ресурсы ЦПУ/памяти, когда происходит блокировка рекламы -- служебный процесс uBOL запускается, _только_ когда вы вносите изменения на всплывающей панели или странице настроек. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.si.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.si.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.si.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.si.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sk.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sk.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sk.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sk.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) je experimentálny blokátor obsahu založený na MV3 *bez povolenia*. +uBO Lite (uBOL) je blokovač obsahu založený na MV3 *bez povolenia*. Predvolený súbor pravidiel zodpovedá predvolenému súboru filtrov uBlock Origin: @@ -6,15 +6,14 @@ - EasyList - EasyPrivacy - Zoznam reklamných a sledovacích serverov Petra Lowea -- AdGuard CNAME-Cloaked Trackers -Ďalšie súbory pravidiel môžete pridať na stránke s možnosťami – kliknite na ikonu _súkolesia_ vo vyskakovacom paneli. +Ďalšie súbory pravidiel môžete povoliť na stránke s možnosťami – kliknite na ikonu _súkolesia_ vo vyskakovacom paneli. uBOL je úplne deklaratívny, čo znamená, že na filtrovanie nie je potrebný trvalý proces uBOL a filtrovanie obsahu založené na injektovaní CSS/JS spoľahlivo vykonáva samotný prehliadač, a nie rozšírenie. To znamená, že samotný uBOL nespotrebúva zdroje CPU/pamäte, kým prebieha blokovanie obsahu -- proces uBOL Service Worker je potrebný _len_ pri interakcii s vyskakovacím panelom alebo stránkami možností. -uBOL pri inštalácii nevyžaduje všeobecné oprávnenie "čítať a upravovať údaje", preto má obmedzené možnosti v porovnaní s uBlock Origin alebo inými blokátormi obsahu, ktoré pri inštalácii vyžadujú všeobecné oprávnenie "čítať a upravovať údaje". +uBOL pri inštalácii nevyžaduje všeobecné oprávnenie "čítať a upravovať údaje", preto má obmedzené možnosti v porovnaní s uBlock Origin alebo inými blokovačmi obsahu, ktoré pri inštalácii vyžadujú všeobecné oprávnenie "čítať a upravovať údaje". -UBOL vám však umožňuje *výslovne* udeliť všebecné oprávnenia na konkrétne stránky podľa vášho výberu, aby mohol lepšie filtrovať na týchto stránkach pomocou kozmetického filtrovania a injektovaných skriptletov. +uBOL vám však umožňuje *výslovne* udeliť všebecné oprávnenia na konkrétne stránky podľa vášho výberu, aby mohol lepšie filtrovať na týchto stránkach pomocou kozmetického filtrovania a injektovaných skriptletov. Ak chcete udeliť všeobecné oprávnenia na danom webe, otvorte vyskakovací panel a vyberte vyšší režim filtrovania, napríklad Optimálny alebo Kompletný. @@ -24,7 +23,7 @@ Predvolený režim filtrovania môžete nastaviť na stránke možností uBOL. Ak ako predvolený režim vyberiete Optimálny alebo Kompletný režim, budete musieť uBOL-u udeliť oprávnenie na čítanie a úpravu údajov na všetkých webových stránkach. -Majte na pamäti, že na tomto projekte sa stále pracuje, pričom jeho konečné ciele sú tieto: +Majte na pamäti, že na tomto projekte sa stále pracuje, pričom jeho konečné ciele sú takéto: - Žiadne všeobecné oprávnenia hostiteľa v čase inštalácie -- rozšírené oprávnenia udeľuje používateľ explicitne pre jednotlivé stránky. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sl.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sl.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sl.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sl.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.so.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.so.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.so.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.so.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sq.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sq.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sq.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sq.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) është një bllokues eksperimental *i pavarur* që funksionon sipas modelit MV3. +uBO Lite (uBOL) është një bllokues *i pavarur* që funksionon sipas modelit MV3. Rregullat e tij janë të barasvlershme me filtrat standardë që përdor uBlock Origin: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Lista e Peter Lowe për reklamat dhe gjurmuesit -- Lista e AdGuard për gjurmuesit me bazë CNAME -Në faqen e opsioneve mund të shtoni rregulla të tjera – klikoni ikonën e _ingranazhit_ në panelin modal. +Në faqen e opsioneve mund të aktivizoni rregulla të tjera – klikoni ikonën e _ingranazhit_ në panelin modal. uBOL është tërësisht deklarativ, domethënë filtrimi ndodh pa qenë nevoja që procesi i uBOL të vijojë vazhdimisht në sfond, ndërsa injektimi i filtrave CSS/JS te materialet kryhet me saktësi nga vetë shfletuesi. Pra, uBOL i bllokon materialet pa konsumuar resurset e procesorit/memories – asetet e uBOL nevojiten _vetëm_ kur ndërveproni me panelin modal ose faqen e opsioneve të tij. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sr.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sr.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sr.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sr.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) је блокатор садржаја *без дозвола*, заснован на MV3. -The default ruleset corresponds to uBlock Origin's default filterset: +Подразумевани скуп правила одговара подразумеваном скупу филтера uBlock Origin-а: -- uBlock Origin's built-in filter lists +- uBlock Origin листе уграђених филтера - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Можете омогућити још скупова правила тако што ћете посетити страницу са опцијама -- кликните на иконицу зупчаника у искачућем панелу. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL је потпуно декларативан, што значи да нема потребе за трајним uBOL процесом да би дошло до филтрирања, а филтрирање садржаја засновано на убацивању CSS/JS се обавља поуздано од стране самог прегледача, а не проширења. То значи да сам uBOL не троши CPU/меморијске ресурсе док је блокирање садржаја у току -- сервисни радни процес uBOL-а је потребан _само_ када ступите у интеракцију са искачућим панелом или страницама опција. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL не захтева широку дозволу за „читање и измену података” у тренутку инсталације, стога су његове ограничене могућности ван оквира у поређењу са uBlock Origin-ом или другим блокаторима садржаја који захтевају широке дозволе за „читање и измену података” у тренутку инсталације. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Међутим, uBOL вам омогућује да *експлицитно* доделите проширене дозволе на одређеним сајтовима по вашем избору тако да може боље да филтрира те сајтове користећи козметичко филтрирање и ињекције скриптлета. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Да бисте доделили проширене дозволе за дати сајт, отворите искачући панел и изаберите виши режим филтрирања, као што је Оптимално или Комплетно. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Прегледач ће вас тада упозорити на ефекте давања додатних дозвола које захтева проширење на тренутном сајту, а ви ћете морати да кажете прегледачу да ли прихватате или одбијате захтев. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Ако прихватите uBOL-ов захтев за додатне дозволе на тренутном сајту, он ће моћи боље да филтрира садржај за тренутни сајт. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Можете подесити подразумевани режим филтрирања на uBOL-овој страници са опцијама. Ако изаберете режим Оптимално или Комплетно као подразумевани, мораћете да доделите uBOL-у дозволу да чита и мења податке на свим веб сајтовима. -Keep in mind this is still a work in progress, with these end goals: +Имајте на уму да је ово још увек рад у току, са овим крајњим циљевима: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +– Нема широких дозвола за хост у тренутку инсталације – проширене дозволе се експлицитно додељују од стране корисника на основу сваког сајта. -- Entirely declarative for reliability and CPU/memory efficiency. +- Потпуно декларативан за поузданост и ефикасност CPU/меморије. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sv.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sv.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sv.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sv.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) är en experimentell *behörighetsfri* MV3-baserad innehållsblockerare. +uBO Lite (uBOL) är en *behörighetslös* MV3-baserad innehållsblockerare. Standardregeluppsättningen motsvarar uBlock Origins standardfilteruppsättning: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowes reklam- och spårningsserverlista -- AdGuard CNAME-dolda spårare -Du kan lägga till fler regeluppsättningar genom att besöka alternativsidan -- klicka på ikonen _Kugghjulet_ i popup-panelen. +Du kan lägga till fler regeluppsättningar i alternativ -- klicka på _Kugghjulet_ i popup-panelen. uBOL är helt deklarativt, vilket innebär att det inte finns något behov av en permanent uBOL-process för att filtreringen ska ske och CSS/JS-injektionsbaserad innehållsfiltrering utförs på ett tillförlitligt sätt av webbläsaren själv snarare än av tillägget. Detta innebär att uBOL själv inte förbrukar CPU/minnesresurser medan innehållsblockering pågår -- uBOLs serviceworkerprocess krävs _endast_ när du interagerar med popup-panelen eller alternativsidorna. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sw.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sw.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.sw.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.sw.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ta.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ta.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ta.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ta.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.te.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.te.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.te.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.te.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) అనేది *అనుమతి-తక్కువ* MV3-ఆధారిత కంటెంట్ బ్లాకర్. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,26 +6,25 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOLకి ఇన్‌స్టాల్ సమయంలో విస్తృత "డేటాను చదవడం మరియు సవరించడం" అనుమతి అవసరం లేదు, అందువల్ల uBlock ఆరిజిన్ లేదా ఇన్‌స్టాల్ సమయంలో విస్తృతమైన "డేటాను చదవడం మరియు సవరించడం" అనుమతులు అవసరమయ్యే ఇతర కంటెంట్ బ్లాకర్‌లతో పోలిస్తే దాని పరిమిత సామర్థ్యాలు బాక్స్ వెలుపల ఉన్నాయి. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +అయితే, uBOL మీకు నచ్చిన నిర్దిష్ట సైట్‌లలో పొడిగించిన అనుమతులను *స్పష్టంగా* మంజూరు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, తద్వారా కాస్మెటిక్ ఫిల్టరింగ్ మరియు స్క్రిప్ట్‌లెట్ ఇంజెక్షన్‌లను ఉపయోగించి ఆ సైట్‌లలో మెరుగ్గా ఫిల్టర్ చేయవచ్చు. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +ఇచ్చిన సైట్‌లో పొడిగించిన అనుమతులను మంజూరు చేయడానికి, పాప్‌అప్ ప్యానెల్‌ను తెరిచి, ఆప్టిమల్ లేదా కంప్లీట్ వంటి అధిక ఫిల్టరింగ్ మోడ్‌ను ఎంచుకోండి. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +ప్రస్తుత సైట్‌లో పొడిగింపు ద్వారా అభ్యర్థించిన అదనపు అనుమతులను మంజూరు చేయడం వల్ల కలిగే ప్రభావాల గురించి బ్రౌజర్ మిమ్మల్ని హెచ్చరిస్తుంది మరియు మీరు అభ్యర్థనను అంగీకరించాలా లేదా తిరస్కరించాలా అని మీరు బ్రౌజర్‌కి తెలియజేయాలి. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +మీరు ప్రస్తుత సైట్‌లో అదనపు అనుమతుల కోసం uBOL అభ్యర్థనను అంగీకరిస్తే, అది ప్రస్తుత సైట్ కోసం కంటెంట్‌ను మెరుగ్గా ఫిల్టర్ చేయగలదు. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +మీరు uBOL ఎంపికల పేజీ నుండి డిఫాల్ట్ ఫిల్టరింగ్ మోడ్‌ను సెట్ చేయవచ్చు. మీరు డిఫాల్ట్‌గా ఆప్టిమల్ లేదా కంప్లీట్ మోడ్‌ని ఎంచుకుంటే, మీరు అన్ని వెబ్‌సైట్‌లలోని డేటాను చదవడానికి మరియు సవరించడానికి uBOLకి అనుమతిని మంజూరు చేయాలి. -Keep in mind this is still a work in progress, with these end goals: +ఈ తుది లక్ష్యాలతో ఇది ఇంకా పురోగతిలో ఉందని గుర్తుంచుకోండి: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- ఇన్‌స్టాల్ సమయంలో విస్తృత హోస్ట్ అనుమతులు లేవు -- పొడిగించిన అనుమతులు ప్రతి-సైట్ ప్రాతిపదికన వినియోగదారు ద్వారా స్పష్టంగా మంజూరు చేయబడతాయి. -- Entirely declarative for reliability and CPU/memory efficiency. +- విశ్వసనీయత మరియు CPU/మెమరీ సామర్థ్యం కోసం పూర్తిగా డిక్లరేటివ్. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.th.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.th.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.th.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.th.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.tr.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.tr.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.tr.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.tr.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL), *izin gerektirmeyen* MV3 tabanlı bir içerik engelleyicidir. -The default ruleset corresponds to uBlock Origin's default filterset: +Varsayılan kural seti, uBlock Origin'in varsayılan filtre setine karşılık gelir: -- uBlock Origin's built-in filter lists +- uBlock Origin'in yerleşik filtre listeleri - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Peter Lowe'un Reklam ve izleme sunucusu listesi -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Seçenekler ekranına uğrayarak daha fazla kuralı aktif hale getirebilirsiniz, bunun için açılır paneldeki _dişli_ simgesine tıklayın. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL tamamen bildirimseldir, yani filtrelemenin gerçekleşmesi için kalıcı bir uBOL işlemine gerek yoktur, içerik filtreleme eklenti yerine tarayıcının kendisi tarafından CSS/JS yerleştirerek gerçekleştirilir. Bu, içerik engelleme devam ederken uBOL'nin kendisinin CPU/bellek kaynaklarını tüketmediği anlamına gelir -- uBOL'un hizmet çalışanı işlemi, _only_ açılan panel veya seçenek sayfalarıyla etkileşim kurduğunuzda gereklidir. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL, kurulum sırasında geniş "veri okuma ve değiştirme" izni gerektirmez, bu nedenle, kurulum sırasında geniş "veri okuma ve değiştirme" izinleri gerektiren uBlock Origin veya diğer içerik engelleyicilere kıyasla, kutudan çıkar çıkmaz sınırlı yetenekleri vardır. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Bununla birlikte, uBOL, kozmetik filtreleme ve komut dosyası enjeksiyonları kullanarak bu sitelerde daha iyi filtre uygulayabilmesi için, seçtiğiniz belirli sitelerde *açıkça* genişletilmiş izinler vermenize izin verir. -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Belirli bir sitede genişletilmiş izinler vermek için açılır paneli açın ve Optimal veya Complete gibi daha yüksek bir filtreleme modu seçin. -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Ardından tarayıcı, uzantı tarafından istenen ek izinlerin geçerli sitede verilmesinin etkileri konusunda sizi uyaracak ve tarayıcıya isteği kabul edip etmediğinizi söylemeniz gerekecektir. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +uBOL'un mevcut site için ek izin talebini kabul ederseniz, mevcut site için içeriği daha iyi filtreleyebilecektir. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Varsayılan filtreleme modunu uBOL'un seçenekler sayfasından ayarlayabilirsiniz. Varsayılan mod olarak Optimal veya Complete modunu seçerseniz, uBOL'a tüm web sitelerindeki verileri okuma ve değiştirme izni vermeniz gerekecektir. -Keep in mind this is still a work in progress, with these end goals: +Bunun, şu nihai hedeflerle hala devam eden bir çalışma olduğunu unutmayın: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Yükleme sırasında geniş ana bilgisayar izinleri yoktur -- genişletilmiş izinler, her site için kullanıcı tarafından açıkça verilir. -- Entirely declarative for reliability and CPU/memory efficiency. +- Güvenilirlik ve CPU/bellek verimliliği için tamamen bildirimsel. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) is a *permission-less* MV3-based content blocker. The default ruleset corresponds to uBlock Origin's default filterset: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.uk.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.uk.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.uk.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.uk.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,13 @@ -uBO Lite (uBOL) — це експериментальний *бездозвільний* блокувальник вмісту на основі MV3. +uBO Lite (uBOL) - це блокувальник вмісту на основі MV3, що не потребує дозволів. -Усталений набір правил відповідає типовому набору фільтрів uBlock Origin: +Набір правил за замовчанням відповідає типовому набору фільтрів uBlock Origin: - Вбудовані списки фільтрів uBlock Origin - EasyList - EasyPrivacy - Список серверів реклами та стеження від Peter Lowe -- Приховані CNAME-трекери AdGuard -Ви можете додати більше наборів правил, перейшовши на сторінку налаштувань — натисніть на піктограму _Шестерень_ на спливній панелі. +Ви можете ввімкнути більше наборів правил, перейшовши на сторінку налаштувань — натисніть на піктограму "Перейти до панелі керування" на спливній панелі. uBOL повністю декларативний, тобто немає необхідності в постійному процесі uBOL для здійснення фільтрації, а фільтрація вмісту на основі CSS/JS-ін'єкцій надійно виконується самим браузером, а не розширенням. Це означає, що сам uBOL не споживає ресурси процесора/пам'яті під час блокування вмісту — службовий робочий процес uBOL потрібен _лише_ під час взаємодії зі спливною панеллю або сторінками опцій. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ur.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ur.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.ur.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.ur.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,13 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) ایک *اجازت سے کم* MV3 پر مبنی مواد بلاکر ہے۔ -The default ruleset corresponds to uBlock Origin's default filterset: +ڈیفالٹ رولسیٹ uBlock Origin کے ڈیفالٹ فلٹر سیٹ سے مساوی ہے: -- uBlock Origin's built-in filter lists +- یو بلاک اوریجن کی بلٹ ان فلٹر لسٹ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.vi.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.vi.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.vi.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.vi.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) is an experimental *permission-less* MV3-based content blocker. +uBO Lite (uBOL) là trình chặn nội dung dựa trên MV3 *không-cần-cấp-phép*. -The default ruleset corresponds to uBlock Origin's default filterset: +Bộ quy tắc mặc định tương tự bộ lọc của uBlock Origin: -- uBlock Origin's built-in filter lists +- Bộ lọc cài sẵn của uBlock Origin - EasyList - EasyPrivacy -- Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers +- Danh sách máy chủ chạy quảng cáo và trình theo dõi của Pete Lowe -You can add more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel. +Bạn có thể tự thêm quy tắc mới ở trang cài đặt -- click vào biểu tượng _Bánh răng_ ở trong cửa sổ popup. -uBOL is entirely declarative, meaning there is no need for a permanent uBOL process for the filtering to occur, and CSS/JS injection-based content filtering is performed reliably by the browser itself rather than by the extension. This means that uBOL itself does not consume CPU/memory resources while content blocking is ongoing -- uBOL's service worker process is required _only_ when you interact with the popup panel or the option pages. +uBOL mang tính khai báo hoàn toàn, vì vậy uBOL sẽ không cần phải liên tục chạy để chặn nội dung. Thay vào đó, chính trình duyệt sẽ thực hiện lọc nội dung bằng cách sử dụng công cụ chèn CSS/JS hiệu quả hơn có sẵn của nó. Điều này cũng đồng thời có nghĩa là uBOL sẽ không tiêu tốn tài nguyên CPU/bộ nhớ của bạn để chặn nội dung. uBOL sẽ chỉ chạy _khi và chỉ khi_ bạn đang xem cửa sổ popup của uBOL, hoặc bạn đang cấu hình uBOL ở trang cài đặt. -uBOL does not require broad "read and modify data" permission at install time, hence its limited capabilities out of the box compared to uBlock Origin or other content blockers requiring broad "read and modify data" permissions at install time. +uBOL không yêu cầu cấp quyền "đọc và sửa đổi dữ liệu" chung khi cài đặt, vì vậy nên ban đầu nó sẽ hơi yếu hơn uBlock Origin hoặc các trình chặn nội dung khác mà có yêu cầu quyền "đọc và sửa đổi dữ liệu" chung khi cài đặt. -However, uBOL allows you to *explicitly* grant extended permissions on specific sites of your choice so that it can better filter on those sites using cosmetic filtering and scriptlet injections. +Tuy nhiên, uBOL lại cho phép bạn cấu hình *rất cụ thể* quyền ở trên bất kỳ trang nào tự chọn của bạn, để nó có thể lọc nội dụng trên các trang đấy tốt hơn bằng các kỹ thuật như lọc hiển thị (cosmetic filtering) hay chèn kịch bản con (scriptlet injections). -To grant extended permissions on a given site, open the popup panel and pick a higher filtering mode such as Optimal or Complete. +Để cấp quyền cho uBOL chặn trang bất kỳ, hãy mở cửa sổ popup và chọn một chế độ chặn cao hơn như "Tối ưu" hoặc "Hoàn toàn". -The browser will then warn you about the effects of granting the additional permissions requested by the extension on the current site, and you will have to tell the browser whether you accept or decline the request. +Trình duyệt của bạn sẽ hiện cảnh báo cho việc cấp quyền cho tiện ích trên trang web hiện tại, và bạn sẽ phải chọn đồng ý hoặc từ chối yêu cầu cấp quyền. -If you accept uBOL's request for additional permissions on the current site, it will be able to better filter content for the current site. +Nếu bạn chọn đồng ý cấp quyền cho uBOL sửa trang web bất kỳ, uBOL sẽ có thể lọc nội dung tốt hơn cho web đấy. -You can set the default filtering mode from uBOL's options page. If you pick the Optimal or Complete mode as the default one, you will need to grant uBOL the permission to read and modify data on all websites. +Bạn cũng có thể chọn chế độ chặn mặc định ở trang cài đặt của uBOL. Nếu bạn chọn chế độ Tối ưu hoặc Hoàn toàn làm mặc định, bạn sẽ cần phải cấp quyền "đọc và sửa đổi dữ liệu" trên tất cả các trang web. -Keep in mind this is still a work in progress, with these end goals: +Lưu ý rằng sản phẩm này vẫn đang trong giai đoạn phát triển, và bản hoàn thiện sẽ có những tính năng sau: -- No broad host permissions at install time -- extended permissions are granted explicitly by the user on a per-site basis. +- Không yêu cầu bất kỳ quyền nào khi cài đặt - người dùng sẽ phải tự chủ động cấp bất kỳ quyền gì cho tiện ích, cụ thể từng trang web một. -- Entirely declarative for reliability and CPU/memory efficiency. +- Hoàn toàn mang tính khai báo, để có thế chạy nhẹ hơn và ổn định hơn. diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.zh_CN.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.zh_CN.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.zh_CN.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.zh_CN.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,4 +1,4 @@ -uBO Lite(uBOL)是一个实验性的,基于浏览器最新扩展接口(Manifest Version 3)打造的“无权限”内容屏蔽工具。 +uBO Lite (uBOL) 是一个基于最新浏览器扩展接口(Manifest Version 3)打造的“无需权限”的内容屏蔽工具。 该扩展预设的规则列表对应 uBlock Origin 的预设过滤规则列表: @@ -6,9 +6,8 @@ - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -您可以通过设置页面添加更多过滤规则列表——点击弹出面板的“齿轮”图标。 +访问选项页面,点击弹出面板中的齿轮图标,即可启用更多规则集。 uBOL 的过滤规则是完全声明式的,并不需要固定保留一个 uBOL 扩展进程,基于 CSS/JS 注入的内容过滤更是交由浏览器进行调度,比起扩展本身更为可靠。 这也即是说当内容被过滤时 uBOL 自身并不占用额外 CPU 和内存资源,只有在您打开弹出面板或是设置页面时才会生成 uBOL 扩展进程。 diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.zh_TW.txt ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.zh_TW.txt --- ublock-origin-1.46.0+dfsg/platform/mv3/description/webstore.zh_TW.txt 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/description/webstore.zh_TW.txt 2025-02-09 18:18:39.000000000 +0000 @@ -1,31 +1,30 @@ -uBO Lite (uBOL) 是款實驗性,以 MV3 為基礎的「免權限」內容阻擋器。 +uBO Lite (uBOL) 是款以 MV3 為基礎的「免權限」內容阻擋器。 -預設規則集對應 uBlock Origin 的預設過濾集: +預設規則集對應着 uBlock Origin 的預設過濾集: - uBlock Origin 內建的過濾器清單 - EasyList - EasyPrivacy - Peter Lowe’s Ad and tracking server list -- AdGuard CNAME-Cloaked Trackers -您可以前往選項頁面(按下彈出面板的 **齒輪** 按鈕)新增更多規則集。 +您可以前往選項頁面(按下彈出面板的 **齒輪** 按鈕)啟用更多規則集。 -uBOL 是完全宣告式的,意即過濾過程不需要持續性的 uBOL 處理程序參與,且以 CSS/JS 為基礎注入的內容過濾由比較可靠的瀏覽器進行,而非由擴充套件執行。 這就代表 uBOL 在內容阻擋過程不會佔用 CPU 和記憶體資源——除了和彈出面板或選項頁面互動的場景外,都不需要 uBOL 的 Service Worker 程序。 +uBOL 是完全宣告式的,意即過濾過程中不需要持續性的 uBOL 處理程序參與,且以 CSS/JS 注入為基礎的內容過濾由可靠的瀏覽器執行,而非是擴充功能。 這就代表 uBOL 在內容阻擋過程不會佔用 CPU 和記憶體資源——除了和彈出面板或選項頁面互動的場景外,都不需要 uBOL 的 Service Worker 程序。 -uBOL 在安裝期間不需要氾濫的「讀取與修改資料」權限,因此它出廠時的功能和 uBlock Origin 或其他在安裝期要求「讀取與修改資料」權限的內容阻擋程式比較,會比較受限。 +uBOL 在安裝期間不需要廣泛的「讀取與修改資料」權限,因此它出廠時的功能和 uBlock Origin 或其他在安裝期間要求該權限的內容阻擋程式相比,相對受限。 -不過 uBOL 能讓你 **明確** 在自選的特定站台授予更多權限,使其在這些站台的過濾效果可以在修飾過濾 scripetlet 注入的加持下得到提升。 +不過 uBOL 能讓你 **明確地** 在自選的特定網站授予額外的權限,使其在這些網站的過濾效果可以在元素過濾及 scripetlet 注入的加持下提升。 -若要授予指定網站的延伸權限,請開啟對話框並選擇更高的過濾模式,如「最佳化」或「完整」。 +若要授予指定網站延伸權限,請開啟彈出面板並選擇更佳的過濾模式,如「最佳」或「完整」。 -瀏覽器接著會警告您「授予擴充套件請求的額外權限會帶來的後果」,而你得告訴瀏覽器要同意還是拒絕請求。 +瀏覽器接著會警告您授予擴充功能請求的額外權限所帶來的後果,而你需要告訴瀏覽器要同意還是拒絕。 -如果你接受 uBOL 在目前站台請求的額外權限,其在這個網站的過濾效果會更好。 +如果你接受 uBOL 在目前網站請求的額外權限,其在這個網站的過濾效果將會更好。 -您可以在 uBOL 的選項頁面設定預設的過濾模式。 如果您選擇「最佳化」或預設的「完整」模式,您得授予 uBOL 讀取與修改所有網站資料的權限。 +您可以在 uBOL 的選項頁面設定預設的過濾模式。 如果您選擇「最佳」或「完整」為預設模式,您需要授予 uBOL 讀取與修改所有網站資料的權限。 注意這尚未完工,最終目標有: -- 安裝期不要有氾濫的主機權限——延伸權限讓使用者以網站為基準授予。 +- 安裝期間不要有氾濫的 host 權限 —— 以網站為基準讓使用者授予延伸權限。 -- 完全宣告式,提升可靠性和 CPU / 記憶體效率。 +- 完全宣告式,以提升可靠性和 CPU / 記憶體效率。 diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/am/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/am/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/am/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/am/messages.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -{ - "extName": { - "message": "uBlock Origin Lite", - "description": "extension name." - }, - "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", - "description": "this will be in the Chrome web store: must be 132 characters or less" - }, - "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", - "description": "Appears aside each filter list in the _3rd-party filters_ pane" - }, - "dashboardName": { - "message": "uBO Lite — Dashboard", - "description": "English: uBO Lite — Dashboard" - }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, - "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, - "aboutPageName": { - "message": "About", - "description": "appears as tab name in dashboard" - }, - "aboutPrivacyPolicy": { - "message": "Privacy policy", - "description": "Link to privacy policy on GitHub (English)" - }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" - }, - "popupTipReport": { - "message": "Report an issue on this website", - "description": "Tooltip used for the 'chat' icon in the panel" - }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." - }, - "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, - "popupLessButton": { - "message": "Less", - "description": "Label to be used to hide popup panel sections" - }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupDefault": { - "message": "Default", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupAds": { - "message": "Ads", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupPrivacy": { - "message": "Privacy", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupMalware": { - "message": "Malware domains", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupAnnoyances": { - "message": "Annoyances", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupMisc": { - "message": "Miscellaneous", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupRegions": { - "message": "Regions, languages", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, - "aboutChangelog": { - "message": "Changelog", - "description": "" - }, - "aboutCode": { - "message": "Source code (GPLv3)", - "description": "English: Source code (GPLv3)" - }, - "aboutContributors": { - "message": "Contributors", - "description": "English: Contributors" - }, - "aboutSourceCode": { - "message": "Source code", - "description": "Link text to source code repo" - }, - "aboutTranslations": { - "message": "Translations", - "description": "Link text to translations repo" - }, - "aboutFilterLists": { - "message": "Filter lists", - "description": "Link text to uBO's own filter lists repo" - }, - "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", - "description": "Shown in the About pane" - }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" - }, - "firstRunSectionLabel": { - "message": "Welcome", - "description": "The header text for the welcome message section" - }, - "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", - "description": "Descriptive text shown at first install time only " - }, - "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", - "description": "The header text for the default filtering mode section" - }, - "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", - "description": "This describes the default filtering mode setting" - }, - "filteringMode0Name": { - "message": "no filtering", - "description": "Name of blocking mode 0" - }, - "filteringMode1Name": { - "message": "basic", - "description": "Name of blocking mode 1" - }, - "filteringMode2Name": { - "message": "optimal", - "description": "Name of blocking mode 2" - }, - "filteringMode3Name": { - "message": "complete", - "description": "Name of blocking mode 3" - }, - "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", - "description": "This describes the 'basic' filtering mode" - }, - "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", - "description": "This describes the 'optimal' filtering mode" - }, - "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", - "description": "This describes the 'complete' filtering mode" - }, - "behaviorSectionLabel": { - "message": "Behavior", - "description": "The header text for the 'Behavior' section" - }, - "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", - "description": "Label for a checkbox in the options page" - } -} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ar/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ar/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ar/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ar/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,131 +4,55 @@ "description": "extension name." }, "extShortDesc": { - "message": "حاجب محتوى تجريبي وبلا أذونات. يحجب الإعلانات والمتتبعات والمعدنات والكثير فوراً عند التثبيت.", + "message": "أداة لحظر المحتوى دون إذن. يحظر الإعلانات وأدوات التتبع وأدوات التعدين وغيرها فور التثبيت.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "شروط {{ruleCount}} محولة من مصفيّات الشبكة لـ {{filterCount}}", + "message": "{{ruleCount}} قواعد، محولة من {{filterCount}} مرشحات الشبكة", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { "message": "لوحة التحكم", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "تنبيه! لديك تغييرات لم تقم بحفظها", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "إبقى", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "تجاهل", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "الإعدادات", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "قوائم المصفيّات", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "الفلاتر الخاصة بي", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "المواقع الموثوقة", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { - "message": "عن التطبيق", + "message": "حول البرنامج", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { "message": "سياسة الخصوصية", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "عطّل/مكّن uBO Lite لهذه الصفحة", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "افتح لوحة التحكم", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "فعّل طور حذف العناصر", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "فعّل طور اختيار العناصر", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "وضع التصفية", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "بلّغ عن مشكلة في هذه الصفحة", + "message": "الإبلاغ عن مشكلة في هذا الموقع", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "اضغط لتجعل تغييراتك دائمة.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "إضغط للتراجع عن تغييراتك.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "افتح لوحة التحكم", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "المزيد", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "اضغط لتمنح uBO Lite أذونات إضافية في هذه الصفحة.\nتتيح الأذونات الإضافية حجب محتوى أكثر فاعلية.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "اضغط لتتراجع عن منح الأذونات الإضافية في هذه الصفحة", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "أقل", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "أظهر عدد الطلبات المحجوبة على الأيقونة", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "المظهر", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "المظهر", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "لون التمييز المخصص", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "احجب تقارير CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "مكّن التصفية الإضافية لكل المواقع", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "يمكن لـ uBO Lite تطبيق تصفية موسعة على موقع ويب معين فقط بعد منح أذونات الامتداد صراحة لتعديل البيانات الموجودة على هذا الموقع. يسمح لك هذا الإعداد بمنح أذونات للتصفية الموسعة لجميع مواقع الويب مرة واحدة.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "افتراضي", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "اعلانات", + "message": "إعلانات", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { @@ -151,38 +75,6 @@ "message": "المناطق واللغات", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "استيراد وإلحاق", - "description": "English: Import and append" - }, - "1pExport": { - "message": "تصدير", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "استيراد واضافة", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "تصدير", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "سجل التغييرات", "description": "" @@ -204,75 +96,187 @@ "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "قوائم التصفية", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "التبعيات الخارجية (متوافقة مع GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "تأكيد", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "حفظ التغييرات", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "تراجع", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "الإبلاغ عن مشكلة في عوامل التصفية", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "الإبلاغ عن مشكلات الفلترة الخاصة بمواقع الويب المحددة إلىuBlockOrigin/uAssetsمتتبع المشكلةيتطلب حساب GitHub", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "لتجنب تحميل المتطوعين بتقارير مكررة، يرجى التأكد من أن المشكلة لم يتم الإبلاغ عنها بالفعل.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "العثور على تقارير مماثلة", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "عنوان صفحة الويب", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "صفحة الويب...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "— اختر إدخالًا —", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "يظهر الإعلانات أو بقايا الإعلانات", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "يحتوي على تراكبات أو إزعاجات أخرى.", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "يكتشف uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "لديه مشاكل متعلقة بالخصوصية", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "تعطل عند تفعيل uBO Lite.", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "يفتح علامات تبويب أو نوافذ غير مرغوب فيها.", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "يؤدي إلى البرامج الضارة والإحتيال", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "تصنيف صفحة الويب على أنها \"NSFW\" (\"غير آمنة للعمل\")", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "إنشاء تقرير جديد", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "مرحبا", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "لقد قمت للتو بتثبيت uBO Lite. هنا يمكنك اختيار وضع التصفية الافتراضي لاستخدامه في جميع مواقع الويب.\n\nبشكل افتراضي ، يتم تحديد الوضع الأساسي لأنه لا يتطلب الإذن لقراءة البيانات وتعديلها. إذا كنت تثق في uBO Lite ، فيمكنك منحه إذنًا واسعًا لقراءة البيانات وتعديلها على جميع مواقع الويب من أجل تمكين المزيد من إمكانات التصفية المتقدمة لجميع مواقع الويب افتراضيًا.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "وضع التصفية الافتراضي", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "سيتم تجاوز وضع التصفية الافتراضي بواسطة أوضاع التصفية لكل موقع ويب. يمكنك ضبط وضع التصفية على أي موقع ويب معين وفقًا للوضع الذي يعمل بشكل أفضل على موقع الويب هذا. كل وضع له مزاياه وعيوبه.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "لا تصفية", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "أساسي", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "الأفضل", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "مكتمل", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "تصفية الشبكة الأساسية من قوائم التصفية المحددة.\n\nلا يتطلب إذنًا لقراءة البيانات وتعديلها على مواقع الويب.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "تصفية الشبكة المتقدمة بالإضافة إلى تصفية موسعة محددة من قوائم التصفية المحددة.\n\nيتطلب إذنًا واسعًا لقراءة البيانات وتعديلها على جميع مواقع الويب.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "تصفية الشبكة المتقدمة بالإضافة إلى تصفية موسعة محددة وعامة من قوائم التصفية المحددة.\n\nيتطلب إذنًا واسعًا لقراءة البيانات وتعديلها على جميع مواقع الويب.\n\nقد تؤدي التصفية الموسعة العامة إلى زيادة استخدام موارد صفحة الويب.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "قائمة بأسماء المضيفين التي لن تتم أي تصفية لها", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[أسماء النطاقات الرئيسية فقط]\nexample.com\ngames.example", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "السلوك", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "إعادة تحميل الصفحة تلقائيًا عند تغيير وضع التصفية", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "إظهار عدد الطلبات المحظورة على أيقونة شريط الأدوات", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "تمكين الحظر الصارم", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "سيتم حظر التنقل إلى المواقع غير المرغوب فيها، وسيتم تقديم خيار لك للمتابعة.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "البحث عن القوائم", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "الصفحة محجوبة", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "لقد منع uBO Lite تحميل الصفحة التالية:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "تم حظر الصفحة بسبب وجود فلتر مطابق في {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "الصفحة المحظورة تريد إعادة التوجيه إلى موقع آخر. إذا اخترت المتابعة، فسوف تنتقل مباشرة إلى: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "دون معلمات", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "رجوع", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "إغلاق هذه النافذة", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "لا تحذرني مرة أخرى من هذا الموقع", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "متابعة", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/az/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/az/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/az/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/az/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "İcazəyə ehtiyac duymayan məzmun əngəlləyicisi. Reklamları, izləyiciləri, və daha çoxunu quraşdırmadan dərhal sonra əngəlləyir.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,219 +12,163 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — İdarəetmə paneli", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "Tənzimləmələr", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "Haqqında", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "Məxfilik siyasəti", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "İdarəetmə panelini aç", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "Daha çox", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "Daha az", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "Standart", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "Reklamlar", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "Məxfilik", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Zəhlətökən elementlər", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "Müxtəlif", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "Bölgələr, dillər", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Dəyişikliklər siyahısı", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "Mənbə kodu (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Töhfə verənlər", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Mənbə kodu", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Tərcümələr", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "Filtr siyahıları", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Xoş gəldiniz", "description": "The header text for the welcome message section" }, "firstRunDescription": { @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/be/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/be/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/be/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/be/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -8,41 +8,17 @@ "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} правілаў, сканвертаваных з {{filterCount}} сеткавых фільтраў", + "message": "{{ruleCount}} правілаў, пераўтвораных з {{filterCount}} сеткавых фільтраў", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { "message": "uBO Lite — Панэль кіравання", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Увага! Ёсць незахаваныя змены", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Застацца", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Iгнараваць", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Налады", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Спісы фільтраў", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Мае фільтры", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Давераныя сайты", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Пра пашырэнне", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Палітыка прыватнасці", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Адключыць/уключыць uBO Lite для гэтага сайта", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Адкрыць панэль кіравання", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Перайсці ў рэжым імгненнага хавання элементаў", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Перайсці ў рэжым выбару элементаў", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "рэжым фільтравання", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Паведаміць аб праблеме з сайтам", + "message": "Паведаміць пра праблему на гэтым вэб-сайце", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Націсніце, каб захаваць змены.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Націсніце, каб скасаваць змены.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Адкрыць панэль кіравання", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Больш", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Націсніце, каб даць uBO Lite пашыраныя дазволы на гэтым сайце.\nПашыраныя дазволы дазваляюць эфектыўней блакаваць змесціва.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Націсніце, каб адклікаць пашыраныя дазволы на гэтым сайце", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Менш", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Паказваць колькасць заблакаваных запытаў на значцы", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Выгляд", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Тэма", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Уласны колеравы акцэнт", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Блакаваць справаздачы CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Уключыць пашыраную фільтрацыю на ўсіх вэб-сайтах", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite можа прымяняць пашыраную фільтрацыю на пэўным сайце толькі пасля таго, як вы яўна дасце пашырэнню дазвол на змяненне звестак на гэтым сайце. Гэтая налада дазваляе выдаць дазвол на пашыраную фільтрацыю на ўсіх сайтах адначасова.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Прадвызначана", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Рэгіёны, мовы", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Адзін фільтр на радок. Фільтрам можа быць адрас сайта або сумяшчальны з EasyList фільтр. Радкі, што пачынаюцца з !, будуць праігнараваны.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Імпартаваць і дадаць", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Экспартаваць", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Дырэктывы давераных сайтаў указваюць, на якіх вэб-старонках uBO Lite павінен быць выключаны. Адзін запіс на радок.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Імпартаваць і дадаць", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Экспартаваць", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Журнал змяненняў", "description": "" @@ -211,17 +103,69 @@ "message": "Вонкавыя залежнасці (GPLv3-сумяшчальныя):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Пацвердзіць", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Ужыць змяненні", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Вярнуць", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Паведаміць пра праблему з фільтрам", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Паведамляйце пра праблемы з фільтрамі, датычныя канкрэтных вэб-сайтаў, праз трэкер праблемuBlockOrigin/uAssets . Патрэбны ўліковы запіс GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Каб не абцяжарваць добраахвотнікаў дубляванымі справаздачамі, калі ласка, пераканайцеся, што пра гэтую праблему не паведамлялі раней.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Знайсці падобныя справаздачы", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адрас вэб-старонкі:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Вэб-старонка…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Выберыце тэму --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Паказвае рэкламу або яе астачу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Мае накладкі або іншыя недарэчнасці", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Выяўляе uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Мае праблемы, датычныя прыватнасці", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Няспраўнасці пры ўключаным uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Адкрывае непажаданыя карткі або вокны", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Вядзе да шкодных праграм, фішынгу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Пазначыць вэб-старонку як “NSFW” (“небяспечна для працы”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Стварыць новую справаздачу", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Вітаем", @@ -267,6 +211,14 @@ "message": "Пашыранае сеткавае фільтраванне плюс дакладнае і агульнае пашыранае фільтраванне па выбраных спісах фільтраў.\n\nПатрабуе шырокі дазвол на чытанне і змяненне звестак на ўсіх вэб-сайтах.\n\nАгульнае пашыранае фільтраванне можа прывесці да павышанага спажывання рэсурсаў вэб-старонкі.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Спіс назваў хостаў, для якіх не будзе праводзіцца фільтраванне", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[толькі назвы хостаў]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Паводзіны", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Аўтаматычна абнаўляць старонку пры змене рэжыму фільтравання", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Паказваць колькасць заблакаваных запытаў на значку панэлі інструментаў", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Уключыць строгае блакаванне", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Пераход да патэнцыйна непажаданых сайтаў будзе заблакаваны, і вам будзе прапанавана магчымасць працягнуць.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Знайсці спісы", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Старонка заблакаваная", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite папярэдзіў чытанне наступнай старонкі:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Старонка была заблакаваная, бо трапіла ў фільтр праз {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Заблакаваная старонка мае намер перанакіраваць на іншы сайт. Калі вырашыце працягнуць, вы пяройдзеце непасрэдна на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "без параметраў", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Вярнуцца", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Закрыць гэтае акно", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Не папярэджваць больш пра гэты сайт", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Працягнуць", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/bg/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bg/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/bg/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bg/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Експериментален блокер за съдържание без разрешения. Блокира реклами, тракери, миньори и други веднага след инсталирането.", + "message": "Блокиране на съдържание без разрешение. Блокира реклами, тракери, миньори и други веднага след инсталирането.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Табло", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Внимание! Има незапазени промени", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Оставане", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Игнориране", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Настройки", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Списъци с филтри", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Мои филтри", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Доверени сайтове", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Относно", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Политика за поверителност", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Изключва/включва uBO Lite за този сайт", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Табло с настройки", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Временно блокиране на отделен елемент", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Блокиране на отделен елемент", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "режим на филтриране", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Докладване на проблем с този уебсайт", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Щракнете, за да направите промените постоянни.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Щракнете, за да отмените направените промени.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Табло с настройки", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Още", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Щракнете, за да предоставите на uBO Lite разширени разрешения за този сайт.\nРазширените разрешения позволяват по-ефективно блокиране на съдържанието.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Щракнете, за да отмените разширените разрешения за този сайт", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "По-малко", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Показване на брояч в иконката за блокираните заявки", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Външен вид", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Тема", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Потребителски цвят на акцента", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Блокиране на CSP отчетите", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Активиране на разширеното филтриране на всички уебсайтове", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite може да приложи разширено филтриране на даден уебсайт само след като изрично предоставите разрешения на разширението за промяна на данни на този уебсайт. Тази настройка ви позволява да предоставите разрешения за разширено филтриране на всички уебсайтове наведнъж.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Стандартни", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Региони, езици", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Един филтър на ред. Това може да бъде обикновен адрес или филтър, съвместим с EasyList. Редовете с представка ! ще бъдат игнорирани.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Внасяне от файл", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Изнасяне във файл", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-мои-филтри_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Указанията за доверени сайтове определят кои уеб страници трябва да бъдат изключени от uBO Lite. По един запис на ред.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Внасяне от файл", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Изнасяне във файл", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-доверени_сайтове_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Списък с промени", "description": "" @@ -211,17 +103,69 @@ "message": "Външни зависимости (съвместими с GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Изпращане", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Прилагане на промените", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Връщане", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Докладване на проблем с филтъра", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Докладвайте за проблеми с филтрирането на конкретни уебсайтове в uBlockOrigin/uAssets за проследяване на проблеми. Изисква се акаунт в GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "За да се избегне натоварването на доброволците с дублиращи се доклади, моля, проверете дали проблемът вече не е докладван.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Намиране на подобни доклади", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адрес на уеб страницата:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Уеб страницата...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Изберете --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Показва реклами или остатъци от реклами", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Има наслагвания или други неудобства", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Засича uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Има проблеми, свързани с поверителността", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Неправилно функциониране, когато uBO Lite е активиран", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Отваря нежелани раздели или прозорци", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Води до зловреден софтуер, фишинг", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Маркиране на уебстраницата като \"NSFW\" (\"Не е безопасно за работа\")", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Създаване на нов доклад", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Добре дошли", @@ -267,6 +211,14 @@ "message": "Разширено мрежово филтриране и специфично и общо разширено филтриране от избрани списъци с филтри.\n\nИзисква широко разрешение за четене и промяна на данни във всички уебсайтове.\n\nОбщото разширено филтриране може да доведе до по-голямо използване на ресурси от уебстраницата.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Списък с имена на хостове, за които няма да се извършва филтриране.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[само имена на хостове]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Поведение", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Автоматично презареждане на страницата при промяна на режима на филтриране", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Показване на брояч в иконката за блокираните заявки", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Активиране на строгото блокиране", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Навигацията към потенциално нежелани сайтове ще бъде блокирана и ще ви бъде предложена възможността да продължите.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Намиране на списъци", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Страницата е блокирана", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite попречи на зареждането на следната страница:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Страницата е блокирана поради съвпадащ филтър в {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Блокираната страница иска да ви пренасочи към друг сайт. Ако изберете да продължите, ще преминете директно към: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "без параметри", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Назад", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Затворяне на прозореца", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Не ме предупреждавайте отново за този сайт", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Продължаване", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/bn/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bn/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/bn/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bn/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "একটি পরীক্ষামূলক, অনুমতিহীন কন্টেন্ট নিষিদ্ধকারক। বিজ্ঞাপন, অনুসরণকারী, খননকারী, এবং আরো জিনিস নিষিদ্ধ করো ইন্সটলের সাথে সাথেই।", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,179 +12,71 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — ড্যাশবোর্ড", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "সেটিংস", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "সম্পর্কে", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "গোপনীয়তার নীতিমালা", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "ফিল্টারিং মোড", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "ড্যাশবোর্ড খুলুন", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "আরো", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "কম", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "পূর্ব-নির্ধারিত", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "বিজ্ঞাপন", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "গোপনীয়তা", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "ম্যালওয়্যার ডোমেইন", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "বিরক্তি", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "বিবিধ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "অঞ্চল, ভাষা", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "পরিবর্তনসূচি", "description": "" }, "aboutCode": { @@ -192,87 +84,199 @@ "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "অবদানকারী", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "উৎস কোড", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "অনুবাদসমূহ", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "ছাঁকন তালিকা", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "বাহ্যিক নির্ভরতা (GPLv3-সামঞ্জস্যপূর্ণ):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "স্বাগতম", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "আপনি সবেমাত্র uBO Lite ইনস্টল করেছেন। এখানে আপনি সকল ওয়েবসাইটে ব্যবহার করার জন্য ডিফল্ট ফিল্টারিং মোড চয়ন করতে পারেন৷\n\nডিফল্টরূপে, মৌলিক মোডটি নির্বাচন করা হয়েছে কারণ এতে ডেটা পড়ার এবং পরিবর্তন করার অনুমতির প্রয়োজন হয় না৷ আপনি যদি uBO Lite-কে বিশ্বাস করেন, আপনি ডিফল্টরূপে সকল ওয়েবসাইটের জন্য আরও উন্নত ফিল্টারিং ক্ষমতা সক্ষম করার জন্য এটিকে সকল ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার বিস্তৃত অনুমতি দিতে পারেন।", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "ডিফল্ট ফিল্টারিং মোড", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "ডিফল্ট ফিল্টারিং মোড প্রতি-ওয়েবসাইটে ফিল্টারিং মোড দ্বারা ওভাররাইড করা হবে। আপনি যে কোনও ওয়েবসাইটে ফিল্টারিং মোড সামঞ্জস্য করতে পারেন যা সেই ওয়েবসাইটে সবচেয়ে ভাল কাজ করে। প্রতিটি মোড এর সুবিধা এবং অসুবিধা আছে।", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "ফিল্টারিং নেই", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "মৌলিক", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "কার্যকরী", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "সম্পূর্ণ", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "নির্বাচিত ফিল্টার তালিকা থেকে মৌলিক নেটওয়ার্ক ফিল্টারিং।\n\nওয়েবসাইটগুলোতে ডেটা পড়তে এবং পরিবর্তন করার জন্য অনুমতির প্রয়োজন হয় না।", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "উন্নত নেটওয়ার্ক ফিল্টারিং এবং নির্বাচিত ফিল্টার তালিকা থেকে নির্দিষ্ট বর্ধিত ফিল্টারিং।\n\nসকল ওয়েবসাইটের ডেটা পড়তে এবং পরিবর্তন করার জন্য বিস্তৃত অনুমতির প্রয়োজন৷", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "উন্নত নেটওয়ার্ক ফিল্টারিং এবং নির্বাচিত ফিল্টার তালিকা থেকে নির্দিষ্ট এবং জেনেরিকের বর্ধিত ফিল্টারিং।\n\nসকল ওয়েবসাইটে ডেটা পড়তে এবং পরিবর্তন করার জন্য বিস্তৃত অনুমতির প্রয়োজন৷\n\nজেনেরিক বর্ধিত ফিল্টারিং উচ্চতর ওয়েবপেজ সম্পদসমূহের ব্যবহারের কারণ হতে পারে।", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "হোস্টনেমের তালিকা যেগুলোর কোনো ফিল্টারিং হবে না", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "আচরণ", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "ফিল্টারিং মোড পরিবর্তন করার সময় স্বয়ংক্রিয়ভাবে পুনরায় লোড করুন", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "কতগুলো অনুরোধ ব্লক করা হয়েছে তা টুলবার আইকনে দেখাও", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/br_FR/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/br_FR/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/br_FR/messages.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/br_FR/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,282 @@ +{ + "extName": { + "message": "uBlock Origin Lite", + "description": "extension name." + }, + "extShortDesc": { + "message": "Ur stanker saotradurioù hep aotre ebet rekis. Stankañ a ra bruderezh, heulierien, minerien ha kalz muioc'h kerkent ha m'eo staliet.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "perRulesetStats": { + "message": "{{ruleCount}} reolenn, amdroet diwar {{filterCount}} sil rouedad", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "dashboardName": { + "message": "uBO Lite — Taolenn-vourzh", + "description": "English: uBO Lite — Dashboard" + }, + "settingsPageName": { + "message": "Arventennoù", + "description": "appears as tab name in dashboard" + }, + "aboutPageName": { + "message": "Diwar-benn", + "description": "appears as tab name in dashboard" + }, + "aboutPrivacyPolicy": { + "message": "Politikerezh prevezded", + "description": "Link to privacy policy on GitHub (English)" + }, + "popupFilteringModeLabel": { + "message": "mod silañ", + "description": "Label in the popup panel for the current filtering mode" + }, + "popupTipReport": { + "message": "Danevelliñ ur gudenn war al lec'hienn-mañ", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipDashboard": { + "message": "Digeriñ an daolenn-vourzh", + "description": "English: Click to open the dashboard" + }, + "popupMoreButton": { + "message": "Muioc'h", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton": { + "message": "Nebeutoc'h", + "description": "Label to be used to hide popup panel sections" + }, + "3pGroupDefault": { + "message": "Dre ziouer", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAds": { + "message": "Bruderezh", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupPrivacy": { + "message": "Prevezded", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAnnoyances": { + "message": "Saotradurioù", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMisc": { + "message": "A bep seurt", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupRegions": { + "message": "Rannvroioù, broioù", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "aboutChangelog": { + "message": "Deizlevr ar cheñchamantoù", + "description": "" + }, + "aboutCode": { + "message": "Kod mammenn (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Kenlabourerien", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Kod mammenn", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Treiñ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Rolloù ar siloù", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Dalc'hioù diavaez (a glot gant GPLv3)", + "description": "Shown in the About pane" + }, + "supportS6H": { + "message": "Danevelliñ ur gudenn gant ur sil", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Evit nompas sammañ ar genlabourerien a-youl vat gant meur a zanevell heñvel, gwiriit ma n'eo ket bet danevellet ho kudenn en ar-raok mar plij.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Klask danevelloù koulz ha homañ", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Chomlec'h ar bajenn web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Ar bajenn web-mañ…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Dibab ur seurt --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Diskouez a ra bruderezh pe restachoù bruderezh", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Gwiskadoù pe saotradurioù all en deus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Diguzhat a ra uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Kudennoù a-fed prevezded he deus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Ne ya ket mat en-dro p'eo enaouet uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Digeriñ a ra ivinelloù pe prenestroù noazus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Merkañ ar bejenn web evel \"NSFW\" (“Not Safe For Work”, dizereat evit al labour)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Sevel ur rentañ-kont nevez", + "description": "Text for button which open an external webpage in Support pane" + }, + "firstRunSectionLabel": { + "message": "Donemat", + "description": "The header text for the welcome message section" + }, + "firstRunDescription": { + "message": "Emaoc'h o paouez staliañ uBO Lite. Amañ-dindan e c'hallit dibab ar mod silañ dre ziouer evit an holl lec'hiennoù.\n\nDre ziouer eo bet dibabet ar mod diazez peogwir n'eus ket ezhomm reiñ aotre da lenn ha kemmañ roadennoù da uBO Lite. M'ho peus fiziañs e uBO Lite e c'hallit reiñ aotreoù ouzhpenn dezhañ a-benn lenn ha kemmañ roadennoù en holl lec'hiennoù, mod-se e vo enaouet ar mod silañ araokaet en holl lec'hiennoù dre ziouer.", + "description": "Descriptive text shown at first install time only " + }, + "defaultFilteringModeSectionLabel": { + "message": "Mod silañ dre ziouer", + "description": "The header text for the default filtering mode section" + }, + "defaultFilteringModeDescription": { + "message": "Ar mod silañ dre ziouer a vo erlec'hiet gant modoù silañ zo evit lec'hiennoù resis. Gallout a rit aozañ ar mod silañ war bep seurt lec'hienn evit ma vo diouzh al lec'hiennoù-se. Pep mod en deus e duioù fall ha mat.", + "description": "This describes the default filtering mode setting" + }, + "filteringMode0Name": { + "message": "Tamm silañ ebet", + "description": "Name of blocking mode 0" + }, + "filteringMode1Name": { + "message": "diazez", + "description": "Name of blocking mode 1" + }, + "filteringMode2Name": { + "message": "ar gwellañ", + "description": "Name of blocking mode 2" + }, + "filteringMode3Name": { + "message": "klok", + "description": "Name of blocking mode 3" + }, + "basicFilteringModeDescription": { + "message": "Silañ diazez ar rouedad diouzh ar rolloù siloù diuzet.\n\nN'eus ket ezhomm a aotre evit lenn hag aozañ roadennoù el lec'hiennoù.", + "description": "This describes the 'basic' filtering mode" + }, + "optimalFilteringModeDescription": { + "message": "Silañ rouedad araokaet ha silañ amplaet termenet diouzh ar rolloù siloù bet dibabet.\n\nRet eo reiñ aotreoù ouzhpenn a-benn lenn ha kemmañ roadennoù en holl lec'hiennoù.", + "description": "This describes the 'optimal' filtering mode" + }, + "completeFilteringModeDescription": { + "message": "Silañ rouedad araokaet ha silañ amplaet resis ha hollek diouzh ar rolloù siloù diuzet.\n\nRet eo reiñ aotreoù ouzhpenn a-benn lenn ha kemmañ roadennoù en holl lec'hiennoù.\n\nGant ar silañ amplaet hollek e c'hallfe ar bajenn web implijout muioc'h a zanvezioù.", + "description": "This describes the 'complete' filtering mode" + }, + "noFilteringModeDescription": { + "message": "Roll anvioù domanioù ha ne vint ket silet.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[anvioù herberc'hierien hepken]\nskouer.com\nchoariou.skouer\n...", + "description": "Default text for in edit field" + }, + "behaviorSectionLabel": { + "message": "Emzalc'h", + "description": "The header text for the 'Behavior' section" + }, + "autoReloadLabel": { + "message": "Adkargañ ar bajenn ent-emgefreek pa vez cheñchet an doare silañ", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Diskouez an niver a rekedoù bet stanket war arouez ar varrenn-ostilhoù", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enaouiñ ar stankañ strizh", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Stanket e vo ar merdeiñ etrezek lec'hiennoù a c'hallfe bezañ dañjerus, ha moaien a vo deoc'h dibab da genderc'hel pe get.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Kavout rolloù", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Pajenn stanket", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite en deus miret ar bajenn-mañ da gargañ:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Stanket eo bet ar bajenn abalamour d'ur sil dereat e-barzh {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Ar bajenn stanket a fell dezhi adkas d'ul lec'hienn all. M'ho peus c'hoant da genderc'hel e vioc'h kaset d'ar chomlec'h-mañ: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "kuit a arventennoù", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Distreiñ", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Serriñ ar prenestr-mañ", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Arabat kemenn din diwar-benn al lec'hienn-mañ en-dro", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Kenderc'hel", + "description": "A button to navigate to the blocked page" + } +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/bs/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bs/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/bs/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/bs/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — Nadzorna Ploča", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Upozorenje! Imate nesačuvane izmjene", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Ostanite", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Zanemarite", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Postavke", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Zapis filtera", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Moji filteri", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Pouzdane stranice", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "O aplikaciji", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Politika privatnosti", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Uključite/isključite uBO Lite za ovu stranicu", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Otvorite nadzornu ploču", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Uđite u režim rada uklanjanja elementa", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Uđite u režim rada odabiranja elementa", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "način filtriranja", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Prijavite slučaj na ovoj stranici", + "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Kliknite kako biste vaše promjene stalne napravili.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kliknite da poništite promjene.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Otvorite nadzornu ploču", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Više", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Kliknite da dodijelite uBO Lite proširene dozvole na ovoj stranici.\nProširene dozvole omogućavaju efikasnije blokiranje sadržaja.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Kliknite da opozovete proširene dozvole na ovoj stranici", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Manje", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Pokažite broj blokiranih zahtjeva na oznaci", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Izgled", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Prilagođena glavna boja", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokirajte CSP izvještaje", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Zadano", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regije, jezici", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Jedan filter po redu. Filter može biti obično ime hosta ili filter kompatibilan s EasyList-om. Redovi sa prefiksom ! će biti zanemareni.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Uvezite i dodajte", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Izvezite", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "moji-ublock-statični-filteri_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Smjernice pouzdanih stranica diktiraju na kojim web stranicama treba onemogućiti uBO Lite. Jedan unos po redu.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Uvezite i dodajte", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Izvezite", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "moje-ublock-pouzdane-stranice_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Dnevnik izmjena", "description": "" @@ -211,68 +103,180 @@ "message": "Vanjske ovisnosti (kompatibilno s GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Potvrdi", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Primijenite izmjene", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Vrati", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Dobrodošli", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Upravo ste instalirali uBO Lite. Ovdje možete odabrati zadani način filtriranja koji će se koristiti na svim web stranicama.\n\nPrema zadanim postavkama, Osnovni način rada je odabran jer ne zahtijeva dozvolu za čitanje i izmjenu podataka. Ako vjerujete uBO Lite-u, možete mu dati široku dozvolu za čitanje i izmjenu podataka na svim web lokacijama kako bi se omogućile naprednije mogućnosti filtriranja za sve web stranice prema zadanim postavkama.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Zadani način filtriranja", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Zadani način filtriranja bit će zamijenjen načinima filtriranja po web stranici. Možete podesiti način filtriranja na bilo kojoj web stranici prema tome koji način rada najbolje funkcionira na toj web stranici. Svaki način rada ima svoje prednosti i nedostatke.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "nema filtriranja", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "osnovno", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "optimalno", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "kompletan", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": " Osnovno mrežno filtriranje sa odabranih lista filtera.\n\nNe zahtijeva dozvolu za čitanje i modificiranje podataka na web stranicama.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Napredno mrežno filtriranje plus specifično prošireno filtriranje sa odabranih lista filtera.\n\nZahtijeva široku dozvolu za čitanje i izmjenu podataka na svim web stranicama.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Napredno mrežno filtriranje plus specifično i generičko prošireno filtriranje sa odabranih lista filtera.\n\nZahtijeva široku dozvolu za čitanje i izmjenu podataka na svim web stranicama.\n\nGeneričko prošireno filtriranje može uzrokovati veću upotrebu resursa web stranice.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista imena hostova za koja se neće vršiti filtriranje", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Ponašanje", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Automatski ponovo učitajte stranicu prilikom promjene načina filtriranja", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Prikažite broj blokiranih zahtjeva na ikoni trake sa alatkama", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ca/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ca/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ca/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ca/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — Tauler", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Atenció! Hi ha canvis sense desar", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Roman", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignora", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Configuració", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Llistat de filtres", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Els meus filtres", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Llocs de confiança", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Quant a", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Política de privadesa", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Desactiva/activa uBO Lite per aquest lloc", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Obre el tauler", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Accedeix al mode d'eliminació d'elements", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Accedeix al mode de selecció d'elements", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "mode de filtre", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Informa d'un problema en aquest lloc web", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Feu clic per fer que els vostres canvis siguin permanents.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Feu clic per revertir els canvis.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Obre el tauler", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Més", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Feu clic per concedir permisos ampliats a l'uBO Lite en aquest web.\nEls permisos ampliats permeten un bloqueig de contingut més efectiu.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Feu clic per revocar els permisos ampliats en aquest web", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Menys", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Mostra el nombre de sol·licituds blocades a la icona", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Aparença", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Color d'accent personalitzat", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Bloca els informes CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Habilita el filtratge addicional a tots els llocs web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "L'uBO Lite pot aplicar el filtratge estès a un lloc web determinat, només després que concediu permisos al complement per modificar les dades de forma explícita. Aquesta configuració us permet concedir permisos de filtratge estès a tots els llocs web alhora.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Per defecte", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regions, llengües", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Un filtre per línia. Un filtre pot ser un nom d'amfitrió simple o un filtre compatible amb EasyList. Les línies amb el prefix ! seran ignorades.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importa i annexa", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exporta", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Les directives del lloc de confiança dicten en quines pàgines web s'ha de desactivar l'uBO Lite. Una entrada per línia.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importa i annexa", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exporta", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Registre de canvis", "description": "" @@ -211,17 +103,69 @@ "message": "Dependències externes (compatibles amb GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Envia", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Aplica els canvis", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Desfés", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Informeu d'un problema de filtre", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Informeu d'un problema en llocs web específics mitjançant el uBlockOrigin/uAssets seguiment d'errors. Cal un compte al GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Per evitar carregar els voluntaris amb informes duplicats, verifiqueu que el problema encara no s'hagi notificat.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Cerca d'informes semblants", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adreça de la pàgina web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La pàgina web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Trieu una entrada --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra anuncis o restes d'anuncis", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Té superposicions o altres errors", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta l'ús de l'uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Té problemes relacionats amb la privadesa", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "No es mostra correctament amb l'uBO Lite habilitat", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Obre pestanyes o finestres no desitjades", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Condueix a programari maliciós, pesca electrònica", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiqueta l'enllaç com a «NSFW» (“No apte per al treball”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Crea un informe nou", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Us donem la benvinguda", @@ -267,6 +211,14 @@ "message": "Filtratge de xarxa avançat més un filtratge estès específic i genèric de les llistes de filtres seleccionades.\n\nRequereix un ampli permís per llegir i canviar dades a tots els llocs web.\n\nEl filtratge estès genèric pot provocar un ús més elevat dels recursos de la pàgina web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Llistat de noms d'amfitrió als quals no s'aplicarà cap filtre", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[només noms d'amfitrió]\nexemple.com\njocs.exemple\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportament", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Recarrega automàticament la pàgina quan canvieu el mode de filtratge", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostra el nombre de sol·licituds blocades a la icona de la barra d'eines", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Habilita el blocatge estricte", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Es blocarà la navegació en webs potencialment no desitjables, oferint-vos la possibilitat de continuar.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Cerca llistes", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Pàgina blocada", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "L'uBO Lite ha evitat la càrrega d'aquesta pàgina:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "La pàgina s'ha blocat a causa d'un filtre coincident a {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "La pàgina blocada vol redirigir-vos a un altre web diferent. Si continueu, si us reenviarà a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sense paràmetres", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Enrere", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Tanca aquesta finestra", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "No em tornis a avisar sobre aquest lloc", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Continua", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/cs/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cs/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/cs/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cs/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Experimentální blokovač obsahu vyžadující méně oprávnění. Blokuje reklamy, sledovače, těžaře a jiné ihned po instalaci.", + "message": "Blokátor obsahu vyžadující méně oprávnění. Blokuje reklamy, sledovače, těžaře a jiné ihned po instalaci.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Ovládací panel", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Varování! Máte neuložené změny", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Zůstat", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorovat", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Nastavení", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filtry třetích stran", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Vaše filtry", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Povolené domény", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "O rozšíření", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Ochrana soukromí", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Trvale zakázat uBO Lite pro celý tento web.", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Otevřít ovládací panel", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Zapnout režim likvidace prvků", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Zapnout režim výběru prvků", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Filtrovací režim", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Nahlásit problém na této webové stránce", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Kliknutím natrvalo uložíte provedené změny.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kliknutím zrušíte provedené změny.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Otevřít ovládací panel", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Více", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Kliknutím udělíte rozšířená oprávnění uBO Lite na tomto webu.\nRozšířená oprávnění umožňují efektivnější blokování obsahu.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Kliknutím odeberete rozšířená oprávnění na tomto webu", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Méně", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Zobrazit počet blokovaných požadavků u ikony", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Vzhled", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Motiv", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Vlastní barva motivu", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokovat CSP reporty", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Zapnout rozšířené filtrování na všech webových stránkách", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite může použít rozšířené filtrování na dané webové stránce pouze poté, co výslovně udělíte oprávnění k úpravě dat na této webové stránce. Toto nastavení umožňuje udělit oprávnění pro rozšířené filtrování všem webům najednou.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Výchozí", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regionální, jazykové", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Jeden filtr na řádek. Filtr může být prostý název hostitele nebo filtr kompatibilní s Adblock Plus. Řádky začínající vykřičníkem ! budou ignorovány.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importovat a připojit", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportovat", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-me-vlastni-filtry_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Pravidla v seznamu povolených domén určují, pro které webové stránky bude uBO Lite vypnutý. Jedna položka na řádek. Neplatná pravidla budou tiše ignorována a zakomentována.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importovat a připojit", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportovat", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-muj-whitelist_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Přehled změn", "description": "" @@ -204,24 +96,76 @@ "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Seznam filtrů", + "message": "Seznamy filtrů", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { "message": "Externí závislosti (kompatibilní s GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Odeslat", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Použít změny", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Vrátit", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Nahlásit problém s filtrem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Nahlaste problémy s filtrem u učitých webových stránek do sledovače problémů uBlockOrigin/uAssets. Vyžaduje účet GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Abyste dobrovolníky nezatěžovali duplicitními hlášeními, ověřte si, zda již problém nebyl nahlášen.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Vyhledat podobná hlášení", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa webové stránky:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Webová stránka…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vyberte položku --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Zobrazuje reklamy nebo zbytky reklam", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Je překrytá nebo má jiné nedostatky", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detekuje uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Má problémy související se soukromím", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Je rozbitá, když je povolen uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otevírá nechtěné karty nebo okna", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Vede k badwaru, phishingu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označit webovou stránku jako “NSFW” (“Není bezpečné pro práci”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Vytvořit nové hlášení", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Vítejte", @@ -232,7 +176,7 @@ "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Výchozí režim filtrování", + "message": "Výchozí filtrovací režim", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { @@ -267,12 +211,72 @@ "message": "Pokročilé síťové filtrování plus specificky a obecně rozšířené filtrování z vybraných seznamů filtrů.\n\nVyžaduje rozsáhlé oprávnění ke čtení a změně dat na všech webech.\n\nObecně rozšířené filtrování může způsobit vyšší využití zdrojů webových stránek.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Seznam názvů hostitelů, pro které nebude probíhat žádné filtrování", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[pouze názvy hostitelů]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Chování", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automaticky znovu načíst stránku při změně filtračního režimu", + "message": "Automaticky znovu načíst stránku při změně filtrovacího režimu", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Zobrazit počet blokovaných požadavků u ikony v panelu nástrojů", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Povolit přísné blokování", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigace na potenciálně nežádoucí stránky bude zablokována a bude vám nabídnuta možnost pokračovat.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Najít seznamy", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Stránka zablokována", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite zabránil načtení následující stránky:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Stránka byla zablokována z důvodu shodného filtru v {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Zablokovaná stránka vás chce přesměrovat na jiný web. Pokud se rozhodnete pokračovat, přejdete přímo na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "bez parametrů", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Zpět", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Zavřít toto okno", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Nevarujte mě znovu o této stránce", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Pokračovat", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/cv/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cv/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/cv/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cv/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/cy/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cy/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/cy/messages.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/cy/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,282 @@ +{ + "extName": { + "message": "uBlock Origin Lite", + "description": "extension name." + }, + "extShortDesc": { + "message": "Rhwystrydd cynnwys nad yw'n gofyn am hawliau. Rhwystrwch hysbysebion, tracwyr, cloddwyr, a mwy, yn syth ar ôl gosod.", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "perRulesetStats": { + "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "dashboardName": { + "message": "uBO Lite — Dangosfwrdd", + "description": "English: uBO Lite — Dashboard" + }, + "settingsPageName": { + "message": "Gosodiadau", + "description": "appears as tab name in dashboard" + }, + "aboutPageName": { + "message": "Ynghylch", + "description": "appears as tab name in dashboard" + }, + "aboutPrivacyPolicy": { + "message": "Polisi preifatrwydd", + "description": "Link to privacy policy on GitHub (English)" + }, + "popupFilteringModeLabel": { + "message": "modd hidlo", + "description": "Label in the popup panel for the current filtering mode" + }, + "popupTipReport": { + "message": "Rhoi gwybod am broblem ar y wefan hon", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipDashboard": { + "message": "Agor y dashfwrdd", + "description": "English: Click to open the dashboard" + }, + "popupMoreButton": { + "message": "Mwy", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton": { + "message": "Llai", + "description": "Label to be used to hide popup panel sections" + }, + "3pGroupDefault": { + "message": "Diofyn", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAds": { + "message": "Hysbysebion", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupPrivacy": { + "message": "Preifatrwydd", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAnnoyances": { + "message": "Pethau diflas", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMisc": { + "message": "Amrywiol", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupRegions": { + "message": "Rhanbarthau, ieithoedd", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "aboutChangelog": { + "message": "Cofnod newidiadau", + "description": "" + }, + "aboutCode": { + "message": "Cod ffynhonnell (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Cyfranwyr", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "Cod ffynhonnell", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "Cyfieithiadau", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "Rhestri hidlo", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "Gofynion allanol (cydnaws â GPLv3):", + "description": "Shown in the About pane" + }, + "supportS6H": { + "message": "Adrodd nam ar hidlydd", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" + }, + "firstRunSectionLabel": { + "message": "Croeso", + "description": "The header text for the welcome message section" + }, + "firstRunDescription": { + "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "description": "Descriptive text shown at first install time only " + }, + "defaultFilteringModeSectionLabel": { + "message": "Default filtering mode", + "description": "The header text for the default filtering mode section" + }, + "defaultFilteringModeDescription": { + "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "description": "This describes the default filtering mode setting" + }, + "filteringMode0Name": { + "message": "dim hidlo", + "description": "Name of blocking mode 0" + }, + "filteringMode1Name": { + "message": "sylfaenol", + "description": "Name of blocking mode 1" + }, + "filteringMode2Name": { + "message": "priodol", + "description": "Name of blocking mode 2" + }, + "filteringMode3Name": { + "message": "cyflawn", + "description": "Name of blocking mode 3" + }, + "basicFilteringModeDescription": { + "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "description": "This describes the 'basic' filtering mode" + }, + "optimalFilteringModeDescription": { + "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "description": "This describes the 'optimal' filtering mode" + }, + "completeFilteringModeDescription": { + "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "description": "This describes the 'complete' filtering mode" + }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, + "behaviorSectionLabel": { + "message": "Ymddygiad", + "description": "The header text for the 'Behavior' section" + }, + "autoReloadLabel": { + "message": "Ail-lwytho tudalen ar ôl newid y modd hidlo", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" + } +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/da/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/da/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/da/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/da/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "En eksperimentel, tilladelsesløs indholdsblocker – blokerer som standard annoncer, trackere, minere mv.", + "message": "En tilladelsesløs indholdsblocker. Blokerer som standard annoncer, trackere, minere mv. straks efter installationen.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Kontrolpanel", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Advarsel! Der er ikke-gemte ændringer", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Bliv", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorér", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Indstillinger", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filterlister", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Egne filtre", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Betroede websteder", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Om", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Fortrolighedspolitik", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Deaktivér/aktivér uBO Lite for dette websted", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Åbn kontrolpanelet", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Gå til tilstanden elementdræber­", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Gå til tilstanden elementvælger", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtreringstilstand", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Anmeld et problem med dette websted", + "message": "Anmeld et problem på dette websted", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klik for at gøre ændringerne permanente.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klik for at fortryde ændringerne.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Åbn kontrolpanelet", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Flere", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klik for at give uBO Lite udvidede tilladelser på dette websted.\nUdvidede tilladelser tillader mere effektiv blokering af indhold.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klik for at tilbagekalde udvidede tilladelser på dette websted", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Færre", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Vis på ikonet antallet af blokerede forespørgsler", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Udseende", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Tilpasset fremhævningsfarve", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokér CSP-anmldelser", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Aktivér udvidet filtrering på alle websteder", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite kan kun anvende udvidet filtrering på et givent websted, efter at du udtrykkeligt har givet udvidelsen tilladelse til at ændre data på webstedet. Denne indstilling giver dig mulighed for at give tilladelse til udvidet filtrering for alle websteder på én gang.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standard", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regioner, sprog", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Ét filter pr. linje. Et filter kan være et alm. værtsnavn eller et EasyList-kompatibelt filter. Linjer startende med ! ignoreres.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importér og tilføj", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksport", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "egne-ublock-statiske-filtre_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "De betroede webstedsdirektiver dikterer, på hvilke websider uBO Lite skal deaktiveres. Én post pr. linje.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importér og tilføj", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksport", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "egne-ublock-betroede-websteder_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Ændringslog", "description": "" @@ -211,24 +103,76 @@ "message": "Eksterne afhængigheder (GPLv3-kompatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Indsend", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Anvend ændringer", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Tilbagefør", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Anmeld et filterproblem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Anmeld filterproblemer med bestemte websteder til uBlockOrigin/uAssets-problemsporingen. Kræver en GitHub-konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "For at undgå at belaste frivillige med dubletanmeldelser, så tjek venligst, at problemet ikke allerede er anmeldt.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find lign. anmeldelser", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Websideadressen:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Websiden…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vælg problemtype --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Viser annoncer eller annoncerester", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Har overlejringer eller andre gener", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detekterer uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Har fortrolighedsrelaterede problemer", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Fejlfungerer, når uBO Lite er aktiveret", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Åbner uønskede faner eller vinduer", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Fører til badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Mærk websiden som “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Opret ny anmeldelse", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Velkommen", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Du har netop installeret uBO Lite. Her kan vælges den standardfiltreringstilstand, der skal bruges på alle websteder.\n\nStandardvalget er Basis-tilstand, da den ikke kræver tilladelse til at læse og ændre data. Stoler du på uBO Lite, kan den omfattende tilladelse til at læse og ændre data på alle websteder tildeles for som standard at aktivere mere avancerede filtreringsfunktioner for alle websteder.", + "message": "Du har netop installeret uBO Lite. Her kan den standardfiltreringstilstand vælges, der skal bruges på alle websteder.\n\nStandardvalget er Basis-tilstand, da den ikke kræver tilladelse til at læse og ændre data. Er uBO Lite betroet, kan den udvidede tilladelse til at læse og ændre data på alle websteder tildeles for som standard at aktivere mere avancerede filtreringsfunktioner for alle websteder.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -267,6 +211,14 @@ "message": "Avanceret netværksfiltrering plus specifik og generisk udvidet filtrering ud fra valgte filterlister.\n\nOmfattende tilladelse kræves for at læse og ændre data på alle websteder.\n\nGenerisk, udvidet filtrering kan medføre højere webside-ressourceforbrug.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Liste over websteder, for hvilke ingen filtrering vil ske.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[kun værtsnavne]\neksempel.dk\nspil.eksempel\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Adfærd", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatisk sidegenindlæsning ved skift af filtreringstilstand", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Vis antallet af blokerede forespørgsler på værktøjsbjælkeikonet", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Aktivér striks blokering", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigering til potentielt uønskede websteder blokeres, men man tilbydes muligheden for at fortsætte.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lister", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Side blokeret", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite har forhindret flg. side i at blive indlæst:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Siden blev blokeret grundet et matchende filter i {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Den blokerede side ønsker at omdirigere til et andet websted. Vælger man at fortsætte, navigeres direkte til: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "uden parametre", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Gå tilbage", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Luk dette vindue", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Advar ikke igen om dette websted", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Fortsæt", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/de/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/de/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/de/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/de/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Experimenteller Inhaltsblocker, der ohne Berechtigungen auskommt. Blockiert Werbung, Tracker & mehr sofort nach der Installation.", + "message": "Ein Inhaltsblocker, der ohne Berechtigungen auskommt. Blockiert Werbung, Tracker und mehr sofort nach der Installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warnung! Nicht gespeicherte Änderungen", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Bleiben", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorieren", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Einstellungen", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filterlisten", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Meine Filter", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Ausnahmeregeln", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Über", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Datenschutzhinweise", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "uBO Lite für diese Website ein-/ausschalten", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Dashboard öffnen", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Element-Entfernungsmodus starten", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Element-Auswahlmodus starten", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Filtermodus", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Ein Problem auf dieser Website melden", + "message": "Ein Problem mit dieser Website melden", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Hier klicken, um Ihre Änderungen dauerhaft zu übernehmen.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Hier klicken, um Ihre Änderungen rückgängig zu machen.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Dashboard öffnen", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mehr", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klicken Sie hier, um uBO Lite erweiterte Berechtigungen für diese Website zu erteilen.\nErweiterte Berechtigungen ermöglichen ein effektiveres Blockieren von Inhalten.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klicken Sie hier, um erweiterte Berechtigungen für diese Website zu widerrufen.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Weniger", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Anzahl der blockierten Anfragen auf dem Symbol anzeigen", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Erscheinungsbild", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Farbschema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Benutzerdefinierte Akzentfarbe", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP-Berichte blockieren", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Erweitertes Filtern auf allen Websites aktivieren", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite kann das erweiterte Filtern nur dann auf eine bestimmte Website anwenden, wenn Sie der Erweiterung ausdrücklich die Berechtigung erteilen, Daten auf dieser Website zu ändern. Mit dieser Einstellung können Sie Berechtigungen für das erweiterte Filtern für alle Websites auf einmal erteilen.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standard", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -132,11 +56,11 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privatsphäre", + "message": "Datenschutz", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Domains mit Schadsoftware", + "message": "Schutz vor Schadsoftware, Sicherheit", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regionen, Sprachen", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Ein Filter pro Zeile. Ein Filter kann ein einfacher Hostname oder ein EasyList-kompatibler Filter sein. Zeilen mit vorangestelltem ! werden ignoriert.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importieren und anfügen …", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportieren …", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-statische-filter_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Ausnahmeregeln bestimmen, auf welchen Webseiten uBO Lite deaktiviert werden soll. Ein Eintrag pro Zeile.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importieren und anfügen …", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportieren …", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-ausnahmeregeln_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Änderungsprotokoll", "description": "" @@ -211,24 +103,76 @@ "message": "Externe Abhängigkeiten (GPLv3-kompatibel):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Absenden", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Änderungen anwenden", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Rückgängig machen", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Ein Filterproblem melden", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Bitte melden Sie Filterprobleme mit bestimmten Websites an den uBlockOrigin/uAssets Issue Tracker. Erfordert ein GitHub-Konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Um die Freiwilligen nicht mit doppelten Meldungen zu belasten, vergewissern Sie sich bitte, dass das Problem nicht schon einmal gemeldet wurde.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Ähnliche Meldungen finden", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresse der Webseite:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Die Webseite …", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Einen Eintrag auswählen --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Zeigt Werbung oder Werbereste", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Hat Überdeckungen oder andere Belästigungen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Erkennt uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Hat Datenschutzprobleme", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funktioniert nicht richtig, wenn uBO Lite aktiviert ist", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Öffnet unerwünschte Tabs oder Fenster", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Führt zu Schadsoftware, Phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Webseite als »NSFW« kennzeichnen (»Unpassend für den Arbeitsplatz«)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Neue Meldung erstellen", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Willkommen", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Sie haben soeben uBO Lite installiert. Sie können hier den Standardfiltermodus auswählen, der auf allen Websites angewendet werden soll.\n\nStandardmäßig ist der einfache Modus ausgewählt, da er keine Berechtigung zum Lesen und Ändern von Daten erfordert. Wenn Sie uBO Lite vertrauen, können Sie dieser Erweiterung eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites erteilen, um standardmäßig erweiterte Filterfunktionen für alle Websites zu aktivieren.", + "message": "Sie haben soeben uBO Lite installiert. Sie können hier den Standardfiltermodus auswählen, der auf allen Websites angewendet werden soll.\n\nStandardmäßig ist der einfache Modus ausgewählt, weil er keine Berechtigung zum Lesen und Ändern von Daten erfordert. Wenn Sie uBO Lite vertrauen, können Sie dieser Erweiterung eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites erteilen, um standardmäßig erweiterte Filterfunktionen für alle Websites zu aktivieren.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -240,7 +184,7 @@ "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "keine Filterung", + "message": "nicht filtern", "description": "Name of blocking mode 0" }, "filteringMode1Name": { @@ -256,17 +200,25 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Einfache Netzwerkfilterung aus ausgewählten Filterlisten.\n\nErfordert keine Berechtigung zum Lesen und Ändern von Daten auf Websites.", + "message": "Einfaches Netzwerkfiltern aus gewählten Filterlisten.\n\nErfordert keine Berechtigung zum Lesen und Ändern von Daten auf Websites.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Erweiterte Netzwerkfilterung plus spezifisches erweitertes Filtern aus ausgewählten Filterlisten.\n\nErfordert eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites.", + "message": "Erweitertes Netzwerkfiltern plus spezifisches erweitertes Filtern aus ausgewählten Filterlisten.\n\nErfordert eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Erweiterte Netzwerkfilterung plus spezifisches und generisches erweitertes Filtern aus ausgewählten Filterlisten.\n\nErfordert eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites.\n\nDie generische erweiterte Filterung kann zu einem höheren Ressourcenverbrauch der Website führen.", + "message": "Erweitertes Netzwerkfiltern plus spezifisches und allgemeines erweitertes Filtern aus gewählten Filterlisten.\n\nErfordert eine weitreichende Berechtigung zum Lesen und Ändern von Daten auf allen Websites.\n\nDas allgemeine erweiterte Filtern kann zu einem höheren Ressourcenverbrauch der Webseite führen.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Liste der Websites, für die nicht gefiltert wird.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[nur Hostnamen]\nexample.com\ngames.example\n…", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Verhalten", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Seite beim Ändern des Filtermodus automatisch neu laden", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Anzahl der blockierten Anfragen auf dem Symbol in der Symbolleiste anzeigen", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Striktes Blockieren aktivieren", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Die Navigation zu potenziell unerwünschten Websites wird verhindert, jedoch wird eine Möglichkeit zum Fortfahren angeboten.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Listen suchen", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Seite blockiert", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite hat das Laden der folgenden Seite verhindert:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Die Seite wurde aufgrund eines übereinstimmenden Filters in {{listname}} blockiert.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Die blockierte Seite möchte zu einer anderen Website weiterleiten. Beim Fortfahren wird folgende Seite aufgerufen: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "ohne Parameter", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Zurück", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Dieses Fenster schließen", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Nicht erneut vor dieser Seite warnen", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Fortfahren", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/el/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/el/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/el/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/el/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,114 +15,38 @@ "message": "uBO Lite — Πίνακας ελέγχου", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Προειδοποίηση! Έχετε μη αποθηκευμένες αλλαγές", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Παραμονή", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Παράβλεψη", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Ρυθμίσεις", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Λίστες φίλτρων", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Τα φίλτρα μου", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Έμπιστοι ιστότοποι", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { - "message": "Πληροφορίες", + "message": "Σχετικά", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { "message": "Πολιτική απορρήτου", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Απενεργοποίηση/ενεργοποίηση uBO Lite για αυτόν τον ιστότοπο", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Ανοίξτε τον πίνακα ελέγχου", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Είσοδος σε λειτουργία διαγραφής στοιχείων", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Είσοδος σε λειτουργία επιλογής στοιχείων", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "λειτουργία φιλτραρίσματος", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Αναφέρετε ένα ζήτημα σε αυτόν τον ιστότοπο", + "message": "Αναφορά ενός ζητήματος σε αυτόν τον ιστότοπο", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Κάντε κλικ για να γίνουν οριστικές οι αλλαγές σας.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Κάντε κλικ για να επαναφέρετε τις αλλαγές σας.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Άνοιγμα του πίνακα εργαλείων", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Περισσότερα", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Κάντε κλικ για να παραχωρήσετε εκτεταμένα δικαιώματα στο uBO Lite για αυτόν τον ιστότοπο.\nΤα εκτεταμένα δικαιώματα επιτρέπουν πιο αποτελεσματικό αποκλεισμό περιεχομένου.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Κάντε κλικ για να ανακαλέσετε τα εκτεταμένα δικαιώματα για αυτόν τον ιστότοπο", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Λιγότερα", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Εμφάνιση αριθμού αποκλεισμένων αιτημάτων στο εικονίδιο", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Εμφάνιση", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Θέμα", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Προσαρμοσμένο χρώμα έμφασης", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Φραγή αναφορών CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Ενεργοποιήστε το εκτεταμένο φιλτράρισμα σε όλους τους ιστότοπους", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "Το uBO Lite μπορεί να εφαρμόσει εκτεταμένο φιλτράρισμα σε έναν συγκεκριμένο ιστότοπο μόνο αφού εκχωρήσετε ρητά στην επέκταση δικαιώματα τροποποίησης δεδομένων σε αυτόν τον ιστότοπο. Αυτή η ρύθμιση σάς επιτρέπει να εκχωρήσετε δικαιώματα για εκτεταμένο φιλτράρισμα σε όλους τους ιστότοπους ταυτόχρονα.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Προεπιλογή", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Κακόβουλοι τομείς", + "message": "Τομείς κακόβουλου λογισμικού", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,40 +75,8 @@ "message": "Περιοχές, γλώσσες", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Ένα φίλτρο ανά γραμμή. Ένα φίλτρο μπορεί να είναι ένα απλό όνομα κεντρικού υπολογιστή (hostname) ή ένα φίλτρο, συμβατό με το EasyList. Οι γραμμές με το πρόθεμα ! θα παραβλέπονται.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Εισαγωγή και προσάρτηση", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Εξαγωγή", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "statika-filtra-ublock_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Οι οδηγίες έμπιστων ιστοτόπων υποδεικνύουν σε ποιες ιστοσελίδες θα πρέπει να απενεργοποιείται το uBO Lite. Μία καταχώρηση ανά γραμμή.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Εισαγωγή και προσάρτηση", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Εξαγωγή", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "empistoi-istotopoi-ublock_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Αρχείο καταγραφής αλλαγών", + "message": "Αρχείο αλλαγών", "description": "" }, "aboutCode": { @@ -211,20 +103,72 @@ "message": "Εξωτερικές εξαρτήσεις (συμβατές με GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Υποβολή", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Εφαρμογή αλλαγών", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Επαναφορά", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Αναφορά ζητήματος φίλτρου", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Αναφέρετε ζητήματα φίλτρου για συγκεκριμένους ιστοτόπους στο εργαλείο παρακολούθησης ζητημάτων του uBlockOrigin/uAssets. Απαιτείται λογαριασμός GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Για να αποφύγετε την επιβάρυνση των εθελοντών με διπλές αναφορές, βεβαιωθείτε ότι το ζήτημα δεν έχει ήδη αναφερθεί.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Βρείτε παρόμοιες αναφορές", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Διεύθυνση ιστοσελίδας:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Η ιστοσελίδα…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Επιλέξτε μια καταχώρηση --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Εμφανίζει διαφημίσεις ή υπολείμματα διαφημίσεων", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Έχει επικαλύψεις ή άλλες ενοχλήσεις", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Ανιχνεύει το uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Έχει ζητήματα σχετικά με το απόρρητο", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Δυσλειτουργεί όταν είναι ενεργό το uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Ανοίγει ανεπιθύμητες καρτέλες ή παράθυρα", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Οδηγεί σε κακόβουλο λογισμικό, ηλεκτρονικό «ψάρεμα»", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Επισήμανση ιστοσελίδας ως «NSFW» («Not Safe For Work»)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Δημιουργία νέας αναφοράς", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Καλώς ήρθατε", + "message": "Καλώς ορίσατε", "description": "The header text for the welcome message section" }, "firstRunDescription": { @@ -267,12 +211,72 @@ "message": "Προηγμένο φιλτράρισμα δικτύου και ειδικό και γενικό εκτεταμένο φιλτράρισμα από επιλεγμένες λίστες φίλτρων.\n\nΑπαιτεί ευρεία άδεια για την ανάγνωση και την αλλαγή δεδομένων σε όλους τους ιστότοπους.\n\nΤο γενικό εκτεταμένο φιλτράρισμα μπορεί να προκαλέσει μεγαλύτερη χρήση πόρων ιστοσελίδας.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Λίστα των hostnames για τα οποία δεν θα πραγματοποιηθεί φιλτράρισμα", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[μόνο ονόματα κεντρικών υπολογιστών]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Συμπεριφορά", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Αυτόματη επαναφόρτωση της σελίδας κατά την αλλαγή της λειτουργίας φιλτραρίσματος", + "message": "Αυτόματη επαναφόρτωση σελίδας κατά την αλλαγή λειτουργίας φιλτραρίσματος", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Εμφάνιση του αριθμού των αποκλεισμένων αιτημάτων στο εικονίδιο της γραμμής εργαλείων", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Ενεργοποίηση αυστηρής φραγής", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Θα απετραπεί η πρόσβαση σε πιθανά ανεπιθύμητους ιστοτόπους. Θα σας προσφερθεί η επιλογή να συνεχίσετε.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Εύρεση λιστών", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Αποκλησμένη σελίδα", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "Το uBO Lite εμπόδισε τη φόρτωση στης παρακάτω σελίδας:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Η σελίδα αποκλείστηκε λόγω αντιστοίχισης φίλτρου στη {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Η αποκλεισμένη σελίδα θέλει να κάνει ανακατεύθυνση σε άλλο ιστότοπο. Αν επιλέξετε να συνεχίσετε, θα μεταβείτε απευθείας στο: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "χωρίς παραμέτρους", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Επιστροφή", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Κλείσιμο του παραθύρου", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Να μην προειδοποιηθώ ξανά για αυτόν τον ιστότοπο", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Συνέχεια", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/en/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/en/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/en/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/en/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/en_GB/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/en_GB/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/en_GB/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/en_GB/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent colour", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Change-log", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,12 +211,72 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of hostnames for which no filtering will take place", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Behaviour", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/eo/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/eo/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/eo/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/eo/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,128 +15,52 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "Agordoj", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "Pri", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "Pli", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "Malpli", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "Defaŭlta", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "Reklamoj", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "Privateco", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,56 +75,24 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Ŝanĝprotokolo", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "Fontkodo (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Kontribuantoj", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Fontkodo", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Tradukoj", "description": "Link text to translations repo" }, "aboutFilterLists": { @@ -211,20 +103,72 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Bonvenon", "description": "The header text for the welcome message section" }, "firstRunDescription": { @@ -244,7 +188,7 @@ "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "simpla", "description": "Name of blocking mode 1" }, "filteringMode2Name": { @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/es/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/es/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/es/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/es/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Un bloqueador de contenido experimental con menos permisos. Bloquea anuncios, rastreadores, criptomineros y aún más.", + "message": "Un bloqueador de contenido con menos permisos. Bloquea anuncios, rastreadores, criptomineros y aún más.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Panel de control", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "¡Atención! Tienes cambios sin guardar", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Conservar", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorar", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Configuración", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listas de filtros", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mis filtros", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Sitios de confianza", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Acerca de", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Política de privacidad", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Deshabilitar/habilitar uBO Lite en este sitio", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Abrir panel de control", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Entrar al modo eliminación de elementos", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Entrar al modo selección de elementos", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "modo de filtrado", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Reportar un problema en este sitio web", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Haz clic para hacer tus cambios permanentes.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Haz clic para revertir tus cambios.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Abrir panel de control", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Más", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Clic para otorgar permisos extendidos a uBO Lite en este sitio.\nLos permisos extendidos permiten un bloqueo de contenido más efectivo.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Clic para revocar permisos extendidos en este sitio", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Menos", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Mostrar el número de peticiones bloqueadas en el icono", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Apariencia", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Tono de color personalizado", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Bloquear reportes CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Habilitar filtrado extendido en todos los sitios web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite puede aplicar el filtrado extendido en un sitio web determinado solo después de que explícitamente hayas otorgado a la extensión permisos para modificar los datos de ese sitio web. Esta configuración te permite otorgar permisos para el filtrado extendido a todos los sitios web a la vez.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Predeterminado", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Dominios de malware", + "message": "Protección de malware, seguridad", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regiones, idiomas", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Un filtro por línea. El filtro puede ser un nombre de dominio, o un filtro compatible con EasyList. Las líneas que comiencen con ! serán ignoradas.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importar y anexar", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportar", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-mis-filtros-estaticos_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Sitios de confianza para los cuales se deshabilitará uBO Lite. Una entrada por línea.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importar y anexar", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportar", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-mis-sitios-de-confianza_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Registro de cambios", "description": "" @@ -211,17 +103,69 @@ "message": "Dependencias externas (compatibles con GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Enviar", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Aplicar cambios", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revertir", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Reportar un problema de filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Reportar problemas de filtros con sitios web específicos en el registro de problemas uBlockOrigin/uAssets. Requiere una cuenta en GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar sobrecargar a voluntarios con reportes duplicados, verifica que el problema no haya sido reportado.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Encontrar reportes similares", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Dirección de la página web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La página web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Elige una entrada --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Muestra anuncios o restos de anuncios", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Tiene superposiciones u otras molestias", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Tiene problemas relacionados con la privacidad", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funciona mal cuando uBO Lite está habilitado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre pestañas o ventanas no deseadas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Conduce a malware y phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiquetar la página web como “NSFW” (“no es seguro/apropiado para el trabajo”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Crear nuevo reporte", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Bienvenida", @@ -267,6 +211,14 @@ "message": "Filtrado de red avanzado más filtrado extendido específico y genérico a partir de listas de filtros seleccionadas.\n\nRequiere un amplio permiso para leer y modificar datos en todos los sitios web.\n\nEl filtrado genérico extendido puede causar un mayor uso de recursos de la página web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista de sitios web para los cuales no se realizará ningún filtrado.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[solo nombres de dominio]\nejemplo.com\njuegos.ejemplo\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportamiento", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Recargar automáticamente la página al cambiar el modo de filtrado", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar el número de peticiones bloqueadas en el icono de la barra de herramientas", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Habilitar bloqueo estricto", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "La navegación a sitios potencialmente no deseados será bloqueada, y se te ofrecerá la opción de continuar.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Encontrar listas", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Página bloqueada", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite impidió la carga de la página:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "La página ha sido bloqueada como resultado de un filtro coincidente en {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "La página bloqueada quiere redirigir a otro sitio. Si eliges continuar, navegarás directamente a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sin parámetros", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Regresar", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Cerrar esta ventana", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "No me adviertas de nuevo sobre este sitio", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Continuar", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/et/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/et/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/et/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/et/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Katsetamisel õigustevaba sisublokeerija. Tõkesta koheselt reklaame, jälgijaid, kaevandajaid ja muud.", + "message": "Õigustevaba sisublokeerija. Blokeerib reklaamid, jälitajad, kaevandajad ja teised kohe pärast paigaldust.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Töölaud", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Hoiatus! Sul on salvestamata muudatusi", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Jää lehele", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Eira", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Sätted", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filtriloendid", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Minu filtrid", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Usaldatud saidid", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Teave", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privaatsusteatis", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Keela/luba uBO Lite sellel saidil", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Ava töölaud", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Sisene elemendi hävitusrežiimi", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Sisene elemendi valikurežiimi", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtreerimisrežiim", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Teavita selle veebilehe probleemist", + "message": "Teavita veast selle veebilehega", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klõpsa, et teha oma muudatused püsivaks.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klõpsa, et võtta muudatused tagasi.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Ava töölaud", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Rohkem", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klõpsa, et anda uBO Lite'il selle saidi jaoks laiendatud õigused.\nLaiendatud õigused võimaldavad efektiivsemat sisublokeerimist.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klõpsa, et eemaldada selle saidi laiendatud õigused", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Vähem", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Kuva ikoonil blokeeritud elementide arv", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Välimus", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Teema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Kohandatud rõhuvärv", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Keela lehe turvareeglite (CSP-de) aruanded", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Luba põhjalik filtreerimine kõikidel veebilehtedel", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite filtreerib teatud veebilehte põhjalikult vaid juhul, kui lubate selgesõnaliselt laiendi lubades muuta selle veebilehe andmeid. Selle sättega lubate filtreerida kõiki veebilehti põhjalikult ja samal ajal.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Vaikimisi", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regioonid, keeled", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Üks filter rea kohta. Filtriks võib olla tavaline hostinimi või EasyListiga ühilduv filter. Eesliitega ! algavaid ridu eiratakse.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Impordi ja lisa", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Ekspordi", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "minu-ublocki-staatilised-filtrid_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Usaldatud saitide direktiivid määravad, millistel veebilehtedel peaks uBlock Origin keelatud olema. Üks kirje rea kohta.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Impordi ja lisa", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Ekspordi", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "minu-ublocki-usaldatud-saidid_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Muudatuste logi", "description": "" @@ -211,17 +103,69 @@ "message": "Välised sõltuvused (ühilduvad GPLv3-ga):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Saada", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Kinnita muudatused", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Ennista", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Teavita filtri veast", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Teavita vigasest filtrist kindlate veebilehtedega uBlockOrigin/uAssets vigade andmebaasi kaudu. Nõuab GitHubi kontot.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Vabatahtlike koormamise vältimiseks samade teadetega veenduge, et keegi pole selle murega juba varem pöördunud.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Leidke sarnased aruanded", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Veebilehe aadress:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Veebileht...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Valige --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Näitab reklaame või reklaami kohatäitjaid", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Omab ülekatteid või teisi nuhtlusi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Tuvastab uBO Lite'i", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Omab privaatsusega seonduvaid probleeme", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Streigib, kui uBO Lite on kasutusel", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Avab soovimatuid kaarte või aknaid", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Põhjustab pahavara, õngitsuskirju", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Märgi veebileht kui „NSFW” („Ohtlik”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Loo uus aruanne", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Tere tulemast", @@ -267,6 +211,14 @@ "message": "Interneti põhjalikum filtreerimine ja enda valitud filtreerimisloenditega täpsem ning üldisem filtreerimine.\n\nVajab kõikide veebilehtede andmete lugemise ja muutmise üldist luba.\n\nÜldine ja põhjalikum filtreerimine võib koormata veebilehe ressursse tavapärasest rohkem.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Veebilehtede loend, kus filtreid ei kasutata.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[ainult hostinimed]\nnäide.com\nmängud.näide\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Käitumine", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Leht laadib ise uuesti filtreerimisrežiimi muutmisel", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Kuva tööriistariba ikoonil blokeeritud elementide arv", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Luba range tõkestamine", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Kahtlastele veebilehtedele suunamist takistatakse ja pakutakse võimalust jätkamiseks.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Otsi nimekirju", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Lehe sirvimine piiratud", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite ennetas järgmise veebilehe laadimist:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Lehe avamine keelati {{listname}} tõttu.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Keelatud leht üritab suunata teisele lehele. Jätkates nõustute avama {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "ilma näitajateta", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Tagasi", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Sulge see aken", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Edaspidi luba mul seda sirvida", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Jätka", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/eu/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/eu/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/eu/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/eu/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Probatako eta baimenik behar ez duen eduki-blokeatzailea. Iragarkiak, jarraitzeko tresnak, eta gehiago instalatzean bertan [...]", + "message": "Probatako eta baimenik behar ez duen eduki-blokeatzailea. Iragarkiak, jarraitzeko tresnak, eta gehiago instalatzean bertan.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite - Lan-lekua", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Oharra! Gorde gabeko aldaketak dituzu", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Bertan geratu", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ezikusi", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Ezarpenak", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Iragazki-zerrendak", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Nire iragazkiak", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Konfidantzazko webguneak", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Honi buruz", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Pribatutasun politika", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Desaktibatu/aktibatu uBO Lite webgune honentzat", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Ireki lan-lekua", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Sartu elementuak hiltzeko moduan", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Sartu elementuak aukeratzeko moduan", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Iragazteko modua", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Webgune honetan arazo baten berri eman", + "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klik egin zure aldaketak gordetzeko.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klik egin zure aldaketak atzera botatzeko.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Ireki lan-lekua", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Gehiago", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Egin klik webgune honetan uBO Literi baimen gehigarriak emateko.\nBaimen gehigarriek edukia era eraginkorragoan blokeatzea ahalbidetzen dute.\n", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Egin klik webgune honen baimen gehigarriak atzera botatzeko", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Gutxiago", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Bistaratu blokeatutako eskari kopurua ikonoan", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Itxura", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Gaia", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Azentu-kolore pertsonalizatua", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokeatu CSP txostenak", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Defektuzkoa", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Eskualdeak, hizkuntzak", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Iragazki bat lerroko. Iragazkia hostalari izen soila izan daiteke, edo EasyList-ekin bateragarria den irgazkia. !-rekin hasten diren lerroak ez dira kontuan hartuko.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Inportatu eta gehitu", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Esportatu", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Konfidantzazko webguneen ezarkepan, uBO Lite zein webgunean desaktibatu behar den zehazten du. Sarrera bat lerro bakoitzean.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Inportatu eta gehitu", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Esportatu", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Aldaketen erregistroa", "description": "" @@ -211,68 +103,180 @@ "message": "Kanpo menpekotasunak (GPLv3 lizentziarekin bateragarriak):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Bidali", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Aplikatu aldaketak", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Desegin", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Ongi etorri", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "uBO Lite instalatu berri duzu. Hemen, webgune guztietan erabiltzeko iragazteko modu lehenetsia hauta dezakezu.\n\nAurrez zehaztuta, Oinarrizkoa modua hautatzen da, ez baita baimenik behar datuak irakurtzeko eta aldatzeko. uBO Lite-n konfiantza baduzu, webgune guztietan datuak irakurtzeko eta aldatzeko baimen zabala eman dezakezu, webgune guztietarako iragazteko gaitasun aurreratuagoak gaitzeko, aldez aurretik zehaztuta.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Lehenetsitako iragazteko modua", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Iragazteko aurrez zehaztutako modua webgunearen arabera iragazteko moduen bidez deuseztatuko da. Edozein webgunetan iragazteko modua doitu dezake, webgune horretan hobekien funtzionatzen duen moduaren arabera. Modu bakoitzak bere abantailak eta desabantailak ditu.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "iragazkirik gabe\n", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "Oinarrizkoa", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "optimo", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "eginda", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Oinarrizko sarea iragaztea, hautatutako iragazkien zerrendetatik abiatuta.\n\nEz da baimenik behar webguneetan datuak irakurtzeko eta aldatzeko.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "\nSare aurreratuaren iragazketa gehi hautatutako iragazkien zerrenden berariazko hedapena.\n\nBaimen zabala behar da webgune guztietan datuak irakurri eta aldatzeko.\n", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "\nSare aurreratuko iragazketa gehi hedapen espezifiko eta generikoa hautatutako iragazkien zerrendetan.\n\nBaimen zabala behar da webgune guztietan datuak irakurri eta aldatzeko.\n\nIragazte hedatu generikoak web-orriaren baliabide gehiago erabiltzea eragin dezake.\n", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Filtrorik ezarriko ez zaien zerbitzarien izenak", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[zerbitzari izenak bakarrik]\nadibidea.eus\nexample.com\ngames.example", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "portaera or jokaera", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Orria automatikoki kargatuko da iragazteko modua aldatuko denean", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Tresna-barraren ikonoan blokeatutako eskaeren kopurua erakutsi", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fa/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fa/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fa/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fa/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "یک مسدود کننده محتوای بدون مجوز که بلافاصله پس از نصب، تبلیغات، ردیاب ها، ابزارهای استخراج و موارد دیگر را مسدود می کند.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,128 +15,52 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "تنظیمات", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "درباره", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "حریم خصوصی", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "باز کردن داشبورد", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "بیشتر", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "کمتر", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "پیش فرض", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "تبلیغات", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "حریم خصوصی", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -144,63 +68,31 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "سایر", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "مناطق، زبانها", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "گزارش دگرگونی", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "سورس کد (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "شرکت کنندگان", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "کد منبع", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "ترجمه‌ها", "description": "Link text to translations repo" }, "aboutFilterLists": { @@ -211,20 +103,72 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "درود", "description": "The header text for the welcome message section" }, "firstRunDescription": { @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fi/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fi/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fi/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fi/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Kokeellinen estotyökalu, joka ei tarvitse erityisiä käyttöoikeuksia. Estää välittömästi mm. mainokset, seurannat ja kryptolouhijat.", + "message": "Käyttöoikeudeton estotyökalu, joka estää välittömästi asennuksesta lähtien mm. mainokset, seurannat ja kryptolouhijat.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Hallintapaneeli", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Varoitus! Et ole tallentanut tekemiäsi muutoksia", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Älä poistu", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ohita", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Asetukset", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Suodatinlistat", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Omat suodattimet", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Luotetut sivustot", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Tietoja", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Tietosuojakäytäntö", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Poista uBO Lite käytöstä/ota se käyttöön tällä sivustolla", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Avaa hallintapaneeli", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Avaa elementtien piilotustila", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Avaa elementtien valintatila", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "suodatustila", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Ilmoita ongelmasta tällä verkkosivustolla", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Tee muutoksistasi pysyviä painamalla tästä.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kumoa muutoksesi painamalla tästä.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Avaa hallintapaneeli", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Enemmän", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Myönnä uBO Litelle laajemmat käyttöoikeudet tämän sivuston sisällön käsittelyyn painamalla tästä.\nLaajemmat oikeudet mahdollistavat tehokkaamman sisällöneston.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Peru tämän sivuston sisällön käsittelyyn myönnetyt laajemmat käyttöoikeudet painamalla tästä.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Vähemmän", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Näytä estettyjen pyyntöjen määrä", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Ulkoasu", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Teema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Oma korostusväri", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Estä CSP-raportit", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Käytä laajennettua suodatusta kaikilla verkkosivustoilla", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Liten laajennettu suodatus voi toimia sivustolla vasta, kun sille erikseen myönnetään sivustokohtainen tietojen muokkausoikeus. Asetuksen avulla nämä käyttöoikeudet voidaan myöntää kattamaan kaikki verkkosivustot.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Oletus", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Alueet, kielet", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Yksi suodatin riviä kohden. Suodatin voi olla pelkkä osoite tai EasyList-yhteensopiva suodatin. Rivit, joiden alussa on !, ohitetaan.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Tuo ja lisää...", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Vie tiedostoon...", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "omat-staattiset-ublock-suodattimet_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Luotettu sivusto -luokitukset määrittelevät millä sivuilla uBO Litea ei käytetä. Yksi osoite riviä kohden.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Tuo ja lisää...", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Vie tiedostoon...", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "omat-luotetut-ublock-sivustot_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Muutoshistoria", "description": "" @@ -211,17 +103,69 @@ "message": "Ulkopuoliset riippuvuudet (GPLv3-yhteensopiva):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Lähetä", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Käytä muutoksia", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Palauta", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Ilmoita suodatinongelmasta", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Ilmoita sivustokohtaisista suodatinongelmista uBlockOrigin/uAssets -ongelmaseurantaan. Vaatii GitHub-tilin.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Välttääksesi vapaaehtoisten kuormittamisen ylimääräisillä ilmoituksilla, tarkista ensin onko ongelmasta jo ilmoitettu.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Etsi samankaltaisia ilmoituksia", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Verkkosivun osoite:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Verkkosivu…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Valitse aihe --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Näyttää mainoksia tai niiden jäänteitä", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Sisältää peiteruutuja tai muita ärsykkeitä", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Tunnistaa uBO Liten", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Sisältää tietosuojaan liittyviä ongelmia", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Ei toimi oikein uBO Liten ollessa käytössä", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Avaa ei-toivottuja välilehtiä tai ikkunoita", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Johtaa badwareen ja tietojenkalasteluun", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Luokittele verkkosivu \"NSFW\"-tyyppiseksi (\"Not Safe For Work\", eli ns. työpaikalle sopimattomaksi)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Luo uusi ilmoitus", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Tervetuloa", @@ -256,17 +200,25 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Perustason verkkosuodatus valikoiduilla suodatinlistoilla.\n\nEi edellytä sivustojen tietojen luku- ja muokkausoikeutta.", + "message": "Perustason verkkosuodatus valituilla suodatinlistoilla.\n\nEi edellytä sivustojen tietojen luku- ja muokkausoikeutta.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Edistynyt verkkosuodatus sekä kohdistettu laajempi suodatus valikoiduilla suodatinlistoilla.\n\nEdellyttää kaikki sivustot kattavan, laajemman tietojen luku- ja muokkausoikeuden myöntöä.", + "message": "Edistynyt verkkosuodatus sekä kohdistettu laajempi suodatus valituilla suodatinlistoilla.\n\nEdellyttää kaikki sivustot kattavan, laajemman tietojen luku- ja muokkausoikeuden.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Edistynyt verkkosuodatus sekä kohdistettu ja yleinen laajempi suodatus valikoiduilla suodatinlistoilla.\n\nEdellyttää kaikki sivustot kattavan, laajemman tietojen luku- ja muokkausoikeuden myöntöä.\n\nYleinen laajempi suodatus saattaa kasvattaa sivukohtaista resurssien käyttöä.", + "message": "Edistynyt verkkosuodatus sekä kohdistettu ja yleinen laajempi suodatus valituilla suodatinlistoilla.\n\nEdellyttää kaikki sivustot kattavan, laajemman tietojen luku- ja muokkausoikeuden.\n\nYleinen laajempi suodatus saattaa kasvattaa sivukohtaista resurssien käyttöä.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Listaus osotteista, joita ei suodateta.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[vain isäntänimiä]\nesimerkki.fi\npelit.esimerkki\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Toiminta", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Lataa sivu suodatustilan vaihtuessa automaattisesti uudelleen", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Näytä estettyjen pyyntöjen määrä työkalupalkin kuvakkeessa", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Käytä tiukkaa estoa", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Potentiaalisesti ei-toivottujen sivustojen avaaminen estetään mahdollisuudella jatkaa.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Etsi listoja", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Sivu estettiin", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite on estänyt seuraavan sivun latauksen:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Sivu estettiin listalla {{listname}} olevan sännön perusteella.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Estetty sivu ohjautuu eri sivustolle. Jos jatkat, siirryt suoraan osoitteeseen {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "ilman parametreja", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Palaa takaisin", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Sulje tämä ikkuna", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Älä varoita minua tästä sivustosta uudelleen", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Jatka", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fil/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fil/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fil/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fil/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Eksperimental at permission-less na pangharang ng content. Hinaharang ang mga ad, tracker, miner, at higit pa pagka-install.", + "message": "Permission-less na tagaharang ng content. Hinaharang ang mga ad, tracker, miner, at higit pa pagka-install.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Babala! Hindi pa na-save ang ilan mong mga pagbabago.", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Manatili", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Balewalain", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Mga Setting", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listahan ng mga filter", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mga filter ko", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Mga pinagkakatiwalaang site", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Tungkol", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Patakaran sa pagkapribado", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Paandarin/patayin ang uBO Lite para sa site na ito", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Buksan ang dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Buksan ang pantanggal sa mga elemento", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Buksan ang tagapili sa mga elemento", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "moda nang pagsasala", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Mag-ulat ng isyu sa website na ito", + "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Pindutin upang gawing permanente ang mga pagbabago mo.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Pindutin upang kanselahin ang mga pagbabago mo.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Buksan ang dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Higit pa", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Pindutin upang magkaroon ng karagdagang pahintulot ang uBO Lite sa site na ito.\nMas epektibo ang pagharang sa content kung may mga karagdagang pahintulot.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Pindutin upang matanggal ang karagdagang pahintulot ng uBO Lite sa site na ito.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mas konti", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Ipakita ang bilang ng mga hinarang na hiling sa icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Hitsura", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Pinasadyang kulay ng accent", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Harangin ang mga ulat ng CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Paandarin ang karagdagang pagfi-filter sa lahat ng mga website", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "Mapapaandar lang ang karagdagang pagfi-filter sa isang website pagkatapos mong pahintulutan ang uBO Lite na baguhin ang datos ng nasabing website. Sa setting na ito, maaari mong bigyan ng pahintulot ang uBO Lite para sa karagdagang pagfi-filter sa lahat ng mga website sa isang pindutan lang.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Mga rehiyon o wika", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Isang filter kada linya. Pwedeng simpleng hostname o EasyList-compatible ang filter. Hindi papansinin ang mga linyang nagsisimula sa !.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "I-import at idagdag", - "description": "English: Import and append" - }, - "1pExport": { - "message": "I-export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "mga-static-filter-ko-sa-ublock_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Idinidikta nito kung sa aling mga webpage papatayin ang uBO Lite. Isang entry kada linya.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "I-import at idagdag", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "I-export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "mga-pinagkakatiwalaan-kong-site-sa-ublock_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Talaan ng mga pagbabago", "description": "" @@ -211,17 +103,69 @@ "message": "Mga panlabas na dependency (angkop sa GPLv3)", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Ipadala", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Ilapat ang mga pagbabago", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Kanselahin", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Mabuhay", @@ -267,6 +211,14 @@ "message": "Pinainam na network filtering, partikular at generikong karagdagang pagfi-filter mula sa mga napiling listahan ng mga filter.\n\nKailangan ang pahintulot na basahin at baguhin ang mga data ng lahat ng mga website.\n\nMaaaring mas malaki ang konsyumo sa resource dahil sa generikong karagdagang pagfi-filter.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Ugali", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Awtomatikong i-reload ang pahina kapag binago ang mode sa pagfi-filter", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fr/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fr/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fr/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fr/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Un bloqueur allégé, expérimental et sans permission requise. Bloque les publicités, pisteurs, mineurs et plus dès l'installation.", + "message": "Un bloqueur de contenu sans permission requise. Bloque les publicités, pisteurs, mineurs et plus dès l'installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Tableau de bord", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Attention, vous avez des changements non enregistrés !", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Rester", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorer", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Paramètres", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listes de filtres", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mes filtres", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Sites Web fiables", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "À propos", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Politique de confidentialité", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Désactiver/activer uBO Lite pour ce site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Ouvrir le Tableau de bord", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Entrer en mode Zappeur", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Entrer en mode Sélecteur", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Mode de filtrage", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Rapporter un problème sur ce site Web", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Cliquez pour rendre les changements opérés permanents.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Cliquez pour annuler les changements opérés.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Ouvrir le Tableau de bord", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Plus", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Cliquer pour accorder à uBO Lite des permissions étendues pour ce site.\nLes permissions étendues renforcent le blocage de contenu.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Cliquer pour révoquer les permissions étendues pour ce site.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Moins", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Afficher le nombre de requêtes bloquées sur l'icône", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Apparence", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Thème", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Couleur d'accentuation personnalisée", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Bloquer les rapports CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Activer le filtrage étendu sur tous les sites Web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite peut appliquer le filtrage étendu sur un site Web lorsque vous donnez à l'extension les permissions de modification des données sur ce site Web. Ce réglage vous permet d'accorder les permissions pour activer le filtrage étendu directement sur tous les sites Web.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Par défaut", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Domaines malveillants", + "message": "Protection contre les logiciels malveillants, sécurité", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Régions, langues", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Une règle par défaut. Une règle peut être un simple nom d'hôte, ou encore une règle compatible EasyList. Les lignes débutant par ! seront ignorées.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importer", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exporter", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "mes-filtres-statiques-ublock_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Les directives de site de confiance indiquent sur quelles pages Web uBO Lite devrait être désactivée. Une entrée par ligne.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importer", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exporter", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "mes-sites-fiables-ublock_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Journal des changements", "description": "" @@ -211,17 +103,69 @@ "message": "Dépendances externes (compatibles GPLv3) :", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Appliquer", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Appliquer", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Rétablir", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Rapporter un problème de filtre", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Rapportez des problèmes de filtre sur des sites Web spécifiques dans le uBlockOrigin/uAssets suivi des problèmes. Nécessite un compte GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Pour éviter d'encombrer les contributeurs avec des rapports en double, veuillez vérifier que le problème n'a pas déjà été rapporté.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Trouver des rapports similaires", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresse de la page Web :", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La page Web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Choisir un type --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "affiche des publicités ou des résidus de publicité", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "a une surcouche ou d'autres nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "détecte uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "a des problèmes de confidentialité", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "fonctionne mal quand uBO Lite est activé", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "ouvre des onglets ou fenêtres indésirables", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "conduit à/redirige vers des logiciels malveillants, du hameçonnage", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Marquer la page Web comme \"IPLT\" (Inapproprié Pour Le Travail)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Créer un nouveau rapport", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Bienvenue", @@ -267,6 +211,14 @@ "message": "Du filtrage réseau avancé plus du filtrage étendu générique et spécifique issu de listes de filtres choisies.\n\nNécessite des permissions étendues pour lire et modifier les données sur tous les sites Web.\n\nLe filtrage étendu générique peut augmenter l'utilisation des ressources pour la page Web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Liste des noms de domaine pour lesquels aucun filtrage n'aura lieu.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[noms de domaine uniquement]\nexemple.com\njeux.exemple\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportement", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Recharger automatiquement la page lors du changement de mode de filtrage", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Afficher le nombre de requêtes bloquées sur l'icône", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Activer le blocage strict", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "La navigation vers des sites potentiellement indésirables sera bloquée, et vous aurez la possibilité de continuer", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Trouver des listes", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page bloquée", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite a empêché le chargement de cette page :", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "La page a été bloquée à cause d'un filtre correspondant dans {{listname}}", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "La page bloquée souhaite rediriger vers un autre site. Si vous choisissez de continuer, vous vous rendrez à l'adresse suivante : {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sans paramètres", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Précédent", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Fermer cette fenêtre", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Ne plus me prévenir pour ce site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Continuer", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fy/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fy/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/fy/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/fy/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite – Dashboerd", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warskôging! Net bewarre wizigingen", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Bliuwe", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Negearje", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Ynstellingen", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filterlisten", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Myn filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Fertroude websites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Oer", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacybelied", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "uBO Lite yn-/útskeakelje foar dizze website", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Dashboerd iepenje", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Elemint­wisker­modus iepenje", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Elemint­kiezer­modus iepenje", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtermodus", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "In probleem op dizze website melde", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klik om jo wizigingen permanint te meitsjen.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klik om jo wizigingen ûngedien te meitsjen.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Dashboerd iepenje", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mear", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klik om uBO Lite wiidweidige machtigingen te ferlienen op dizze website.\nWiidweidige machtigingen soargje foar effektivere ynhâldsblokkearring.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klik om wiidweidige machtigingen op dizze website yn te lûken.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Minder", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "It tal blokkearre oanfragen op it piktogram toane", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Foarmjouwing", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Oanpaste aksintkleur", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP-rapporten blokkearje", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Wiidweidich filterjen op alle websites ynskeakelje", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite kin allinnich wiidweidich filterjen op in bepaalde website tapasse, neidat jo de útwreiding eksplisyt tastimmingen ferliend hawwe om gegevens op dy website oan te passen. Fia dizze ynstelling kinne jo tastimmingen foar wiidweidich filterjen oan alle websites tagelyk ferliene.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standert", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Gebieden, talen", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Ien filter per rigel. In filter kin in gewoane hostnamme, of in EasyList-kompatibel filter wêze. Rigels begjinnend mei ! wurde negearre.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Ymportearje en tafoegje…", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksportearje…", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "myn-ublock-statyske-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "De fertroude-website-ynstruksjes skriuwe foar op hokker websiden uBO Lite útskeakele wurde moat. Ien fermelding per rigel.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Ymportearje en tafoegje…", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksportearje…", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "myn-ublock-fertroude-websites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Wizigingslochboek", "description": "" @@ -211,17 +103,69 @@ "message": "Eksterne ôfhinklikheden (GPLv3-kompatibel):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Ferstjoere", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Wizigingen tapasse", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Ungedien meitsje", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "In filterprobleem melde", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Meld filterproblemen mei spesifike websites yn de uBlockOrigin/uAssets-probleemtracker. Fereasket in GitHub-account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Kontrolearje oft it probleem net earder meld is om foar te kommen dat frijwilligers mei dûbele meldingen belêst wurde.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Soartgelikense meldingen sykje", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adres fan de webside:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "De webside…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Meitsje in kar --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Toant advertinsjes of restanten", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Hat oerlapingen of oare ûngemakken", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detektearret uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Hat privacy-relatearre problemen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Wurket net as uBO Lite ynskeakele is", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Iepenet net-winske ljepblêden of finsters", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Liedt ta badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "De webside labelje as ‘NSFW’ (‘Not Safe For Work’)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Nije melding meitsje", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Wolkom", @@ -267,6 +211,14 @@ "message": "Avansearre netwurkfiltering plus spesifike en algemiene wiidweidige filtering fan selektearre filterlisten út.\n\nFereasket brede tastimming foar it lêzen en wizigjen fan gegevens op alle websites.\n\nAlgemiene wiidweidige filtering kin in heger gebrûk fan websideboarnen feroarsaakje.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List fan hostnammen wêrfoar gjin filtering plakfynt.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[allinnich hostnammen]\nexample.com\ngames.example\n…", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Gedrach", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Side automatysk fernije by wizigjen fan filtermodus", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "It tal blokkearre oanfragen op it arkbalkepiktogram toane", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Strange blokkearring ynskeakelje", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigaasje nei potinsjeel net-winske websites wurdt blokkearre, en jo krije de opsje om troch te gean.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Listen sykje", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Side blokkearre", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite hat it laden fan de folgjende side opkeard:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "De side is blokkearre fanwegen in oerienkommend filter yn {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "De blokkearre side wol jo omliede nei in oare website. As jo trochgean, navigearje jo streekrjocht nei: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sûnder parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Tebek", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Dit finster slute", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "My net mear warskôgje oer dizze website", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Tochgean", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ga/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ga/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ga/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ga/messages.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,278 +0,0 @@ -{ - "extName": { - "message": "uBlock Origin Lite", - "description": "extension name." - }, - "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", - "description": "this will be in the Chrome web store: must be 132 characters or less" - }, - "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", - "description": "Appears aside each filter list in the _3rd-party filters_ pane" - }, - "dashboardName": { - "message": "uBO Lite — Dashboard", - "description": "English: uBO Lite — Dashboard" - }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, - "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, - "aboutPageName": { - "message": "About", - "description": "appears as tab name in dashboard" - }, - "aboutPrivacyPolicy": { - "message": "Privacy policy", - "description": "Link to privacy policy on GitHub (English)" - }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" - }, - "popupTipReport": { - "message": "Report an issue on this website", - "description": "Tooltip used for the 'chat' icon in the panel" - }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." - }, - "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, - "popupLessButton": { - "message": "Less", - "description": "Label to be used to hide popup panel sections" - }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupDefault": { - "message": "Default", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupAds": { - "message": "Ads", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupPrivacy": { - "message": "Privacy", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupMalware": { - "message": "Malware domains", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupAnnoyances": { - "message": "Annoyances", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupMisc": { - "message": "Miscellaneous", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "3pGroupRegions": { - "message": "Regions, languages", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, - "aboutChangelog": { - "message": "Changelog", - "description": "" - }, - "aboutCode": { - "message": "Source code (GPLv3)", - "description": "English: Source code (GPLv3)" - }, - "aboutContributors": { - "message": "Contributors", - "description": "English: Contributors" - }, - "aboutSourceCode": { - "message": "Source code", - "description": "Link text to source code repo" - }, - "aboutTranslations": { - "message": "Translations", - "description": "Link text to translations repo" - }, - "aboutFilterLists": { - "message": "Filter lists", - "description": "Link text to uBO's own filter lists repo" - }, - "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", - "description": "Shown in the About pane" - }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" - }, - "firstRunSectionLabel": { - "message": "Welcome", - "description": "The header text for the welcome message section" - }, - "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", - "description": "Descriptive text shown at first install time only " - }, - "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", - "description": "The header text for the default filtering mode section" - }, - "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", - "description": "This describes the default filtering mode setting" - }, - "filteringMode0Name": { - "message": "no filtering", - "description": "Name of blocking mode 0" - }, - "filteringMode1Name": { - "message": "basic", - "description": "Name of blocking mode 1" - }, - "filteringMode2Name": { - "message": "optimal", - "description": "Name of blocking mode 2" - }, - "filteringMode3Name": { - "message": "complete", - "description": "Name of blocking mode 3" - }, - "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", - "description": "This describes the 'basic' filtering mode" - }, - "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", - "description": "This describes the 'optimal' filtering mode" - }, - "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", - "description": "This describes the 'complete' filtering mode" - }, - "behaviorSectionLabel": { - "message": "Behavior", - "description": "The header text for the 'Behavior' section" - }, - "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", - "description": "Label for a checkbox in the options page" - } -} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/gl/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/gl/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/gl/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/gl/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,275 +4,279 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "Un bloqueador de contido con menos permisos. Bloquea anuncios, rastreadores, criptomineiros e mais despois da instalación.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "{{ruleCount}} regras, convertidas dende {{filterCount}} filtros de redes", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Panel de control", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "Axustes", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "Acerca de", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "Política de privacidade", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "modo de filtrado", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Report an issue on this website", + "message": "Informar dun problema nesta web", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Abrir o panel", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "Máis", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "Menos", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "Por defecto", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "Anuncios", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "Privacidade", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Molestias", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "Varios", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "Rexións, linguaxes", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Rexistro de cambios", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "Código fonte (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Contribúen", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Código fonte", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Traducións", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "Listas de filtrado", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "Dependencias externas (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Informar dun problema co filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Informa de problemas cos filtros en webs concretas no seguimento de problemas en uBlockOrigin/uAssets. Require unha conta GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar a sobrecarga de traballo para as persoas voluntarias con duplicados dos problemas, comproba que aínda non se informou acerca do problema.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Atopar denuncias parecidas", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Enderezo da páxina web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A páxina web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Escolle unha opción --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra publicidade ou restos dela", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ten capas sobreimpostas ou elementos molestos", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ten problemas relacionados coa privacidade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funciona mal se uBO Lite está activado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre xanelas ou pestanas non solicitadas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leva a software malicioso, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiqueta a páxina como «NSFW» (Non axeitada no traballo)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Crear nova denuncia", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Benvida", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Acabas de instalar uBO Lite. Aquí podes escoller o modo de filtrado para usar en todas as páxinas web.\n\nPor defecto, o modo Básico está seleccionado porque non require o permiso de lectura ou modificar datos. Se confías en uBO Lite, podes darlle máis permisos para ler e modificar os datos de todos os sitios web para poder realizar por defecto un filtrado máis preciso en todas as páxinas web.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Modo de filtrado por defecto", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "O modo de filtrado por defecto vaise sobrescribir usando os filtros propios para cada web. Podes axustar o modo de filtrado para calquera web acorde ás túas preferencias para esa web. Cada modo ten as súas vantaxes e inconvintes.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "sen filtrar", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "básico", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "óptimo", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "completo", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Filtrado básico na rede usando listas de filtrado seleccionadas.\n\nNon require permiso de lectura ou modificar datos do sitio web.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Filtrado avanzado da rede e filtrado extendido específico usando listas de filtrado seleccionadas.\n\nRequire permisos máis amplos para ler e modificar datos en todas as webs.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Filtro avanzado na rede e filtrado extenso usando listas xenéricas e específicas para as webs.\n\nRequire permisos máis amplos para ler e modificar datos en todas as webs.\n\nO filtrado extendido xenérico podería facer que aumentasen os recursos que usa a páxina web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista de nomes de host para os que non se fará filtrado", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[só nomes de servidor]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Comportamento", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Recargar automáticamente a páxina a cambiar o modo de filtrado", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar na icona da barra o número de peticións bloqueadas", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Activar bloqueo estrito", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Vaise bloquear a navegación en webs potencialmente non desexables, e ofrecerase a opción de bloquealas.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Atopa listas", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Páxina bloqueada", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite evitou que a seguinte páxina se cargase:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Bloqueouse a páxina porque concorda cun filtro de {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "A páxina bloqueada quere redirixir a outra web. Se elixes continuar vas ir directamente a: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sen parámetros", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Volver", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Pechar esta xanela", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Non volver avisarme sobre esta web", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceder", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/gu/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/gu/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/gu/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/gu/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/he/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/he/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/he/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/he/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "חסם תוכן ניסיוני נטול הרשאות. מיד עם ההתקנה החסם יחסום פרסומות, עוקבים, כורים ועוד.", + "message": "חוסם תוכן ניסיוני, נטול הרשאות. חוסם מודעות, עוקבים, כורים, ועוד מיד עם ההתקנה.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "לוח־מחוונים – uBO Lite", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "אזהרה! קיימים שינויים שטרם נשמרו", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "להישאר", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "להתעלם", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "הגדרות", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "רשימות סינון", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "מסננים שלי", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "אתרים מהימנים", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "על אודות", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "מדיניות פרטיות", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "איפשור/השבתת uBO Lite באתר זה", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "פתיחת לוח־המחוונים", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "מצב מסנן", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Report an issue on this website", + "message": "דווח על בעיה באתר זה", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "פתיחת לוח־המחוונים", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "עוד", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "פחות", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "מראה", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "ערכת נושא", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "חסימת דוחות CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "ברירת מחדל", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "תחומי תוכנות זדוניות", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -148,41 +72,9 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "אזורים, שפות", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "ייצוא", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "ייצוא", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "יומן שינויים", "description": "" @@ -208,39 +100,91 @@ "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "תלויות חיצוניות (תואם GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "שיגור", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "החזרה לאחור", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "דיווח על בעיית מסנן", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "לדיווח על בעיות באתרים ספציפים יש לפתוח דיווח חדש במעקב הדיווחים של uBlockOrigin/uAssets. נדרש חשבון ב GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "כדי להימנע מהכבדה על מתנדבים בדווחים כפולים, נא לודא שבעיה דומה טרם דווחה.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "מצאו דיווחים דומים", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "כתובת דף האינטרנט:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "דף האינטרנט…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- בחר קטגוריה --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "הצגת פרסומות או שאריות שלהן", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "קיים ריבוד או מטרד אחר", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "מזהה את uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "בעיות הקשורות לפרטיות", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "כשל תפעולי כאשר uBO Lite פעיל", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "נפתחים לשוניות או חלונות לא רצויים", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "מוביל לנוזקה, פישינג", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "תייג את הדף כ \"NSFW\" (“Not Safe For Work” - לא בטוח למקום העבודה)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "צור דיווח חדש", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "ברוך בואך", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "התקנת uBO Lite הסתיימה זה עתה. ניתן לבחור כאן את אופן סינון ברירת המחדל בכל אתרי הרשת.\n\nכברירת מחדל, ייבחר אופן סינון בסיסי מאחר והוא אינו דורש הרשאות קריאה ושינוי נתונים. 'סומכים על uBO Lite?' אם כן, ניתן להעניק ל־uBO Lite הרשאות נרחבות לכתיבה ושינוי נתונים בכלול אתרי הרשת על מנת לאפשר יכולות סינון מתקדמות יותר כבררת מחדל.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "מצב סינון ברירת מחדל", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "אופן סינון ברירת המחדל יעקף על ידי אופני סינון יעודיים לכל אתר. ניתן להתאים את אופן הסינון בכל אתר נתון, לאופן הסינון המיטבי באותו אחר. לכול אופן סינון, יתרונות וחסרונות משלו.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "ללא סינון", "description": "Name of blocking mode 0" }, "filteringMode1Name": { @@ -248,31 +192,91 @@ "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "מיטבי", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "מלא", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "סינון רשת בסיסי מרשימות סינון נבחרות.\n\nאינו מצריך הרשאת קריאה ושינוי נתונים באתרי רשת.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "סינון רשת מתקדם פלוס, וסינון נרחב ייחודי מרשימות סינון נבחרות.\n\n מצריך הרשאה לקריאה ושינוי נתונים באתרי רשת.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "סינון רשת מתקדם וסינון נרחב ייחודי מרשימות סינון נבחרות.\n\n מצריך הרשאות נרחבות לקריאה ושינוי נתונים בכל אתרי הרשת.\n\nסינון כללי מורחב עלול לגרום לצריכת משאבי רשת מוגברת.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "רשימה של שמות אתרים שלא יתבצע עליהם סינון", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[שמות אתרים בלבד]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "התנהגות", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { "message": "טעינת עמוד באופן אוטומטי עם שינוי מצב סינון", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "הצגת מספר הבקשות החסומות על הסמל", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "הפעלת חסימה קפדנית", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "ניווט אפשרי לאתרים לא רצויים יחסם ותהיה אפשרות להחליט להמשיך.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "חיפוש רשימות", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "הדף נחסם", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite מנע טעינה של הדפים הבאים:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "הדף נחסם בגלל התאמה למסנן מהרשימה {{listname}}", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "הדף החסום רוצה להעביר אותך לאתר אחר. בחירה להמשיך תעבור ישירות ל {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "ללא פרמטרים", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "חזור", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "סגור חלון זה", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "אל תתריע לי שוב על אתר זה", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "המשך", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hi/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hi/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hi/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hi/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,114 +15,38 @@ "message": "uBO Lite — डैशबोर्ड", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "चेतावनी! आपके कुछ परिवर्तनों को सहेजना अभी बाकी है", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "रुकें", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "अनदेखा करें", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "सेटिंग्स", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "फिल्टर सूची", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "मेरे फ़िल्टर्स", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "विश्वस्त साइटें", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { - "message": "परिचय", + "message": "जानकारी", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { "message": "गोपनीयता नीति", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "इस साइट के लिए uBO Lite को अक्षम/सक्षम करें", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "डैशबोर्ड खोलें", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "चीजें मिटाने के मोड में जाएं", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "चीजें चुनने के मोड में जाएं", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "फ़िल्टरिंग मोड", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "इस वेबसाइट पर किसी समस्या को रिपोर्ट करें", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "अपने परिवर्तनों को स्थायी बनाने के लिए क्लिक करें.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "आपके परिवर्तनों को पूर्ववत के लिए क्लिक करें", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "डैशबोर्ड खोलें", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "अधिक", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "इस साइट पर uBO Lite को विस्तारित अनुमति देने के लिए क्लिक करें.\nविस्तारित अनुमतियाँ अधिक प्रभावी सामग्री अवरोधन की अनुमति देती हैं.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "इस साइट पर विस्तारित अनुमतियों को निरस्त करने के लिए क्लिक करें", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "कम", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "ब्लॉक कि गयी चीज़ों की गिनती आइकॉन पर दिखाएं", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "रंगरूप", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "थीम", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "निर्मित रंग शैली", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": " CSP रिपोर्टों को ब्लॉक करें", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "सभी वेबसाइटों पर विस्तारित फ़िल्टरिंग सक्षम करें", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite किसी वेबसाइट पर विस्तारित फ़िल्टरिंग तभी लागू कर सकता है जब आप उस वेबसाइट पर डेटा को संशोधित करने के लिए स्पष्ट रूप से विस्तारित अनुमतियाँ प्रदान करते हैं. यह सेटिंग आपको सभी वेबसाइटों को एक साथ विस्तारित फ़िल्टरिंग की अनुमति देने की अनुमति देती है.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "डिफॉल्ट", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,44 +75,12 @@ "message": "क्षेत्र, भाषाएँ", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "प्रति पंक्ति एक फ़िल्टर. कोई फ़िल्टर एक सादा होस्टनाम, या एक EasyList-संगत फ़िल्टर हो सकता है। ! से पहले लगी पंक्तियों को अनदेखा कर दिया जाएगा.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "आयात करके जोड़ें", - "description": "English: Import and append" - }, - "1pExport": { - "message": "निर्यात", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "विश्वसनीय साइट निर्देश तय करते हैं कि कौन से वेब पेज पर uBO Lite को अक्षम किया जाना चाहिए. प्रति पंक्ति एक प्रविष्टि.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "आयात करके जोड़ें", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "निर्यात", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "परिवर्तन लॉग", + "message": "परिवर्तन पत्र", "description": "" }, "aboutCode": { - "message": "सोर्स कोड {GPLv3}", + "message": "सोर्स कोड (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { @@ -211,17 +103,69 @@ "message": "बाहरी निर्भरता (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "सबमिट करें", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "परिवर्तन लागू करें", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "पूर्ववत", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "स्वागत", @@ -267,6 +211,14 @@ "message": "चयनित फ़िल्टर सूचियों में से उन्नत नेटवर्क फ़िल्टरिंग के साथ विशिष्ट विस्तारित फ़िल्टरिंग.\n\nसभी वेबसाइटों पर डेटा पढ़ने और बदलने के लिए व्यापक अनुमति की आवश्यकता है.\n\nसामान्य विस्तारित फ़िल्टरिंग के कारण वेबपृष्ठ संसाधनों का अधिक उपयोग हो सकता है.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "होस्टनामों की सूची जिनके लिए कोई फ़िल्टरिंग नहीं होगी", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[केवल होस्ट का नाम]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "व्यवहार", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "फ़िल्टरिंग मोड बदलते समय स्वचालित रूप से पृष्ठ पुनः लोड करें", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "टूलबार आइकन पर अवरुद्ध अनुरोधों की संख्या दिखाएं", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "पृष्ठ को {{listname}} में मेल खाते फ़िल्टर के कारण अवरुद्ध किया गया था.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "ब्लॉक किया गया पेज किसी दूसरी साइट पर रीडायरेक्ट करना चाहता है. अगर आप आगे बढ़ना चुनते हैं, तो आप सीधे इस पर नेविगेट करें: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hr/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hr/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hr/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hr/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Eksperimentalni bloker sadržaja bez dopuštenja. Blokira oglase, oglasne pratitelje, kripto \"rudare\" i ostalo nakon instalacije.", + "message": "Bloker sadržaja bez dopuštenja. Blokira oglase, oglasne pratitelje, kripto \"rudare\" i ostalo odmah nakon instalacije.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — nadzorna ploča", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Upozorenje! Niste spremili promjene", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Ostani", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignoriraj", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Postavke", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Liste filtera", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Moji filteri", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Pouzdane stranice", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "O aplikaciji", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Pravila privatnosti", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Omogući/onemogući uBO Lite za ovu stranicu", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Otvori nadzornu ploču", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Uđite u način rada uklanjanja elementa", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Uđite u način rada odabiranja elementa", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Način filtriranja", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Prijavite problem na ovoj web stranici", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Kliknite kako bi vaše promjene postale trajne.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kliknite za poništavanje promjena.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Otvori nadzornu ploču", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Više", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Kliknite da biste dodijelili uBO Lite proširena dopuštenja na ovoj stranici.\nProširene dozvole omogućuju učinkovitije blokiranje sadržaja.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Kliknite za opoziv proširenih dopuštenja na ovoj stranici", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Manje", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Pokaži broj blokiranih zahtjeva na ikoni", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Izgled", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Prilagođena glavna boja", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokiraj CSP izvješća", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Omogući prošireno filtriranje na svim web stranicama", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite može primijeniti prošireno filtriranje na određenoj web stranici samo nakon što izričito dodijelite dopuštenja proširenju za izmjenu podataka na toj web stranici. Ova vam postavka omogućuje dodjeljivanje dopuštenja za prošireno filtriranje svim web stranicama odjednom.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Zadano", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regije, jezici", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Jedan filtar po retku. Filtar može biti običan hostname ili filter kompatibilan sa EasyList-om. Linije sa prefiksom ! zanemarit će se.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Uvesti i dodati", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Izvoz", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Smjernice pouzdanih stranica određuju na kojim web stranicama uBO Lite treba biti onemogućen. Jedan unos po retku.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Uvesti i dodati", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Izvoz", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Popis promjena", "description": "" @@ -211,17 +103,69 @@ "message": "Vanjski korišteni programi (GPLv3-kompatiblini):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Pošalji", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Primijeni promjene", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Poništi", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Prijavi problem sa filterom", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Prijavite probleme s filtrima s određenim web-lokacijama uBlockOrigin/uAssets alatu za praćenje problema. Potreban je GitHub račun.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Kako biste izbjegli opterećivanje volontera duplim prijavama, provjerite nije li problem već prijavljen.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Nađi slične prijave", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa web stranice:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Web stranica...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Odaberite unos --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Prikazuje oglase ili ostatke oglasa", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ima overlaye ili druge smetnje", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Otkriva uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ima problema u vezi s privatnošću", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Neispravno kada je uBO Lite omogućen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otvara neželjene kartice ili prozore", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Vodi do zloćudnog softvera, krađe identiteta", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označite web stranicu kao “NSFW” (“Nije sigurno za rad”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Napravi novu prijavu", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Dobrodošli", @@ -267,6 +211,14 @@ "message": "Napredno mrežno filtriranje plus specifično i generičko prošireno filtriranje s odabranih popisa filtera.\n\nZahtijeva široko dopuštenje za čitanje i promjenu podataka na svim web stranicama.\n\nGeneričko prošireno filtriranje može uzrokovati veće korištenje resursa web stranice.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Popis naziva hostova za koje se neće izvršiti filtriranje.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[samo nazivi hostova]\nexample.com\ngames.example", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Ponašanje", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatski ponovno učitaj stranicu pri promjeni načina filtriranja", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Prikaži broj blokiranih zahtjeva na ikoni alatne trake", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Omogući strogo blokiranje", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigacija do potencijalno nepoželjnih stranica bit će blokirana i bit će vam ponuđena opcija za nastavak.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Pronađi liste", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Stranica blokirana", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite je spriječio učitavanje sljedeće stranice:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Stranica je blokirana zbog odgovarajućeg filtra u {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Blokirana stranica želi preusmjeriti na drugu stranicu. Ako odlučite nastaviti, otići ćete izravno na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "bez parametara", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Idi natrag", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Zatvori ovaj prozor", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Ne upozoravaj me više za ovu web stranicu", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Nastavi", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hu/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hu/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hu/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hu/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,275 +4,279 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "Engedélyt nem igénylő tartalomblokkoló. A telepítés után azonnal blokkolja a hirdetéseket, nyomkövetőket, bányászokat és egyebeket.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "{{ruleCount}} szabály, {{filterCount}} hálózati szűrőből átalakítva", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Vezérlőpult", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "Beállítások", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "Névjegy", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "Adatvédelmi irányelvek", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "szűrési mód", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Report an issue on this website", + "message": "Oldalon lévő probléma jelentése", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Vezérlőpult megnyitása", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Kattintson az uBO Lite kiterjesztett hozzáférés engedélyezéséhez ezen az oldalon.\nA kiterjesztett hozzáféréssel a szűrés hatékonysága növekszik.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Kattintson a kiterjesztett hozzáférés visszavonásához ezen az oldalon.", + "message": "Több", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "Kevesebb", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "Alapértelmezett", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "Hirdetések", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "Adatvédelem", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware domainek", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Bosszúságok", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "Egyéb", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "Régiók, nyelvek", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Változások listája", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "Forráskód (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Közreműködők", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Forráskód", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Fordítások", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "Szűrőlisták", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "Külső függőségek (GPLv3-kompatibilis):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Szűrőhiba jelentése", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Az adott webhelyeket érintő szűrőhibákat a uBlockOrigin/uAssets hibakövetőjében jelentse. Ehhez GitHub-fiók szükséges.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Az önkéntesek terhelésének csökkentése érdekében győződjön meg róla, hogy a hiba még nem lett jelentve.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Hasonló jelentések keresése", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "A weboldal címe:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A weboldal…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Válasszon egy bejegyzést --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Hirdetéseket vagy azok maradványait jeleníti meg", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Átfedő vagy egyéb zavaró elemeket tartalmaz", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Észleli az uBO Lite-ot", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Adatvédelmi problémákat vet fel", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Hibásan működik, ha a uBO Lite be van kapcsolva", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Kéretlen lapokat vagy ablakokat nyit meg", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Kártékony programokhoz, adathalászathoz vezet", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "A weboldal megjelölése „NSFW”-ként („Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Új jelentés létrehozása", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Üdvözöljük", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Most telepítette a uBO Lite-ot. Itt választhatja ki az összes weboldalon használandó alapértelmezett szűrési módot.\n\nAlapértelmezés szerint az Alapvetú mód van kiválasztva, mert nem igényel engedélyt az adatok olvasásához és módosításához. Ha megbízik az uBO Lite-ban, széles körű engedélyt adhat neki az adatok olvasására és módosítására az összes webhelyen, hogy alapértelmezés szerint fejlettebb szűrési lehetőségeket tegyen lehetővé minden webhelyen.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Alapértelmezett szűrési mód", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Az alapértelmezett szűrési módot a webhelyenkénti szűrési módok felülírják. Bármely webhelyen beállíthatja a szűrési módot aszerint, hogy melyik mód működik a legjobban az adott webhelyen. Mindegyik módnak megvannak a maga előnyei és hátrányai.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "nincs szűrés", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "alapvető", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "optimális", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "teljes", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Alapvető hálózati szűrés a kiválasztott szűrőlistákból.\n\nNem igényel engedélyt a webhelyeken található adatok olvasásához és módosításához.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Speciális hálózati szűrés plusz speciális kiterjesztett szűrés a kiválasztott szűrőlistákból.\n\nSzéles körű engedély szükséges az adatok olvasásához és módosításához az összes webhelyen.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Speciális hálózati szűrés, valamint speciális és általános kiterjesztett szűrés a kiválasztott szűrőlistákból.\n\nSzéles körű engedély szükséges az adatok olvasásához és módosításához az összes webhelyen.\n\nAz általános kiterjesztett szűrés nagyobb weboldal-erőforrás-felhasználást eredményezhet.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Azon gépnevek listája, amelyek esetében nem történik szűrés.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[csak kiszolgálónevek]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Viselkedés", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Az oldal automatikus újratöltése a szűrési mód megváltoztatásakor", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Blokkolt kérések számának megjelenítése az eszköztárikonon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Szigorú blokkolás engedélyezése", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Az esetleges nem kívánatos webhelyekre való navigáció blokkolva lesz, és rákérdez arra, hogy folytatja-e.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Listák keresése", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Oldal blokkolva", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "A uBO Lite megakadályozta a következő oldal betöltését:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Az oldal a(z) {{listname}} listában lévő illeszkedő szűrő miatt blokkolva lett.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "A blokkolt oldal egy másik webhelyre akarja átirányítani. Ha a folytatást választja, akkor közvetlenül ide fog navigálni: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "paraméterek nélkül", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Vissza", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Ablak bezárása", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Ne figyelmeztessen többet erről az oldalról", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Folytatás", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hy/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hy/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/hy/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/hy/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,275 +4,279 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "Փբովանդակության արգելափակիչ, որը չի պահանջում թույլտվություններ։ Արգելափակում է ազդերը, հետագծիչները, մայներները և շատ ավելին։", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "{{ruleCount}} կանոն, որոնք փոխարկված են {{filterCount}} ցանցային զտիչներից", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Կառավահան", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "Կարգավորումներ", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "Ընդլայնման մասին", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "Գաղտնիության քաղաքականություն", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "զտման ռեժիմ", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Բացել կառավահանը", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "Ավելին", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "Պակաս", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "Լռելյայն", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "Գովազդ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "Գաղտնիություն", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Վնասակար տիրույթներ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Ջղայնացնող տարրեր", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "Տարբեր", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "Տարածաշրջաններ, լեզուներ", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Փոփոխությունների մատյան", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "Աղբյուրի կոդ (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Մասնակիցներ", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Աղբյուրի կոդ", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Թարգմանություն", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "Զտիչների ցանկեր", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "Արտաքին կախվածություններ (GPLv3-համատեղելի)՝", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Բարի գալուստ", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Դուք հենց նոր տեղադրեցիք uBO Lite-ը։ Այստեղ Դուք կարող եք զտման ստանդարտ ռեժիմ ընտրել բոլոր կայքերի համար։\n\nԼռելյայն կերպով ընտրված է հիմնական ռեժիմը, քանի որ այն չի պահանջում տվյալների ընթերցման և փոփոխման թույլտվություն։ Եթե վստահում եք uBO Lite-ին, կարող եք տալ դրան բոլոր կայքերում տվյալների ընթերցման և փոփոխման լայն իրավունքներ՝ բոլոր կայքերի համար զտման ավելի առաջադեմ հնարավորությունները լռելյայն կերպով միացնելու համար։", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Զտման լռելյայն ռեժիմ", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Զտման լռելյայն ռեժիմը վերասահմանվում է յուրաքանչյուր կայքի զտման ռեժիմներով։ Դուք կարող եք ջոկել ամենաարդյունավետ զտման ռեժիմը ցանկացած կայքում։ Յուրաքանչյուր ռեժիմ ունի իր առավելություններն ու թերությունները։", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "առանց զտման", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "հիմնական", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "գերադասելի", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "ամբողջական", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Ցանցային հիմնական զտում ըստ ընտրված զտիչների ցուցակների։\n\nԿայքերում տվյալները կարդալու և փոփոխելու թույլտվություն չի պահանջում։", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Ընդլայնված ցանցային զտում՝ ընտրված զտիչների ցուցակների համաձայն հատուկ զտման հետ միասին։\n\nՊահանջում է տվյալները բոլոր կայքերում կարդալու և փոփոխելու թույլտվություն։", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Ընդլայնված ցանցային զտում, ինչպես նաև հատուկ և առաջադեմ ընդհանուր զտում ընտրված զտիչների ցանկերի համաձայն։\n\nՊահանջում է բոլոր կայքերում տվյալները կարդալու և փոփոխելու թույլտվություն։\n\nԱռաջադեմ ընդհանուր զտումը կարող է առաջացնել վեբ էջի կողմից ռեսուրսների սպառման ավելացում:", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Հյուրերի անունների ցանկ, որոնց համար զտում չի իրականացվի", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Վարք", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Զտման ռեժիմը փոխելիս ինքնաշխատորեն վերաբեռնել էջը", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Ցուցադրել արգելափակված հայտերի քանակը գործիքների վահանակին", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/id/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/id/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/id/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/id/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — Dasbor", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Peringatan! Anda memiliki ubahan yang belum disimpan", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Tinggal", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Abaikan", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Pengaturan", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Daftar Filter", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Filter Saya", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Situs Terpercaya", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Tentang", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Kebijakan privasi", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Aktif/nonaktifkan uBO Lite untuk situs ini", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Buka dasbor", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Memasuki mode penghapus elemen", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Memasuki mode pemilihan elemen", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "mode filter", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Laporkan masalah situs web ini", + "message": "Laporkan masalah pada situs ini", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klik untuk membuat ubahan Anda permanen.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klik untuk membatalkan ubahan Anda.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Buka dasbor", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Lainnya", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klik untuk memberi uBO Lite izin tambahan pada situs ini.\nIzin tambahan memungkinkan pemblokiran konten yang lebih efektif.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klik untuk membatalkan izin tambahan pada situs ini", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Lebih sedikit", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Tampilkan jumlah permintaan yang diblokir pada ikon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Tampilan", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Warna aksen khusus", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokir laporan CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Aktifkan filter yang diperluas pada semua situs web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite dapat menerapkan filter yang diperluas pada situs web tertentu hanya setelah Anda secara eksplisit memberi izin ekstensi untuk memodifikasi data pada situs tersebut. Pengaturan ini memungkinkan Anda memberi izin filter yang diperluas ke semua situs web sekaligus.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Bawaan", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Wilayah, bahasa", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Satu filter per baris. Filter dapat berupa nama hos, atau filter yang kompatibel dengan EasyList. Baris yang diawali dengan ! akan diabaikan.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Impor dan tambahkan", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Ekspor", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Arahan situs terpercaya menentukan pada halaman web mana uBO Lite harus dinonaktifkan. Satu entri per baris.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Impor dan tambahkan", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Ekspor", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Catatan perubahan", "description": "" @@ -211,17 +103,69 @@ "message": "Dependensi eksternal (kompatibel GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Kirim", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Terapkan perubahan", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Urungkan", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Laporkan masalah filter", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Laporkan masalah filter situs web tertentu ke pelacak masalah uBlockOrigin/uAssets. Membutuhkan akun GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Untuk menghindari membebani sukarelawan dengan laporan duplikat, harap verifikasi bahwa masalah tersebut belum dilaporkan.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Temukan laporan serupa", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Alamat laman web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Laman web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pilih entri --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Menampilkan iklan atau sejenisnya", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Memiliki overlay atau gangguan lainnya", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Mendeteksi uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Memiliki masalah terkait privasi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfungsi saat uBO Lite diaktifkan", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Membuka tab atau jendela yang tidak diinginkan", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Mengarah ke perangkat lunak jahat, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label laman web sebagai “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Buat laporan baru", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Selamat datang", @@ -267,6 +211,14 @@ "message": "Filter jaringan lanjutan ditambah filter spesifik dan umum yang diperluas dari daftar filter yang dipilih.\n\nMembutuhkan banyak izin untuk membaca dan mengubah data pada semua situs web.\n\nFilter umum yang diperluas dapat menyebabkan penggunan sumber daya situs web menjadi lebih tinggi.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Daftar nama host yang tidak akan difilter.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hanya nama host]\ncontoh.com\npermainan.contoh\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Perilaku", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Otomatis memuat ulang halaman web saat mengubah mode filter", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Tampilkan jumlah permintaan yang diblokir pada ikon toolbar", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Aktifkan pemblokiran ketat", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigasi ke situs yang mungkin tidak diinginkan akan diblokir, dan Anda akan ditawari opsi untuk melanjutkan.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Temukan daftar", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Halaman diblokir", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite telah mencegah pemuatan halaman berikut:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Halaman diblokir karena cocok dengan filter yang ada di dalam {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Halaman yang diblokir ingin beralih ke situs yang lain. Jika Anda memilih untuk melanjutkan, Anda akan langsung diarahkan ke: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "tanpa parameter", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Kembali", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Tutup jendela ini", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Jangan peringatkan saya lagi tentang situs ini", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Lanjutkan", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/it/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/it/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/it/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/it/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Un blocco dei contenuti sperimentale, senza permessi, che blocca per impostazione predefinita annunci, tracker, minatori e [...]", + "message": "Un blocco sperimentale che non richiede permessi. Blocca pubblicità, tracker, cryptominer e altro ancora.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,35 +12,11 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Pannello di controllo", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Attenzione! Ci sono modifiche non salvate", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Resta", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignora", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Opzioni", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Liste filtri", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "I miei filtri", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Siti affidabili", + "message": "Impostazioni", "description": "appears as tab name in dashboard" }, "aboutPageName": { @@ -51,80 +27,28 @@ "message": "Informativa sulla privacy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Abilita/Disabilita uBO Lite per questo sito", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Apri la dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Accedi alla modalità elimina elemento", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Accedi alla modalità seleziona elemento", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Modalità di filtraggio", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Segnala un problema su questo sito", + "message": "Segnala un problema su questo sito web", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Clicca per rendere le tue scelte permanenti.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Clicca per annullare i cambiamenti.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Apri il pannello di controllo", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Altro", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Clicca per concedere a uBO Lite permessi estesi su questo sito.\nI permessi estesi consentono un blocco più efficace dei contenuti.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Clicca per revocare i permessi estesi su questo sito", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { - "message": "Meno", + "message": "Nascondi", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Visualizza il numero degli elementi bloccati sull'icona", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Aspetto", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Colore di risalto personalizzato", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blocca i report CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Abilita il filtraggio esteso su tutti i siti web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite può applicare il filtraggio esteso a un determinato sito web solo dopo aver concesso esplicitamente all'estensione le autorizzazioni per la modifica dei dati su quel sito web. Questa impostazione consente di concedere le autorizzazioni per il filtraggio esteso a tutti i siti web contemporaneamente.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Predefinite", + "message": "Predefiniti", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Domini con malware", + "message": "Domini che diffondono virus", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regioni, lingue", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Un filtro per riga. Un filtro può essere un semplice hostname, o un filtro compatibile con EasyList. Ogni riga che comincia con ! verrà ignorata.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importa e aggiungi", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Esporta", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-filtri-statici-personalizzati_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Lista delle pagine web dove uBO Lite è disabilitato. Una voce per riga.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importa e aggiungi", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Esporta", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-whitelist_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Registro delle modifiche", "description": "" @@ -204,31 +96,83 @@ "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Liste filtri", + "message": "Liste dei filtri", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { "message": "Dipendenze esterne (GPLv3-compatibili):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Invia", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Salva i cambiamenti", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Ripristina", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Segnala un problema di filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Segnala i problemi di filtraggio con siti web specifici su uBlockOrigin/uAssets issue tracker. Richiede un account GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Per evitare di gravare sui volontari con segnalazioni doppie, verifica che il problema non sia già stato segnalato.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Trova segnalazioni simili", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Indirizzo della pagina web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "La pagina web...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "Scegli una voce", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra pubblicità o avanzi di pubblicità", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Presenta sovrapposizioni o altri disturbi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Rileva uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ha problemi relativi alla privacy", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunzionamenti quando uBO Lite è abilitato", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Apre schede o finestre indesiderate", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Porta a badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Contrassegna la pagina web come “NSFW”. (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Crea una nuova segnalazione", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Benvenuto", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Hai appena installato uBO Lite. Puoi scegliere qui la modalità di filtraggio predefinita da utilizzare su tutti i siti web.\n\nPer impostazione predefinita, viene selezionata la modalità Basilare, che non richiede l'autorizzazione a leggere e modificare i dati. Se ti fidi di uBO Lite, puoi concedergli un'ampia autorizzazione per leggere e modificare i dati su tutti i siti web, in modo da attivare funzionalità di filtraggio più avanzate per tutti i siti web per impostazione predefinita.", + "message": "Hai appena installato uBO Lite. Qui puoi scegliere la modalità di filtraggio predefinita da utilizzare su tutti i siti web.\n\nPer impostazione predefinita, viene selezionata la modalità Basilare, perché non richiede l'autorizzazione per leggere e modificare i dati. Se ti fidi di uBO Lite, puoi concedergli un'ampia autorizzazione per leggere e modificare i dati su tutti i siti web, in modo da abilitare capacitità di filtraggio più avanzate per tutti i siti web in modo predefinito.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -256,7 +200,7 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Filtraggio di rete di base da liste di filtri selezionate.\n\nNon richiede l'autorizzazione a leggere e modificare i dati sui siti web.", + "message": "Filtraggio di rete di base da liste di filtri selezionate.\n\nNon richiede l'autorizzazione per leggere e modificare i dati sui siti web.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { @@ -267,12 +211,72 @@ "message": "Filtraggio di rete avanzato più un filtraggio esteso specifico e generico da liste di filtri selezionate.\n\nRichiede un'ampia autorizzazione per leggere e modificare i dati su tutti i siti web.\n\nIl filtraggio esteso generico può causare un maggiore utilizzo delle risorse della pagina web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista dei nomi host per i quali non verrà effettuato alcun filtraggio.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[solo nomi di host]\nesempio.com\ngiochi.esempio\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportamento", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Ricarica automaticamente la pagina quando si cambia la modalità di filtraggio", + "message": "Ricarica la pagina automaticamente quando cambi la modalità di filtraggio", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostra il numero delle richieste bloccate sull'icona nella barra degli strumenti", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Abilita il blocco rigido", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "La navigazione verso siti potenzialmente indesiderati verrà bloccata e ti verrà offerta la possibilità di procedere.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Trova elenchi", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Pagina bloccata", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite ha impedito alla seguente pagina di caricarsi:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "La pagina è stata bloccata a causa di un filtro corrispondente in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "La pagina bloccata vuole reindirizzare a un altro sito. Se scegli di procedere, navigherai direttamente su: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "senza parametri", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Torna indietro", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Chiudi questa finestra", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Non avvisarmi di nuovo riguardo questo sito", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Procedi", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ja/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ja/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ja/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ja/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "権限不要の実験的なコンテンツブロッカーです。インストールしてすぐに、広告、トラッキング、マイニングなどをブロックします。", + "message": "実験的で要求権限の少ないコンテンツブロッカー - 広告・トラッカー・マイニングスクリプトなどをブロック", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — ダッシュボード", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "警告! 保存していない変更があります", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "留まる", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "無視", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "設定", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "フィルターリスト", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "マイフィルター", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "信頼するサイト", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "uBO Lite について", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "プライバシーポリシー", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "このサイトで uBO Lite を無効/有効化", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "ダッシュボードを開く", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "要素抹消モードに入る", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "要素選択モードに入る", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "フィルタリングモード", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "このサイト上での問題を報告", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "クリックすると変更を確定します。", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "クリックすると変更を元に戻します。", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "ダッシュボードを開く", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "さらに表示", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "クリックすると、このサイトに対して uBO Lite の拡張権限を許可します。\nより効果的なコンテンツブロックを可能にします。", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "クリックしてこのサイトに対する uBO Lite の拡張権限許可を取り消し", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "折りたたむ", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "ブロックしたリクエストの数をアイコンに表示する", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "外観", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "テーマ", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "カスタムアクセントカラー", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP レポートをブロックする", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "すべてのウェブサイトで拡張フィルタリングを有効化", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Liteはウェブサイトに対して、そのウェブサイトのデータを変更する権限を拡張機能に明示的に付与した場合にのみ、拡張フィルタリングを適用できます。この設定を有効化すると、すべてのウェブサイトに対して一括で拡張フィルタリングの許可を与えられます。", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "既定", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "地域・言語", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "1 行につき 1 つのフィルターです。フィルターはただのホスト名でも EasyList と同じ形式でも構いません。! を先頭に付けた行は無視されます。", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "インポートして追加", - "description": "English: Import and append" - }, - "1pExport": { - "message": "エクスポート", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "[信頼するサイト] では uBO Lite を無効にするウェブページを指定します。1 行に つき 1 つです。", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "インポートして追加", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "エクスポート", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "更新履歴", "description": "" @@ -208,27 +100,79 @@ "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "外部依存関係 (GPLv3 と両立):", + "message": "外部依存関係 (GPLv3 互換):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "送信", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "変更を適用", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "元に戻す", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "フィルターの問題を報告する", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "uBlockOrigin/uAssets issue tracker で特定のウェブサイトでのフィルターの問題を報告します。GitHub アカウントが必要です", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "重複した報告によってボランティアに負担をかけないように、問題がすでに報告されていないか確認してください。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "似た報告を探す", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ウェブページのアドレス:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ウェブページ…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- エントリーを選択 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "広告または消し残りが表示される", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "オーバーレイなど邪魔なものがある", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBO Lite が検出される", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "プライバシーに関連する問題がある", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBO Lite 有効時に機能しなくなる", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "勝手にタブやウィンドウが開く", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "悪質ソフトやフィッシングへの誘導", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "ウェブページを “NSFW” (“Not Safe For Work”) としてラベル付け", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "新しい報告を作成", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "ようこそ", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "uBO Lite のインストールが完了しました。すべてのサイトに適用するデフォルトのフィルタリングモードを選んでください。\n\nデフォルトでは、データの読み書きの権限が必要ない基本モードが選択されています。 uBO Lite を信用してもらえるなら、データの読み書きや変更の権限を許可してもらえればすべてのサイトに対してより詳細なフィルタリングを有効化できます。", + "message": "uBO Lite のインストールが完了しました。すべてのサイトに適用するデフォルトのフィルタリングモードを選んでください。\n\nデフォルトでは、データの読み書きの権限が必要ない基本モードが選択されています。 uBO Lite を信用する場合は、データの読み書きや変更の権限を許可して、すべてのサイトに対してより高度なフィルタリングを有効化できます。", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -267,6 +211,14 @@ "message": "特定のフィルターリストを使ったネットワークフィルタリングと一般的・サイト別の拡張フィルタリングです。\n\nすべてのウェブサイトのデータの読み書き権限を必要とします。\n\n一般的な拡張フィルタリングを使うとリソース消費量が増えるかもしれません。", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "フィルタリングを行わないホスト名のリスト", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[ホスト名のみ]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "動作", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "フィルタリングモード変更時にページを自動再読み込みする", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "ブロックしたリクエストの数をツールバーのアイコンに表示", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "厳格なブロックを有効化", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "望ましくない可能性のあるサイトへのナビゲーションはブロックされ、次に進むためのオプションが表示されます。", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "ブロックしたページ", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite はこのページの読み込みをブロックしています:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "パラメータを除いた URL", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "戻る", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "このウィンドウを閉じる", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "今後このサイトに関する警告を表示しない", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "続行する", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ka/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ka/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ka/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ka/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — მაჩვენებლები", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "ყურადღება! ცვლილებები შეუნახავია", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "დარჩენა", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "აცილება", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "პარამეტრები", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "ფილტრების სიები", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "ჩემი ფილტრები", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "სანდო საიტები", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "შესახებ", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "პირადულობის დებულება", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "გამოირთოს/ჩაირთოს uBO Lite ამ საიტზე", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "სამართავის გახსნა", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "ნაწილების ამოჭრა", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "ნაწილების შერჩევა", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "გაფილტვრის რეჟიმი", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "ამ საიტზე ხარვეზის მოხსენება", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "დაწკაპეთ ცვლილებების მუდმივად შენახვისთვის.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "დაწკაპეთ შეტანილი ცვლილებების გაუქმებისთვის.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "სამართავის გახსნა", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "ვრცლად", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "დაწკაპეთ და uBO Lite მიიღებს დამატებით ნებართვებს ამ საიტზე.\nდამატებითი ნებართვებით მეტად შედეგიანად შეზღუდვას შეძლებს.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "დაწკაპეთ დამატებითი ნებართვის გასაუქმებლად ამ საიტზე", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "მოკლედ", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "შეზღუდული მოთხოვნების რაოდენობის ჩვენება ხატულაზე", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "იერსახე", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "თემა", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "სასურველი შეფერილობა", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP-მოხსენებების აკრძალვა", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "გაფართოებული ფილტრაციის ჩართვა ყველა საიტზე", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite შეძლებს გაფართოებული ფილტრაციის გამოყენებას მითითებულ საიტზე მას შემდეგ, რაც დართავთ მას ამ საიტზე მონაცემების შეცვლის ნებას. ამ პარამეტრით კი შეძლებთ ერთბაშად დართოთ გაფართოებული ფილტრაციის გამოყენების ნება ყველა საიტზე.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "ნაგულისხმევი", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "მხარეები, ენები", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "თითოეული ფილტრი ცალკეულ ხაზზე. ფილტრი შეიძლება იყოს საიტის უბრალო დასახელება ან Adblock Plus-სთან თავსებადი მითითებები. ხაზები ! თავსართით უგულებელყოფილი იქნება.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "შემოტანა და დამატება", - "description": "English: Import and append" - }, - "1pExport": { - "message": "შენახვა", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ჩემი-ublock-მუდმივი-ფილტრები_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "გამონაკლისებში მითითებულ ვებგვერდებზე uBO Lite გამოირთვება. თითო ჩანაწერი ცალკეულ ხაზზე.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "შემოტანა და დამატება", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "შენახვა", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ჩემი-ublock-სანდო-საიტები_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "ცვლილებები", "description": "" @@ -211,17 +103,69 @@ "message": "ცალკეული დაქვემდებარებული პროექტები (GPLv3-თან თავსებადი):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "წარდგენა", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "ცვლილებების ასახვა", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "დაბრუნება", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "ფილტრის ხარვეზის მოხსენება", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "ცალკეულ საიტზე ფილტრების ხარვეზების მოსახსენებლად გამოიყენეთ uBlockOrigin/uAssets ხარვეზების აღსარიცხავი. დაგჭირდებათ GitHub-ანგარიში.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "მოხალისეები რომ არ მოცდნენ ერთნაირი მოსხენებების ნახვით, გთოხვთ გადაამოწმოთ, უკვე ხომ არაა გაგზავნილი საჩივარი ამ ხარვეზზე.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "იპოვეთ მსგავსი მოხსენებები", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ვებგვერდის მისამართი:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ვებგვერდი...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- შეარჩიეთ --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "აჩვენებს რეკლამებს ან მის ნარჩენებს", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "ადებს შემაწუხებელ შრეებსა და მისთანებს", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "ამჩნევს, რომ uBO Lite ჩართულია", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": " პირადულობის დაცვის ხარვეზებითაა", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "შეფერხებით მუშაობს, როცა uBO Lite ჩართულია", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "ხსნის არასასურველ ჩანართებს ან ფანჯრებს", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "გადადის მავნე, თაღლითურ შიგთავსზე", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "გვერდს დაედოს მონიშვნა „NSFW“ („შეუფერებელი შიგთავსი“ (Not Safe For Work))", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "შექმენით ახალი მოსხენება", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "მოგესალმებით", @@ -232,7 +176,7 @@ "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "ფილტრაციის ნაგულისხმევი რეჟიმი", + "message": "გაფილტვრის ნაგულისხმევი რეჟიმი", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { @@ -267,6 +211,14 @@ "message": "ქსელის გაუმჯობესებულ ფილტრაციასთან ერთად საერთო გაფართოებული ფილტრები შერჩეული სიებიდან.\n\nსაჭიროებს ყველა საიტზე მონაცემთა სრულად წაკითხვისა და შეცვლის ნებართვას.\n\nგაფართოებული ფილტრაცია ზოგჯერ ზედმეტად ზრდის დატვირთვას ვებგვერდის მონახულებისას.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "სია მისამართებისა, რომლებზეც ფილტრები არ იმოქმედებს", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[მხოლოდ მისამართის საწყისი]\nexample.com\ngames.example\n…", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "მოქმედება", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "გვერდის ავტომატური განახლება ფილტრაციის რეჟიმის შეცვლისას", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "აჩვენეთ დაბლოკილი მოთხოვნების რაოდენობა ხელსაწყოთა ზოლის ხატულაზე", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "მკაცრი შეზღუდვის ჩართვა", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "შეიზღუდა სავარაუდოდ არასასურველ გვერდებზე გადასვლა, საშუალება გეძლევათ, მაინც განაგრძოთ.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "სიების მოძიება", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "შეზღუდული გვერდი", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite ზღუდავს მოცემული გვერდის ჩატვირთვას:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "გვერდი შეიზღუდა ფილტრით {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "ეს შეზღუდული გვერდი ცდილობს თქვენს სხვა საიტზე გადაყვანას. თუ განაგრძობთ, გაიხსნება: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "პარამეტრების გარეშე", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "უკან დაბრუნება", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "ამ ფანჯრის დახურვა", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "აღარ მეცნობოს ამ საიტზე", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "გაგრძელება", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/kk/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/kk/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/kk/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/kk/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/kn/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/kn/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/kn/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/kn/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "ಅನುಮತಿ-ಕಡಿಮೆ ವಿಷಯ ಬ್ಲಾಕರ್. ಅನುಸ್ಥಾಪನೆಯ ತಕ್ಷಣವೇ ಜಾಹೀರಾತುಗಳು, ಟ್ರ್ಯಾಕರ್‌ಗಳು, ಗಣಿಗಾರರು ಮತ್ತು ಹೆಚ್ಚಿನದನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,131 +12,55 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "\nಯುಬಿಒ ಲೈಟ್ - ಡ್ಯಾಶ್‌ಬೋರ್ಡ್\n", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "ಸಂಯೋಜನೆಗಳು", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "ಬಗ್ಗೆ", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "ಗೌಪ್ಯತಾ ನೀತಿ\n", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "ಫಿಲ್ಟರಿಂಗ್ ಮೋಡ್", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "ಡ್ಯಾಶ್‌ಬೋರ್ಡ್ ತೆರೆಯಿರಿ", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "ಇನ್ನಷ್ಟು", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "ಕಡಿಮೆ", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "ಪೂರ್ವನಿಯೋಜಿತ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "ಜಾಹೀರಾತುಗಳು", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "ಗೌಪ್ಯತೆ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -144,47 +68,15 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "ವಿವಿಧ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು\n", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "ಬದಲಾವಣೆಗಳು", "description": "" }, "aboutCode": { @@ -196,39 +88,91 @@ "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "ಮೂಲ ಕೊಡ್", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "ಅನುವಾದ", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "ಫಿಲ್ಟರ್ ಪಟ್ಟಿಗಳು", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "ಸ್ವಾಗತ", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "ನೀವು ಈಗಷ್ಟೇ uBO Lite ಅನ್ನು ಸ್ಥಾಪಿಸಿರುವಿರಿ. ಇಲ್ಲಿ ನೀವು ಎಲ್ಲಾ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ಬಳಸಲು ಡಿಫಾಲ್ಟ್ ಫಿಲ್ಟರಿಂಗ್ ಮೋಡ್ ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಬಹುದು.\n\nಪೂರ್ವನಿಯೋಜಿತವಾಗಿ, ಸಾಮಾನ್ಯ ಮೋಡ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು ಅನುಮತಿಯ ಅಗತ್ಯವಿಲ್ಲ. ನೀವು uBO Lite ಅನ್ನು ನಂಬುತ್ತಿದ್ದರೆ, ಡೀಫಾಲ್ಟ್ ಆಗಿ ಎಲ್ಲಾ ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೆ ಹೆಚ್ಚು ಸುಧಾರಿತ ಫಿಲ್ಟರಿಂಗ್ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ಎಲ್ಲಾ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿನ ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಮಾರ್ಪಡಿಸಲು ನೀವು ವಿಶಾಲವಾದ ಅನುಮತಿಯನ್ನು ನೀಡಬಹುದು.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -244,15 +188,15 @@ "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "ಸಾಮಾನ್ಯ", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "ಸೂಕ್ತ", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "ಪೂರ್ಣ", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { @@ -267,12 +211,72 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "ನಡವಳಿಕೆ", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ko/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ko/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ko/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ko/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — 대시보드", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "경고! 저장되지 않은 변경 사항이 있습니다", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "유지", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "무시", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "설정", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "필터 목록", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "내 필터", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "신뢰하는 사이트", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "정보", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "개인정보취급방침", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "이 사이트에 대해 uBO Lite를 켜거나 끄기", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "대시보드 열기", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "구성 요소 제거 모드로 진입", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "구성 요소 선택기 모드로 진입", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "필터링 모드", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "이 사이트의 이슈를 신고하기", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "클릭하여 변경 사항을 영구적으로 만듭니다.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "클릭하여 변경 사항을 되돌립니다.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "대시보드 열기", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "자세히", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "클릭하여 이 사이트에 대해 uBO Lite에게 확장된 권한을 부여합니다.\n확장된 권한은 더 효과적인 콘텐츠 차단을 허용합니다.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "클릭하여 이 사이트에 대한 확장된 권한을 철회합니다.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "간단히", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "차단된 요청 개수를 아이콘에 표시", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "표시", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "테마", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "사용자 지정 강조 색상", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP 보고를 차단하기", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "모든 웹사이트에 대해 확장된 필터링 켜기", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite에서 특정 사이트에서 필터링을 수행하기 위해서는 해당 사이트의 데이터 수정 권한을 일일이 부여해야 합니다. 이 설정을 이용하면 모든 웹사이트에 대해 확장된 필터링 권한을 한 번에 부여할 수 있습니다.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "기본값", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "지역, 언어", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "한 줄에 한 개의 필터를 입력하세요. 필터는 순수 호스트이름, 혹은 EasyList-호환 필터가 될 수 있습니다. 시작 부분이 ! 로 시작되면 무시됩니다.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "가져오기 및 추가하기", - "description": "English: Import and append" - }, - "1pExport": { - "message": "내보내기", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "신뢰된 사이트는 어느 웹 사이트에 uBO Lite가 비활성화되여하는 지를 말합니다. 한 줄에 한 항목씩 적으세요.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "가져오기 및 추가하기", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "내보내기", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "변경 로그", "description": "" @@ -204,24 +96,76 @@ "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "필터 리스트", + "message": "필터 목록", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { "message": "외부 의존성 (GPLv3 호환):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "제출", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "변경사항 적용", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "되돌리기", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "필터 이슈 신고", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "특정 웹사이트에서 발생하는 필터 이슈를 uBlockOrigin/uAssets 이슈 트래커에 신고할 수 있습니다. GitHub 계정이 필요합니다.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "봉사자들이 중복 신고로 인해 부담을 겪지 않도록, 해당 이슈가 이미 신고되지는 않았는지 확인해주시기 바랍니다.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "유사한 신고 탐색", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "웹페이지 주소:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "웹페이지가…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- 주제 선택 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "광고나 광고 흔적을 보여줍니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "오버레이나 기타 성가신 요소를 보여줍니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBO Lite 사용을 감지합니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "개인정보 보호 관련 이슈가 있습니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBO Lite를 켜면 깨집니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "원치 않는 탭이나 창을 엽니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "악성코드, 피싱으로 유도합니다", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "웹페이지를 \"NSFW\" (“Not Safe For Work”)로 분류", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "새 신고 생성", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "환영합니다", @@ -267,6 +211,14 @@ "message": "고급 네트워크 필터링과 선택한 필터 목록을 바탕으로 특정한 확장 필터링 및 보편적인 확장 필터링을 수행합니다.\n\n모든 웹사이트에서 데이터를 읽고 쓸 수 있도록 하는 광범위한 권한이 필요합니다.\n\n보편적인 확장 필터링 기능을 이용하는 경우 웹페이지의 리소스 사용량이 증가할 수 있습니다.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "필터링을 비활성화할 호스트 이름 목록", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[호스트 이름만 작성]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "동작", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "필터링 모드를 변경할 때 페이지 자동 새로고침", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "차단된 요청 개수를 도구 모음 아이콘에 표시", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "엄격한 차단 켜기", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "잠재적으로 좋지 않은 사이트로의 접속을 차단하고, 사용자가 진행할지 선택하도록 합니다.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "목록 찾기", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "페이지 차단됨", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite가 다음 페이지를 불러오지 못하게 했습니다.", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "이 페이지가 {{listname}} 내 필터링 항목에 해당하여 차단되었습니다.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "차단된 페이지에서 다른 사이트로 이동하려 합니다. 계속하시면, {{url}} 주소로 바로 이동합니다.", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "매개변수 없음", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "뒤로", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "창 닫기", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "다시는 이 사이트에 대해 경고하지 않기", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "계속", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/lt/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/lt/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/lt/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/lt/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,37 +12,13 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Skydelis", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Dėmesio! Turite neišsaugotų pakeitimų", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Pasilikti", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignoruoti", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Nustatymai", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filtrų sąrašai", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mano filtrai", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Apie", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privatumo politika", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Daugiau", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mažiau", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regionai, kalbos", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksportuoti", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksportuoti", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Pakeitimų žurnalas", "description": "" @@ -211,17 +103,69 @@ "message": "Išorinės priklausomybės (suderinamos su „GPLv3“):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Patvirtinti", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Taikyti pakeitimus", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,12 +211,72 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Elgsena", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Automatiškai perkrauti sveitane keičiant filtro rėžimą", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/lv/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/lv/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/lv/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/lv/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Izmēģinājuma, bezatļauju satura aizturētājs. Aiztur reklāmas, izsekotājus, kriptoracējus un vēl uzreiz pēc uzstādīšanas.", + "message": "Bezatļauju satura aizturētājs. Aiztur reklāmas, izsekotājus, kriptoracējus un daudz ko citu uzreiz pēc uzstādīšanas.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,114 +15,38 @@ "message": "uBO Lite — infopanelis", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Uzmanību! Ir nesaglabātas izmaiņas", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Palikt", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Neņemt vērā", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Iestatījumi", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Aizturēšanas saraksti", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mani aizturētāji", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Uzticamas vietnes", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Par", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privātuma nosacījumi", + "message": "Konfidencialitātes nosacījumi", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Atspējot/iespējot uBO Lite šajā vietnē", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Atvērt vadības paneli", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Pārslēgties uz elementu dzēšanu", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Pārslēgties uz elementu atlasīšanu", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "aizturēšanas veids", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Ziņot par nepilnību šajā vietnē", + "message": "Ziņot par nepilnību šajā tīmekļa vietnē", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Noklikšķināt, lai saglabātu izmaiņas.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klikšķināt, lai atceltu izmaiņas.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Atvērt vadības paneli", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Vairāk", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klikšķināt, lai piešķirtu uBO Lite paplašinātas tiesības šajā vietnē.\nPaplašinātas tiesības nodrošina daudz iedarbīgāku satura aizturēšanu.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klikšķināt, lai atsauktu paplašinātās tiesības šajā vietnē.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mazāk", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Attēlot aizturēto pieprasījumu skaitu uz ikonas", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Izskats", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Izskats", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Pielāgota izcēluma krāsa", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Aizturēt CSP atskaites", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Iespējot paplašināto aizturēšanu visās tīmekļa vietnēs", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite var pielietot paplašināto aizturēšanu noteiktā vietnē tikai pēc atļauju nodrošināšanas paplašinājumam datu pārveidošanai tīmekļa vietnē. Šis iestatījums ļauj uzreiz nodrošināt atļaujas paplašinātajai aizturēšanai visās tīmekļa vietnēs.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Noklusējums", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -140,7 +64,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Traucējumi", + "message": "Kaitinoši elementi", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { @@ -151,38 +75,6 @@ "message": "Apgabali, valodas", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Vienā rindā viens ieraksts. Filtrs var būt vai nu vienkāršs saimniekdatora nosaukums, vai arī EasyList saderīgs aizturētājs. Rindas, kas sākas ar ! netiks ņemtas vērā.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Ievietot un pievienot", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Izdot", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Uzticamo vietņu norādes nosaka, kurās tīmekļa vietnēs uBO Lite vajadzētu būt atspējotam. Vienā rindā viens ieraksts.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Ievietot un pievienot", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Izdot", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Izmaiņu žurnāls", "description": "" @@ -211,24 +103,76 @@ "message": "Ārējās atkarības (GPLv3 saderīgas):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Iesniegt", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Pielietot izmaiņas", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Atgriezt", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Ziņot par aizturēšanas filtra nepilnību", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Ziņot par aizturēšanas filtru nepilnībām noteiktās vietnēs uBlockOrigin/uAssets pieteikumu izsekotājā. Nepieciešams GitHub konts.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Lai izvairītos no brīvprātīgo noslogošanas ar ziņojumiem, kas atkārtojas, lūgums pārbaudīt, ka par šādu nepilnību jau nav ziņots.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Meklēt līdzīgus ziņojumus", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Tīmekļa lapas adrese:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Tīmekļa lapa…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Atlasīt ierakstu --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Rāda reklāmas vai to paliekas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ir pārklājumi vai citi traucējumi", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Nosaka uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ir ar privātumu saistītas nepilnības", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Darbības traucējumi, kad ir iespējots uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Atver nevēlamas cilnes vai logus", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Noved pie ļaunatūras, pikšķerēšanas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Atzīmēt šo lapu kā “nav droša skatīšanai darbā (NSFW)” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Izveidot jaunu ziņojumu", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Sveicināti!", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Tikko ir uzstādīts uBO Lite. Šeit var izvēlēties noklusējuma aizturēšanas veidu, ko izmantot visām tīmekļa vietnēm.\n\nPēc noklusējuma ir atlasīts Pamata, jo tam nav nepieciešama atļauja lasīt un mainīt datus. Ja uBO Lite šķiet uzticams, ir iespējams piešķirt plašas atļaujas lasīt un mainīt datus visās tīmekļa vietnēs, lai pēc noklusējuma iespējotu pilnīgākas aizturēšanas spējas visās tīmekļa vietnēs.", + "message": "Tikko tika uzstādīts uBO Lite. Šeit var izvēlēties noklusējuma aizturēšanas veidu, ko izmantot visām tīmekļa vietnēm.\n\nPēc noklusējuma ir atlasīts Pamata, jo tam nav nepieciešama atļauja lasīt un mainīt datus. Ja uBO Lite šķiet uzticams, ir iespējams piešķirt plašas atļaujas lasīt un mainīt datus visās tīmekļa vietnēs, lai pēc noklusējuma iespējotu pilnīgākas aizturēšanas spējas visās tīmekļa vietnēs.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -252,7 +196,7 @@ "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "pilnīgais", + "message": "pilnais", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { @@ -260,13 +204,21 @@ "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Attīstītāka tīkla aizturēšana ar atsevišķu paplašinātu aizturēšanu, izmantojot atlasītos aizturēšanas sarakstus.\n\nNepieciešamas plašas atļaujas lasīt un mainīt visu tīmekļa vietņu datus.", + "message": "Labāka tīkla aizturēšana ar atsevišķu paplašinātu aizturēšanu, izmantojot atlasītos aizturēšanas sarakstus.\n\nNepieciešamas plašas atļaujas lasīt un mainīt visu tīmekļa vietņu datus.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Attīstītāka tīkla aizturēšana ar pamata un papildu paplašinātu aizturēšanu, izmantojot atlasītos aizturēšanas sarakstus.\n\nNepieciešamas plašas atļaujas lasīt un mainīt visu tīmekļa vietņu datus.\n\nPamata paplašinātā aizturēšana var izraisīt paaugstinātu tīmekļa vietnes resursu izmantošanu.", + "message": "Pilna tīkla aizturēšana ar pamata un papildu paplašinātu aizturēšanu, izmantojot atlasītos aizturēšanas sarakstus.\n\nNepieciešamas plašas atļaujas lasīt un mainīt visu tīmekļa vietņu datus.\n\nPamata paplašinātā aizturēšana var izraisīt paaugstinātu tīmekļa vietnes resursu izmantošanu.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Saraksts ar resursdatoru nosaukumiem, kuriem netiks pielietota aizturēšana", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[tikai resursdatoru nosaukumi]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Uzvedība", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Pārlādēt lapu pēc aizturēšanas veida nomaiņas.", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Rādīt aizturēto pieprasījumu skaitu rīkjoslas ikonā", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Iespējot stingro aizturēšanu", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Iespējami nevēlamu vietņu apmeklēšana tiks aizturēta, un tiks piedāvāta iespēja turpināt.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Atrast sarakstus", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Lapa aizturēta", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite novērsa šīs lapas ielādēšanu:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Lapa tika aizturēta, jo atbilst aizturētājam sarakstā {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Aizturētā lapa veic pārvirzīšanu uz citu vietni. Ja izvēlēsies turpināt, nonāksi uzreiz šeit: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "bez parametriem", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Doties atpakaļ", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Aizvērt šo logu", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Nebrīdināt vairs par šo vietni", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Turpināt", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/mk/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/mk/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/mk/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/mk/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,275 +4,279 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "Блокатор на содржини без дозволи. Блокира реклами, трекери, мајнери и уште многу повеќе веднаш по инсталацијата.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "{{ruleCount}} правила, добиени од {{filterCount}} мрежните филтри", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Контролна плоча", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "Прилагодби", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "Информации за...", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "Заштита на личните податоци", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Начини на прочистување", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Report an issue on this website", + "message": "Пријави проблем на оваа веб-страница", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Отварање на Контролна плоча", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "Повеќе", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "Помалку", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "Почетни прилагодби", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "Рекламни огласи", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "Приватност", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Досадувања", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "Разно", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "Региони, Јазици", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Промени", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "Изворен код (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "Сов contributors", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "Изворен код", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "Преводи", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "Листи за филтрирање", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "Надворешни зависности (компатибилни со GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Пријави проблем со филтерот", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Пријавете проблеми со филтерите за специфични веб-страници до uBlockOrigin/uAssets issue tracker. Потребен е GitHub профил.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "За да се избегне оптоварување на волонтерите со дупликат пријави, ве молиме проверете дали проблемот веќе не е пријавен.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Најди слични пријави", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адреса на веб-страницата:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Веб-страницата…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Изберете внос --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Покажува реклами или остатоци од реклами", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Има преOverlayи или други непријатности", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Детектира uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Има проблеми поврзани со приватноста", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Има многу проблеми кога е вклучен uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Отвора непожелни табови или прозорци", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Води до злонамерен софтвер, фишинг", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Означи ја веб-страницата како “NSFW” (“Не е безбедно за работа”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Создај нова пријава", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "Добредојде", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Токму ја инсталиравте uBO Lite. Овде можете да изберете режим на филтрирање по подразбирање што ќе го користите на сите веб-страници.\n\nПо подразбирање, е избран режимот Основен затоа што не бара дозвола за читање и модификација на податоци. Ако му верувате на uBO Lite, можете да му дадете ширување на дозволата за читање и модификација на податоци на сите веб-страници за да овозможите попрецизни способности за филтрирање на сите веб-страници по подразбирање.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Режим на филтрирање по подразбирање", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Режимот на филтрирање по подразбирање ќе биде заменет со режимите на филтрирање за секоја веб-страница. Можете да го прилагодите режимот на филтрирање на која било дадена веб-страница во согласност со тој режим што најдобро функционира на таа веб-страница. Секој режим има свои предности и недостатоци.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "без филтрирање", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "основен", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "оптимален", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "целосен", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Основно мрежно филтрирање од селектираните листи со филтри.\n\nНе бара дозвола за читање и модификација на податоци на веб-страниците.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Напредно мрежно филтрирање плус специфично проширено филтрирање од селектираните листи со филтри.\n\nБара широка дозвола за читање и модификација на податоци на сите веб-страници.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Напредно мрежно филтрирање плус специфично и генералистичко проширено филтрирање од селектираните листи со филтри.\n\nБара широка дозвола за читање и модификација на податоци на сите веб-страници.\n\nГенералистичкото проширено филтрирање може да предизвика поголема потрошувачка на ресурси на веб-страниците.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Листата на веб-страници за кои нема да се врши филтрирање.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[само домени]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "Понашање", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Автоматски освежи ја страницата кога се менува режимот на филтрирање", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Прикажи го бројот на блокирани барања на иконата во алатникот", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Најди листи", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ml/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ml/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ml/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ml/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,275 +4,279 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "അനുമതി-കുറവ് ഉള്ളടക്ക ബ്ലോക്കർ. പരസ്യങ്ങൾ, ട്രാക്കറുകൾ, ക്രിപ്‌റ്റോ-മൈനർ എന്നിവയും മറ്റും ഇൻസ്റ്റാളുചെയ്യുമ്പോൾ ഉടനടി തടയുന്നു.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "{{ruleCount}} നിയമങ്ങൾ, {{filterCount}} നെറ്റ്‌വർക്ക് ഫിൽട്ടറുകളിൽ നിന്ന് പരിവർത്തനം ചെയ്‌തു", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO ലൈറ്റ് - ഡാഷ്ബോർഡ്", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "ക്രമീകരണങ്ങൾ", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "കുറിച്ച്", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "സ്വകാര്യതാ നയം", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "ഫിൽട്ടറിംഗ് മോഡ്", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "ഡാഷ്ബോർഡ് തുറക്കുക", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "കൂടുതൽ", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "കുറവ്", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "സ്ഥിരസ്ഥിതി", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "പരസ്യങ്ങള്‍", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "പ്രൈവസി", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "ശല്യപ്പെടുത്തലുകൾ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "പലവക ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "പ്രാദേശികം, ഭാഷകള്‍", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "ചേഞ്ച് ലോഗ്", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "സോര്‍സ് കോഡ് (ജിപിഎല്‍ വി3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "സോഴ്സ് കോഡ്", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "ഫിൽട്ടർ ലിസ്റ്റ്", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "ബാഹ്യ ഡിപൻഡൻസികൾ (ജിപിൽവി3-അനുയോജ്യമായത്):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "സ്വാഗതം", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "നിങ്ങൾ ഇപ്പോൾ uBO Lite ഇൻസ്റ്റാൾ ചെയ്തു. എല്ലാ വെബ്‌സൈറ്റുകളിലും ഉപയോഗിക്കുന്നതിന് ഇവിടെ നിങ്ങൾക്ക് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് തിരഞ്ഞെടുക്കാം.\n\nസ്ഥിരസ്ഥിതിയായി, അടിസ്ഥാന മോഡ് തിരഞ്ഞെടുത്തു, കാരണം ഡാറ്റ വായിക്കാനും പരിഷ്ക്കരിക്കാനും അനുമതി ആവശ്യമില്ല. നിങ്ങൾ uBO Lite-നെ വിശ്വസിക്കുന്നുവെങ്കിൽ, ഡിഫോൾട്ടായി എല്ലാ വെബ്‌സൈറ്റുകൾക്കും കൂടുതൽ വിപുലമായ ഫിൽട്ടറിംഗ് കഴിവുകൾ പ്രാപ്‌തമാക്കുന്നതിന് എല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും നിങ്ങൾക്ക് വിശാലമായ അനുമതി നൽകാം.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ്", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "ഓരോ വെബ്‌സൈറ്റിലും ഫിൽട്ടറിംഗ് മോഡുകൾ ഉപയോഗിച്ച് ഡിഫോൾട്ട് ഫിൽട്ടറിംഗ് മോഡ് അസാധുവാക്കപ്പെടും. ഏത് വെബ്‌സൈറ്റിൽ ഏറ്റവും മികച്ച രീതിയിൽ പ്രവർത്തിക്കുന്ന മോഡ് അനുസരിച്ച് നിങ്ങൾക്ക് ഏത് വെബ്‌സൈറ്റിലും ഫിൽട്ടറിംഗ് മോഡ് ക്രമീകരിക്കാൻ കഴിയും. ഓരോ മോഡിനും അതിന്റെ ഗുണങ്ങളും ദോഷങ്ങളുമുണ്ട്.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "ഫിൽട്ടറിംഗ് ഇല്ല", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "അടിസ്ഥാനം", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "ഒപ്റ്റിമൽ", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "പൂർണ്ണമായ", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "തിരഞ്ഞെടുത്ത ഫിൽട്ടർ ലിസ്റ്റുകളിൽ നിന്നുള്ള അടിസ്ഥാന നെറ്റ്‌വർക്ക് ഫിൽട്ടറിംഗ്.\n\nവെബ്‌സൈറ്റുകളിലെ ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും അനുമതി ആവശ്യമില്ല.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "തിരഞ്ഞെടുത്ത ഫിൽട്ടർ ലിസ്റ്റുകളിൽ നിന്നുള്ള വിപുലമായ നെറ്റ്‌വർക്ക് ഫിൽട്ടറിംഗും പ്രത്യേക വിപുലീകൃത ഫിൽട്ടറിംഗും.\n\nഎല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും വിശാലമായ അനുമതി ആവശ്യമാണ്.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "തിരഞ്ഞെടുത്ത ഫിൽട്ടർ ലിസ്റ്റുകളിൽ നിന്നുള്ള വിപുലമായ നെറ്റ്‌വർക്ക് ഫിൽട്ടറിംഗും നിർദ്ദിഷ്ടവും പൊതുവായതുമായ വിപുലീകൃത ഫിൽട്ടറിംഗും.\n\nഎല്ലാ വെബ്‌സൈറ്റുകളിലെയും ഡാറ്റ വായിക്കാനും പരിഷ്‌ക്കരിക്കാനും വിശാലമായ അനുമതി ആവശ്യമാണ്.\n\nപൊതുവായ വിപുലീകൃത ഫിൽട്ടറിംഗ് ഉയർന്ന വെബ്‌പേജ് ഉറവിട ഉപയോഗത്തിന് കാരണമായേക്കാം.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "ഫിൽട്ടറിംഗ് നടക്കാത്ത ഹോസ്റ്റ് നെയിമുകളുടെ ലിസ്റ്റ്", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "പെരുമാറ്റം", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "ഫിൽട്ടറിംഗ് മോഡ് മാറ്റുമ്പോൾ പേജ് സ്വയമേവ റീലോഡ് ചെയ്യുക", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/mr/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/mr/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/mr/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/mr/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ms/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ms/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ms/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ms/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,45 +4,21 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "Penyekat kandungan tanpa kebenaran. Menyekat iklan, penjejak, pelombong dan banyak lagi sebaik sahaja pemasangan.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "Peraturan {{ruleCount}}, ditukar daripada penapis rangkaian {{filterCount}}.", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite — Papan pemuka", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Kekal", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Abai", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Tetapan", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Senarai penapis", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Penapis saya", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Halaman dipercayai", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Mengenai", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Dasar privasi", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "mod penapisan", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Buka papan pemuka", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Lagi", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Kurangkan", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Penampilan", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Sekat laporan CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Lalai", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,11 +60,11 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "Kegusaran", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { @@ -148,43 +72,11 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "Wilayah, bahasa", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksport", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksport", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "Log perubahan", "description": "" }, "aboutCode": { @@ -208,35 +100,87 @@ "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "Pergantungan luaran (serasi dengan GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Hantar", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Selamat datang", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "Anda baru sahaja memasang uBO Lite. Di sini anda boleh memilih mod penapisan lalai untuk digunakan pada semua tapak web.\n\nSecara lalai, mod Asas dipilih kerana ia tidak memerlukan kebenaran untuk membaca dan mengubah suai data. Jika anda mempercayai uBO Lite, anda boleh memberikannya kebenaran untuk membaca dan mengubah suai data pada semua tapak web untuk mendayakan keupayaan penapisan yang lebih maju untuk semua tapak web secara lalai.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "Mod penapisan lalai", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "Mod penapisan lalai akan ditindih oleh mod penapisan setiap tapak web. Anda boleh melaraskan mod penapisan pada mana-mana tapak web tertentu mengikut mana-mana mod yang paling berkesan pada tapak web tersebut. Setiap mod mempunyai kelebihan dan kekurangannya.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { @@ -244,35 +188,95 @@ "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "asas", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "optimum", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "selesai", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "Penapisan rangkaian asas daripada senarai penapis yang dipilih.\n\nTidak memerlukan kebenaran untuk membaca dan mengubah suai data pada tapak web.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "Penapisan rangkaian lanjutan ditambah penapisan lanjutan khusus daripada senarai penapis yang dipilih.\n\nMemerlukan kebenaran untuk membaca dan mengubah suai data pada semua tapak web.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "Penapisan rangkaian lanjutan serta penapisan lanjutan khusus dan generik daripada senarai penapis yang dipilih.\n\nMemerlukan kebenaran untuk membaca dan mengubah suai data pada semua tapak web.\n\nPenapisan lanjutan generik boleh menyebabkan penggunaan sumber halaman web yang lebih tinggi.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Senarai nama hos yang tiada penapisan akan berlaku", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Tingkah laku", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "Muat semula halaman secara automatik apabila menukar mod penapisan", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Tunjukkan bilangan permintaan yang disekat pada ikon bar alat", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/nb/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/nb/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/nb/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/nb/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "En eksperimentell innholdsblokkerer uten tillatelseskrav. Blokkerer reklame, sporere, minere og mer øyeblikkelig etter installering.", + "message": "En tillatelsesbegrenset innholdsblokkerer. Blokkerer reklame, sporere, minere og mer umiddelbart etter installering.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashbord", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Advarsel! Du har ulagrede endringer", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Bli", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorer", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Innstillinger", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filterlister", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mine filtre", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Betrodde sider", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Om", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Personvernpraksis", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Deaktiver/aktiver uBO Lite for dette nettstedet", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Åpne dashbordet", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Gå til element­fjernings­modus", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Gå til element­velger­modus", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtreringsmodus", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Rapporter om problem på dette nettstedet", + "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klikk for å gjøre endringer permanente.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klikk for å tilbakestille endringer.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Åpne dashbordet", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mer", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klikk for å gi uBO Lite utvidede tillatelser på dette nettstedet.\nUtvidede tillatelser gir mer effektiv innholdsblokkering.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klikk for å tilbakekalle utvidede tillatelser på dette nettstedet.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mindre", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Vis antall blokkerte forespørsler på ikonet", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Utseende", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Tilpasset aksentfarge", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokker CSP-rapporter", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Aktiver utvidet filtrering på alle nettsteder", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite kan bruke utvidet filtrering på et gitt nettsted bare etter at du uttrykkelig gir utvidelsen tillatelser til å endre data på det nettstedet. Denne innstillingen gir deg muligheten til å gi tillatelser for utvidet filtrering til alle nettsteder på en gang.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standard", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regioner, språk", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Ett filter per linje. Et filter kan være et vanlig vertsnavn eller et EasyList-kompatibelt filter. Linjer med prefikset ! blir ignorert.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importer og legg til", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksporter", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "mine-ublock-statiske-filtre_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Direktivene for betrodde sider bestemmer hvilke nettsider uBO Lite ikke skal være aktiv på. Én oppføring per linje.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importer og legg til", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksporter", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "mine-ublock-betrodde-sider_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Endringslogg", "description": "" @@ -211,17 +103,69 @@ "message": "Eksterne avhengigheter (GPLv3-kompatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Send", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Bruk endringer", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Tilbakestill", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Velkommen", @@ -267,6 +211,14 @@ "message": "Avansert nettverksfiltrering pluss spesifikk og generell utvidet filtrering fra valgte filterlister.\n\nKrever bred tillatelse til å lese og endre data på alle nettsteder.\n\nGenerell utvidet filtrering kan forårsake høyere ressursbruk på nettsider.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Liste over vertsnavn der ingen filtrering vil finne sted", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Virkemåte", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatisk last side på nytt ved endring av filtreringsmodus", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Vis antall blokkerte forespørsler på verktøylinjeikonet", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/nl/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/nl/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/nl/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/nl/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Een experimentele, toestemmingsloze inhoudsblokkeerder. Blokkeert direct na installatie advertenties, trackers, miners en meer.", + "message": "Een toestemmingsloze inhoudsblokkeerder. Blokkeert direct na installatie advertenties, trackers, miners en meer.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite – Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Waarschuwing! Niet-opgeslagen wijzigingen", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Blijven", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Negeren", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Instellingen", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filterlijsten", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mijn filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Vertrouwde websites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Over", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacybeleid", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "uBO Lite in-/uitschakelen voor deze website", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Dashboard openen", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Element­wisser­modus openen", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Element­kiezer­modus openen", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtermodus", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Een probleem op deze website melden", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klik om uw wijzigingen permanent te maken.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klik om uw wijzigingen ongedaan te maken.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Dashboard openen", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Meer", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klik om uBO Lite uitgebreide toestemmingen te verlenen op deze website.\nUitgebreide toestemmingen zorgen voor effectievere inhoudsblokkering.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klik om uitgebreide toestemmingen op deze website in te trekken.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Minder", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Het aantal geblokkeerde aanvragen op het pictogram tonen", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Vormgeving", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Thema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Aangepaste accentkleur", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP-rapporten blokkeren", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Uitgebreide filtering op alle websites inschakelen", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite kan alleen uitgebreide filtering op een bepaalde website toepassen nadat u de extensie expliciet toestemmingen hebt verleend om gegevens op die website aan te passen. Via deze instelling kunt u toestemmingen voor uitgebreide filtering aan alle websites tegelijk verlenen.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standaard", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Gebieden, talen", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Eén filter per regel. Een filter kan een gewone hostnaam of een EasyList-compatibel filter zijn. Regels beginnend met ! worden genegeerd.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importeren en toevoegen…", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exporteren…", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "mijn-ublock-statische-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "De vertrouwde-website-instructies schrijven voor op welke webpagina’s uBO Lite dient te worden uitgeschakeld. Eén vermelding per regel.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importeren en toevoegen…", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exporteren…", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "mijn-ublock-vertrouwde-websites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Wijzigingenlogboek", "description": "" @@ -211,17 +103,69 @@ "message": "Externe afhankelijkheden (GPLv3-compatibel):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Verzenden", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Wijzigingen toepassen", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Ongedaan maken", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Een filterprobleem melden", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Meld filterproblemen met specifieke websites in de uBlockOrigin/uAssets-probleemtracker. Vereist een GitHub-account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Controleer of het probleem niet eerder is gemeld om te voorkomen dat vrijwilligers met dubbele meldingen worden belast.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Soortgelijke meldingen zoeken", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adres van de webpagina:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "De webpagina…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Maak een keuze --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Toont advertenties of restanten", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Heeft overlappingen of andere ongemakken", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecteert uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Heeft privacy-gerelateerde problemen", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Werkt niet als uBO Lite is ingeschakeld", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opent ongewenste tabbladen of vensters", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leidt tot badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "De webpagina labelen als ‘NSFW’ (‘Not Safe For Work’)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Nieuwe melding maken", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welkom", @@ -267,6 +211,14 @@ "message": "Geavanceerde netwerkfiltering plus specifieke en algemene uitgebreide filtering vanuit geselecteerde filterlijsten.\n\nVereist brede toestemming voor het lezen en aanpassen van gegevens op alle websites.\n\nAlgemene uitgebreide filtering kan een hoger gebruik van webpaginabronnen veroorzaken.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lijst van hostnamen waarvoor geen filtering plaatsvindt.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[alleen hostnamen]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Gedrag", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Pagina automatisch vernieuwen bij wijzigen van filtermodus", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Het aantal geblokkeerde aanvragen op het werkbalkpictogram tonen", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Strenge blokkering inschakelen", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigatie naar mogelijk ongewenste websites wordt geblokkeerd, en u krijgt de mogelijkheid om door te gaan.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Lijsten zoeken", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Pagina geblokkeerd", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite heeft het laden van de volgende pagina voorkomen:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "De pagina is geblokkeerd vanwege een overeenkomend filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "De geblokkeerde pagina wil u omleiden naar een andere website. Als u doorgaat, navigeert u rechtstreeks naar: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "zonder parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Teruggaan", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Dit venster sluiten", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Mij niet meer waarschuwen over deze website", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Doorgaan", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/oc/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/oc/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/oc/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/oc/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pa/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pa/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pa/messages.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pa/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,282 @@ +{ + "extName": { + "message": "uBlock Origin Lite", + "description": "extension name." + }, + "extShortDesc": { + "message": "ਮਨਜ਼ੂਰੀਆਂ ਤੋਂ ਬਿਨਾਂ ਵਾਲਾ ਸਮੱਗਰੀ ਬਲਾਕਰ ਹੈ। ਇਸ਼ਤਿਹਾਰ, ਟਰੈਕਰਾਂ, ਮਾਈਨਰਾਂ ਅਤੇ ਹੋਰਾਂ ਉੱਤੇ ਇੰਸਟਾਲ ਕਰਨ ਤੋਂ ਫ਼ੌਰਨ ਬਾਅਦ ਪਾਬੰਦੀ ਲਾਉਂਦਾ ਹੈ।", + "description": "this will be in the Chrome web store: must be 132 characters or less" + }, + "perRulesetStats": { + "message": "{{ruleCount}} ਨਿਯਮ, {{filterCount}} ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਤੋਂ ਬਦਲੇ ਗਏ", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "dashboardName": { + "message": "uBO Lite — ਡੈਸ਼ਬੋਰਡ", + "description": "English: uBO Lite — Dashboard" + }, + "settingsPageName": { + "message": "ਸੈਟਿੰਗਾਂ", + "description": "appears as tab name in dashboard" + }, + "aboutPageName": { + "message": "ਇਸ ਬਾਰੇ", + "description": "appears as tab name in dashboard" + }, + "aboutPrivacyPolicy": { + "message": "ਪਰਦੇਦਾਰੀ ਨੀਤੀ", + "description": "Link to privacy policy on GitHub (English)" + }, + "popupFilteringModeLabel": { + "message": "ਫਿਲਟਰ ਕਰਨ ਦਾ ਮੋਡ", + "description": "Label in the popup panel for the current filtering mode" + }, + "popupTipReport": { + "message": "ਇਸ ਵੈੱਬਸਾਈਟ ਉੱਤੇ ਮਸਲੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ", + "description": "Tooltip used for the 'chat' icon in the panel" + }, + "popupTipDashboard": { + "message": "ਡੈਸ਼ਬੋਰਡ ਨੂੰ ਖੋਲ੍ਹੋ", + "description": "English: Click to open the dashboard" + }, + "popupMoreButton": { + "message": "ਹੋਰ", + "description": "Label to be used to show popup panel sections" + }, + "popupLessButton": { + "message": "ਘੱਟ", + "description": "Label to be used to hide popup panel sections" + }, + "3pGroupDefault": { + "message": "ਮੂਲ", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAds": { + "message": "ਇਸ਼ਤਿਹਾਰ", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupPrivacy": { + "message": "ਪਰਦੇਦਾਰੀ", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMalware": { + "message": "Malware protection, security", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupAnnoyances": { + "message": "ਅਣਚਾਹੇ", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupMisc": { + "message": "ਫੁਟਕਲ", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "3pGroupRegions": { + "message": "ਖੇਤਰ, ਭਾਸ਼ਾਵਾਂ", + "description": "Header for a ruleset section in 'Filter lists pane'" + }, + "aboutChangelog": { + "message": "ਤਬਦੀਲੀ-ਸੂਚੀ", + "description": "" + }, + "aboutCode": { + "message": "ਸਰੋਤ ਕੋਡ (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "ਯੋਗਦਾਨੀ", + "description": "English: Contributors" + }, + "aboutSourceCode": { + "message": "ਸਰੋਤ ਕੋਡ", + "description": "Link text to source code repo" + }, + "aboutTranslations": { + "message": "ਅਨੁਵਾਦ", + "description": "Link text to translations repo" + }, + "aboutFilterLists": { + "message": "ਫਿਲਟਰ ਸੂਚੀਆਂ", + "description": "Link text to uBO's own filter lists repo" + }, + "aboutDependencies": { + "message": "ਬਾਹਰੀ ਨਿਰਭਰਤਾਵਾਂ (GPLv3-ਅਨੁਕੂਲ):", + "description": "Shown in the About pane" + }, + "supportS6H": { + "message": "ਫਿਲਟਰ ਮਸਲੇ ਬਾਰੇ ਰਿਪੋਰਟ ਕਰੋ", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "ਰਲਦੀਆਂ ਰਿਪੋਰਟਾਂ ਲੱਭੋ", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "ਵੈੱਬ-ਸਫ਼ੇ ਦਾ ਸਿਰਨਾਵਾਂ:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "ਵੈੱਬ ਸਫ਼ਾ…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "ਇਸ਼ਤਿਹਾਰ ਜਾਂ ਇਸ਼ਤਿਹਾਰ ਦੀ ਰਹਿੰਦ-ਖੂੰਦ ਦਿਖਾਉਂਦਾ ਹੈ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "ਪਰਦੇਦਾਰੀ ਸੰਬੰਧੀ ਮਸਲੇ ਹਨ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "ਬੇਲੋੜੀਆਂ ਟੈਬਾਂ ਜਾਂ ਵਿੰਡੋ ਖੋਲ੍ਹਦਾ ਹੈ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "ਨਵੀਂ ਰਿਪੋਰਟ ਬਣਾਓ", + "description": "Text for button which open an external webpage in Support pane" + }, + "firstRunSectionLabel": { + "message": "ਜੀ ਆਇਆਂ ਨੂੰ", + "description": "The header text for the welcome message section" + }, + "firstRunDescription": { + "message": "ਤੁਸੀਂ ਹੁਣੇ ਹੀ uBO Lite ਨੂੰ ਇੰਸਟਾਲ ਕੀਤਾ ਹੈ। ਤੁਸੀਂ ਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਵਰਤਣ ਵਾਸਤੇ ਮੂਲ ਫਿਲਟਰ ਕਰਨ ਦੇ ਢੰਗ ਨੂੰ ਚੁਣ ਸਕਦੇ ਹੋ।\n\nਮੂਲ ਰੂਪ ਵਿੱਚ ਮੁੱਢਲਾ (Basic) ਢੰਗ ਚੁਣਿਆ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਇਸ ਵਾਸਤੇ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਕਿਸੇ ਵੀ ਮਨਜ਼ੂਰੀ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ uBO Lite ਉੱਤੇ ਭਰੋਸਾ ਹੋਵੇ ਤਾਂ ਤੁਸੀਂ ਇਸ ਨੂੰ ਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਉੱਤੇ ਮੂਲ ਰੂਪ ਵਿੱਚ ਹੀ ਵੱਧ ਤਕਨੀਕੀ ਫਿਲਟਰ ਸਮਰੱਥਾ ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਸਭ ਵੈੱਬਸਾਈਟਾਂ ਉੱਤੇ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਜਿਆਦਾ ਮਨਜ਼ੂਰੀ ਦੇ ਸਕਦੇ ਹੋ।", + "description": "Descriptive text shown at first install time only " + }, + "defaultFilteringModeSectionLabel": { + "message": "ਮੂਲ ਫਿਲਟਰ ਕਰਨ ਦਾ ਢੰਗ", + "description": "The header text for the default filtering mode section" + }, + "defaultFilteringModeDescription": { + "message": "ਮੂਲ ਫਿਲਟਰਿੰਗ ਢੰਗ ਨੂੰ ਹਰ-ਵੈੱਬਸਾਈਟ ਫਿਲਟਰਿੰਗ ਢੰਗਾਂ ਰਾਹੀਂ ਅਣਡਿੱਠਾ ਕੀਤਾ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਵੈੱਬਸਾਈਟ ਲਈ ਫਿਲਟਰ ਕਰਨ ਦੇ ਢੰਗ ਨੂੰ ਉਸ ਵੈੱਬਸਾਈਟ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਕੰਮ ਕਰਦੇ ਢੰਗ ਮੁਤਾਬਕ ਅਡਜੱਸਟ ਕਰ ਸਕਦੇ ਹੋ। ਹਰ ਢੰਗ ਦੇ ਆਪਣੇ ਫਾਇਦੇ ਅਤੇ ਆਪਣੇ ਨੁਕਸਾਨ ਹਨ।", + "description": "This describes the default filtering mode setting" + }, + "filteringMode0Name": { + "message": "ਕੋਈ ਫਿਲਟਰ ਨਹੀਂ ਕਰਨਾ", + "description": "Name of blocking mode 0" + }, + "filteringMode1Name": { + "message": "ਮੁੱਢਲਾ", + "description": "Name of blocking mode 1" + }, + "filteringMode2Name": { + "message": "ਅਨੁਕੂਲ", + "description": "Name of blocking mode 2" + }, + "filteringMode3Name": { + "message": "ਪੂਰਾ", + "description": "Name of blocking mode 3" + }, + "basicFilteringModeDescription": { + "message": "ਚੁਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ ਤੋਂ ਮੁੱਢਲਾ ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਕਰਨਾ।\n\nਵੈੱਬਸਾਈਟਾਂ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਚਾਹੀਦੀ ਹੈ।", + "description": "This describes the 'basic' filtering mode" + }, + "optimalFilteringModeDescription": { + "message": "ਤਕਨੀਕੀ ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਕਰਨ ਤੋਂ ਨਾਲ ਨਾਲ ਚੁਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ ਤੋਂ ਖਾਸ ਵਾਧਾ ਕੀਤੇ ਫਿਲਟਰ।\n\nਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਜਿਆਦਾ ਮਨਜ਼ੂਰੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।", + "description": "This describes the 'optimal' filtering mode" + }, + "completeFilteringModeDescription": { + "message": "ਤਕਨੀਕੀ ਨੈੱਟਵਰਕ ਫਿਲਟਰ ਕਰਨ ਤੋਂ ਨਾਲ ਨਾਲ ਚੁਣੀਆਂ ਫਿਲਟਰ ਸੂਚੀਆਂ ਤੋਂ ਖਾਸ ਵਾਧਾ ਕੀਤੇ ਫਿਲਟਰ।\n\nਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਲਈ ਡਾਟਾ ਪੜ੍ਹਨ ਅਤੇ ਸੋਧਣ ਲਈ ਜਿਆਦਾ ਮਨਜ਼ੂਰੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ।\n\nਆਮ ਵਾਧਾ ਕੀਤੀ ਫਿਲਟਰਿੰਗ ਵੱਧ ਵੈੱਬ-ਸਫ਼ਾ ਸਰੋਤ ਵਰਤੇ ਜਾਣ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੀ ਹੈ।", + "description": "This describes the 'complete' filtering mode" + }, + "noFilteringModeDescription": { + "message": "ਹੋਸਟ-ਨਾਵਾਂ ਦੀ ਸੂਚੀ, ਜਿਨ੍ਹਾਂ ਲਈ ਕੋਈ ਫਿਲਟਰ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, + "behaviorSectionLabel": { + "message": "ਰਵੱਈਆ", + "description": "The header text for the 'Behavior' section" + }, + "autoReloadLabel": { + "message": "ਫਿਲਫਰ ਕਰਨ ਦਾ ਢੰਗ ਬਦਲਣ ਦੇ ਬਾਅਦ ਸਫ਼ੇ ਨੂੰ ਆਪਣੇ-ਆਪ ਲੋਡ ਕਰੋ", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" + } +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pl/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pl/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pl/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pl/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Eksperymentalny, niewymagający uprawnień bloker treści. Natychmiast po instalacji blokuje reklamy, moduły śledzące, koparki i [...]", + "message": "Niewymagający uprawnień bloker treści. Natychmiast po instalacji blokuje reklamy, moduły śledzące, koparki i nie tylko.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Panel sterowania", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Uwaga! Masz niezapisane zmiany", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Zostań", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignoruj", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Ustawienia", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listy filtrów", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Moje filtry", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Zaufane witryny", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "O rozszerzeniu", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Polityka prywatności", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Wyłącz/włącz uBO Lite na tej witrynie", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Otwórz panel sterowania", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Przejdź do trybu usuwania elementów", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Przejdź do trybu zaznaczania elementów", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Tryb filtrowania", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Zgłoś problem z tą stroną", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Kliknij, aby zastosować zmiany na stałe.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kliknij, aby odrzucić zmiany.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Otwórz panel sterowania", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Więcej", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Kliknij, aby przyznać uBO Lite rozszerzone uprawnienia na tej witrynie.\nRozszerzone uprawnienia umożliwiają skuteczniejsze blokowanie treści.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Kliknij, aby cofnąć rozszerzone uprawnienia na tej witrynie", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mniej", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Wyświetlaj liczbę zablokowanych żądań na ikonie rozszerzenia", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Wygląd", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Motyw", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Własny kolor akcentujący", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blokuj raporty CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Włącz rozszerzone filtrowanie na wszystkich witrynach internetowych", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite może zastosować rozszerzone filtrowanie na danej witrynie internetowej tylko po wyraźnym przyznaniu rozszerzeniu uprawnień do modyfikowania danych na tej witrynie. To ustawienie pozwala na przyznanie uprawnień do rozszerzonego filtrowania wszystkich witryn jednocześnie.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Domyślne", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regiony, języki", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "W wierszu może być tylko jeden filtr. Filtrem może być nazwa hosta lub filtr kompatybilny z EasyList. Wiersze poprzedzone znakiem ! będą pomijane.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importuj i dołącz", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksportuj", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-statyczne-filtry_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Wytyczne zaufanych witryn nakazują, na których stronach uBlock Origin powinien zostać wyłączony. Jeden wpis na linię.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importuj i dołącz", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksportuj", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-zaufane-witryny_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Informacje o wydaniu", "description": "" @@ -211,17 +103,69 @@ "message": "Zewnętrzne zależności (kompatybilne z GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Wyślij", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Zastosuj zmiany", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Przywróć", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Zgłoś problem z filtrem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Zgłoś problemy z filtrami dotyczące konkretnych witryn internetowych do systemu śledzenia problemów uBlockOrigin/uAssets. Wymagane jest konto GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Aby uniknąć obciążania wolontariuszy zduplikowanymi zgłoszeniami, sprawdź, czy problem nie został już zgłoszony.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Znajdź podobne raporty", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adres strony internetowej:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Strona internetowa…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "— Wybierz pozycję —", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Wyświetla reklamy lub ich pozostałości", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ma nakładki lub inne niedogodności", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Wykrywa uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ma problemy związane z prywatnością", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Nieprawidłowe działanie po włączeniu uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otwiera niepożądane karty lub okna", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Prowadzi do szkodliwego oprogramowania, phishingu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Oznacz stronę internetową jako „NSFW” („Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Utwórz nowy raport", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Witaj", @@ -267,6 +211,14 @@ "message": "Zaawansowane filtrowanie sieciowe oraz konkretne i ogólne filtrowanie rozszerzone z wybranych list filtrów.\n\nWymaga szerokich uprawnień do odczytu i zmiany danych na wszystkich witrynach internetowych.\n\nOgólne filtrowanie rozszerzone może powodować większe zużycie zasobów przez witryny internetowe.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista nazw hostów, dla których nie będzie stosowane żadne filtrowanie", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[tylko nazwy hostów]\nexample.com\ngry.przykład\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Zachowanie", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatycznie wczytaj ponownie stronę po zmianie trybu filtrowania", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Wyświetlaj liczbę zablokowanych żądań na ikonie paska narzędzi", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Włącz ścisłe blokowanie", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Nawigacja do potencjalnie niepożądanych witryn zostanie zablokowana i pojawi się opcja kontynuowania.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Znajdź listy", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Strona zablokowana", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite nie pozwolił załadować się następującej stronie:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Strona została zablokowana z powodu pasującego filtra na liście {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Zablokowana strona chce przekierować na inną witrynę. Jeśli zdecydujesz się kontynuować, przejdziesz bezpośrednio do: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "bez parametrów", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Wstecz", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Zamknij to okno", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Nie ostrzegaj mnie ponownie o tej witrynie", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Kontynuuj", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pt_BR/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pt_BR/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pt_BR/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pt_BR/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Um bloqueador de conteúdo leve, experimental e sem uso permissões - bloqueie anúncios, rastreadores, mineradores e muito mais [...]", + "message": "Um bloqueador de conteúdo com menos permissões — Bloqueie anúncios, rastreadores, mineradores e mais imediatamente após a instalação", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Painel", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Aviso! Você não salvou as mudanças", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Manter", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorar", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Configurações", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listas de filtros", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Meus filtros", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Sites confiáveis", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Sobre", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Política de privacidade", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Desabilitar/habilitar uBO Lite para este site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Abrir painel", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Entrar no modo de exclusão de elemento", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Entrar no modo de seleção de elemento", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "modo de filtragem", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Reportar um problema com este website", + "message": "Reportar um problema neste site da web", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Clique para tornar suas alterações permanentes.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Clique para reverter suas alterações.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Abrir painel", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mais", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Clique para garantir uBO Lite permissões estendidas para este site.\nPermissões estendidas permitem maior efetividade ao bloqueio de conteúdo.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Clique para revogar permissões estendidas neste site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Menos", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Mostrar o número de solicitações bloqueadas no ícone", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Aparência", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Cor de destaque personalizada", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Bloquear relatórios CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Habilitar filtragem estendida em todos os websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "O uBO Lite pode aplicar filtragem estendida em um determinado site somente após você conceder explicitamente as permissões de extensão para modificar dados nesse site. Essa configuração permite que você conceda permissões para filtragem estendida a todos os sites de uma só vez.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Padrão", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -144,51 +68,19 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Diversos", + "message": "Miscelãnea", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { "message": "Regiões, idiomas", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Um filtro por linha. O filtro pode ser um simples nome de servidor ou um filtro compatível com Adblock Plus. Linhas com prefixo ! serão ignoradas.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importar e adicionar", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportar", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "meus-filtros-estáticos-do-ublock_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "As diretivas dos sites confiáveis ditam em quais páginas da web o uBO Lite deve ser desativado. Uma entrada por linha.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importar e adicionar", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportar", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "meus-sites-confiáveis-do-ublock_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Registro de alterações", + "message": "Changelog", "description": "" }, "aboutCode": { - "message": "Código-fonte (GPLv3)", + "message": "Código fonte (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { @@ -211,24 +103,76 @@ "message": "Dependências externas (compatíveis com GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Enviar", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Aplicar mudanças", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Reverter", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Reportar um problema com o filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Reporte problemas dos filtros com sites da web específicos no rastreador de problemas uBlockOrigin/uAssets. Requer uma conta no GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Pra evitar sobrecarregar os voluntários com relatórios duplicados por favor verifique se o problema já não foi reportado.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Achar relatórios similares", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Endereço da página da web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A página da web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "— Escolha uma entrada —", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra os anúncios ou restos de anúncios", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Tem sobreposições ou outros incômodos", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detecta o uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Tem problemas relacionados a privacidade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Funciona mal quando o uBO Lite está ativado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre abas ou janelas indesejadas", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leva a badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Rotular a página da web como “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Criar novo relatório", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Bem-vindo", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Você acabou de instalar o uBO Lite. Você pode escolher aqui o modo de filtragem padrão para usar em todos os sites.\n\nPor padrão, o modo Básico está selecionado porque não requer permissão para ler e alterar dados. Se você confia no uBO Lite, pode conceder ampla permissão para ler e alterar dados em todos os sites para habilitar recursos de filtragem mais avançados para todos os sites por padrão.", + "message": "Você instalou o uBO Lite. Aqui você pode escolher o modo de filtragem padrão pra usar em todos os sites da web.\n\nPor padrão o modo Básico está selecionado porque não requer permissão pra ler e modificar os dados. Se você confia no uBO Lite você pode dar ampla permissão pra ler e modificar os dados em todos os sites da web de modo a ativar as capacidades de filtragem mais avançadas pra todos os sites da web por padrão.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -236,7 +180,7 @@ "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "O modo de filtragem padrão será substituído pelos modos de filtragem por site. Você pode ajustar o modo de filtragem em qualquer site de acordo com o modo que funcionar melhor nesse site. Cada modo tem suas vantagens e desvantagens.", + "message": "O modo de filtragem padrão será substituído pelos modos de filtragem por site. Você pode ajustar o modo de filtragem em qualquer site dado da web de acordo com qualquer modo que funcionar melhor nesse site da web. Cada modo tem suas vantagens e desvantagens.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { @@ -248,7 +192,7 @@ "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "ótimo", + "message": "otimizado", "description": "Name of blocking mode 2" }, "filteringMode3Name": { @@ -256,23 +200,83 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Filtragem de rede básica de listas de filtros selecionadas.\n\nNão requer permissão para ler e alterar dados em sites.", + "message": "Filtragem básica da rede de listas de filtros selecionadas.\n\nNão requer permissão pra ler e modificar os dados nos sites da web.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Filtragem de rede avançada mais filtragem estendida específica de listas de filtros selecionadas.\n\nRequer ampla permissão para ler e alterar dados em todos os sites.", + "message": "Filtragem avançada da rede mais filtragem estendida específica das listas de filtros selecionadas.\n\nRequer ampla permissão pra ler e modificar os dados em todos os sites da web.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Filtragem de rede avançada mais filtragem estendida específica e genérica de listas de filtros selecionadas.\n\nRequer ampla permissão para ler e alterar dados em todos os sites.\n\nA filtragem estendida genérica pode causar maior uso de recursos da página da Web.", + "message": "Filtragem avançada da rede mais filtragem estendida específica e genérica das listas de filtros selecionadas.\n\nRequer ampla permissão pra ler e modificar os dados em todos os sites da web.\n\nA filtragem estendida genérica pode causar maior uso de recursos da página da web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista de nomes dos hospedeiros para os quais nenhuma filtragem acontecerá.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[só nomes de hospedeiros]\nexemplo.com\njogos.exemplo", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportamento", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Recarregue a página automaticamente ao alterar o modo de filtragem", + "message": "Recarregar a página automaticamente quando mudar o modo de filtragem", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar o número de requisições bloqueadas no ícone da barra de ferramentas", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Ativar bloqueio rigoroso", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "A navegação até sites potencialmente indesejáveis ​​será bloqueada e será oferecido a você a opção de prosseguir.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Achar listas", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Página bloqueada", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "O uBO Lite impediu o carregamento da seguinte página:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "A página foi bloqueada por causa de um filtro que combina no {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "A página bloqueada quer redirecionar para outro site. Se você escolher prosseguir, você navegará diretamente para: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sem parâmetros", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Voltar", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Fechar esta janela", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Não me avise de novo sobre este site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Prosseguir", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pt_PT/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pt_PT/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/pt_PT/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/pt_PT/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Um bloqueador de conteúdo experimental, sem permissões. Bloqueia anúncios, rastreadores, mineiros de criptomoedas e muito mais.", + "message": "Um bloqueador de conteúdo sem permissões. Bloqueia anúncios, rastreadores e muito mais, imediatamente após a instalação.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Painel de controlo", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Aviso! Tem alterações não guardadas", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Ficar", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorar", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Definições", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listas de filtros", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Os meus filtros", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Sites fidedignos", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Acerca", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Política de privacidade", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Desativar/ativar o uBO Lite para este site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Abrir o painel de controlo", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Entrar no modo \"zapper\" de elemento", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Entrar no modo de seleção de elemento", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "modo de filtragem", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Relatar um problema neste website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Clique para tornar as suas alterações permanentes.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Clique para reverter as suas alterações.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Abrir o painel de controlo", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mais", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Clique para conceder ao uBO Lite permissões alargadas neste site.\nAs permissões alargadas permitem um bloqueio de conteúdo mais eficaz.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Clique para revogar as permissões alargadas neste site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Menos", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Mostrar o número de pedidos bloqueados no ícone", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Aparência", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Cor de destaque personalizada", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Bloquear relatórios CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Ativar filtragem alargada em todos os websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "O uBO Lite apenas pode aplicar a filtragem alargada num determinado website após conceder explicitamente as permissões de extensão para modificar dados nesse website. Esta definição permite-lhe conceder permissões de filtragem alargada a todos os websites de uma só vez.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Predefinição", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regiões, idiomas", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Um filtro por linha. Um filtro pode ser um simples nome de anfitrião, ou um filtro compatível com a EasyList. Linhas começadas por ! serão ignoradas.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importar e anexar", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportar", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-custom-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "As diretivas de sites fidedignos determinam em que páginas web o uBO Lite deve ser desativado. Uma entrada por linha.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importar e anexar", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportar", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Registo de alterações", "description": "" @@ -211,17 +103,69 @@ "message": "Dependências externas (compatíveis com GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submeter", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Aplicar alterações", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Reverter", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Relatar um problema de filtro", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Relate problemas de filtros em websites específicos no controlador de problemas uBlockOrigin/uAssets. Requer uma conta GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Para evitar sobrecarregar os voluntários com relatórios duplicados, verifique se o problema ainda não foi relatado.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Encontrar relatórios semelhantes", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Endereço da página web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "A página web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Escolha uma entrada --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Mostra anúncios ou restos de anúncios", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Tem sobreposições ou outros incómodos", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Deteta o uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Tem problemas relacionados com a privacidade", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Falha quando o uBO Lite está ativado", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Abre separadores ou janelas indesejáveis", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leva a badware e phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Classifica a página web como “NSFW” (“Não segura para o trabalho”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Criar novo relatório", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Bem-vindo(a)", @@ -264,15 +208,75 @@ "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Filtragem de rede avançada mais filtragem alargada específica e genérica a partir de listas de filtros selecionadas.\n\nRequer ampla permissão para ler e modificar dados em todos os websites.\n\nA filtragem alargada genérica pode causar uma maior utilização de recursos das páginas web.", + "message": "Filtragem de rede avançada acrescida de filtragem alargada específica e genérica a partir de listas de filtros selecionadas.\n\nRequer permissão ampla para ler e modificar dados em todos os websites.\n\nA filtragem alargada genérica pode causar uma maior utilização de recursos das páginas web.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista de nomes de websites para os quais não será efetuada qualquer filtragem.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[apenas nomes de anfitriões]\nexemplo.com\njogos.exemplo\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportamento", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Recarrega automaticamente a página ao mudar o modo de filtragem", + "message": "Recarregar automaticamente a página ao mudar o modo de filtragem", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Mostrar o número de pedidos bloqueados no ícone da barra de ferramentas", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Ativar bloqueio estrito", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "A navegação para sites potencialmente indesejáveis será bloqueada e ser-lhe-á dada a opção de proceder.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Encontrar listas", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Página bloqueada", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "O uBO Lite impediu a seguinte página de ser carregada:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "A página foi bloqueada devido a um filtro correspondente em {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "A página bloqueada pretende redirecionar para outro site. Se optar por proceder, navegará diretamente para: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "sem parâmetros", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Voltar", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Fechar esta janela", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Não me avisar novamente acerca deste site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceder", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ro/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ro/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ro/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ro/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ { "extName": { - "message": "ubock Origin Lite", + "message": "uBlock Origin Lite", "description": "extension name." }, "extShortDesc": { @@ -8,41 +8,17 @@ "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} de reguli convertite din {{filterCount}} filtre de rețea", + "message": "{{ruleCount}} de reguli, convertite din {{filterCount}} filtre de rețea", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { "message": "uBO Lite — Panou de control", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Atenție! Ai modificări nesalvate", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Așteaptă", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignoră", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Opțiuni", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Liste de filtre", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Filtrele mele", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Situri de încredere", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Despre", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Politică de confidențialitate", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Dezactivează/Activează uBO Lite pentru acest sit", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Deschide panoul de control", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Elimină un element", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Alege un element", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Mod de filtrare", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Raportează o eroare cu acest sit web", + "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Apasă pentru a face modificările permanente.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Apasă pentru a renunța la modificări.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Deschide panoul de control", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mai mult", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Apasă pentru a acorda uBO Lite permisiuni extinse pentru acest sit.\nAcestea sunt mai eficiente pentru blocarea conținutului.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Apasă pentru a revoca permisiunile extinse pentru acest sit.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mai puțin", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Arată numărul cererilor blocate pe simbolul extensiei", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Aspect", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Aspect", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Culoare de accentuare personalizată", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blochează rapoartele CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Activează filtrarea extinsă pe toate site-urile web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite poate aplica filtrarea extinsă pentru un anumit sit web numai după ce s-au acordat în mod explicit extensiei permisiunile de modificare a datelor de pe acel sit web. Această reglare permite acordarea de permisiuni pentru filtrarea extinsă a tuturor siturilor web simultan.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Implicit", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regiuni, limbi", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Un filtru pe linie. Un filtru poate fi un simplu nume de gazdă sau un filtru compatibil EasyList. Liniile precedate de ! vor fi ignorate.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importă și adaugă", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportă", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "filtrele-mele-statice-ublock_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Directivele privind siturile de încredere stabilesc pe ce pagini web trebuie dezactivat uBO Lite. O intrare pe linie.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importă și adaugă", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportă", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "situri-de-încredere-ublock_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Jurnal de modificări", "description": "" @@ -211,24 +103,76 @@ "message": "Dependențe externe (compatibile GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Trimite", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Aplică modificările", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Înlătură", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Bun venit", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Tocmai ați instalat uBO Lite. Aici puteți alege modul de filtrare implicit pe toate site-urile.\n\nImplicit, modul de bază,/em> este selectat întrucât nu necesită permisiuni pentru a citi și modifica date. Dacă aveți încredere în uBO Lite, puteți să-i acordați permisiuni sporite pentru a citi și modifica datele tututor sitte-rilor pentru a activa capabilități mai avansate de filtrare.", + "message": "Tocmai ați instalat uBO Lite. Aici puteți alege modul de filtrare implicit pe toate site-urile.\n\nImplicit, modul de bază este selectat întrucât nu necesită permisiuni pentru a citi și modifica date. Dacă aveți încredere în uBO Lite, puteți să-i acordați permisiuni sporite pentru a citi și modifica datele tututor sitte-rilor pentru a activa capabilități mai avansate de filtrare.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -267,6 +211,14 @@ "message": "Filtrare de rețea avansată plus filtrare extinsă specifică și generică de la liste de filtre selectate.\n\nNecesită permisiune vagă pentru a citi și modifica date pe toate site-urile web.\n\nFiltrarea generică extinsă poate cauza mai multă utilizare de resurse la nivel de pagină web.\n", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista numelor site-urilor pentru care nu se va face filtrare", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Comportament", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Reîncărcare automată a paginii la schimbarea modului de filtrare", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Arată numărul cererilor blocate pe simbolul extensiei", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ru/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ru/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ru/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ru/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Экспериментальный облегчённый блокировщик контента, не требующий разрешений. Блокирует рекламу, трекеры, майнеры и многое другое.", + "message": "Блокировщик контента, не требующий разрешений. Сразу после инсталляции блокирует рекламу, трекеры, майнеры и многое другое.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Панель управления", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Внимание! У вас есть несохранённые изменения", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Остаться", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Игнорировать", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Настройки", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Списки фильтров", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Мои фильтры", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Доверенные сайты", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "О расширении", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Политика конфиденциальности", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Отключить/включить uBO Lite для этого сайта", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Открыть панель управления", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Режим мгновенного временного скрытия элемента", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Войти в режим выбора элементов", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "режим фильтрации", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Сообщить о проблеме на данном сайте", + "message": "Сообщить о проблеме на этом сайте", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Нажмите, чтобы сохранить изменения.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Нажмите, чтобы отменить изменения.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Открыть панель управления", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Больше", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Нажмите, чтобы предоставить uBO Lite дополнительные разрешения на этом сайте.\nДополнительные разрешения позволяют эффективнее блокировать контент.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Нажмите, чтобы отозвать дополнительные разрешения на этом сайте", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Меньше", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Показывать количество заблокированных запросов на иконке", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Внешний вид", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Тема", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Пользовательский цветовой акцент", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Блокировать CSP отчеты", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Включить расширенную фильтрацию на всех веб-сайтах", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite может применять расширенную фильтрацию на данном веб-сайте только после того, как вы явно предоставите расширению разрешения на изменение данных на этом веб-сайте. Этот параметр позволяет вам предоставлять разрешения на расширенную фильтрацию сразу всем веб-сайтам.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "По умолчанию", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Регионы, языки", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Одно правило на строку. Правилом может быть имя сайта, или EasyList-совместимый фильтр. Строки, начинающиеся с !, будут проигнорированы.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Импортировать и добавить", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Экспортировать", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Записи доверенных сайтов указывают на каких веб-страницах uBO Lite должен быть отключён. Одна запись на строку.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Импортировать и добавить", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Экспортировать", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Список изменений", "description": "" @@ -208,20 +100,72 @@ "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "Внешние зависимости (GPLv3-совместимые):", + "message": "Внешние зависимости (совместимые с GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Подтвердить", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Применить изменения", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Вернуть", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Сообщить о проблеме в фильтре", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Сообщайте о проблемах с фильтрами на определённых сайтах в трекер ошибок uBlockOrigin/uAssets. Требуется учётная запись в GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Чтобы не обременять волонтеров повторяющимися отчетами, пожалуйста, убедитесь, что о данной проблеме еще не сообщали.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Найти похожие отчеты", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адрес веб-страницы:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Веб-страница…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Выберите категорию --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Показывается реклама или ее заполнители", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Всплывающие окна или другие помехи", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Обнаруживается uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Проблемы, связанные с приватностью", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Неполадки при работе uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Открываются нежелательные вкладки или окна", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Вредоносное ПО, фишинг", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Пометить эту страницу «небезопасной для просмотра на работе» («NSFW»)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Создать новый отчет", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Добро пожаловать", @@ -267,6 +211,14 @@ "message": "Расширенная сетевая фильтрация вместе со специальной, и усиленной общей фильтрацией по выбранным спискам фильтров.\n\nТребуется разрешение на чтение и изменение данных на всех веб-сайтах.\n\nУсиленная общая фильтрация может стать причиной повышенного потребления ресурсов веб-страницей.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Список имён хостов, для которых не будет производиться фильтрация.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[только имена хостов]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Поведение", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Автоматически перезагружать страницу при изменении режима фильтрации", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Показывать количество заблокированных запросов на иконке в панели инструментов", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Включить строгую блокировку", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Переход к потенциально нежелательным сайтам будет заблокирован, и будет дана возможность продолжить переход на сайт", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Найти списки", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Страница заблокирована", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite предотвратил загрузку следующей страницы:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Веб-страница была заблокирована из-за попадания в фильтр из {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Заблокированная страница собирается перенаправить вас на другой сайт. Если вы решите продолжить, вы перейдете непосредственно на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "без параметров", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Назад", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Закрыть это окно", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Больше не предупреждать меня об этом сайте", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Продолжить", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/si/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/si/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/si/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/si/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,227 +4,171 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "අවසර අනවශ්‍ය අන්තර්ගත අවහිරකය. ස්ථාපනය කළ වහාම දැන්වීම්, ලුහුබැඳීම්, කැණීම් සහ තවත් දෑ අවහිර කරයි.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rules, converted from {{filterCount}} network filters", + "message": "නීති {{ruleCount}} ක් ජාල පෙරහන් {{filterCount}} කින් හරවා ඇත", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBO Lite — Dashboard", + "message": "uBO Lite - උපකරණ පුවරුව", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "සැකසුම්", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "පිළිබඳ", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "රහස්‍යතා ප්‍රතිපත්තිය", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "පෙරීමේ ප්‍රකාරය", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Report an issue on this website", + "message": "මෙම අඩවියේ ගැටලුවක් වාර්තා කරන්න", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "උපකරණ පුවරුව අරින්න", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "තව", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "අඩුවෙන්", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "පෙරනිමි", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "දැන්වීම්", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "පෞද්ගලිකත්‍වය", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "ද්වේශාංග වසම්", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "පීඩාකාරී", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "වෙනත්", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "කලාපීය, භාෂා", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "වෙනස්කම් සටහන", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "මූලාශ්‍ර කේත (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "දායකයින්", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "මූලාශ්‍ර කේත", "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "පරිවර්තන", "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "පෙරහන් ලැයිස්තු", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "බාහිර පරායත්ත (GPLv3-අනුකූල):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "පෙරහන් ගැටලු වාර්තා කරන්න", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "සමාන වාර්තා සොයන්න", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "අඩවියේ ලිපිනය:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "වියමන පිටුව…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- නිවේශිතයක් තෝරන්න --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBO Lite අනාවරණය කරයි", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "අනවශ්‍ය පටිති හෝ කවුළු අරියි", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "නව වාර්තාවක් සාදන්න", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "සාදරයෙන් පිළිගනිමු", "description": "The header text for the welcome message section" }, "firstRunDescription": { @@ -232,7 +176,7 @@ "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "පෙරනිමි පෙරීමේ ප්‍රකාරය", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { @@ -240,19 +184,19 @@ "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "පෙරීමක් නැත", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "මූලික", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "ප්‍රශස්ත", "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "complete", + "message": "සම්පූර්ණ", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { @@ -267,12 +211,72 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "පෙරීමක් නොවන අඩවි ලැයිස්තුව.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[සත්කාරක පමණි]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "හැසිරීම", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "පෙරීමේ ප්‍රකාරය වෙනස් වූ විට පිටුව ස්වයංක්‍රීයව යළි පූරණය කරන්න", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "මෙවලම් තීරු නිරූපකයේ අවහිර කළ ඉල්ලීම් ගණන පෙන්වන්න", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sk/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sk/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sk/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sk/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Experimentálny blokátor obsahu bez povolení – predvolene blokuje reklamy, sledovacie programy, minery a ďalšie.", + "message": "Experimentálny blokátor obsahu bez povolení. Okamžite po inštalácii zablokuje reklamy, sledovacie programy, minery a ďalšie.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -12,37 +12,13 @@ "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { - "message": "uBlock Lite — Ovládací panel", + "message": "uBO Lite — Ovládací panel", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Upozornenie! Máte neuložené zmeny", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Zostať", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorovať", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Nastavenia", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Zoznam filtrov", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Moje filtre", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Dôveryhodné stránky", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "O doplnku", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Zásady ochrany osobných údajov", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Zakázať/povoliť uBO Lite pre túto stránku", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Otvoriť ovládací panel", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Prejsť do režimu výberu prvku", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Prejsť do režimu výberu prvku", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Režim filtrovania", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Nahlásiť problém na tejto webovej stránke", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Kliknutím použijete vaše zmeny.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kliknutím vrátite vaše zmeny.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Otvoriť ovládací panel", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Viac", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Kliknutím udelíte uBO Lite rozšírené oprávnenia na tejto stránke.\nRozšírené oprávnenia umožňujú účinnejšie blokovanie obsahu.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Kliknutím zrušíte rozšírené oprávnenia na tejto stránke", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Menej", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Zobraziť počet zablokovaných požiadaviek na ikone", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Vzhľad", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Téma", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Vlastná farba témy", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Zablokovať CSP hlásenia", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Povoliť rozšírené filtrovanie na všetkých webových stránkach", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite môže na danú webovú lokalitu použiť rozšírené filtrovanie len po tom, ako rozšíreniu výslovne udelíte oprávnenia na úpravu údajov na danej webovej lokalite. Toto nastavenie umožňuje udeliť oprávnenia na rozšírené filtrovanie všetkým webovým stránkam naraz.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Predvolené", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regióny, jazyky", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Jeden filter na riadok. Filter môže byť jednoduchý názov hostiteľa alebo filter kompatibilný s Adblock Plus. Riadky začínajúce s ! budú ignorované.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importovať a pripojiť", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportovať", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-moje-statické-filtre_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Zoznam dôveryhodných stránok pre ktoré bude uBO Lite zakázaný. Jedna položka na riadok.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importovať a pripojiť", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportovať", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-doveryhodne-stranky_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Zoznam zmien", "description": "" @@ -211,24 +103,76 @@ "message": "Externé závislosti (kompatibilné s GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Poslať", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Použiť zmeny", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Vrátiť", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Nahlásiť problém s filtrom", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Nahlásenie problémov s filtrom s konkrétnymi webovými stránkami na uBlockOrigin/uAssets issue tracker. Vyžaduje sa GitHub účet.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Aby ste dobrovoľníkov nezaťažovali duplicitnými hláseniami, overte si, či už problém nebol nahlásený.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Vyhľadať podobné hlásenia", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa webovej stránky:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Webová stránka…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Vyberte položku --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Zobrazuje reklamy alebo zvyšky reklám", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Je prekrytá alebo má iné nedostatky", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detegovaný uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Má problémy súvisiace so súkromím", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Poruchy pri povolenom uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Otvára nechcené karty alebo okná", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Smeruje k badvéru a phishingu", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Označiť webovú stránku ako \"NSFW\" (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Vytvoriť nové hlásenie", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Vitajte", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Práve ste nainštalovali uBO Lite. Tu si môžete vybrať predvolený režim filtrovania, ktorý sa má používať na všetkých webových stránkach.\n\nV predvolenom nastavení je zvolený režim Základný, pretože nevyžaduje povolenie na čítanie a zmenu údajov. Ak dôverujete rozšíreniu uBO Lite , môžete mu udeliť všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach, aby ste v predvolenom nastavení umožnili pokročilejšie možnosti filtrovania všetkých webových stránok.", + "message": "Práve ste nainštalovali uBO Lite. Tu si môžete vybrať predvolený režim filtrovania, ktorý sa má používať na všetkých webových stránkach.\n\nV predvolenom nastavení je zvolený režim Základný, pretože nevyžaduje povolenie na čítanie a zmenu údajov. Ak dôverujete rozšíreniu uBO Lite, môžete mu udeliť všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach, aby ste v predvolenom nastavení umožnili pokročilejšie možnosti filtrovania všetkých webových stránok.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -256,17 +200,25 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Základné filtrovanie siete z vybraných zoznamov filtrov.\n\nNevyžaduje povolenie na čítanie a zmenu údajov na webových stránkach.", + "message": "Základné sieťové filtrovanie z vybraných zoznamov filtrov.\n\nNevyžaduje povolenie na čítanie a zmenu údajov na webových stránkach.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Pokročilé filtrovanie siete a špecifické rozšírené filtrovanie z vybraných zoznamov filtrov.\n\nVyžaduje všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach.", + "message": "Pokročilé sieťové filtrovanie a špecifické rozšírené filtrovanie z vybraných zoznamov filtrov.\n\nVyžaduje všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Pokročilé filtrovanie siete plus špecifické a všeobecné rozšírené filtrovanie z vybraných zoznamov filtrov.\n\nVyžaduje všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach.\n\nVšeobecné rozšírené filtrovanie môže spôsobiť vyššie využitie zdrojov webovej stránky.", + "message": "Pokročilé sieťové filtrovanie plus špecifické a generické rozšírené filtrovanie z vybraných zoznamov filtrov.\n\nVyžaduje všeobecné oprávnenie na čítanie a zmenu údajov na všetkých webových stránkach.\n\nGenerické rozšírené filtrovanie môže spôsobiť vyššie využitie zdrojov webovej stránky.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Zoznam názvov hostiteľov s vylúčeným filtrovaním", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[len názvy hostiteľov]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Správanie", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automaticky znova načítať stránku pri zmene režimu filtrovania", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Zobraziť počet zablokovaných požiadaviek na ikone rozšírenia", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Povoliť prísne blokovanie", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigácia na potenciálne nežiaduce stránky sa zablokuje a ponúkne sa vám možnosť pokračovať.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Nájsť zoznamy", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Zablokovaná stránka", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite zabránil načítaniu nasledujúcej stránky:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Stránka bola zablokovaná z dôvodu zhodného filtra v{{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Zablokovaná stránka chce presmerovať na inú stránku. Ak sa rozhodnete pokračovať, prejdete priamo na: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "bez parametrov", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Naspäť", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Zatvoriť toto okno", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Už ma na túto stránku neupozorňovať", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Pokračovať", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sl/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sl/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sl/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sl/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/so/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/so/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/so/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/so/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sq/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sq/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sq/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sq/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,45 +4,21 @@ "description": "extension name." }, "extShortDesc": { - "message": "Një bllokues eksperimental që bllokon në mënyrë të pavarur reklamat, gjurmuesit, kriptominatorët etj. menjëherë pas instalimit.", + "message": "Një bllokues që bllokon në mënyrë të pavarur reklamat, gjurmuesit, kriptominatorët etj. menjëherë pas instalimit.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} rregulla të konvertuara nga {{filterCount}} filtra rrjeti", + "message": "{{ruleCount}} rregulla sipas {{filterCount}} filtrave", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { "message": "uBO Lite — Paneli i kontrollit", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Kujdes! Nuk keni ruajtur ndryshimet", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Qëndroj", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Shpërfill", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Parametrat", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Listat e filtrave", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Filtrat e mi", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Faqet e besuara", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Info", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Politika e privatësisë", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Ç/Aktivizoj uBO Lite te ky uebsajti", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Hap panelin e kontrollit", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Asgjësuesi i elementeve", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Përzgjedhësi i elementeve", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "mënyra e filtrimit", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Raportoj problemin me uebsajtin", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Ruaj përgjithnjë ndryshimet.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Kthej ndryshimet.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Hapni panelin e kontrollit", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Më shumë", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klikoni për t'i dhënë uBO Lite leje të posaçme për uebsajtin.\nLejet e posaçme mundësojnë një bllokim më efektiv të materialeve.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klikoni për të revokuar lejet e posaçme për uebsajtin.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Më pak", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Shfaq te ikona numrin e kërkesave të bllokuara", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Paraqitja", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Motivi", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Personalizoj ngjyrën e theksuar", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Bllokoj raportet e CSP-së", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Lejoj filtrimin më të plotë të uebsajteve", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite mund të filtrojë më mirë kur i jepni leje të posaçme për modifikimin e të dhënave të uebsajteve. Ky parametër mundëson dhënien e lejeve të posaçme për një filtrim më të plotë dhe të menjëhershëm të të gjitha uebsajteve.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standarde", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Sipas rajonit, gjuhës", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Një filtër për rresht. Filtri mund të jetë thjesht emri i një hosti ose si ata që përdor EasyList. Nuk do të merren parasysh rreshtat që fillojnë me !.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importoj dhe shtoj", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Eksportoj", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Kjo listë paraqet faqet e besuara të internetit në të cilat uBO Lite duhet çaktivizuar. Një element për rresht.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importoj dhe shtoj", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Eksportoj", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Ditari i ndryshimeve", "description": "" @@ -211,17 +103,69 @@ "message": "Programet kushtëzuese (sipas GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Parashtroj", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Ruaj ndryshimet", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Rikthej", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Raportoni problemet me filtrat", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Problemet e disa faqeve me filtrat duhen raportuar në ditarin e problemeve uBlockOrigin/uAssets. Duhet një konto GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Verifikoni a është raportuar më parë problemi që të mos i lodhni vullnetarët e tjerë me të njëjtat gjëra.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Gjej raporte të ngjashme", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Adresa e uebsajtit:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Uebsajti…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Zgjidhni --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shfaq reklama ose pjesë reklamash", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Ka mbivendosje ose parregullsi të tjera", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Zbulon uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Ka probleme me ruajtjen e privatësisë", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Punon keq kur uBO Lite është i aktivizuar", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Hap skeda ose dritare të panevojshme", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Çon te programet keqdashëse, mashtruese", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Etiketoni faqen e internetit si “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Krijoj raport të ri", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Përshëndetje", @@ -236,7 +180,7 @@ "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "Mënyra standarde e filtrimit mund të ndryshohet në çdo kohë, në varësi të kërkesave që kanë uebsajte të caktuara. Secila mënyrë ka avantazhet dhe disavantazhet e veta.", + "message": "Mënyra standarde e filtrimit mund të ndryshohet në çdo kohë sipas kërkesave që kanë uebsajte të caktuara. Secila mënyrë ka avantazhet dhe disavantazhet e veta.", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { @@ -267,6 +211,14 @@ "message": "Filtrat e avancuar të rrjetit plus filtrat e posaçëm jospecifikë nga listat e përzgjedhura.\n\nDuhen leje shtesë për leximin dhe modifikimin e të dhënave në të gjitha uebsajtet.\n\nFiltrat e posaçëm jospecifikë mund ta rëndojnë hapjen e faqeve në internet.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista e uebsajteve që nuk do të kalojnë në filtër.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[vetëm emrat e hosteve]\nshembull.com\nlojera.shembull\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Sjellja", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Freskoj automatikisht faqen kur ndryshoj mënyrën e filtrimit", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Shfaq numrin e kërkesave të bllokuara në ikonën e instrumenteve", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Aktivizoj bllokimin strikt", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Uebsajtet potencialisht të padëshirueshme do të bllokohen dhe do t'ju jepet mundësia për të vazhduar.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Gjej listat", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Faqe e bllokuar", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite pengoi hapjen e faqes vijuese:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Faqja u bllokua për shkak se përputhet me filtrin në {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Faqja e bllokuar do t'ju drejtojë në një uebsajt tjetër. Në rast se pranoni do të shkoni direkt te: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "pa parametra", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Kthehem", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Mbyll dritaren", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Mos më lajmëro për këtë faqen", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Vazhdoj", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sr/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sr/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sr/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sr/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Експериментални блокатор садржаја који не захтева дозволе. Блокира рекламе, праћења, рударе криптовалута и друго.", + "message": "Блокатор садржаја који не захтева дозволе. Блокира рекламе, праћења, рударе криптовалута и друго.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Контролна табла", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Упозорење! Имате несачуване промене", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Остани", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Занемари", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Подешавања", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Листе филтера", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Моји филтери", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Поуздани сајтови", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "О апликацији", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Политика приватности", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Онемогући/омогући uBO Lite за овај сајт", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Отвори контролну таблу", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Уђи у режим уклањања елемената", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Уђи у режим избора елемената", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "режим филтрирања", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Пријавите проблем на овом веб сајту", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Кликните да бисте своје промене учинили трајним.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Кликните да бисте вратили промене.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Отвори контролну таблу", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Више", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Кликните да бисте uBO Lite доделили проширене дозволе на овом сајту.\nПроширене дозволе омогућују ефикасније блокирање садржаја.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Кликните да бисте опозвали проширене дозволе на овом сајту.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Мање", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Прикажи број блокираних захтева на иконици", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Изглед", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Тема", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Прилагођена наглашена боја", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Блокирај CSP извештаје", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Омогући проширено филтрирање на свим веб сајтовима", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite може да примени проширено филтрирање на датом веб сајту само након што изричито доделите дозволе проширењу за измену података на том веб сајту. Ово подешавање вам омогућује да доделите дозволе за проширено филтрирање на свим веб сајтовима одједном.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Подразумевано", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Регионални, језички", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Један филтер по реду. Филтер може бити обично име хоста или филтер компатибилан са EasyList-ом. Редови са префиксом ! ће бити занемарени.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Увези и додај", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Извези", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "моји-ublock-статични-филтери_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Смернице поузданих сајтова диктирају на којим веб страницама uBO Lite треба да буде онемогућен. Један унос по реду.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Увези и додај", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Извези", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "моји-ublock-поуздани-сајтови{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Списак измена", "description": "" @@ -211,17 +103,69 @@ "message": "Спољне зависности (компатибилно са GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Проследи", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Примени промене", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Врати", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Пријављивање проблема са филтером", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Пријавите проблеме са филтерима на одређеним веб сајтовима на uBlockOrigin/uAssets issue tracker. Захтева GitHub налог.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Да не бисте оптерећивали волонтере дуплим извештајима, проверите да ли је проблем већ пријављен.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Пронађи сличне извештаје", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адреса веб странице:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Веб страница...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Приказује рекламе или остатке реклама", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Има преклапања или друге сметње", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Детектује uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Кварови када је uBO Lite омогућен", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Отвара нежељене картице или прозоре", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Води до лошег софтвера, „пецања\"", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Означи веб страницу као „NSFW” („Није безбедно за рад”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Креирај нови извештај", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Добродошли", @@ -267,6 +211,14 @@ "message": "Напредно мрежно и специфично и генеричко проширено филтрирање са изабраних листа филтера.\n\nЗахтева широку дозволу за читање и мењање података на свим сајтовима.\n\nГенеричко филтрирање може довести до већег коришћења ресурса веб странице.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Листа веб сајтова за које се неће вршити филтрирање", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[само имена хостова]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Понашање", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Аутоматски поново учитај страницу при промени режима филтрирања", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Прикажи број блокираних захтева на иконици на траци алата", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Омогући строго блокирање", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Навигација до потенцијално непожељних сајтова ће бити блокирана и биће вам понуђена опција да наставите.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Пронађи листе", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Страница је блокирана", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite је спречио учитавање следеће странице:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "без параметара", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Иди назад", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Затвори овај прозор", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Не упозоравај ме поново на ову страницу", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Настави", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sv/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sv/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sv/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sv/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "En experimentell blockerare. Blockerar annonser, spårare, miners och mer omedelbart efter installationen.", + "message": "En behörighetslös innehållsblockerare. Blockerar annonser, spårare, miners och mer omedelbart efter installationen.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Kontrollpanel", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Varning! Du har inte sparat dina ändringar", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stanna kvar", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignorera", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Inställningar", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filterlistor", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Mina filter", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Pålitliga webbplatser", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Om", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Integritetspolicy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Inaktivera/aktivera uBO Lite för den här sidan", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Öppna kontrollpanelen", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Gå till elementzapperläge", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Gå till elementväljarläge", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtreringsläge", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Rapportera ett problem på denna webbplats", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Klicka för att göra ändringarna permanenta.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Klicka för att ångra dina ändringar.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Öppna kontrollpanelen", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mer", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Klicka för att ge uBO Lite utökade behörigheter på den här webbplatsen.\nMed utökade behörigheter blir innehållsblockering mer effektiv.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Klicka för att återkalla utökade behörigheter på den här webbplatsen", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Mindre", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Visa antalet blockerade förfrågningar på ikonen", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Utseende", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Anpassad accentfärg", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Blockera CSP-rapporter", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Aktivera utökad filtrering på alla webbplatser", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite kan endast använda utökad filtrering på en given webbplats efter att du uttryckligen har gett tilläggsbehörighet att ändra data på den webbplatsen. Med den här inställningen kan du ge behörigheter för utökad filtrering till alla webbplatser samtidigt.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Standard", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Regioner, språk", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Ett filter per rad. Ett filter kan vara ett vanligt värdnamn eller ett EasyList-kompatibelt filter. Rader med prefixet ! ignoreras.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Importera och lägg till", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Exportera", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "mina-ublock-statiska-filter_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Direktiven för betrodda webbplatser anger vilka webbsidor som uBlock Origin ska inaktiveras på. En post per rad.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Importera och lägg till", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Exportera", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "mina-ublock-pålitliga-webbplatser_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Ändringslogg", "description": "" @@ -211,17 +103,69 @@ "message": "Externa beroenden (GPLv3-kompatibla):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Skicka", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Verkställ ändringar", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Ångra", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Rapportera ett filterproblem", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Rapportera filterproblem med specifika webbplatser till uBlockOrigin/uAssets problemhanteringssystemet. Kräver ett GitHub-konto.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "För att undvika att belasta volontärer med dubbletter av rapporter, kontrollera att problemet inte redan har rapporterats.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Hitta liknande rapporter", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Hemsidans adress:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Hemsidan...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Välj en post --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Visar annonser eller rester av annonser", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Har överlägg eller andra olägenheter", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Upptäcker uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Har integritetsrelaterade problem", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Fungerar inte när uBO Lite är aktiverad", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Öppnar oönskade flikar eller fönster", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leder till skadlig programvara, nätfiske", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Märk webbsidan som “NSFW” (“Inte lämplig på jobbet”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Skapa ny rapport", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Välkommen", @@ -267,6 +211,14 @@ "message": "Avancerad nätverksfiltrering plus specifik och allmän utökad filtrering från utvalda filterlistor.\n\nKräver bred behörighet för att läsa och ändra data på alla webbplatser.\n\nAllmän utökad filtrering kan orsaka högre användning av webbsidors resurser.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Lista över värdnamn som inte kommer att filtreras", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[endast värdnamn]\nexempel.se\nspel.exempel\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Beteende", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Ladda automatiskt om sidan när du byter filtreringsläge", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Visa antalet blockerade förfrågningar på verktygsfältsikonen", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Aktivera strikt blockering", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigering till potentiellt oönskade webbplatser kommer att blockeras och du kommer att erbjudas alternativet att fortsätta.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Hitta listor", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Sidan blockerad", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite har förhindrat följande sida från att läsas in:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Sidan har blockerats på grund av ett matchande filter i {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Den blockerade sidan vill omdirigera till en annan webbplats. Om du väljer att fortsätta skickas du direkt till: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "utan parametrar", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Gå tillbaka", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Stäng det här fönstret", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Varna mig inte igen om den här sidan", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Fortsätt", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sw/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sw/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/sw/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/sw/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ta/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ta/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ta/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ta/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Settings", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "About", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Privacy policy", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "filtering mode", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -267,6 +211,14 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Behavior", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Automatically reload page when changing filtering mode", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/te/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/te/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/te/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/te/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,128 +15,52 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "ఐచ్చికాలు", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "మా గురించి", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "గోప్యతా", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "వడపోత మోడ్", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "డాష్‌బోర్డ్‌ను తెరవండి", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "మరిన్ని", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "తక్కువ", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "డిఫాల్ట్", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "ప్రకటనలు", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "గోప్యత", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,38 +75,6 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Changelog", "description": "" @@ -211,17 +103,69 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Welcome", @@ -256,23 +200,83 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "ఎంచుకున్న ఫిల్టర్ జాబితాల నుండి ప్రాథమిక నెట్‌వర్క్ ఫిల్టరింగ్.\n\nవెబ్‌సైట్‌లలో డేటాను చదవడానికి మరియు సవరించడానికి అనుమతి అవసరం లేదు.", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "ఎంచుకున్న ఫిల్టర్ జాబితాల నుండి అధునాతన నెట్‌వర్క్ ఫిల్టరింగ్ మరియు నిర్దిష్ట పొడిగించిన ఫిల్టరింగ్.\n\nఅన్ని వెబ్‌సైట్‌లలోని డేటాను చదవడానికి మరియు సవరించడానికి విస్తృత అనుమతి అవసరం.", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "ఎంచుకున్న ఫిల్టర్ జాబితాల నుండి అధునాతన నెట్‌వర్క్ ఫిల్టరింగ్ మరియు నిర్దిష్ట మరియు సాధారణ పొడిగించిన ఫిల్టరింగ్.\n\nఅన్ని వెబ్‌సైట్‌లలోని డేటాను చదవడానికి మరియు సవరించడానికి విస్తృత అనుమతి అవసరం.\n\nసాధారణ పొడిగించిన వడపోత అధిక వెబ్‌పేజీ వనరుల వినియోగానికి కారణం కావచ్చు.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "వడపోత జరగని హోస్ట్ పేర్ల జాబితా", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "ప్రవర్తన", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "ఫిల్టరింగ్ మోడ్‌ను మార్చేటప్పుడు పేజీని స్వయంచాలకంగా రీలోడ్ చేయండి", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Show the number of blocked requests on the toolbar icon", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/th/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/th/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/th/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/th/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "An experimental, permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", + "message": "A permission-less content blocker. Blocks ads, trackers, miners, and more immediately upon installation.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,120 +15,44 @@ "message": "uBO Lite — Dashboard", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Warning! You have unsaved changes", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Stay", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ignore", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { - "message": "Settings", - "description": "appears as tab name in dashboard" - }, - "3pPageName": { - "message": "Filter lists", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "My filters", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trusted sites", + "message": "การตั้งค่า", "description": "appears as tab name in dashboard" }, "aboutPageName": { - "message": "About", + "message": "เกี่ยวกับเรา", "description": "appears as tab name in dashboard" }, "aboutPrivacyPolicy": { - "message": "Privacy policy", + "message": "นโยบายความเป็นส่วนตัว", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "โหมดตัวกรอง", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Open the dashboard", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "More", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Less", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Default", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "โฆษณา", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { @@ -136,7 +60,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { @@ -151,40 +75,8 @@ "message": "Regions, languages", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "บันทึการเปลี่ยนแปลง", "description": "" }, "aboutCode": { @@ -200,7 +92,7 @@ "description": "Link text to source code repo" }, "aboutTranslations": { - "message": "Translations", + "message": "แปล", "description": "Link text to translations repo" }, "aboutFilterLists": { @@ -211,28 +103,80 @@ "message": "External dependencies (GPLv3-compatible):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "สร้างรายงานใหม่", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "ยินดีต้อนรับ", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "คุณเพิ่งติดตั้ง uBO Lite คุณสามารถเลือกโหมดการกรอง (ค่าเริ่มต้น) ที่จะใช้กับเว็บไซต์ทั้งหมดได้ที่นี่\n\nตามค่าเริ่มต้น โหมด พื้นฐาน จะถูกเลือกเนื่องจากไม่จำเป็นต้องมีสิทธิ์ในการอ่านและแก้ไขข้อมูล หากคุณไว้วางใจ uBO Lite คุณสามารถให้สิทธิ์ในการอ่านและแก้ไขข้อมูลบนเว็บไซต์ทั้งหมดได้ เพื่อเปิดใช้งานคุณสมบัติการกรองข้อมูลขั้นสูงสำหรับเว็บไซต์ทั้งหมดตามค่าเริ่มต้น", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "โหมดการกรองเริ่มต้น", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { @@ -244,7 +188,7 @@ "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "พื้นฐาน", "description": "Name of blocking mode 1" }, "filteringMode2Name": { @@ -267,12 +211,72 @@ "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "List of websites for which no filtering will take place.", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "ลักษณะการทำงาน", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "โหลดหน้าเว็บใหม่อัตโนมัติเมื่อเปลี่ยนโหมดการกรอง", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "แสดงจำนวนคำขอที่ถูกปิดกั้นบนไอคอนแถบเครื่องมือ", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/tr/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/tr/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/tr/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/tr/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,45 +4,21 @@ "description": "extension name." }, "extShortDesc": { - "message": "Deneysel, izin gerektirmeyen içerik engelleyicisi. Kurulumdan hemen sonra Reklamları, izleyicileri, kripto madencilerini, ve [...]", + "message": "İzin gerektirmeyen içerik engelleyicisi. Kurulumdan hemen sonra reklamları, izleyicileri, ve daha fazlasını engeller.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} kural, {{filterCount}} ağ filtresinden dönüştürüldü", + "message": "{{filterCount}} ağ filtresinden {{ruleCount}} adet kural dönüştürüldü", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { "message": "uBO Lite — Kontrol Paneli", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Uyarı! Kaydedilmemiş değişiklikleriniz var", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Burada kal", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Yok say", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Ayarlar", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Filtre listeleri", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Filtrelerim", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Güvenilen siteler", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Hakkında", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Gizlilik ilkesi", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Bu site için uBO Lite'ı etkinleştir/devre dışı bırak", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Kontrol panelini aç", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Öge silme moduna gir", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Öge seçme moduna gir", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "Filtreleme modu", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "Bu web sitesinde bir sorunu bildir", + "message": "Bu sitedeki bir sorunu bildir", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Değişikliklerinizi kalıcı hale getirmek için tıklayın.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Değişikliklerinizi geri almak için tıklayın.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Kontrol panelini aç", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Daha Fazla", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Bu sitede uBO Lite'a daha kapsamlı izinler vermek için tıklayın.\nİzinlerin kapsamını artırmak, daha etkili içerik engelleme sağlar.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Bu sitedeki kapsamı artırılan izinleri iptal etmek için tıklayın.", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Daha Az", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Simge üzerinde engellenen isteklerin sayısını göster", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Görünüm", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Tema", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Özel vurgu rengi", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "CSP raporlarını engelle", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Tüm web sitelerinde genişletilmiş filtrelemeyi etkinleştir.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite, belirli bir web sitesinde, yalnızca o web sitesindeki verileri değiştirmek için uzantı izinlerini açıkça verdikten sonra genişletilmiş filtreleme uygulayabilir. Bu ayar, tüm web sitelerine bir kerede genişletilmiş filtreleme için izinler vermenizi sağlar.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Varsayılan", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -144,45 +68,13 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Diğer Ayarlar", + "message": "Diğer", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { "message": "Bölgeler, diller", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Satır başına bir filtre. Filtre yalın bir alan adı veya EasyList uyumlu bir filtre olabilir. ! ile başlayan satırlar yok sayılacaktır.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "İçe aktar ve ekle", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Dışa aktar", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "ublock-statik-filtrelerim_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Güvenilen site yönergeleri, uBO Lite'ın devre dışı bırakılması gerektiği web sayfalarını belirler. Her satırda bir girdi.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "İçe aktar ve sonuna ekle", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Dışa aktar", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "ublock-guvenilen-siteler_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Değişiklik günlüğü", "description": "" @@ -208,27 +100,79 @@ "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "Dış bağımlılıklar (GPLv3-uyumlu):", + "message": "Dış bağlılıklar (GPLv3-uyumlu):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Gönder", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Değişiklikleri uygula", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Geri al", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Bir filtre sorununu bildir", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Bir sitedeki filtre sorunlarını bildirmek için uBlockOrigin/uAssets issue tracker kullanın. Bir GitHub hesabı gerekir.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Gönüllüleri benzer raporlar ile bezdirmemek için sorunun zaten bildirilip bildirilmediğine bakın.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Benzer raporları bul", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Web sayfasının adresi:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Web sayfası…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Bir girdi seçin --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Reklamlar veya reklam artıkları gösteriyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Arayüzde kaplamalar veya diğer sıkıntıları var", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "uBO Lite tespit ediliyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Gizlilikle ilgili sorunları var", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "uBO Lite kullanımdayken sayfa bozuluyor ", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "İstenmeyen sekme veya pencereler açıyor", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Kötü niyetli yazılıma yönlendiriyor, oltalama", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Sayfayı “NSFW” (“iş için güvenli değil”) olarak işaretle", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Yeni rapor oluştur", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Hoş geldiniz", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "Az önce uBO Lite'ı indirdiniz. Buradan tüm siteler için varsayılan filtreleme modlarını seçebilirsiniz.\n\nVarsayılan olarak, Basit mod seçilidir çünkü verileri okuma ve yazma izni gerektirmez. Eğer uBO Lite'a güveniyorsanız, tüm sitelerde verileri okuma ve yazma izni verebilirsiniz ve daha gelişmiş filtreleme yeteneklerine tüm sitelerde sahip olabilirsiniz.", + "message": "Az önce uBO Lite'ı indirdiniz. Buradan tüm siteler için varsayılan filtreleme modlarını seçebilirsiniz.\n\nVarsayılan olarak, Basit mod seçilidir çünkü verileri okuma ve yazma izni gerektirmez. uBO Lite'a güveniyorsanız, tüm sitelerde verileri okuma ve yazma izni verebilirsiniz ve daha gelişmiş filtreleme yeteneklerine tüm sitelerde sahip olabilirsiniz.", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -252,7 +196,7 @@ "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "tamamen", + "message": "kapsamlı", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { @@ -267,12 +211,72 @@ "message": "Gelişmiş ağ filtrelemenin yanı sıra seçilen filtre listelerinden özel ve genel genişletilmiş filtreleme.\n\nTüm web sitelerindeki verileri okumak ve değiştirmek için geniş izin gerektirir.\n\nGenel genişletilmiş filtreleme daha yüksek kaynak kullanımına neden olabilir.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Filtreleme yapılmayacak alan alarının listesi", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[sadece ana bilgisayar adları]\nörnek.com\noyunlar.site\n…", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Davranış", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Filtreleme modu değiştirildiğinde sayfayı yenile", + "message": "Filtreleme modunu değiştirirken sayfayı otomatik olarak yenile", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Engellenen isteklerin sayısını araç çubuğu simgesinde göster", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Sıkı engellemeyi kullanıma al", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "İstenmeyebilecek sitelere giriş engellenecek ve devam edip etmeyeceğiniz size sorulacak.", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Liste bul", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Sayfa engellendi", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBo Lite aşağıdaki sayfaların yüklenmesini engelledi:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Bu sayfa {{listname}} içindeki bir süzgece takıldığı için engellenmiştir.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Engellenen sayfa sizi başka bir siteye yönlendirmek istiyor. Devam etmek isterseniz doğrudan şuraya yönlendirileceksiniz: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "değişkensiz", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Geri git", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Bu pencereyi kapat", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Bu site için beni bir daha uyarma", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Devam et", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/uk/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/uk/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/uk/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/uk/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "uBO Lite — Панель керування", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Увага! Є незбережені зміни", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Залишитись", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Ігнорувати", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Налаштування", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Списки фільтрів", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Мої фільтри", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Довірені сайти", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Про застосунок", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Політика конфіденційності", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Вимкнути/увімкнути uBO Lite для цього сайту", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Відкрити панель керування", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Перейти в режим блокування елементів", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Перейти в режим вибору елементів", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "режим фільтрації", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Повідомити про помилку на цьому вебсайті", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Клацніть, щоб зробити зміни постійними.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Клацніть, щоб скасувати зміни.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Відкрити панель керування", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Більше", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Клацніть, щоб надати uBO Lite розширені дозволи на цьому сайті.\nРозширені дозволи дозволяють ефективніше блокувати вміст.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Клацніть, щоб відкликати розширені дозволи на цьому сайті", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "Менше", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Показувати кількість заблокованих запитів на піктограмі", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Вигляд", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Тема", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Акцент кольору користувача", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Блокувати CSP-звіти", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Увімкнути розширену фільтрацію на всіх сайтах", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite може застосувати розширену фільтрацію на певному вебсайті лише після того, як ви явно надасте розширеній фільтрації дозволи на зміну даних на цьому вебсайті. Цей параметр дозволяє надати дозволи на розширену фільтрацію для всіх вебсайтів одночасно.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Типово", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "Регіони, мови", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Один фільтр на рядок. Фільтром може бути адреса сайту або фільтр в сумісному з EasyList записі. Рядки, що починаються з ! ігноруватимуться.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Імпортувати та додати", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Експортувати", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "мої-статичні-фільтри-ublock_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Директиви довіреного сайту диктують, на яких вебсторінках uBO Lite повинен бути вимкнений. Один запис на рядок.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Імпортувати та додати", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Експортувати", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "мої-довірені-сайти-ublock_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Журнал змін", "description": "" @@ -211,17 +103,69 @@ "message": "Зовнішні залежності (Сумісні з GPLv3)", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Відправити", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Застосувати зміни", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Повернути", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Повідомити про ваду фільтра", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Повідомляйте про вади з фільтрами на конкретних вебсайтах у відстежувач помилок uBlockOrigin/uAssets. Потрібен обліковий запис GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Щоб не обтяжувати волонтерів повторюваними звітами, переконайтеся, що про проблему ще не повідомлялося.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Знайти подібні звіти", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Адреса вебсторінки:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Вебсторінка...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Указати проблему --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "З'являється реклама або залишки оголошень", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Накладання або інші прикрощі", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Виявляє uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Пов'язані з приватністю проблеми", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Вади коли uBO Lite ввімкнено", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Відкриває небажані вкладки або вікна", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Веде до шкідливого ПЗ, фішингу", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Позначити цю сторінку «Небезпечною для роботи» («NSFW»)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Створити новий звіт", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Ласкаво просимо", @@ -264,9 +208,17 @@ "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Розширена мережева фільтрація плюс специфічна та загальна розширена фільтрація з вибраних списків фільтрів.\n\nПотребує широкого дозволу на читання та зміну даних на всіх сайтах.\n\nЗагальна розширена фільтрація може призвести до збільшення використання ресурсів веб-сторінки.", + "message": "Розширена мережева фільтрація плюс специфічна та загальна розширена фільтрація з вибраних списків фільтрів.\n\nПотребує розширених дозволів на читання та зміну даних на всіх сайтах.\n\nЗагальна розширена фільтрація може призвести до збільшення використання ресурсів вебсторінкою.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Список імен хостів, для яких не буде застосовуватись фільтрування", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[тільки імена хостів]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Поведінка", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Автоматично оновити сторінку при зміні режиму фільтрування", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Показувати кількість заблокованих запитів на піктограмі панелі інструментів", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Увімкнути суворе блокування", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Перехід до потенційно небажаних сайтів буде заблоковано, та вам буде запропоновано можливість продовжити", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Знайти списки", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Сторінку заблоковано", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite заблокував завантаження наступних сторінок:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Сторінку заблоковано, бо вона відповідає фільтру в {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Заблокована сторінка хоче переадресувати на інший сайт. Якщо ви вирішите продовжити, ви перейдете безпосередньо на: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "без параметрів", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Повернутися", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Закрити це вікно", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Більше не попереджати мене про цей сайт", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Продовжити", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ur/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ur/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/ur/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/ur/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -15,34 +15,10 @@ "message": "یو بلاکر لائٹ-ڈیش بورڈ", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "انتباہ: آپ کے پاس محفوظ نہ کی گئی ترتیبات ہیں", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "ادھر رہو", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "درگزر", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "ترتیبات", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "فلٹر فہرستیں", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "میرے انتخابات", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "قابل اعتماد ویب سائٹس", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "تعارف", "description": "appears as tab name in dashboard" @@ -51,152 +27,68 @@ "message": "پرائیویسی پالیسی", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Disable/enable uBO Lite for this site", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Open the dashboard", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Enter element zapper mode", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Enter element picker mode", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "فلٹرنگ موڈ", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Report an issue on this website", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Click to make your changes permanent.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Click to revert your changes.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "ڈیش بورڈ کھولیں۔", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { - "message": "More", - "description": "Label to be used to show popup panel sections" - }, - "popupGrantGreatPowers": { - "message": "Click to grant uBO Lite extended permissions on this site.\nExtended permissions allow more effective content blocking.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Click to revoke extended permissions on this site", + "message": "مزید", "description": "Label to be used to show popup panel sections" }, "popupLessButton": { - "message": "Less", + "message": "کم", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Show the number of blocked requests on the icon", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Appearance", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Theme", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Custom accent color", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Block CSP reports", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Enable extended filtering on all websites", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite can apply extended filtering on a given website only after you explicitly grant the extension permissions to modify data on that website. This setting allows you to grant permissions for extended filtering to all websites at once.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { - "message": "Default", + "message": "طے شدہ", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAds": { - "message": "Ads", + "message": "اشتہارات", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Privacy", + "message": "رازداری", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { - "message": "Malware domains", + "message": "Malware protection, security", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "Annoyances", + "message": "پریشانیاں", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Miscellaneous", + "message": "متفرق", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "Regions, languages", + "message": "علاقے، زبانیں۔", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "One filter per line. A filter can be a plain hostname, or an EasyList-compatible filter. Lines prefixed with ! will be ignored.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Export", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "The trusted site directives dictate on which web pages uBO Lite should be disabled. One entry per line.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Import and append", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Export", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "Changelog", + "message": "چینج لاگ", "description": "" }, "aboutCode": { - "message": "Source code (GPLv3)", + "message": "ماخذ کوڈ (GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Contributors", + "message": "تعاون کرنے والے", "description": "English: Contributors" }, "aboutSourceCode": { - "message": "Source code", + "message": "سورس کوڈ", "description": "Link text to source code repo" }, "aboutTranslations": { @@ -204,51 +96,103 @@ "description": "Link text to translations repo" }, "aboutFilterLists": { - "message": "Filter lists", + "message": "فہرستوں کو فلٹر کریں۔", "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "External dependencies (GPLv3-compatible):", + "message": "بیرونی انحصار (GPLv3-مطابق):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Submit", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Apply changes", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Revert", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Report a filter issue", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Report filter issues with specific websites to the uBlockOrigin/uAssets issue tracker. Requires a GitHub account.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Find similar reports", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Address of the webpage:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "The webpage…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Pick an entry --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Shows ads or ad leftovers", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Has overlays or other nuisances", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Detects uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Has privacy-related issues", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Malfunctions when uBO Lite is enabled", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Opens unwanted tabs or windows", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Leads to badware, phishing", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Label the webpage as “NSFW” (“Not Safe For Work”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Create new report", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { - "message": "Welcome", + "message": "خوش آمدید", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "You have just installed uBO Lite. Here you can choose the default filtering mode to use on all websites.\n\nBy default, Basic mode is selected because it does not require the permission to read and modify data. If you trust uBO Lite, you can give it broad permission to read and modify data on all websites in order to enable more advanced filtering capabilities for all websites by default.", + "message": "آپ نے ابھی یو بی او لائٹ انسٹال کیا ہے۔ یہاں آپ تمام ویب سائٹس پر استعمال کرنے کے لیے ڈیفالٹ فلٹرنگ موڈ کا انتخاب کر سکتے ہیں۔\n\nپہلے سے طے شدہ طور پر، بنیادی موڈ کو منتخب کیا جاتا ہے کیونکہ اسے ڈیٹا کو پڑھنے اور اس میں ترمیم کرنے کی اجازت کی ضرورت نہیں ہوتی ہے۔ اگر آپ کو uBO Lite پر بھروسہ ہے، تو آپ اسے تمام ویب سائٹس پر ڈیٹا کو پڑھنے اور اس میں ترمیم کرنے کی وسیع اجازت دے سکتے ہیں تاکہ تمام ویب سائٹس کے لیے پہلے سے طے شدہ فلٹرنگ کی مزید جدید صلاحیتوں کو فعال کیا جا سکے۔", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { - "message": "Default filtering mode", + "message": "ڈیفالٹ فلٹرنگ موڈ", "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "The default filtering mode will be overridden by per-website filtering modes. You can adjust the filtering mode on any given website according to whichever mode works best on that website. Each mode has its advantages and disadvantages.", + "message": "ڈیفالٹ فلٹرنگ موڈ کو فی ویب سائٹ فلٹرنگ موڈز کے ذریعے اوور رائیڈ کر دیا جائے گا۔ آپ کسی بھی ویب سائٹ پر فلٹرنگ موڈ کو ایڈجسٹ کرسکتے ہیں اس کے مطابق جو بھی موڈ اس ویب سائٹ پر بہترین کام کرتا ہے۔ ہر موڈ کے اپنے فوائد اور نقصانات ہیں۔", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { - "message": "no filtering", + "message": "کوئی فلٹرنگ نہیں", "description": "Name of blocking mode 0" }, "filteringMode1Name": { - "message": "basic", + "message": "بنیادی", "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "optimal", + "message": "بہترین", "description": "Name of blocking mode 2" }, "filteringMode3Name": { @@ -256,23 +200,83 @@ "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { - "message": "Basic network filtering from selected filter lists.\n\nDoes not require permission to read and modify data on websites.", + "message": "منتخب فلٹر فہرستوں سے بنیادی نیٹ ورک فلٹرنگ۔\n\nویب سائٹس پر ڈیٹا کو پڑھنے اور اس میں ترمیم کرنے کے لیے اجازت کی ضرورت نہیں ہے۔", "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "Advanced network filtering plus specific extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.", + "message": "اعلی درجے کی نیٹ ورک فلٹرنگ کے علاوہ منتخب فلٹر فہرستوں سے مخصوص توسیعی فلٹرنگ۔\n\nتمام ویب سائٹس پر ڈیٹا کو پڑھنے اور اس میں ترمیم کرنے کے لیے وسیع اجازت درکار ہے۔", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "Advanced network filtering plus specific and generic extended filtering from selected filter lists.\n\nRequires broad permission to read and modify data on all websites.\n\nGeneric extended filtering may cause higher webpage resources usage.", + "message": "اعلی درجے کی نیٹ ورک فلٹرنگ کے علاوہ منتخب فلٹر فہرستوں سے مخصوص اور عام توسیعی فلٹرنگ۔\n\nتمام ویب سائٹس پر ڈیٹا کو پڑھنے اور اس میں ترمیم کرنے کے لیے وسیع اجازت درکار ہے۔\n\nعام توسیع شدہ فلٹرنگ ویب پیج کے وسائل کے زیادہ استعمال کا سبب بن سکتی ہے۔", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "میزبان ناموں کی فہرست جن کے لیے کوئی فلٹرنگ نہیں ہوگی۔", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { - "message": "Behavior", + "message": "رویہ", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "Automatically reload page when changing filtering mode", + "message": "فلٹرنگ موڈ تبدیل کرتے وقت صفحہ خودکار طور پر دوبارہ لوڈ کریں۔", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "ٹول بار کے آئیکن پر بلاک شدہ درخواستوں کی تعداد دکھائیں۔", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Enable strict blocking", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Find lists", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Page blocked", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite has prevented the following page from loading:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "The page was blocked because of a matching filter in {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "without parameters", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Go back", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Close this window", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Don't warn me again about this site", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Proceed", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/vi/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/vi/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/vi/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/vi/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "Trình chặn nội dung thử nghiệm, không cần quyền. Chặn quảng cáo, trình theo dõi, công cụ khai thác tiền số và hơn thế nữa ngay [...]", + "message": "Trình chặn nội dung không cần quyền. Chặn quảng cáo, trình theo dõi, công cụ khai thác tiền số và hơn thế nữa ngay sau khi cài đặt.", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — Bảng điều khiển", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "Cảnh báo! Bạn có các thay đổi chưa được lưu", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "Ở lại", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "Bỏ qua", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "Cài đặt", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "Danh sách bộ lọc", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "Bộ lọc của tôi", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "Trang tin cậy", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "Giới thiệu", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "Chính sách bảo mật", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "Vô hiệu/kích hoạt uBO Lite cho trang này", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "Mở bảng điều khiển", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "Chuyển sang chế độ chặn phần tử tạm thời", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "Chuyển sang chế độ chọn phần tử", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "chế độ lọc", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "Báo cáo lỗi trên trang này", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "Nhấn để làm các thay đổi của bạn thường trực.", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "Nhấn để hoàn tác các thay đổi của bạn.", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "Mở bảng điều khiển", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "Mở rộng", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "Nhấp để cấp cho uBO Lite những quyền mở rộng trên trang này.\nCác quyền mở rộng cho phép việc chặn nội dung hiệu quả hơn.", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "Nhấp để thu hồi các quyền mở rộng trên trang này", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { - "message": "Ít hơn", + "message": "Thu gọn", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "Hiển thị số lượng yêu cầu bị chặn trên biểu tượng", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "Diện mạo", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "Giao diện", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "Tùy chọn màu nền", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "Chặn các báo cáo CSP", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "Bật tính năng lọc mở rộng trên tất cả các trang web", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite có thể áp dụng tính năng lọc mở rộng trên một trang web nhất định chỉ sau khi bạn cấp quyền một cách tường minh cho tiện ích mở rộng để sửa đổi dữ liệu trên trang web đó. Cài đặt này cho phép bạn cấp quyền cho lọc mở rộng tới tất cả các trang web cùng một lúc.", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "Mặc định", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -132,7 +56,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupPrivacy": { - "message": "Riêng tư", + "message": "Bảo mật", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMalware": { @@ -144,45 +68,13 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { - "message": "Linh tinh", + "message": "Khác", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { "message": "Khu vực, ngôn ngữ", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "Một bộ lọc trên mỗi dòng. Một bộ lọc có thể là một tên máy chủ đơn giản, hoặc một bộ lọc tương thích EasyList. Những dòng bắt đầu với ! sẽ bị bỏ qua.", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "Nhập và thêm vào", - "description": "English: Import and append" - }, - "1pExport": { - "message": "Xuất", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "bộ-lọc-tĩnh-ublock-của-tôi_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "Các chỉ thị trang tin cậy chỉ định các trang web nào uBO Lite nên bị tắt. Một mục trên mỗi dòng.", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "Nhập và thêm vào", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "Xuất", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "các-trang-tin-cậy-ublock-của-tôi_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "Nhật ký thay đổi", "description": "" @@ -192,7 +84,7 @@ "description": "English: Source code (GPLv3)" }, "aboutContributors": { - "message": "Những người đóng góp", + "message": "Người đóng góp", "description": "English: Contributors" }, "aboutSourceCode": { @@ -211,17 +103,69 @@ "message": "Các phụ thuộc bên ngoài (tương thích GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "Xác nhận", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "Áp dụng các thay đổi", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "Phục hồi", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "Báo cáo lỗi bộ lọc cụ thể", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "Báo cáo các vấn đề về bộ lọc với các trang web cụ thể cho trình theo dõi vấn đề uBlockOrigin/uAssets xử lý. Cần có tài khoản GitHub.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "Để tránh tạo thêm gánh nặng cho các tình nguyện viên, hãy chắc chắn rằng chưa từng có vấn đề tương tự được báo cáo.", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "Tìm các báo cáo tương tự", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "Địa chỉ của trang web:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "Trang web…", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- Chọn một mục --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "Hiện quảng cáo hoặc vùng chứa quảng cáo", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "Có lớp phủ hoặc những phiền toái khác", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "Phát hiện uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "Có các cấn đề về quyền riêng tư", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "Trục trặc khi bật uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "Xuất hiện các tab và cửa sổ ngoài mong muốn", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "Dẫn đến phần mềm độc hại, lừa đảo", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "Đánh dấu trang web là “NSFW” (“Không an toàn cho công việc”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "Tạo báo cáo mới", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "Chào mừng", @@ -252,7 +196,7 @@ "description": "Name of blocking mode 2" }, "filteringMode3Name": { - "message": "Hoàn thành", + "message": "Hoàn toàn", "description": "Name of blocking mode 3" }, "basicFilteringModeDescription": { @@ -267,6 +211,14 @@ "message": "Lọc mạng với chế độ nâng cao cộng với lọc mở rộng cụ thể và chung chung từ danh sách bộ lọc đã chọn.\n\nYêu cầu cấp quyền để đọc và thay đổi dữ liệu trên tất cả các trang web.\n\nVới chế độ lọc chung có thể gây ra tốn tài nguyên trang web cao hơn.", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "Danh sách tên máy chủ sẽ không được lọc", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[hostnames only]\nexample.com\ngames.example", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "Hành vi", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "Tự động tải lại trang khi thay đổi chế độ bộ lọc", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "Hiện số lượng yêu cầu bị chặn trên biểu tượng thanh công cụ", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "Bật chặn nghiêm ngặt", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "Việc điều hướng đến các trang web có khả năng không mong muốn sẽ bị chặn và bạn sẽ được cung cấp tùy chọn để tiếp tục.", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "Tìm danh sách", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "Trang bị chặn", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite đã ngăn tải trang sau:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "Trang này đã bị chặn vì bộ lọc phù hợp trong {{listname}}.", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "Trang đã chặn muốn chuyển hướng sang trang khác. Nếu đồng ý, bạn sẽ được chuyển hướng sang {{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "không có thông số", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "Quay lại", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "Đóng cửa sổ này", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "Đừng cảnh báo lại cho tôi về trang web này", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "Tiến hành", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/zh_CN/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/zh_CN/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/zh_CN/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/zh_CN/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,7 +4,7 @@ "description": "extension name." }, "extShortDesc": { - "message": "一个实验性的,不需要权限的内容屏蔽工具。安装即可屏蔽广告、跟踪器、挖矿脚本等网页内容。", + "message": "一个不需要权限的内容屏蔽工具。安装即可屏蔽广告、跟踪器、挖矿脚本等网页内容。", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { @@ -15,34 +15,10 @@ "message": "uBO Lite — 控制面板", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "警告!您有未保存的更改", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "留在当前页面", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "忽略", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "设置", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "过滤规则列表", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "静态过滤规则", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "白名单", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "关于", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "隐私政策", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "在此网站停用/启用 uBO Lite", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "打开控制面板", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "进入临时元素移除模式", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "进入元素选择器模式", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "过滤模式", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { - "message": "报告此网站上的问题", + "message": "反馈该网站上的问题", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "点击以使更改永久生效。", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "点击以撒销当前修改。", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "在仪表板中", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "更多", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "点击以授予 uBO Lite 在此网站额外权限。\n额外权限可让内容过滤更加高效。", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "点击以撤回 uBO Lite 在此网站的额外权限", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "更少", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "在图标上显示拦截请求数", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "外观", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "主题", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "自定义强调色", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "屏蔽 CSP 报告", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "在所有网站启用额外过滤功能", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite 只有在被明确授予修改网页数据的权限后才可以应用额外过滤功能。通过此项设置可一次性授予其在所有网站启用额外过滤所需的权限。", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "预设", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -151,38 +75,6 @@ "message": "区域、语言", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "一行一条过滤规则。每条规则可以是一个简单域名或者是一条 EasyList 兼容的过滤规则。以 ! 开头的行将被忽略。", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "导入并添加", - "description": "English: Import and append" - }, - "1pExport": { - "message": "导出", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "适用于白名单任一规则的页面不会启用 uBO Lite。一行一条规则。", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "导入并添加", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "导出", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { "message": "更新日志", "description": "" @@ -211,17 +103,69 @@ "message": "外部依赖(与 GPLv3 协议兼容):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "提交", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "应用更改", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "还原", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "报告过滤问题", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "将特定网站的过滤问题报告给uBlockOrigin/uAssets issue tracker需要有 GitHub 账户。", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "请确认该问题未曾上报,以避免加重志愿者负担。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "找到相似报告", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "网页地址:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "网页...", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- 选择一个条目 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "显示广告或残留广告", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "存在遮盖或类似问题", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "检测到 uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "存在隐私相关问题", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "启用 uBO Lite 时发生故障", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "打开了不想要的标签页或窗口", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "导致恶意软件、网络钓鱼", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "将网页标记为 “NSFW”(“工作场所不宜”)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "创建新报告", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "欢迎使用", @@ -267,6 +211,14 @@ "message": "用选定的过滤规则列表进行进阶网页过滤,会同时使用有针对性的以及通用的过滤规则。\n\n需要读取或修改网页数据的权限。\n\n通用过滤功能可能会占用更多系统资源。", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "不进行过滤的主机名列表", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[域名]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "操作设置", "description": "The header text for the 'Behavior' section" @@ -274,5 +226,57 @@ "autoReloadLabel": { "message": "更改过滤模式后自动刷新网页", "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "在工具栏图标上显示拦截请求数", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "开启严格拦截", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "导航至潜在不良网站的操作将被拦截,并且您将可以选择继续前往。", + "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "查找列表", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "被拦截的页面", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite 已阻止了以下页面的加载:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "该页面由于 {{listName}} 中的匹配过滤器而被阻止。", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "被屏蔽的页面希望重定向到另一个网站。如果您选择继续,将直接导航到:{{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "不含参数", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "返回", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "关闭此窗口", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "不要再警告我关于这个网站了", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "继续", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/zh_TW/messages.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/zh_TW/messages.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/_locales/zh_TW/messages.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/_locales/zh_TW/messages.json 2025-02-09 18:18:39.000000000 +0000 @@ -4,45 +4,21 @@ "description": "extension name." }, "extShortDesc": { - "message": "一個實驗性,不需要權限的內容封鎖程式。安裝後立刻封鎖廣告、追蹤程式、挖礦程式等網頁內容。", + "message": "一個無須授權的內容封鎖器。安裝後即可立即封鎖廣告、追蹤器、挖礦程式等等。", "description": "this will be in the Chrome web store: must be 132 characters or less" }, "perRulesetStats": { - "message": "{{ruleCount}} 條規則,轉換自 {{filterCount}} 條網路共享規則", + "message": "{{ruleCount}} 條規則,由 {{filterCount}} 條網路過濾規則轉換而來", "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, "dashboardName": { "message": "uBO Lite — 控制台", "description": "English: uBO Lite — Dashboard" }, - "dashboardUnsavedWarning": { - "message": "警告!變更尚未儲存。", - "description": "A warning in the dashboard when navigating away from unsaved changes" - }, - "dashboardUnsavedWarningStay": { - "message": "留在此頁面", - "description": "Label for button to prevent navigating away from unsaved changes" - }, - "dashboardUnsavedWarningIgnore": { - "message": "忽略變更", - "description": "Label for button to ignore unsaved changes" - }, "settingsPageName": { "message": "設定", "description": "appears as tab name in dashboard" }, - "3pPageName": { - "message": "過濾規則清單", - "description": "appears as tab name in dashboard" - }, - "1pPageName": { - "message": "自訂靜態過濾規則", - "description": "appears as tab name in dashboard" - }, - "whitelistPageName": { - "message": "信任名單", - "description": "appears as tab name in dashboard" - }, "aboutPageName": { "message": "關於", "description": "appears as tab name in dashboard" @@ -51,78 +27,26 @@ "message": "隱私權政策", "description": "Link to privacy policy on GitHub (English)" }, - "popupPowerSwitchInfo": { - "message": "為此網站停用/啟用 uBO Lite", - "description": "Tooltip for the main power button in the popup panel" - }, - "popupTipDashboard": { - "message": "開啟控制台", - "description": "English: Click to open the dashboard" - }, - "popupTipZapper": { - "message": "進入元素臨時移除模式", - "description": "Tooltip for the element-zapper icon in the popup panel" - }, - "popupTipPicker": { - "message": "進入元素選擇器模式", - "description": "English: Enter element picker mode" + "popupFilteringModeLabel": { + "message": "過濾模式", + "description": "Label in the popup panel for the current filtering mode" }, "popupTipReport": { "message": "回報此網站的問題", "description": "Tooltip used for the 'chat' icon in the panel" }, - "popupTipSaveRules": { - "message": "點擊以讓您的變更永久生效。", - "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." - }, - "popupTipRevertRules": { - "message": "點擊以撤銷您的變更。", - "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipDashboard": { + "message": "開啟控制台", + "description": "English: Click to open the dashboard" }, "popupMoreButton": { "message": "更多", "description": "Label to be used to show popup panel sections" }, - "popupGrantGreatPowers": { - "message": "點擊以授予 uBO Lite 在此網站上的延伸權限。\n延伸權限可讓內容阻擋更有效率。", - "description": "Label to be used to show popup panel sections" - }, - "popupRevokeGreatPowers": { - "message": "點擊以撤銷此網站的延伸權限", - "description": "Label to be used to show popup panel sections" - }, "popupLessButton": { "message": "更少", "description": "Label to be used to hide popup panel sections" }, - "settingsIconBadgePrompt": { - "message": "在圖示上顯示被阻擋的連線請求的數量", - "description": "English: Show the number of blocked requests on the icon" - }, - "settingsAppearance": { - "message": "外觀", - "description": "Section for controlling user interface appearance" - }, - "settingsThemeLabel": { - "message": "佈景主題", - "description": "Label for checkbox to enable a custom dark theme" - }, - "settingsThemeAccent0Label": { - "message": "自訂強調顏色", - "description": "Label for checkbox to pick an accent color" - }, - "settingsNoCSPReportsPrompt": { - "message": "封鎖 CSP 回報", - "description": "background information: https://github.com/gorhill/uBlock/issues/3150" - }, - "omnipotenceLabel": { - "message": "在所有網站上啟用延伸過濾功能", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, - "omnipotenceLegend": { - "message": "uBO Lite 只能在您明確授予擴充套件「修改網站資料」的權限後,才能在啟用權限的網站,套用延伸過濾功能。這個設定能讓您一次為所有網站,授予延伸過濾功能所需的權限。", - "description": "Header for a ruleset section in 'Filter lists pane'" - }, "3pGroupDefault": { "message": "預設", "description": "Header for a ruleset section in 'Filter lists pane'" @@ -140,7 +64,7 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupAnnoyances": { - "message": "惱人的", + "message": "嫌惡元素", "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupMisc": { @@ -148,47 +72,15 @@ "description": "Header for a ruleset section in 'Filter lists pane'" }, "3pGroupRegions": { - "message": "地區、語言", + "message": "地區及語言", "description": "Header for a ruleset section in 'Filter lists pane'" }, - "1pFormatHint": { - "message": "每行一個過濾規則。規則可以單純是主機名稱,或是與 EasyList 相容的過濾規則。以 ! 開頭的行將被忽略。", - "description": "Short information about how to create custom filters" - }, - "1pImport": { - "message": "匯入並加入", - "description": "English: Import and append" - }, - "1pExport": { - "message": "匯出", - "description": "English: Export" - }, - "1pExportFilename": { - "message": "my-ublock-static-filters_{{datetime}}.txt", - "description": "English: my-ublock-static-filters_{{datetime}}.txt" - }, - "whitelistPrompt": { - "message": "信任名單中的規則適用的頁面不會被 uBO Lite 過濾或阻擋。每行一個規則。", - "description": "A concise description of the 'Trusted sites' pane." - }, - "whitelistImport": { - "message": "匯入並加入", - "description": "English: Import and append" - }, - "whitelistExport": { - "message": "匯出", - "description": "English: Export" - }, - "whitelistExportFilename": { - "message": "my-ublock-trusted-sites_{{datetime}}.txt", - "description": "The default filename to use for import/export purpose" - }, "aboutChangelog": { - "message": "更新日誌", + "message": "變更日誌", "description": "" }, "aboutCode": { - "message": "程式原始碼(GPLv3)", + "message": "原始碼(GPLv3)", "description": "English: Source code (GPLv3)" }, "aboutContributors": { @@ -208,27 +100,79 @@ "description": "Link text to uBO's own filter lists repo" }, "aboutDependencies": { - "message": "外部相依套件(與 GPLv3 相容):", + "message": "外部依存套件(相容 GPLv3):", "description": "Shown in the About pane" }, - "genericSubmit": { - "message": "提交", - "description": "for generic 'Submit' buttons" - }, - "genericApplyChanges": { - "message": "套用變更", - "description": "for generic 'Apply changes' buttons" - }, - "genericRevert": { - "message": "還原", - "description": "for generic 'Revert' buttons" + "supportS6H": { + "message": "回報過濾規則問題", + "description": "Header of 'Report a filter issue' section in Support pane" + }, + "supportS3P1": { + "message": "將特定網站的過濾器問題回報至 uBlockOrigin/uAssets 議題追蹤器需要 GitHub 帳號。.", + "description": "First paragraph of 'Filter issues' section in Support pane" + }, + "supportS6P1S1": { + "message": "為避免增加志願者的負擔,請先確認該問題被尚未被回報過。", + "description": "A paragraph in the filter issue reporter section" + }, + "supportFindSpecificButton": { + "message": "尋找類似報告", + "description": "A clickable link in the filter issue reporter section" + }, + "supportS6URL": { + "message": "網址:", + "description": "Label for the URL of the page" + }, + "supportS6Select1": { + "message": "網頁……", + "description": "Label for widget to select type of issue" + }, + "supportS6Select1Option0": { + "message": "-- 選擇一項 --", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option1": { + "message": "會顯示廣告或廣告殘留物", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option2": { + "message": "有覆蓋層或其他干擾", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option3": { + "message": "偵測到 uBO Lite", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option4": { + "message": "有隱私相關問題", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option5": { + "message": "在 uBO Lite 啟用時運作異常", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option6": { + "message": "開啟不需要的分頁或視窗", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Select1Option7": { + "message": "導向惡意軟體、釣魚網站", + "description": "An entry in the widget used to select the type of issue" + }, + "supportS6Checkbox1": { + "message": "將網頁標記為「NSFW」(「工作場所不宜」)", + "description": "A checkbox to use for NSFW sites" + }, + "supportReportSpecificButton": { + "message": "建立新報告", + "description": "Text for button which open an external webpage in Support pane" }, "firstRunSectionLabel": { "message": "歡迎", "description": "The header text for the welcome message section" }, "firstRunDescription": { - "message": "您剛安裝了 uBO Lite。您可以在此處選擇要在所有網站上使用的預設過濾模式。\n\n預設情況下將會選取基礎模式,因為其不需要讀取與變更資料的權限。若您信任 uBO Lite,您可以給予其迪取並變更在所有網站上資料的廣泛權限,以便為所有網站啟用更進階的過濾功能。", + "message": "您剛安裝了 uBO Lite。您可以在此處選擇會在所有網站上套用的預設過濾模式。\n\n預設情況下,選擇了基礎模式,因為其不需要讀取與變更資料的權限。若您信任 uBO Lite,您可以授予其讀取並變更在所有網站上資料的廣泛權限,以便為所有網站啟用進階過濾功能。", "description": "Descriptive text shown at first install time only " }, "defaultFilteringModeSectionLabel": { @@ -236,7 +180,7 @@ "description": "The header text for the default filtering mode section" }, "defaultFilteringModeDescription": { - "message": "預設過濾模式將被每個網站的過濾模式覆寫。您可以根據在該網站上最有效的模式為任何指定的網站調整過濾模式。每種模式都有其優缺點。", + "message": "預設過濾模式將被每個網站的過濾模式覆寫。你可以根據每個網站的情況,調整該網站的過濾模式,以選擇最適合的模式。每種模式都有其優缺點。", "description": "This describes the default filtering mode setting" }, "filteringMode0Name": { @@ -248,7 +192,7 @@ "description": "Name of blocking mode 1" }, "filteringMode2Name": { - "message": "最佳化", + "message": "最佳", "description": "Name of blocking mode 2" }, "filteringMode3Name": { @@ -260,19 +204,79 @@ "description": "This describes the 'basic' filtering mode" }, "optimalFilteringModeDescription": { - "message": "進階網路過濾以及來自選定過濾條件清單的特定擴展過濾條件。\n\n需要在所有網站上讀取並變更資料的廣泛權限。", + "message": "進階的網路過濾功能,並結合選定過濾清單中的特定延伸過濾。 \n\n需要授予讀取和修改所有網站資料的廣泛權限。", "description": "This describes the 'optimal' filtering mode" }, "completeFilteringModeDescription": { - "message": "進階網路過濾以及來自選定過濾條件清單的特定與通用擴展過濾條件。\n\n需要在所有網站上讀取並變更資料的廣泛權限。\n\n通用擴展過濾可能會導致更高的網頁資源使用率。", + "message": "進階網路過濾,加上從選定過濾清單中進行特定與通用延伸過濾。\n\n需要授予讀取和修改所有網站資料的廣泛權限。\n\n通用延伸過濾可能會導致較高的網頁資源使用量。", "description": "This describes the 'complete' filtering mode" }, + "noFilteringModeDescription": { + "message": "白名單", + "description": "A short description for the editable field which lists trusted sites" + }, + "noFilteringModePlaceholder": { + "message": "[僅主機名稱]\nexample.com\ngames.example\n...", + "description": "Default text for in edit field" + }, "behaviorSectionLabel": { "message": "行為", "description": "The header text for the 'Behavior' section" }, "autoReloadLabel": { - "message": "變更過濾模式時自動重新載入頁面", + "message": "變更過濾模式時自動重新載入", + "description": "Label for a checkbox in the options page" + }, + "showBlockedCountLabel": { + "message": "在工具列圖示上顯示已封鎖請求的數量。", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLabel": { + "message": "啟用嚴格阻擋", + "description": "Label for a checkbox in the options page" + }, + "enableStrictBlockLegend": { + "message": "前往潛在不良網站的導航將被阻止,您可以選擇是否繼續前往。", "description": "Label for a checkbox in the options page" + }, + "findListsPlaceholder": { + "message": "尋找清單", + "description": "Placeholder for the input field used to find lists" + }, + "strictblockTitle": { + "message": "已封鎖頁面", + "description": "Webpage title for the strict-blocked page" + }, + "strictblockSentence1": { + "message": "uBO Lite 已防止下列頁面載入:", + "description": "Sentence used in the strict-blocked page" + }, + "strictblockReasonSentence1": { + "message": "由於符合 {{listname}} 中的過濾規則,此頁面已被封鎖。", + "description": "Text informing about what is causing the page to be blocked" + }, + "strictblockRedirectSentence1": { + "message": "被阻擋的頁面想要重定向到另一個網站。如果您選擇繼續,將直接導航至:{{url}}", + "description": "Text warning about an incoming redirect" + }, + "strictblockNoParamsPrompt": { + "message": "不帶參數", + "description": "Label to be used for the parameter-less URL" + }, + "strictblockBack": { + "message": "返回", + "description": "A button to go back to the previous webpage" + }, + "strictblockClose": { + "message": "關閉此視窗", + "description": "A button to close the current tab" + }, + "strictblockDontWarn": { + "message": "不再就此網站警告我", + "description": "Label for checkbox in document-blocked page" + }, + "strictblockProceed": { + "message": "繼續", + "description": "A button to navigate to the blocked page" } } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/about.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/about.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/about.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/about.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ - - - - - -uBlock Origin Lite — About - - - - - - - - -
-
-
-
Copyright (c) Raymond Hill 2014-present
-
-
-
-
-
-
-
-
-
-
-
- -
- - - - - - - - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/dashboard-common.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/dashboard-common.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/dashboard-common.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/dashboard-common.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,15 @@ body { + align-items: center; + box-sizing: border-box; + display: flex; + flex-direction: column; + max-height: 100vh; + padding: 0 var(--default-gap-xxsmall); } +body > * { + width: min(640px, 100%); + } + h2, h3 { margin: 1em 0; } @@ -9,9 +19,11 @@ h3 { font-size: 16px; } + a { text-decoration: none; } + .fa-icon.info { color: var(--info0-ink); fill: var(--info0-ink); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/dashboard.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/dashboard.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/dashboard.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/dashboard.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,19 +1,5 @@ -html, body { - align-items: center; - box-sizing: border-box; - display: flex; - flex-direction: column; - height: 100vh; - justify-content: stretch; - padding: 0 1em; - overflow: hidden; - position: relative; - width: 100vw; - } -body > * { - width: min(641px, 100vw); - } #dashboard-nav { + background-color: var(--surface-1); border: 0; border-bottom: 1px solid var(--border-1); display: flex; @@ -21,9 +7,6 @@ flex-wrap: wrap; overflow-x: hidden; padding: 0; - position: sticky; - top: 0; - z-index: 10; } .tabButton { background-color: transparent; @@ -41,52 +24,29 @@ .tabButton:focus { outline: 0; } -/* - * TODO: support keyboard-driven navigation - * -.tabButton:not(:active):focus { - background-color: var(--dashboard-tab-focus-surface); +.tabButton:hover { + background-color: var(--dashboard-tab-hover-surface); + border-bottom-color: var(--dashboard-tab-hover-border); } - */ -.tabButton.selected { + +body[data-pane="settings"] #dashboard-nav .tabButton[data-pane="settings"], +body[data-pane="rulesets"] #dashboard-nav .tabButton[data-pane="rulesets"], +body[data-pane="about"] #dashboard-nav .tabButton[data-pane="about"] { background-color: var(--dashboard-tab-active-surface); border-bottom: 3px solid var(--dashboard-tab-active-ink); color: var(--dashboard-tab-active-ink); fill: var(--dashboard-tab-active-ink); } -iframe { - background-color: transparent; - border: 0; - flex-grow: 1; - margin: 0; - padding: 0; - } -#unsavedWarning { - display: none; - left: 0; - position: absolute; - width: 100%; - z-index: 20; - } -#unsavedWarning.on { - display: initial; - } -#unsavedWarning > div:first-of-type { - padding: 0.5em; - } -#unsavedWarning > div:last-of-type { - height: 100vh; - position: absolute; - } -body:not(.canUpdateShortcuts) .tabButton[data-pane="shortcuts.html"] { +body > section { display: none; + overflow: auto; + padding-bottom: 8rem; } -body .tabButton[data-pane="no-dashboard.html"] { - display: none; - } -body.noDashboard #dashboard-nav { - display: none; +body[data-pane="settings"] > section[data-pane="settings"], +body[data-pane="rulesets"] > section[data-pane="rulesets"], +body[data-pane="about"] > section[data-pane="about"] { + display: block; } /* high dpi devices */ @@ -96,18 +56,6 @@ letter-spacing: 0.5px; } -/* hover-able devices */ -:root.desktop .tabButton { - cursor: default; - } -:root.desktop .tabButton:not(.selected) { - cursor: pointer; - } -:root.desktop .tabButton:not(.selected):hover { - background-color: var(--dashboard-tab-hover-surface); - border-bottom-color: var(--dashboard-tab-hover-border); - } - /* touch-screen devices */ :root.mobile #dashboard-nav { flex-wrap: nowrap; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/filtering-mode.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/filtering-mode.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/filtering-mode.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/filtering-mode.css 2025-02-09 18:18:39.000000000 +0000 @@ -13,7 +13,7 @@ border-radius: 30% 15% / 15% 30%; height: 100%; position: absolute; - width: 25%; + width: calc(25% + 2px); z-index: 10; } @@ -39,12 +39,18 @@ .filteringModeSlider span[data-level] { background-color: var(--accent-surface-1); + border: 1px solid var(--accent-surface-1); + box-sizing: border-box; display: inline-flex; height: 30%; margin-left: 1px; width: 25%; } +.filteringModeSlider span[data-level]:first-of-type { + margin-left: 0; + } + .filteringModeSlider.moving span[data-level] { pointer-events: none; } @@ -53,13 +59,13 @@ left: 0; } .filteringModeSlider[data-level="1"] .filteringModeButton { - left: 25%; + left: calc(25% - 1px); } .filteringModeSlider[data-level="2"] .filteringModeButton { - left: 50%; + left: calc(50% - 1px); } .filteringModeSlider[data-level="3"] .filteringModeButton { - left: 75%; + left: calc(75% - 1px); } [dir="rtl"] .filteringModeSlider[data-level="0"] .filteringModeButton { left: 75%; @@ -77,14 +83,17 @@ .filteringModeSlider[data-level="0"] span[data-level] { background-color: var(--surface-2); + border-color: var(--surface-2); } .filteringModeSlider[data-level="1"] span[data-level]:nth-of-type(1) ~ span[data-level] { background-color: var(--surface-2); + border-color: var(--surface-2); } .filteringModeSlider[data-level="2"] span[data-level]:nth-of-type(2) ~ span[data-level] { background-color: var(--surface-2); + border-color: var(--surface-2); } .filteringModeSlider[data-level]:not(.moving) span[data-level]:hover { diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/matched-rules.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/matched-rules.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/matched-rules.css 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/matched-rules.css 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,28 @@ + +#matchedEntries { + display: flex; + flex-direction: column; + font-family: monospace; + font-size: small; + white-space: pre-wrap; + word-break: break-all; +} + +.matchInfo { + display: flex; + flex-wrap: nowrap; +} + +.matchInfo:nth-of-type(2n) { + background-color: lightgray; +} + +.requestInfo { + border-inline-end: 1px dotted black; + padding-inline-end: 0.5em; + width: 25vw; +} + +.ruleInfo { + padding-inline-start: 0.5em; +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/popup.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/popup.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/popup.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/popup.css 2025-02-09 18:18:39.000000000 +0000 @@ -4,10 +4,6 @@ top: -20%; } -/* Internal CSS values */ -:root body { - overflow: hidden; - } :root body, :root.mobile body { --font-size: 14px; @@ -19,6 +15,7 @@ --popup-rule-cell-width: 5em; font-size: var(--font-size); line-height: 20px; + min-width: 100%; } :root body.loading { opacity: 0; @@ -34,8 +31,10 @@ #main { align-self: flex-start; + display: flex; + flex-direction: column; max-width: 340px; - min-width: var(--popup-main-min-width); + min-width: 100%; } :root.portrait #main { align-self: inherit; @@ -47,13 +46,40 @@ padding: 0; } +#hostname { + align-items: center; + background-color: var(--popup-toolbar-surface); + display: flex; + justify-content: center; + min-height: calc(var(--font-size) * 3); + padding: 0 var(--popup-gap-extra-thin); + text-align: center; + word-break: break-all; + } +#hostname > span { + word-break: break-all; + } +#hostname > span + span { + font-weight: 600; + } + +body[data-forbid~="filteringMode"] .filteringModeSlider { + pointer-events: none; + } +body[data-forbid~="dashboard"] #gotoDashboard { + display: none; + } + #filteringModeText { - background-color: var(--surface-2); color: var(--ink-3); - display: flex; - padding: var(--default-gap-xsmall); + margin: var(--default-gap-small); + margin-top: 0; + text-align: center; text-transform: lowercase; } +#filteringModeText > span { + color: var(--accent-surface-1); + } #filteringModeText > span:nth-of-type(2) { display: none; } @@ -68,9 +94,9 @@ } .filteringModeSlider { - height: 32px; - margin: 8px; - width: 128px; + align-self: center; + margin: var(--popup-gap); + width: calc(var(--popup-main-min-width) - 1em); } .rulesetTools { @@ -101,17 +127,6 @@ body.needReload #refresh { visibility: visible; } -#hostname { - font-size: var(--font-size-larger); - margin: var(--popup-gap) var(--popup-gap-thin); - text-align: center; - } -#hostname > span { - word-break: break-all; - } -#hostname > span + span { - font-weight: 600; - } #rulesetStats { padding: 0 var(--popup-gap-thin); @@ -120,7 +135,6 @@ font-size: 1em; font-weight: normal; margin: 0.5em 0 0.25em 0; - text-transform: capitalize; } #rulesetStats .rulesetDetails p { color: var(--ink-2); @@ -141,7 +155,7 @@ } .toolRibbon { - align-items: start; + align-items: center; background-color: var(--popup-toolbar-surface); display: grid; grid-auto-columns: 1fr; @@ -246,7 +260,6 @@ /* mouse-driven devices */ :root.desktop { display: flex; - justify-content: flex-end; } :root.desktop body { --popup-gap: calc(var(--font-size) * 0.875); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/settings.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/settings.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/settings.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/settings.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,14 +1,5 @@ -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } - } -body { - margin-bottom: 6rem; - } -legend { - color: var(--ink-3); - font-size: var(--font-size-smaller); - padding: var(--default-gap-xxsmall); +body.loading { + visibility: hidden; } body .firstRun { display: none; @@ -18,14 +9,36 @@ display: block; padding: 8px; } -body > div { - margin: 1em 0; +body .firstRun > *:first-child { + margin-top: 0; + } +body .firstRun > *:last-child { + margin-bottom: 0; } h3 { - margin: 0; + margin: 1em 0; } -p { - white-space: pre-line; + +label + legend { + color: color-mix(in srgb, currentColor 69%, transparent); + font-size: var(--font-size-smaller); + margin-inline-start: var(--default-gap-large); + } + +body[data-forbid~="dashboard"] #dashboard-nav [data-pane="settings"], +body[data-forbid~="dashboard"] section[data-pane="settings"], +body[data-forbid~="dashboard"] #dashboard-nav [data-pane="rulesets"], +body[data-forbid~="dashboard"] section[data-pane="rulesets"] { + display: none; + } +body[data-forbid~="filteringMode"] section[data-pane="settings"] > div:has(> h3[data-i18n="defaultFilteringModeSectionLabel"]), +body[data-forbid~="filteringMode"] section[data-pane="settings"] > div:has(> h3[data-i18n="filteringMode0Name"]) { + display: none; + } + +label:has(input[type="checkbox"][disabled]), +label:has(input[type="checkbox"][disabled]) + legend { + filter: var(--checkbox-disabled-filter); } #defaultFilteringMode { @@ -39,6 +52,9 @@ display: flex; flex-direction: column; } +.filteringModeCard:hover { + background-color: color-mix(in hsl, var(--surface-1) 75%, var(--surface-0) 25%); + } .filteringModeCard:has(.radio > [type="radio"]:checked) { background-color: var(--surface-0); } @@ -70,80 +86,122 @@ width: calc(240px / 2); } -#lists { - margin: 0.5em 0 0 0; - padding: 0; +h3[data-i18n="filteringMode0Name"]::first-letter { + text-transform: capitalize; } -.groupEntry:not([data-groupkey="user"]) .geDetails::before { - color: var(--ink-3); - content: '\2212'; - font-family: monospace; - font-size: large; - margin-inline-end: 0.25em; - -webkit-margin-end: 0.25em; +#trustedSites { + box-sizing: border-box; + height: 6rem; + resize: vertical; + width: 100%; } -.groupEntry.hideUnused:not([data-groupkey="user"]) .geDetails::before { - content: '+'; + +section[data-pane="rulesets"] > div:first-of-type { + background-color: var(--surface-1); + flex-shrink: 0; + padding: 1em 0; + position: sticky; + top: 0; + z-index: 10; } -.groupEntry { - margin: 0.5em 0; +section[data-pane="rulesets"] > div:first-of-type > p:first-of-type { + margin-top: 0; } -.groupEntry .geDetails { +section[data-pane="rulesets"] > div:first-of-type > p:last-of-type { + margin-bottom: 0; + } +.listEntry { + display: flex; + flex-direction: column; + } +.listEntry[data-nodeid] > .detailbar .listExpander { cursor: pointer; + top: 2px; } -.groupEntry .geName { +.listEntry[data-role="rootnode"] > .detailbar, +.listEntry[data-nodeid] > .detailbar .count { + cursor: pointer; + } +.listEntry[data-role="rootnode"] > .detailbar > *:not(.listExpander) { pointer-events: none; } -.groupEntry .geCount { +.listEntry .detailbar .count { + align-self: flex-end; color: var(--ink-3); - font-size: 90%; + font-size: small; pointer-events: none; } .listEntries { - margin-inline-start: 0.6em; - -webkit-margin-start: 0.6em; + display: flex; + flex-direction: column; + } +.listEntry:not([data-role="rootnode"]) > .listEntries { + margin-inline-start: var(--checkbox-size); + } +.listEntry.hideUnused > .listEntries > .listEntry:not(.isDefault):has(> .detailbar input:not(:checked)) { + display: none; } -.groupEntry:not([data-groupkey="user"]) .listEntry:not(.isDefault).unused { +.listEntry.fromAdmin:has(> .detailbar input[disabled]:not(:checked)) { display: none; } .listEntry > * { - margin-left: 0; - margin-right: 0; - text-transform: capitalize; unicode-bidi: embed; } -.listEntry .listname { +.listEntry h3 { + display: inline-block; + margin: 0; + } +.listEntry > .detailbar { + align-items: center; + display: inline-flex; + margin: calc(var(--default-gap-xsmall) / 2 + var(--default-gap-xxsmall) / 2) 0; white-space: nowrap; } +.listEntry > .detailbar > *:not(:first-child) { + margin-inline-start: var(--default-gap-xxsmall); + } +.listEntry[data-nodeid="default"] > .detailbar > .listExpander { + display: none; + } +.listEntry > .detailbar > .listExpander svg { + transform: rotate(180deg); + transform-origin: 50%; + } +.listEntry.hideUnused > .detailbar > .listExpander svg { + transform: rotate(90deg); + } +.listEntry .checkbox:has(input[disabled]), +.listEntry .checkbox:has(input[disabled]) ~ span { + filter: var(--checkbox-disabled-filter); + } .listEntry a, .listEntry .fa-icon { color: var(--info0-ink); fill: var(--info0-ink); - display: none; font-size: 120%; - margin: 0 0.2em 0 0; } .listEntry .fa-icon:hover { transform: scale(1.25); } -.listEntry .content { - display: inline-flex; +.listEntry .iconbar a.support[href="#"] { + display: none; } -.listEntry a.towiki { - display: inline-flex; + +body.noMoreRuleset .listEntry:has(> .detailbar input:not(:checked)) { + opacity: 0.5; + pointer-events: none; +} + +#lists.searchMode > .listEntries .listEntries, +#lists.searchMode > .listEntries .listEntry.searchMatch { + display: flex !important; } -.listEntry.support a.support { - display: inline-flex; +#lists.searchMode > .listEntries .listEntry { + display: none; } -.listEntry.mustread a.mustread { - color: var(--info1-ink); - fill: var(--info1-ink); - display: inline-flex; +#lists.searchMode > .listEntries .listExpander { + visibility: hidden; } -.listEntry .status { - cursor: default; - display: none; -} /* touch-screen devices */ :root.mobile .listEntry .fa-icon { @@ -173,3 +231,12 @@ #templates { display: none; } + +@media (max-width: 480px) { + #defaultFilteringMode { + grid: 1fr 1fr 1fr / auto-flow dense; + } + .filteringModeCard > div:nth-of-type(2) { + justify-content: flex-start; + } +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/strictblock.css ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/strictblock.css --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/css/strictblock.css 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/css/strictblock.css 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,158 @@ +/** + uBlock Origin - a browser extension to block requests. + Copyright (C) 2018-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +body { + display: flex; + padding: var(--default-gap-xxlarge) var(--default-gap-small); + justify-content: center; + } +:root.mobile body { + padding: var(--default-gap-small); + } +body.loading { + visibility: hidden; + } + +#rootContainer { + width: min(100%, 640px); + } +#rootContainer > * { + margin: 0 0 var(--default-gap-xxlarge) 0; + } +:root.mobile #rootContainer > * { + margin-bottom: var(--default-gap-xlarge); + } + +p { + margin: 0.5em 0; + } +a { + text-decoration: none; + } +q { + font-weight: bold; + } +.code { + font-size: var(--font-size-smaller); + word-break: break-all; + } +#warningSign { + color: var(--accent-surface-1); + fill: var(--accent-surface-1); + font-size: 96px; + line-height: 1; + width: 100%; + } +:root.mobile #warningSign { + font-size: 64px; + } +#theURL { + color: var(--ink-2); + padding: 0; + } +#theURL > * { + margin: 0; + } +#theURL > p { + position: relative; + z-index: 10; + } +#theURL > p > span:first-of-type { + display: block; + max-height: 6lh; + overflow-y: auto; + } +:root.mobile #theURL > p > span:first-of-type { + max-height: 3lh; + } +#theURL #toggleParse { + background-color: transparent; + top: 100%; + box-sizing: border-box; + color: var(--ink-3); + fill: var(--ink-3); + cursor: pointer; + font-size: 1.2rem; + padding: var(--default-gap-xxsmall); + position: absolute; + transform: translate(0, -50%); + } +#theURL:not(.collapsed) #toggleParse > span:first-of-type { + display: none; + } +#theURL.collapsed #toggleParse > span:last-of-type { + display: none; + } +body[dir="ltr"] #toggleParse { + right: 0; + } +body[dir="rtl"] #toggleParse { + left: 0; + } +#theURL > p:hover #toggleParse { + transform: translate(0, -50%) scale(1.15); + } +#parsed { + background-color: var(--surface-1); + border: 4px solid var(--surface-2); + font-size: small; + overflow-x: auto; + padding: var(--default-gap-xxsmall); + text-align: initial; + text-overflow: ellipsis; + } +#theURL.collapsed > #parsed { + display: none; + } +#parsed ul, #parsed li { + list-style-type: none; + } +#parsed li { + white-space: nowrap; + } +#parsed span { + display: inline-block; + } +#parsed span:first-of-type { + font-weight: bold; + } + +#urlskip a { + display: block; + overflow-y: auto; + } + +#actionContainer { + display: flex; + justify-content: space-between; + } +:root.mobile #actionContainer { + justify-content: center; + display: flex; + flex-direction: column; + } +#actionContainer > button { + margin-bottom: 2rem + } + +/* Small-screen devices */ +:root.mobile button { + width: 100%; + } diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/dashboard.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/dashboard.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/dashboard.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/dashboard.html 2025-02-09 18:18:39.000000000 +0000 @@ -8,31 +8,163 @@ + + + + + - +
- +
-
+
+
+

+

+

+

+

+ +
+

+

+
+ +
+

+

+
+ + + +
+

+

+ +
+

+

_

+

+

+
+
+ +
-   -   - +

+

-
+
- +
+
+
+
+
Copyright (c) Raymond Hill 2014-present
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+ + + home + + +
+ + +
+ + diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/about.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/about.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/about.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/about.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -'use strict'; - -import { runtime } from './ext.js'; -import { dom } from './dom.js'; - -/******************************************************************************/ - -(async ( ) => { - const manifest = runtime.getManifest(); - - dom.text('#aboutNameVer', `${manifest.name} ${manifest.version}`); -})(); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/admin.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/admin.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/admin.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/admin.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,121 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { + adminRead, + localRead, localWrite, + sessionRead, sessionWrite, +} from './ext.js'; + +import { + enableRulesets, + getRulesetDetails, +} from './ruleset-manager.js'; + +import { + getTrustedSites, + readFilteringModeDetails, +} from './mode-manager.js'; + +import { broadcastMessage } from './utils.js'; +import { dnr } from './ext.js'; +import { registerInjectables } from './scripting-manager.js'; +import { rulesetConfig } from './config.js'; +import { ubolLog } from './debug.js'; + +/******************************************************************************/ + +const adminSettings = { + keys: new Set(), + timer: undefined, + change(key) { + this.keys.add(key); + if ( this.timer !== undefined ) { return; } + this.timer = self.setTimeout(( ) => { + this.timer = undefined; + this.process(); + }, 127); + }, + async process() { + if ( this.keys.has('rulesets') ) { + ubolLog('admin setting "rulesets" changed'); + await enableRulesets(rulesetConfig.enabledRulesets); + await registerInjectables(); + const results = await Promise.all([ + getAdminRulesets(), + dnr.getEnabledRulesets(), + ]); + const [ adminRulesets, enabledRulesets ] = results; + broadcastMessage({ adminRulesets, enabledRulesets }); + } + if ( this.keys.has('noFiltering') ) { + ubolLog('admin setting "noFiltering" changed'); + await readFilteringModeDetails(true); + const trustedSites = await getTrustedSites(); + broadcastMessage({ trustedSites: Array.from(trustedSites) }); + } + this.keys.clear(); + } +}; + +/******************************************************************************/ + +export async function getAdminRulesets() { + const adminList = await adminReadEx('rulesets'); + const adminRulesets = new Set(Array.isArray(adminList) && adminList || []); + if ( adminRulesets.has('-*') ) { + adminRulesets.delete('-*'); + const rulesetDetails = await getRulesetDetails(); + for ( const ruleset of rulesetDetails.values() ) { + if ( ruleset.enabled ) { continue; } + if ( adminRulesets.has(`+${ruleset.id}`) ) { continue; } + adminRulesets.add(`-${ruleset.id}`); + } + } + return Array.from(adminRulesets); +} + +/******************************************************************************/ + +export async function adminReadEx(key) { + let cacheValue; + const session = await sessionRead(`admin_${key}`); + if ( session ) { + cacheValue = session.data; + } else { + const local = await localRead(`admin_${key}`); + if ( local ) { + cacheValue = local.data; + } + } + adminRead(key).then(async value => { + const adminKey = `admin_${key}`; + await Promise.all([ + sessionWrite(adminKey, { data: value }), + localWrite(adminKey, { data: value }), + ]); + if ( JSON.stringify(value) === JSON.stringify(cacheValue) ) { return; } + adminSettings.change(key); + }); + return cacheValue; +} + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/background.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/background.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/background.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/background.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,126 +19,72 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ +import { + MODE_BASIC, + MODE_OPTIMAL, + getDefaultFilteringMode, + getFilteringMode, + getTrustedSites, + setDefaultFilteringMode, + setFilteringMode, + setTrustedSites, + syncWithBrowserPermissions, +} from './mode-manager.js'; import { + adminRead, browser, dnr, + localRead, localRemove, localWrite, runtime, + windows, } from './ext.js'; import { - CURRENT_CONFIG_BASE_RULE_ID, - getRulesetDetails, - getDynamicRules, - defaultRulesetsFromLanguage, + adminReadEx, + getAdminRulesets, +} from './admin.js'; + +import { enableRulesets, + excludeFromStrictBlock, getEnabledRulesetsDetails, + getRulesetDetails, + patchDefaultRulesets, + setStrictBlockMode, updateDynamicRules, + updateSessionRules, } from './ruleset-manager.js'; import { - registerInjectables, -} from './scripting-manager.js'; + getMatchedRules, + isSideloaded, + toggleDeveloperMode, + ubolLog, +} from './debug.js'; import { - getFilteringMode, - setFilteringMode, - getDefaultFilteringMode, - setDefaultFilteringMode, - syncWithBrowserPermissions, -} from './mode-manager.js'; + loadRulesetConfig, + process, + rulesetConfig, + saveRulesetConfig, +} from './config.js'; -/******************************************************************************/ +import { broadcastMessage } from './utils.js'; +import { registerInjectables } from './scripting-manager.js'; -const rulesetConfig = { - version: '', - enabledRulesets: [ 'default' ], - autoReload: 1, - firstRun: false, -}; +/******************************************************************************/ const UBOL_ORIGIN = runtime.getURL('').replace(/\/$/, ''); +const canShowBlockedCount = typeof dnr.setExtensionActionOptions === 'function'; + /******************************************************************************/ function getCurrentVersion() { return runtime.getManifest().version; } -async function loadRulesetConfig() { - const dynamicRuleMap = await getDynamicRules(); - const configRule = dynamicRuleMap.get(CURRENT_CONFIG_BASE_RULE_ID); - if ( configRule === undefined ) { - rulesetConfig.enabledRulesets = await defaultRulesetsFromLanguage(); - rulesetConfig.firstRun = true; - return; - } - let rawConfig; - try { - rawConfig = JSON.parse(self.atob(configRule.condition.urlFilter)); - } catch(ex) { - } - - // New format - if ( Array.isArray(rawConfig) ) { - rulesetConfig.version = rawConfig[0]; - rulesetConfig.enabledRulesets = rawConfig[1]; - rulesetConfig.autoReload = rawConfig[2]; - return; - } - - // Legacy format. TODO: remove when next new format is widely in use. - const match = /^\|\|(?:example|ubolite)\.invalid\/([^\/]+)\/(?:([^\/]+)\/)?/.exec( - configRule.condition.urlFilter - ); - if ( match === null ) { return; } - rulesetConfig.version = match[1]; - if ( match[2] ) { - rulesetConfig.enabledRulesets = - decodeURIComponent(match[2] || '').split(' '); - } -} - -async function saveRulesetConfig() { - const dynamicRuleMap = await getDynamicRules(); - let configRule = dynamicRuleMap.get(CURRENT_CONFIG_BASE_RULE_ID); - if ( configRule === undefined ) { - configRule = { - id: CURRENT_CONFIG_BASE_RULE_ID, - action: { - type: 'allow', - }, - condition: { - urlFilter: '', - initiatorDomains: [ - 'ubolite.invalid', - ], - resourceTypes: [ - 'main_frame', - ], - }, - }; - } - const rawConfig = [ - rulesetConfig.version, - rulesetConfig.enabledRulesets, - rulesetConfig.autoReload, - ]; - const urlFilter = self.btoa(JSON.stringify(rawConfig)); - if ( urlFilter === configRule.condition.urlFilter ) { return; } - configRule.condition.urlFilter = urlFilter; - - return dnr.updateDynamicRules({ - addRules: [ configRule ], - removeRuleIds: [ CURRENT_CONFIG_BASE_RULE_ID ], - }); -} - /******************************************************************************/ async function hasGreatPowers(origin) { @@ -148,7 +94,11 @@ }); } -function hasOmnipotence() { +async function hasOmnipotence() { + const manifest = runtime.getManifest(); + const hasOmnipotence = Array.isArray(manifest.host_permissions) && + manifest.host_permissions.includes(''); + if ( hasOmnipotence ) { return true; } return browser.permissions.contains({ origins: [ '' ], }); @@ -157,19 +107,76 @@ async function onPermissionsRemoved() { const beforeMode = await getDefaultFilteringMode(); const modified = await syncWithBrowserPermissions(); - if ( modified === false ) { return; } + if ( modified === false ) { return false; } const afterMode = await getDefaultFilteringMode(); - if ( beforeMode > 1 && afterMode <= 1 ) { + if ( beforeMode > MODE_BASIC && afterMode <= MODE_BASIC ) { updateDynamicRules(); } registerInjectables(); + return true; +} + +/******************************************************************************/ + +async function gotoURL(url, type) { + const pageURL = new URL(url, runtime.getURL('/')); + const tabs = await browser.tabs.query({ + url: pageURL.href, + windowType: type !== 'popup' ? 'normal' : 'popup' + }); + + if ( Array.isArray(tabs) && tabs.length !== 0 ) { + const { windowId, id } = tabs[0]; + return Promise.all([ + browser.windows.update(windowId, { focused: true }), + browser.tabs.update(id, { active: true }), + ]); + } + + if ( type === 'popup' ) { + return windows.create({ + type: 'popup', + url: pageURL.href, + }); + } + + return browser.tabs.create({ + active: true, + url: pageURL.href, + }); } /******************************************************************************/ function onMessage(request, sender, callback) { - if ( sender.origin !== UBOL_ORIGIN ) { return; } + // Does not require trusted origin. + + switch ( request.what ) { + + case 'insertCSS': { + const tabId = sender?.tab?.id ?? false; + const frameId = sender?.frameId ?? false; + if ( tabId === false || frameId === false ) { return; } + browser.scripting.insertCSS({ + css: request.css, + origin: 'USER', + target: { tabId, frameIds: [ frameId ] }, + }).catch(reason => { + console.log(reason); + }); + return false; + } + + default: + break; + } + + // Does require trusted origin. + + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/MessageSender + // Firefox API does not set `sender.origin` + if ( sender.origin !== undefined && sender.origin !== UBOL_ORIGIN ) { return; } switch ( request.what ) { @@ -180,6 +187,9 @@ }).then(( ) => { registerInjectables(); callback(); + return dnr.getEnabledRulesets(); + }).then(enabledRulesets => { + broadcastMessage({ enabledRulesets }); }); return true; } @@ -187,28 +197,72 @@ case 'getOptionsPageData': { Promise.all([ getDefaultFilteringMode(), + getTrustedSites(), getRulesetDetails(), dnr.getEnabledRulesets(), + getAdminRulesets(), + adminReadEx('disabledFeatures'), ]).then(results => { const [ defaultFilteringMode, + trustedSites, rulesetDetails, enabledRulesets, + adminRulesets, + disabledFeatures, ] = results; callback({ defaultFilteringMode, + trustedSites: Array.from(trustedSites), enabledRulesets, + adminRulesets, + maxNumberOfEnabledRulesets: dnr.MAX_NUMBER_OF_ENABLED_STATIC_RULESETS, rulesetDetails: Array.from(rulesetDetails.values()), - autoReload: rulesetConfig.autoReload === 1, - firstRun: rulesetConfig.firstRun, + autoReload: rulesetConfig.autoReload, + showBlockedCount: rulesetConfig.showBlockedCount, + canShowBlockedCount, + strictBlockMode: rulesetConfig.strictBlockMode, + firstRun: process.firstRun, + isSideloaded, + developerMode: rulesetConfig.developerMode, + disabledFeatures, }); - rulesetConfig.firstRun = false; + process.firstRun = false; }); return true; } case 'setAutoReload': - rulesetConfig.autoReload = request.state ? 1 : 0; + rulesetConfig.autoReload = request.state && true || false; + saveRulesetConfig().then(( ) => { + callback(); + broadcastMessage({ autoReload: rulesetConfig.autoReload }); + }); + return true; + + case 'setShowBlockedCount': + rulesetConfig.showBlockedCount = request.state && true || false; + if ( canShowBlockedCount ) { + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: rulesetConfig.showBlockedCount, + }); + } + saveRulesetConfig().then(( ) => { + callback(); + broadcastMessage({ showBlockedCount: rulesetConfig.showBlockedCount }); + }); + return true; + + case 'setStrictBlockMode': + setStrictBlockMode(request.state).then(( ) => { + callback(); + broadcastMessage({ strictBlockMode: rulesetConfig.strictBlockMode }); + }); + return true; + + case 'setDeveloperMode': + rulesetConfig.developerMode = request.state; + toggleDeveloperMode(rulesetConfig.developerMode); saveRulesetConfig().then(( ) => { callback(); }); @@ -220,13 +274,17 @@ hasOmnipotence(), hasGreatPowers(request.origin), getEnabledRulesetsDetails(), + adminReadEx('disabledFeatures'), ]).then(results => { callback({ level: results[0], - autoReload: rulesetConfig.autoReload === 1, + autoReload: rulesetConfig.autoReload, hasOmnipotence: results[1], hasGreatPowers: results[2], rulesetDetails: results[3], + isSideloaded, + developerMode: rulesetConfig.developerMode, + disabledFeatures: results[4], }); }); return true; @@ -239,6 +297,10 @@ return true; } + case 'gotoURL': + gotoURL(request.url, request.type); + break; + case 'setFilteringMode': { getFilteringMode(request.hostname).then(actualLevel => { if ( request.level === actualLevel ) { return actualLevel; } @@ -250,9 +312,15 @@ return true; } + case 'getDefaultFilteringMode': { + getDefaultFilteringMode().then(level => { + callback(level); + }); + return true; + } + case 'setDefaultFilteringMode': { - getDefaultFilteringMode( - ).then(beforeLevel => + getDefaultFilteringMode().then(beforeLevel => setDefaultFilteringMode(request.level).then(afterLevel => ({ beforeLevel, afterLevel }) ) @@ -268,47 +336,101 @@ return true; } + case 'setTrustedSites': + setTrustedSites(request.hostnames).then(( ) => { + registerInjectables(); + return Promise.all([ + getDefaultFilteringMode(), + getTrustedSites(), + ]); + }).then(results => { + callback({ + defaultFilteringMode: results[0], + trustedSites: Array.from(results[1]), + }); + }); + return true; + + case 'excludeFromStrictBlock': { + excludeFromStrictBlock(request.hostname, request.permanent).then(( ) => { + callback(); + }); + return true; + } + + case 'getMatchedRules': + getMatchedRules(request.tabId).then(entries => { + callback(entries); + }); + return true; + + case 'showMatchedRules': + windows.create({ + type: 'popup', + url: `/matched-rules.html?tab=${request.tabId}`, + }); + break; + default: break; } + + return false; } /******************************************************************************/ async function start() { await loadRulesetConfig(); - await enableRulesets(rulesetConfig.enabledRulesets); - // We need to update the regex rules only when ruleset version changes. const currentVersion = getCurrentVersion(); - if ( currentVersion !== rulesetConfig.version ) { - console.log(`Version change: ${rulesetConfig.version} => ${currentVersion}`); - updateDynamicRules().then(( ) => { - rulesetConfig.version = currentVersion; - saveRulesetConfig(); - }); + const isNewVersion = currentVersion !== rulesetConfig.version; + + // The default rulesets may have changed, find out new ruleset to enable, + // obsolete ruleset to remove. + if ( isNewVersion ) { + ubolLog(`Version change: ${rulesetConfig.version} => ${currentVersion}`); + rulesetConfig.version = currentVersion; + await patchDefaultRulesets(); + saveRulesetConfig(); + } + + const rulesetsUpdated = process.wakeupRun === false && + await enableRulesets(rulesetConfig.enabledRulesets); + + // We need to update the regex rules only when ruleset version changes. + if ( rulesetsUpdated === false ) { + if ( isNewVersion ) { + updateDynamicRules(); + } else if ( process.wakeupRun === false ) { + updateSessionRules(); + } } // Permissions may have been removed while the extension was disabled - await onPermissionsRemoved(); + const permissionsChanged = await onPermissionsRemoved(); // Unsure whether the browser remembers correctly registered css/scripts // after we quit the browser. For now uBOL will check unconditionally at // launch time whether content css/scripts are properly registered. - registerInjectables(); + if ( process.wakeupRun === false || permissionsChanged ) { + registerInjectables(); - const enabledRulesets = await dnr.getEnabledRulesets(); - console.log(`Enabled rulesets: ${enabledRulesets}`); + const enabledRulesets = await dnr.getEnabledRulesets(); + ubolLog(`Enabled rulesets: ${enabledRulesets}`); - dnr.getAvailableStaticRuleCount().then(count => { - console.log(`Available static rule count: ${count}`); - }); - - dnr.setExtensionActionOptions({ displayActionCountAsBadgeText: true }); -} + dnr.getAvailableStaticRuleCount().then(count => { + ubolLog(`Available static rule count: ${count}`); + }); + } -(async ( ) => { - await start(); + // https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/declarativeNetRequest + // Firefox API does not support `dnr.setExtensionActionOptions` + if ( process.wakeupRun === false && canShowBlockedCount ) { + dnr.setExtensionActionOptions({ + displayActionCountAsBadgeText: rulesetConfig.showBlockedCount, + }); + } runtime.onMessage.addListener(onMessage); @@ -316,7 +438,49 @@ ( ) => { onPermissionsRemoved(); } ); - if ( rulesetConfig.firstRun ) { - runtime.openOptionsPage(); + if ( process.firstRun ) { + const enableOptimal = await hasOmnipotence(); + if ( enableOptimal ) { + const afterLevel = await setDefaultFilteringMode(MODE_OPTIMAL); + if ( afterLevel === MODE_OPTIMAL ) { + updateDynamicRules(); + registerInjectables(); + process.firstRun = false; + } + } else { + const disableFirstRunPage = await adminRead('disableFirstRunPage'); + if ( disableFirstRunPage !== true ) { + runtime.openOptionsPage(); + } else { + process.firstRun = false; + } + } + } + + toggleDeveloperMode(rulesetConfig.developerMode); + + // Required to ensure the up to date property is available when needed + if ( process.wakeupRun === false ) { + adminReadEx('disabledFeatures'); } -})(); +} + +// https://github.com/uBlockOrigin/uBOL-home/issues/199 +// Force a restart of the extension once when an "internal error" occurs +start().then(( ) => { + localRemove('goodStart'); + return false; +}).catch(reason => { + console.trace(reason); + if ( process.wakeupRun ) { return; } + return localRead('goodStart').then(goodStart => { + if ( goodStart === false ) { + localRemove('goodStart'); + return false; + } + return localWrite('goodStart', false).then(( ) => true); + }); +}).then(restart => { + if ( restart !== true ) { return; } + runtime.reload(); +}); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/config.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/config.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/config.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/config.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,76 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2022-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { + localRead, localWrite, + sessionRead, sessionWrite, +} from './ext.js'; + +/******************************************************************************/ + +export const rulesetConfig = { + version: '', + enabledRulesets: [], + autoReload: true, + showBlockedCount: true, + strictBlockMode: true, + developerMode: false, +}; + +export const process = { + firstRun: false, + wakeupRun: false, +}; + +/******************************************************************************/ + +export async function loadRulesetConfig() { + const sessionData = await sessionRead('rulesetConfig'); + if ( sessionData ) { + rulesetConfig.version = sessionData.version; + rulesetConfig.enabledRulesets = sessionData.enabledRulesets; + rulesetConfig.autoReload = sessionData.autoReload ?? true; + rulesetConfig.showBlockedCount = sessionData.showBlockedCount ?? true; + rulesetConfig.strictBlockMode = sessionData.strictBlockMode ?? true; + rulesetConfig.developerMode = sessionData.developerMode ?? false; + process.wakeupRun = true; + return; + } + const localData = await localRead('rulesetConfig'); + if ( localData ) { + rulesetConfig.version = localData.version; + rulesetConfig.enabledRulesets = localData.enabledRulesets; + rulesetConfig.autoReload = localData.autoReload ?? true; + rulesetConfig.showBlockedCount = localData.showBlockedCount ?? true; + rulesetConfig.strictBlockMode = localData.strictBlockMode ?? true; + rulesetConfig.developerMode = localData.developerMode ?? false; + sessionWrite('rulesetConfig', rulesetConfig); + return; + } + sessionWrite('rulesetConfig', rulesetConfig); + localWrite('rulesetConfig', rulesetConfig); + process.firstRun = true; +} + +export async function saveRulesetConfig() { + sessionWrite('rulesetConfig', rulesetConfig); + return localWrite('rulesetConfig', rulesetConfig); +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/dashboard-common.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/dashboard-common.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/dashboard-common.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/dashboard-common.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -'use strict'; - -import { dom } from './dom.js'; - -/******************************************************************************/ - -// Open links in the proper window -dom.attr('a', 'target', '_blank'); -dom.attr('a[href*="dashboard.html"]', 'target', '_parent'); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/dashboard.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/dashboard.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/dashboard.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/dashboard.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,110 +19,20 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - -import { simpleStorage } from './storage.js'; -import { dom, qs$ } from './dom.js'; +import { dom } from './dom.js'; +import { runtime } from './ext.js'; /******************************************************************************/ -const discardUnsavedData = function(synchronous = false) { - const paneFrame = qs$('#iframe'); - const paneWindow = paneFrame.contentWindow; - if ( - typeof paneWindow.hasUnsavedData !== 'function' || - paneWindow.hasUnsavedData() === false - ) { - return true; - } - - if ( synchronous ) { - return false; - } - - return new Promise(resolve => { - const modal = document.querySelector('#unsavedWarning'); - dom.cl.add(modal, 'on'); - modal.focus(); - - const onDone = status => { - dom.cl.remove(modal, 'on'); - document.removeEventListener('click', onClick, true); - resolve(status); - }; - - const onClick = ev => { - const target = ev.target; - if ( target.matches('[data-i18n="dashboardUnsavedWarningStay"]') ) { - return onDone(false); - } - if ( target.matches('[data-i18n="dashboardUnsavedWarningIgnore"]') ) { - return onDone(true); - } - if ( modal.querySelector('[data-i18n="dashboardUnsavedWarning"]').contains(target) ) { - return; - } - onDone(false); - }; - - document.addEventListener('click', onClick, true); - }); -}; - -const loadDashboardPanel = function(pane, first) { - const tabButton = document.querySelector(`[data-pane="${pane}"]`); - if ( tabButton === null || dom.cl.has(tabButton, 'selected') ) { - return; - } - const loadPane = ( ) => { - self.location.replace(`#${pane}`); - for ( const node of document.querySelectorAll('.tabButton.selected') ) { - dom.cl.remove(node, 'selected'); - } - dom.cl.add(tabButton, 'selected'); - tabButton.scrollIntoView(); - document.querySelector('#iframe').contentWindow.location.replace(pane); - if ( pane !== 'no-dashboard.html' ) { - simpleStorage.setItem('dashboardLastVisitedPane', pane); - } - }; - if ( first ) { - return loadPane(); - } - const r = discardUnsavedData(); - if ( r === false ) { return; } - if ( r === true ) { - return loadPane(); - } - r.then(status => { - if ( status === false ) { return; } - loadPane(); - }); -}; - -const onTabClickHandler = function(ev) { - loadDashboardPanel(dom.attr(ev.target, 'data-pane')); -}; - -if ( self.location.hash.slice(1) === 'no-dashboard.html' ) { - dom.cl.add(dom.body, 'noDashboard'); +{ + const manifest = runtime.getManifest(); + dom.text('#aboutNameVer', `${manifest.name} ${manifest.version}`); } -(async ( ) => { - let pane = null; - if ( self.location.hash !== '' ) { - pane = self.location.hash.slice(1) || null; - } - loadDashboardPanel(pane !== null ? pane : 'settings.html', true); - - dom.on('#dashboard-nav', 'click', '.tabButton', onTabClickHandler); - - // https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event - window.addEventListener('beforeunload', ( ) => { - if ( discardUnsavedData(true) ) { return; } - event.preventDefault(); - event.returnValue = ''; - }); -})(); +dom.attr('a', 'target', '_blank'); + +dom.on('#dashboard-nav', 'click', '.tabButton', ev => { + dom.body.dataset.pane = ev.target.dataset.pane; +}); /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/debug.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/debug.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/debug.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/debug.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,128 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2024-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { dnr } from './ext.js'; + +/******************************************************************************/ + +export const isSideloaded = dnr.onRuleMatchedDebug instanceof Object; + +/******************************************************************************/ + +export const ubolLog = (...args) => { + // Do not pollute dev console in stable releases. + if ( isSideloaded !== true ) { return; } + console.info('[uBOL]', ...args); +}; + +/******************************************************************************/ + +const rulesets = new Map(); +const bufferSize = isSideloaded ? 256 : 1; +const matchedRules = new Array(bufferSize); +matchedRules.fill(null); +let writePtr = 0; + +const pruneLongLists = list => { + if ( list.length <= 21 ) { return list; } + return [ ...list.slice(0, 10), '...', ...list.slice(-10) ]; + +}; + +const getRuleset = async rulesetId => { + if ( rulesets.has(rulesetId) ) { + return rulesets.get(rulesetId); + } + let rules; + if ( rulesetId === dnr.DYNAMIC_RULESET_ID ) { + rules = await dnr.getDynamicRules().catch(( ) => undefined); + } else { + const response = await fetch(`/rulesets/main/${rulesetId}.json`).catch(( ) => undefined); + if ( response === undefined ) { return; } + rules = await response.json().catch(( ) => undefined); + } + if ( Array.isArray(rules) === false ) { return; } + const ruleset = new Map(); + for ( const rule of rules ) { + const condition = rule.condition; + if ( condition ) { + if ( condition.requestDomains ) { + condition.requestDomains = pruneLongLists(condition.requestDomains); + } + if ( condition.initiatorDomains ) { + condition.initiatorDomains = pruneLongLists(condition.initiatorDomains); + } + } + const ruleId = rule.id; + rule.id = `${rulesetId}/${ruleId}`; + ruleset.set(ruleId, rule); + } + rulesets.set(rulesetId, ruleset); + return ruleset; +}; + +const getRuleDetails = async ruleInfo => { + const { rulesetId, ruleId } = ruleInfo.rule; + const ruleset = await getRuleset(rulesetId); + if ( ruleset === undefined ) { return; } + return { request: ruleInfo.request, rule: ruleset.get(ruleId) }; +}; + +/******************************************************************************/ + +export const getMatchedRules = (( ) => { + const noopFn = ( ) => Promise.resolve([]); + if ( isSideloaded !== true ) { return noopFn; } + + return async tabId => { + const promises = []; + for ( let i = 0; i < bufferSize; i++ ) { + const j = (writePtr + i) % bufferSize; + const ruleInfo = matchedRules[j]; + if ( ruleInfo === null ) { continue; } + if ( ruleInfo.request.tabId !== -1 ) { + if ( ruleInfo.request.tabId !== tabId ) { continue; } + } + const promise = getRuleDetails(ruleInfo); + if ( promise === undefined ) { continue; } + promises.unshift(promise); + } + return Promise.all(promises); + }; +})(); + +/******************************************************************************/ + +const matchedRuleListener = ruleInfo => { + matchedRules[writePtr] = ruleInfo; + writePtr = (writePtr + 1) % bufferSize; +}; + +export const toggleDeveloperMode = state => { + if ( isSideloaded !== true ) { return; } + if ( state ) { + dnr.onRuleMatchedDebug.addListener(matchedRuleListener); + } else { + dnr.onRuleMatchedDebug.removeListener(matchedRuleListener); + } +}; + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/ext.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/ext.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/ext.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/ext.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,28 +19,24 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -const browser = +export const browser = self.browser instanceof Object && self.browser instanceof Element === false ? self.browser : self.chrome; -const dnr = browser.declarativeNetRequest; -const i18n = browser.i18n; -const runtime = browser.runtime; +export const dnr = browser.declarativeNetRequest; +export const i18n = browser.i18n; +export const runtime = browser.runtime; +export const TAB_ID_NONE = browser.tabs.TAB_ID_NONE; +export const windows = browser.windows; /******************************************************************************/ // The extension's service worker can be evicted at any time, so when we // send a message, we try a few more times when the message fails to be sent. -function sendMessage(msg) { +export function sendMessage(msg) { return new Promise((resolve, reject) => { let i = 5; const send = ( ) => { @@ -61,4 +57,65 @@ /******************************************************************************/ -export { browser, dnr, i18n, runtime, sendMessage }; +export async function localRead(key) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.local instanceof Object === false ) { return; } + try { + const bin = await browser.storage.local.get(key); + if ( bin instanceof Object === false ) { return; } + return bin[key] ?? undefined; + } catch(ex) { + } +} + +export async function localWrite(key, value) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.local instanceof Object === false ) { return; } + return browser.storage.local.set({ [key]: value }); +} + +export async function localRemove(key) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.local instanceof Object === false ) { return; } + return browser.storage.local.remove(key); +} + +/******************************************************************************/ + +export async function sessionRead(key) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.session instanceof Object === false ) { return; } + try { + const bin = await browser.storage.session.get(key); + if ( bin instanceof Object === false ) { return; } + return bin[key] ?? undefined; + } catch(ex) { + } +} + +export async function sessionWrite(key, value) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.session instanceof Object === false ) { return; } + return browser.storage.session.set({ [key]: value }); +} + +export async function sessionRemove(key) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.session instanceof Object === false ) { return; } + return browser.storage.session.remove(key); +} + +/******************************************************************************/ + +export async function adminRead(key) { + if ( browser.storage instanceof Object === false ) { return; } + if ( browser.storage.managed instanceof Object === false ) { return; } + try { + const bin = await browser.storage.managed.get(key); + if ( bin instanceof Object === false ) { return; } + return bin[key] ?? undefined; + } catch(ex) { + } +} + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/fetch.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/fetch.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/fetch.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/fetch.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/filter-lists.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/filter-lists.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/filter-lists.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/filter-lists.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,449 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { dom, qs$, qsa$ } from './dom.js'; +import { i18n, i18n$ } from './i18n.js'; +import { localRead, localWrite, sendMessage } from './ext.js'; + +/******************************************************************************/ + +export const rulesetMap = new Map(); + +let cachedRulesetData = {}; +let hideUnusedSet = new Set([ 'regions' ]); + +/******************************************************************************/ + +function renderNumber(value) { + return value.toLocaleString(); +} + +/******************************************************************************/ + +function renderTotalRuleCounts() { + let rulesetCount = 0; + let filterCount = 0; + let ruleCount = 0; + for ( const liEntry of qsa$('#lists .listEntry[data-role="leaf"][data-rulesetid]') ) { + if ( qs$(liEntry, 'input[type="checkbox"]:checked') === null ) { continue; } + rulesetCount += 1; + const stats = rulesetStats(liEntry.dataset.rulesetid); + if ( stats === undefined ) { continue; } + ruleCount += stats.ruleCount; + filterCount += stats.filterCount; + } + dom.text('#listsOfBlockedHostsPrompt', i18n$('perRulesetStats') + .replace('{{ruleCount}}', renderNumber(ruleCount)) + .replace('{{filterCount}}', renderNumber(filterCount)) + ); + + dom.cl.toggle(dom.body, 'noMoreRuleset', + rulesetCount === cachedRulesetData.maxNumberOfEnabledRulesets + ); +} + +/******************************************************************************/ + +function updateNodes(listEntries) { + listEntries = listEntries || qs$('#lists'); + const sublistSelector = '.listEntry[data-rulesetid] > .detailbar input'; + const checkedSublistSelector = `${sublistSelector}:checked`; + const adminSublistSelector = '.listEntry.fromAdmin[data-rulesetid] > .detailbar input'; + for ( const listEntry of qsa$(listEntries, '.listEntry[data-nodeid]') ) { + const countElem = qs$(listEntry, ':scope > .detailbar .count'); + if ( countElem === null ) { continue; } + const totalCount = qsa$(listEntry, sublistSelector).length; + const checkedCount = qsa$(listEntry, checkedSublistSelector).length; + dom.text(countElem, `${checkedCount}/${totalCount}`); + const checkboxElem = qs$(listEntry, ':scope > .detailbar .checkbox'); + if ( checkboxElem === null ) { continue; } + const checkboxInput = qs$(checkboxElem, 'input'); + dom.prop(checkboxInput, 'checked', checkedCount !== 0); + dom.cl.toggle(checkboxElem, 'partial', + checkedCount !== 0 && checkedCount !== totalCount + ); + const adminCount = qsa$(listEntry, adminSublistSelector).length; + const fromAdmin = adminCount === totalCount; + dom.cl.toggle(listEntry, 'fromAdmin', fromAdmin); + dom.attr(checkboxInput, 'disabled', fromAdmin ? '' : null); + } +} + +/******************************************************************************/ + +function rulesetStats(rulesetId) { + const hasOmnipotence = cachedRulesetData.defaultFilteringMode > 1; + const rulesetDetails = rulesetMap.get(rulesetId); + if ( rulesetDetails === undefined ) { return; } + const { rules, filters } = rulesetDetails; + let ruleCount = rules.plain + rules.regex; + if ( hasOmnipotence ) { + ruleCount += rules.removeparam + rules.redirect + rules.modifyHeaders; + } + const filterCount = filters.accepted; + return { ruleCount, filterCount }; +} + +/******************************************************************************/ + +function isAdminRuleset(listkey) { + const { adminRulesets = [] } = cachedRulesetData; + for ( const id of adminRulesets ) { + const pos = id.indexOf(listkey); + if ( pos === 0 ) { return true; } + if ( pos !== 1 ) { continue; } + const c = id.charAt(0); + if ( c === '+' || c === '-' ) { return true; } + } + return false; +} + +/******************************************************************************/ + +export function renderFilterLists(rulesetData) { + cachedRulesetData = rulesetData; + const { enabledRulesets, rulesetDetails } = cachedRulesetData; + + const shouldUpdate = rulesetMap.size !== 0; + + rulesetDetails.forEach(rule => rulesetMap.set(rule.id, rule)); + + const listStatsTemplate = i18n$('perRulesetStats'); + + const initializeListEntry = (ruleset, listEntry) => { + const on = enabledRulesets.includes(ruleset.id); + if ( dom.cl.has(listEntry, 'toggled') === false ) { + dom.prop(qs$(listEntry, ':scope > .detailbar input'), 'checked', on); + } + if ( ruleset.homeURL ) { + dom.attr(qs$(listEntry, 'a.support'), 'href', ruleset.homeURL); + } + dom.cl.toggle(listEntry, 'isDefault', ruleset.id === 'default'); + const stats = rulesetStats(ruleset.id); + if ( stats === undefined ) { return; } + listEntry.title = listStatsTemplate + .replace('{{ruleCount}}', renderNumber(stats.ruleCount)) + .replace('{{filterCount}}', renderNumber(stats.filterCount)); + const fromAdmin = isAdminRuleset(ruleset.id); + dom.cl.toggle(listEntry, 'fromAdmin', fromAdmin); + const disabled = stats.ruleCount === 0 || fromAdmin; + dom.attr( + qs$(listEntry, '.input.checkbox input'), + 'disabled', + disabled ? '' : null + ); + }; + + // Update already rendered DOM lists + if ( shouldUpdate ) { + for ( const listEntry of qsa$('#lists .listEntry[data-rulesetid]') ) { + const rulesetid = listEntry.dataset.rulesetid; + const ruleset = rulesetMap.get(rulesetid); + initializeListEntry(ruleset, listEntry); + } + updateNodes(); + renderTotalRuleCounts(); + return; + } + + const createListEntry = (listDetails, depth) => { + if ( listDetails.lists === undefined ) { + return dom.clone('#templates .listEntry[data-role="leaf"]'); + } + if ( depth !== 0 ) { + return dom.clone('#templates .listEntry[data-role="node"]'); + } + return dom.clone('#templates .listEntry[data-role="rootnode"]'); + }; + + const createListEntries = (parentkey, listTree, depth = 0) => { + const listEntries = dom.clone('#templates .listEntries'); + const treeEntries = Object.entries(listTree); + if ( depth !== 0 ) { + const reEmojis = /\p{Emoji}+/gu; + treeEntries.sort((a ,b) => { + const ap = a[1].preferred === true; + const bp = b[1].preferred === true; + if ( ap !== bp ) { return ap ? -1 : 1; } + const as = (a[1].title || a[0]).replace(reEmojis, ''); + const bs = (b[1].title || b[0]).replace(reEmojis, ''); + return as.localeCompare(bs); + }); + } + for ( const [ listkey, listDetails ] of treeEntries ) { + const listEntry = createListEntry(listDetails, depth); + if ( listDetails.lists === undefined ) { + listEntry.dataset.rulesetid = listkey; + } else { + listEntry.dataset.nodeid = listkey; + dom.cl.toggle(listEntry, 'hideUnused', hideUnusedSet.has(listkey)); + } + qs$(listEntry, ':scope > .detailbar .listname').append( + i18n.patchUnicodeFlags(listDetails.name) + ); + if ( listDetails.lists !== undefined ) { + listEntry.append(createListEntries(listkey, listDetails.lists, depth+1)); + dom.cl.toggle(listEntry, 'expanded', true/*listIsExpanded(listkey)*/); + //updateListNode(listEntry); + } else { + initializeListEntry(listDetails, listEntry); + } + listEntries.append(listEntry); + } + return listEntries; + }; + + // Visually split the filter lists in groups + const groups = new Map([ + [ + 'default', + rulesetDetails.filter(ruleset => + ruleset.id === 'default' || + ruleset.group === 'default' + ), + ], [ + 'malware', + rulesetDetails.filter(ruleset => + ruleset.group === 'malware' + ), + ], [ + 'annoyances', + rulesetDetails.filter(ruleset => + ruleset.group === 'annoyances' + ), + ], [ + 'misc', + rulesetDetails.filter(ruleset => + ruleset.id !== 'default' && + ruleset.group === undefined && + typeof ruleset.lang !== 'string' + ), + ], [ + 'regions', + rulesetDetails.filter(ruleset => + ruleset.group === 'regions' + ), + ], + ]); + + dom.cl.toggle(dom.body, 'hideUnused', mustHideUnusedLists('*')); + + // Build list tree + const listTree = {}; + const groupNames = new Map(); + for ( const [ nodeid, rulesets ] of groups ) { + let name = groupNames.get(nodeid); + if ( name === undefined ) { + name = i18n$(`3pGroup${nodeid.charAt(0).toUpperCase()}${nodeid.slice(1)}`); + groupNames.set(nodeid, name); + } + const details = { name, lists: {} }; + listTree[nodeid] = details; + for ( const ruleset of rulesets ) { + if ( ruleset.parent !== undefined ) { + let lists = details.lists; + for ( const parent of ruleset.parent.split('|') ) { + if ( lists[parent] === undefined ) { + lists[parent] = { name: parent, lists: {} }; + } + lists = lists[parent].lists; + } + lists[ruleset.id] = ruleset; + } else { + details.lists[ruleset.id] = ruleset; + } + } + } + // Replace composite list with only one sublist with sublist itself + const promoteLonelySublist = (parent, depth = 0) => { + if ( Boolean(parent.lists) === false ) { return parent; } + const childKeys = Object.keys(parent.lists); + for ( const childKey of childKeys ) { + const child = promoteLonelySublist(parent.lists[childKey], depth + 1); + if ( child === parent.lists[childKey] ) { continue; } + parent.lists[child.id] = child; + delete parent.lists[childKey]; + } + if ( depth === 0 ) { return parent; } + if ( childKeys.length > 1 ) { return parent; } + return parent.lists[childKeys[0]] + }; + for ( const key of Object.keys(listTree) ) { + promoteLonelySublist(listTree[key]); + } + const listEntries = createListEntries('root', listTree); + + updateNodes(listEntries); + + dom.clear('#lists'); + qs$('#lists').append(listEntries); + + renderTotalRuleCounts(); +} + +/******************************************************************************/ + +// Collapsing of unused lists. + +function mustHideUnusedLists(which) { + const hideAll = hideUnusedSet.has('*'); + if ( which === '*' ) { return hideAll; } + return hideUnusedSet.has(which) !== hideAll; +} + +function toggleHideUnusedLists(which) { + const doesHideAll = hideUnusedSet.has('*'); + if ( which === '*' ) { + const mustHide = doesHideAll === false; + hideUnusedSet.clear(); + if ( mustHide ) { + hideUnusedSet.add(which); + } + dom.cl.toggle('#lists', 'hideUnused', mustHide); + dom.cl.toggle('.listEntry[data-nodeid]', 'hideUnused', mustHide); + } else { + const doesHide = hideUnusedSet.has(which); + if ( doesHide ) { + hideUnusedSet.delete(which); + } else { + hideUnusedSet.add(which); + } + const mustHide = doesHide === doesHideAll; + const groupSelector = `.listEntry[data-nodeid="${which}"]`; + dom.cl.toggle(groupSelector, 'hideUnused', mustHide); + } + + localWrite('hideUnusedFilterLists', Array.from(hideUnusedSet)); +} + +dom.on('#lists', 'click', '.listEntry[data-nodeid] > .detailbar, .listExpander', ev => { + toggleHideUnusedLists( + dom.attr(ev.target.closest('[data-nodeid]'), 'data-nodeid') + ); +}); + +// Initialize from saved state. +localRead('hideUnusedFilterLists').then(value => { + if ( Array.isArray(value) === false ) { return; } + hideUnusedSet = new Set(value); + for ( const listEntry of qsa$('[data-nodeid]') ) { + dom.cl.toggle(listEntry, 'hideUnused', + hideUnusedSet.has(listEntry.dataset.nodeid) + ); + } +}); + +/******************************************************************************/ + +const searchFilterLists = ( ) => { + const pattern = dom.prop('#findInLists', 'value') || ''; + dom.cl.toggle('#lists', 'searchMode', pattern !== ''); + if ( pattern === '' ) { return; } + const re = new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i'); + for ( const listEntry of qsa$('#lists [data-role="leaf"]') ) { + if ( dom.cl.has(listEntry, 'fromAdmin') ) { continue; } + const rulesetid = listEntry.dataset.rulesetid; + const rulesetDetails = rulesetMap.get(rulesetid); + if ( rulesetDetails === undefined ) { continue; } + let haystack = perListHaystack.get(rulesetDetails); + if ( haystack === undefined ) { + haystack = [ + rulesetDetails.name, + listEntry.dataset.nodeid, + rulesetDetails.group || '', + rulesetDetails.tags || '', + ].join(' ').trim(); + perListHaystack.set(rulesetDetails, haystack); + } + dom.cl.toggle(listEntry, 'searchMatch', re.test(haystack)); + } + for ( const listEntry of qsa$('#lists .listEntry:not([data-role="leaf"])') ) { + dom.cl.toggle(listEntry, 'searchMatch', + qs$(listEntry, '.listEntries .listEntry.searchMatch') !== null + ); + } +}; + +const perListHaystack = new WeakMap(); + +dom.on('#findInLists', 'input', searchFilterLists); + +/******************************************************************************/ + +const applyEnabledRulesets = (( ) => { + const apply = async ( ) => { + const enabledRulesets = []; + for ( const liEntry of qsa$('#lists .listEntry[data-role="leaf"][data-rulesetid]') ) { + const checked = qs$(liEntry, 'input[type="checkbox"]:checked') !== null; + if ( checked === false ) { continue; } + const { rulesetid } = liEntry.dataset; + if ( dom.cl.has(liEntry, 'fromAdmin') ) { continue; } + enabledRulesets.push(rulesetid); + } + + dom.cl.remove('#lists .listEntry.toggled', 'toggled'); + + if ( enabledRulesets.length === 0 ) { return; } + + await sendMessage({ + what: 'applyRulesets', + enabledRulesets, + }); + }; + + let timer; + + self.addEventListener('beforeunload', ( ) => { + if ( timer !== undefined ) { return; } + self.clearTimeout(timer); + timer = undefined; + apply(); + }); + + return function() { + if ( timer !== undefined ) { + self.clearTimeout(timer); + } + timer = self.setTimeout(( ) => { + timer = undefined; + apply(); + }, 997); + } +})(); + +dom.on('#lists', 'change', '.listEntry input[type="checkbox"]', ev => { + const input = ev.target; + const listEntry = input.closest('.listEntry'); + if ( listEntry === null ) { return; } + if ( listEntry.dataset.nodeid !== undefined ) { + const checkAll = input.checked || + dom.cl.has(qs$(listEntry, ':scope > .detailbar .checkbox'), 'partial'); + for ( const subListEntry of qsa$(listEntry, ':scope > .listEntries .listEntry[data-rulesetid]') ) { + dom.cl.add(subListEntry, 'toggled'); + dom.prop(qsa$(subListEntry, ':scope > .detailbar input'), 'checked', checkAll); + } + } else { + dom.cl.add(listEntry, 'toggled'); + } + updateNodes(); + renderTotalRuleCounts(); + applyEnabledRulesets(); +}); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/matched-rules.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/matched-rules.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/matched-rules.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/matched-rules.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,48 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { dom, qs$ } from './dom.js'; +import { sendMessage } from './ext.js'; + +/******************************************************************************/ + +const url = new URL(document.location.href); +const tabId = parseInt(url.searchParams.get('tab'), 10) || 0; + +const entries = await sendMessage({ + what: 'getMatchedRules', + tabId, +}); + +const fragment = new DocumentFragment(); +const template = qs$('#matchInfo'); +for ( const entry of (entries || []) ) { + if ( entry instanceof Object === false ) { continue; } + const row = template.content.cloneNode(true); + qs$(row, '.requestInfo').textContent = JSON.stringify(entry.request, null, 2); + qs$(row, '.ruleInfo').textContent = JSON.stringify(entry.rule, null, 2); + fragment.append(row); +} + +dom.empty('#matchedEntries'); +qs$('#matchedEntries').append(fragment); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/mode-manager.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/mode-manager.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/mode-manager.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/mode-manager.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,27 +19,33 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -import { - browser, - dnr, -} from './ext.js'; - import { + broadcastMessage, hostnamesFromMatches, isDescendantHostnameOfIter, + toBroaderHostname, } from './utils.js'; import { - TRUSTED_DIRECTIVE_BASE_RULE_ID, - BLOCKING_MODES_RULE_ID, - getDynamicRules -} from './ruleset-manager.js'; + browser, + localRead, localWrite, + sessionRead, sessionWrite, +} from './ext.js'; + +import { adminReadEx } from './admin.js'; +import { filteringModesToDNR } from './ruleset-manager.js'; + +/******************************************************************************/ + +// 0: no filtering +// 1: basic filtering +// 2: optimal filtering +// 3: complete filtering + +export const MODE_NONE = 0; +export const MODE_BASIC = 1; +export const MODE_OPTIMAL = 2; +export const MODE_COMPLETE = 3; /******************************************************************************/ @@ -52,328 +58,312 @@ } }; -/******************************************************************************/ - -const eqSets = (setBefore, setAfter) => { - for ( const hn of setAfter ) { - if ( setBefore.has(hn) === false ) { return false; } - } - for ( const hn of setBefore ) { - if ( setAfter.has(hn) === false ) { return false; } +const pruneHostnameFromSet = (hostname, hnSet) => { + let hn = hostname; + for (;;) { + hnSet.delete(hn); + hn = toBroaderHostname(hn); + if ( hn === '*' ) { break; } } - return true; }; /******************************************************************************/ -// 0: no blocking => TRUSTED_DIRECTIVE_BASE_RULE_ID / requestDomains -// 1: network => BLOCKING_MODES_RULE_ID / excludedInitiatorDomains -// 2: specific content => BLOCKING_MODES_RULE_ID / excludedRequestDomains -// 3: generic content => BLOCKING_MODES_RULE_ID / initiatorDomains - -let filteringModeDetailsPromise; - -function getActualFilteringModeDetails() { - if ( filteringModeDetailsPromise !== undefined ) { - return filteringModeDetailsPromise; - } - filteringModeDetailsPromise = Promise.all([ - getDynamicRules(), - getAllTrustedSiteDirectives(), - ]).then(results => { - const [ dynamicRuleMap, trustedSiteDirectives ] = results; - const details = { - none: new Set(trustedSiteDirectives), - }; - const rule = dynamicRuleMap.get(BLOCKING_MODES_RULE_ID); - if ( rule ) { - details.network = new Set(rule.condition.excludedInitiatorDomains); - details.extendedSpecific = new Set(rule.condition.excludedRequestDomains); - details.extendedGeneric = new Set(rule.condition.initiatorDomains); - } else { - details.network = new Set([ 'all-urls' ]); - details.extendedSpecific = new Set(); - details.extendedGeneric = new Set(); - } - return details; - }); - return filteringModeDetailsPromise; -} - -/******************************************************************************/ +const serializeModeDetails = details => { + return { + none: Array.from(details.none), + basic: Array.from(details.basic), + optimal: Array.from(details.optimal), + complete: Array.from(details.complete), + }; +}; -async function getFilteringModeDetails() { - const actualDetails = await getActualFilteringModeDetails(); +const unserializeModeDetails = details => { return { - none: new Set(actualDetails.none), - network: new Set(actualDetails.network), - extendedSpecific: new Set(actualDetails.extendedSpecific), - extendedGeneric: new Set(actualDetails.extendedGeneric), + none: new Set(details.none), + basic: new Set(details.basic ?? details.network), + optimal: new Set(details.optimal ?? details.extendedSpecific), + complete: new Set(details.complete ?? details.extendedGeneric), }; -} +}; /******************************************************************************/ -async function setFilteringModeDetails(afterDetails) { - const [ dynamicRuleMap, actualDetails ] = await Promise.all([ - getDynamicRules(), - getActualFilteringModeDetails(), - ]); - const addRules = []; - const removeRuleIds = []; - if ( eqSets(actualDetails.none, afterDetails.none) === false ) { - actualDetails.none = afterDetails.none; - if ( dynamicRuleMap.has(TRUSTED_DIRECTIVE_BASE_RULE_ID) ) { - removeRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID); - dynamicRuleMap.delete(TRUSTED_DIRECTIVE_BASE_RULE_ID); - } - const rule = { - id: TRUSTED_DIRECTIVE_BASE_RULE_ID, - action: { type: 'allowAllRequests' }, - condition: { - requestDomains: [], - resourceTypes: [ 'main_frame' ], - }, - priority: 100, - }; - if ( actualDetails.none.size ) { - rule.condition.requestDomains = Array.from(actualDetails.none); - addRules.push(rule); - dynamicRuleMap.set(TRUSTED_DIRECTIVE_BASE_RULE_ID, rule); - } - } - if ( - eqSets(actualDetails.network, afterDetails.network) === false || - eqSets(actualDetails.extendedSpecific, afterDetails.extendedSpecific) === false || - eqSets(actualDetails.extendedGeneric, afterDetails.extendedGeneric) === false - ) { - actualDetails.network = afterDetails.network; - actualDetails.extendedSpecific = afterDetails.extendedSpecific; - actualDetails.extendedGeneric = afterDetails.extendedGeneric; - if ( dynamicRuleMap.has(BLOCKING_MODES_RULE_ID) ) { - removeRuleIds.push(BLOCKING_MODES_RULE_ID); - dynamicRuleMap.delete(BLOCKING_MODES_RULE_ID); - } - const rule = { - id: BLOCKING_MODES_RULE_ID, - action: { type: 'allow' }, - condition: { - resourceTypes: [ 'main_frame' ], - urlFilter: '||ubol-blocking-modes.invalid^', - }, - }; - if ( actualDetails.network.size ) { - rule.condition.excludedInitiatorDomains = - Array.from(actualDetails.network); - } - if ( actualDetails.extendedSpecific.size ) { - rule.condition.excludedRequestDomains = - Array.from(actualDetails.extendedSpecific); - } - if ( actualDetails.extendedGeneric.size ) { - rule.condition.initiatorDomains = - Array.from(actualDetails.extendedGeneric); - } - if ( - actualDetails.network.size || - actualDetails.extendedSpecific.size || - actualDetails.extendedGeneric.size - ) { - addRules.push(rule); - dynamicRuleMap.set(BLOCKING_MODES_RULE_ID, rule); - } - } - if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } - const updateOptions = {}; - if ( addRules.length ) { - updateOptions.addRules = addRules; - } - if ( removeRuleIds.length ) { - updateOptions.removeRuleIds = removeRuleIds; +function lookupFilteringMode(filteringModes, hostname) { + const { none, basic, optimal, complete } = filteringModes; + if ( hostname === 'all-urls' ) { + if ( filteringModes.none.has('all-urls') ) { return MODE_NONE; } + if ( filteringModes.basic.has('all-urls') ) { return MODE_BASIC; } + if ( filteringModes.optimal.has('all-urls') ) { return MODE_OPTIMAL; } + if ( filteringModes.complete.has('all-urls') ) { return MODE_COMPLETE; } + return MODE_BASIC; + } + if ( none.has(hostname) ) { return MODE_NONE; } + if ( none.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, none) ) { return MODE_NONE; } + } + if ( basic.has(hostname) ) { return MODE_BASIC; } + if ( basic.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, basic) ) { return MODE_BASIC; } + } + if ( optimal.has(hostname) ) { return MODE_OPTIMAL; } + if ( optimal.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, optimal) ) { return MODE_OPTIMAL; } + } + if ( complete.has(hostname) ) { return MODE_COMPLETE; } + if ( complete.has('all-urls') === false ) { + if ( isDescendantHostnameOfIter(hostname, complete) ) { return MODE_COMPLETE; } } - return dnr.updateDynamicRules(updateOptions); -} - -/******************************************************************************/ - -async function getFilteringMode(hostname) { - const filteringModes = await getFilteringModeDetails(); - if ( filteringModes.none.has(hostname) ) { return 0; } - if ( filteringModes.network.has(hostname) ) { return 1; } - if ( filteringModes.extendedSpecific.has(hostname) ) { return 2; } - if ( filteringModes.extendedGeneric.has(hostname) ) { return 3; } - return getDefaultFilteringMode(); + return lookupFilteringMode(filteringModes, 'all-urls'); } /******************************************************************************/ -async function setFilteringMode(hostname, afterLevel) { +function applyFilteringMode(filteringModes, hostname, afterLevel) { + const defaultLevel = lookupFilteringMode(filteringModes, 'all-urls'); if ( hostname === 'all-urls' ) { - return setDefaultFilteringMode(afterLevel); + if ( afterLevel === defaultLevel ) { return afterLevel; } + switch ( afterLevel ) { + case MODE_NONE: + filteringModes.none.clear(); + filteringModes.none.add('all-urls'); + break; + case MODE_BASIC: + filteringModes.basic.clear(); + filteringModes.basic.add('all-urls'); + break; + case MODE_OPTIMAL: + filteringModes.optimal.clear(); + filteringModes.optimal.add('all-urls'); + break; + case MODE_COMPLETE: + filteringModes.complete.clear(); + filteringModes.complete.add('all-urls'); + break; + } + switch ( defaultLevel ) { + case MODE_NONE: + filteringModes.none.delete('all-urls'); + break; + case MODE_BASIC: + filteringModes.basic.delete('all-urls'); + break; + case MODE_OPTIMAL: + filteringModes.optimal.delete('all-urls'); + break; + case MODE_COMPLETE: + filteringModes.complete.delete('all-urls'); + break; + } + return lookupFilteringMode(filteringModes, 'all-urls'); } - const [ - beforeLevel, - defaultLevel, - filteringModes - ] = await Promise.all([ - getFilteringMode(hostname), - getDefaultFilteringMode(), - getFilteringModeDetails(), - ]); + const beforeLevel = lookupFilteringMode(filteringModes, hostname); if ( afterLevel === beforeLevel ) { return afterLevel; } - const { - none, - network, - extendedSpecific, - extendedGeneric, - } = filteringModes; + const { none, basic, optimal, complete } = filteringModes; switch ( beforeLevel ) { - case 0: - none.delete(hostname); + case MODE_NONE: + pruneHostnameFromSet(hostname, none); break; - case 1: - network.delete(hostname); + case MODE_BASIC: + pruneHostnameFromSet(hostname, basic); break; - case 2: - extendedSpecific.delete(hostname); + case MODE_OPTIMAL: + pruneHostnameFromSet(hostname, optimal); break; - case 3: - extendedGeneric.delete(hostname); + case MODE_COMPLETE: + pruneHostnameFromSet(hostname, complete); break; } if ( afterLevel !== defaultLevel ) { switch ( afterLevel ) { - case 0: + case MODE_NONE: if ( isDescendantHostnameOfIter(hostname, none) === false ) { filteringModes.none.add(hostname); pruneDescendantHostnamesFromSet(hostname, none); } break; - case 1: - if ( isDescendantHostnameOfIter(hostname, network) === false ) { - filteringModes.network.add(hostname); - pruneDescendantHostnamesFromSet(hostname, network); + case MODE_BASIC: + if ( isDescendantHostnameOfIter(hostname, basic) === false ) { + filteringModes.basic.add(hostname); + pruneDescendantHostnamesFromSet(hostname, basic); } break; - case 2: - if ( isDescendantHostnameOfIter(hostname, extendedSpecific) === false ) { - filteringModes.extendedSpecific.add(hostname); - pruneDescendantHostnamesFromSet(hostname, extendedSpecific); + case MODE_OPTIMAL: + if ( isDescendantHostnameOfIter(hostname, optimal) === false ) { + filteringModes.optimal.add(hostname); + pruneDescendantHostnamesFromSet(hostname, optimal); } break; - case 3: - if ( isDescendantHostnameOfIter(hostname, extendedGeneric) === false ) { - filteringModes.extendedGeneric.add(hostname); - pruneDescendantHostnamesFromSet(hostname, extendedGeneric); + case MODE_COMPLETE: + if ( isDescendantHostnameOfIter(hostname, complete) === false ) { + filteringModes.complete.add(hostname); + pruneDescendantHostnamesFromSet(hostname, complete); } break; } } - await setFilteringModeDetails(filteringModes); - return getFilteringMode(hostname); + return lookupFilteringMode(filteringModes, hostname); } /******************************************************************************/ -async function getDefaultFilteringMode() { - const filteringModes = await getFilteringModeDetails(); - if ( filteringModes.none.has('all-urls') ) { return 0; } - if ( filteringModes.network.has('all-urls') ) { return 1; } - if ( filteringModes.extendedSpecific.has('all-urls') ) { return 2; } - if ( filteringModes.extendedGeneric.has('all-urls') ) { return 3; } - return 1; +export async function readFilteringModeDetails(bypassCache = false) { + if ( bypassCache === false ) { + if ( readFilteringModeDetails.cache ) { + return readFilteringModeDetails.cache; + } + const sessionModes = await sessionRead('filteringModeDetails'); + if ( sessionModes instanceof Object ) { + readFilteringModeDetails.cache = unserializeModeDetails(sessionModes); + return readFilteringModeDetails.cache; + } + } + let [ userModes, adminNoFiltering ] = await Promise.all([ + localRead('filteringModeDetails'), + adminReadEx('noFiltering'), + ]); + if ( userModes === undefined ) { + userModes = { basic: [ 'all-urls' ] }; + } + userModes = unserializeModeDetails(userModes); + if ( Array.isArray(adminNoFiltering) ) { + if ( adminNoFiltering.includes('-*') ) { + userModes.none.clear(); + } + for ( const hn of adminNoFiltering ) { + if ( hn.charAt(0) === '-' ) { + userModes.none.delete(hn.slice(1)); + } else { + applyFilteringMode(userModes, hn, 0); + } + } + } + filteringModesToDNR(userModes); + sessionWrite('filteringModeDetails', serializeModeDetails(userModes)); + readFilteringModeDetails.cache = userModes; + return userModes; } /******************************************************************************/ -async function setDefaultFilteringMode(afterLevel) { - const [ beforeLevel, filteringModes ] = await Promise.all([ +async function writeFilteringModeDetails(afterDetails) { + await filteringModesToDNR(afterDetails); + const data = serializeModeDetails(afterDetails); + localWrite('filteringModeDetails', data); + sessionWrite('filteringModeDetails', data); + readFilteringModeDetails.cache = unserializeModeDetails(data); + return Promise.all([ getDefaultFilteringMode(), - getFilteringModeDetails(), - ]); - if ( afterLevel === beforeLevel ) { return afterLevel; } - switch ( afterLevel ) { - case 0: - filteringModes.none.clear(); - filteringModes.none.add('all-urls'); - break; - case 1: - filteringModes.network.clear(); - filteringModes.network.add('all-urls'); - break; - case 2: - filteringModes.extendedSpecific.clear(); - filteringModes.extendedSpecific.add('all-urls'); - break; - case 3: - filteringModes.extendedGeneric.clear(); - filteringModes.extendedGeneric.add('all-urls'); - break; + getTrustedSites(), + localWrite('filteringModeDetails', data), + sessionWrite('filteringModeDetails', data), + ]).then(results => { + broadcastMessage({ + defaultFilteringMode: results[0], + trustedSites: Array.from(results[1]), + }); + }); +} + +/******************************************************************************/ + +export async function getFilteringModeDetails() { + const actualDetails = await readFilteringModeDetails(); + return { + none: new Set(actualDetails.none), + basic: new Set(actualDetails.basic), + optimal: new Set(actualDetails.optimal), + complete: new Set(actualDetails.complete), + }; +} + +/******************************************************************************/ + +export async function getFilteringMode(hostname) { + const filteringModes = await getFilteringModeDetails(); + return lookupFilteringMode(filteringModes, hostname); +} + +export async function setFilteringMode(hostname, afterLevel) { + const filteringModes = await getFilteringModeDetails(); + const level = applyFilteringMode(filteringModes, hostname, afterLevel); + await writeFilteringModeDetails(filteringModes); + return level; +} + +/******************************************************************************/ + +export function getDefaultFilteringMode() { + return getFilteringMode('all-urls'); +} + +export function setDefaultFilteringMode(afterLevel) { + return setFilteringMode('all-urls', afterLevel); +} + +/******************************************************************************/ + +export async function getTrustedSites() { + const filteringModes = await getFilteringModeDetails(); + return filteringModes.none; +} + +export async function setTrustedSites(hostnames) { + const filteringModes = await getFilteringModeDetails(); + const { none } = filteringModes; + const hnSet = new Set(hostnames); + let modified = false; + // Set default mode to Basic when removing No-filtering as default mode + if ( none.has('all-urls') && hnSet.has('all-urls') === false ) { + applyFilteringMode(filteringModes, 'all-urls', MODE_BASIC); + modified = true; } - switch ( beforeLevel ) { - case 0: - filteringModes.none.delete('all-urls'); - break; - case 1: - filteringModes.network.delete('all-urls'); - break; - case 2: - filteringModes.extendedSpecific.delete('all-urls'); - break; - case 3: - filteringModes.extendedGeneric.delete('all-urls'); - break; + for ( const hn of none ) { + if ( hnSet.has(hn) ) { + hnSet.delete(hn); + } else { + none.delete(hn); + modified = true; + } + } + for ( const hn of hnSet ) { + const level = applyFilteringMode(filteringModes, hn, MODE_NONE); + if ( level !== MODE_NONE ) { continue; } + modified = true; } - await setFilteringModeDetails(filteringModes); - return getDefaultFilteringMode(); + if ( modified === false ) { return; } + return writeFilteringModeDetails(filteringModes); } /******************************************************************************/ -async function syncWithBrowserPermissions() { - const permissions = await browser.permissions.getAll(); +export async function syncWithBrowserPermissions() { + const [ permissions, beforeMode ] = await Promise.all([ + browser.permissions.getAll(), + getDefaultFilteringMode(), + ]); const allowedHostnames = new Set(hostnamesFromMatches(permissions.origins || [])); - const beforeMode = await getDefaultFilteringMode(); let modified = false; - if ( beforeMode > 1 && allowedHostnames.has('all-urls') === false ) { - await setDefaultFilteringMode(1); + if ( beforeMode > MODE_BASIC && allowedHostnames.has('all-urls') === false ) { + await setDefaultFilteringMode(MODE_BASIC); modified = true; } const afterMode = await getDefaultFilteringMode(); - if ( afterMode > 1 ) { return false; } + if ( afterMode > MODE_BASIC ) { return false; } const filteringModes = await getFilteringModeDetails(); - const { extendedSpecific, extendedGeneric } = filteringModes; - for ( const hn of extendedSpecific ) { + const { optimal, complete } = filteringModes; + for ( const hn of optimal ) { if ( allowedHostnames.has(hn) ) { continue; } - extendedSpecific.delete(hn); + optimal.delete(hn); modified = true; } - for ( const hn of extendedGeneric ) { + for ( const hn of complete ) { if ( allowedHostnames.has(hn) ) { continue; } - extendedGeneric.delete(hn); + complete.delete(hn); modified = true; } - await setFilteringModeDetails(filteringModes); + await writeFilteringModeDetails(filteringModes); return modified; } /******************************************************************************/ - -async function getAllTrustedSiteDirectives() { - const dynamicRuleMap = await getDynamicRules(); - const rule = dynamicRuleMap.get(TRUSTED_DIRECTIVE_BASE_RULE_ID); - if ( rule === undefined ) { return []; } - return rule.condition.requestDomains; -} - -/******************************************************************************/ - -export { - getFilteringMode, - setFilteringMode, - getDefaultFilteringMode, - setDefaultFilteringMode, - getFilteringModeDetails, - getAllTrustedSiteDirectives, - syncWithBrowserPermissions, -}; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/popup.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/popup.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/popup.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/popup.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,22 +19,22 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ +import { + browser, + localRead, localWrite, + runtime, + sendMessage, +} from './ext.js'; -'use strict'; - -/******************************************************************************/ - -import { browser, runtime, sendMessage } from './ext.js'; import { dom, qs$ } from './dom.js'; -import { i18n$ } from './i18n.js'; -import { simpleStorage } from './storage.js'; +import { i18n, i18n$ } from './i18n.js'; +import punycode from './punycode.js'; /******************************************************************************/ const popupPanelData = {}; const currentTab = {}; -let tabHostname = ''; +const tabURL = new URL(runtime.getURL('/')); /******************************************************************************/ @@ -44,6 +44,14 @@ /******************************************************************************/ +function renderAdminRules() { + const { disabledFeatures: forbid = [] } = popupPanelData; + if ( forbid.length === 0 ) { return; } + dom.body.dataset.forbid = forbid.join(' '); +} + +/******************************************************************************/ + const BLOCKING_MODE_MAX = 3; function setFilteringMode(level, commit = false) { @@ -60,8 +68,8 @@ } async function commitFilteringMode() { - if ( tabHostname === '' ) { return; } - const targetHostname = normalizedHostname(tabHostname); + if ( tabURL.hostname === '' ) { return; } + const targetHostname = normalizedHostname(tabURL.hostname); const modeSlider = qs$('.filteringModeSlider'); const afterLevel = parseInt(modeSlider.dataset.level, 10); const beforeLevel = parseInt(modeSlider.dataset.levelBefore, 10); @@ -91,7 +99,11 @@ setFilteringMode(actualLevel); } if ( actualLevel !== beforeLevel && popupPanelData.autoReload ) { - browser.tabs.reload(currentTab.id); + self.setTimeout(( ) => { + browser.tabs.update(currentTab.id, { + url: tabURL.href, + }); + }, 437); } } @@ -242,11 +254,11 @@ } if ( newBits === currentBits ) { return; } sectionBitsToAttribute(newBits); - simpleStorage.setItem('popupPanelSections', newBits); + localWrite('popupPanelSections', newBits); } -simpleStorage.getItem('popupPanelSections').then(s => { - sectionBitsToAttribute(parseInt(s, 10) || 0); +localRead('popupPanelSections').then(bits => { + sectionBitsToAttribute(bits || 0); }); dom.on('#moreButton', 'click', ( ) => { @@ -259,6 +271,36 @@ /******************************************************************************/ +dom.on('#showMatchedRules', 'click', ev => { + if ( ev.isTrusted !== true ) { return; } + if ( ev.button !== 0 ) { return; } + sendMessage({ + what: 'showMatchedRules', + tabId: currentTab.id, + }); +}); + +/******************************************************************************/ + +dom.on('[data-i18n-title="popupTipReport"]', 'click', ev => { + if ( ev.isTrusted !== true ) { return; } + let url; + try { + url = new URL(currentTab.url); + } catch(_) { + } + if ( url === undefined ) { return; } + const reportURL = new URL(runtime.getURL('/report.html')); + reportURL.searchParams.set('url', url.href); + reportURL.searchParams.set('mode', popupPanelData.level); + sendMessage({ + what: 'gotoURL', + url: `${reportURL.pathname}${reportURL.search}`, + }); +}); + +/******************************************************************************/ + dom.on('[data-i18n-title="popupTipDashboard"]', 'click', ev => { if ( ev.isTrusted !== true ) { return; } if ( ev.button !== 0 ) { return; } @@ -277,8 +319,12 @@ let url; try { + const strictBlockURL = runtime.getURL('/strictblock.'); url = new URL(currentTab.url); - tabHostname = url.hostname || ''; + if ( url.href.startsWith(strictBlockURL) ) { + url = new URL(url.hash.slice(1)); + } + tabURL.href = url.href || ''; } catch(ex) { } @@ -286,30 +332,48 @@ const response = await sendMessage({ what: 'popupPanelData', origin: url.origin, - hostname: normalizedHostname(tabHostname), + hostname: normalizedHostname(tabURL.hostname), }); if ( response instanceof Object ) { Object.assign(popupPanelData, response); } } + renderAdminRules(); + setFilteringMode(popupPanelData.level); - dom.text('#hostname', tabHostname); + dom.text('#hostname', punycode.toUnicode(tabURL.hostname)); + + dom.cl.toggle('#showMatchedRules', 'enabled', + popupPanelData.isSideloaded === true && + popupPanelData.developerMode && + typeof currentTab.id === 'number' && + isNaN(currentTab.id) === false + ); + + dom.cl.toggle('#reportFilterIssue', 'enabled', + /^https?:\/\//.test(url?.href) + ); const parent = qs$('#rulesetStats'); for ( const details of popupPanelData.rulesetDetails || [] ) { const div = dom.clone('#templates .rulesetDetails'); - dom.text(qs$(div, 'h1'), details.name); + qs$(div, 'h1').append(i18n.patchUnicodeFlags(details.name)); const { rules, filters, css } = details; let ruleCount = rules.plain + rules.regex; if ( popupPanelData.hasOmnipotence ) { - ruleCount += rules.removeparam + rules.redirect + rules.csp; + ruleCount += rules.removeparam + rules.redirect + rules.modifyHeaders; } let specificCount = 0; - if ( css.specific instanceof Object ) { - specificCount += css.specific.domainBased; - specificCount += css.specific.entityBased; + if ( typeof css.specific === 'number' ) { + specificCount += css.specific; + } + if ( typeof css.declarative === 'number' ) { + specificCount += css.declarative; + } + if ( typeof css.procedural === 'number' ) { + specificCount += css.procedural; } dom.text( qs$(div, 'p'), diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/report.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/report.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/report.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/report.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,154 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { dnr, runtime } from './ext.js'; +import { dom, qs$ } from './dom.js'; +import { sendMessage } from './ext.js'; + +/******************************************************************************/ + +const reportedPage = (( ) => { + const url = new URL(window.location.href); + try { + const pageURL = url.searchParams.get('url'); + if ( pageURL === null ) { return null; } + const parsedURL = new URL(pageURL); + parsedURL.username = ''; + parsedURL.password = ''; + parsedURL.hash = ''; + const select = qs$('select[name="url"]'); + dom.text(select.options[0], parsedURL.href); + if ( parsedURL.search !== '' ) { + const option = dom.create('option'); + parsedURL.search = ''; + dom.text(option, parsedURL.href); + select.append(option); + } + if ( parsedURL.pathname !== '/' ) { + const option = dom.create('option'); + parsedURL.pathname = ''; + dom.text(option, parsedURL.href); + select.append(option); + } + return { + hostname: parsedURL.hostname.replace(/^(m|mobile|www)\./, ''), + mode: url.searchParams.get('mode'), + }; + } catch(ex) { + } + return null; +})(); + +/******************************************************************************/ + +function reportSpecificFilterType() { + return qs$('select[name="type"]').value; +} + +/******************************************************************************/ + +function renderData(data, depth = 0) { + const indent = ' '.repeat(depth); + if ( Array.isArray(data) ) { + const out = []; + for ( const value of data ) { + out.push(renderData(value, depth)); + } + return out.join('\n'); + } + if ( typeof data !== 'object' || data === null ) { + return `${indent}${data}`; + } + const out = []; + for ( const [ name, value ] of Object.entries(data) ) { + if ( typeof value === 'object' && value !== null ) { + out.push(`${indent}${name}:`); + out.push(renderData(value, depth + 1)); + continue; + } + out.push(`${indent}${name}: ${value}`); + } + return out.join('\n'); +} + +/******************************************************************************/ + +async function reportSpecificFilterIssue() { + const githubURL = new URL( + 'https://github.com/uBlockOrigin/uAssets/issues/new?template=specific_report_from_ubol.yml' + ); + const issueType = reportSpecificFilterType(); + let title = `${reportedPage.hostname}: ${issueType}`; + if ( qs$('#isNSFW').checked ) { + title = `[nsfw] ${title}`; + } + githubURL.searchParams.set('title', title); + githubURL.searchParams.set( + 'url_address_of_the_web_page', + '`' + qs$('select[name="url"]').value + '`' + ); + githubURL.searchParams.set('category', issueType); + + const manifest = runtime.getManifest(); + const rulesets = await dnr.getEnabledRulesets(); + const defaultMode = await sendMessage({ what: 'getDefaultFilteringMode' }); + const modes = [ 'no filtering', 'basic', 'optimal', 'complete' ]; + const config = { + version: `uBOL ${manifest.version}`, + mode: `${modes[reportedPage.mode]} / ${modes[defaultMode]}`, + rulesets, + }; + const configBody = [ + '```yaml', + renderData(config), + '```', + '', + ].join('\n'); + githubURL.searchParams.set('configuration', configBody); + sendMessage({ what: 'gotoURL', url: githubURL.href }); +} + +/******************************************************************************/ + +(async ( ) => { + dom.on('[data-url]', 'click', ev => { + const elem = ev.target.closest('[data-url]'); + const url = dom.attr(elem, 'data-url'); + if ( typeof url !== 'string' || url === '' ) { return; } + sendMessage({ what: 'gotoURL', url }); + ev.preventDefault(); + }); + + if ( reportedPage !== null ) { + dom.on('[data-i18n="supportReportSpecificButton"]', 'click', ev => { + reportSpecificFilterIssue(); + ev.preventDefault(); + }); + + dom.on('[data-i18n="supportFindSpecificButton"]', 'click', ev => { + const url = new URL('https://github.com/uBlockOrigin/uAssets/issues'); + url.searchParams.set('q', `is:issue sort:updated-desc "${reportedPage.hostname}" in:title`); + sendMessage({ what: 'gotoURL', url: url.href }); + ev.preventDefault(); + }); + } + +})(); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/ruleset-manager.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/ruleset-manager.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/ruleset-manager.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/ruleset-manager.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,87 +19,111 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ +import { + TAB_ID_NONE, + browser, + dnr, + i18n, + localRead, localRemove, localWrite, + runtime, + sessionRead, sessionRemove, sessionWrite, +} from './ext.js'; + +import { + rulesetConfig, + saveRulesetConfig, +} from './config.js'; -'use strict'; -/******************************************************************************/ - -import { browser, dnr, i18n } from './ext.js'; import { fetchJSON } from './fetch.js'; +import { getAdminRulesets } from './admin.js'; +import { ubolLog } from './debug.js'; /******************************************************************************/ -const RULE_REALM_SIZE = 1000000; -const REGEXES_REALM_START = 1000000; -const REGEXES_REALM_END = REGEXES_REALM_START + RULE_REALM_SIZE; -const REMOVEPARAMS_REALM_START = REGEXES_REALM_END; -const REMOVEPARAMS_REALM_END = REMOVEPARAMS_REALM_START + RULE_REALM_SIZE; -const REDIRECT_REALM_START = REMOVEPARAMS_REALM_END; -const REDIRECT_REALM_END = REDIRECT_REALM_START + RULE_REALM_SIZE; -const CSP_REALM_START = REDIRECT_REALM_END; -const CSP_REALM_END = CSP_REALM_START + RULE_REALM_SIZE; const TRUSTED_DIRECTIVE_BASE_RULE_ID = 8000000; -const BLOCKING_MODES_RULE_ID = TRUSTED_DIRECTIVE_BASE_RULE_ID + 1; -const CURRENT_CONFIG_BASE_RULE_ID = 9000000; +const STRICTBLOCK_PRIORITY = 29; /******************************************************************************/ -let rulesetDetailsPromise; +const isStrictBlockRule = rule => { + if ( rule.priority !== STRICTBLOCK_PRIORITY ) { return false; } + if ( rule.action.type !== 'redirect' ) { return false; } + const substitution = rule.action.redirect.regexSubstitution; + return substitution !== undefined && + substitution.includes('/strictblock.'); +}; + +/******************************************************************************/ function getRulesetDetails() { - if ( rulesetDetailsPromise !== undefined ) { - return rulesetDetailsPromise; + if ( getRulesetDetails.rulesetDetailsPromise !== undefined ) { + return getRulesetDetails.rulesetDetailsPromise; } - rulesetDetailsPromise = fetchJSON('/rulesets/ruleset-details').then(entries => { - const map = new Map( + getRulesetDetails.rulesetDetailsPromise = fetchJSON('/rulesets/ruleset-details').then(entries => { + const rulesMap = new Map( entries.map(entry => [ entry.id, entry ]) ); - return map; + return rulesMap; }); - return rulesetDetailsPromise; + return getRulesetDetails.rulesetDetailsPromise; } /******************************************************************************/ -let dynamicRuleMapPromise; +async function pruneInvalidRegexRules(realm, rulesIn) { + const rejectedRegexRules = []; + + const validateRegex = regex => { + return dnr.isRegexSupported({ regex, isCaseSensitive: false }).then(result => { + const isSupported = result?.isSupported || false; + pruneInvalidRegexRules.validated.set(regex, isSupported); + if ( isSupported ) { return true; } + rejectedRegexRules.push(`\t${regex} ${result?.reason}`); + return false; + }); + }; -function getDynamicRules() { - if ( dynamicRuleMapPromise !== undefined ) { - return dynamicRuleMapPromise; + // Validate regex-based rules + const toCheck = []; + for ( const rule of rulesIn ) { + if ( rule.condition?.regexFilter === undefined ) { + toCheck.push(true); + continue; + } + const { regexFilter } = rule.condition; + if ( pruneInvalidRegexRules.validated.has(regexFilter) ) { + toCheck.push(pruneInvalidRegexRules.validated.get(regexFilter)); + continue; + } + toCheck.push(validateRegex(regexFilter)); } - dynamicRuleMapPromise = dnr.getDynamicRules().then(rules => { - const map = new Map( - rules.map(rule => [ rule.id, rule ]) + + // Collate results + const isValid = await Promise.all(toCheck); + + if ( rejectedRegexRules.length !== 0 ) { + ubolLog(`${realm} realm: rejected regexes:\n`, + rejectedRegexRules.join('\n') ); - console.info(`Dynamic rule count: ${map.size}`); - console.info(`Available dynamic rule count: ${dnr.MAX_NUMBER_OF_DYNAMIC_AND_SESSION_RULES - map.size}`); - return map; - }); - return dynamicRuleMapPromise; + } + + return rulesIn.filter((v, i) => isValid[i]); } +pruneInvalidRegexRules.validated = new Map(); /******************************************************************************/ -async function updateRegexRules() { - const [ - rulesetDetails, - dynamicRules - ] = await Promise.all([ - getEnabledRulesetsDetails(), - dnr.getDynamicRules(), - ]); +async function updateRegexRules(currentRules, addRules, removeRuleIds) { + // Remove existing regex-related block rules + for ( const rule of currentRules ) { + const { type } = rule.action; + if ( type !== 'block' && type !== 'allow' ) { continue; } + if ( rule.condition.regexFilter === undefined ) { continue; } + removeRuleIds.push(rule.id); + } - // Avoid testing already tested regexes - const validRegexSet = new Set( - dynamicRules.filter(rule => - rule.condition?.regexFilter && true || false - ).map(rule => - rule.condition.regexFilter - ) - ); - const allRules = []; - const toCheck = []; + const rulesetDetails = await getEnabledRulesetsDetails(); // Fetch regexes for all enabled rulesets const toFetch = []; @@ -109,95 +133,39 @@ } const regexRulesets = await Promise.all(toFetch); - // Validate fetched regexes - let regexRuleId = REGEXES_REALM_START; + // Collate all regexes rules + const allRules = []; for ( const rules of regexRulesets ) { if ( Array.isArray(rules) === false ) { continue; } for ( const rule of rules ) { - rule.id = regexRuleId++; - const { - regexFilter: regex, - isUrlFilterCaseSensitive: isCaseSensitive - } = rule.condition; allRules.push(rule); - toCheck.push( - validRegexSet.has(regex) - ? { isSupported: true } - : dnr.isRegexSupported({ regex, isCaseSensitive }) - ); } } + if ( allRules.length === 0 ) { return; } - // Collate results - const results = await Promise.all(toCheck); - const newRules = []; - const rejectedRegexRules = []; - for ( let i = 0; i < allRules.length; i++ ) { - const rule = allRules[i]; - const result = results[i]; - if ( result instanceof Object && result.isSupported ) { - newRules.push(rule); - } else { - rejectedRegexRules.push(rule); - } - } - if ( rejectedRegexRules.length !== 0 ) { - console.info( - 'Rejected regexes:', - rejectedRegexRules.map(rule => rule.condition.regexFilter) - ); - } + const validRules = await pruneInvalidRegexRules('regexes', allRules); + if ( validRules.length === 0 ) { return; } - // Add validated regex rules to dynamic ruleset without affecting rules - // outside regex rules realm. - const dynamicRuleMap = await getDynamicRules(); - const newRuleMap = new Map(newRules.map(rule => [ rule.id, rule ])); - const addRules = []; - const removeRuleIds = []; - - for ( const oldRule of dynamicRuleMap.values() ) { - if ( oldRule.id < REGEXES_REALM_START ) { continue; } - if ( oldRule.id >= REGEXES_REALM_END ) { continue; } - const newRule = newRuleMap.get(oldRule.id); - if ( newRule === undefined ) { - removeRuleIds.push(oldRule.id); - dynamicRuleMap.delete(oldRule.id); - } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) { - removeRuleIds.push(oldRule.id); - addRules.push(newRule); - dynamicRuleMap.set(oldRule.id, newRule); - } - } - - for ( const newRule of newRuleMap.values() ) { - if ( dynamicRuleMap.has(newRule.id) ) { continue; } - addRules.push(newRule); - dynamicRuleMap.set(newRule.id, newRule); - } - - if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } - - if ( removeRuleIds.length !== 0 ) { - console.info(`Remove ${removeRuleIds.length} DNR regex rules`); - } - if ( addRules.length !== 0 ) { - console.info(`Add ${addRules.length} DNR regex rules`); - } - - return dnr.updateDynamicRules({ addRules, removeRuleIds }); + ubolLog(`Add ${validRules.length} DNR regex rules`); + addRules.push(...validRules); } /******************************************************************************/ -async function updateRemoveparamRules() { +async function updateRemoveparamRules(currentRules, addRules, removeRuleIds) { + // Remove existing removeparam-related rules + for ( const rule of currentRules ) { + if ( rule.action.type !== 'redirect' ) { continue; } + if ( rule.action.redirect.transform === undefined ) { continue; } + removeRuleIds.push(rule.id); + } + const [ hasOmnipotence, rulesetDetails, - dynamicRuleMap, ] = await Promise.all([ browser.permissions.contains({ origins: [ '' ] }), getEnabledRulesetsDetails(), - getDynamicRules(), ]); // Fetch removeparam rules for all enabled rulesets @@ -209,67 +177,40 @@ const removeparamRulesets = await Promise.all(toFetch); // Removeparam rules can only be enforced with omnipotence - const newRules = []; + const allRules = []; if ( hasOmnipotence ) { - let removeparamRuleId = REMOVEPARAMS_REALM_START; for ( const rules of removeparamRulesets ) { if ( Array.isArray(rules) === false ) { continue; } for ( const rule of rules ) { - rule.id = removeparamRuleId++; - newRules.push(rule); + allRules.push(rule); } } } + if ( allRules.length === 0 ) { return; } - // Add removeparam rules to dynamic ruleset without affecting rules - // outside removeparam rules realm. - const newRuleMap = new Map(newRules.map(rule => [ rule.id, rule ])); - const addRules = []; - const removeRuleIds = []; - - for ( const oldRule of dynamicRuleMap.values() ) { - if ( oldRule.id < REMOVEPARAMS_REALM_START ) { continue; } - if ( oldRule.id >= REMOVEPARAMS_REALM_END ) { continue; } - const newRule = newRuleMap.get(oldRule.id); - if ( newRule === undefined ) { - removeRuleIds.push(oldRule.id); - dynamicRuleMap.delete(oldRule.id); - } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) { - removeRuleIds.push(oldRule.id); - addRules.push(newRule); - dynamicRuleMap.set(oldRule.id, newRule); - } - } - - for ( const newRule of newRuleMap.values() ) { - if ( dynamicRuleMap.has(newRule.id) ) { continue; } - addRules.push(newRule); - dynamicRuleMap.set(newRule.id, newRule); - } + const validRules = await pruneInvalidRegexRules('removeparam', allRules); + if ( validRules.length === 0 ) { return; } - if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } - - if ( removeRuleIds.length !== 0 ) { - console.info(`Remove ${removeRuleIds.length} DNR removeparam rules`); - } - if ( addRules.length !== 0 ) { - console.info(`Add ${addRules.length} DNR removeparam rules`); - } - - return dnr.updateDynamicRules({ addRules, removeRuleIds }); + ubolLog(`Add ${validRules.length} DNR removeparam rules`); + addRules.push(...validRules); } /******************************************************************************/ -async function updateRedirectRules() { +async function updateRedirectRules(currentRules, addRules, removeRuleIds) { + // Remove existing redirect-related rules + for ( const rule of currentRules ) { + if ( rule.action.type !== 'redirect' ) { continue; } + if ( rule.action.redirect.extensionPath === undefined ) { continue; } + removeRuleIds.push(rule.id); + } + const [ hasOmnipotence, rulesetDetails, - dynamicRuleMap, ] = await Promise.all([ browser.permissions.contains({ origins: [ '' ] }), getEnabledRulesetsDetails(), - getDynamicRules(), ]); // Fetch redirect rules for all enabled rulesets @@ -281,146 +222,361 @@ const redirectRulesets = await Promise.all(toFetch); // Redirect rules can only be enforced with omnipotence - const newRules = []; + const allRules = []; if ( hasOmnipotence ) { - let redirectRuleId = REDIRECT_REALM_START; for ( const rules of redirectRulesets ) { if ( Array.isArray(rules) === false ) { continue; } for ( const rule of rules ) { - rule.id = redirectRuleId++; - newRules.push(rule); + allRules.push(rule); } } } + if ( allRules.length === 0 ) { return; } - // Add redirect rules to dynamic ruleset without affecting rules - // outside redirect rules realm. - const newRuleMap = new Map(newRules.map(rule => [ rule.id, rule ])); - const addRules = []; - const removeRuleIds = []; + const validRules = await pruneInvalidRegexRules('redirect', allRules); + if ( validRules.length === 0 ) { return; } - for ( const oldRule of dynamicRuleMap.values() ) { - if ( oldRule.id < REDIRECT_REALM_START ) { continue; } - if ( oldRule.id >= REDIRECT_REALM_END ) { continue; } - const newRule = newRuleMap.get(oldRule.id); - if ( newRule === undefined ) { - removeRuleIds.push(oldRule.id); - dynamicRuleMap.delete(oldRule.id); - } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) { - removeRuleIds.push(oldRule.id); - addRules.push(newRule); - dynamicRuleMap.set(oldRule.id, newRule); - } - } - - for ( const newRule of newRuleMap.values() ) { - if ( dynamicRuleMap.has(newRule.id) ) { continue; } - addRules.push(newRule); - dynamicRuleMap.set(newRule.id, newRule); - } - - if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } - - if ( removeRuleIds.length !== 0 ) { - console.info(`Remove ${removeRuleIds.length} DNR redirect rules`); - } - if ( addRules.length !== 0 ) { - console.info(`Add ${addRules.length} DNR redirect rules`); - } - - return dnr.updateDynamicRules({ addRules, removeRuleIds }); + ubolLog(`Add ${validRules.length} DNR redirect rules`); + addRules.push(...validRules); } /******************************************************************************/ -async function updateCspRules() { +async function updateModifyHeadersRules(currentRules, addRules, removeRuleIds) { + // Remove existing header modification-related rules + for ( const rule of currentRules ) { + if ( rule.action.type !== 'modifyHeaders' ) { continue; } + removeRuleIds.push(rule.id); + } + const [ hasOmnipotence, rulesetDetails, - dynamicRuleMap, ] = await Promise.all([ browser.permissions.contains({ origins: [ '' ] }), getEnabledRulesetsDetails(), - getDynamicRules(), ]); - // Fetch csp rules for all enabled rulesets + // Fetch modifyHeaders rules for all enabled rulesets const toFetch = []; for ( const details of rulesetDetails ) { - if ( details.rules.csp === 0 ) { continue; } - toFetch.push(fetchJSON(`/rulesets/csp/${details.id}`)); + if ( details.rules.modifyHeaders === 0 ) { continue; } + toFetch.push(fetchJSON(`/rulesets/modify-headers/${details.id}`)); } - const cspRulesets = await Promise.all(toFetch); + const rulesets = await Promise.all(toFetch); // Redirect rules can only be enforced with omnipotence - const newRules = []; + const allRules = []; if ( hasOmnipotence ) { - let cspRuleId = CSP_REALM_START; - for ( const rules of cspRulesets ) { + for ( const rules of rulesets ) { if ( Array.isArray(rules) === false ) { continue; } for ( const rule of rules ) { - rule.id = cspRuleId++; - newRules.push(rule); + allRules.push(rule); } } } + if ( allRules.length === 0 ) { return; } + + const validRules = await pruneInvalidRegexRules('modify-headers', allRules); + if ( validRules.length === 0 ) { return; } + + ubolLog(`Add ${validRules.length} DNR modify-headers rules`); + addRules.push(...validRules); +} + +/******************************************************************************/ - // Add csp rules to dynamic ruleset without affecting rules - // outside csp rules realm. - const newRuleMap = new Map(newRules.map(rule => [ rule.id, rule ])); +async function updateDynamicRules() { + const currentRules = await dnr.getDynamicRules(); const addRules = []; const removeRuleIds = []; - for ( const oldRule of dynamicRuleMap.values() ) { - if ( oldRule.id < CSP_REALM_START ) { continue; } - if ( oldRule.id >= CSP_REALM_END ) { continue; } - const newRule = newRuleMap.get(oldRule.id); - if ( newRule === undefined ) { - removeRuleIds.push(oldRule.id); - dynamicRuleMap.delete(oldRule.id); - } else if ( JSON.stringify(oldRule) !== JSON.stringify(newRule) ) { - removeRuleIds.push(oldRule.id); - addRules.push(newRule); - dynamicRuleMap.set(oldRule.id, newRule); - } + // Remove potentially left-over strict-block rules from previous version + for ( const rule of currentRules ) { + if ( isStrictBlockRule(rule) === false ) { continue; } + removeRuleIds.push(rule.id); + } + + await Promise.all([ + updateRegexRules(currentRules, addRules, removeRuleIds), + updateRemoveparamRules(currentRules, addRules, removeRuleIds), + updateRedirectRules(currentRules, addRules, removeRuleIds), + updateModifyHeadersRules(currentRules, addRules, removeRuleIds), + ]); + if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } + + const maxRegexRuleCount = dnr.MAX_NUMBER_OF_REGEX_RULES; + let regexRuleCount = 0; + let ruleId = 1; + for ( const rule of addRules ) { + if ( rule?.condition.regexFilter ) { regexRuleCount += 1; } + if ( (rule.id || 0) >= TRUSTED_DIRECTIVE_BASE_RULE_ID ) { continue; } + rule.id = ruleId++; + } + if ( regexRuleCount !== 0 ) { + ubolLog(`Using ${regexRuleCount}/${maxRegexRuleCount} dynamic regex-based DNR rules`); } + return Promise.all([ + dnr.updateDynamicRules({ addRules, removeRuleIds }).then(( ) => { + if ( removeRuleIds.length !== 0 ) { + ubolLog(`Remove ${removeRuleIds.length} dynamic DNR rules`); + } + if ( addRules.length !== 0 ) { + ubolLog(`Add ${addRules.length} dynamic DNR rules`); + } + }).catch(reason => { + console.error(`updateDynamicRules() / ${reason}`); + }), + updateSessionRules(), + ]); +} + +/******************************************************************************/ - for ( const newRule of newRuleMap.values() ) { - if ( dynamicRuleMap.has(newRule.id) ) { continue; } - addRules.push(newRule); - dynamicRuleMap.set(newRule.id, newRule); +async function updateStrictBlockRules(currentRules, addRules, removeRuleIds) { + // Remove existing strictblock-related rules + for ( const rule of currentRules ) { + if ( isStrictBlockRule(rule) === false ) { continue; } + removeRuleIds.push(rule.id); } - if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } + if ( rulesetConfig.strictBlockMode === false ) { return; } - if ( removeRuleIds.length !== 0 ) { - console.info(`Remove ${removeRuleIds.length} DNR redirect rules`); + const [ + hasOmnipotence, + rulesetDetails, + permanentlyExcluded = [], + temporarilyExcluded = [], + ] = await Promise.all([ + browser.permissions.contains({ origins: [ '' ] }), + getEnabledRulesetsDetails(), + localRead('excludedStrictBlockHostnames'), + sessionRead('excludedStrictBlockHostnames'), + ]); + + // Strict-block rules can only be enforced with omnipotence + if ( hasOmnipotence === false ) { + localRemove('excludedStrictBlockHostnames'); + sessionRemove('excludedStrictBlockHostnames'); + return; + } + + // Fetch strick-block rules + const toFetch = []; + for ( const details of rulesetDetails ) { + if ( details.rules.strictblock === 0 ) { continue; } + toFetch.push(fetchJSON(`/rulesets/strictblock/${details.id}`)); } - if ( addRules.length !== 0 ) { - console.info(`Add ${addRules.length} DNR redirect rules`); + const rulesets = await Promise.all(toFetch); + + const substitution = `${runtime.getURL('/strictblock.html')}#\\0`; + const allRules = []; + for ( const rules of rulesets ) { + if ( Array.isArray(rules) === false ) { continue; } + for ( const rule of rules ) { + rule.action.redirect.regexSubstitution = substitution; + allRules.push(rule); + } } - return dnr.updateDynamicRules({ addRules, removeRuleIds }); + const validRules = await pruneInvalidRegexRules('strictblock', allRules); + if ( validRules.length === 0 ) { return; } + ubolLog(`Add ${validRules.length} DNR strictblock rules`); + for ( const rule of validRules ) { + addRules.push(rule); + } + + const allExcluded = permanentlyExcluded.concat(temporarilyExcluded); + if ( allExcluded.length === 0 ) { return; } + addRules.push({ + action: { type: 'allow' }, + condition: { + requestDomains: allExcluded, + resourceTypes: [ 'main_frame' ], + }, + priority: STRICTBLOCK_PRIORITY, + }); + ubolLog(`Add 1 DNR session rule with ${allExcluded.length} for excluded strict-block domains`); +} + +async function excludeFromStrictBlock(hostname, permanent) { + if ( typeof hostname !== 'string' || hostname === '' ) { return; } + const readFn = permanent ? localRead : sessionRead; + const hostnames = new Set(await readFn('excludedStrictBlockHostnames')); + hostnames.add(hostname); + const writeFn = permanent ? localWrite : sessionWrite; + await writeFn('excludedStrictBlockHostnames', Array.from(hostnames)); + return updateSessionRules(); +} + +async function setStrictBlockMode(state) { + const newState = Boolean(state); + if ( newState === rulesetConfig.strictBlockMode ) { return; } + rulesetConfig.strictBlockMode = newState; + const promises = [ saveRulesetConfig() ]; + if ( newState === false ) { + promises.push( + localRemove('excludedStrictBlockHostnames'), + sessionRemove('excludedStrictBlockHostnames') + ); + } + await Promise.all(promises); + return updateSessionRules(); } /******************************************************************************/ -// TODO: group all omnipotence-related rules into one realm. +async function updateSessionRules() { + const addRules = []; + const removeRuleIds = []; + const currentRules = await dnr.getSessionRules(); + await updateStrictBlockRules(currentRules, addRules, removeRuleIds); + if ( addRules.length === 0 && removeRuleIds.length === 0 ) { return; } + const maxRegexRuleCount = dnr.MAX_NUMBER_OF_REGEX_RULES; + let regexRuleCount = 0; + let ruleId = 1; + for ( const rule of addRules ) { + if ( rule?.condition.regexFilter ) { regexRuleCount += 1; } + rule.id = ruleId++; + } + if ( regexRuleCount !== 0 ) { + ubolLog(`Using ${regexRuleCount}/${maxRegexRuleCount} session regex-based DNR rules`); + } + return dnr.updateSessionRules({ addRules, removeRuleIds }).then(( ) => { + if ( removeRuleIds.length !== 0 ) { + ubolLog(`Remove ${removeRuleIds.length} session DNR rules`); + } + if ( addRules.length !== 0 ) { + ubolLog(`Add ${addRules.length} session DNR rules`); + } + }).catch(reason => { + console.error(`updateSessionRules() / ${reason}`); + }); +} -async function updateDynamicRules() { - return Promise.all([ - updateRegexRules(), - updateRemoveparamRules(), - updateRedirectRules(), - updateCspRules(), +/******************************************************************************/ + +async function filteringModesToDNR(modes) { + const [ + dynamicRules, + sessionRules, + ] = await Promise.all([ + dnr.getDynamicRules({ ruleIds: [ TRUSTED_DIRECTIVE_BASE_RULE_ID+0 ] }), + dnr.getSessionRules({ ruleIds: [ TRUSTED_DIRECTIVE_BASE_RULE_ID+1 ] }), ]); + const dynamicRule = dynamicRules?.length && dynamicRules[0] || undefined; + const beforeRequestDomainSet = new Set(dynamicRule?.condition.requestDomains); + const beforeExcludedRrequestDomainSet = new Set(dynamicRule?.condition.excludedRequestDomains); + if ( dynamicRule !== undefined && beforeRequestDomainSet.size === 0 ) { + beforeRequestDomainSet.add('all-urls'); + } else { + beforeExcludedRrequestDomainSet.add('all-urls'); + } + + const noneHostnames = new Set([ ...modes.none ]); + const notNoneHostnames = new Set([ ...modes.basic, ...modes.optimal, ...modes.complete ]); + let afterRequestDomainSet = new Set(); + let afterExcludedRequestDomainSet = new Set(); + if ( noneHostnames.has('all-urls') ) { + afterRequestDomainSet = new Set([ 'all-urls' ]); + afterExcludedRequestDomainSet = notNoneHostnames; + } else { + afterRequestDomainSet = noneHostnames; + afterExcludedRequestDomainSet = new Set(); + } + + const removeDynamicRuleIds = []; + const removeSessionRuleIds = []; + if ( dynamicRule ) { + removeDynamicRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID+0); + removeSessionRuleIds.push(TRUSTED_DIRECTIVE_BASE_RULE_ID+1); + } + + const allowEverywhere = afterRequestDomainSet.delete('all-urls'); + const addDynamicRules = []; + const addSessionRules = []; + if ( + allowEverywhere || + afterRequestDomainSet.size !== 0 || + afterExcludedRequestDomainSet.size !== 0 + ) { + const rule0 = { + id: TRUSTED_DIRECTIVE_BASE_RULE_ID+0, + action: { type: 'allowAllRequests' }, + condition: { + resourceTypes: [ 'main_frame' ], + }, + priority: 100, + }; + if ( afterRequestDomainSet.size !== 0 ) { + rule0.condition.requestDomains = + Array.from(afterRequestDomainSet).sort(); + } else if ( afterExcludedRequestDomainSet.size !== 0 ) { + rule0.condition.excludedRequestDomains = + Array.from(afterExcludedRequestDomainSet).sort(); + } + addDynamicRules.push(rule0); + // https://github.com/uBlockOrigin/uBOL-home/issues/114 + // https://github.com/uBlockOrigin/uBOL-home/issues/247 + const rule1 = { + id: TRUSTED_DIRECTIVE_BASE_RULE_ID+1, + action: { type: 'allow' }, + condition: { + tabIds: [ TAB_ID_NONE ], + }, + priority: 100, + }; + if ( rule0.condition.requestDomains ) { + rule1.condition.initiatorDomains = + rule0.condition.requestDomains.slice(); + } else if ( rule0.condition.excludedRequestDomains ) { + rule1.condition.excludedInitiatorDomains = + rule0.condition.excludedRequestDomains.slice(); + } + addSessionRules.push(rule1); + } + + const noneCount = noneHostnames.has('all-urls') + ? -notNoneHostnames.size + : noneHostnames.size; + + const promises = []; + if ( isDifferentAllowRules(addDynamicRules, dynamicRules) ) { + promises.push(dnr.updateDynamicRules({ + addRules: addDynamicRules, + removeRuleIds: removeDynamicRuleIds, + })); + ubolLog(`Add "allowAllRequests" dynamic rule for ${noneCount} sites`); + } + if ( isDifferentAllowRules(addSessionRules, sessionRules) ) { + promises.push(dnr.updateSessionRules({ + addRules: addSessionRules, + removeRuleIds: removeSessionRuleIds, + })); + ubolLog(`Add "allow" session rule for ${noneCount} sites`); + } + if ( promises.length === 0 ) { return; } + return Promise.all(promises); } +const isDifferentAllowRules = (a, b) => { + const pp = [ + 'requestDomains', + 'excludedRequestDomains', + 'initiatorDomains', + 'excludedInitiatorDomains', + ]; + for ( const p of pp ) { + const ac = a?.length && a[0].condition[p] || []; + const bc = b?.length && b[0].condition[p] || []; + if ( ac.join() !== bc.join() ) { return true; } + } + return false; +}; + /******************************************************************************/ async function defaultRulesetsFromLanguage() { - const out = [ 'default', 'cname-trackers' ]; - const dropCountry = lang => { const pos = lang.indexOf('-'); if ( pos === -1 ) { return lang; } @@ -438,8 +594,17 @@ `\\b(${Array.from(langSet).join('|')})\\b` ); + const manifest = runtime.getManifest(); + const rulesets = manifest.declarative_net_request.rule_resources; const rulesetDetails = await getRulesetDetails(); - for ( const [ id, details ] of rulesetDetails ) { + const out = []; + for ( const ruleset of rulesets ) { + const { id, enabled } = ruleset; + if ( enabled ) { + out.push(id); + continue; + } + const details = rulesetDetails.get(id); if ( typeof details.lang !== 'string' ) { continue; } if ( reTargetLang.test(details.lang) === false ) { continue; } out.push(id); @@ -449,9 +614,63 @@ /******************************************************************************/ +async function patchDefaultRulesets() { + const [ + oldDefaultIds = [], + newDefaultIds, + ] = await Promise.all([ + localRead('defaultRulesetIds'), + defaultRulesetsFromLanguage(), + ]); + + const manifest = runtime.getManifest(); + const validIds = new Set( + manifest.declarative_net_request.rule_resources.map(r => r.id) + ); + const toAdd = []; + const toRemove = []; + for ( const id of newDefaultIds ) { + if ( oldDefaultIds.includes(id) ) { continue; } + toAdd.push(id); + } + for ( const id of oldDefaultIds ) { + if ( newDefaultIds.includes(id) ) { continue; } + toRemove.push(id); + } + for ( const id of rulesetConfig.enabledRulesets ) { + if ( validIds.has(id) ) { continue; } + toRemove.push(id); + } + localWrite('defaultRulesetIds', newDefaultIds); + if ( toAdd.length === 0 && toRemove.length === 0 ) { return; } + const enabledRulesets = new Set(rulesetConfig.enabledRulesets); + toAdd.forEach(id => enabledRulesets.add(id)); + toRemove.forEach(id => enabledRulesets.delete(id)); + const patchedRulesets = Array.from(enabledRulesets); + ubolLog(`Patched rulesets: ${rulesetConfig.enabledRulesets} => ${patchedRulesets}`); + rulesetConfig.enabledRulesets = patchedRulesets; +} + +/******************************************************************************/ + async function enableRulesets(ids) { const afterIds = new Set(ids); - const beforeIds = new Set(await dnr.getEnabledRulesets()); + const [ beforeIds, adminIds, rulesetDetails ] = await Promise.all([ + dnr.getEnabledRulesets().then(ids => new Set(ids)), + getAdminRulesets(), + getRulesetDetails(), + ]); + + for ( const token of adminIds ) { + const c0 = token.charAt(0); + const id = token.slice(1); + if ( c0 === '+' ) { + afterIds.add(id); + } else if ( c0 === '-' ) { + afterIds.delete(id); + } + } + const enableRulesetSet = new Set(); const disableRulesetSet = new Set(); for ( const id of afterIds ) { @@ -463,13 +682,8 @@ disableRulesetSet.add(id); } - if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) { - return; - } - // Be sure the rulesets to enable/disable do exist in the current version, // otherwise the API throws. - const rulesetDetails = await getRulesetDetails(); for ( const id of enableRulesetSet ) { if ( rulesetDetails.has(id) ) { continue; } enableRulesetSet.delete(id); @@ -478,18 +692,25 @@ if ( rulesetDetails.has(id) ) { continue; } disableRulesetSet.delete(id); } + + if ( enableRulesetSet.size === 0 && disableRulesetSet.size === 0 ) { + return false; + } + const enableRulesetIds = Array.from(enableRulesetSet); const disableRulesetIds = Array.from(disableRulesetSet); if ( enableRulesetIds.length !== 0 ) { - console.info(`Enable rulesets: ${enableRulesetIds}`); + ubolLog(`Enable rulesets: ${enableRulesetIds}`); } if ( disableRulesetIds.length !== 0 ) { - console.info(`Disable ruleset: ${disableRulesetIds}`); + ubolLog(`Disable ruleset: ${disableRulesetIds}`); } await dnr.updateEnabledRulesets({ enableRulesetIds, disableRulesetIds }); - - return updateDynamicRules(); + + await updateDynamicRules(); + + return true; } /******************************************************************************/ @@ -514,13 +735,14 @@ /******************************************************************************/ export { - BLOCKING_MODES_RULE_ID, - CURRENT_CONFIG_BASE_RULE_ID, - TRUSTED_DIRECTIVE_BASE_RULE_ID, - getRulesetDetails, - getDynamicRules, - enableRulesets, defaultRulesetsFromLanguage, + enableRulesets, + excludeFromStrictBlock, + filteringModesToDNR, + getRulesetDetails, getEnabledRulesetsDetails, + patchDefaultRulesets, + setStrictBlockMode, updateDynamicRules, + updateSessionRules, }; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-declarative.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-declarative.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-declarative.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-declarative.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -32,61 +32,103 @@ /******************************************************************************/ const declarativeImports = self.declarativeImports || []; +self.declarativeImports = undefined; +delete self.declarativeImports; -const lookupSelectors = (hn, out) => { - for ( const { argsList, hostnamesMap } of declarativeImports ) { - let argsIndices = hostnamesMap.get(hn); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - out.push(...details.a.map(json => JSON.parse(json))); - } - } -}; +/******************************************************************************/ + +const hnParts = []; +try { hnParts.push(...document.location.hostname.split('.')); } +catch(ex) { } +const hnpartslen = hnParts.length; +if ( hnpartslen === 0 ) { return; } -let hn; -try { hn = document.location.hostname; } catch(ex) { } const selectors = []; -while ( hn ) { - lookupSelectors(hn, selectors); - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; + +for ( const { argsList, exceptionsMap, hostnamesMap, entitiesMap } of declarativeImports ) { + const todoIndices = new Set(); + const tonotdoIndices = []; + // Exceptions + if ( exceptionsMap.size !== 0 ) { + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + const excepted = exceptionsMap.get(hn); + if ( excepted ) { tonotdoIndices.push(...excepted); } + } + exceptionsMap.clear(); + } + // Hostname-based + if ( hostnamesMap.size !== 0 ) { + const collectArgIndices = hn => { + let argsIndices = hostnamesMap.get(hn); + if ( argsIndices === undefined ) { return; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + }; + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + collectArgIndices(hn); + } + collectArgIndices('*'); + hostnamesMap.clear(); + } + // Entity-based + if ( entitiesMap.size !== 0 ) { + const n = hnpartslen - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + const en = hnParts.slice(i,j).join('.'); + let argsIndices = entitiesMap.get(en); + if ( argsIndices === undefined ) { continue; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + } + } + entitiesMap.clear(); + } + for ( const i of todoIndices ) { + selectors.push(...argsList[i].map(json => JSON.parse(json))); } + argsList.length = 0; } - declarativeImports.length = 0; -/******************************************************************************/ - if ( selectors.length === 0 ) { return; } +/******************************************************************************/ + const cssRuleFromProcedural = details => { const { tasks, action } = details; - let mq; - if ( tasks !== undefined ) { - if ( tasks.length > 1 ) { return; } + let mq, selector; + if ( Array.isArray(tasks) ) { if ( tasks[0][0] !== 'matches-media' ) { return; } mq = tasks[0][1]; + if ( tasks.length > 2 ) { return; } + if ( tasks.length === 2 ) { + if ( tasks[1][0] !== 'spath' ) { return; } + selector = tasks[1][1]; + } } let style; if ( Array.isArray(action) ) { if ( action[0] !== 'style' ) { return; } + selector = selector || details.selector; style = action[1]; } - if ( mq === undefined && style === undefined ) { return; } + if ( mq === undefined && style === undefined && selector === undefined ) { return; } if ( mq === undefined ) { - return `${details.selector}\n{${style}}`; + return `${selector}\n{${style}}`; } if ( style === undefined ) { - return `@media ${mq} {\n${details.selector}\n{display:none!important;}\n}`; + return `@media ${mq} {\n${selector}\n{display:none!important;}\n}`; } - return `@media ${mq} {\n${details.selector}\n{${style}}\n}`; + return `@media ${mq} {\n${selector}\n{${style}}\n}`; }; const sheetText = []; @@ -98,18 +140,18 @@ if ( sheetText.length === 0 ) { return; } -try { - const sheet = new CSSStyleSheet(); - sheet.replace(`@layer{${sheetText.join('\n')}}`); - document.adoptedStyleSheets = [ - ...document.adoptedStyleSheets, - sheet - ]; -} catch(ex) { -} +(function uBOL_injectCSS(css, count = 10) { + chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => { + count -= 1; + if ( count === 0 ) { return; } + uBOL_injectCSS(css, count - 1); + }); +})(sheetText.join('\n')); /******************************************************************************/ })(); /******************************************************************************/ + +void 0; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-generic.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-generic.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-generic.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-generic.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,10 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - /******************************************************************************/ // Important! @@ -30,9 +26,9 @@ (function uBOL_cssGeneric() { const genericSelectorMap = self.genericSelectorMap || new Map(); -if ( genericSelectorMap.size === 0 ) { return; } +delete self.genericSelectorMap; -self.genericSelectorMap = undefined; +if ( genericSelectorMap.size === 0 ) { return; } /******************************************************************************/ @@ -60,7 +56,7 @@ for ( let i = 0; i < len; i += step ) { hash = (hash << 5) + hash ^ s.charCodeAt(i); } - return hash & 0xFF_FFFF; + return hash & 0xFFFFFF; }; /******************************************************************************/ @@ -76,7 +72,11 @@ const uBOL_idFromNode = (node, out) => { const raw = node.id; if ( typeof raw !== 'string' || raw.length === 0 ) { return; } - out.push(hashFromStr(0x23 /* '#' */, raw.trim())); + const hash = hashFromStr(0x23 /* '#' */, raw.trim()); + const selectorList = genericSelectorMap.get(hash); + if ( selectorList === undefined ) { return; } + genericSelectorMap.delete(hash); + out.push(selectorList); }; // https://github.com/uBlockOrigin/uBlock-issues/discussions/2076 @@ -89,8 +89,14 @@ end = s.indexOf(' ', beg); if ( end === beg ) { continue; } if ( end === -1 ) { end = len; } - out.push(hashFromStr(0x2E /* '.' */, s.slice(beg, end))); + const token = s.slice(beg, end).trimEnd(); beg = end; + if ( token.length === 0 ) { continue; } + const hash = hashFromStr(0x2E /* '.' */, token); + const selectorList = genericSelectorMap.get(hash); + if ( selectorList === undefined ) { continue; } + genericSelectorMap.delete(hash); + out.push(selectorList); } }; @@ -129,25 +135,18 @@ const uBOL_processNodes = ( ) => { const t0 = Date.now(); - const hashes = []; const nodes = []; const deadline = t0 + maxSurveyTimeSlice; for (;;) { pendingNodes.next(nodes); if ( nodes.length === 0 ) { break; } for ( const node of nodes ) { - uBOL_idFromNode(node, hashes); - uBOL_classesFromNode(node, hashes); + uBOL_idFromNode(node, styleSheetSelectors); + uBOL_classesFromNode(node, styleSheetSelectors); } nodes.length = 0; if ( performance.now() >= deadline ) { break; } } - for ( const hash of hashes ) { - const selectorList = genericSelectorMap.get(hash); - if ( selectorList === undefined ) { continue; } - styleSheetSelectors.push(selectorList); - genericSelectorMap.delete(hash); - } surveyCount += 1; if ( styleSheetSelectors.length === 0 ) { surveyMissCount += 1; @@ -162,7 +161,8 @@ if ( styleSheetTimer !== undefined ) { return; } styleSheetTimer = self.requestAnimationFrame(( ) => { styleSheetTimer = undefined; - uBOL_injectStyleSheet(); + uBOL_injectCSS(`${styleSheetSelectors.join(',')}{display:none!important;}`); + styleSheetSelectors.length = 0; }); }; @@ -187,17 +187,12 @@ /******************************************************************************/ -const uBOL_injectStyleSheet = ( ) => { - try { - const sheet = new CSSStyleSheet(); - sheet.replace(`@layer{${styleSheetSelectors.join(',')}{display:none!important;}}`); - document.adoptedStyleSheets = [ - ...document.adoptedStyleSheets, - sheet - ]; - } catch(ex) { - } - styleSheetSelectors.length = 0; +const uBOL_injectCSS = (css, count = 10) => { + chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => { + count -= 1; + if ( count === 0 ) { return; } + uBOL_injectCSS(css, count - 1); + }); }; /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-procedural.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-procedural.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-procedural.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-procedural.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -21,8 +21,6 @@ /* jshint esversion:11 */ -'use strict'; - /******************************************************************************/ // Important! @@ -31,35 +29,102 @@ /******************************************************************************/ -let proceduralFilterer; +const proceduralImports = self.proceduralImports || []; +self.proceduralImports = undefined; +delete self.proceduralImports; /******************************************************************************/ -const addStylesheet = text => { - try { - const sheet = new CSSStyleSheet(); - sheet.replace(`@layer{${text}}`); - document.adoptedStyleSheets = [ - ...document.adoptedStyleSheets, - sheet - ]; - } catch(ex) { +const hnParts = []; +try { hnParts.push(...document.location.hostname.split('.')); } +catch(ex) { } +const hnpartslen = hnParts.length; +if ( hnpartslen === 0 ) { return; } + +const selectors = []; + +for ( const { argsList, exceptionsMap, hostnamesMap, entitiesMap } of proceduralImports ) { + const todoIndices = new Set(); + const tonotdoIndices = []; + // Exceptions + if ( exceptionsMap.size !== 0 ) { + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + const excepted = exceptionsMap.get(hn); + if ( excepted ) { tonotdoIndices.push(...excepted); } + } + exceptionsMap.clear(); + } + // Hostname-based + if ( hostnamesMap.size !== 0 ) { + const collectArgIndices = hn => { + let argsIndices = hostnamesMap.get(hn); + if ( argsIndices === undefined ) { return; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + }; + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + collectArgIndices(hn); + } + collectArgIndices('*'); + hostnamesMap.clear(); + } + // Entity-based + if ( entitiesMap.size !== 0 ) { + const n = hnpartslen - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + const en = hnParts.slice(i,j).join('.'); + let argsIndices = entitiesMap.get(en); + if ( argsIndices === undefined ) { continue; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + } + } + entitiesMap.clear(); + } + for ( const i of todoIndices ) { + selectors.push(...argsList[i].map(json => JSON.parse(json))); } + argsList.length = 0; +} +proceduralImports.length = 0; + +if ( selectors.length === 0 ) { return; } + +/******************************************************************************/ + +const uBOL_injectCSS = (css, count = 10) => { + chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => { + count -= 1; + if ( count === 0 ) { return; } + uBOL_injectCSS(css, count - 1); + }); }; const nonVisualElements = { + head: true, + link: true, + meta: true, script: true, style: true, }; const regexFromString = (s, exact = false) => { if ( s === '' ) { return /^/; } - const match = /^\/(.+)\/([i]?)$/.exec(s); + const match = /^\/(.+)\/([imu]*)$/.exec(s); if ( match !== null ) { return new RegExp(match[1], match[2] || undefined); } const reStr = s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - return new RegExp(exact ? `^${reStr}$` : reStr, 'i'); + return new RegExp(exact ? `^${reStr}$` : reStr); }; /******************************************************************************/ @@ -178,7 +243,7 @@ if ( this.mql.media === 'not all' ) { return; } this.mql.addEventListener('change', ( ) => { if ( proceduralFilterer instanceof Object === false ) { return; } - proceduralFilterer.onDOMChanged([ null ]); + proceduralFilterer.onDOMChanged(); }); } transpose(node, output) { @@ -192,7 +257,9 @@ class PSelectorMatchesPathTask extends PSelectorTask { constructor(task) { super(); - this.needle = regexFromString(task[1]); + this.needle = regexFromString( + task[1].replace(/\P{ASCII}/gu, s => encodeURIComponent(s)) + ); } transpose(node, output) { if ( this.needle.test(self.location.pathname + self.location.search) ) { @@ -203,6 +270,32 @@ /******************************************************************************/ +class PSelectorMatchesPropTask extends PSelectorTask { + constructor(task) { + super(); + this.props = task[1].attr.split('.'); + this.reValue = task[1].value !== '' + ? regexFromString(task[1].value, true) + : null; + } + transpose(node, output) { + let value = node; + for ( const prop of this.props ) { + if ( value === undefined ) { return; } + if ( value === null ) { return; } + value = value[prop]; + } + if ( this.reValue === null ) { + if ( value === undefined ) { return; } + } else if ( this.reValue.test(value) === false ) { + return; + } + output.push(node); + } +} + +/******************************************************************************/ + class PSelectorMinTextLengthTask extends PSelectorTask { constructor(task) { super(); @@ -229,28 +322,27 @@ const toKeep = new Set(this.targets); const toDiscard = new Set(); const body = document.body; + const head = document.head; let discard = null; for ( let keep of this.targets ) { - while ( keep !== null && keep !== body ) { + while ( keep !== null && keep !== body && keep !== head ) { toKeep.add(keep); toDiscard.delete(keep); discard = keep.previousElementSibling; while ( discard !== null ) { - if ( - nonVisualElements[discard.localName] !== true && - toKeep.has(discard) === false - ) { - toDiscard.add(discard); + if ( nonVisualElements[discard.localName] !== true ) { + if ( toKeep.has(discard) === false ) { + toDiscard.add(discard); + } } discard = discard.previousElementSibling; } discard = keep.nextElementSibling; while ( discard !== null ) { - if ( - nonVisualElements[discard.localName] !== true && - toKeep.has(discard) === false - ) { - toDiscard.add(discard); + if ( nonVisualElements[discard.localName] !== true ) { + if ( toKeep.has(discard) === false ) { + toDiscard.add(discard); + } } discard = discard.nextElementSibling; } @@ -275,6 +367,38 @@ /******************************************************************************/ +class PSelectorShadowTask extends PSelectorTask { + constructor(task) { + super(); + this.selector = task[1]; + } + transpose(node, output) { + const root = this.openOrClosedShadowRoot(node); + if ( root === null ) { return; } + const nodes = root.querySelectorAll(this.selector); + output.push(...nodes); + } + get openOrClosedShadowRoot() { + if ( PSelectorShadowTask.openOrClosedShadowRoot !== undefined ) { + return PSelectorShadowTask.openOrClosedShadowRoot; + } + if ( typeof chrome === 'object' && chrome !== null ) { + if ( chrome.dom instanceof Object ) { + if ( typeof chrome.dom.openOrClosedShadowRoot === 'function' ) { + PSelectorShadowTask.openOrClosedShadowRoot = + chrome.dom.openOrClosedShadowRoot; + return PSelectorShadowTask.openOrClosedShadowRoot; + } + } + } + PSelectorShadowTask.openOrClosedShadowRoot = node => + node.openOrClosedShadowRoot || null; + return PSelectorShadowTask.openOrClosedShadowRoot; + } +} + +/******************************************************************************/ + // https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277 // Prepend `:scope ` if needed. class PSelectorSpathTask extends PSelectorTask { @@ -363,7 +487,7 @@ // TODO: Is it worth trying to re-apply only the current selector? handler() { if ( proceduralFilterer instanceof Object ) { - proceduralFilterer.onDOMChanged([ null ]); + proceduralFilterer.onDOMChanged(); } } transpose(node, output) { @@ -405,7 +529,6 @@ class PSelector { constructor(o) { - this.raw = o.raw; this.selector = o.selector; this.tasks = []; const tasks = []; @@ -419,8 +542,13 @@ prime(input) { const root = input || document; if ( this.selector === '' ) { return [ root ]; } - if ( input !== document && /^ [>+~]/.test(this.selector) ) { - return Array.from(PSelectorSpathTask.qsa(input, this.selector)); + if ( input !== document ) { + const c0 = this.selector.charCodeAt(0); + if ( c0 === 0x2B /* + */ || c0 === 0x7E /* ~ */ ) { + return Array.from(PSelectorSpathTask.qsa(input, this.selector)); + } else if ( c0 === 0x3E /* > */ ) { + return Array.from(input.querySelectorAll(`:scope ${this.selector}`)); + } } return Array.from(root.querySelectorAll(this.selector)); } @@ -468,9 +596,11 @@ [ 'matches-css-before', PSelectorMatchesCSSBeforeTask ], [ 'matches-media', PSelectorMatchesMediaTask ], [ 'matches-path', PSelectorMatchesPathTask ], + [ 'matches-prop', PSelectorMatchesPropTask ], [ 'min-text-length', PSelectorMinTextLengthTask ], [ 'not', PSelectorIfNotTask ], [ 'others', PSelectorOthersTask ], + [ 'shadow', PSelectorShadowTask ], [ 'spath', PSelectorSpathTask ], [ 'upward', PSelectorUpwardTask ], [ 'watch-attr', PSelectorWatchAttrs ], @@ -495,6 +625,13 @@ } return []; } + exec(input) { + try { + return super.exec(input); + } catch (ex) { + } + return []; + } } /******************************************************************************/ @@ -571,9 +708,7 @@ if ( styleToken !== undefined ) { return styleToken; } styleToken = this.randomToken(); this.styleTokenMap.set(style, styleToken); - addStylesheet( - `[${this.masterToken}][${styleToken}]\n{${style}}\n`, - ); + uBOL_injectCSS(`[${this.masterToken}][${styleToken}]\n{${style}}\n`); return styleToken; } @@ -656,42 +791,7 @@ /******************************************************************************/ -const proceduralImports = self.proceduralImports || []; - -const lookupSelectors = (hn, out) => { - for ( const { argsList, hostnamesMap } of proceduralImports ) { - let argsIndices = hostnamesMap.get(hn); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - out.push(...details.a.map(json => JSON.parse(json))); - } - } -}; - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -const selectors = []; -while ( hn ) { - lookupSelectors(hn, selectors); - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -proceduralImports.length = 0; - -/******************************************************************************/ - -if ( selectors.length === 0 ) { return; } - -proceduralFilterer = new ProceduralFilterer(selectors); +const proceduralFilterer = new ProceduralFilterer(selectors); const observer = new MutationObserver(mutations => { let domChanged = false; @@ -724,3 +824,5 @@ })(); /******************************************************************************/ + +void 0; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-specific.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-specific.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-specific.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-specific.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_cssSpecificEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const specificEntityImports = self.specificEntityImports || []; - -/******************************************************************************/ - -const lookupSelectors = (hn, entity, out) => { - for ( const { argsList, entitiesMap } of specificEntityImports ) { - let argsIndices = entitiesMap.get(entity); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - out.push(details.a); - } - } -}; - -let hn = ''; -try { hn = document.location.hostname; } catch(ex) { } -const selectors = []; -const hnparts = hn.split('.'); -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - lookupSelectors( - hnparts.slice(i).join('.'), - hnparts.slice(i,j).join('.'), - selectors - ); - } -} - -self.specificEntityImports = undefined; - -if ( selectors.length === 0 ) { return; } - -try { - const sheet = new CSSStyleSheet(); - sheet.replace(`@layer{${selectors.join(',')}{display:none!important;}}`); - document.adoptedStyleSheets = [ - ...document.adoptedStyleSheets, - sheet - ]; -} catch(ex) { -} - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-specific.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-specific.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting/css-specific.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting/css-specific.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,120 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssSpecific() { + +/******************************************************************************/ + +const specificImports = self.specificImports || []; +self.specificImports = undefined; +delete self.specificImports; + +/******************************************************************************/ + +const hnParts = []; +try { hnParts.push(...document.location.hostname.split('.')); } +catch(ex) { } +const hnpartslen = hnParts.length; +if ( hnpartslen === 0 ) { return; } + +const selectors = []; + +for ( const { argsList, exceptionsMap, hostnamesMap, entitiesMap } of specificImports ) { + const todoIndices = new Set(); + const tonotdoIndices = []; + // Exceptions + if ( exceptionsMap.size !== 0 ) { + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + const excepted = exceptionsMap.get(hn); + if ( excepted ) { tonotdoIndices.push(...excepted); } + } + exceptionsMap.clear(); + } + // Hostname-based + if ( hostnamesMap.size !== 0 ) { + const collectArgIndices = hn => { + let argsIndices = hostnamesMap.get(hn); + if ( argsIndices === undefined ) { return; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + }; + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + collectArgIndices(hn); + } + collectArgIndices('*'); + hostnamesMap.clear(); + } + // Entity-based + if ( entitiesMap.size !== 0 ) { + const n = hnpartslen - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + const en = hnParts.slice(i,j).join('.'); + let argsIndices = entitiesMap.get(en); + if ( argsIndices === undefined ) { continue; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + } + } + entitiesMap.clear(); + } + for ( const i of todoIndices ) { + selectors.push(argsList[i]); + } + argsList.length = 0; +} +specificImports.length = 0; + +if ( selectors.length === 0 ) { return; } + +/******************************************************************************/ + +(function uBOL_injectCSS(css, count = 10) { + chrome.runtime.sendMessage({ what: 'insertCSS', css }).catch(( ) => { + count -= 1; + if ( count === 0 ) { return; } + uBOL_injectCSS(css, count - 1); + }); +})(`${selectors.join(',')}{display:none!important;}`); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ + +void 0; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting-manager.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting-manager.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/scripting-manager.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/scripting-manager.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,56 +19,19 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ +import * as ut from './utils.js'; import { browser } from './ext.js'; import { fetchJSON } from './fetch.js'; -import { getFilteringModeDetails } from './mode-manager.js'; import { getEnabledRulesetsDetails } from './ruleset-manager.js'; - -import * as ut from './utils.js'; +import { getFilteringModeDetails } from './mode-manager.js'; +import { ubolLog } from './debug.js'; /******************************************************************************/ -const resourceDetailPromises = new Map(); - -function getSpecificDetails() { - let promise = resourceDetailPromises.get('specific'); - if ( promise !== undefined ) { return promise; } - promise = fetchJSON('/rulesets/specific-details').then(entries => { - const out = new Map(); - for ( const entry of entries ) { - out.set(entry[0], new Map(entry[1])); - } - return out; - }); - resourceDetailPromises.set('specific', promise); - return promise; -} +const isGecko = browser.runtime.getURL('').startsWith('moz-extension://'); -function getDeclarativeDetails() { - let promise = resourceDetailPromises.get('declarative'); - if ( promise !== undefined ) { return promise; } - promise = fetchJSON('/rulesets/declarative-details').then( - entries => new Map(entries) - ); - resourceDetailPromises.set('declarative', promise); - return promise; -} - -function getProceduralDetails() { - let promise = resourceDetailPromises.get('procedural'); - if ( promise !== undefined ) { return promise; } - promise = fetchJSON('/rulesets/procedural-details').then( - entries => new Map(entries) - ); - resourceDetailPromises.set('procedural', promise); - return promise; -} +const resourceDetailPromises = new Map(); function getScriptletDetails() { let promise = resourceDetailPromises.get('scriptlet'); @@ -111,7 +74,12 @@ const normalizeRegisteredContentScripts = registered => { for ( const entry of registered ) { - const { js } = entry; + const { css = [], js = [] } = entry; + for ( let i = 0; i < css.length; i++ ) { + const path = css[i]; + if ( path.startsWith('/') ) { continue; } + css[i] = `/${path}`; + } for ( let i = 0; i < js.length; i++ ) { const path = js[i]; if ( path.startsWith('/') ) { continue; } @@ -123,38 +91,37 @@ /******************************************************************************/ -function registerGeneric(context, genericDetails) { +function registerHighGeneric(context, genericDetails) { const { before, filteringModeDetails, rulesetsDetails } = context; const excludeHostnames = []; - const js = []; + const css = []; for ( const details of rulesetsDetails ) { const hostnames = genericDetails.get(details.id); if ( hostnames !== undefined ) { excludeHostnames.push(...hostnames); } - if ( details.css.generic instanceof Object === false ) { continue; } - if ( details.css.generic.count === 0 ) { continue; } - js.push(`/rulesets/scripting/generic/${details.id}.js`); + const count = details.css?.generichigh || 0; + if ( count === 0 ) { continue; } + css.push(`/rulesets/scripting/generichigh/${details.id}.css`); } - if ( js.length === 0 ) { return; } - - js.push('/js/scripting/css-generic.js'); + if ( css.length === 0 ) { return; } + const { none, basic, optimal, complete } = filteringModeDetails; const matches = []; const excludeMatches = []; - if ( filteringModeDetails.extendedGeneric.has('all-urls') ) { - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.none)); - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.network)); - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.extendedSpecific)); + if ( complete.has('all-urls') ) { + excludeMatches.push(...ut.matchesFromHostnames(none)); + excludeMatches.push(...ut.matchesFromHostnames(basic)); + excludeMatches.push(...ut.matchesFromHostnames(optimal)); excludeMatches.push(...ut.matchesFromHostnames(excludeHostnames)); matches.push(''); } else { matches.push( ...ut.matchesFromHostnames( ut.subtractHostnameIters( - Array.from(filteringModeDetails.extendedGeneric), + Array.from(complete), excludeHostnames ) ) @@ -163,77 +130,73 @@ if ( matches.length === 0 ) { return; } - const registered = before.get('css-generic'); - before.delete('css-generic'); // Important! + const registered = before.get('css-generichigh'); + before.delete('css-generichigh'); // Important! + + // https://github.com/w3c/webextensions/issues/414#issuecomment-1623992885 + // Once supported, add: + // cssOrigin: 'USER', + const directive = { + id: 'css-generichigh', + css, + matches, + excludeMatches, + runAt: 'document_end', + }; // register if ( registered === undefined ) { - context.toAdd.push({ - id: 'css-generic', - js, - matches, - excludeMatches, - runAt: 'document_idle', - }); + context.toAdd.push(directive); return; } // update - const directive = { id: 'css-generic' }; - if ( arrayEq(registered.js, js, false) === false ) { - directive.js = js; - } - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; - } - if ( directive.js || directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); + if ( + arrayEq(registered.css, css, false) === false || + arrayEq(registered.matches, matches) === false || + arrayEq(registered.excludeMatches, excludeMatches) === false + ) { + context.toRemove.push('css-generichigh'); + context.toAdd.push(directive); } } /******************************************************************************/ -function registerProcedural(context, proceduralDetails) { +function registerGeneric(context, genericDetails) { const { before, filteringModeDetails, rulesetsDetails } = context; + const excludeHostnames = []; const js = []; - const hostnameMatches = new Set(); for ( const details of rulesetsDetails ) { - if ( details.css.procedural === 0 ) { continue; } - js.push(`/rulesets/scripting/procedural/${details.id}.js`); - if ( proceduralDetails.has(details.id) ) { - for ( const hn of proceduralDetails.get(details.id) ) { - hostnameMatches.add(hn); - } + const hostnames = genericDetails.get(details.id); + if ( hostnames !== undefined ) { + excludeHostnames.push(...hostnames); } + const count = details.css?.generic || 0; + if ( count === 0 ) { continue; } + js.push(`/rulesets/scripting/generic/${details.id}.js`); } if ( js.length === 0 ) { return; } - js.push('/js/scripting/css-procedural.js'); - - const { - none, - network, - extendedSpecific, - extendedGeneric, - } = filteringModeDetails; + js.push('/js/scripting/css-generic.js'); + const { none, basic, optimal, complete } = filteringModeDetails; const matches = []; const excludeMatches = []; - if ( extendedSpecific.has('all-urls') || extendedGeneric.has('all-urls') ) { + if ( complete.has('all-urls') ) { excludeMatches.push(...ut.matchesFromHostnames(none)); - excludeMatches.push(...ut.matchesFromHostnames(network)); - matches.push(...ut.matchesFromHostnames(hostnameMatches)); - } else if ( extendedSpecific.size !== 0 || extendedGeneric.size !== 0 ) { + excludeMatches.push(...ut.matchesFromHostnames(basic)); + excludeMatches.push(...ut.matchesFromHostnames(optimal)); + excludeMatches.push(...ut.matchesFromHostnames(excludeHostnames)); + matches.push(''); + } else { matches.push( ...ut.matchesFromHostnames( - ut.intersectHostnameIters( - [ ...extendedSpecific, ...extendedGeneric ], - hostnameMatches + ut.subtractHostnameIters( + Array.from(complete), + excludeHostnames ) ) ); @@ -241,456 +204,293 @@ if ( matches.length === 0 ) { return; } - const registered = before.get('css-procedural'); - before.delete('css-procedural'); // Important! + const registered = before.get('css-generic'); + before.delete('css-generic'); // Important! + + const directive = { + id: 'css-generic', + js, + matches, + excludeMatches, + runAt: 'document_idle', + }; // register if ( registered === undefined ) { - context.toAdd.push({ - id: 'css-procedural', - js, - allFrames: true, - matches, - excludeMatches, - runAt: 'document_end', - }); + context.toAdd.push(directive); return; } // update - const directive = { id: 'css-procedural' }; - if ( arrayEq(registered.js, js, false) === false ) { - directive.js = js; - } - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; - } - if ( directive.js || directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); + if ( + arrayEq(registered.js, js, false) === false || + arrayEq(registered.matches, matches) === false || + arrayEq(registered.excludeMatches, excludeMatches) === false + ) { + context.toRemove.push('css-generic'); + context.toAdd.push(directive); } } /******************************************************************************/ -function registerDeclarative(context, declarativeDetails) { +function registerProcedural(context) { const { before, filteringModeDetails, rulesetsDetails } = context; const js = []; - const hostnameMatches = []; - for ( const details of rulesetsDetails ) { - if ( details.css.declarative === 0 ) { continue; } - js.push(`/rulesets/scripting/declarative/${details.id}.js`); - if ( declarativeDetails.has(details.id) ) { - hostnameMatches.push(...declarativeDetails.get(details.id)); - } + for ( const rulesetDetails of rulesetsDetails ) { + const count = rulesetDetails.css?.procedural || 0; + if ( count === 0 ) { continue; } + js.push(`/rulesets/scripting/procedural/${rulesetDetails.id}.js`); } - if ( js.length === 0 ) { return; } - js.push('/js/scripting/css-declarative.js'); + const { none, basic, optimal, complete } = filteringModeDetails; + const matches = [ + ...ut.matchesFromHostnames(optimal), + ...ut.matchesFromHostnames(complete), + ]; + if ( matches.length === 0 ) { return; } - const { - none, - network, - extendedSpecific, - extendedGeneric, - } = filteringModeDetails; + js.push('/js/scripting/css-procedural.js'); - const matches = []; const excludeMatches = []; - if ( extendedSpecific.has('all-urls') || extendedGeneric.has('all-urls') ) { + if ( none.has('all-urls') === false ) { excludeMatches.push(...ut.matchesFromHostnames(none)); - excludeMatches.push(...ut.matchesFromHostnames(network)); - matches.push(...ut.matchesFromHostnames(hostnameMatches)); - } else if ( extendedSpecific.size !== 0 || extendedGeneric.size !== 0 ) { - matches.push( - ...ut.matchesFromHostnames( - ut.intersectHostnameIters( - [ ...extendedSpecific, ...extendedGeneric ], - hostnameMatches - ) - ) - ); + } + if ( basic.has('all-urls') === false ) { + excludeMatches.push(...ut.matchesFromHostnames(basic)); } - if ( matches.length === 0 ) { return; } + const registered = before.get('css-procedural'); + before.delete('css-procedural'); // Important! - const registered = before.get('css-declarative'); - before.delete('css-declarative'); // Important! + const directive = { + id: 'css-procedural', + js, + allFrames: true, + matches, + excludeMatches, + runAt: 'document_start', + }; // register if ( registered === undefined ) { - context.toAdd.push({ - id: 'css-declarative', - js, - allFrames: true, - matches, - excludeMatches, - runAt: 'document_start', - }); + context.toAdd.push(directive); return; } // update - const directive = { id: 'css-declarative' }; - if ( arrayEq(registered.js, js, false) === false ) { - directive.js = js; - } - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; - } - if ( directive.js || directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); - } -} - -/******************************************************************************/ - -function registerScriptlet(context, scriptletDetails) { - const { before, filteringModeDetails, rulesetsDetails } = context; - - const hasBroadHostPermission = - filteringModeDetails.extendedSpecific.has('all-urls') || - filteringModeDetails.extendedGeneric.has('all-urls'); - - const permissionRevokedMatches = [ - ...ut.matchesFromHostnames(filteringModeDetails.none), - ...ut.matchesFromHostnames(filteringModeDetails.network), - ]; - const permissionGrantedHostnames = [ - ...filteringModeDetails.extendedSpecific, - ...filteringModeDetails.extendedGeneric, - ]; - - for ( const rulesetId of rulesetsDetails.map(v => v.id) ) { - const scriptletList = scriptletDetails.get(rulesetId); - if ( scriptletList === undefined ) { continue; } - - for ( const [ token, scriptletHostnames ] of scriptletList ) { - const id = `${rulesetId}.${token}`; - const registered = before.get(id); - - const matches = []; - const excludeMatches = []; - if ( hasBroadHostPermission ) { - excludeMatches.push(...permissionRevokedMatches); - matches.push(...ut.matchesFromHostnames(scriptletHostnames)); - } else if ( permissionGrantedHostnames.length !== 0 ) { - matches.push( - ...ut.matchesFromHostnames( - ut.intersectHostnameIters( - permissionGrantedHostnames, - scriptletHostnames - ) - ) - ); - } - if ( matches.length === 0 ) { continue; } - - before.delete(id); // Important! - - // register - if ( registered === undefined ) { - context.toAdd.push({ - id, - js: [ `/rulesets/scripting/scriptlet/${id}.js` ], - allFrames: true, - matches, - excludeMatches, - runAt: 'document_start', - world: 'MAIN', - }); - continue; - } - - // update - const directive = { id }; - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; - } - if ( directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); - } - } + if ( + arrayEq(registered.js, js, false) === false || + arrayEq(registered.matches, matches) === false || + arrayEq(registered.excludeMatches, excludeMatches) === false + ) { + context.toRemove.push('css-procedural'); + context.toAdd.push(directive); } } /******************************************************************************/ -function registerScriptletEntity(context) { +function registerDeclarative(context) { const { before, filteringModeDetails, rulesetsDetails } = context; const js = []; - for ( const details of rulesetsDetails ) { - const { scriptlets } = details; - if ( scriptlets instanceof Object === false ) { continue; } - if ( Array.isArray(scriptlets.entityBasedTokens) === false ) { continue; } - if ( scriptlets.entityBasedTokens.length === 0 ) { continue; } - for ( const token of scriptlets.entityBasedTokens ) { - js.push(`/rulesets/scripting/scriptlet-entity/${details.id}.${token}.js`); - } + for ( const rulesetDetails of rulesetsDetails ) { + const count = rulesetDetails.css?.declarative || 0; + if ( count === 0 ) { continue; } + js.push(`/rulesets/scripting/declarative/${rulesetDetails.id}.js`); } - if ( js.length === 0 ) { return; } - const matches = []; + const { none, basic, optimal, complete } = filteringModeDetails; + const matches = [ + ...ut.matchesFromHostnames(optimal), + ...ut.matchesFromHostnames(complete), + ]; + if ( matches.length === 0 ) { return; } + + js.push('/js/scripting/css-declarative.js'); + const excludeMatches = []; - if ( filteringModeDetails.extendedGeneric.has('all-urls') ) { - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.none)); - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.network)); - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.extendedSpecific)); - matches.push(''); - } else { - matches.push( - ...ut.matchesFromHostnames(filteringModeDetails.extendedGeneric) - ); + if ( none.has('all-urls') === false ) { + excludeMatches.push(...ut.matchesFromHostnames(none)); + } + if ( basic.has('all-urls') === false ) { + excludeMatches.push(...ut.matchesFromHostnames(basic)); } - if ( matches.length === 0 ) { return; } + const registered = before.get('css-declarative'); + before.delete('css-declarative'); // Important! - const registered = before.get('scriptlet.entity'); - before.delete('scriptlet.entity'); // Important! + const directive = { + id: 'css-declarative', + js, + allFrames: true, + matches, + excludeMatches, + runAt: 'document_start', + }; // register if ( registered === undefined ) { - context.toAdd.push({ - id: 'scriptlet.entity', - js, - allFrames: true, - matches, - excludeMatches, - runAt: 'document_start', - world: 'MAIN', - }); + context.toAdd.push(directive); return; } // update - const directive = { id: 'scriptlet.entity' }; - if ( arrayEq(registered.js, js, false) === false ) { - directive.js = js; - } - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; - } - if ( directive.js || directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); - } -} - -/******************************************************************************/ - -function registerSpecific(context, specificDetails) { - const { filteringModeDetails } = context; - - let toRegisterMap; if ( - filteringModeDetails.extendedSpecific.has('all-urls') || - filteringModeDetails.extendedGeneric.has('all-urls') + arrayEq(registered.js, js, false) === false || + arrayEq(registered.matches, matches) === false || + arrayEq(registered.excludeMatches, excludeMatches) === false ) { - toRegisterMap = registerSpecificAll(context, specificDetails); - } else { - toRegisterMap = registerSpecificSome(context, specificDetails); - } - - for ( const [ fname, hostnames ] of toRegisterMap ) { - toRegisterableScript(context, fname, hostnames); + context.toRemove.push('css-declarative'); + context.toAdd.push(directive); } } -function registerSpecificSome(context, specificDetails) { - const { filteringModeDetails, rulesetsDetails } = context; - const toRegisterMap = new Map(); - - const targetHostnames = [ - ...filteringModeDetails.extendedSpecific, - ...filteringModeDetails.extendedGeneric, - ]; +/******************************************************************************/ - const checkMatches = (hostnamesToFidsMap, hn) => { - let fids = hostnamesToFidsMap.get(hn); - if ( fids === undefined ) { return; } - if ( typeof fids === 'number' ) { fids = [ fids ]; } - for ( const fid of fids ) { - const fname = ut.fnameFromFileId(fid); - let existing = toRegisterMap.get(fname); - if ( existing ) { - if ( existing[0] === '*' ) { continue; } - existing.push(hn); - } else { - toRegisterMap.set(fname, existing = [ hn ]); - } - if ( hn !== '*' ) { continue; } - existing.length = 0; - existing.push('*'); - break; - } - }; +function registerSpecific(context) { + const { before, filteringModeDetails, rulesetsDetails } = context; + const js = []; for ( const rulesetDetails of rulesetsDetails ) { - const hostnamesToFidsMap = specificDetails.get(rulesetDetails.id); - if ( hostnamesToFidsMap === undefined ) { continue; } - for ( let hn of targetHostnames ) { - while ( hn ) { - checkMatches(hostnamesToFidsMap, hn); - hn = ut.toBroaderHostname(hn); - } - } + const count = rulesetDetails.css?.specific || 0; + if ( count === 0 ) { continue; } + js.push(`/rulesets/scripting/specific/${rulesetDetails.id}.js`); } + if ( js.length === 0 ) { return; } - return toRegisterMap; -} + const { none, basic, optimal, complete } = filteringModeDetails; + const matches = [ + ...ut.matchesFromHostnames(optimal), + ...ut.matchesFromHostnames(complete), + ]; + if ( matches.length === 0 ) { return; } -function registerSpecificAll(context, specificDetails) { - const { filteringModeDetails, rulesetsDetails } = context; - const toRegisterMap = new Map(); - - const excludeSet = new Set([ - ...filteringModeDetails.network, - ...filteringModeDetails.none, - ]); + js.push('/js/scripting/css-specific.js'); - for ( const rulesetDetails of rulesetsDetails ) { - const hostnamesToFidsMap = specificDetails.get(rulesetDetails.id); - if ( hostnamesToFidsMap === undefined ) { continue; } - for ( let [ hn, fids ] of hostnamesToFidsMap ) { - if ( excludeSet.has(hn) ) { continue; } - if ( ut.isDescendantHostnameOfIter(hn, excludeSet) ) { continue; } - if ( typeof fids === 'number' ) { fids = [ fids ]; } - for ( const fid of fids ) { - const fname = ut.fnameFromFileId(fid); - let existing = toRegisterMap.get(fname); - if ( existing ) { - if ( existing[0] === '*' ) { continue; } - existing.push(hn); - } else { - toRegisterMap.set(fname, existing = [ hn ]); - } - if ( hn !== '*' ) { continue; } - existing.length = 0; - existing.push('*'); - break; - } - } + const excludeMatches = []; + if ( none.has('all-urls') === false ) { + excludeMatches.push(...ut.matchesFromHostnames(none)); + } + if ( basic.has('all-urls') === false ) { + excludeMatches.push(...ut.matchesFromHostnames(basic)); } - return toRegisterMap; -} + const registered = before.get('css-specific'); + before.delete('css-specific'); // Important! -const toRegisterableScript = (context, fname, hostnames) => { - if ( context.before.has(fname) ) { - return toUpdatableScript(context, fname, hostnames); - } - const matches = hostnames - ? ut.matchesFromHostnames(hostnames) - : [ '' ]; - const excludeMatches = matches.length === 1 && matches[0] === '' - ? ut.matchesFromHostnames(context.filteringModeDetails.none) - : []; const directive = { - id: fname, + id: 'css-specific', + js, allFrames: true, matches, excludeMatches, - js: [ `/rulesets/scripting/specific/${fname.slice(-1)}/${fname.slice(0,-1)}.js` ], runAt: 'document_start', }; - context.toAdd.push(directive); -}; -const toUpdatableScript = (context, fname, hostnames) => { - const registered = context.before.get(fname); - context.before.delete(fname); // Important! - const directive = { id: fname }; - const matches = hostnames - ? ut.matchesFromHostnames(hostnames) - : [ '' ]; - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - const excludeMatches = matches.length === 1 && matches[0] === '' - ? ut.matchesFromHostnames(context.filteringModeDetails.none) - : []; - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; + // register + if ( registered === undefined ) { + context.toAdd.push(directive); + return; } - if ( directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); + + // update + if ( + arrayEq(registered.js, js, false) === false || + arrayEq(registered.matches, matches) === false || + arrayEq(registered.excludeMatches, excludeMatches) === false + ) { + context.toRemove.push('css-specific'); + context.toAdd.push(directive); } -}; +} /******************************************************************************/ -function registerSpecificEntity(context) { +function registerScriptlet(context, scriptletDetails) { const { before, filteringModeDetails, rulesetsDetails } = context; - const js = []; - for ( const details of rulesetsDetails ) { - if ( details.css.specific instanceof Object === false ) { continue; } - if ( details.css.specific.entityBased === 0 ) { continue; } - js.push(`/rulesets/scripting/specific-entity/${details.id}.js`); - } + const hasBroadHostPermission = + filteringModeDetails.optimal.has('all-urls') || + filteringModeDetails.complete.has('all-urls'); - if ( js.length === 0 ) { return; } + const permissionRevokedMatches = [ + ...ut.matchesFromHostnames(filteringModeDetails.none), + ...ut.matchesFromHostnames(filteringModeDetails.basic), + ]; + const permissionGrantedHostnames = [ + ...filteringModeDetails.optimal, + ...filteringModeDetails.complete, + ]; - const matches = []; - const excludeMatches = []; - if ( filteringModeDetails.extendedGeneric.has('all-urls') ) { - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.none)); - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.network)); - excludeMatches.push(...ut.matchesFromHostnames(filteringModeDetails.extendedSpecific)); - matches.push(''); - } else { - matches.push( - ...ut.matchesFromHostnames(filteringModeDetails.extendedGeneric) - ); - } + for ( const rulesetId of rulesetsDetails.map(v => v.id) ) { + const scriptletList = scriptletDetails.get(rulesetId); + if ( scriptletList === undefined ) { continue; } - if ( matches.length === 0 ) { return; } + for ( const [ token, scriptletHostnames ] of scriptletList ) { + const id = `${rulesetId}.${token}`; + const registered = before.get(id); - js.push('/js/scripting/css-specific.entity.js'); + const matches = []; + const excludeMatches = []; + let targetHostnames = []; + if ( hasBroadHostPermission ) { + excludeMatches.push(...permissionRevokedMatches); + if ( scriptletHostnames.length > 100 ) { + targetHostnames = [ '*' ]; + } else { + targetHostnames = scriptletHostnames; + } + } else if ( permissionGrantedHostnames.length !== 0 ) { + if ( scriptletHostnames.includes('*') ) { + targetHostnames = permissionGrantedHostnames; + } else { + targetHostnames = ut.intersectHostnameIters( + scriptletHostnames, + permissionGrantedHostnames + ); + } + } + if ( targetHostnames.length === 0 ) { continue; } + matches.push(...ut.matchesFromHostnames(targetHostnames)); - const registered = before.get('css-specific.entity'); - before.delete('css-specific.entity'); // Important! + before.delete(id); // Important! - // register - if ( registered === undefined ) { - context.toAdd.push({ - id: 'css-specific.entity', - js, - allFrames: true, - matches, - excludeMatches, - runAt: 'document_start', - }); - return; - } + const directive = { + id, + js: [ `/rulesets/scripting/scriptlet/${id}.js` ], + allFrames: true, + matches, + excludeMatches, + runAt: 'document_start', + }; + + // https://bugzilla.mozilla.org/show_bug.cgi?id=1736575 + // `MAIN` world not yet supported in Firefox + if ( isGecko === false ) { + directive.world = 'MAIN'; + directive.matchOriginAsFallback = true; + } - // update - const directive = { id: 'css-specific.entity' }; - if ( arrayEq(registered.js, js, false) === false ) { - directive.js = js; - } - if ( arrayEq(registered.matches, matches) === false ) { - directive.matches = matches; - } - if ( arrayEq(registered.excludeMatches, excludeMatches) === false ) { - directive.excludeMatches = excludeMatches; - } - if ( directive.js || directive.matches || directive.excludeMatches ) { - context.toUpdate.push(directive); + // register + if ( registered === undefined ) { + context.toAdd.push(directive); + continue; + } + + // update + if ( + arrayEq(registered.matches, matches) === false || + arrayEq(registered.excludeMatches, excludeMatches) === false + ) { + context.toRemove.push(id); + context.toAdd.push(directive); + } + } } } @@ -704,19 +504,13 @@ const [ filteringModeDetails, rulesetsDetails, - declarativeDetails, - proceduralDetails, scriptletDetails, - specificDetails, genericDetails, registered, ] = await Promise.all([ getFilteringModeDetails(), getEnabledRulesetsDetails(), - getDeclarativeDetails(), - getProceduralDetails(), getScriptletDetails(), - getSpecificDetails(), getGenericDetails(), browser.scripting.getRegisteredContentScripts(), ]); @@ -725,51 +519,37 @@ entry => [ entry.id, entry ] ) ); - const toAdd = [], toUpdate = [], toRemove = []; - const promises = []; + const toAdd = [], toRemove = []; const context = { filteringModeDetails, rulesetsDetails, before, toAdd, - toUpdate, toRemove, }; - registerDeclarative(context, declarativeDetails); - registerProcedural(context, proceduralDetails); + registerDeclarative(context); + registerProcedural(context); registerScriptlet(context, scriptletDetails); - registerScriptletEntity(context); - registerSpecific(context, specificDetails); - registerSpecificEntity(context); + registerSpecific(context); registerGeneric(context, genericDetails); + registerHighGeneric(context, genericDetails); toRemove.push(...Array.from(before.keys())); if ( toRemove.length !== 0 ) { - console.info(`Unregistered ${toRemove} content (css/js)`); - promises.push( - browser.scripting.unregisterContentScripts({ ids: toRemove }) - .catch(reason => { console.info(reason); }) - ); + ubolLog(`Unregistered ${toRemove} content (css/js)`); + await browser.scripting.unregisterContentScripts({ ids: toRemove }) + .catch(reason => { console.info(reason); }); } + if ( toAdd.length !== 0 ) { - console.info(`Registered ${toAdd.map(v => v.id)} content (css/js)`); - promises.push( - browser.scripting.registerContentScripts(toAdd) - .catch(reason => { console.info(reason); }) - ); - } - if ( toUpdate.length !== 0 ) { - console.info(`Updated ${toUpdate.map(v => v.id)} content (css/js)`); - promises.push( - browser.scripting.updateContentScripts(toUpdate) - .catch(reason => { console.info(reason); }) - ); + ubolLog(`Registered ${toAdd.map(v => v.id)} content (css/js)`); + await browser.scripting.registerContentScripts(toAdd) + .catch(reason => { console.info(reason); }); } - if ( promises.length === 0 ) { return; } - return Promise.all(promises); + return true; } /******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/settings.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/settings.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/settings.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/settings.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,248 +19,114 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; - import { browser, sendMessage } from './ext.js'; -import { i18n$ } from './i18n.js'; -import { dom, qs$, qsa$ } from './dom.js'; -import { simpleStorage } from './storage.js'; +import { dom, qs$ } from './dom.js'; +import punycode from './punycode.js'; +import { renderFilterLists } from './filter-lists.js'; /******************************************************************************/ -const rulesetMap = new Map(); let cachedRulesetData = {}; -let hideUnusedSet = new Set([ 'regions' ]); /******************************************************************************/ -function renderNumber(value) { - return value.toLocaleString(); +function hashFromIterable(iter) { + return Array.from(iter).sort().join('\n'); } /******************************************************************************/ -function rulesetStats(rulesetId) { - const hasOmnipotence = cachedRulesetData.defaultFilteringMode > 1; - const rulesetDetails = rulesetMap.get(rulesetId); - if ( rulesetDetails === undefined ) { return; } - const { rules, filters } = rulesetDetails; - let ruleCount = rules.plain + rules.regex; - if ( hasOmnipotence ) { - ruleCount += rules.removeparam + rules.redirect + rules.csp; +function renderAdminRules() { + const { disabledFeatures: forbid = [] } = cachedRulesetData; + if ( forbid.length === 0 ) { return; } + dom.body.dataset.forbid = forbid.join(' '); + if ( forbid.includes('dashboard') ) { + dom.body.dataset.pane = 'about'; } - const filterCount = filters.accepted; - return { ruleCount, filterCount }; } /******************************************************************************/ -function renderFilterLists(soft = false) { - const { enabledRulesets, rulesetDetails } = cachedRulesetData; - const listGroupTemplate = qs$('#templates .groupEntry'); - const listEntryTemplate = qs$('#templates .listEntry'); - const listStatsTemplate = i18n$('perRulesetStats'); - const groupNames = new Map([ [ 'user', '' ] ]); - - const liFromListEntry = function(ruleset, li, hideUnused) { - if ( !li ) { - li = dom.clone(listEntryTemplate); - } - const on = enabledRulesets.includes(ruleset.id); - dom.cl.toggle(li, 'checked', on); - if ( dom.attr(li, 'data-listkey') !== ruleset.id ) { - dom.attr(li, 'data-listkey', ruleset.id); - qs$(li, 'input[type="checkbox"]').checked = on; - dom.text(qs$(li, '.listname'), ruleset.name || ruleset.id); - dom.cl.remove(li, 'toRemove'); - if ( ruleset.homeURL ) { - dom.cl.add(li, 'support'); - dom.attr(qs$(li, 'a.support'), 'href', ruleset.homeURL); - } else { - dom.cl.remove(li, 'support'); - } - if ( ruleset.instructionURL ) { - dom.cl.add(li, 'mustread'); - dom.attr(qs$(li, 'a.mustread'), 'href', ruleset.instructionURL); - } else { - dom.cl.remove(li, 'mustread'); - } - dom.cl.toggle(li, 'isDefault', ruleset.isDefault === true); - dom.cl.toggle(li, 'unused', hideUnused && !on); - } - // https://github.com/gorhill/uBlock/issues/1429 - if ( soft !== true ) { - qs$(li, 'input[type="checkbox"]').checked = on; - } - const stats = rulesetStats(ruleset.id); - li.title = listStatsTemplate - .replace('{{ruleCount}}', renderNumber(stats.ruleCount)) - .replace('{{filterCount}}', renderNumber(stats.filterCount)); - dom.attr( - qs$(li, '.input.checkbox'), - 'disabled', - stats.ruleCount === 0 ? '' : null - ); - dom.cl.remove(li, 'discard'); - return li; - }; - - const listEntryCountFromGroup = function(groupRulesets) { - if ( Array.isArray(groupRulesets) === false ) { return ''; } - let count = 0, - total = 0; - for ( const ruleset of groupRulesets ) { - if ( enabledRulesets.includes(ruleset.id) ) { - count += 1; - } - total += 1; - } - return total !== 0 ? - `(${count.toLocaleString()}/${total.toLocaleString()})` : - ''; - }; - - const liFromListGroup = function(groupKey, groupRulesets) { - let liGroup = qs$(`#lists > .groupEntry[data-groupkey="${groupKey}"]`); - if ( liGroup === null ) { - liGroup = dom.clone(listGroupTemplate); - let groupName = groupNames.get(groupKey); - if ( groupName === undefined ) { - groupName = i18n$('3pGroup' + groupKey.charAt(0).toUpperCase() + groupKey.slice(1)); - groupNames.set(groupKey, groupName); - } - if ( groupName !== '' ) { - dom.text(qs$(liGroup, '.geName'), groupName); - } - } - if ( qs$(liGroup, '.geName:empty') === null ) { - dom.text( - qs$(liGroup, '.geCount'), - listEntryCountFromGroup(groupRulesets) - ); - } - const hideUnused = mustHideUnusedLists(groupKey); - dom.cl.toggle(liGroup, 'hideUnused', hideUnused); - const ulGroup = qs$(liGroup, '.listEntries'); - if ( !groupRulesets ) { return liGroup; } - groupRulesets.sort(function(a, b) { - return (a.name || '').localeCompare(b.name || ''); - }); - for ( let i = 0; i < groupRulesets.length; i++ ) { - const liEntry = liFromListEntry( - groupRulesets[i], - ulGroup.children[i], - hideUnused - ); - if ( liEntry.parentElement === null ) { - ulGroup.appendChild(liEntry); - } - } - return liGroup; - }; +function renderWidgets() { + if ( cachedRulesetData.firstRun ) { + dom.cl.add(dom.body, 'firstRun'); + } + + renderDefaultMode(); + renderTrustedSites(); - // Incremental rendering: this will allow us to easily discard unused - // DOM list entries. - dom.cl.add('#lists .listEntries .listEntry[data-listkey]', 'discard'); - - // Visually split the filter lists in three groups - const ulLists = qs$('#lists'); - const groups = new Map([ - [ - 'default', - rulesetDetails.filter(ruleset => - ruleset.id === 'default' - ), - ], - [ - 'misc', - rulesetDetails.filter(ruleset => - ruleset.id !== 'default' && typeof ruleset.lang !== 'string' - ), - ], - [ - 'regions', - rulesetDetails.filter(ruleset => - typeof ruleset.lang === 'string' - ), - ], - ]); - - dom.cl.toggle(dom.body, 'hideUnused', mustHideUnusedLists('*')); - - for ( const [ groupKey, groupRulesets ] of groups ) { - const liGroup = liFromListGroup(groupKey, groupRulesets); - dom.attr(liGroup, 'data-groupkey', groupKey); - if ( liGroup.parentElement === null ) { - ulLists.appendChild(liGroup); + qs$('#autoReload input[type="checkbox"]').checked = cachedRulesetData.autoReload; + + { + const input = qs$('#showBlockedCount input[type="checkbox"]'); + if ( cachedRulesetData.canShowBlockedCount ) { + input.checked = cachedRulesetData.showBlockedCount; + } else { + input.checked = false; + dom.attr(input, 'disabled', ''); } } - dom.remove('#lists .listEntries .listEntry.discard'); + { + const input = qs$('#strictBlockMode input[type="checkbox"]'); + const canStrictBlock = cachedRulesetData.defaultFilteringMode > 1; + input.checked = canStrictBlock && cachedRulesetData.strictBlockMode; + dom.attr(input, 'disabled', canStrictBlock ? null : ''); + } - renderWidgets(); + { + dom.prop('#developerMode input[type="checkbox"]', 'checked', + Boolean(cachedRulesetData.developerMode) + ); + if ( cachedRulesetData.isSideloaded ) { + dom.attr('#developerMode', 'hidden', null); + } + } } /******************************************************************************/ -const renderWidgets = function() { - if ( cachedRulesetData.firstRun ) { - dom.cl.add(dom.body, 'firstRun'); - } - +function renderDefaultMode() { const defaultLevel = cachedRulesetData.defaultFilteringMode; - qs$(`.filteringModeCard input[type="radio"][value="${defaultLevel}"]`).checked = true; - - qs$('#autoReload input[type="checkbox"').checked = cachedRulesetData.autoReload; - - // Compute total counts - let filterCount = 0; - let ruleCount = 0; - for ( const liEntry of qsa$('#lists .listEntry[data-listkey]') ) { - if ( qs$(liEntry, 'input[type="checkbox"]:checked') === null ) { continue; } - const stats = rulesetStats(liEntry.dataset.listkey); - if ( stats === undefined ) { continue; } - ruleCount += stats.ruleCount; - filterCount += stats.filterCount; - } - dom.text('#listsOfBlockedHostsPrompt', i18n$('perRulesetStats') - .replace('{{ruleCount}}', ruleCount.toLocaleString()) - .replace('{{filterCount}}', filterCount.toLocaleString()) - ); -}; + if ( defaultLevel !== 0 ) { + qs$(`.filteringModeCard input[type="radio"][value="${defaultLevel}"]`).checked = true; + } else { + dom.prop('.filteringModeCard input[type="radio"]', 'checked', false); + } +} /******************************************************************************/ async function onFilteringModeChange(ev) { const input = ev.target; const newLevel = parseInt(input.value, 10); - let granted = false; switch ( newLevel ) { case 1: { // Revoke broad permissions - granted = await browser.permissions.remove({ + await browser.permissions.remove({ origins: [ '' ] }); + cachedRulesetData.defaultFilteringMode = 1; break; } case 2: case 3: { // Request broad permissions - granted = await browser.permissions.request({ + const granted = await browser.permissions.request({ origins: [ '' ] }); + if ( granted ) { + const actualLevel = await sendMessage({ + what: 'setDefaultFilteringMode', + level: newLevel, + }); + cachedRulesetData.defaultFilteringMode = actualLevel; + } break; } default: break; } - if ( granted ) { - const actualLevel = await sendMessage({ - what: 'setDefaultFilteringMode', - level: newLevel, - }); - cachedRulesetData.defaultFilteringMode = actualLevel; - } - renderFilterLists(true); + renderFilterLists(cachedRulesetData); renderWidgets(); } @@ -273,95 +139,146 @@ /******************************************************************************/ -dom.on('#autoReload input[type="checkbox"', 'change', ev => { +dom.on('#autoReload input[type="checkbox"]', 'change', ev => { sendMessage({ what: 'setAutoReload', state: ev.target.checked, }); }); +dom.on('#showBlockedCount input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setShowBlockedCount', + state: ev.target.checked, + }); +}); + +dom.on('#strictBlockMode input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setStrictBlockMode', + state: ev.target.checked, + }); +}); + +dom.on('#developerMode input[type="checkbox"]', 'change', ev => { + sendMessage({ + what: 'setDeveloperMode', + state: ev.target.checked, + }); +}); + /******************************************************************************/ -async function applyEnabledRulesets() { - const enabledRulesets = []; - for ( const liEntry of qsa$('#lists .listEntry[data-listkey]') ) { - if ( qs$(liEntry, 'input[type="checkbox"]:checked') === null ) { continue; } - enabledRulesets.push(liEntry.dataset.listkey); +function renderTrustedSites() { + const textarea = qs$('#trustedSites'); + const hostnames = cachedRulesetData.trustedSites || []; + textarea.value = hostnames.map(hn => punycode.toUnicode(hn)).join('\n'); + if ( textarea.value !== '' ) { + textarea.value += '\n'; } +} - await sendMessage({ - what: 'applyRulesets', - enabledRulesets, +function changeTrustedSites() { + const hostnames = getStagedTrustedSites(); + const hash = hashFromIterable(cachedRulesetData.trustedSites || []); + if ( hashFromIterable(hostnames) === hash ) { return; } + sendMessage({ + what: 'setTrustedSites', + hostnames, }); +} - renderWidgets(); +function getStagedTrustedSites() { + const textarea = qs$('#trustedSites'); + return textarea.value.split(/\s/).map(hn => { + try { + return punycode.toASCII( + (new URL(`https://${hn}/`)).hostname + ); + } catch(_) { + } + return ''; + }).filter(hn => hn !== ''); } -dom.on('#lists', 'change', '.listEntry input[type="checkbox"]', ( ) => { - applyEnabledRulesets(); -}); +dom.on('#trustedSites', 'blur', changeTrustedSites); -/******************************************************************************/ +self.addEventListener('beforeunload', changeTrustedSites); -// Collapsing of unused lists. +/******************************************************************************/ -function mustHideUnusedLists(which) { - const hideAll = hideUnusedSet.has('*'); - if ( which === '*' ) { return hideAll; } - return hideUnusedSet.has(which) !== hideAll; +function listen() { + const bc = new self.BroadcastChannel('uBOL'); + bc.onmessage = listen.onmessage; } -function toggleHideUnusedLists(which) { - const doesHideAll = hideUnusedSet.has('*'); - let groupSelector; - let mustHide; - if ( which === '*' ) { - mustHide = doesHideAll === false; - groupSelector = ''; - hideUnusedSet.clear(); - if ( mustHide ) { - hideUnusedSet.add(which); +listen.onmessage = ev => { + const message = ev.data; + if ( message instanceof Object === false ) { return; } + const local = cachedRulesetData; + let render = false; + + // Keep added sites which have not yet been committed + if ( message.trustedSites !== undefined ) { + if ( hashFromIterable(message.trustedSites) !== hashFromIterable(local.trustedSites) ) { + const current = new Set(local.trustedSites); + const staged = new Set(getStagedTrustedSites()); + for ( const hn of staged ) { + if ( current.has(hn) === false ) { continue; } + staged.delete(hn); + } + const combined = Array.from(new Set([ ...message.trustedSites, ...staged ])); + local.trustedSites = combined; + render = true; } - dom.cl.toggle(dom.body, 'hideUnused', mustHide); - dom.cl.toggle('.groupEntry[data-groupkey]', 'hideUnused', mustHide); - } else { - const doesHide = hideUnusedSet.has(which); - if ( doesHide ) { - hideUnusedSet.delete(which); - } else { - hideUnusedSet.add(which); + } + + if ( message.defaultFilteringMode !== undefined ) { + if ( message.defaultFilteringMode !== local.defaultFilteringMode ) { + local.defaultFilteringMode = message.defaultFilteringMode; + render = true; } - mustHide = doesHide === doesHideAll; - groupSelector = `.groupEntry[data-groupkey="${which}"]`; - dom.cl.toggle(groupSelector, 'hideUnused', mustHide); } - for ( const elem of qsa$(`#lists ${groupSelector} .listEntry[data-listkey] input[type="checkbox"]:not(:checked)`) ) { - dom.cl.toggle( - elem.closest('.listEntry[data-listkey]'), - 'unused', - mustHide - ); + if ( message.autoReload !== undefined ) { + if ( message.autoReload !== local.autoReload ) { + local.autoReload = message.autoReload; + render = true; + } } - simpleStorage.setItem( - 'hideUnusedFilterLists', - Array.from(hideUnusedSet) - ); -} + if ( message.showBlockedCount !== undefined ) { + if ( message.showBlockedCount !== local.showBlockedCount ) { + local.showBlockedCount = message.showBlockedCount; + render = true; + } + } -dom.on('#lists', 'click', '.groupEntry[data-groupkey] > .geDetails', ev => { - toggleHideUnusedLists( - dom.attr(ev.target.closest('[data-groupkey]'), 'data-groupkey') - ); -}); + if ( message.strictBlockMode !== undefined ) { + if ( message.strictBlockMode !== local.strictBlockMode ) { + local.strictBlockMode = message.strictBlockMode; + render = true; + } + } -// Initialize from saved state. -simpleStorage.getItem('hideUnusedFilterLists').then(value => { - if ( Array.isArray(value) ) { - hideUnusedSet = new Set(value); + if ( message.adminRulesets !== undefined ) { + if ( hashFromIterable(message.adminRulesets) !== hashFromIterable(local.adminRulesets) ) { + local.adminRulesets = message.adminRulesets; + render = true; + } } -}); + + if ( message.enabledRulesets !== undefined ) { + if ( hashFromIterable(message.enabledRulesets) !== hashFromIterable(local.enabledRulesets) ) { + local.enabledRulesets = message.enabledRulesets; + render = true; + } + } + + if ( render === false ) { return; } + renderFilterLists(cachedRulesetData); + renderWidgets(); +}; /******************************************************************************/ @@ -370,12 +287,14 @@ }).then(data => { if ( !data ) { return; } cachedRulesetData = data; - rulesetMap.clear(); - cachedRulesetData.rulesetDetails.forEach(rule => rulesetMap.set(rule.id, rule)); try { - renderFilterLists(); + renderAdminRules(); + renderFilterLists(cachedRulesetData); + renderWidgets(); + dom.cl.remove(dom.body, 'loading'); } catch(ex) { } + listen(); }).catch(reason => { console.trace(reason); }); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/storage.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/storage.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/storage.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/storage.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2022-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -export class simpleStorage { - static getItem(k) { - try { - return Promise.resolve(JSON.parse(self.localStorage.getItem(k))); - } - catch(ex) { - } - return Promise.resolve(null); - } - static setItem(k, v) { - try { - self.localStorage.setItem(k, JSON.stringify(v)); - } - catch(ex) { - } - } -} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/strictblock.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/strictblock.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/strictblock.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/strictblock.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,295 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { dom, qs$ } from './dom.js'; +import { fetchJSON } from './fetch.js'; +import { getEnabledRulesetsDetails } from './ruleset-manager.js'; +import { i18n$ } from './i18n.js'; +import { sendMessage } from './ext.js'; +import { urlSkip } from './urlskip.js'; + +/******************************************************************************/ + +const rulesetDetailsPromise = getEnabledRulesetsDetails(); + +/******************************************************************************/ + +function urlToFragment(raw) { + try { + const fragment = new DocumentFragment(); + const url = new URL(raw); + const hn = url.hostname; + const i = raw.indexOf(hn); + const b = document.createElement('b'); + b.append(hn); + fragment.append(raw.slice(0,i), b, raw.slice(i+hn.length)); + return fragment; + } catch(_) { + } + return raw; +} + +/******************************************************************************/ + +const toURL = new URL('about:blank'); +const toFinalURL = new URL('about:blank'); + +try { + toURL.href = self.location.hash.slice(1); + toFinalURL.href = toURL.href; +} catch(_) { +} + +dom.clear('#theURL > p > span:first-of-type'); +qs$('#theURL > p > span:first-of-type').append(urlToFragment(toURL.href)); + +/******************************************************************************/ + +async function proceed() { + const permanent = qs$('#disableWarning').checked; + // Do not exclude current hostname from strict-block ruleset if a urlskip + // directive to another site is in effect. + // TODO: what if the urlskip directive leads to a different subdomain on + // same site? + if ( toFinalURL.hostname !== toURL.hostname && permanent !== true ) { + return window.location.replace(toFinalURL.href); + } + await sendMessage({ + what: 'excludeFromStrictBlock', + hostname: toURL.hostname, + permanent, + }); + window.location.replace(toURL.href); +} + +/******************************************************************************/ + +function fragmentFromTemplate(template, placeholder, text, details) { + const fragment = new DocumentFragment(); + const pos = template.indexOf(placeholder); + if ( pos === -1 ) { + fragment.append(template); + return fragment; + } + const elem = document.createElement(details.tag); + const { attributes } = details; + if ( attributes ) { + for ( let i = 0; i < attributes.length; i+= 2 ) { + elem.setAttribute(attributes[i+0], attributes[i+1]); + } + } + elem.append(text); + fragment.append( + template.slice(0, pos), + elem, + template.slice(pos + placeholder.length) + ); + return fragment; +} + +/******************************************************************************/ + +// https://github.com/gorhill/uBlock/issues/691 +// Parse URL to extract as much useful information as possible. This is +// useful to assist the user in deciding whether to navigate to the web page. +(( ) => { + const reURL = /^https?:\/\//; + + const liFromParam = function(name, value) { + if ( value === '' ) { + value = name; + name = ''; + } + const li = dom.create('li'); + let span = dom.create('span'); + dom.text(span, name); + li.appendChild(span); + if ( name !== '' && value !== '' ) { + li.appendChild(document.createTextNode(' = ')); + } + span = dom.create('span'); + if ( reURL.test(value) ) { + const a = dom.create('a'); + dom.attr(a, 'href', value); + dom.text(a, value); + span.appendChild(a); + } else { + dom.text(span, value); + } + li.appendChild(span); + return li; + }; + + // https://github.com/uBlockOrigin/uBlock-issues/issues/1649 + // Limit recursion. + const renderParams = function(parentNode, rawURL, depth = 0) { + let url; + try { + url = new URL(rawURL); + } catch(ex) { + return false; + } + + const search = url.search.slice(1); + if ( search === '' ) { return false; } + + url.search = ''; + const li = liFromParam(i18n$('strictblockNoParamsPrompt'), url.href); + parentNode.appendChild(li); + + const params = new self.URLSearchParams(search); + for ( const [ name, value ] of params ) { + const li = liFromParam(name, value); + if ( depth < 2 && reURL.test(value) ) { + const ul = dom.create('ul'); + renderParams(ul, value, depth + 1); + li.appendChild(ul); + } + parentNode.appendChild(li); + } + + return true; + }; + + if ( renderParams(qs$('#parsed'), toURL.href) === false ) { return; } + + dom.cl.remove('#toggleParse', 'hidden'); + + dom.on('#toggleParse', 'click', ( ) => { + dom.cl.toggle('#theURL', 'collapsed'); + }); +})(); + +/******************************************************************************/ + +// Find which list caused the blocking. +(async ( ) => { + const rulesetDetails = await rulesetDetailsPromise; + let iList = -1; + const searchInList = async i => { + if ( iList !== -1 ) { return; } + const rules = await fetchJSON(`/rulesets/strictblock/${rulesetDetails[i].id}`); + if ( iList !== -1 ) { return; } + const toHref = toURL.href; + for ( const rule of rules ) { + const { regexFilter, requestDomains } = rule.condition; + let matchesDomain = requestDomains === undefined; + if ( requestDomains ) { + let hn = toURL.hostname; + for (;;) { + if ( requestDomains.includes(hn) ) { + matchesDomain = true; + break; + } + const pos = hn.indexOf('.'); + if ( pos === -1 ) { break; } + hn = hn.slice(pos+1); + } + if ( matchesDomain === false ) { continue; } + } + const re = new RegExp(regexFilter); + const matchesRegex = re.test(toHref); + if ( matchesDomain && matchesRegex ) { + iList = i; + } + } + }; + const toFetch = []; + for ( let i = 0; i < rulesetDetails.length; i++ ) { + if ( rulesetDetails[i].rules.strictblock === 0 ) { continue; } + toFetch.push(searchInList(i)); + } + if ( toFetch.length === 0 ) { return; } + await Promise.all(toFetch); + if ( iList === -1 ) { return; } + const fragment = fragmentFromTemplate( + i18n$('strictblockReasonSentence1'), + '{{listname}}', rulesetDetails[iList].name, + { tag: 'q' } + ); + qs$('#reason').append(fragment); + dom.attr('#reason', 'hidden', null); +})(); + +/******************************************************************************/ + +// Offer to skip redirection whenever possible +(async ( ) => { + const rulesetDetails = await rulesetDetailsPromise; + const toFetch = []; + for ( const details of rulesetDetails ) { + if ( details.rules.urlskip === 0 ) { continue; } + toFetch.push(fetchJSON(`/rulesets/urlskip/${details.id}`)); + } + if ( toFetch.length === 0 ) { return; } + const urlskipLists = await Promise.all(toFetch); + const toHn = toURL.hostname; + const matchesHn = hn => { + if ( hn.endsWith(toHn) === false ) { return false; } + if ( hn.length === toHn.length ) { return true; } + return toHn.charAt(toHn.length - hn.length - 1) === '.'; + }; + for ( const urlskips of urlskipLists ) { + for ( const urlskip of urlskips ) { + const re = new RegExp(urlskip.re, urlskip.c ? undefined : 'i'); + if ( re.test(toURL.href) === false ) { continue; } + if ( urlskip.hostnames ) { + if ( urlskip.hostnames.some(hn => matchesHn(hn)) === false ) { + continue; + } + } + const finalURL = urlSkip(toURL.href, false, urlskip.steps); + if ( finalURL === undefined ) { continue; } + toFinalURL.href = finalURL; + const fragment = fragmentFromTemplate( + i18n$('strictblockRedirectSentence1'), + '{{url}}', urlToFragment(finalURL), + { tag: 'a', attributes: [ 'href', finalURL, 'class', 'code' ] } + ); + qs$('#urlskip').append(fragment); + dom.attr('#urlskip', 'hidden', null); + return; + } + } +})(); + +/******************************************************************************/ + +// https://www.reddit.com/r/uBlockOrigin/comments/breeux/ +if ( window.history.length > 1 ) { + dom.on('#back', 'click', ( ) => { window.history.back(); }); + qs$('#bye').style.display = 'none'; +} else { + dom.on('#bye', 'click', ( ) => { window.close(); }); + qs$('#back').style.display = 'none'; +} + +dom.on('#disableWarning', 'change', ev => { + const checked = ev.target.checked; + dom.cl.toggle('[data-i18n="strictblockBack"]', 'disabled', checked); + dom.cl.toggle('[data-i18n="strictblockClose"]', 'disabled', checked); +}); + +dom.on('#proceed', 'click', ( ) => { proceed(); }); + +dom.cl.remove(dom.body, 'loading'); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/theme.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/theme.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/theme.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/theme.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/utils.js ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/utils.js --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/js/utils.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/js/utils.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,10 +19,6 @@ Home: https://github.com/gorhill/uBlock */ -/* jshint esversion:11 */ - -'use strict'; - /******************************************************************************/ function parsedURLromOrigin(origin) { @@ -51,6 +47,13 @@ return hna.charCodeAt(hna.length - hnb.length - 1) === 0x2E /* '.' */; }; +/** + * Returns whether a hostname is part of a collection, or is descendant of an + * item in the collection. + * @param hna - the hostname representing the needle. + * @param iterb - an iterable representing the haystack of hostnames. + */ + const isDescendantHostnameOfIter = (hna, iterb) => { const setb = iterb instanceof Set ? iterb : new Set(iterb); if ( setb.has('all-urls') || setb.has('*') ) { return true; } @@ -64,6 +67,13 @@ return false; }; +/** + * Returns all hostnames in the first collection which are equal or descendant + * of hostnames in the second collection. + * @param itera - an iterable which hostnames must be filtered out. + * @param iterb - an iterable which hostnames must be matched. + */ + const intersectHostnameIters = (itera, iterb) => { const setb = iterb instanceof Set ? iterb : new Set(iterb); if ( setb.has('all-urls') || setb.has('*') ) { return Array.from(itera); } @@ -110,7 +120,7 @@ out.push('all-urls'); continue; } - const match = /^\*:\/\/(?:\*\.)?([^\/]+)\/\*/.exec(origin); + const match = /^\*:\/\/(?:\*\.)?([^/]+)\/\*/.exec(origin); if ( match === null ) { continue; } out.push(match[1]); } @@ -119,15 +129,15 @@ /******************************************************************************/ -const fnameFromFileId = fid => - fid.toString(32).padStart(7, '0'); - -const fidFromFileName = fname => - parseInt(fname, 32); +const broadcastMessage = message => { + const bc = new self.BroadcastChannel('uBOL'); + bc.postMessage(message); +}; /******************************************************************************/ export { + broadcastMessage, parsedURLromOrigin, toBroaderHostname, isDescendantHostname, @@ -136,6 +146,4 @@ subtractHostnameIters, matchesFromHostnames, hostnamesFromMatches, - fnameFromFileId, - fidFromFileName, }; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/managed_storage.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/managed_storage.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/managed_storage.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/managed_storage.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-03/schema#", + "type": "object", + "properties": { + "noFiltering": { + "title": "List of domains for which no filtering should occur", + "type": "array", + "items": { "type": "string" } + }, + "disableFirstRunPage": { + "title": "Disable first run page", + "type": "boolean" + }, + "rulesets": { + "title": "Rulesets to add/remove", + "description": "Prefix a ruleset id with '+' to add, or '-' to remove. Use '-*' to disable all non-default lists.", + "type": "array", + "items": { "type": "string" } + }, + "disabledFeatures": { + "title": "User interface features to disable", + "description": "A list of tokens, each of which correspond to a user interface feature to disable.", + "type": "array", + "items": { "type": "string" } + } + } +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/manifest.json ublock-origin-1.62.0+dfsg/platform/mv3/extension/manifest.json --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/manifest.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/manifest.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -{ - "action": { - "default_icon": { - "16": "img/icon_16.png", - "32": "img/icon_32.png", - "64": "img/icon_64.png" - }, - "default_popup": "popup.html" - }, - "author": "Raymond Hill", - "background": { - "service_worker": "/js/background.js", - "type": "module" - }, - "declarative_net_request": { - "rule_resources": [ - ] - }, - "default_locale": "en", - "description": "__MSG_extShortDesc__", - "icons": { - "16": "img/icon_16.png", - "32": "img/icon_32.png", - "64": "img/icon_64.png", - "128": "img/icon_128.png" - }, - "manifest_version": 3, - "minimum_chrome_version": "105.0", - "name": "__MSG_extName__", - "options_page": "dashboard.html", - "optional_host_permissions": [ - "" - ], - "permissions": [ - "activeTab", - "declarativeNetRequest", - "scripting" - ], - "short_name": "uBO Lite", - "version": "0.1", - "web_accessible_resources": [] -} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/matched-rules.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/matched-rules.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/matched-rules.html 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/matched-rules.html 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +Matched rules + + + + + + + + + + +
+
+ + + + + + + + + diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/popup.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/popup.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/popup.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/popup.html 2025-02-09 18:18:39.000000000 +0000 @@ -7,14 +7,15 @@ - + +
-
_
+
­
@@ -23,14 +24,15 @@
-
­
+

_
- - cogs + list-altShow matched rules + comment-alt + cogs
@@ -52,7 +54,7 @@
- + diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/report.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/report.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/report.html 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/report.html 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,61 @@ + + + + + +uBO Lite — Report + + + + + + + + + + +
+ +

+

+
+
+

+ +
+
+
+

+
+ +

+

+
+ +

+

+ +

+ +
+ +
+ + + + + + + + diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/settings.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/settings.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/settings.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/settings.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ - - - - - -uBlock Origin Lite — Filter lists - - - - - - - - - - -
-

-

-
- -
-

-

-
- - - -
-
- -
-

-

-

-
- -
-

Filter lists

-
-

-
-
-
-
-
- -
-
-
-
-
- -
- - - - - - - - - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/extension/strictblock.html ublock-origin-1.62.0+dfsg/platform/mv3/extension/strictblock.html --- ublock-origin-1.46.0+dfsg/platform/mv3/extension/strictblock.html 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/extension/strictblock.html 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + + + + + + + + +
+ + +
+

+ +
+ + + + + +
+ +
+ +
+ + + +
+
+ + + + + + + diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/firefox/background.html ublock-origin-1.62.0+dfsg/platform/mv3/firefox/background.html --- ublock-origin-1.46.0+dfsg/platform/mv3/firefox/background.html 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/firefox/background.html 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,10 @@ + + + + +uBlock Origin Background Page + + + + + diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/firefox/manifest.json ublock-origin-1.62.0+dfsg/platform/mv3/firefox/manifest.json --- ublock-origin-1.46.0+dfsg/platform/mv3/firefox/manifest.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/firefox/manifest.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,64 @@ +{ + "action": { + "default_area": "navbar", + "default_icon": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png" + }, + "default_popup": "popup.html" + }, + "author": "Raymond Hill", + "background": { + "scripts": [ "/js/background.js" ], + "type": "module" + }, + "browser_specific_settings": { + "gecko": { + "id": "uBOLiteRedux@raymondhill.net", + "strict_min_version": "127.0" + }, + "gecko_android": { + "strict_min_version": "127.0" + } + }, + "declarative_net_request": { + "rule_resources": [ + ] + }, + "default_locale": "en", + "description": "__MSG_extShortDesc__", + "icons": { + "16": "img/icon_16.png", + "32": "img/icon_32.png", + "64": "img/icon_64.png", + "128": "img/icon_128.png" + }, + "manifest_version": 3, + "name": "uBO Lite", + "options_ui": { + "open_in_tab": true, + "page": "dashboard.html" + }, + "optional_permissions": [ + "" + ], + "permissions": [ + "activeTab", + "declarativeNetRequest", + "scripting", + "storage" + ], + "short_name": "uBO Lite", + "version": "1.0", + "web_accessible_resources": [ + { + "resources": [ + "/strictblock.html" + ], + "matches": [ + "" + ] + } + ] +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/make-rulesets.js ublock-origin-1.62.0+dfsg/platform/mv3/make-rulesets.js --- ublock-origin-1.46.0+dfsg/platform/mv3/make-rulesets.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/make-rulesets.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2022-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,19 +19,24 @@ Home: https://github.com/gorhill/uBlock */ -'use strict'; +import * as makeScriptlet from './make-scriptlets.js'; +import * as sfp from './js/static-filtering-parser.js'; -/******************************************************************************/ +import { + createHash, + randomBytes, +} from 'crypto'; +import { + dnrRulesetFromRawLists, + mergeRules, +} from './js/static-dnr-filtering.js'; import fs from 'fs/promises'; import https from 'https'; import path from 'path'; import process from 'process'; -import { createHash } from 'crypto'; import redirectResourcesMap from './js/redirect-resources.js'; -import { dnrRulesetFromRawLists } from './js/static-dnr-filtering.js'; -import { StaticFilteringParser } from './js/static-filtering-parser.js'; -import { fnameFromFileId } from './js/utils.js'; +import { safeReplace } from './safe-replace.js'; /******************************************************************************/ @@ -52,19 +57,23 @@ return args; })(); +const platform = commandLineArgs.get('platform') || 'chromium'; const outputDir = commandLineArgs.get('output') || '.'; const cacheDir = `${outputDir}/../mv3-data`; const rulesetDir = `${outputDir}/rulesets`; const scriptletDir = `${rulesetDir}/scripting`; const env = [ - 'chromium', + platform, 'mv3', - 'native_css_has', 'ublock', 'ubol', 'user_stylesheet', ]; +if ( platform !== 'firefox' ) { + env.push('native_css_has'); +} + /******************************************************************************/ const jsonSetMapReplacer = (k, v) => { @@ -80,11 +89,6 @@ return parseInt(h,16) & 0x7FFFFFFF; }; -const hnSort = (a, b) => - a.split('.').reverse().join('.').localeCompare( - b.split('.').reverse().join('.') - ); - /******************************************************************************/ const stdOutput = []; @@ -101,11 +105,10 @@ const urlToFileName = url => { return url .replace(/^https?:\/\//, '') - .replace(/\//g, '_') - ; + .replace(/\//g, '_'); }; -const fetchList = (url, cacheDir) => { +const fetchText = (url, cacheDir) => { return new Promise((resolve, reject) => { const fname = urlToFileName(url); fs.readFile(`${cacheDir}/${fname}`, { encoding: 'utf8' }).then(content => { @@ -157,16 +160,59 @@ const ruleResources = []; const rulesetDetails = []; -const declarativeDetails = new Map(); -const proceduralDetails = new Map(); const scriptletStats = new Map(); -const specificDetails = new Map(); const genericDetails = new Map(); const requiredRedirectResources = new Set(); +// This will be used to sign our inserted `!#trusted on` directives +const secret = createHash('sha256').update(randomBytes(16)).digest('hex').slice(0,16); +log(`Secret: ${secret}`); + +/******************************************************************************/ + +const restrSeparator = '(?:[^%.0-9a-z_-]|$)'; + +const rePatternFromUrlFilter = s => { + let anchor = 0b000; + if ( s.startsWith('||') ) { + anchor = 0b100; + s = s.slice(2); + } else if ( s.startsWith('|') ) { + anchor = 0b010; + s = s.slice(1); + } + if ( s.endsWith('|') ) { + anchor |= 0b001; + s = s.slice(0, -1); + } + let reStr = s.replace(rePatternFromUrlFilter.rePlainChars, '\\$&') + .replace(rePatternFromUrlFilter.reSeparators, restrSeparator) + .replace(rePatternFromUrlFilter.reDanglingAsterisks, '') + .replace(rePatternFromUrlFilter.reAsterisks, '\\S*?'); + if ( anchor & 0b100 ) { + reStr = ( + reStr.startsWith('\\.') ? + rePatternFromUrlFilter.restrHostnameAnchor2 : + rePatternFromUrlFilter.restrHostnameAnchor1 + ) + reStr; + } else if ( anchor & 0b010 ) { + reStr = '^' + reStr; + } + if ( anchor & 0b001 ) { + reStr += '$'; + } + return reStr; +}; +rePatternFromUrlFilter.rePlainChars = /[.+?${}()|[\]\\]/g; +rePatternFromUrlFilter.reSeparators = /\^/g; +rePatternFromUrlFilter.reDanglingAsterisks = /^\*+|\*+$/g; +rePatternFromUrlFilter.reAsterisks = /\*+/g; +rePatternFromUrlFilter.restrHostnameAnchor1 = '^[a-z-]+://(?:[^/?#]+\\.)?'; +rePatternFromUrlFilter.restrHostnameAnchor2 = '^[a-z-]+://(?:[^/?#]+)?'; + /******************************************************************************/ -async function fetchAsset(assetDetails) { +async function fetchList(assetDetails) { // Remember fetched URLs const fetchedURLs = new Set(); @@ -184,8 +230,11 @@ continue; } fetchedURLs.add(part.url); + if ( part.url.startsWith('https://ublockorigin.github.io/uAssets/filters/') ) { + newParts.push(`!#trusted on ${secret}`); + } newParts.push( - fetchList(part.url, cacheDir).then(details => { + fetchText(part.url, cacheDir).then(details => { const { url } = details; const content = details.content.trim(); if ( typeof content === 'string' && content !== '' ) { @@ -200,9 +249,10 @@ return { url, content: '' }; }) ); + newParts.push(`!#trusted off ${secret}`); } parts = await Promise.all(newParts); - parts = StaticFilteringParser.utils.preparser.expandIncludes(parts, env); + parts = sfp.utils.preparser.expandIncludes(parts, env); } const text = parts.join('\n'); @@ -221,29 +271,93 @@ rule.condition !== undefined && rule.condition.regexFilter !== undefined; -const isRedirect = rule => - rule.action !== undefined && - rule.action.type === 'redirect' && - rule.action.redirect.extensionPath !== undefined; +const isRedirect = rule => { + if ( isUnsupported(rule) ) { return false; } + if ( rule.action.type !== 'redirect' ) { return false; } + if ( rule.action.redirect?.extensionPath !== undefined ) { return true; } + if ( rule.action.redirect?.transform?.path !== undefined ) { return true; } + return false; +}; -const isCsp = rule => - rule.action !== undefined && +const isModifyHeaders = rule => + isUnsupported(rule) === false && rule.action.type === 'modifyHeaders'; const isRemoveparam = rule => - rule.action !== undefined && + isUnsupported(rule) === false && rule.action.type === 'redirect' && rule.action.redirect.transform !== undefined; -const isGood = rule => +const isSafe = rule => isUnsupported(rule) === false && - isRedirect(rule) === false && - isCsp(rule) === false && - isRemoveparam(rule) === false; + rule.action !== undefined && ( + rule.action.type === 'block' || + rule.action.type === 'allow' || + rule.action.type === 'allowAllRequests' + ); + +const isURLSkip = rule => + isUnsupported(rule) === false && + rule.action !== undefined && + rule.action.type === 'urlskip'; /******************************************************************************/ -async function processNetworkFilters(assetDetails, network) { +// Two distinct hostnames: +// www.example.com +// example.com +// Can be reduced to a single one: +// example.com +// Since if example.com matches, then www.example.com (or any other subdomain +// of example.com) will always match. + +function pruneHostnameArray(hostnames) { + const rootMap = new Map(); + for ( const hostname of hostnames ) { + const labels = hostname.split('.'); + let currentMap = rootMap; + let i = labels.length; + while ( i-- ) { + const label = labels[i]; + let nextMap = currentMap.get(label); + if ( nextMap === null ) { break; } + if ( nextMap === undefined ) { + if ( i === 0 ) { + currentMap.set(label, (nextMap = null)); + } else { + currentMap.set(label, (nextMap = new Map())); + } + } else if ( i === 0 ) { + currentMap.set(label, null); + } + currentMap = nextMap; + } + } + const assemble = (currentMap, currentHostname, out) => { + for ( const [ label, nextMap ] of currentMap ) { + const nextHostname = currentHostname === '' + ? label + : `${label}.${currentHostname}`; + if ( nextMap === null ) { + out.push(nextHostname); + } else { + assemble(nextMap, nextHostname, out); + } + } + return out; + }; + return assemble(rootMap, '', []); +} + +/******************************************************************************* + * + * For large rulesets, one rule per line for compromise between size and + * readability. This also means that the number of lines in resulting file + * representative of the number of rules in the ruleset. + * + * */ + +function toJSONRuleset(ruleset) { const replacer = (k, v) => { if ( k.startsWith('_') ) { return; } if ( Array.isArray(v) ) { @@ -258,17 +372,116 @@ } return v; }; + const indent = ruleset.length > 10 ? undefined : 1; + const out = []; + for ( const rule of ruleset ) { + out.push(JSON.stringify(rule, replacer, indent)); + } + return `[\n${out.join(',\n')}\n]\n`; +} + +/******************************************************************************/ + +function toStrictBlockRule(rule, out) { + if ( rule.action.type !== 'block' ) { return; } + const { condition } = rule; + if ( condition === undefined ) { return; } + if ( condition.domainType ) { return; } + if ( condition.excludedResourceTypes ) { return; } + if ( condition.requestMethods ) { return; } + if ( condition.excludedRequestMethods ) { return; } + if ( condition.responseHeaders ) { return; } + if ( condition.excludedResponseHeaders ) { return; } + if ( condition.initiatorDomains ) { return; } + if ( condition.excludedInitiatorDomains ) { return; } + if ( condition.excludedRequestDomains ) { return; } + const { resourceTypes } = condition; + if ( resourceTypes === undefined ) { + if ( condition.requestDomains === undefined ) { return; } + } else { + if ( resourceTypes.length !== 1 ) { return; } + if ( resourceTypes[0] !== 'main_frame' ) { return; } + } + let regexFilter; + if ( condition.urlFilter ) { + regexFilter = rePatternFromUrlFilter(condition.urlFilter); + } else if ( condition.regexFilter ) { + regexFilter = condition.regexFilter; + } else { + regexFilter = '^https?://.*'; + } + if ( + regexFilter.startsWith('^') === false + ) { + regexFilter = `^.*${regexFilter}`; + } + if ( + regexFilter.endsWith('$') === false && + regexFilter.endsWith('.*') === false && + regexFilter.endsWith('.+') === false + ) { + regexFilter = `${regexFilter}.*`; + } + const strictBlockRule = { + action: { + type: 'redirect', + redirect: { + regexSubstitution: `/strictblock.html#\\0`, + }, + }, + condition: { + regexFilter, + resourceTypes: [ 'main_frame' ], + }, + priority: 29, + }; + if ( condition.requestDomains ) { + strictBlockRule.condition.requestDomains = condition.requestDomains.slice(); + } + out.set(toStrictBlockRule.ruleId++, strictBlockRule); +} +toStrictBlockRule.ruleId = 1; +/******************************************************************************/ + +async function processNetworkFilters(assetDetails, network) { const { ruleset: rules } = network; log(`Input filter count: ${network.filterCount}`); log(`\tAccepted filter count: ${network.acceptedFilterCount}`); log(`\tRejected filter count: ${network.rejectedFilterCount}`); log(`Output rule count: ${rules.length}`); - const plainGood = rules.filter(rule => isGood(rule) && isRegex(rule) === false); + // Minimize requestDomains arrays + for ( const rule of rules ) { + const condition = rule.condition; + if ( condition === undefined ) { continue; } + const requestDomains = condition.requestDomains; + if ( requestDomains === undefined ) { continue; } + const beforeCount = requestDomains.length; + condition.requestDomains = pruneHostnameArray(requestDomains); + const afterCount = condition.requestDomains.length; + if ( afterCount !== beforeCount ) { + log(`\tPruning requestDomains: from ${beforeCount} to ${afterCount}`); + } + } + + // Add native DNR ruleset if present + if ( assetDetails.dnrURL ) { + const result = await fetchText(assetDetails.dnrURL, cacheDir); + for ( const rule of JSON.parse(result.content) ) { + rules.push(rule); + } + } + + const plainGood = rules.filter(rule => isSafe(rule) && isRegex(rule) === false); log(`\tPlain good: ${plainGood.length}`); + log(plainGood + .filter(rule => Array.isArray(rule._warning)) + .map(rule => rule._warning.map(v => `\t\t${v}`)) + .join('\n'), true + ); - const regexes = rules.filter(rule => isGood(rule) && isRegex(rule)); + const regexes = rules.filter(rule => isSafe(rule) && isRegex(rule)); log(`\tMaybe good (regexes): ${regexes.length}`); const redirects = rules.filter(rule => @@ -276,6 +489,7 @@ isRedirect(rule) ); redirects.forEach(rule => { + if ( rule.action.redirect.extensionPath === undefined ) { return; } requiredRedirectResources.add( rule.action.redirect.extensionPath.replace(/^\/+/, '') ); @@ -290,11 +504,52 @@ ); log(`\tremoveparams= (accepted/discarded): ${removeparamsGood.length}/${removeparamsBad.length}`); - const csps = rules.filter(rule => + const modifyHeaders = rules.filter(rule => isUnsupported(rule) === false && - isCsp(rule) + isModifyHeaders(rule) ); - log(`\tcsp=: ${csps.length}`); + log(`\tmodifyHeaders=: ${modifyHeaders.length}`); + + const urlskips = new Map(); + for ( const rule of rules ) { + if ( isURLSkip(rule) === false ) { continue; } + if ( rule.__modifierAction !== 0 ) { continue; } + const { condition } = rule; + if ( condition.resourceTypes ) { + if ( condition.resourceTypes.includes('main_frame') === false ) { + continue; + } + } + const { urlFilter, regexFilter, requestDomains } = condition; + let re; + if ( urlFilter !== undefined ) { + re = rePatternFromUrlFilter(urlFilter); + } else if ( regexFilter !== undefined ) { + re = regexFilter; + } else { + re = '^'; + } + const rawSteps = rule.__modifierValue; + const steps = rawSteps.includes(' ') && rawSteps.split(/ +/) || [ rawSteps ]; + const keyEntry = { + re, + c: condition.isUrlFilterCaseSensitive, + steps, + } + const key = JSON.stringify(keyEntry); + let actualEntry = urlskips.get(key); + if ( actualEntry === undefined ) { + urlskips.set(key, keyEntry); + actualEntry = keyEntry; + } + if ( requestDomains !== undefined ) { + if ( actualEntry.hostnames === undefined ) { + actualEntry.hostnames = []; + } + actualEntry.hostnames.push(...requestDomains); + } + } + log(`\turlskip=: ${urlskips.size}`); const bad = rules.filter(rule => isUnsupported(rule) @@ -304,34 +559,57 @@ writeFile( `${rulesetDir}/main/${assetDetails.id}.json`, - `${JSON.stringify(plainGood, replacer, 1)}\n` + toJSONRuleset(plainGood) ); if ( regexes.length !== 0 ) { writeFile( `${rulesetDir}/regex/${assetDetails.id}.json`, - `${JSON.stringify(regexes, replacer, 1)}\n` + toJSONRuleset(regexes) ); } if ( removeparamsGood.length !== 0 ) { writeFile( `${rulesetDir}/removeparam/${assetDetails.id}.json`, - `${JSON.stringify(removeparamsGood, replacer, 1)}\n` + toJSONRuleset(removeparamsGood) ); } if ( redirects.length !== 0 ) { writeFile( `${rulesetDir}/redirect/${assetDetails.id}.json`, - `${JSON.stringify(redirects, replacer, 1)}\n` + toJSONRuleset(redirects) ); } - if ( csps.length !== 0 ) { + if ( modifyHeaders.length !== 0 ) { writeFile( - `${rulesetDir}/csp/${assetDetails.id}.json`, - `${JSON.stringify(csps, replacer, 1)}\n` + `${rulesetDir}/modify-headers/${assetDetails.id}.json`, + toJSONRuleset(modifyHeaders) + ); + } + + const strictBlocked = new Map(); + for ( const rule of plainGood ) { + toStrictBlockRule(rule, strictBlocked); + } + if ( strictBlocked.size !== 0 ) { + mergeRules(strictBlocked, 'requestDomains'); + let id = 1; + for ( const rule of strictBlocked.values() ) { + rule.id = id++; + } + writeFile( + `${rulesetDir}/strictblock/${assetDetails.id}.json`, + toJSONRuleset(Array.from(strictBlocked.values())) + ); + } + + if ( urlskips.size !== 0 ) { + writeFile( + `${rulesetDir}/urlskip/${assetDetails.id}.json`, + JSON.stringify(Array.from(urlskips.values()), null, 1) ); } @@ -343,7 +621,9 @@ regex: regexes.length, removeparam: removeparamsGood.length, redirect: redirects.length, - csp: csps.length, + modifyHeaders: modifyHeaders.length, + strictblock: strictBlocked.size, + urlskip: urlskips.size, }; } @@ -355,7 +635,6 @@ // Load all available scriptlets into a key-val map, where the key is the // scriptlet token, and val is the whole content of the file. -const scriptletDealiasingMap = new Map(); let scriptletsMapPromise; function loadAllSourceScriptlets() { @@ -364,28 +643,21 @@ } scriptletsMapPromise = fs.readdir('./scriptlets').then(files => { - const reScriptletNameOrAlias = /^\/\/\/\s+(?:name|alias)\s+(\S+)/gm; + const readTemplateFile = file => + fs.readFile(`./scriptlets/${file}`, { encoding: 'utf8' }) + .then(text => ({ file, text })); const readPromises = []; for ( const file of files ) { - readPromises.push( - fs.readFile(`./scriptlets/${file}`, { encoding: 'utf8' }) - ); + readPromises.push(readTemplateFile(file)); } return Promise.all(readPromises).then(results => { const originalScriptletMap = new Map(); - for ( const text of results ) { - const aliasSet = new Set(); - for (;;) { - const match = reScriptletNameOrAlias.exec(text); - if ( match === null ) { break; } - aliasSet.add(match[1]); - } - if ( aliasSet.size === 0 ) { continue; } - const aliases = Array.from(aliasSet); - originalScriptletMap.set(aliases[0], text); - for ( let i = 0; i < aliases.length; i++ ) { - scriptletDealiasingMap.set(aliases[i], aliases[0]); - } + for ( const details of results ) { + originalScriptletMap.set( + details.file.replace('.template.js', '') + .replace('.template.css', ''), + details.text + ); } return originalScriptletMap; }); @@ -396,73 +668,83 @@ /******************************************************************************/ -const globalPatchedScriptletsSet = new Set(); - -function addScriptingAPIResources(id, hostnames, fid) { - if ( hostnames === undefined ) { return; } - for ( const hn of hostnames ) { - let hostnamesToFidMap = specificDetails.get(id); - if ( hostnamesToFidMap === undefined ) { - hostnamesToFidMap = new Map(); - specificDetails.set(id, hostnamesToFidMap); - } - let fids = hostnamesToFidMap.get(hn); - if ( fids === undefined ) { - hostnamesToFidMap.set(hn, fid); - } else if ( fids instanceof Set ) { - fids.add(fid); - } else if ( fid !== fids ) { - fids = new Set([ fids, fid ]); - hostnamesToFidMap.set(hn, fids); +async function processGenericCosmeticFilters(assetDetails, bucketsMap, exceptionSet) { + if ( bucketsMap === undefined ) { return 0; } + if ( exceptionSet ) { + for ( const [ hash, selectors ] of bucketsMap ) { + let i = selectors.length; + while ( i-- ) { + const selector = selectors[i]; + if ( exceptionSet.has(selector) === false ) { continue; } + selectors.splice(i, 1); + //log(`\tRemoving excepted generic filter ##${selector}`); + } + if ( selectors.length === 0 ) { + bucketsMap.delete(hash); + } } } -} - -const toCSSSpecific = s => (uidint32(s) & ~0b11) | 0b00; - -const pathFromFileName = fname => `${fname.slice(-1)}/${fname.slice(0,-1)}.js`; - -/******************************************************************************/ - -async function processGenericCosmeticFilters(assetDetails, bucketsMap, exclusions) { - const out = { - count: 0, - exclusionCount: 0, - }; - if ( bucketsMap === undefined ) { return out; } - if ( bucketsMap.size === 0 ) { return out; } + if ( bucketsMap.size === 0 ) { return 0; } const bucketsList = Array.from(bucketsMap); const count = bucketsList.reduce((a, v) => a += v[1].length, 0); - if ( count === 0 ) { return out; } - out.count = count; - + if ( count === 0 ) { return 0; } const selectorLists = bucketsList.map(v => [ v[0], v[1].join(',') ]); const originalScriptletMap = await loadAllSourceScriptlets(); - const patchedScriptlet = originalScriptletMap.get('css-generic') - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$genericSelectorMap\$/m, - `${JSON.stringify(selectorLists, scriptletJsonReplacer)}` - ); + let patchedScriptlet = originalScriptletMap.get('css-generic').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$genericSelectorMap\$/, + `${JSON.stringify(selectorLists, scriptletJsonReplacer)}` + ); writeFile( `${scriptletDir}/generic/${assetDetails.id}.js`, patchedScriptlet ); - genericDetails.set(assetDetails.id, exclusions.sort()); - log(`CSS-generic: ${count} plain CSS selectors`); - return out; + return count; } /******************************************************************************/ -const MAX_COSMETIC_FILTERS_PER_FILE = 256; +async function processGenericHighCosmeticFilters(assetDetails, selectorSet, exceptionSet) { + if ( selectorSet === undefined ) { return 0; } + if ( exceptionSet ) { + for ( const selector of selectorSet ) { + if ( exceptionSet.has(selector) === false ) { continue; } + selectorSet.delete(selector); + //log(`\tRemoving excepted generic filter ##${selector}`); + } + } + if ( selectorSet.size === 0 ) { return 0; } + const selectorLists = Array.from(selectorSet).sort().join(',\n'); + const originalScriptletMap = await loadAllSourceScriptlets(); + + let patchedScriptlet = originalScriptletMap.get('css-generichigh').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\$selectorList\$/, + selectorLists + ); + + writeFile( + `${scriptletDir}/generichigh/${assetDetails.id}.css`, + patchedScriptlet + ); + + log(`CSS-generic-high: ${selectorSet.size} plain CSS selectors`); + + return selectorSet.size; +} + +/******************************************************************************/ // This merges selectors which are used by the same hostnames @@ -522,14 +804,10 @@ const out = Array.from(contentMap).map(a => [ a[0], { a: a[1].a, - y: a[1].y ? Array.from(a[1].y).sort(hnSort) : undefined, + y: a[1].y ? Array.from(a[1].y) : undefined, n: a[1].n ? Array.from(a[1].n) : undefined, } - ]).sort((a, b) => { - const ha = Array.isArray(a[1].y) ? a[1].y[0] : '*'; - const hb = Array.isArray(b[1].y) ? b[1].y[0] : '*'; - return hnSort(ha, hb); - }); + ]); return out; } @@ -581,52 +859,13 @@ /******************************************************************************/ -function splitDomainAndEntity(mapin) { - const domainBased = new Map(); - const entityBased = new Map(); - for ( const [ selector, domainDetails ] of mapin ) { - domainBased.set(selector, domainDetails); - if ( domainDetails.rejected ) { continue; } - if ( Array.isArray(domainDetails.matches) === false ) { continue; } - const domainMatches = []; - const entityMatches = []; - for ( const hn of domainDetails.matches ) { - if ( hn.endsWith('.*') ) { - entityMatches.push(hn.slice(0, -2)); - } else { - domainMatches.push(hn); - } - } - if ( entityMatches.length === 0 ) { continue; } - if ( domainMatches.length !== 0 ) { - domainDetails.matches = domainMatches; - } else { - domainBased.delete(selector); - } - const entityDetails = { - matches: entityMatches, - }; - if ( Array.isArray(domainDetails.excludeMatches) ) { - entityDetails.excludeMatches = domainDetails.excludeMatches.slice(); - } - entityBased.set(selector, entityDetails); - } - return { domainBased, entityBased }; -} - -/******************************************************************************/ - async function processCosmeticFilters(assetDetails, mapin) { - if ( mapin === undefined ) { return; } + if ( mapin === undefined ) { return 0; } + if ( mapin.size === 0 ) { return 0; } - const { domainBased, entityBased } = splitDomainAndEntity(mapin); - const entityBasedEntries = groupHostnamesBySelectors( - groupSelectorsByHostnames(entityBased) - ); const domainBasedEntries = groupHostnamesBySelectors( - groupSelectorsByHostnames(domainBased) + groupSelectorsByHostnames(mapin) ); - // We do not want more than n CSS files per subscription, so we will // group multiple unrelated selectors in the same file, and distinct // css declarations will be injected programmatically according to the @@ -635,92 +874,74 @@ // The cosmetic filters will be injected programmatically as content // script and the decisions to activate the cosmetic filters will be // done at injection time according to the document's hostname. - const originalScriptletMap = await loadAllSourceScriptlets(); const generatedFiles = []; - for ( let i = 0; i < domainBasedEntries.length; i += MAX_COSMETIC_FILTERS_PER_FILE ) { - const slice = domainBasedEntries.slice(i, i + MAX_COSMETIC_FILTERS_PER_FILE); - const argsMap = slice.map(entry => [ - entry[0], - { - a: entry[1].a ? entry[1].a.join(',\n') : undefined, - n: entry[1].n - } - ]); - const hostnamesMap = new Map(); - for ( const [ id, details ] of slice ) { - if ( details.y === undefined ) { continue; } - scriptletHostnameToIdMap(details.y, id, hostnamesMap); - } - const argsList = argsMap2List(argsMap, hostnamesMap); - const patchedScriptlet = originalScriptletMap.get('css-specific') - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$argsList\$/m, - `${JSON.stringify(argsList, scriptletJsonReplacer)}` - ).replace( - /\bself\.\$hostnamesMap\$/m, - `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` - ); - const fid = toCSSSpecific(patchedScriptlet); - if ( globalPatchedScriptletsSet.has(fid) === false ) { - globalPatchedScriptletsSet.add(fid); - const fname = fnameFromFileId(fid); - writeFile(`${scriptletDir}/specific/${pathFromFileName(fname)}`, patchedScriptlet); - generatedFiles.push(fname); - } - for ( const entry of slice ) { - addScriptingAPIResources(assetDetails.id, entry[1].y, fid); + const argsMap = domainBasedEntries.map(entry => [ + entry[0], + { + a: entry[1].a ? entry[1].a.join(',\n') : undefined, + n: entry[1].n } + ]); + const hostnamesMap = new Map(); + for ( const [ id, details ] of domainBasedEntries ) { + if ( details.y === undefined ) { continue; } + scriptletHostnameToIdMap(details.y, id, hostnamesMap); + } + const argsList = argsMap2List(argsMap, hostnamesMap); + const entitiesMap = new Map(); + for ( const [ hn, details ] of hostnamesMap ) { + if ( hn.endsWith('.*') === false ) { continue; } + hostnamesMap.delete(hn); + entitiesMap.set(hn.slice(0, -2), details); } - // For entity-based entries, we generate a single scriptlet which will be - // injected only in Complete mode. - if ( entityBasedEntries.length !== 0 ) { - const argsMap = entityBasedEntries.map(entry => [ - entry[0], - { - a: entry[1].a ? entry[1].a.join(',') : undefined, - n: entry[1].n, + // Extract exceptions from argsList, simplify argsList entries + const exceptionsMap = new Map(); + for ( let i = 0; i < argsList.length; i++ ) { + const details = argsList[i]; + if ( details.n ) { + for ( const hn of details.n ) { + if ( exceptionsMap.has(hn) === false ) { + exceptionsMap.set(hn, []); + } + exceptionsMap.get(hn).push(i); } - ]); - const entitiesMap = new Map(); - for ( const [ id, details ] of entityBasedEntries ) { - if ( details.y === undefined ) { continue; } - scriptletHostnameToIdMap(details.y, id, entitiesMap); - } - const argsList = argsMap2List(argsMap, entitiesMap); - const patchedScriptlet = originalScriptletMap.get('css-specific.entity') - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$argsList\$/m, - `${JSON.stringify(argsList, scriptletJsonReplacer)}` - ).replace( - /\bself\.\$entitiesMap\$/m, - `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}` - ); - const fname = `${assetDetails.id}`; - writeFile(`${scriptletDir}/specific-entity/${fname}.js`, patchedScriptlet); - generatedFiles.push(fname); + } + argsList[i] = details.a; } + const originalScriptletMap = await loadAllSourceScriptlets(); + let patchedScriptlet = originalScriptletMap.get('css-specific').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$argsList\$/, + `${JSON.stringify(argsList, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$hostnamesMap\$/, + `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$entitiesMap\$/, + `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$exceptionsMap\$/, + `${JSON.stringify(exceptionsMap, scriptletJsonReplacer)}` + ); + writeFile(`${scriptletDir}/specific/${assetDetails.id}.js`, patchedScriptlet); + generatedFiles.push(`${assetDetails.id}`); + if ( generatedFiles.length !== 0 ) { - log(`CSS-specific domain-based: ${domainBased.size} distinct filters`); - log(`\tCombined into ${domainBasedEntries.length} distinct entries`); - log(`CSS-specific entity-based: ${entityBased.size} distinct filters`); - log(`\tCombined into ${entityBasedEntries.length} distinct entries`); - log(`CSS-specific injectable files: ${generatedFiles.length}`); - log(`\t${generatedFiles.join(', ')}`); + log(`CSS-specific: ${mapin.size} distinct filters`); + log(`\tCombined into ${hostnamesMap.size} distinct hostnames`); + log(`\tCombined into ${entitiesMap.size} distinct entities`); } - return { - domainBased: domainBasedEntries.length, - entityBased: entityBasedEntries.length, - }; + return hostnamesMap.size + entitiesMap.size; } /******************************************************************************/ @@ -734,7 +955,8 @@ mapin.forEach((details, jsonSelector) => { const selector = JSON.parse(jsonSelector); if ( selector.cssable !== true ) { return; } - declaratives.set(jsonSelector, details); + selector.cssable = undefined; + declaratives.set(JSON.stringify(selector), details); }); if ( declaratives.size === 0 ) { return 0; } @@ -754,42 +976,59 @@ if ( details.y === undefined ) { continue; } scriptletHostnameToIdMap(details.y, id, hostnamesMap); } - const argsList = argsMap2List(argsMap, hostnamesMap); - const originalScriptletMap = await loadAllSourceScriptlets(); - const patchedScriptlet = originalScriptletMap.get('css-declarative') - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$argsList\$/m, - `${JSON.stringify(argsList, scriptletJsonReplacer)}` - ).replace( - /\bself\.\$hostnamesMap\$/m, - `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` - ); - writeFile(`${scriptletDir}/declarative/${assetDetails.id}.js`, patchedScriptlet); + const entitiesMap = new Map(); + for ( const [ hn, details ] of hostnamesMap ) { + if ( hn.endsWith('.*') === false ) { continue; } + hostnamesMap.delete(hn); + entitiesMap.set(hn.slice(0, -2), details); + } - { - const hostnames = new Set(); - for ( const entry of contentArray ) { - if ( Array.isArray(entry[1].y) === false ) { continue; } - for ( const hn of entry[1].y ) { - hostnames.add(hn); + // Extract exceptions from argsList, simplify argsList entries + const exceptionsMap = new Map(); + for ( let i = 0; i < argsList.length; i++ ) { + const details = argsList[i]; + if ( details.n ) { + for ( const hn of details.n ) { + if ( exceptionsMap.has(hn) === false ) { + exceptionsMap.set(hn, []); + } + exceptionsMap.get(hn).push(i); } } - if ( hostnames.has('*') ) { - hostnames.clear(); - hostnames.add('*'); - } - declarativeDetails.set(assetDetails.id, Array.from(hostnames).sort()); + argsList[i] = details.a; } + const originalScriptletMap = await loadAllSourceScriptlets(); + let patchedScriptlet = originalScriptletMap.get('css-declarative').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$argsList\$/, + `${JSON.stringify(argsList, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$hostnamesMap\$/, + `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$entitiesMap\$/, + `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$exceptionsMap\$/, + `${JSON.stringify(exceptionsMap, scriptletJsonReplacer)}` + ); + writeFile(`${scriptletDir}/declarative/${assetDetails.id}.js`, patchedScriptlet); + if ( contentArray.length !== 0 ) { - log(`Declarative-related distinct filters: ${contentArray.length} distinct combined selectors`); + log(`CSS-declarative: ${declaratives.size} distinct filters`); + log(`\tCombined into ${hostnamesMap.size} distinct hostnames`); + log(`\tCombined into ${entitiesMap.size} distinct entities`); } - return contentArray.length; + return hostnamesMap.size + entitiesMap.size; } /******************************************************************************/ @@ -823,304 +1062,82 @@ if ( details.y === undefined ) { continue; } scriptletHostnameToIdMap(details.y, id, hostnamesMap); } - const argsList = argsMap2List(argsMap, hostnamesMap); - const originalScriptletMap = await loadAllSourceScriptlets(); - const patchedScriptlet = originalScriptletMap.get('css-procedural') - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$argsList\$/m, - `${JSON.stringify(argsList, scriptletJsonReplacer)}` - ).replace( - /\bself\.\$hostnamesMap\$/m, - `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` - ); - writeFile(`${scriptletDir}/procedural/${assetDetails.id}.js`, patchedScriptlet); - - { - const hostnames = new Set(); - for ( const entry of contentArray ) { - if ( Array.isArray(entry[1].y) === false ) { continue; } - for ( const hn of entry[1].y ) { - hostnames.add(hn); - } - } - if ( hostnames.has('*') ) { - hostnames.clear(); - hostnames.add('*'); - } - proceduralDetails.set(assetDetails.id, Array.from(hostnames).sort()); - } - - if ( contentArray.length !== 0 ) { - log(`Procedural-related distinct filters: ${contentArray.length} distinct combined selectors`); + const entitiesMap = new Map(); + for ( const [ hn, details ] of hostnamesMap ) { + if ( hn.endsWith('.*') === false ) { continue; } + hostnamesMap.delete(hn); + entitiesMap.set(hn.slice(0, -2), details); } - return contentArray.length; -} - -/******************************************************************************/ - -async function processScriptletFilters(assetDetails, mapin) { - if ( mapin === undefined ) { return; } - - const { domainBased, entityBased } = splitDomainAndEntity(mapin); - - // Load all available scriptlets into a key-val map, where the key is the - // scriptlet token, and val is the whole content of the file. - const originalScriptletMap = await loadAllSourceScriptlets(); - - let domainBasedTokens; - if ( domainBased.size !== 0 ) { - domainBasedTokens = await processDomainScriptletFilters(assetDetails, domainBased, originalScriptletMap); - } - let entityBasedTokens; - if ( entityBased.size !== 0 ) { - entityBasedTokens = await processEntityScriptletFilters(assetDetails, entityBased, originalScriptletMap); - } - - return { domainBasedTokens, entityBasedTokens }; -} - -/******************************************************************************/ - -const parseScriptletArguments = raw => { - const out = []; - let s = raw; - let len = s.length; - let beg = 0, pos = 0; - let i = 1; - while ( beg < len ) { - pos = s.indexOf(',', pos); - // Escaped comma? If so, skip. - if ( pos > 0 && s.charCodeAt(pos - 1) === 0x5C /* '\\' */ ) { - s = s.slice(0, pos - 1) + s.slice(pos); - len -= 1; - continue; - } - if ( pos === -1 ) { pos = len; } - out.push(s.slice(beg, pos).trim()); - beg = pos = pos + 1; - i++; - } - return out; -}; - -const parseScriptletFilter = (raw, scriptletMap, tokenSuffix = '') => { - const filter = raw.slice(4, -1); - const end = filter.length; - let pos = filter.indexOf(','); - if ( pos === -1 ) { pos = end; } - const parts = filter.trim().split(',').map(s => s.trim()); - const token = scriptletDealiasingMap.get(parts[0]) || ''; - if ( token === '' ) { return; } - if ( scriptletMap.has(`${token}${tokenSuffix}`) === false ) { return; } - return { - token, - args: parseScriptletArguments(parts.slice(1).join(',').trim()), - }; -}; - -/******************************************************************************/ - -async function processDomainScriptletFilters(assetDetails, domainBased, originalScriptletMap) { - // For each instance of distinct scriptlet, we will collect distinct - // instances of arguments, and for each distinct set of argument, we - // will collect the set of hostnames for which the scriptlet/args is meant - // to execute. This will allow us a single content script file and the - // scriptlets execution will depend on hostname testing against the - // URL of the document at scriptlet execution time. In the end, we - // should have no more generated content script per subscription than the - // number of distinct source scriptlets. - const scriptletDetails = new Map(); - const rejectedFilters = []; - for ( const [ rawFilter, entry ] of domainBased ) { - if ( entry.rejected ) { - rejectedFilters.push(rawFilter); - continue; - } - const normalized = parseScriptletFilter(rawFilter, originalScriptletMap); - if ( normalized === undefined ) { - log(`Discarded unsupported scriptlet filter: ${rawFilter}`, true); - continue; - } - let argsDetails = scriptletDetails.get(normalized.token); - if ( argsDetails === undefined ) { - argsDetails = new Map(); - scriptletDetails.set(normalized.token, argsDetails); - } - const argsHash = JSON.stringify(normalized.args); - let hostnamesDetails = argsDetails.get(argsHash); - if ( hostnamesDetails === undefined ) { - hostnamesDetails = { - a: normalized.args, - y: new Set(), - n: new Set(), - }; - argsDetails.set(argsHash, hostnamesDetails); - } - if ( entry.matches ) { - for ( const hn of entry.matches ) { - hostnamesDetails.y.add(hn); - } - } - if ( entry.excludeMatches ) { - for ( const hn of entry.excludeMatches ) { - hostnamesDetails.n.add(hn); + // Extract exceptions from argsList, simplify argsList entries + const exceptionsMap = new Map(); + for ( let i = 0; i < argsList.length; i++ ) { + const details = argsList[i]; + if ( details.n ) { + for ( const hn of details.n ) { + if ( exceptionsMap.has(hn) === false ) { + exceptionsMap.set(hn, []); + } + exceptionsMap.get(hn).push(i); } } + argsList[i] = details.a; } - log(`Rejected scriptlet filters: ${rejectedFilters.length}`); - log(rejectedFilters.map(line => `\t${line}`).join('\n'), true); - - const generatedFiles = []; - const tokens = []; - - for ( const [ token, argsDetails ] of scriptletDetails ) { - const argsMap = Array.from(argsDetails).map(entry => [ - uidint32(entry[0]), - { a: entry[1].a, n: entry[1].n } - ]); - const hostnamesMap = new Map(); - for ( const [ argsHash, details ] of argsDetails ) { - scriptletHostnameToIdMap(details.y, uidint32(argsHash), hostnamesMap); - } - - const argsList = argsMap2List(argsMap, hostnamesMap); - const patchedScriptlet = originalScriptletMap.get(token) - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$argsList\$/m, - `${JSON.stringify(argsList, scriptletJsonReplacer)}` - ).replace( - /\bself\.\$hostnamesMap\$/m, - `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` - ); - const fname = `${assetDetails.id}.${token}.js`; - const fpath = `${scriptletDir}/scriptlet/${fname}`; - writeFile(fpath, patchedScriptlet); - generatedFiles.push(fname); - tokens.push(token); - - const hostnameMatches = new Set(hostnamesMap.keys()); - if ( hostnameMatches.has('*') ) { - hostnameMatches.clear(); - hostnameMatches.add('*'); - } - let rulesetScriptlets = scriptletStats.get(assetDetails.id); - if ( rulesetScriptlets === undefined ) { - scriptletStats.set(assetDetails.id, rulesetScriptlets = []); - } - rulesetScriptlets.push([ token, Array.from(hostnameMatches).sort() ]); - } + const originalScriptletMap = await loadAllSourceScriptlets(); + let patchedScriptlet = originalScriptletMap.get('css-procedural').replace( + '$rulesetId$', + assetDetails.id + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$argsList\$/, + `${JSON.stringify(argsList, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$hostnamesMap\$/, + `${JSON.stringify(hostnamesMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$entitiesMap\$/, + `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}` + ); + patchedScriptlet = safeReplace(patchedScriptlet, + /\bself\.\$exceptionsMap\$/, + `${JSON.stringify(exceptionsMap, scriptletJsonReplacer)}` + ); + writeFile(`${scriptletDir}/procedural/${assetDetails.id}.js`, patchedScriptlet); - if ( generatedFiles.length !== 0 ) { - const scriptletFilterCount = Array.from(scriptletDetails.values()) - .reduce((a, b) => a + b.size, 0); - log(`Scriptlet-related distinct filters: ${scriptletFilterCount}`); - log(`Scriptlet-related injectable files: ${generatedFiles.length}`); - log(`\t${generatedFiles.join(', ')}`); + if ( contentArray.length !== 0 ) { + log(`Procedural-related distinct filters: ${procedurals.size} distinct combined selectors`); + log(`\tCombined into ${hostnamesMap.size} distinct hostnames`); + log(`\tCombined into ${entitiesMap.size} distinct entities`); } - return tokens; + return hostnamesMap.size + entitiesMap.size; } /******************************************************************************/ -async function processEntityScriptletFilters(assetDetails, entityBased, originalScriptletMap) { - // For each instance of distinct scriptlet, we will collect distinct - // instances of arguments, and for each distinct set of argument, we - // will collect the set of hostnames for which the scriptlet/args is meant - // to execute. This will allow us a single content script file and the - // scriptlets execution will depend on hostname testing against the - // URL of the document at scriptlet execution time. In the end, we - // should have no more generated content script per subscription than the - // number of distinct source scriptlets. - const scriptletMap = new Map(); - const rejectedFilters = []; - for ( const [ rawFilter, entry ] of entityBased ) { - if ( entry.rejected ) { - rejectedFilters.push(rawFilter); - continue; - } - const normalized = parseScriptletFilter(rawFilter, originalScriptletMap, '.entity'); - if ( normalized === undefined ) { - log(`Discarded unsupported scriptlet filter: ${rawFilter}`, true); - continue; - } - let argsDetails = scriptletMap.get(normalized.token); - if ( argsDetails === undefined ) { - argsDetails = new Map(); - scriptletMap.set(normalized.token, argsDetails); - } - const argsHash = JSON.stringify(normalized.args); - let scriptletDetails = argsDetails.get(argsHash); - if ( scriptletDetails === undefined ) { - scriptletDetails = { - a: normalized.args, - y: new Set(), - n: new Set(), - }; - argsDetails.set(argsHash, scriptletDetails); - } - if ( entry.matches ) { - for ( const entity of entry.matches ) { - scriptletDetails.y.add(entity); - } - } - if ( entry.excludeMatches ) { - for ( const hn of entry.excludeMatches ) { - scriptletDetails.n.add(hn); - } - } - } - - log(`Rejected scriptlet filters: ${rejectedFilters.length}`); - log(rejectedFilters.map(line => `\t${line}`).join('\n'), true); +async function processScriptletFilters(assetDetails, mapin) { + if ( mapin === undefined ) { return 0; } + if ( mapin.size === 0 ) { return 0; } - const generatedFiles = []; - const tokens = []; + makeScriptlet.init(); - for ( const [ token, argsDetails ] of scriptletMap ) { - const argsMap = Array.from(argsDetails).map(entry => [ - uidint32(entry[0]), - { a: entry[1].a, n: entry[1].n } - ]); - const entitiesMap = new Map(); - for ( const [ argsHash, details ] of argsDetails ) { - scriptletHostnameToIdMap(details.y, uidint32(argsHash), entitiesMap); - } - - const argsList = argsMap2List(argsMap, entitiesMap); - const patchedScriptlet = originalScriptletMap.get(`${token}.entity`) - .replace( - '$rulesetId$', - assetDetails.id - ).replace( - /\bself\.\$argsList\$/m, - `${JSON.stringify(argsList, scriptletJsonReplacer)}` - ).replace( - /\bself\.\$entitiesMap\$/m, - `${JSON.stringify(entitiesMap, scriptletJsonReplacer)}` - ); - const fname = `${assetDetails.id}.${token}.js`; - const fpath = `${scriptletDir}/scriptlet-entity/${fname}`; - writeFile(fpath, patchedScriptlet); - generatedFiles.push(fname); - tokens.push(token); + for ( const details of mapin.values() ) { + makeScriptlet.compile(details); } - - if ( generatedFiles.length !== 0 ) { - log(`Scriptlet-related entity-based injectable files: ${generatedFiles.length}`); - log(`\t${generatedFiles.join(', ')}`); + const stats = await makeScriptlet.commit( + assetDetails.id, + `${scriptletDir}/scriptlet`, + writeFile + ); + if ( stats.length !== 0 ) { + scriptletStats.set(assetDetails.id, stats); } - - return tokens; + makeScriptlet.reset(); + return stats.length; } /******************************************************************************/ @@ -1129,12 +1146,25 @@ log('============================'); log(`Listset for '${assetDetails.id}':`); - if ( assetDetails.text === undefined ) { - const text = await fetchAsset(assetDetails); - if ( text === '' ) { return; } + if ( assetDetails.text === undefined && assetDetails.urls.length !== 0 ) { + const text = await fetchList(assetDetails); assetDetails.text = text; + } else { + assetDetails.text = ''; } + if ( Array.isArray(assetDetails.filters) && assetDetails.filters.length ) { + const extra = [ + `!#trusted on ${secret}`, + ...assetDetails.filters, + `!#trusted off ${secret}`, + assetDetails.text, + ]; + assetDetails.text = extra.join('\n').trim(); + } + + if ( assetDetails.text === '' ) { return; } + const extensionPaths = []; for ( const [ fname, details ] of redirectResourcesMap ) { const path = `/web_accessible_resources/${fname}`; @@ -1152,7 +1182,7 @@ const results = await dnrRulesetFromRawLists( [ { name: assetDetails.id, text: assetDetails.text } ], - { env, extensionPaths } + { env, extensionPaths, secret } ); const netStats = await processNetworkFilters( @@ -1175,13 +1205,6 @@ continue; } const parsed = JSON.parse(selector); - const matches = - details.matches.filter(hn => hn.endsWith('.*') === false); - if ( matches.length === 0 ) { - rejectedCosmetic.push(`Entity-based filter not supported: ${parsed.raw}`); - continue; - } - details.matches = matches; parsed.raw = undefined; proceduralCosmetic.set(JSON.stringify(parsed), details); } @@ -1191,10 +1214,25 @@ log(rejectedCosmetic.map(line => `\t${line}`).join('\n'), true); } + if ( + Array.isArray(results.network.generichideExclusions) && + results.network.generichideExclusions.length !== 0 + ) { + genericDetails.set( + assetDetails.id, + results.network.generichideExclusions.filter(hn => hn.endsWith('.*') === false).sort() + ); + } + const genericCosmeticStats = await processGenericCosmeticFilters( assetDetails, results.genericCosmetic, - results.network.generichideExclusions.filter(hn => hn.endsWith('.*') === false) + results.genericCosmeticExceptions + ); + const genericHighCosmeticStats = await processGenericHighCosmeticFilters( + assetDetails, + results.genericHighCosmetic, + results.genericCosmeticExceptions ); const specificCosmeticStats = await processCosmeticFilters( assetDetails, @@ -1216,8 +1254,11 @@ rulesetDetails.push({ id: assetDetails.id, name: assetDetails.name, + group: assetDetails.group, + parent: assetDetails.parent, enabled: assetDetails.enabled, lang: assetDetails.lang, + tags: assetDetails.tags, homeURL: assetDetails.homeURL, filters: { total: results.network.filterCount, @@ -1230,12 +1271,15 @@ regex: netStats.regex, removeparam: netStats.removeparam, redirect: netStats.redirect, - csp: netStats.csp, + modifyHeaders: netStats.modifyHeaders, + strictblock: netStats.strictblock, + urlskip: netStats.urlskip, discarded: netStats.discarded, rejected: netStats.rejected, }, css: { generic: genericCosmeticStats, + generichigh: genericHighCosmeticStats, specific: specificCosmeticStats, declarative: declarativeStats, procedural: proceduralStats, @@ -1254,53 +1298,167 @@ async function main() { - // Get manifest content - const manifest = await fs.readFile( - `${outputDir}/manifest.json`, - { encoding: 'utf8' } - ).then(text => - JSON.parse(text) - ); - - // Create unique version number according to build time - let version = manifest.version; + let version = ''; { const now = new Date(); - const yearPart = now.getUTCFullYear() - 2000; - const monthPart = (now.getUTCMonth() + 1) * 1000; - const dayPart = now.getUTCDate() * 10; - const hourPart = Math.floor(now.getUTCHours() / 3) + 1; - version += `.${yearPart}.${monthPart + dayPart + hourPart}`; + const yearPart = now.getUTCFullYear(); + const monthPart = now.getUTCMonth() + 1; + const dayPart = now.getUTCDate(); + const hourPart = Math.floor(now.getUTCHours()); + const minutePart = Math.floor(now.getUTCMinutes()); + version = `${yearPart}.${monthPart}.${dayPart}.${hourPart * 60 + minutePart}`; } log(`Version: ${version}`); // Get assets.json content const assets = await fs.readFile( - `./assets.json`, + `./assets.dev.json`, { encoding: 'utf8' } ).then(text => JSON.parse(text) ); // Assemble all default lists as the default ruleset - const contentURLs = [ - 'https://ublockorigin.github.io/uAssets/filters/filters.txt', - 'https://ublockorigin.github.io/uAssets/filters/badware.txt', - 'https://ublockorigin.github.io/uAssets/filters/privacy.txt', - 'https://ublockorigin.github.io/uAssets/filters/resource-abuse.txt', - 'https://ublockorigin.github.io/uAssets/filters/unbreak.txt', - 'https://ublockorigin.github.io/uAssets/filters/quick-fixes.txt', - 'https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt', - 'https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt', - 'https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt', - 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext', - ]; await rulesetFromURLs({ id: 'default', name: 'Ads, trackers, miners, and more' , enabled: true, - urls: contentURLs, + urls: [ + 'https://ublockorigin.github.io/uAssets/filters/filters.min.txt', + 'https://ublockorigin.github.io/uAssets/filters/privacy.min.txt', + 'https://ublockorigin.github.io/uAssets/filters/unbreak.min.txt', + 'https://ublockorigin.github.io/uAssets/filters/quick-fixes.min.txt', + 'https://ublockorigin.github.io/uAssets/filters/ubol-filters.txt', + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist.txt', + 'https://ublockorigin.github.io/uAssets/thirdparties/easyprivacy.txt', + 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext', + ], + dnrURL: 'https://ublockorigin.github.io/uAssets/dnr/default.json', homeURL: 'https://github.com/uBlockOrigin/uAssets', + filters: [ + ], + }); + + await rulesetFromURLs({ + id: 'badware', + name: 'Badware risks' , + group: 'malware', + enabled: true, + urls: [ + 'https://ublockorigin.github.io/uAssets/filters/badware.min.txt', + ], + homeURL: 'https://github.com/uBlockOrigin/uAssets', + filters: [ + ], + }); + + // Handpicked rulesets from assets.json + const handpicked = [ + 'block-lan', + 'dpollock-0', + 'adguard-spyware-url', + ]; + for ( const id of handpicked ) { + const asset = assets[id]; + if ( asset.content !== 'filters' ) { continue; } + const contentURL = Array.isArray(asset.contentURL) + ? asset.contentURL[0] + : asset.contentURL; + await rulesetFromURLs({ + id: id.toLowerCase(), + name: asset.title, + enabled: false, + urls: [ contentURL ], + homeURL: asset.supportURL, + }); + } + + // Handpicked annoyance rulesets from assets.json + await rulesetFromURLs({ + id: 'annoyances-cookies', + name: 'EasyList/uBO – Cookie Notices', + group: 'annoyances', + enabled: false, + urls: [ + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-cookies.txt', + 'https://ublockorigin.github.io/uAssets/filters/annoyances-cookies.txt', + ], + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', + }); + await rulesetFromURLs({ + id: 'annoyances-overlays', + name: 'EasyList/uBO – Overlay Notices', + group: 'annoyances', + enabled: false, + urls: [ + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-newsletters.txt', + 'https://ublockorigin.github.io/uAssets/filters/annoyances-others.txt', + ], + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', + }); + await rulesetFromURLs({ + id: 'annoyances-social', + name: 'EasyList – Social Widgets', + group: 'annoyances', + enabled: false, + urls: [ + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-social.txt', + ], + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', + }); + await rulesetFromURLs({ + id: 'annoyances-widgets', + name: 'EasyList – Chat Widgets', + group: 'annoyances', + enabled: false, + urls: [ + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-chat.txt', + ], + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', + }); + await rulesetFromURLs({ + id: 'annoyances-others', + name: 'EasyList – Other Annoyances', + group: 'annoyances', + enabled: false, + urls: [ + 'https://ublockorigin.github.io/uAssets/thirdparties/easylist-annoyances.txt' + ], + homeURL: 'https://github.com/easylist/easylist#fanboy-lists', + }); + + // Handpicked rulesets from abroad + await rulesetFromURLs({ + id: 'urlhaus-full', + name: 'Malicious URL Blocklist', + group: 'malware', + enabled: true, + urls: [ + 'https://malware-filter.gitlab.io/malware-filter/urlhaus-filter-hosts.txt', + ], + filters: [ + ], + homeURL: 'https://gitlab.com/malware-filter/urlhaus-filter', + }); + await rulesetFromURLs({ + id: 'openphish-domains', + name: 'OpenPhish Domain Blocklist', + group: 'malware', + enabled: true, + urls: [ + 'https://raw.githubusercontent.com/stephenhawk8054/openphish-adblock/refs/heads/main/filters_init_domains.txt', + ], + filters: [ + ], + homeURL: 'https://github.com/stephenhawk8054/openphish-adblock', + }); + + await rulesetFromURLs({ + id: 'stevenblack-hosts', + name: 'Steven Black’s Unified Hosts (adware + malware)', + enabled: false, + urls: [ 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts' ], + homeURL: 'https://github.com/StevenBlack/hosts#readme', }); // Regional rulesets @@ -1313,11 +1471,14 @@ for ( const [ id, asset ] of Object.entries(assets) ) { if ( asset.content !== 'filters' ) { continue; } if ( asset.off !== true ) { continue; } - if ( typeof asset.lang !== 'string' ) { continue; } + if ( asset.group !== 'regions' ) { continue; } if ( excludedLists.includes(id) ) { continue; } - let ids = langToListsMap.get(asset.lang); + // Not all "regions" lists have a set language + const bundleId = asset.lang || + createHash('sha256').update(randomBytes(16)).digest('hex').slice(0,16); + let ids = langToListsMap.get(bundleId); if ( ids === undefined ) { - langToListsMap.set(asset.lang, ids = []); + langToListsMap.set(bundleId, ids = []); } ids.push(id); } @@ -1332,41 +1493,28 @@ } const id = ids[0]; const asset = assets[id]; - await rulesetFromURLs({ + const rulesetDetails = { id: id.toLowerCase(), + group: 'regions', + parent: asset.parent, lang: asset.lang, name: asset.title, + tags: asset.tags, enabled: false, urls, homeURL: asset.supportURL, - }); - } - - // Handpicked rulesets from assets.json - const handpicked = [ 'block-lan', 'dpollock-0', 'adguard-spyware-url' ]; - for ( const id of handpicked ) { - const asset = assets[id]; - if ( asset.content !== 'filters' ) { continue; } - - const contentURL = Array.isArray(asset.contentURL) - ? asset.contentURL[0] - : asset.contentURL; - await rulesetFromURLs({ - id: id.toLowerCase(), - name: asset.title, - enabled: false, - urls: [ contentURL ], - homeURL: asset.supportURL, - }); + }; + await rulesetFromURLs(rulesetDetails); } - // Handpicked rulesets from abroad await rulesetFromURLs({ - id: 'stevenblack-hosts', - name: 'Steven Black\'s hosts file', + id: 'est-0', + group: 'regions', + lang: 'et', + name: '🇪🇪ee: Eesti saitidele kohandatud filter', enabled: false, - urls: [ 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts' ], - homeURL: 'https://github.com/StevenBlack/hosts#readme', + urls: [ 'https://ubol-et.adblock.ee/list.txt' ], + homeURL: 'https://github.com/sander85/uBOL-et', }); writeFile( @@ -1374,29 +1522,6 @@ `${JSON.stringify(rulesetDetails, null, 1)}\n` ); - // We sort the hostnames for convenience/performance in the extension's - // script manager -- the scripting API does a sort() internally. - for ( const [ rulesetId, hostnamesToFidsMap ] of specificDetails ) { - specificDetails.set( - rulesetId, - Array.from(hostnamesToFidsMap).sort() - ); - } - writeFile( - `${rulesetDir}/specific-details.json`, - `${JSON.stringify(specificDetails, jsonSetMapReplacer)}\n` - ); - - writeFile( - `${rulesetDir}/declarative-details.json`, - `${JSON.stringify(declarativeDetails, jsonSetMapReplacer, 1)}\n` - ); - - writeFile( - `${rulesetDir}/procedural-details.json`, - `${JSON.stringify(proceduralDetails, jsonSetMapReplacer, 1)}\n` - ); - writeFile( `${rulesetDir}/scriptlet-details.json`, `${JSON.stringify(scriptletStats, jsonSetMapReplacer, 1)}\n` @@ -1415,21 +1540,28 @@ await Promise.all(writeOps); // Patch manifest + // Get manifest content + const manifest = await fs.readFile( + `${outputDir}/manifest.json`, + { encoding: 'utf8' } + ).then(text => + JSON.parse(text) + ); // Patch declarative_net_request key manifest.declarative_net_request = { rule_resources: ruleResources }; // Patch web_accessible_resources key - manifest.web_accessible_resources = [{ + manifest.web_accessible_resources = manifest.web_accessible_resources || []; + const web_accessible_resources = { resources: Array.from(requiredRedirectResources).map(path => `/${path}`), matches: [ '' ], - use_dynamic_url: true, - }]; - // Patch version key - const now = new Date(); - const yearPart = now.getUTCFullYear() - 2000; - const monthPart = (now.getUTCMonth() + 1) * 1000; - const dayPart = now.getUTCDate() * 10; - const hourPart = Math.floor(now.getUTCHours() / 3) + 1; - manifest.version = manifest.version + `.${yearPart}.${monthPart + dayPart + hourPart}`; + }; + if ( platform === 'chromium' ) { + web_accessible_resources.use_dynamic_url = true; + } + manifest.web_accessible_resources.push(web_accessible_resources); + + // Patch manifest version property + manifest.version = version; // Commit changes await fs.writeFile( `${outputDir}/manifest.json`, @@ -1439,7 +1571,6 @@ // Log results const logContent = stdOutput.join('\n') + '\n'; await fs.writeFile(`${outputDir}/log.txt`, logContent); - await fs.writeFile(`${cacheDir}/log.txt`, logContent); } main(); diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/make-scriptlets.js ublock-origin-1.62.0+dfsg/platform/mv3/make-scriptlets.js --- ublock-origin-1.46.0+dfsg/platform/mv3/make-scriptlets.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/make-scriptlets.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,189 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2017-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +import { builtinScriptlets } from './js/resources/scriptlets.js'; +import fs from 'fs/promises'; +import { safeReplace } from './safe-replace.js'; + +/******************************************************************************/ + +const resourceDetails = new Map(); +const resourceAliases = new Map(); +const scriptletFiles = new Map(); + +/******************************************************************************/ + +function createScriptletCoreCode(scriptletToken) { + const details = resourceDetails.get(scriptletToken); + const components = new Map([ [ scriptletToken, details.code ] ]); + const dependencies = details.dependencies && details.dependencies.slice() || []; + while ( dependencies.length !== 0 ) { + const token = dependencies.shift(); + if ( components.has(token) ) { continue; } + const details = resourceDetails.get(token); + if ( details === undefined ) { continue; } + components.set(token, details.code); + if ( Array.isArray(details.dependencies) === false ) { continue; } + dependencies.push(...details.dependencies); + } + return Array.from(components.values()).join('\n\n'); +} + +/******************************************************************************/ + +export function init() { + for ( const scriptlet of builtinScriptlets ) { + const { name, aliases, fn } = scriptlet; + const entry = { + name: fn.name, + code: fn.toString(), + world: scriptlet.world || 'MAIN', + dependencies: scriptlet.dependencies, + requiresTrust: scriptlet.requiresTrust === true, + }; + resourceDetails.set(name, entry); + if ( Array.isArray(aliases) === false ) { continue; } + for ( const alias of aliases ) { + resourceAliases.set(alias, name); + } + } +} + +/******************************************************************************/ + +export function reset() { + scriptletFiles.clear(); +} + +/******************************************************************************/ + +export function compile(details) { + if ( details.args[0].endsWith('.js') === false ) { + details.args[0] += '.js'; + } + if ( resourceAliases.has(details.args[0]) ) { + details.args[0] = resourceAliases.get(details.args[0]); + } + const scriptletToken = details.args[0]; + const resourceEntry = resourceDetails.get(scriptletToken); + if ( resourceEntry === undefined ) { return; } + if ( resourceEntry.requiresTrust && details.trustedSource !== true ) { + console.log(`Rejecting ${scriptletToken}: source is not trusted`); + return; + } + if ( scriptletFiles.has(scriptletToken) === false ) { + scriptletFiles.set(scriptletToken, { + name: resourceEntry.name, + code: createScriptletCoreCode(scriptletToken), + world: resourceEntry.world, + args: new Map(), + hostnames: new Map(), + entities: new Map(), + exceptions: new Map(), + matches: new Set(), + }); + } + const scriptletDetails = scriptletFiles.get(scriptletToken); + const argsToken = JSON.stringify(details.args.slice(1)); + if ( scriptletDetails.args.has(argsToken) === false ) { + scriptletDetails.args.set(argsToken, scriptletDetails.args.size); + } + const iArgs = scriptletDetails.args.get(argsToken); + if ( details.matches ) { + for ( const hn of details.matches ) { + if ( hn.endsWith('.*') ) { + scriptletDetails.matches.clear(); + scriptletDetails.matches.add('*'); + const entity = hn.slice(0, -2); + if ( scriptletDetails.entities.has(entity) === false ) { + scriptletDetails.entities.set(entity, new Set()); + } + scriptletDetails.entities.get(entity).add(iArgs); + } else { + if ( scriptletDetails.matches.has('*') === false ) { + scriptletDetails.matches.add(hn); + } + if ( scriptletDetails.hostnames.has(hn) === false ) { + scriptletDetails.hostnames.set(hn, new Set()); + } + scriptletDetails.hostnames.get(hn).add(iArgs); + } + } + } else { + scriptletDetails.matches.add('*'); + } + if ( details.excludeMatches ) { + for ( const hn of details.excludeMatches ) { + if ( scriptletDetails.exceptions.has(hn) === false ) { + scriptletDetails.exceptions.set(hn, []); + } + scriptletDetails.exceptions.get(hn).push(iArgs); + } + } +} + +/******************************************************************************/ + +export async function commit(rulesetId, path, writeFn) { + const scriptletTemplate = await fs.readFile( + './scriptlets/scriptlet.template.js', + { encoding: 'utf8' } + ); + const patchHnMap = hnmap => { + const out = Array.from(hnmap); + out.forEach(a => { + const values = Array.from(a[1]); + a[1] = values.length === 1 ? values[0] : values; + }); + return out; + }; + const scriptletStats = []; + for ( const [ name, details ] of scriptletFiles ) { + let content = safeReplace(scriptletTemplate, + 'function $scriptletName$(){}', + details.code + ); + content = safeReplace(content, /\$rulesetId\$/, rulesetId, 0); + content = safeReplace(content, /\$scriptletName\$/, details.name, 0); + content = safeReplace(content, '$world$', details.world); + content = safeReplace(content, + 'self.$argsList$', + JSON.stringify(Array.from(details.args.keys()).map(a => JSON.parse(a))) + ); + content = safeReplace(content, + 'self.$hostnamesMap$', + JSON.stringify(patchHnMap(details.hostnames)) + ); + content = safeReplace(content, + 'self.$entitiesMap$', + JSON.stringify(patchHnMap(details.entities)) + ); + content = safeReplace(content, + 'self.$exceptionsMap$', + JSON.stringify(Array.from(details.exceptions)) + ); + writeFn(`${path}/${rulesetId}.${name}`, content); + scriptletStats.push([ name.slice(0, -3), Array.from(details.matches).sort() ]); + } + return scriptletStats; +} + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/safe-replace.js ublock-origin-1.62.0+dfsg/platform/mv3/safe-replace.js --- ublock-origin-1.46.0+dfsg/platform/mv3/safe-replace.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/safe-replace.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,41 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2017-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ + +export function safeReplace(text, pattern, replacement, count = 1) { + const rePattern = typeof pattern === 'string' + ? new RegExp(pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')) + : pattern; + let out = text; + for (;;) { + const match = rePattern.exec(out); + if ( match === null ) { break; } + out = out.slice(0, match.index) + + replacement + + out.slice(match.index + match[0].length); + count -= 1; + if ( count === 0 ) { break; } + } + return out; +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/salvage-ruleids.mjs ublock-origin-1.62.0+dfsg/platform/mv3/salvage-ruleids.mjs --- ublock-origin-1.46.0+dfsg/platform/mv3/salvage-ruleids.mjs 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/salvage-ruleids.mjs 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,117 @@ +/******************************************************************************* + + uBlock Origin - a comprehensive, efficient content blocker + Copyright (C) 2024-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/******************************************************************************/ + +import fs from 'fs/promises'; +import process from 'process'; + +/******************************************************************************/ + +const commandLineArgs = (( ) => { + const args = new Map(); + let name, value; + for ( const arg of process.argv.slice(2) ) { + const pos = arg.indexOf('='); + if ( pos === -1 ) { + name = arg; + value = ''; + } else { + name = arg.slice(0, pos); + value = arg.slice(pos+1); + } + args.set(name, value); + } + return args; +})(); + +const beforeDir = commandLineArgs.get('before') || ''; +const afterDir = commandLineArgs.get('after') || ''; + +if ( beforeDir === '' || afterDir === '' ) { + process.exit(0); +} + +/******************************************************************************/ + +async function main() { + const folders = [ + 'main', + 'modify-headers', + 'redirect', + 'regex', + 'removeparam', + ]; + const writePromises = []; + for ( const folder of folders ) { + const afterFiles = await fs.readdir(`${afterDir}/rulesets/${folder}`); + for ( const file of afterFiles ) { + let raw = await fs.readFile(`${beforeDir}/rulesets/${folder}/${file}`, 'utf-8').catch(( ) => ''); + let beforeRules; + try { beforeRules = JSON.parse(raw); } catch(_) { } + if ( Array.isArray(beforeRules) === false ) { continue; } + raw = await fs.readFile(`${afterDir}/rulesets/${folder}/${file}`, 'utf-8').catch(( ) => ''); + let afterRules; + try { afterRules = JSON.parse(raw); } catch(_) { } + if ( Array.isArray(afterRules) === false ) { continue; } + const beforeMap = new Map(beforeRules.map(a => { + const id = a.id; + a.id = 0; + return [ JSON.stringify(a), id ]; + })); + const reusedIds = new Set(); + for ( const afterRule of afterRules ) { + afterRule.id = 0; + const key = JSON.stringify(afterRule); + const beforeId = beforeMap.get(key); + if ( beforeId === undefined ) { continue; } + if ( reusedIds.has(beforeId) ) { continue; } + afterRule.id = beforeId; + reusedIds.add(beforeId); + } + // Assign new ids to unmatched rules + let ruleIdGenerator = 1; + for ( const afterRule of afterRules ) { + if ( afterRule.id !== 0 ) { continue; } + while ( reusedIds.has(ruleIdGenerator) ) { ruleIdGenerator += 1; } + afterRule.id = ruleIdGenerator++; + } + afterRules.sort((a, b) => a.id - b.id); + const indent = afterRules.length > 10 ? undefined : 1; + const lines = []; + for ( const afterRule of afterRules ) { + lines.push(JSON.stringify(afterRule, null, indent)); + } + const path = `${afterDir}/rulesets/${folder}/${file}`; + console.log(` Salvaged ${reusedIds.size} ids in ${folder}/${file}`); + writePromises.push( + fs.writeFile(path, `[\n${lines.join(',\n')}\n]\n`) + ); + } + } + await Promise.all(writePromises); +} + +main(); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-current-script.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-current-script.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-current-script.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-current-script.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,181 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name abort-current-script.entity -/// alias acs.entity -/// alias abort-current-inline-script.entity -/// alias acis.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_abortCurrentScriptEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -// Issues to mind before changing anything: -// https://github.com/uBlockOrigin/uBlock-issues/issues/2154 - -const scriptlet = ( - target = '', - needle = '', - context = '' -) => { - if ( target === '' ) { return; } - const reRegexEscape = /[.*+?^${}()|[\]\\]/g; - const reNeedle = (( ) => { - if ( needle === '' ) { return /^/; } - if ( /^\/.+\/$/.test(needle) ) { - return new RegExp(needle.slice(1,-1)); - } - return new RegExp(needle.replace(reRegexEscape, '\\$&')); - })(); - const reContext = (( ) => { - if ( context === '' ) { return; } - if ( /^\/.+\/$/.test(context) ) { - return new RegExp(context.slice(1,-1)); - } - return new RegExp(context.replace(reRegexEscape, '\\$&')); - })(); - const chain = target.split('.'); - let owner = window; - let prop; - for (;;) { - prop = chain.shift(); - if ( chain.length === 0 ) { break; } - owner = owner[prop]; - if ( owner instanceof Object === false ) { return; } - } - let value; - let desc = Object.getOwnPropertyDescriptor(owner, prop); - if ( - desc instanceof Object === false || - desc.get instanceof Function === false - ) { - value = owner[prop]; - desc = undefined; - } - const magic = String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - const scriptTexts = new WeakMap(); - const getScriptText = elem => { - let text = elem.textContent; - if ( text.trim() !== '' ) { return text; } - if ( scriptTexts.has(elem) ) { return scriptTexts.get(elem); } - const [ , mime, content ] = - /^data:([^,]*),(.+)$/.exec(elem.src.trim()) || - [ '', '', '' ]; - try { - switch ( true ) { - case mime.endsWith(';base64'): - text = self.atob(content); - break; - default: - text = self.decodeURIComponent(content); - break; - } - } catch(ex) { - } - scriptTexts.set(elem, text); - return text; - }; - const validate = ( ) => { - const e = document.currentScript; - if ( e instanceof HTMLScriptElement === false ) { return; } - if ( reContext !== undefined && reContext.test(e.src) === false ) { - return; - } - if ( reNeedle.test(getScriptText(e)) === false ) { return; } - throw new ReferenceError(magic); - }; - Object.defineProperty(owner, prop, { - get: function() { - validate(); - return desc instanceof Object - ? desc.get.call(owner) - : value; - }, - set: function(a) { - validate(); - if ( desc instanceof Object ) { - desc.set.call(owner, a); - } else { - value = a; - } - } - }); - const oe = window.onerror; - window.onerror = function(msg) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe.apply(this, arguments); - } - }.bind(); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-current-script.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-current-script.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-current-script.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-current-script.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,184 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name abort-current-script -/// alias acs -/// alias abort-current-inline-script -/// alias acis - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_abortCurrentScript() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -// Issues to mind before changing anything: -// https://github.com/uBlockOrigin/uBlock-issues/issues/2154 - -const scriptlet = ( - target = '', - needle = '', - context = '' -) => { - if ( target === '' ) { return; } - const reRegexEscape = /[.*+?^${}()|[\]\\]/g; - const reNeedle = (( ) => { - if ( needle === '' ) { return /^/; } - if ( /^\/.+\/$/.test(needle) ) { - return new RegExp(needle.slice(1,-1)); - } - return new RegExp(needle.replace(reRegexEscape, '\\$&')); - })(); - const reContext = (( ) => { - if ( context === '' ) { return; } - if ( /^\/.+\/$/.test(context) ) { - return new RegExp(context.slice(1,-1)); - } - return new RegExp(context.replace(reRegexEscape, '\\$&')); - })(); - const chain = target.split('.'); - let owner = window; - let prop; - for (;;) { - prop = chain.shift(); - if ( chain.length === 0 ) { break; } - owner = owner[prop]; - if ( owner instanceof Object === false ) { return; } - } - let value; - let desc = Object.getOwnPropertyDescriptor(owner, prop); - if ( - desc instanceof Object === false || - desc.get instanceof Function === false - ) { - value = owner[prop]; - desc = undefined; - } - const magic = String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - const scriptTexts = new WeakMap(); - const getScriptText = elem => { - let text = elem.textContent; - if ( text.trim() !== '' ) { return text; } - if ( scriptTexts.has(elem) ) { return scriptTexts.get(elem); } - const [ , mime, content ] = - /^data:([^,]*),(.+)$/.exec(elem.src.trim()) || - [ '', '', '' ]; - try { - switch ( true ) { - case mime.endsWith(';base64'): - text = self.atob(content); - break; - default: - text = self.decodeURIComponent(content); - break; - } - } catch(ex) { - } - scriptTexts.set(elem, text); - return text; - }; - const validate = ( ) => { - const e = document.currentScript; - if ( e instanceof HTMLScriptElement === false ) { return; } - if ( reContext !== undefined && reContext.test(e.src) === false ) { - return; - } - if ( reNeedle.test(getScriptText(e)) === false ) { return; } - throw new ReferenceError(magic); - }; - Object.defineProperty(owner, prop, { - get: function() { - validate(); - return desc instanceof Object - ? desc.get.call(owner) - : value; - }, - set: function(a) { - validate(); - if ( desc instanceof Object ) { - desc.set.call(owner, a); - } else { - value = a; - } - } - }); - const oe = window.onerror; - window.onerror = function(msg) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe.apply(this, arguments); - } - }.bind(); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,139 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name abort-on-property-read.entity -/// alias aopr.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_abortOnPropertyReadEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -const ObjGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -const ObjDefineProperty = Object.defineProperty; - -const magic = - String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - -const abort = function() { - throw new ReferenceError(magic); -}; - -const makeProxy = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - const desc = ObjGetOwnPropertyDescriptor(owner, chain); - if ( !desc || desc.get !== abort ) { - ObjDefineProperty(owner, chain, { - get: abort, - set: function(){} - }); - } - return; - } - - const prop = chain.slice(0, pos); - let v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v ) { - makeProxy(v, chain); - return; - } - - const desc = ObjGetOwnPropertyDescriptor(owner, prop); - if ( desc && desc.set !== undefined ) { return; } - - ObjDefineProperty(owner, prop, { - get: function() { return v; }, - set: function(a) { - v = a; - if ( a instanceof Object ) { - makeProxy(a, chain); - } - } - }); -}; - -const scriptlet = ( - chain = '' -) => { - const owner = window; - makeProxy(owner, chain); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-read.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,143 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name abort-on-property-read -/// alias aopr - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_abortOnPropertyRead() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const ObjGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; -const ObjDefineProperty = Object.defineProperty; - -const magic = - String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - -const abort = function() { - throw new ReferenceError(magic); -}; - -const makeProxy = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - const desc = ObjGetOwnPropertyDescriptor(owner, chain); - if ( !desc || desc.get !== abort ) { - ObjDefineProperty(owner, chain, { - get: abort, - set: function(){} - }); - } - return; - } - - const prop = chain.slice(0, pos); - let v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v ) { - makeProxy(v, chain); - return; - } - - const desc = ObjGetOwnPropertyDescriptor(owner, prop); - if ( desc && desc.set !== undefined ) { return; } - - ObjDefineProperty(owner, prop, { - get: function() { return v; }, - set: function(a) { - v = a; - if ( a instanceof Object ) { - makeProxy(a, chain); - } - } - }); -}; - -const scriptlet = ( - chain = '' -) => { - const owner = window; - makeProxy(owner, chain); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name abort-on-property-write.entity -/// alias aopw.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_abortOnPropertyWriteEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -const magic = - String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - -const abort = function() { - throw new ReferenceError(magic); -}; - -const scriptlet = ( - prop = '' -) => { - let owner = window; - for (;;) { - const pos = prop.indexOf('.'); - if ( pos === -1 ) { break; } - owner = owner[prop.slice(0, pos)]; - if ( owner instanceof Object === false ) { return; } - prop = prop.slice(pos + 1); - } - delete owner[prop]; - Object.defineProperty(owner, prop, { - set: function() { - abort(); - } - }); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/abort-on-property-write.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name abort-on-property-write -/// alias aopw - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_abortOnPropertyWrite() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const magic = - String.fromCharCode(Date.now() % 26 + 97) + - Math.floor(Math.random() * 982451653 + 982451653).toString(36); - -const abort = function() { - throw new ReferenceError(magic); -}; - -const scriptlet = ( - prop = '' -) => { - let owner = window; - for (;;) { - const pos = prop.indexOf('.'); - if ( pos === -1 ) { break; } - owner = owner[prop.slice(0, pos)]; - if ( owner instanceof Object === false ) { return; } - prop = prop.slice(pos + 1); - } - delete owner[prop]; - Object.defineProperty(owner, prop, { - set: function() { - abort(); - } - }); - const oe = window.onerror; - window.onerror = function(msg, src, line, col, error) { - if ( typeof msg === 'string' && msg.includes(magic) ) { - return true; - } - if ( oe instanceof Function ) { - return oe(msg, src, line, col, error); - } - }.bind(); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-declarative.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-declarative.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-declarative.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-declarative.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name css-declarative - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_cssDeclarativeImport() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -self.declarativeImports = self.declarativeImports || []; -self.declarativeImports.push({ argsList, hostnamesMap }); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-declarative.template.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-declarative.template.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-declarative.template.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-declarative.template.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,51 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssDeclarativeImport() { + +/******************************************************************************/ + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +self.declarativeImports = self.declarativeImports || []; +self.declarativeImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap }); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-generic.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generic.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-generic.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generic.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name css-generic - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_cssGenericImport() { - -/******************************************************************************/ - -// $rulesetId$ - -const toImport = self.$genericSelectorMap$; - -const genericSelectorMap = self.genericSelectorMap || new Map(); - -if ( genericSelectorMap.size === 0 ) { - self.genericSelectorMap = new Map(toImport); - return; -} - -for ( const toImportEntry of toImport ) { - const existing = genericSelectorMap.get(toImportEntry[0]); - genericSelectorMap.set( - toImportEntry[0], - existing === undefined - ? toImportEntry[1] - : `${existing},${toImportEntry[1]}` - ); -} - -self.genericSelectorMap = genericSelectorMap; - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-generic.template.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generic.template.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-generic.template.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generic.template.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,61 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssGenericImport() { + +/******************************************************************************/ + +// $rulesetId$ + +const toImport = self.$genericSelectorMap$; + +const genericSelectorMap = self.genericSelectorMap || new Map(); + +if ( genericSelectorMap.size === 0 ) { + self.genericSelectorMap = new Map(toImport); + return; +} + +for ( const toImportEntry of toImport ) { + const existing = genericSelectorMap.get(toImportEntry[0]); + genericSelectorMap.set( + toImportEntry[0], + existing === undefined + ? toImportEntry[1] + : `${existing},${toImportEntry[1]}` + ); +} + +self.genericSelectorMap = genericSelectorMap; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-generichigh.template.css ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generichigh.template.css --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-generichigh.template.css 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-generichigh.template.css 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,26 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* $rulesetId$ */ + +$selectorList$ { + display: none !important; +} diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-procedural.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-procedural.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-procedural.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-procedural.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name css-procedural - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_cssProceduralImport() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -self.proceduralImports = self.proceduralImports || []; -self.proceduralImports.push({ argsList, hostnamesMap }); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-procedural.template.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-procedural.template.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-procedural.template.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-procedural.template.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,51 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssProceduralImport() { + +/******************************************************************************/ + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +self.proceduralImports = self.proceduralImports || []; +self.proceduralImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap }); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-specific.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-specific.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name css-specific.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_cssSpecificEntityImport() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -self.specificEntityImports = self.specificEntityImports || []; -self.specificEntityImports.push({ argsList, entitiesMap }); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-specific.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-specific.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name css-specific - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_cssSpecific() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -const styles = []; -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - styles.push(details.a); - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -if ( styles.length === 0 ) { return; } - -try { - const sheet = new CSSStyleSheet(); - sheet.replace(`@layer{${styles.join(',')}{display:none!important;}}`); - document.adoptedStyleSheets = [ - ...document.adoptedStyleSheets, - sheet - ]; -} catch(ex) { -} - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-specific.template.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.template.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/css-specific.template.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/css-specific.template.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,51 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssSpecificImports() { + +/******************************************************************************/ + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +self.specificImports = self.specificImports || []; +self.specificImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap }); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/json-prune.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/json-prune.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/json-prune.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/json-prune.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,160 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name json-prune - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_jsonPrune() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -// https://github.com/uBlockOrigin/uBlock-issues/issues/1545 -// - Add support for "remove everything if needle matches" case - -const scriptlet = ( - rawPrunePaths = '', - rawNeedlePaths = '' -) => { - const prunePaths = rawPrunePaths !== '' - ? rawPrunePaths.split(/ +/) - : []; - let needlePaths; - if ( prunePaths.length === 0 ) { return; } - needlePaths = prunePaths.length !== 0 && rawNeedlePaths !== '' - ? rawNeedlePaths.split(/ +/) - : []; - const findOwner = function(root, path, prune = false) { - let owner = root; - let chain = path; - for (;;) { - if ( typeof owner !== 'object' || owner === null ) { - return false; - } - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - if ( prune === false ) { - return owner.hasOwnProperty(chain); - } - if ( chain === '*' ) { - for ( const key in owner ) { - if ( owner.hasOwnProperty(key) === false ) { continue; } - delete owner[key]; - } - } else if ( owner.hasOwnProperty(chain) ) { - delete owner[chain]; - } - return true; - } - const prop = chain.slice(0, pos); - if ( - prop === '[]' && Array.isArray(owner) || - prop === '*' && owner instanceof Object - ) { - const next = chain.slice(pos + 1); - let found = false; - for ( const key of Object.keys(owner) ) { - found = findOwner(owner[key], next, prune) || found; - } - return found; - } - if ( owner.hasOwnProperty(prop) === false ) { return false; } - owner = owner[prop]; - chain = chain.slice(pos + 1); - } - }; - const mustProcess = function(root) { - for ( const needlePath of needlePaths ) { - if ( findOwner(root, needlePath) === false ) { - return false; - } - } - return true; - }; - const pruner = function(o) { - if ( mustProcess(o) === false ) { return o; } - for ( const path of prunePaths ) { - findOwner(o, path, true); - } - return o; - }; - JSON.parse = new Proxy(JSON.parse, { - apply: function() { - return pruner(Reflect.apply(...arguments)); - }, - }); - Response.prototype.json = new Proxy(Response.prototype.json, { - apply: function() { - return Reflect.apply(...arguments).then(o => pruner(o)); - }, - }); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-addeventlistener-if.entity -/// alias noaelif.entity -/// alias aeld.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noAddEventListenerIfEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -const regexpFromArg = arg => { - if ( arg === '' ) { return /^/; } - if ( /^\/.+\/$/.test(arg) ) { return new RegExp(arg.slice(1,-1)); } - return new RegExp(arg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); -}; - -/******************************************************************************/ - -const scriptlet = ( - needle1 = '', - needle2 = '' -) => { - const reNeedle1 = regexpFromArg(needle1); - const reNeedle2 = regexpFromArg(needle2); - self.EventTarget.prototype.addEventListener = new Proxy( - self.EventTarget.prototype.addEventListener, - { - apply: function(target, thisArg, args) { - let type, handler; - try { - type = String(args[0]); - handler = String(args[1]); - } catch(ex) { - } - if ( - reNeedle1.test(type) === false || - reNeedle2.test(handler) === false - ) { - return target.apply(thisArg, args); - } - } - } - ); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-addeventlistener-if.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,118 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-addeventlistener-if -/// alias noaelif -/// alias addEventListener-defuser -/// alias aeld - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noAddEventListenerIf() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const regexpFromArg = arg => { - if ( arg === '' ) { return /^/; } - if ( /^\/.+\/$/.test(arg) ) { return new RegExp(arg.slice(1,-1)); } - return new RegExp(arg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')); -}; - -/******************************************************************************/ - -const scriptlet = ( - needle1 = '', - needle2 = '' -) => { - const reNeedle1 = regexpFromArg(needle1); - const reNeedle2 = regexpFromArg(needle2); - self.EventTarget.prototype.addEventListener = new Proxy( - self.EventTarget.prototype.addEventListener, - { - apply: function(target, thisArg, args) { - let type, handler; - try { - type = String(args[0]); - handler = String(args[1]); - } catch(ex) { - } - if ( - reNeedle1.test(type) === false || - reNeedle2.test(handler) === false - ) { - return target.apply(thisArg, args); - } - } - } - ); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-fetch-if.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-fetch-if.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-fetch-if.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-fetch-if.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,143 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-fetch-if - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noFetchIf() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const scriptlet = ( - conditions = '' -) => { - const needles = []; - for ( const condition of conditions.split(/\s+/) ) { - if ( condition === '' ) { continue; } - const pos = condition.indexOf(':'); - let key, value; - if ( pos !== -1 ) { - key = condition.slice(0, pos); - value = condition.slice(pos + 1); - } else { - key = 'url'; - value = condition; - } - if ( value === '' ) { - value = '^'; - } else if ( value.startsWith('/') && value.endsWith('/') ) { - value = value.slice(1, -1); - } else { - value = value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needles.push({ key, re: new RegExp(value) }); - } - self.fetch = new Proxy(self.fetch, { - apply: function(target, thisArg, args) { - let proceed = true; - try { - let details; - if ( args[0] instanceof self.Request ) { - details = args[0]; - } else { - details = Object.assign({ url: args[0] }, args[1]); - } - const props = new Map(); - for ( const prop in details ) { - let v = details[prop]; - if ( typeof v !== 'string' ) { - try { v = JSON.stringify(v); } - catch(ex) { } - } - if ( typeof v !== 'string' ) { continue; } - props.set(prop, v); - } - proceed = needles.length === 0; - for ( const { key, re } of needles ) { - if ( - props.has(key) === false || - re.test(props.get(key)) === false - ) { - proceed = true; - break; - } - } - } catch(ex) { - } - return proceed - ? Reflect.apply(target, thisArg, args) - : Promise.resolve(new Response()); - } - }); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-setinterval-if.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-setinterval-if.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-setinterval-if.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-setinterval-if.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-setinterval-if -/// alias no-setInterval-if -/// alias nosiif - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noSetIntervalIf() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const scriptlet = ( - needle = '', - delay = '' -) => { - const needleNot = needle.charAt(0) === '!'; - if ( needleNot ) { needle = needle.slice(1); } - if ( delay === '' ) { delay = undefined; } - let delayNot = false; - if ( delay !== undefined ) { - delayNot = delay.charAt(0) === '!'; - if ( delayNot ) { delay = delay.slice(1); } - delay = parseInt(delay, 10); - } - if ( needle.startsWith('/') && needle.endsWith('/') ) { - needle = needle.slice(1,-1); - } else if ( needle !== '' ) { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const reNeedle = new RegExp(needle); - const regexpTest = RegExp.prototype.test; - self.setInterval = new Proxy(self.setInterval, { - apply: function(target, thisArg, args) { - const a = String(args[0]); - const b = args[1]; - let defuse; - if ( needle !== '' ) { - defuse = regexpTest.call(reNeedle, a) !== needleNot; - } - if ( defuse !== false && delay !== undefined ) { - defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; - } - if ( defuse ) { - args[0] = function(){}; - } - return target.apply(thisArg, args); - } - }); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,117 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-settimeout-if.entity -/// alias no-setTimeout-if.entity -/// alias nostif.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noSetTimeoutIfEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -const scriptlet = ( - needle = '', - delay = '' -) => { - const needleNot = needle.charAt(0) === '!'; - if ( needleNot ) { needle = needle.slice(1); } - if ( delay === '' ) { delay = undefined; } - let delayNot = false; - if ( delay !== undefined ) { - delayNot = delay.charAt(0) === '!'; - if ( delayNot ) { delay = delay.slice(1); } - delay = parseInt(delay, 10); - } - if ( needle.startsWith('/') && needle.endsWith('/') ) { - needle = needle.slice(1,-1); - } else if ( needle !== '' ) { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const reNeedle = new RegExp(needle); - const regexpTest = RegExp.prototype.test; - self.setTimeout = new Proxy(self.setTimeout, { - apply: function(target, thisArg, args) { - const a = String(args[0]); - const b = args[1]; - let defuse; - if ( needle !== '' ) { - defuse = regexpTest.call(reNeedle, a) !== needleNot; - } - if ( defuse !== false && delay !== undefined ) { - defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; - } - if ( defuse ) { - args[0] = function(){}; - } - return target.apply(thisArg, args); - } - }); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-settimeout-if.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-settimeout-if -/// alias no-setTimeout-if -/// alias nostif - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noSetTimeoutIf() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const scriptlet = ( - needle = '', - delay = '' -) => { - const needleNot = needle.charAt(0) === '!'; - if ( needleNot ) { needle = needle.slice(1); } - if ( delay === '' ) { delay = undefined; } - let delayNot = false; - if ( delay !== undefined ) { - delayNot = delay.charAt(0) === '!'; - if ( delayNot ) { delay = delay.slice(1); } - delay = parseInt(delay, 10); - } - if ( needle.startsWith('/') && needle.endsWith('/') ) { - needle = needle.slice(1,-1); - } else if ( needle !== '' ) { - needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const reNeedle = new RegExp(needle); - const regexpTest = RegExp.prototype.test; - self.setTimeout = new Proxy(self.setTimeout, { - apply: function(target, thisArg, args) { - const a = String(args[0]); - const b = args[1]; - let defuse; - if ( needle !== '' ) { - defuse = regexpTest.call(reNeedle, a) !== needleNot; - } - if ( defuse !== false && delay !== undefined ) { - defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; - } - if ( defuse ) { - args[0] = function(){}; - } - return target.apply(thisArg, args); - } - }); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,154 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-windowopen-if.entity -/// alias no-windowOpen-if.entity -/// alias nowoif.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noWindowOpenIfEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -const scriptlet = ( - needle = '', - delay = '', - options = '' -) => { - const newSyntax = /^[01]?$/.test(needle) === false; - let pattern = ''; - let targetResult = true; - let autoRemoveAfter = -1; - if ( newSyntax ) { - pattern = needle; - if ( pattern.startsWith('!') ) { - targetResult = false; - pattern = pattern.slice(1); - } - autoRemoveAfter = parseInt(delay); - if ( isNaN(autoRemoveAfter) ) { - autoRemoveAfter = -1; - } - } else { - pattern = delay; - if ( needle === '0' ) { - targetResult = false; - } - } - if ( pattern === '' ) { - pattern = '.?'; - } else if ( /^\/.+\/$/.test(pattern) ) { - pattern = pattern.slice(1,-1); - } else { - pattern = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const rePattern = new RegExp(pattern); - const createDecoy = function(tag, urlProp, url) { - const decoy = document.createElement(tag); - decoy[urlProp] = url; - decoy.style.setProperty('height','1px', 'important'); - decoy.style.setProperty('position','fixed', 'important'); - decoy.style.setProperty('top','-1px', 'important'); - decoy.style.setProperty('width','1px', 'important'); - document.body.appendChild(decoy); - setTimeout(( ) => decoy.remove(), autoRemoveAfter * 1000); - return decoy; - }; - window.open = new Proxy(window.open, { - apply: function(target, thisArg, args) { - const url = args[0]; - if ( rePattern.test(url) !== targetResult ) { - return target.apply(thisArg, args); - } - if ( autoRemoveAfter < 0 ) { return null; } - const decoy = /\bobj\b/.test(options) - ? createDecoy('object', 'data', url) - : createDecoy('iframe', 'src', url); - let popup = decoy.contentWindow; - if ( typeof popup === 'object' && popup !== null ) { - Object.defineProperty(popup, 'closed', { value: false }); - } else { - const noopFunc = (function(){}).bind(self); - popup = new Proxy(self, { - get: function(target, prop) { - if ( prop === 'closed' ) { return false; } - const r = Reflect.get(...arguments); - if ( typeof r === 'function' ) { return noopFunc; } - return target[prop]; - }, - set: function() { - return Reflect.set(...arguments); - }, - }); - } - return popup; - } - }); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-windowopen-if.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,159 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-windowopen-if -/// alias no-windowOpen-if -/// alias nowoif -/// alias window.open-defuser - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noWindowOpenIf() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const scriptlet = ( - needle = '', - delay = '', - options = '' -) => { - const newSyntax = /^[01]?$/.test(needle) === false; - let pattern = ''; - let targetResult = true; - let autoRemoveAfter = -1; - if ( newSyntax ) { - pattern = needle; - if ( pattern.startsWith('!') ) { - targetResult = false; - pattern = pattern.slice(1); - } - autoRemoveAfter = parseInt(delay); - if ( isNaN(autoRemoveAfter) ) { - autoRemoveAfter = -1; - } - } else { - pattern = delay; - if ( needle === '0' ) { - targetResult = false; - } - } - if ( pattern === '' ) { - pattern = '.?'; - } else if ( /^\/.+\/$/.test(pattern) ) { - pattern = pattern.slice(1,-1); - } else { - pattern = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - const rePattern = new RegExp(pattern); - const createDecoy = function(tag, urlProp, url) { - const decoy = document.createElement(tag); - decoy[urlProp] = url; - decoy.style.setProperty('height','1px', 'important'); - decoy.style.setProperty('position','fixed', 'important'); - decoy.style.setProperty('top','-1px', 'important'); - decoy.style.setProperty('width','1px', 'important'); - document.body.appendChild(decoy); - setTimeout(( ) => decoy.remove(), autoRemoveAfter * 1000); - return decoy; - }; - window.open = new Proxy(window.open, { - apply: function(target, thisArg, args) { - const url = args[0]; - if ( rePattern.test(url) !== targetResult ) { - return target.apply(thisArg, args); - } - if ( autoRemoveAfter < 0 ) { return null; } - const decoy = /\bobj\b/.test(options) - ? createDecoy('object', 'data', url) - : createDecoy('iframe', 'src', url); - let popup = decoy.contentWindow; - if ( typeof popup === 'object' && popup !== null ) { - Object.defineProperty(popup, 'closed', { value: false }); - } else { - const noopFunc = (function(){}).bind(self); - popup = new Proxy(self, { - get: function(target, prop) { - if ( prop === 'closed' ) { return false; } - const r = Reflect.get(...arguments); - if ( typeof r === 'function' ) { return noopFunc; } - return target[prop]; - }, - set: function() { - return Reflect.set(...arguments); - }, - }); - } - return popup; - } - }); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-xhr-if.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-xhr-if.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/no-xhr-if.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/no-xhr-if.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name no-xhr-if - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_noXhrIf() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const scriptlet = ( - conditions = '' -) => { - const xhrInstances = new WeakMap(); - const needles = []; - for ( const condition of conditions.split(/\s+/) ) { - if ( condition === '' ) { continue; } - const pos = condition.indexOf(':'); - let key, value; - if ( pos !== -1 ) { - key = condition.slice(0, pos); - value = condition.slice(pos + 1); - } else { - key = 'url'; - value = condition; - } - if ( value === '' ) { - value = '^'; - } else if ( value.startsWith('/') && value.endsWith('/') ) { - value = value.slice(1, -1); - } else { - value = value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - } - needles.push({ key, re: new RegExp(value) }); - } - self.XMLHttpRequest = class extends self.XMLHttpRequest { - open(...args) { - const argNames = [ 'method', 'url' ]; - const haystack = new Map(); - for ( let i = 0; i < args.length && i < argNames.length; i++ ) { - haystack.set(argNames[i], args[i]); - } - if ( haystack.size !== 0 ) { - let matches = true; - for ( const { key, re } of needles ) { - matches = re.test(haystack.get(key) || ''); - if ( matches === false ) { break; } - } - if ( matches ) { - xhrInstances.set(this, haystack); - } - } - return super.open(...args); - } - send(...args) { - const haystack = xhrInstances.get(this); - if ( haystack === undefined ) { - return super.send(...args); - } - Object.defineProperties(this, { - readyState: { value: 4, writable: false }, - response: { value: '', writable: false }, - responseText: { value: '', writable: false }, - responseURL: { value: haystack.get('url'), writable: false }, - responseXML: { value: '', writable: false }, - status: { value: 200, writable: false }, - statusText: { value: 'OK', writable: false }, - }); - this.dispatchEvent(new Event('readystatechange')); - this.dispatchEvent(new Event('load')); - this.dispatchEvent(new Event('loadend')); - } - }; -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ - diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/scriptlet.template.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/scriptlet.template.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/scriptlet.template.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/scriptlet.template.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,147 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock + +*/ + +/* eslint-disable indent */ + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope + +// Start of local scope +(( ) => { + +/******************************************************************************/ + +// Start of code to inject +const uBOL_$scriptletName$ = function() { + +const scriptletGlobals = {}; // eslint-disable-line + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +/******************************************************************************/ + +function $scriptletName$(){} + +/******************************************************************************/ + +const hnParts = []; +try { + let origin = document.location.origin; + if ( origin === 'null' ) { + const origins = document.location.ancestorOrigins; + for ( let i = 0; i < origins.length; i++ ) { + origin = origins[i]; + if ( origin !== 'null' ) { break; } + } + } + const pos = origin.lastIndexOf('://'); + if ( pos === -1 ) { return; } + hnParts.push(...origin.slice(pos+3).split('.')); +} +catch(ex) { } +const hnpartslen = hnParts.length; +if ( hnpartslen === 0 ) { return; } + +const todoIndices = new Set(); +const tonotdoIndices = []; + +// Exceptions +if ( exceptionsMap.size !== 0 ) { + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + const excepted = exceptionsMap.get(hn); + if ( excepted ) { tonotdoIndices.push(...excepted); } + } + exceptionsMap.clear(); +} + +// Hostname-based +if ( hostnamesMap.size !== 0 ) { + const collectArgIndices = hn => { + let argsIndices = hostnamesMap.get(hn); + if ( argsIndices === undefined ) { return; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + }; + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + collectArgIndices(hn); + } + collectArgIndices('*'); + hostnamesMap.clear(); +} + +// Entity-based +if ( entitiesMap.size !== 0 ) { + const n = hnpartslen - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + const en = hnParts.slice(i,j).join('.'); + let argsIndices = entitiesMap.get(en); + if ( argsIndices === undefined ) { continue; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + } + } + entitiesMap.clear(); +} + +// Apply scriplets +for ( const i of todoIndices ) { + try { $scriptletName$(...argsList[i]); } + catch(ex) {} +} +argsList.length = 0; + +/******************************************************************************/ + +}; +// End of code to inject + +/******************************************************************************/ + +uBOL_$scriptletName$(); + +/******************************************************************************/ + +// End of local scope +})(); + +/******************************************************************************/ + +void 0; diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/set-constant.entity.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/set-constant.entity.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/set-constant.entity.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/set-constant.entity.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,199 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name set-constant.entity -/// alias set.entity - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_setConstantEntity() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const entitiesMap = new Map(self.$entitiesMap$); - -/******************************************************************************/ - -const scriptlet = ( - chain = '', - cValue = '' -) => { - if ( chain === '' ) { return; } - if ( cValue === 'undefined' ) { - cValue = undefined; - } else if ( cValue === 'false' ) { - cValue = false; - } else if ( cValue === 'true' ) { - cValue = true; - } else if ( cValue === 'null' ) { - cValue = null; - } else if ( cValue === "''" ) { - cValue = ''; - } else if ( cValue === '[]' ) { - cValue = []; - } else if ( cValue === '{}' ) { - cValue = {}; - } else if ( cValue === 'noopFunc' ) { - cValue = function(){}; - } else if ( cValue === 'trueFunc' ) { - cValue = function(){ return true; }; - } else if ( cValue === 'falseFunc' ) { - cValue = function(){ return false; }; - } else if ( /^\d+$/.test(cValue) ) { - cValue = parseFloat(cValue); - if ( isNaN(cValue) ) { return; } - if ( Math.abs(cValue) > 0x7FFF ) { return; } - } else { - return; - } - let aborted = false; - const mustAbort = function(v) { - if ( aborted ) { return true; } - aborted = - (v !== undefined && v !== null) && - (cValue !== undefined && cValue !== null) && - (typeof v !== typeof cValue); - return aborted; - }; - // https://github.com/uBlockOrigin/uBlock-issues/issues/156 - // Support multiple trappers for the same property. - const trapProp = function(owner, prop, configurable, handler) { - if ( handler.init(owner[prop]) === false ) { return; } - const odesc = Object.getOwnPropertyDescriptor(owner, prop); - let prevGetter, prevSetter; - if ( odesc instanceof Object ) { - owner[prop] = cValue; - if ( odesc.get instanceof Function ) { - prevGetter = odesc.get; - } - if ( odesc.set instanceof Function ) { - prevSetter = odesc.set; - } - } - try { - Object.defineProperty(owner, prop, { - configurable, - get() { - if ( prevGetter !== undefined ) { - prevGetter(); - } - return handler.getter(); // cValue - }, - set(a) { - if ( prevSetter !== undefined ) { - prevSetter(a); - } - handler.setter(a); - } - }); - } catch(ex) { - } - }; - const trapChain = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - trapProp(owner, chain, false, { - v: undefined, - init: function(v) { - if ( mustAbort(v) ) { return false; } - this.v = v; - return true; - }, - getter: function() { - return cValue; - }, - setter: function(a) { - if ( mustAbort(a) === false ) { return; } - cValue = a; - } - }); - return; - } - const prop = chain.slice(0, pos); - const v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v instanceof Object || typeof v === 'object' && v !== null ) { - trapChain(v, chain); - return; - } - trapProp(owner, prop, true, { - v: undefined, - init: function(v) { - this.v = v; - return true; - }, - getter: function() { - return this.v; - }, - setter: function(a) { - this.v = a; - if ( a instanceof Object ) { - trapChain(a, chain); - } - } - }); - }; - trapChain(window, chain); -}; - -/******************************************************************************/ - -const hnparts = []; -try { hnparts.push(...document.location.hostname.split('.')); } catch(ex) { } -const hnpartslen = hnparts.length - 1; -for ( let i = 0; i < hnpartslen; i++ ) { - for ( let j = hnpartslen; j > i; j-- ) { - const hn = hnparts.slice(i).join('.'); - const en = hnparts.slice(i,j).join('.'); - let argsIndices = entitiesMap.get(en); - if ( argsIndices === undefined ) { continue; } - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } -} - -argsList.length = 0; -entitiesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/set-constant.js ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/set-constant.js --- ublock-origin-1.46.0+dfsg/platform/mv3/scriptlets/set-constant.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/mv3/scriptlets/set-constant.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,202 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2019-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock - - The scriptlets below are meant to be injected only into a - web page context. -*/ - -/* jshint esversion:11 */ - -'use strict'; - -/******************************************************************************/ - -/// name set-constant -/// alias set - -/******************************************************************************/ - -// Important! -// Isolate from global scope -(function uBOL_setConstant() { - -/******************************************************************************/ - -// $rulesetId$ - -const argsList = self.$argsList$; - -const hostnamesMap = new Map(self.$hostnamesMap$); - -/******************************************************************************/ - -const scriptlet = ( - chain = '', - cValue = '' -) => { - if ( chain === '' ) { return; } - if ( cValue === 'undefined' ) { - cValue = undefined; - } else if ( cValue === 'false' ) { - cValue = false; - } else if ( cValue === 'true' ) { - cValue = true; - } else if ( cValue === 'null' ) { - cValue = null; - } else if ( cValue === "''" ) { - cValue = ''; - } else if ( cValue === '[]' ) { - cValue = []; - } else if ( cValue === '{}' ) { - cValue = {}; - } else if ( cValue === 'noopFunc' ) { - cValue = function(){}; - } else if ( cValue === 'trueFunc' ) { - cValue = function(){ return true; }; - } else if ( cValue === 'falseFunc' ) { - cValue = function(){ return false; }; - } else if ( /^\d+$/.test(cValue) ) { - cValue = parseFloat(cValue); - if ( isNaN(cValue) ) { return; } - if ( Math.abs(cValue) > 0x7FFF ) { return; } - } else { - return; - } - let aborted = false; - const mustAbort = function(v) { - if ( aborted ) { return true; } - aborted = - (v !== undefined && v !== null) && - (cValue !== undefined && cValue !== null) && - (typeof v !== typeof cValue); - return aborted; - }; - // https://github.com/uBlockOrigin/uBlock-issues/issues/156 - // Support multiple trappers for the same property. - const trapProp = function(owner, prop, configurable, handler) { - if ( handler.init(owner[prop]) === false ) { return; } - const odesc = Object.getOwnPropertyDescriptor(owner, prop); - let prevGetter, prevSetter; - if ( odesc instanceof Object ) { - owner[prop] = cValue; - if ( odesc.get instanceof Function ) { - prevGetter = odesc.get; - } - if ( odesc.set instanceof Function ) { - prevSetter = odesc.set; - } - } - try { - Object.defineProperty(owner, prop, { - configurable, - get() { - if ( prevGetter !== undefined ) { - prevGetter(); - } - return handler.getter(); // cValue - }, - set(a) { - if ( prevSetter !== undefined ) { - prevSetter(a); - } - handler.setter(a); - } - }); - } catch(ex) { - } - }; - const trapChain = function(owner, chain) { - const pos = chain.indexOf('.'); - if ( pos === -1 ) { - trapProp(owner, chain, false, { - v: undefined, - init: function(v) { - if ( mustAbort(v) ) { return false; } - this.v = v; - return true; - }, - getter: function() { - return cValue; - }, - setter: function(a) { - if ( mustAbort(a) === false ) { return; } - cValue = a; - } - }); - return; - } - const prop = chain.slice(0, pos); - const v = owner[prop]; - chain = chain.slice(pos + 1); - if ( v instanceof Object || typeof v === 'object' && v !== null ) { - trapChain(v, chain); - return; - } - trapProp(owner, prop, true, { - v: undefined, - init: function(v) { - this.v = v; - return true; - }, - getter: function() { - return this.v; - }, - setter: function(a) { - this.v = a; - if ( a instanceof Object ) { - trapChain(a, chain); - } - } - }); - }; - trapChain(window, chain); -}; - -/******************************************************************************/ - -let hn; -try { hn = document.location.hostname; } catch(ex) { } -while ( hn ) { - if ( hostnamesMap.has(hn) ) { - let argsIndices = hostnamesMap.get(hn); - if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } - for ( const argsIndex of argsIndices ) { - const details = argsList[argsIndex]; - if ( details.n && details.n.includes(hn) ) { continue; } - try { scriptlet(...details.a); } catch(ex) {} - } - } - if ( hn === '*' ) { break; } - const pos = hn.indexOf('.'); - if ( pos !== -1 ) { - hn = hn.slice(pos + 1); - } else { - hn = '*'; - } -} - -argsList.length = 0; -hostnamesMap.clear(); - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff -Nru ublock-origin-1.46.0+dfsg/platform/nodejs/.eslintrc.json ublock-origin-1.62.0+dfsg/platform/nodejs/.eslintrc.json --- ublock-origin-1.46.0+dfsg/platform/nodejs/.eslintrc.json 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/nodejs/.eslintrc.json 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "root": true, + "env": { + "es2021": true, + "node": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "rules": { + "eqeqeq": [ "warn", "always" ], + "indent": [ + "warn", + 4, + { + "ArrayExpression": "first", + "CallExpression": { "arguments": "first" }, + "MemberExpression": "off", + "ObjectExpression": "off", + "ignoreComments": true, + "ignoredNodes": [ + "AssignmentExpression:has(Literal)" + ] + } + ], + "getter-return": "off", + "no-control-regex": "off", + "no-empty": [ "error", { "allowEmptyCatch": true } ], + "no-promise-executor-return": [ "error" ], + "no-template-curly-in-string": [ "error" ], + "no-unreachable-loop": [ "error" ], + "no-useless-backreference": [ "error" ], + "no-useless-escape": "off", + "require-atomic-updates": [ "warn" ] + } +} diff -Nru ublock-origin-1.46.0+dfsg/platform/nodejs/README.md ublock-origin-1.62.0+dfsg/platform/nodejs/README.md --- ublock-origin-1.46.0+dfsg/platform/nodejs/README.md 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/nodejs/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -# uBlock Origin Core - -The core filtering engines used in the uBlock Origin ("uBO") extension, and has -no external dependencies. - -## Installation - -Install: `npm install @gorhill/ubo-core` - -This is a very early version and the API is subject to change at any time. - -This package uses [native JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules). - - -## Description - -The package contains uBO's static network filtering engine ("SNFE"), which -purpose is to parse and enforce filter lists. The matching algorithm is highly -efficient, and _especially_ optimized to match against large sets of pure -hostnames. - -The SNFE can be fed filter lists from a variety of sources, such as [EasyList/EasyPrivacy](https://easylist.to/), -[uBlock filters](https://github.com/uBlockOrigin/uAssets/tree/master/filters), -and also lists of domain names or hosts file format (i.e. block lists from [The Block List Project](https://github.com/blocklistproject/Lists#the-block-list-project), -[Steven Black's HOSTS](https://github.com/StevenBlack/hosts#readme), etc). - - -## Usage - -At the moment, there can be only one instance of the static network filtering -engine ("SNFE"), which proxy API must be imported as follow: - -```js -import { StaticNetFilteringEngine } from '@gorhill/ubo-core'; -``` - -If you must import as a NodeJS module: - -```js -const { StaticNetFilteringEngine } = await import('@gorhill/ubo-core'); -``` - - -Create an instance of SNFE: - -```js -const snfe = StaticNetFilteringEngine.create(); -``` - -Feed the SNFE with filter lists -- `useLists()` accepts an array of -objects (or promises to object) which expose the raw text of a list -through the `raw` property, and optionally the name of the list through the -`name` property (how you fetch the lists is up to you): - -```js -await snfe.useLists([ - fetch('easylist').then(raw => ({ name: 'easylist', raw })), - fetch('easyprivacy').then(raw => ({ name: 'easyprivacy', raw })), -]); -``` - -Now we are ready to match network requests: - -```js -// Not blocked -if ( snfe.matchRequest({ - originURL: 'https://www.bloomberg.com/', - url: 'https://www.bloomberg.com/tophat/assets/v2.6.1/that.css', - type: 'stylesheet' -}) !== 0 ) { - console.log(snfe.toLogData()); -} - -// Blocked -if ( snfe.matchRequest({ - originURL: 'https://www.bloomberg.com/', - url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js', - type: 'script' -}) !== 0 ) { - console.log(snfe.toLogData()); -} - -// Unblocked -if ( snfe.matchRequest({ - originURL: 'https://www.bloomberg.com/', - url: 'https://sourcepointcmp.bloomberg.com/ccpa.js', - type: 'script' -}) !== 0 ) { - console.log(snfe.toLogData()); -} -``` - -It is possible to pre-parse filter lists and save the intermediate results for -later use -- useful to speed up the loading of filter lists. This will be -documented eventually, but if you feel adventurous, you can look at the code -and use this capability now if you figure out the details. - ---- - -## Extras - -You can directly use specific APIs exposed by this package, here are some of -them, which are used internally by uBO's SNFE. - -### HNTrieContainer - -A well optimised [compressed trie](https://en.wikipedia.org/wiki/Trie#Compressing_tries) -container specialized to specifically store and lookup hostnames. - -The matching algorithm is designed for hostnames, i.e. the hostname labels -making up a hostname are matched from right to left, such that `www.example.org` -with be a match if `example.org` is stored into the trie, while -`anotherexample.org` won't be a match. - -`HNTrieContainer` is designed to store a large number of hostnames with CPU and -memory efficiency as a main concern -- and is a key component of uBO. - -To create and use a standalone `HNTrieContainer` object: - -```js -import HNTrieContainer from '@gorhill/ubo-core/js/hntrie.js'; - -const trieContainer = new HNTrieContainer(); - -const aTrie = trieContainer.createOne(); -trieContainer.add(aTrie, 'example.org'); -trieContainer.add(aTrie, 'example.com'); - -const anotherTrie = trieContainer.createOne(); -trieContainer.add(anotherTrie, 'foo.invalid'); -trieContainer.add(anotherTrie, 'bar.invalid'); - -// matches() return the position at which the match starts, or -1 when -// there is no match. - -// Matches: return 4 -console.log("trieContainer.matches(aTrie, 'www.example.org')", trieContainer.matches(aTrie, 'www.example.org')); - -// Does not match: return -1 -console.log("trieContainer.matches(aTrie, 'www.foo.invalid')", trieContainer.matches(aTrie, 'www.foo.invalid')); - -// Does not match: return -1 -console.log("trieContainer.matches(anotherTrie, 'www.example.org')", trieContainer.matches(anotherTrie, 'www.example.org')); - -// Matches: return 0 -console.log("trieContainer.matches(anotherTrie, 'foo.invalid')", trieContainer.matches(anotherTrie, 'foo.invalid')); -``` - -The `reset()` method must be used to remove all the tries from a trie container, -you can't remove a single trie from the container. - -```js -trieContainer.reset(); -``` - -When you reset a trie container, you can't use the reference to prior instances -of trie, i.e. `aTrie` and `anotherTrie` are no longer valid and shouldn't be -used following a reset. diff -Nru ublock-origin-1.46.0+dfsg/platform/nodejs/build.js ublock-origin-1.62.0+dfsg/platform/nodejs/build.js --- ublock-origin-1.46.0+dfsg/platform/nodejs/build.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/nodejs/build.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/nodejs/index.js ublock-origin-1.62.0+dfsg/platform/nodejs/index.js --- ublock-origin-1.46.0+dfsg/platform/nodejs/index.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/nodejs/index.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify @@ -19,31 +19,40 @@ Home: https://github.com/gorhill/uBlock */ -/* globals WebAssembly */ +import * as s14e from './js/s14e-serializer.js'; +import * as sfp from './js/static-filtering-parser.js'; -'use strict'; - -/******************************************************************************/ +import { + CompiledListReader, + CompiledListWriter, +} from './js/static-filtering-io.js'; +import { + TextDecoder, + TextEncoder, +} from 'util'; +import { + dirname, + resolve +} from 'path'; +import { + domainToASCII, + fileURLToPath +} from 'url'; +import { FilteringContext } from './js/filtering-context.js'; +import { LineIterator } from './js/text-utils.js'; import { createRequire } from 'module'; - +import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js'; import { readFileSync } from 'fs'; -import { dirname, resolve } from 'path'; -import { domainToASCII, fileURLToPath } from 'url'; - -const __dirname = dirname(fileURLToPath(import.meta.url)); +import snfe from './js/static-net-filtering.js'; -import publicSuffixList from './lib/publicsuffixlist/publicsuffixlist.js'; +/******************************************************************************/ -import snfe from './js/static-net-filtering.js'; -import { FilteringContext } from './js/filtering-context.js'; -import { LineIterator } from './js/text-utils.js'; -import { StaticFilteringParser } from './js/static-filtering-parser.js'; +const __dirname = dirname(fileURLToPath(import.meta.url)); -import { - CompiledListReader, - CompiledListWriter, -} from './js/static-filtering-io.js'; +// https://stackoverflow.com/questions/69187442/const-utf8encoder-new-textencoder-in-node-js +globalThis.TextDecoder = TextDecoder; +globalThis.TextEncoder = TextEncoder; /******************************************************************************/ @@ -110,6 +119,7 @@ /******************************************************************************/ function compileList({ name, raw }, compiler, writer, options = {}) { + if ( typeof raw !== 'string' || raw === '' ) { return; } const lineIter = new LineIterator(raw); const events = Array.isArray(options.events) ? options.events : undefined; @@ -117,7 +127,9 @@ writer.properties.set('name', name); } - const { parser } = compiler; + const parser = new sfp.AstFilterParser({ + maxTokenLength: snfe.MAX_TOKEN_LENGTH, + }); while ( lineIter.eot() === false ) { let line = lineIter.next(); @@ -125,13 +137,10 @@ if ( lineIter.peek(4) !== ' ' ) { break; } line = line.slice(0, -2).trim() + lineIter.next().trim(); } - parser.analyze(line); - if ( parser.shouldIgnore() ) { continue; } - if ( parser.category !== parser.CATStaticNetFilter ) { continue; } - if ( parser.patternHasUnicode() && parser.toASCII() === false ) { - continue; - } - if ( compiler.compile(writer) ) { continue; } + parser.parse(line); + if ( parser.isFilter() === false ) { continue; } + if ( parser.isNetworkFilter() === false ) { continue; } + if ( compiler.compile(parser, writer) ) { continue; } if ( compiler.error !== undefined && events !== undefined ) { options.events.push({ type: 'error', @@ -164,7 +173,7 @@ if ( typeof compiled !== 'string' || compiled === '' ) { const writer = new CompiledListWriter(); if ( compiler === null ) { - compiler = snfe.createCompiler(new StaticFilteringParser()); + compiler = snfe.createCompiler(); } compiled = compileList(list, compiler, writer, options); } @@ -174,8 +183,7 @@ // Populate filtering engine with resolved filter lists const promises = []; for ( const list of lists ) { - const promise = list instanceof Promise ? list : Promise.resolve(list); - promises.push(promise.then(list => consumeList(list))); + promises.push(Promise.resolve(list).then(list => consumeList(list))); } useLists.promise = Promise.all(promises); @@ -219,6 +227,7 @@ } filterQuery(details) { + fctx.redirectURL = undefined; const directives = snfe.filterQuery(fctx.fromDetails(details)); if ( directives === undefined ) { return; } return { redirectURL: fctx.redirectURL, directives }; @@ -240,12 +249,14 @@ return compileList(...args); } - serialize() { - return snfe.serialize(); + async serialize() { + const data = snfe.serialize(); + return s14e.serialize(data, { compress: true }); } - deserialize(serialized) { - return snfe.unserialize(serialized); + async deserialize(serialized) { + const data = s14e.deserialize(serialized); + return snfe.unserialize(data); } static async create({ noPSL = false } = {}) { diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/README.md ublock-origin-1.62.0+dfsg/platform/npm/README.md --- ublock-origin-1.46.0+dfsg/platform/npm/README.md 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/README.md 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,170 @@ +# uBlock Origin Core + +The core filtering engines used in the uBlock Origin ("uBO") extension, and has +no external dependencies. + +## Installation + +Install: `npm install @gorhill/ubo-core` + +This is a very early version and the API is subject to change at any time. + +This package uses [native JavaScript modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules). + + +## Description + +The package contains uBO's static network filtering engine ("SNFE"), which +purpose is to parse and enforce filter lists. The matching algorithm is highly +efficient, and _especially_ optimized to match against large sets of pure +hostnames. + +The SNFE can be fed filter lists from a variety of sources, such as [EasyList/EasyPrivacy](https://easylist.to/), +[uBlock filters](https://github.com/uBlockOrigin/uAssets/tree/master/filters), +and also lists of domain names or hosts file format (i.e. block lists from [The Block List Project](https://github.com/blocklistproject/Lists#the-block-list-project), +[Steven Black's HOSTS](https://github.com/StevenBlack/hosts#readme), etc). + + +## Usage + +See `./demo.js` in package for instructions to quickly get started. + +At the moment, there can be only one instance of the static network filtering +engine ("SNFE"), which proxy API must be imported as follow: + +```js +import { StaticNetFilteringEngine } from '@gorhill/ubo-core'; +``` + +If you must import as a NodeJS module: + +```js +const { StaticNetFilteringEngine } = await import('@gorhill/ubo-core'); +``` + + +Create an instance of SNFE: + +```js +const snfe = await StaticNetFilteringEngine.create(); +``` + +Feed the SNFE with filter lists -- `useLists()` accepts an array of +objects (or promises to object) which expose the raw text of a list +through the `raw` property, and optionally the name of the list through the +`name` property (how you fetch the lists is up to you): + +```js +await snfe.useLists([ + fetch('easylist').then(r => r.text()).then(raw => ({ name: 'easylist', raw })), + fetch('easyprivacy').then(r => r.text()).then(raw => ({ name: 'easyprivacy', raw })), +]); +``` + +Now we are ready to match network requests: + +```js +// Not blocked +if ( snfe.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://www.bloomberg.com/tophat/assets/v2.6.1/that.css', + type: 'stylesheet' +}) !== 0 ) { + console.log(snfe.toLogData()); +} + +// Blocked +if ( snfe.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js', + type: 'script' +}) !== 0 ) { + console.log(snfe.toLogData()); +} + +// Unblocked +if ( snfe.matchRequest({ + originURL: 'https://www.bloomberg.com/', + url: 'https://sourcepointcmp.bloomberg.com/ccpa.js', + type: 'script' +}) !== 0 ) { + console.log(snfe.toLogData()); +} +``` + +Once all the filter lists are loaded into the static network filtering engine, +you can serialize the content of the engine into a JS string: + +```js +const serializedData = await snfe.serialize(); +``` + +You can save and later use that JS string to fast-load the content of the +static network filtering engine without having to parse and compile the lists: + +```js +const snfe = await StaticNetFilteringEngine.create(); +await snfe.deserialize(serializedData); +``` + +--- + +## Extras + +You can directly use specific APIs exposed by this package, here are some of +them, which are used internally by uBO's SNFE. + +### HNTrieContainer + +A well optimised [compressed trie](https://en.wikipedia.org/wiki/Trie#Compressing_tries) +container specialized to specifically store and lookup hostnames. + +The matching algorithm is designed for hostnames, i.e. the hostname labels +making up a hostname are matched from right to left, such that `www.example.org` +with be a match if `example.org` is stored into the trie, while +`anotherexample.org` won't be a match. + +`HNTrieContainer` is designed to store a large number of hostnames with CPU and +memory efficiency as a main concern -- and is a key component of uBO. + +To create and use a standalone `HNTrieContainer` object: + +```js +import HNTrieContainer from '@gorhill/ubo-core/js/hntrie.js'; + +const trieContainer = new HNTrieContainer(); + +const aTrie = trieContainer.createOne(); +trieContainer.add(aTrie, 'example.org'); +trieContainer.add(aTrie, 'example.com'); + +const anotherTrie = trieContainer.createOne(); +trieContainer.add(anotherTrie, 'foo.invalid'); +trieContainer.add(anotherTrie, 'bar.invalid'); + +// matches() return the position at which the match starts, or -1 when +// there is no match. + +// Matches: return 4 +console.log("trieContainer.matches(aTrie, 'www.example.org')", trieContainer.matches(aTrie, 'www.example.org')); + +// Does not match: return -1 +console.log("trieContainer.matches(aTrie, 'www.foo.invalid')", trieContainer.matches(aTrie, 'www.foo.invalid')); + +// Does not match: return -1 +console.log("trieContainer.matches(anotherTrie, 'www.example.org')", trieContainer.matches(anotherTrie, 'www.example.org')); + +// Matches: return 0 +console.log("trieContainer.matches(anotherTrie, 'foo.invalid')", trieContainer.matches(anotherTrie, 'foo.invalid')); +``` + +The `reset()` method must be used to remove all the tries from a trie container, +you can't remove a single trie from the container. + +```js +trieContainer.reset(); +``` + +When you reset a trie container, you can't use the reference to prior instances +of trie, i.e. `aTrie` and `anotherTrie` are no longer valid and shouldn't be +used following a reset. diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/demo.js ublock-origin-1.62.0+dfsg/platform/npm/demo.js --- ublock-origin-1.46.0+dfsg/platform/npm/demo.js 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/demo.js 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,121 @@ +/******************************************************************************* + * + * A simple demo to quickly get started. + * + * Command line: + * + * mkdir myproject + * cd myproject + * npm install @gorhill/ubo-core + * cp node_modules/@gorhill/ubo-core/demo.js . + * + * There will be a `demo.js` file in your `myproject` folder, which you can + * modify and execute: + * + * node demo.js + * + * Since the demo here uses ES module syntax, you may want to add the following + * to the generated package.json file to avoid the warning: + * + * "type": "module", + * + * The demo will fetch filter lists from EasyList server, then serialize the + * content of the static network filtering engine into a local `./cache/` + * folder. + * + * The serialized data will be reused if available in order to avoid fetching + * from remote server each time it is executed. + * + * This demo is kept as simple as possible, so there is not a lot of error + * handling. + * + * */ + +import fs from 'fs/promises'; +import { StaticNetFilteringEngine } from '@gorhill/ubo-core'; + +/******************************************************************************/ + +async function fetchList(name, url) { + return fetch(url).then(r => { + return r.text(); + }).then(raw => { + console.log(`${name} fetched`); + return { name, raw }; + }).catch(reason => { + console.error(reason); + }); +} + +async function main() { + const pathToSelfie = 'cache/selfie.txt'; + + const snfe = await StaticNetFilteringEngine.create(); + + // Up to date serialization data (aka selfie) available? + let selfie; + const ageInDays = await fs.stat(pathToSelfie).then(stat => { + const fileDate = new Date(stat.mtime); + return (Date.now() - fileDate.getTime()) / (7 * 24 * 60 * 60); + }).catch(( ) => Number.MAX_SAFE_INTEGER); + + // Use a selfie if available and not older than 7 days + if ( ageInDays <= 7 ) { + selfie = await fs.readFile(pathToSelfie, { encoding: 'utf8' }) + .then(data => typeof data === 'string' && data !== '' && data) + .catch(( ) => { }); + if ( typeof selfie === 'string' ) { + await snfe.deserialize(selfie); + } + } + + // Fetch filter lists if no up to date selfie available + if ( !selfie ) { + console.log(`Fetching lists...`); + await snfe.useLists([ + fetchList('ubo-ads', 'https://ublockorigin.github.io/uAssetsCDN/filters/filters.min.txt'), + fetchList('ubo-badware', 'https://ublockorigin.github.io/uAssetsCDN/filters/badware.min.txt'), + fetchList('ubo-privacy', 'https://ublockorigin.github.io/uAssetsCDN/filters/privacy.min.txt'), + fetchList('ubo-unbreak', 'https://ublockorigin.github.io/uAssetsCDN/filters/unbreak.min.txt'), + fetchList('ubo-quick', 'https://ublockorigin.github.io/uAssetsCDN/filters/quick-fixes.min.txt'), + fetchList('easylist', 'https://easylist.to/easylist/easylist.txt'), + fetchList('easyprivacy', 'https://easylist.to/easylist/easyprivacy.txt'), + fetchList('plowe', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext'), + ]); + const selfie = await snfe.serialize(); + await fs.mkdir('cache', { recursive: true }); + await fs.writeFile(pathToSelfie, selfie); + } + + // List of tests to perform + const tests = [ + { + originURL: 'https://www.bloomberg.com/', + url: 'https://www.google-analytics.com/gs.js', + type: 'script', + }, { + originURL: 'https://www.bloomberg.com/', + url: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js', + type: 'script', + }, { + originURL: 'https://www.bloomberg.com/', + url: 'https://bloomberg.com/main.css', + type: 'stylesheet', + } + ]; + + // Test each entry for a match against the content of the engine + for ( const test of tests ) { + console.log('\nRequest details:', test); + const r = snfe.matchRequest(test); + if ( r === 1 ) { // Blocked + console.log('Blocked:', snfe.toLogData()); + } else if ( r === 2 ) { // Unblocked + console.log('Unblocked:', snfe.toLogData()); + } else { // Not blocked + console.log('Not blocked'); + } + } +} + +main(); diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/package-lock.json ublock-origin-1.62.0+dfsg/platform/npm/package-lock.json --- ublock-origin-1.46.0+dfsg/platform/npm/package-lock.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/package-lock.json 2025-02-09 18:18:39.000000000 +0000 @@ -242,12 +242,15 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/browser-stdout": { @@ -683,12 +686,15 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/find-up": { @@ -892,7 +898,10 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, "node_modules/is-path-inside": { "version": "3.0.3", @@ -1062,15 +1071,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1398,6 +1398,15 @@ "resolved": "git+ssh://git@github.com/mjethani/scaling-palm-tree.git#15cf1ab37e038771e1ff8005edc46d95f176739f", "dev": true }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -1481,6 +1490,9 @@ "dev": true, "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, "node_modules/type-check": { @@ -1537,10 +1549,13 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/workerpool": { "version": "6.2.1", @@ -1818,12 +1833,12 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browser-stdout": { @@ -2202,9 +2217,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -2532,14 +2547,6 @@ "dev": true, "requires": { "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "minimatch": { @@ -2808,6 +2815,12 @@ "dev": true, "from": "scaling-palm-tree@github:mjethani/scaling-palm-tree#15cf1ab37e038771e1ff8005edc46d95f176739f" }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, "serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -2935,9 +2948,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, "workerpool": { diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/package.json ublock-origin-1.62.0+dfsg/platform/npm/package.json --- ublock-origin-1.46.0+dfsg/platform/npm/package.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/package.json 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ { "name": "@gorhill/ubo-core", - "version": "0.1.26", + "version": "0.1.30", "description": "To create a working instance of uBlock Origin's static network filtering engine", "type": "module", "main": "index.js", @@ -31,7 +31,7 @@ }, "homepage": "https://github.com/gorhill/uBlock#readme", "engines": { - "node": ">=14.0.0", + "node": ">=18.0.0", "npm": ">=6.14.4" }, "devDependencies": { diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/test.js ublock-origin-1.62.0+dfsg/platform/npm/test.js --- ublock-origin-1.46.0+dfsg/platform/npm/test.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/test.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/tests/_common.js ublock-origin-1.62.0+dfsg/platform/npm/tests/_common.js --- ublock-origin-1.46.0+dfsg/platform/npm/tests/_common.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/tests/_common.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/tests/leaks.js ublock-origin-1.62.0+dfsg/platform/npm/tests/leaks.js --- ublock-origin-1.46.0+dfsg/platform/npm/tests/leaks.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/tests/leaks.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/tests/request-data.js ublock-origin-1.62.0+dfsg/platform/npm/tests/request-data.js --- ublock-origin-1.46.0+dfsg/platform/npm/tests/request-data.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/tests/request-data.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/tests/snfe.js ublock-origin-1.62.0+dfsg/platform/npm/tests/snfe.js --- ublock-origin-1.46.0+dfsg/platform/npm/tests/snfe.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/tests/snfe.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/npm/tests/wasm.js ublock-origin-1.62.0+dfsg/platform/npm/tests/wasm.js --- ublock-origin-1.46.0+dfsg/platform/npm/tests/wasm.js 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/npm/tests/wasm.js 2025-02-09 18:18:39.000000000 +0000 @@ -1,6 +1,6 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. + uBlock Origin - a comprehensive, efficient content blocker Copyright (C) 2014-present Raymond Hill This program is free software: you can redistribute it and/or modify diff -Nru ublock-origin-1.46.0+dfsg/platform/opera/manifest.json ublock-origin-1.62.0+dfsg/platform/opera/manifest.json --- ublock-origin-1.46.0+dfsg/platform/opera/manifest.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/opera/manifest.json 2025-02-09 18:18:39.000000000 +0000 @@ -6,7 +6,8 @@ "browser_action": { "default_icon": { "16": "img/icon_16.png", - "32": "img/icon_32.png" + "32": "img/icon_32.png", + "64": "img/icon_64.png" }, "default_popup": "popup-fenix.html", "default_title": "uBlock Origin" @@ -29,6 +30,9 @@ }, "toggle-cosmetic-filtering": { "description": "__MSG_toggleCosmeticFiltering__" + }, + "toggle-javascript": { + "description": "__MSG_toggleJavascript__" } }, "content_scripts": [ @@ -53,14 +57,25 @@ "https://filterlists.com/*", "https://forums.lanik.us/*", "https://github.com/*", - "https://*.github.io/*", - "https://*.letsblock.it/*" + "https://*.github.io/*" ], "js": [ "/js/scriptlets/subscriber.js" ], "run_at": "document_idle", "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false } ], "default_locale": "en", @@ -73,10 +88,11 @@ }, "incognito": "split", "manifest_version": 2, - "minimum_opera_version": "53.0", + "minimum_opera_version": "67.0", "name": "uBlock Origin", "options_page": "dashboard.html", "permissions": [ + "alarms", "contextMenus", "privacy", "storage", diff -Nru ublock-origin-1.46.0+dfsg/platform/thunderbird/manifest.json ublock-origin-1.62.0+dfsg/platform/thunderbird/manifest.json --- ublock-origin-1.46.0+dfsg/platform/thunderbird/manifest.json 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/platform/thunderbird/manifest.json 2025-02-09 18:18:39.000000000 +0000 @@ -1,8 +1,8 @@ { - "applications": { + "browser_specific_settings": { "gecko": { "id": "uBlock0@raymondhill.net", - "strict_min_version": "78.0" + "strict_min_version": "91.0" } }, "author": "Raymond Hill & contributors", @@ -41,14 +41,25 @@ "https://filterlists.com/*", "https://forums.lanik.us/*", "https://github.com/*", - "https://*.github.io/*", - "https://*.letsblock.it/*" + "https://*.github.io/*" ], "js": [ "/js/scriptlets/subscriber.js" ], "run_at": "document_idle", "all_frames": false + }, + { + "matches": [ + "https://github.com/uBlockOrigin/*", + "https://ublockorigin.github.io/*", + "https://*.reddit.com/r/uBlockOrigin/*" + ], + "js": [ + "/js/scriptlets/updater.js" + ], + "run_at": "document_idle", + "all_frames": false } ], "default_locale": "en", @@ -66,6 +77,7 @@ "open_in_tab": true }, "permissions": [ + "alarms", "privacy", "storage", "tabs", diff -Nru ublock-origin-1.46.0+dfsg/src/1p-filters.html ublock-origin-1.62.0+dfsg/src/1p-filters.html --- ublock-origin-1.46.0+dfsg/src/1p-filters.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/1p-filters.html 2025-02-09 18:18:39.000000000 +0000 @@ -6,7 +6,6 @@ uBlock — Your filters - @@ -23,17 +22,18 @@
- -

question-circle

-   +  

+

+
+
-
+
@@ -44,7 +44,6 @@ - @@ -52,14 +51,14 @@ - - - - - + + + + + diff -Nru ublock-origin-1.46.0+dfsg/src/3p-filters.html ublock-origin-1.62.0+dfsg/src/3p-filters.html --- ublock-origin-1.46.0+dfsg/src/3p-filters.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/3p-filters.html 2025-02-09 18:18:39.000000000 +0000 @@ -17,11 +17,10 @@
-
- +

+ - -

+

@@ -39,44 +38,75 @@
-
-
+
+ +
+ +
search
+
+
- diff -Nru ublock-origin-1.46.0+dfsg/src/advanced-settings.html ublock-origin-1.62.0+dfsg/src/advanced-settings.html --- ublock-origin-1.46.0+dfsg/src/advanced-settings.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/advanced-settings.html 2025-02-09 18:18:39.000000000 +0000 @@ -23,13 +23,13 @@
-
+
- + diff -Nru ublock-origin-1.46.0+dfsg/src/asset-viewer.html ublock-origin-1.62.0+dfsg/src/asset-viewer.html --- ublock-origin-1.46.0+dfsg/src/asset-viewer.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/asset-viewer.html 2025-02-09 18:18:39.000000000 +0000 @@ -5,9 +5,8 @@ - - + @@ -17,31 +16,31 @@
- + spinner
-
+
- - - - - + + + + + diff -Nru ublock-origin-1.46.0+dfsg/src/code-viewer.html ublock-origin-1.62.0+dfsg/src/code-viewer.html --- ublock-origin-1.46.0+dfsg/src/code-viewer.html 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/code-viewer.html 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,53 @@ + + + + + +Code viewer + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru ublock-origin-1.46.0+dfsg/src/css/1p-filters.css ublock-origin-1.62.0+dfsg/src/css/1p-filters.css --- ublock-origin-1.46.0+dfsg/src/css/1p-filters.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/1p-filters.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,6 @@ html { height: 100vh; + height: 100svh; overflow: hidden; width: 100vw; } @@ -9,15 +10,24 @@ height: 100%; justify-content: stretch; overflow: hidden; + overflow-y: auto; width: 100%; } .body { flex-shrink: 0; } +/* https://github.com/uBlockOrigin/uBlock-issues/issues/3058 */ +:root.mobile body { + min-height: unset; + } +html:not(.mobile) [data-i18n="1pTrustWarning"] { + font-weight: bold; + } .codeMirrorContainer { flex-grow: 1; } #userFilters { + min-height: 8em; text-align: left; word-wrap: normal; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/3p-filters.css ublock-origin-1.62.0+dfsg/src/css/3p-filters.css --- ublock-origin-1.46.0+dfsg/src/css/3p-filters.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/3p-filters.css 2025-02-09 18:18:39.000000000 +0000 @@ -7,7 +7,6 @@ } #actions { background-color: var(--surface-1); - padding: var(--default-gap-small) 0 var(--default-gap-xsmall) 0; position: sticky; top: 0; z-index: 10; @@ -15,141 +14,216 @@ #buttonUpdate.active { pointer-events: none; } -#buttonUpdate.active .fa-icon svg { +#buttonUpdate.active .fa-icon svg, +body.working #buttonUpdate:not(.disabled) .fa-icon svg { animation: spin 1s linear infinite; transform-origin: 50%; } -#listsOfBlockedHostsPrompt { - cursor: pointer; + +body.updating #actions, +body.working #actions { + cursor: progress; } -#lists { - margin: 0.5em 0 0 0; - padding: 0; +body.updating #actions #buttonUpdate, +body.working #actions button { + pointer-events: none; } -#listsOfBlockedHostsPrompt::before, -.groupEntry:not([data-groupkey="user"]) .geDetails::before { - color: var(--ink-3); - content: '\2212'; - font-family: monospace; - font-size: large; - margin-inline-end: 0.25em; - -webkit-margin-end: 0.25em; - } -body.hideUnused #listsOfBlockedHostsPrompt::before, -.groupEntry.hideUnused:not([data-groupkey="user"]) .geDetails::before { - content: '+'; + +.listExpander { + font-size: 18px; + padding: 0; } -.groupEntry { - margin: 0.5em 0; +.listExpander:first-child { + justify-content: flex-start; + min-width: 20px; + } +.listExpander:not(:first-child) { + color: var(--checkbox-checked-ink); + fill: var(--checkbox-checked-ink); } -.groupEntry .geDetails { - cursor: pointer; +.listExpander svg { + transform: rotate(90deg); + transform-origin: 50%; } -.groupEntry .geName { - pointer-events: none; + +#lists .fa-icon:hover { + transform: scale(1.25); } -.groupEntry .geCount { - color: var(--ink-3); - font-size: 90%; - pointer-events: none; + +#lists .rootstats.expanded .listExpander svg { + transform: rotate(180deg); } -.listEntries { - margin-inline-start: 0.6em; - -webkit-margin-start: 0.6em; + +#lists .searchfield { + margin-block-start: calc(var(--font-size) * 0.75); + margin-inline-start: var(--checkbox-size); + } +#lists.searchMode > .listEntries .listEntries, +#lists.searchMode > .listEntries .listEntry.searchMatch { + display: flex !important; } -.groupEntry:not([data-groupkey="user"]) .listEntry:not(.isDefault).unused { +#lists.searchMode > .listEntries .listEntry { display: none; } -.listEntry > * { - margin-left: 0; - margin-right: 0; - unicode-bidi: embed; +#lists.searchMode > .listEntries .listExpander { + visibility: hidden; + } + +#listsOfBlockedHostsPrompt { + cursor: pointer; } -.listEntry .listname { + +#lists .listEntries { + display: flex; + flex-direction: column; + margin-inline-start: var(--checkbox-size); + } +#lists > .listEntries { + margin-inline-start: 0; + } +#lists .listEntry { + align-items: flex-start; + flex-direction: column; + margin-bottom: 0; + margin-inline-start: 0; white-space: nowrap; } -.listEntry.toRemove .checkbox { - visibility: hidden; +#lists .listEntry[data-key="user"] { + margin-top: 0; } -.listEntry.toRemove .listname { - text-decoration: line-through; +#lists .listEntry > .detailbar { + column-gap: calc(var(--default-gap-xxsmall) + 2px); + display: inline-flex; + } +#lists .listEntry[data-key="user"] > .detailbar { + display: none; + } +#lists .listEntry[data-role="node"].expanded > .detailbar .listExpander svg { + transform: rotate(180deg); + } +#lists .listEntry[data-parent="root"]:not(.expanded) > .listEntries > .listEntry:not(.checked):not(.isDefault):not(.stickied) { + display: none; + } +#lists .listEntry:not([data-parent="root"]):not(.expanded) > .listEntries > .listEntry { + display: none; } -.listEntry a, -.listEntry .fa-icon, -.listEntry .counts { +#lists .nodestats { + align-self: flex-end; color: var(--info0-ink); fill: var(--info0-ink); - display: none; + cursor: default; + font-size: var(--font-size-smaller); +} +#lists .iconbar { + column-gap: var(--default-gap-xxsmall); + color: var(--info0-ink); + fill: var(--info0-ink); + display: inline-flex; + flex-direction: row; font-size: 120%; - margin: 0 0.2em 0 0; } -.listEntry .fa-icon:hover { - transform: scale(1.25); +#lists .iconbar a { + color: var(--info0-ink); + fill: var(--info0-ink); } -.listEntry .content { +#lists .iconbar .fa-icon { + display: none; + } +#lists .iconbar .content { display: inline-flex; } -.listEntry a.towiki { +#lists .iconbar a.towiki { display: inline-flex; } -.listEntry.support a.support { +#lists .listEntry > .detailbar .iconbar a.support { display: inline-flex; } -.listEntry .remove, -.listEntry .unsecure, -.listEntry .failed { +#lists .listEntry > .detailbar .iconbar a.support[href="#"] { + display: none; + } +#lists .iconbar .remove, +#lists .iconbar .unsecure, +#lists .iconbar .failed { color: var(--info3-ink); fill: var(--info3-ink); cursor: pointer; } -.listEntry.external .remove { +#lists .listEntry.external > .detailbar .iconbar .remove { display: inline-flex; } -.listEntry.mustread a.mustread { +#lists .listEntry > .detailbar .iconbar a.mustread { color: var(--info1-ink); fill: var(--info1-ink); display: inline-flex; } -.listEntry .counts { - font-size: smaller; +#lists .listEntry > .detailbar .iconbar a.mustread[href="#"] { + display: none; + } +#lists .listEntry .leafstats { + align-items: flex-end; + color: var(--info0-ink); + fill: var(--info0-ink); + display: none; + font-size: var(--font-size-xsmall); + margin-inline-start: calc(var(--checkbox-size) + var(--checkbox-margin-end)); } -.listEntry.checked .counts { - display: inline-block; +#lists .listEntry > .detailbar .leafstats { + margin-inline-start: 0; + } +#lists .listEntry.checked > .leafstats, +#lists .listEntry.checked > .detailbar .leafstats { + display: inline-flex; } -.listEntry .status { +#lists .iconbar .status { cursor: default; display: none; } -.listEntry.checked.unsecure .unsecure { +#lists .listEntry.checked.unsecure > .detailbar .iconbar .unsecure { display: inline-flex; } -.listEntry.failed .failed { +#lists .listEntry.failed > .detailbar .iconbar .failed { display: inline-flex; } -.listEntry .cache { +#lists .iconbar .cache { cursor: pointer; } -.listEntry.checked.cached:not(.obsolete) .cache { +#lists .listEntry.checked.cached:not(.obsolete) > .detailbar .iconbar .cache { display: inline-flex; } -.listEntry .obsolete { +#lists .listEntry.cached.recent:not(.obsolete) > .detailbar .iconbar .cache { + color: var(--dashboard-happy-green); + fill: var(--dashboard-happy-green); + } +#lists .iconbar .obsolete { color: var(--info2-ink); fill: var(--info2-ink); } -body:not(.updating) .listEntry.checked.obsolete .obsolete { +body:not(.updating,.working) #lists .listEntry.checked.obsolete > .detailbar .iconbar .obsolete { display: inline-flex; } -.listEntry .updating { +#lists .iconbar .updating { transform-origin: 50%; } -body.updating .listEntry.checked.obsolete .updating { +body.updating #lists .listEntry.checked.obsolete > .detailbar .iconbar .updating, +body.working #lists .listEntry.checked.obsolete:not(.cached) > .detailbar .iconbar .updating { animation: spin 1s steps(8) infinite; display: inline-flex; } -.listEntry.toImport { - margin: 0.5em 0; + +#lists .listEntry.toRemove .checkbox { + visibility: hidden; } -.listEntry.toImport textarea { +#lists .listEntry.toRemove .listname { + text-decoration: line-through; + } + +#lists .listEntry[data-role="import"].expanded .listExpander svg { + transform: rotate(180deg); + } +#lists .listEntry[data-role="import"].expanded textarea { + visibility: visible; + } +#lists .listEntry[data-role="import"] textarea { border: 1px solid #ccc; box-sizing: border-box; display: block; @@ -161,32 +235,3 @@ white-space: pre; width: 100%; } -.listEntry.toImport.checked textarea { - visibility: visible; - } - -/* touch-screen devices */ -:root.mobile .listEntry .fa-icon { - font-size: 120%; - margin: 0 0.5em 0 0; - } -:root.mobile .listEntries { - margin-inline-start: 0; - -webkit-margin-start: 0; - } -:root.mobile .li.listEntry { - /* background-color: var(--bg-1); */ - overflow-x: auto; - } -:root.mobile .li.listEntry label > span:not([class]) { - flex-grow: 1; - } -:root.mobile .li.listEntry .listname, -:root.mobile .li.listEntry .iconbar { - align-items: flex-start; - display: flex; - white-space: nowrap; - } -:root.mobile .li.listEntry .iconbar { - margin-top: 0.2em; - } diff -Nru ublock-origin-1.46.0+dfsg/src/css/advanced-settings.css ublock-origin-1.62.0+dfsg/src/css/advanced-settings.css --- ublock-origin-1.46.0+dfsg/src/css/advanced-settings.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/advanced-settings.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,6 @@ html { height: 100vh; + height: 100svh; overflow: hidden; width: 100vw; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/asset-viewer.css ublock-origin-1.62.0+dfsg/src/css/asset-viewer.css --- ublock-origin-1.46.0+dfsg/src/css/asset-viewer.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/asset-viewer.css 2025-02-09 18:18:39.000000000 +0000 @@ -23,6 +23,7 @@ display: flex; flex-direction: column; height: 100vh; + height: 100svh; margin: 0; overflow: hidden; padding: 0; diff -Nru ublock-origin-1.46.0+dfsg/src/css/code-viewer.css ublock-origin-1.62.0+dfsg/src/css/code-viewer.css --- ublock-origin-1.46.0+dfsg/src/css/code-viewer.css 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/code-viewer.css 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,68 @@ +body { + border: 0; + display: flex; + flex-direction: column; + height: 100vh; + height: 100svh; + margin: 0; + overflow: hidden; + padding: 0; + width: 100vw; + } +#header { + background-color: var(--cm-gutter-surface); + border-bottom: 1px solid var(--surface-1); + padding: var(--default-gap-xsmall); + position: relative; + z-index: 1000000; + } +#header input[type="url"] { + box-sizing: border-box; + font-size: var(--font-size-smaller); + width: 100%; + } +#header:focus-within #pastURLs { + display: flex; + } +#currentURL { + display: flex; + gap: 0.5rem; + } +#currentURL > .fa-icon { + padding: 0 0.5rem; + } +#currentURL > .fa-icon:hover { + background-color: var(--surface-3); + } +#pastURLs { + background-color: var(--surface-0); + border: 1px solid var(--border-1); + display: none; + flex-direction: column; + font-size: var(--font-size-smaller); + position: absolute; + } +#pastURLs > span { + cursor: pointer; + overflow: hidden; + padding: 2px 4px; + text-overflow: ellipsis; + white-space: nowrap; + width: 75vw; + } +#pastURLs > span.selected { + font-weight: bold; + } +#pastURLs > span:hover { + background-color: var(--surface-1); + } +#content { + flex-grow: 1; + } + +.cm-href { + cursor: pointer; + } +.cm-href:hover { + text-decoration: underline; + } diff -Nru ublock-origin-1.46.0+dfsg/src/css/codemirror.css ublock-origin-1.62.0+dfsg/src/css/codemirror.css --- ublock-origin-1.46.0+dfsg/src/css/codemirror.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/codemirror.css 2025-02-09 18:18:39.000000000 +0000 @@ -3,6 +3,13 @@ overflow: hidden; position: relative; } +.codeMirrorContainer.cm-maximized { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + } .CodeMirror { background-color: var(--surface-0); box-sizing: border-box; @@ -23,8 +30,15 @@ } .CodeMirror-foldmarker { color: var(--cm-foldmarker-ink); - font-size: large; - text-shadow: none; + cursor: pointer; + font-family: sans-serif; + font-weight: bold; + } +.CodeMirror-foldgutter-folded::after { + content: '\25B6'; + } +.CodeMirror-foldgutter-open::after { + content: '\25BC'; } .CodeMirror-gutters { background-color: var(--cm-gutter-surface); @@ -68,59 +82,67 @@ word-break: break-all; } -.cm-s-default .cm-comment { +.cm-theme-override .cm-s-default .cm-comment { color: var(--sf-comment-ink); } -.cm-s-default .cm-def { +.cm-theme-override .cm-s-default .cm-def { color: var(--sf-def-ink); } -.cm-s-default .cm-directive { +.cm-theme-override .cm-s-default .cm-directive { color: var(--sf-directive-ink); font-weight: bold; } -.cm-s-default .cm-error { +.cm-theme-override .cm-s-default .cm-error { color: inherit; } -.cm-s-default .cm-error, +.cm-theme-override .cm-s-default .cm-error, .CodeMirror-linebackground.error { background-color: var(--sf-error-surface); - text-decoration: underline var(--sf-error-ink); - text-underline-position: under; + text-decoration: var(--sf-error-ink) dashed underline; } -.cm-s-default .cm-link { +.cm-theme-override .cm-s-default .cm-link { text-decoration: none; } -.cm-s-default .cm-link:hover { +.cm-theme-override .cm-s-default .cm-link:hover { color: var(--link-ink); } -.cm-s-default .cm-keyword { +.cm-theme-override .cm-s-default .cm-keyword { color: var(--sf-keyword-ink); } -.cm-s-default .cm-negative { +.cm-theme-override .cm-s-default .cm-negative { color: var(--cm-negative); } -.cm-s-default .cm-positive { +.cm-theme-override .cm-s-default .cm-positive { color: var(--cm-positive); } -.cm-s-default .cm-notice { - text-underline-position: under; +.cm-theme-override .cm-s-default .cm-notice { text-decoration-color: var(--sf-notice-ink); text-decoration-style: solid; text-decoration-line: underline; } -.cm-s-default .cm-tag { +.cm-theme-override .cm-s-default .cm-unicode { + text-decoration-color: var(--sf-unicode-ink); + text-decoration-style: dashed; + text-decoration-line: underline; + } +.cm-theme-override .cm-s-default .cm-tag { color: var(--sf-tag-ink); } -.cm-s-default .cm-value { color: var(--sf-value-ink); } -.cm-s-default .cm-variable { +.cm-theme-override .cm-s-default .cm-value { + color: var(--sf-value-ink); + } +.cm-theme-override .cm-s-default .cm-variable { color: var(--sf-variable-ink); } -.cm-s-default .cm-warning { +.cm-theme-override .cm-s-default .CodeMirror-activeline .cm-ext-js .cm-variable { + text-decoration: underline color-mix(in srgb, var(--sf-variable-ink) 30%, transparent) solid 3px; + text-decoration-skip-ink: none; + } +.cm-theme-override .cm-s-default .cm-warning { background-color: var(--sf-warning-surface); text-decoration: underline var(--sf-warning-ink); - text-underline-position: under; } -.cm-s-default .cm-readonly { +.cm-theme-override .cm-s-default .cm-readonly { color: var(--sf-readonly-ink); } @@ -142,58 +164,108 @@ } .cm-search-widget { - align-items: center; background-color: var(--cm-gutter-surface); border-bottom: 1px solid var(--cm-gutter-border); cursor: default; direction: ltr; display: flex; flex-shrink: 0; + flex-wrap: wrap; justify-content: space-between; - padding: 0.5em; + line-height: 1.5; + padding: var(--default-gap-xsmall); + row-gap: var(--default-gap-xsmall); user-select: none; -moz-user-select: none; -webkit-user-select: none; z-index: 1000; } +.cm-search-widget > * { + flex-grow: 1; + } +.cm-search-widget > :last-child { + text-align: end; + } + +.cm-search-widget .cm-maximize { + fill: none; + flex-grow: 0; + font-size: 130%; + height: 1em; + stroke-width: 3px; + stroke: var(--ink-0); + width: 1em; + } +.cm-search-widget .cm-maximize * { + pointer-events: none; + } +.codeMirrorContainer[data-maximizable="false"] .cm-search-widget .cm-maximize { + display: none; + } +.codeMirrorContainer .cm-search-widget .cm-maximize svg > path:nth-child(2), +.codeMirrorContainer.cm-maximized .cm-search-widget .cm-maximize svg > path:nth-child(1) { + display: none; + } +.codeMirrorContainer.cm-maximized .cm-search-widget .cm-maximize svg > path:nth-child(2) { + display: initial; + } +html:not(.mobile) .cm-search-widget .cm-maximize:hover { + transform: scale(1.2); + } + .cm-search-widget-input { display: inline-flex; flex-grow: 1; + flex-wrap: nowrap; } .cm-search-widget .fa-icon { - fill: var(--cm-gutter-ink); font-size: 140%; } -.cm-search-widget .fa-icon:not(.fa-icon-ro):hover { - fill: var(--ink-1); +html:not(.mobile) .cm-search-widget .fa-icon:not(.fa-icon-ro):hover { + transform: scale(1.2); } .cm-search-widget-input input { - border: 1px solid var(--cm-gutter-ink); - display: inline-flex; flex-grow: 1; - max-width: 16em; + max-width: min(16em, 40svw); } .cm-search-widget-count { align-items: center; display: inline-flex; flex-grow: 0; - font-size: 95%; - min-width: 6em; + font-size: var(--font-size-smaller); visibility: hidden; } -.cm-search-widget[data-query] .cm-search-widget-count:not(:empty) { +.cm-search-widget[data-query] .cm-search-widget-count { visibility: visible; } -.cm-search-widget .cm-search-widget-button:hover { - color: #000; +.cm-search-widget[data-query] .cm-search-widget-count:empty { + visibility: hidden; } .cm-search-widget .sourceURL[href=""] { display: none; } +:root.mobile .cm-search-widget .sourceURL[href=""] { + display: none; + } + +.cm-linter-widget { + align-items: center; + display: none; + flex-grow: 1; + } +.cm-linter-widget:not([data-lint="0"]) { + display: inline-flex; + } +.cm-linter-widget .cm-linter-widget-count { + color: var(--accent-surface-1); + fill: var(--accent-surface-1); + font-size: var(--font-size-smaller); + } + .cm-searching.cm-overlay { - background-color: var(--cm-searching-surface); + background-color: var(--cm-searching-surface) !important; border: 0; - color: var(--cm-searching-ink); + color: var(--cm-searching-ink) !important; } .CodeMirror-merge { @@ -239,3 +311,48 @@ .CodeMirror-activeline-background { background-color: var(--cm-active-line); } + +.CodeMirror-lintmarker { + height: calc(var(--font-size) - 2px); + margin-top: 1px; + position: relative; + } +.CodeMirror-lintmarker > * { + position: absolute; + } +.CodeMirror-lintmarker[data-error="y"] { + background-color: var(--sf-error-ink); + } +.CodeMirror-lintmarker .msg { + background-color: var(--surface-0); + border: 1px solid var(--sf-error-ink); + color: var(--ink-1); + display: none; + filter: drop-shadow(2px 2px 4px #0008); + left: 100%; + padding: var(--default-gap-xsmall); + top: -2px; + white-space: pre; + } +.CodeMirror-lintmarker svg { + height: 70%; + left: 15%; + top: 15%; + width: 70%; + } +.CodeMirror-lintmarker[data-error="y"] svg { + display: none; + } +.CodeMirror-lintmarker[data-fold="start"] { + fill: var(--cm-foldmarker-ink); + } +.CodeMirror-lintmarker[data-fold="start"].folded svg { + transform: rotate(-90deg); + } +.CodeMirror-lintmarker[data-fold="end"] { + fill: var(--border-2); + } +.CodeMirror-lintmarker[data-error="y"]:hover > span, +.CodeMirror-lintmarker[data-error="y"] > span:hover { + display: initial; + } diff -Nru ublock-origin-1.46.0+dfsg/src/css/common.css ublock-origin-1.62.0+dfsg/src/css/common.css --- ublock-origin-1.46.0+dfsg/src/css/common.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/common.css 2025-02-09 18:18:39.000000000 +0000 @@ -52,11 +52,11 @@ margin: 0; padding: 0; } -a { +a:not(.fa-icon) { color: var(--link-ink); fill: var(--link-ink); } -a:hover { +a:not(.fa-icon):hover { color: var(--link-hover-ink); fill: var(--link-hover-ink); } @@ -85,7 +85,7 @@ color: var(--button-ink); display: inline-flex; fill: var(--button-ink); - font-size: 14px; + font-size: max(calc(var(--font-size) * 0.875), 14px); justify-content: center; min-height: 36px; padding: 0 var(--font-size); @@ -174,14 +174,13 @@ - To have a single checkbox design across all platforms. */ .checkbox { - --margin-end: calc(var(--font-size) * 0.75); box-sizing: border-box; display: inline-flex; flex-shrink: 0; height: var(--checkbox-size); margin: 0; - margin-inline-end: var(--margin-end); - -webkit-margin-end: var(--margin-end); + margin-inline-end: var(--checkbox-margin-end); + -webkit-margin-end: var(--checkbox-margin-end); position: relative; width: var(--checkbox-size); } @@ -219,6 +218,11 @@ .checkbox[disabled] ~ span { filter: var(--checkbox-disabled-filter); } +.checkbox.partial > input[type="checkbox"]:checked + svg { + background-color: var(--surface-1); + border-color: var(--checkbox-checked-ink); + stroke: var(--checkbox-checked-ink); + } .radio { --margin-end: calc(var(--font-size) * 0.75); @@ -267,6 +271,24 @@ padding: 2px; } +.searchfield { + align-items: center; + column-gap: var(--default-gap-xxsmall); + display: inline-flex; + position: relative; + } +.searchfield .fa-icon { + color: var(--ink-4); + fill: var(--ink-4); + font-size: 1em !important; + left: 2px; + position: absolute; + transform: none; + } +.searchfield input:not(:placeholder-shown) ~ .fa-icon { + display: none; + } + .hidden { display: none; height: 0; @@ -305,11 +327,18 @@ font-size: 1.2rem; padding: 0; } - button.iconified > [data-i18n] { + button.iconified:not(.dontshrink) > [data-i18n] { display: none; } } +.countryFlag { + height: var(--font-size); + position: relative; + top: calc(var(--font-size) / 7); + max-width: calc(var(--font-size) * 1.5); + } + .logo { align-items: center; display: inline-flex; @@ -320,6 +349,22 @@ width: 100%; } +.wikilink[href=""] { + display: none; + } +.wikilink.fa-icon { + color: var(--info0-ink); + fill: var(--info0-ink); + padding: var(--default-gap-xxsmall) var(--default-gap-xsmall); + } +.wikilink.fa-icon:hover { + transform: scale(1.2); + } +.wikilink.fa-icon > svg { + height: 1.25rem; + width: 1.25rem; + } + /* high dpi devices */ :root.hidpi button { font-family: Metropolis, sans-serif; diff -Nru ublock-origin-1.46.0+dfsg/src/css/dashboard-common.css ublock-origin-1.62.0+dfsg/src/css/dashboard-common.css --- ublock-origin-1.46.0+dfsg/src/css/dashboard-common.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/dashboard-common.css 2025-02-09 18:18:39.000000000 +0000 @@ -25,7 +25,7 @@ color: var(--info2-ink); fill: var(--info2-ink); } -.fa-icon.info.very-important { +.info.very-important { color: var(--info3-ink); fill: var(--info3-ink); } diff -Nru ublock-origin-1.46.0+dfsg/src/css/dashboard.css ublock-origin-1.62.0+dfsg/src/css/dashboard.css --- ublock-origin-1.46.0+dfsg/src/css/dashboard.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/dashboard.css 2025-02-09 18:18:39.000000000 +0000 @@ -2,17 +2,22 @@ display: flex; flex-direction: column; height: 100vh; + height: 100svh; justify-content: stretch; overflow: hidden; position: relative; width: 100vw; } +body.notReady { + display: none; + } #dashboard-nav { + align-items: center; border: 0; border-bottom: 1px solid var(--border-1); display: flex; flex-shrink: 0; - flex-wrap: wrap; + justify-content: space-between; overflow-x: hidden; padding: 0; position: sticky; @@ -20,6 +25,11 @@ width: 100%; z-index: 10; } +#dashboard-nav > span { + display: flex; + flex-wrap: nowrap; + overflow-x: auto; + } .tabButton { background-color: transparent; border: 0; @@ -72,6 +82,7 @@ } #unsavedWarning > div:last-of-type { height: 100vh; + height: 100svh; position: absolute; width: 100vw; } @@ -102,11 +113,6 @@ border-bottom-color: var(--dashboard-tab-hover-border); } -/* touch-screen devices */ -:root.mobile #dashboard-nav { - flex-wrap: nowrap; - overflow-x: auto; - } :root.mobile #dashboard-nav .logo { display: none; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/devtools.css ublock-origin-1.62.0+dfsg/src/css/devtools.css --- ublock-origin-1.46.0+dfsg/src/css/devtools.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/devtools.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,6 @@ html { height: 100vh; + height: 100svh; overflow: hidden; width: 100vw; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/document-blocked.css ublock-origin-1.62.0+dfsg/src/css/document-blocked.css --- ublock-origin-1.46.0+dfsg/src/css/document-blocked.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/document-blocked.css 2025-02-09 18:18:39.000000000 +0000 @@ -28,12 +28,18 @@ } #rootContainer { - width: min(100vw, 640px); + width: min(100%, 640px); } #rootContainer > * { margin: 0 0 var(--default-gap-xxlarge) 0; } +:root.mobile #rootContainer > * { + margin-bottom: var(--default-gap-xlarge); + } +p { + margin: 0.5em 0; + } a { text-decoration: none; } @@ -42,10 +48,14 @@ word-break: break-all; } #warningSign { + color: var(--accent-surface-1); + fill: var(--accent-surface-1); + font-size: 96px; + line-height: 1; width: 100%; } -#warningSign > a { - font-size: 96px; +:root.mobile #warningSign { + font-size: 64px; } #theURL { color: var(--ink-2); @@ -58,6 +68,14 @@ position: relative; z-index: 10; } +#theURL > p > span:first-of-type { + display: block; + max-height: 6lh; + overflow-y: auto; + } +:root.mobile #theURL > p > span:first-of-type { + max-height: 3lh; + } #theURL #toggleParse { background-color: transparent; top: 100%; @@ -120,6 +138,15 @@ padding-inline-start: var(--default-gap-xsmall); } +#urlskip a { + display: block; + overflow-y: auto; + word-break: break-all; + } +:root.mobile #urlskip a { + max-height: 3lh; + } + #actionContainer { display: flex; justify-content: space-between; diff -Nru ublock-origin-1.46.0+dfsg/src/css/dom-inspector.css ublock-origin-1.62.0+dfsg/src/css/dom-inspector.css --- ublock-origin-1.46.0+dfsg/src/css/dom-inspector.css 1970-01-01 00:00:00.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/dom-inspector.css 2025-02-09 18:18:39.000000000 +0000 @@ -0,0 +1,41 @@ +html#ublock0-inspector, +#ublock0-inspector body { + background: transparent; + box-sizing: border-box; + height: 100vh; + height: 100svh; + margin: 0; + overflow: hidden; + width: 100vw; +} +#ublock0-inspector :focus { + outline: none; +} +#ublock0-inspector svg { + box-sizing: border-box; + height: 100%; + left: 0; + pointer-events: none; + position: fixed; + top: 0; + width: 100%; +} +#ublock0-inspector svg > path { + stroke-width: 1px; + } +#ublock0-inspector svg > path:nth-of-type(1) { + fill: rgba(255,0,0,0.2); + stroke: #F00; +} +#ublock0-inspector svg > path:nth-of-type(2) { + fill: rgba(0,255,0,0.2); + stroke: #0F0; +} +#ublock0-inspector svg > path:nth-of-type(3) { + fill: rgba(255,0,0,0.2); + stroke: #F00; +} +#ublock0-inspector svg > path:nth-of-type(4) { + fill: rgba(0,0,255,0.1); + stroke: #00F; +} diff -Nru ublock-origin-1.46.0+dfsg/src/css/dyna-rules.css ublock-origin-1.62.0+dfsg/src/css/dyna-rules.css --- ublock-origin-1.46.0+dfsg/src/css/dyna-rules.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/dyna-rules.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,6 @@ html { height: 100vh; + height: 100svh; overflow: hidden; width: 100vw; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/epicker-ui.css ublock-origin-1.62.0+dfsg/src/css/epicker-ui.css --- ublock-origin-1.46.0+dfsg/src/css/epicker-ui.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/epicker-ui.css 2025-02-09 18:18:39.000000000 +0000 @@ -3,6 +3,7 @@ background: transparent; cursor: not-allowed; height: 100vh; + height: 100svh; margin: 0; overflow: hidden; width: 100vw; @@ -13,29 +14,41 @@ #ublock0-epicker aside { background-color: var(--surface-1); border: 1px solid var(--border-2); - bottom: 2px; box-sizing: border-box; cursor: default; display: none; - max-height: calc(100vh - 4px); - max-width: 36rem; - min-width: 24rem; + flex-direction: column; + max-width: min(32rem, 100vw - 4px); + min-width: min(24rem, 100vw - 4px); overflow-y: auto; - padding: 4px; position: fixed; - right: 2px; - width: calc(40% - 2px); + width: min(32rem, 100vw - 4px); + z-index: 100; } -/* https://github.com/uBlockOrigin/uBlock-issues/discussions/2114 */ -#ublock0-epicker aside { - min-width: min(24rem, 100vw - 4px); +#ublock0-epicker:not(.zap) aside { + display: flex; } -#ublock0-epicker.paused:not(.zap) aside { - display: block; +#ublock0-epicker:not(.paused) aside, +#ublock0-epicker.minimized aside { + min-width: min(16rem, 100vw - 4px); + overflow: hidden; + width: min(16rem, 100vw - 4px); } +#ublock0-epicker:not(.paused) aside > *:not(#windowbar), +#ublock0-epicker.minimized aside > *:not(#windowbar) { + display: none; +} +#ublock0-epicker aside > *:not(:first-child) { + padding: 0 2px; +} + #ublock0-epicker #toolbar { display: flex; + justify-content: space-between; } +#ublock0-epicker #toolbar button { + min-width: 5em; + } #ublock0-epicker ul { margin: 0.25em 0 0 0; } @@ -43,16 +56,6 @@ background-color: var(--button-preferred-surface); color: var(--button-preferred-ink); } -#ublock0-epicker #move { - background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAFElEQVQI12NgwAfKy8v/M5ANYLoBshgEyQo6H9UAAAAASUVORK5CYII='); - cursor: grab; - flex-grow: 1; - margin: 2px 4px; - opacity: 0.8; - } -#ublock0-epicker aside.moving #move { - cursor: grabbing; -} #ublock0-epicker section { border: 0; box-sizing: border-box; @@ -70,8 +73,8 @@ #ublock0-epicker section .codeMirrorContainer { border: none; box-sizing: border-box; - height: 8em; - max-height: 50vh; + height: 10em; + max-height: min(10em, 10vh); min-height: 1em; padding: 2px; width: 100%; @@ -129,8 +132,8 @@ ); display: inline-block; flex-shrink: 0; - height: 16px; - width: 16px; + height: 20px; + width: 20px; } .resultsetModifier > span > span:nth-of-type(3) { background-color: var(--surface-3); @@ -174,12 +177,9 @@ overflow: hidden; } #ublock0-epicker #candidateFilters { - max-height: 14em; + max-height: min(18em, 18vh); overflow-y: auto; } -#ublock0-epicker #candidateFilters > li:first-of-type { - margin-bottom: 0.5em; -} #ublock0-epicker .changeFilter > li > span:nth-of-type(1) { font-weight: bold; } @@ -187,6 +187,9 @@ font-size: smaller; color: gray; } +#ublock0-epicker #candidateFilters [data-i18n] { + font-size: 90%; +} #ublock0-epicker #candidateFilters .changeFilter { list-style-type: none; margin: 0 0 0 1em; @@ -207,36 +210,7 @@ background-color: var(--surface-2); } -/** - https://github.com/gorhill/uBlock/issues/3449 - https://github.com/uBlockOrigin/uBlock-issues/issues/55 -**/ -@keyframes startDialog { - 0% { opacity: 1.0; } - 60% { opacity: 1.0; } - 100% { opacity: 0.1; } -} -#ublock0-epicker.paused aside { - opacity: 0.1; - visibility: visible; - z-index: 100; -} -#ublock0-epicker.paused:not(.show):not(.hide) aside:not(:hover) { - animation-duration: 1.6s; - animation-name: startDialog; - animation-timing-function: linear; -} -#ublock0-epicker.paused aside:hover { - opacity: 1; -} -#ublock0-epicker.paused.show aside { - opacity: 1; -} -#ublock0-epicker.paused.hide aside { - opacity: 0.1; -} - -#ublock0-epicker svg { +#ublock0-epicker svg#sea { cursor: crosshair; box-sizing: border-box; height: 100%; @@ -245,26 +219,62 @@ top: 0; width: 100%; } -#ublock0-epicker.paused svg { +#ublock0-epicker.paused svg#sea { cursor: not-allowed; } -#ublock0-epicker svg > path:first-child { +#ublock0-epicker svg#sea > path:first-child { fill: rgba(0,0,0,0.5); fill-rule: evenodd; } -#ublock0-epicker svg > path + path { +#ublock0-epicker svg#sea > path + path { stroke: #F00; stroke-width: 0.5px; fill: rgba(255,63,63,0.20); } -#ublock0-epicker.zap svg > path + path { +#ublock0-epicker.zap svg#sea > path + path { stroke: #FF0; stroke-width: 0.5px; fill: rgba(255,255,63,0.20); } -#ublock0-epicker.preview svg > path { +#ublock0-epicker.preview svg#sea > path { fill: rgba(0,0,0,0.10); } -#ublock0-epicker.preview svg > path + path { +#ublock0-epicker.preview svg#sea > path + path { stroke: none; } + + +#ublock0-epicker #windowbar { + display: flex; +} +#ublock0-epicker #windowbar svg { + fill: none; + pointer-events: none; + stroke: var(--ink-1); + stroke-width: 3px; +} +#ublock0-epicker #windowbar #move { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAFElEQVQI12NgwAfKy8v/M5ANYLoBshgEyQo6H9UAAAAASUVORK5CYII='); + cursor: grab; + flex-grow: 1; + opacity: 0.8; +} +#ublock0-epicker aside.moving #windowbar #move { + cursor: grabbing; +} +#windowbar #quit, +#windowbar #minimize { + height: 2em; + width: 2em; +} +#windowbar #quit:hover, +#windowbar #minimize:hover { + background-color: var(--surface-2) +} +#ublock0-epicker.minimized #windowbar #minimize svg > path, +#windowbar #minimize svg > rect { + display: none; +} +#ublock0-epicker.minimized #windowbar #minimize svg > rect { + display: initial; +} diff -Nru ublock-origin-1.46.0+dfsg/src/css/fa-icons.css ublock-origin-1.62.0+dfsg/src/css/fa-icons.css --- ublock-origin-1.46.0+dfsg/src/css/fa-icons.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/fa-icons.css 2025-02-09 18:18:39.000000000 +0000 @@ -38,9 +38,19 @@ } .fa-icon.fa-icon-hflipped > svg { transform: scale(-1, 1); + transform-origin: 50%; } .fa-icon.fa-icon-vflipped > svg { transform: scale(1, -1); + transform-origin: 50%; + } +.fa-icon.fa-icon-rotright > svg { + transform: rotate(90deg); + transform-origin: 50%; + } +.fa-icon.fa-icon-rotleft > svg { + transform: rotate(-90deg); + transform-origin: 50%; } .fa-icon > svg { @@ -79,16 +89,21 @@ .fa-icon > .fa-icon_sun-o { width: calc(1em * 1708 / 1792); } +.fa-icon > .fa-icon_book, .fa-icon > .fa-icon_download-alt, .fa-icon > .fa-icon_font, .fa-icon > .fa-icon_search, .fa-icon > .fa-icon_spinner, .fa-icon > .fa-icon_unlink, .fa-icon > .fa-icon_upload-alt, +.fa-icon > .fa-icon_volume-up, .fa-icon > .fa-icon_zoom-in, .fa-icon > .fa-icon_zoom-out { width: calc(1em * 1664 / 1792); } +.fa-icon > .fa-icon_terminal { + width: calc(1em * 1651 / 1792); + } .fa-icon > .fa-icon_magic { width: calc(1em * 1637 / 1792); } diff -Nru ublock-origin-1.46.0+dfsg/src/css/logger-ui-inspector.css ublock-origin-1.62.0+dfsg/src/css/logger-ui-inspector.css --- ublock-origin-1.46.0+dfsg/src/css/logger-ui-inspector.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/logger-ui-inspector.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,6 @@ #domInspector { display: none; + overflow: hidden; } #inspectors.dom #domInspector { display: flex; @@ -7,6 +8,12 @@ #domInspector .permatoolbar .highlightMode.invert { transform: rotate(180deg); } +#domInspector button.vExpandToggler > .fa-icon { + transform: scaleY(-1) + } +#domInspector button.vCompactToggler > .fa-icon { + transform: scaleY(1) + } #domInspector .vscrollable { overflow-x: auto; } @@ -84,7 +91,7 @@ display: none; } -#domInspector:not(.vExpanded) li:not(.hasCosmeticHide):not(.isCosmeticHide) { +#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide):not(.show) { display: none; } #domInspector #domTree > li { diff -Nru ublock-origin-1.46.0+dfsg/src/css/logger-ui.css ublock-origin-1.62.0+dfsg/src/css/logger-ui.css --- ublock-origin-1.46.0+dfsg/src/css/logger-ui.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/logger-ui.css 2025-02-09 18:18:39.000000000 +0000 @@ -2,13 +2,15 @@ display: flex; flex-direction: column; height: 100vh; - overflow: hidden; + height: 100svh; + overflow-y: hidden; width: 100vw; } textarea { box-sizing: border-box; direction: ltr; - resize: none; + min-height: 6rem; + resize: vertical; width: 100%; } .permatoolbar { @@ -61,22 +63,35 @@ => https://devhints.io/css-system-font-stack */ #inspectors { + display: flex; + flex-direction: column; flex-grow: 1; + flex-wrap: nowrap; font-family: "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + overflow: hidden; + position: relative; } .inspector { - border-top: 1px solid #ccc; + border-top: 1px solid var(--border-4); display: flex; flex-direction: column; + height: 100%; + } +.inspector .permatoolbar { + border-bottom: 1px solid var(--border-1); } .vscrollable { direction: ltr; flex-grow: 1; font-size: var(--font-size-smaller); + height: 1px; /* necessary for proper space allocation by flex boxes */ overflow-x: hidden; overflow-y: auto; } +#domInspector button.vExpandToggler > .fa-icon { + transform: scaleY(1) + } .inspector:not(.vExpanded) button.vCompactToggler > .fa-icon { transform: scaleY(-1) } @@ -100,7 +115,6 @@ } #netInspector #filterExprGroup { display: flex; - margin: 0 1em; position: relative; } #netInspector #filterButton { @@ -168,7 +182,7 @@ cursor: pointer; display: inline-flex; margin: 0 0.5em 0 0; - padding: 0.5em; + padding: 0.25em; white-space: nowrap; } #netInspector #filterExprPicker span[data-filtex]:last-of-type { @@ -178,8 +192,11 @@ background-color: rgb(var(--primary-70) / 25%); border: 1px solid rgb(var(--primary-70)); } -#netInspector #filterExprPicker span.on[data-filtex] { +#netInspector #filterExprPicker span.on[data-filtex], +#filterExprButton.active { background-color: rgb(var(--primary-70) / 40%); + } +#netInspector #filterExprPicker span.on[data-filtex] { border: 1px solid rgb(var(--primary-70)); } @@ -210,6 +227,7 @@ width: 100%; } #vwRenderer .logEntry { + background-color: var(--surface-1); display: block; left: 0; overflow: hidden; @@ -220,15 +238,19 @@ display: none; } #vwRenderer .logEntry > div { + border-bottom: 1px dotted var(--border-1); + box-sizing: border-box; + display: flex; height: 100%; + max-height: 200px; white-space: nowrap; } #vwRenderer .logEntry > div[data-status="1"], -#netFilteringDialog > .panes > .details > div[data-status="1"] { +.netFilteringDialog > .panes > .details > div[data-status="1"] { background-color: rgb(var(--popup-cell-block-surface-rgb) / 50%); } #vwRenderer .logEntry > div[data-status="1"][data-modifier], -#netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] { +.netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] { background-color: var(--logger-modified-surface); } #vwRenderer .logEntry > div[data-status="3"] { @@ -238,7 +260,7 @@ background-color: rgba(96, 96, 96, 0.1); } #vwRenderer .logEntry > div[data-status="2"], -#netFilteringDialog > .panes > .details > div[data-status="2"] { +.netFilteringDialog > .panes > .details > div[data-status="2"] { background-color: rgb(var(--popup-cell-allow-surface-rgb) / 50%); } #vwRenderer .logEntry > div[data-tabid="-1"] { @@ -248,6 +270,9 @@ #vwRenderer .logEntry > div.redirect { background-color: var(--logger-redirected-surface); } +#vwRenderer .logEntry > div.extendedRealm.scriptlet { + background-color: var(--logger-scriptlet-surface); + } :root.colorBlind #vwRenderer .logEntry > div.extendedRealm, :root.colorBlind #vwRenderer .logEntry > div.redirect { background-color: rgba(0, 19, 110, 0.1); @@ -260,10 +285,10 @@ color: white; } #vwRenderer .logEntry > div[data-type="error"] { - color: #800; + color: var(--cm-negative); } #vwRenderer .logEntry > div[data-type="info"] { - color: #008; + color: var(--sf-def-ink); } #vwRenderer .logEntry > div.voided { opacity: 0.5; @@ -272,147 +297,164 @@ opacity: 0.7; } -#vwRenderer .logEntry > div > span { - border: 1px dotted var(--border-1); - border-top: 0; - border-right: 0; +#vwRenderer .logEntry > .fields > span { + border-left: 1px dotted var(--border-1); box-sizing: border-box; display: inline-block; height: 100%; overflow: hidden; - padding: 0.2em; + padding: 2px; vertical-align: middle; white-space: nowrap; word-break: break-all; } -#vwRenderer .logEntry > div.canDetails:hover > span { +#vwRenderer .logEntry > div:hover > span { background-color: rgba(0,0,0,0.04); } -body[dir="ltr"] #vwRenderer .logEntry > div > span:first-child { +body[dir="ltr"] #vwRenderer .logEntry > .fields > span:first-child { border-left: 0; } -body[dir="rtl"] #vwRenderer .logEntry > div > span:first-child { +body[dir="rtl"] #vwRenderer .logEntry > .fields > span:first-child { border-right: 0; } #vwRenderer .logEntry > div > span:nth-of-type(1) { } #vwRenderer .logEntry > div > span:nth-of-type(2) { } -#vwRenderer #vwContent .logEntry > div > span:nth-of-type(2) { +#vwRenderer .logEntry > .fields > span:nth-of-type(2) { text-overflow: ellipsis; } -.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(2) { +#vwRenderer .logEntry > .fields.messageRealm > span:nth-of-type(2) ~ span { + display: none; + } +.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(2) { overflow-y: auto; white-space: pre-line; } -#vwRenderer .logEntry > div.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) { +#vwRenderer .logEntry > .fields.messageRealm[data-type="tabLoad"] > span:nth-of-type(2) { text-align: center; } -#vwRenderer .logEntry > div.extendedRealm > span:nth-of-type(2) > span:first-of-type { +#vwRenderer .logEntry > .fields.extendedRealm > span:nth-of-type(2) > span:first-of-type { display: none; } -#vwRenderer .logEntry > div.extendedRealm > span:nth-of-type(2) > span:last-of-type { - pointer-events: none; - } -#vwRenderer .logEntry > div.extendedRealm.isException > span:nth-of-type(2) > span:last-of-type { +#vwRenderer .logEntry > .fields.extendedRealm.isException > span:nth-of-type(2) > span:last-of-type { text-decoration: line-through rgba(0,0,255,0.7); } -#vwRenderer .logEntry > div > span:nth-of-type(3) { - font: 12px monospace; +#vwRenderer .logEntry > .fields > span:nth-of-type(3) { + font-family: monospace; padding-left: 0.3em; padding-right: 0.3em; text-align: center; } -#vwRenderer .logEntry > div.canDetails:hover > span:nth-of-type(2), -#vwRenderer .logEntry > div.canDetails:hover > span:nth-of-type(3), -#vwRenderer .logEntry > div.canDetails:hover > span:nth-of-type(5) { - background: rgba(0, 0, 255, 0.1); - cursor: zoom-in; - } -#netInspector:not(.vExpanded) #vwRenderer .logEntry > div > span:nth-of-type(4) { - direction: rtl; +#netInspector:not(.vExpanded) #vwRenderer .logEntry > .fields > span:nth-of-type(4) { text-align: right; - unicode-bidi: plaintext; } -#vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) { +#vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(4) { text-overflow: ellipsis; } -.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(4) { +.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(4) { overflow-y: auto; text-overflow: clip; white-space: pre-line; } -#vwRenderer .logEntry > div > span:nth-of-type(5) { +#vwRenderer .logEntry > .fields > span:nth-of-type(5) { text-align: center; } -/* visual for tabless network requests */ -#vwRenderer .logEntry > div > span:nth-of-type(5) { - position: relative; - } -#vwRenderer .logEntry > div > span:nth-of-type(6) { - } -#vwRenderer #vwContent .logEntry > div > span:nth-of-type(6) { +#vwRenderer .logEntry > .fields > span:nth-of-type(3), +#vwRenderer .logEntry > .fields > span:nth-of-type(5), +#vwRenderer .logEntry > .fields > span:nth-of-type(7) { + white-space: nowrap !important; } -#vwRenderer .logEntry > div > span:nth-of-type(7) { +#vwRenderer .logEntry > .fields > span:nth-of-type(8) { position: relative; } -#vwRenderer #vwContent .logEntry > div > span:nth-of-type(7) { +#vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(8) { text-overflow: ellipsis; } -.vExpanded #vwRenderer #vwContent .logEntry > div > span:nth-of-type(7) { +.vExpanded #vwRenderer #vwContent .logEntry > .fields > span:nth-of-type(8) { overflow-y: auto; white-space: pre-line; } -#vwRenderer .logEntry > div > span:nth-of-type(7) b { +#vwRenderer .logEntry > .fields > span:nth-of-type(8) b { font-weight: bold; } -#vwRenderer .logEntry > div[data-status="1"] > span:nth-of-type(7) b, -#netFilteringDialog > .panes > .details > div[data-status="1"] b { +#vwRenderer .logEntry > div[data-status="1"] > span:nth-of-type(8) b, +.netFilteringDialog > .panes > .details > div[data-status="1"] b { background-color: rgb(var(--popup-cell-block-surface-rgb) / 100%); } -#vwRenderer .logEntry > div[data-status="1"][data-modifier] > span:nth-of-type(7) b, -#netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] b { +#vwRenderer .logEntry > div[data-status="1"][data-modifier] > span:nth-of-type(8) b, +.netFilteringDialog > .panes > .details > div[data-status="1"][data-modifier] b { background-color: var(--logger-modified-em-surface); } -#vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(7) b { +#vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(8) b { background-color: rgba(108, 108, 108, 0.2); } -:root.colorBlind #vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(7) b { +:root.colorBlind #vwRenderer .logEntry > div[data-status="3"] > span:nth-of-type(8) b { background-color: rgba(96, 96, 96, 0.2); } -#vwRenderer .logEntry > div[data-status="2"] > span:nth-of-type(7) b, -#netFilteringDialog > .panes > .details > div[data-status="2"] b { +#vwRenderer .logEntry > div[data-status="2"] > span:nth-of-type(8) b, +.netFilteringDialog > .panes > .details > div[data-status="2"] b { background-color: rgb(var(--popup-cell-allow-surface-rgb) / 100%); } -#vwRenderer .logEntry > div > span:nth-of-type(7) a { +#vwRenderer .logEntry > .fields > span:nth-of-type(8) a { + align-items: center; background-color: dimgray; color: white; display: none; - height: 100%; - padding: 0 0.25em; + height: min(100%, 1.5em); + justify-content: center; + padding: 0.1em; opacity: 0.4; position: absolute; right: 0; text-decoration: none; top: 0; + width: 1.5em; } -#netInspector.vExpanded #vwRenderer .logEntry > div > span:nth-of-type(7) a { +#netInspector.vExpanded #vwRenderer .logEntry > .fields > span:nth-of-type(8) a { bottom: 0px; height: unset; - padding: 0.25em; + padding: 0.2em; top: unset; } -#vwRenderer .logEntry > div > span:nth-of-type(7) a::after { +#vwRenderer .logEntry > .fields > span:nth-of-type(8) a::after { content: '\2197'; } -#vwRenderer .logEntry > div.networkRealm > span:nth-of-type(7):hover a { - align-items: center; +#vwRenderer .logEntry > .fields.networkRealm > span:nth-of-type(8):hover a { display: inline-flex; } -#vwRenderer .logEntry > div > span:nth-of-type(7) a:hover { +#vwRenderer .logEntry > .fields > span:nth-of-type(8) a:hover { opacity: 1; } +@keyframes unrollRow { + to { + box-shadow: 0 2px 3px 0 #444; + height: auto; + max-height: 200px; + z-index: 1; + } +} +@keyframes unrollRowCell { + to { + height: auto; + overflow-y: auto; + white-space: pre-wrap; + } +} +#netInspector:not(.vExpanded) #vwRenderer .logEntry:hover { + animation-delay: 0.8s; + animation-fill-mode: forwards; + animation-name: unrollRow; + animation-timing-function: step-start; + } +#netInspector:not(.vExpanded) #vwRenderer .logEntry:hover > .fields > span { + animation-delay: 0.8s; + animation-fill-mode: forwards; + animation-name: unrollRowCell; + animation-timing-function: step-start; + } + #vwRenderer #vwBottom { background-color: #00F; height: 0; @@ -428,12 +470,63 @@ width: 100%; } +#inspectors .entryTools { + background-color: var(--surface-0); + flex-basis: 50%; + } +#inspectors .entryTools:empty { + display: none; + } + +.closeButton { + stroke: var(--ink-1); + stroke-width: 3px; + width: 1.6em; + height: 1.6em; + bottom: calc(100% + 2px); + } +body[dir="ltr"] .closeButton { + right: 0; + } +body[dir="rtl"] .closeButton { + left: 0; + } +.closeButton:hover { + background-color: var(--surface-2) !important; + } +.closeButton > * { + pointer-events: none; + } + +#inspectors #infoInspector { + flex-basis: 200%; + } +#inspectors:not(.console) #infoInspector { + display: none; + } +#inspectors #infoInspector .vscrollable { + font-family: monospace; + font-size: small; + } +#inspectors #infoInspector .vscrollable > div { + border-bottom: 1px dotted gray; + padding: 0.2em; + white-space: pre-wrap; + word-break: break-all; + } +#inspectors #infoInspector .vscrollable > div:first-of-type { + } +#inspectors #infoInspector .vscrollable > div[data-type="error"] { + color: var(--cm-negative); + } + #popupContainer { background-color: var(--surface-1); border: 1px solid gray; bottom: 0; display: none; - max-height: 70vh; + max-height: min(800px, calc(100vh - 2rem)); + max-height: min(800px, calc(100svh - 2rem)); min-width: 360px; overflow: hidden; position: fixed; @@ -464,7 +557,12 @@ #modalOverlay > div { position: relative; } -#modalOverlay > div > div:nth-of-type(1) { +#modalOverlay .closeButton { + background-color: var(--surface-1); + position: absolute; + } + +#modalOverlayContainer { background-color: var(--surface-1); border: 0; box-sizing: border-box; @@ -473,39 +571,19 @@ overflow-y: auto; width: 90vw; } -#modalOverlay > div > div:nth-of-type(2) { - stroke: var(--ink-1); - stroke-width: 3px; - position: absolute; - width: 1.6em; - height: 1.6em; - bottom: calc(100% + 2px); - background-color: var(--surface-1); - } -body[dir="ltr"] #modalOverlay > div > div:nth-of-type(2) { - right: 0; - } -body[dir="rtl"] #modalOverlay > div > div:nth-of-type(2) { - left: 0; - } -#modalOverlay > div > div:nth-of-type(2):hover { - background-color: var(--surface-2); - } -#modalOverlay > div > div:nth-of-type(2) > * { - pointer-events: none; - } -#netFilteringDialog { - font-size: 95%; +.netFilteringDialog { + font-size: var(--font-size-smaller); } -#netFilteringDialog a { +.netFilteringDialog a { text-decoration: none; } -#netFilteringDialog select { - max-width: 75%; +.netFilteringDialog select { + max-width: 50vw; outline: none; + text-overflow: ellipsis; } -#netFilteringDialog > .preview { +.netFilteringDialog > .preview { align-items: center; /* http://lea.verou.me/css3patterns/ */ background-color: #aaa; @@ -534,22 +612,24 @@ padding: 0.5em; text-align: center; } -#netFilteringDialog > .preview > * { +.netFilteringDialog > .preview > * { max-width: 100%; max-height: 20vh; } -#netFilteringDialog > .preview > span { +.netFilteringDialog > .preview > span { background-color: var(--surface-3); cursor: pointer; padding: 1em; } -#netFilteringDialog > .headers { +.netFilteringDialog > .headers { + align-items: center; border-bottom: 1px solid var(--border-4); + display: flex; + justify-content: space-between; line-height: 2; - position: relative; } -#netFilteringDialog > .headers > .header { +.netFilteringDialog > .headers .header { border: 1px solid var(--border-2); border-bottom: 1px solid var(--border-4); border-top-left-radius: 4px; @@ -557,110 +637,103 @@ color: var(--border-2); cursor: pointer; display: inline-block; + margin-inline-end: 4px; padding: 0 1em; position: relative; - text-align: center; top: 1px; } -#netFilteringDialog[data-pane="details"] > .headers > [data-pane="details"], -#netFilteringDialog[data-pane="dynamic"] > .headers > [data-pane="dynamic"], -#netFilteringDialog[data-pane="static"] > .headers > [data-pane="static"] { - background-color: var(--surface-1); +.netFilteringDialog[data-pane="details"] > .headers [data-pane="details"], +.netFilteringDialog[data-pane="dynamic"] > .headers [data-pane="dynamic"], +.netFilteringDialog[data-pane="static"] > .headers [data-pane="static"] { + background-color: var(--surface-0); border-color: var(--border-4); border-bottom: 1px solid transparent; color: var(--ink-1); } -#netFilteringDialog > .headers > .tools { +.netFilteringDialog > .headers > .tools { bottom: 0; display: flex; - position: absolute; - } -body[dir="ltr"] #netFilteringDialog > .headers > .tools { - right: 0; - } -body[dir="rtl"] #netFilteringDialog > .headers > .tools { - left: 0; + height: 100%; + margin-inline-start: 2rem; } -#netFilteringDialog > .headers > .tools > span { - color: var(--ink-4); - fill: var(--ink-4); +.netFilteringDialog > .headers > .tools > span { + color: var(--ink-3); + fill: var(--ink-3); cursor: pointer; font-size: 1.5em; padding: 0 0.25em; text-align: center; } -#netFilteringDialog > .headers > .tools > span:hover { +.netFilteringDialog > .headers > .tools > span:hover { color: var(--ink-1); fill: var(--ink-1); } -#netFilteringDialog.extendedRealm > .headers > .dynamic, -#netFilteringDialog.extendedRealm > .panes > .dynamic { +.netFilteringDialog.extendedRealm > .headers .dynamic, +.netFilteringDialog.extendedRealm > .panes > .dynamic { display: none; } -#netFilteringDialog.extendedRealm > .headers > .static, -#netFilteringDialog.extendedRealm > .panes > .static { +.netFilteringDialog.extendedRealm > .headers .static, +.netFilteringDialog.extendedRealm > .panes > .static { display: none; } -#netFilteringDialog > div.panes { - min-height: 40vh; +.netFilteringDialog > div.panes { overflow: hidden; overflow-y: auto; padding-top: 1em; } -#netFilteringDialog > div.panes > div { +.netFilteringDialog > div.panes > div { display: none; } -#netFilteringDialog[data-pane="details"] > .panes > [data-pane="details"], -#netFilteringDialog[data-pane="dynamic"] > .panes > [data-pane="dynamic"], -#netFilteringDialog[data-pane="static"] > .panes > [data-pane="static"] { +.netFilteringDialog[data-pane="details"] > .panes > [data-pane="details"], +.netFilteringDialog[data-pane="dynamic"] > .panes > [data-pane="dynamic"], +.netFilteringDialog[data-pane="static"] > .panes > [data-pane="static"] { display: flex; flex-direction: column; - padding: 0 var(--default-gap-xsmall); + padding: 0 var(--default-gap-xsmall) var(--default-gap-xsmall) var(--default-gap-xsmall); } -#netFilteringDialog > .panes > .details > div { +.netFilteringDialog > .panes > .details > div { align-items: stretch; background-color: var(--surface-2); border: 0; border-bottom: 1px solid var(--surface-0); display: flex; } -#netFilteringDialog > .panes > .details > div > span { +.netFilteringDialog > .panes > .details > div > span { padding: 0.5em; } -#netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { +.netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { border: 0; flex-grow: 0; flex-shrink: 0; text-align: right; width: 8em; } -body[dir="ltr"] #netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { +body[dir="ltr"] .netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { border-right: 1px solid var(--surface-0); } -body[dir="rtl"] #netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { +body[dir="rtl"] .netFilteringDialog > .panes > .details > div > span:nth-of-type(1) { border-left: 1px solid var(--surface-0); } -#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) { +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) { flex-grow: 1; - max-height: 20vh; + max-height: 10vh; overflow: hidden auto; white-space: pre-line } -#netFilteringDialog > .panes > .details > div > span:nth-of-type(2):not(.prose) { +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2):not(.prose) { word-break: break-all; } -#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .listEntry { +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .listEntry { display: inline-flex; } -#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon { +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon { font-size: 110%; opacity: 0.5; - vertical-align: bottom; } -#netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon:hover { +.netFilteringDialog > .panes > .details > div > span:nth-of-type(2) .fa-icon:hover { opacity: 1; } -#netFilteringDialog > .panes > .details .exceptor { +.netFilteringDialog > .panes > .details .exceptor { align-items: center; border-left: 1px solid var(--surface-0); cursor: pointer; @@ -668,29 +741,29 @@ font-family: monospace; opacity: 0.8; } -#netFilteringDialog > .panes > .details .exceptor:hover { +.netFilteringDialog > .panes > .details .exceptor:hover { opacity: 1; } -#netFilteringDialog > .panes > .details .exceptored .filter { +.netFilteringDialog > .panes > .details .exceptored .filter { text-decoration: line-through; } -#netFilteringDialog > .panes > .details .exceptored .exceptor { +.netFilteringDialog > .panes > .details .exceptored .exceptor { background-color: rgb(var(--primary-50) / 50%); } -#netFilteringDialog > .panes > .details .exceptor::before { +.netFilteringDialog > .panes > .details .exceptor::before { content: '@@'; } -#netFilteringDialog.extendedRealm > .panes > .details .exceptor::before { +.netFilteringDialog.extendedRealm > .panes > .details .exceptor::before { content: '#@#'; } -#netFilteringDialog > div.panes > .dynamic > .toolbar { +.netFilteringDialog > div.panes > .dynamic > .toolbar { padding-bottom: 1em; } -#netFilteringDialog > div.panes > .dynamic .row { +.netFilteringDialog > div.panes > .dynamic .row { display: flex; min-height: 2.2em; } -#netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { +.netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { align-self: stretch; border: 0; display: inline-flex; @@ -699,17 +772,17 @@ text-align: center; width: 4.5em; } -body[dir="ltr"] #netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { +body[dir="ltr"] .netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { border-right: 1px solid var(--surface-0); } -body[dir="rtl"] #netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { +body[dir="rtl"] .netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(1) { border-left: 1px solid var(--surface-0); } -#netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(2) { +.netFilteringDialog > div.panes > .dynamic .row > span:nth-of-type(2) { align-self: center; padding: 0 0.5em; } -#netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules { +.netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules { background-color: #ffe; border: 1px solid #ddc; border-radius: 4px; @@ -719,29 +792,29 @@ visibility: hidden; width: 100%; } -body.dirty #netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules { +body.dirty .netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules { visibility: visible; } -#netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules:hover { +.netFilteringDialog > div.panes > .dynamic > .toolbar #saveRules:hover { fill: black; } -#netFilteringDialog > div.panes > .dynamic > .toolbar .entry { +.netFilteringDialog > div.panes > .dynamic > .toolbar .entry { display: none; } -#netFilteringDialog > div.panes > .dynamic .entry { +.netFilteringDialog > div.panes > .dynamic .entry { background-color: var(--surface-2); border: 0; border-bottom: 1px solid var(--surface-0); } -#netFilteringDialog > div.panes > .dynamic .entry:hover { +.netFilteringDialog > div.panes > .dynamic .entry:hover { background-color: var(--surface-3); } -#netFilteringDialog > div.panes > .dynamic .entry > .action { +.netFilteringDialog > div.panes > .dynamic .entry > .action { background-color: transparent; border: 0; cursor: pointer; } -#netFilteringDialog > div.panes > .dynamic .entry > .action > span { +.netFilteringDialog > div.panes > .dynamic .entry > .action > span { background-color: transparent; border: 0; display: inline-block; @@ -750,80 +823,75 @@ visibility: hidden; width: 33.33%; } -#netFilteringDialog > div.panes > .dynamic .entry > .action.allow { +.netFilteringDialog > div.panes > .dynamic .entry > .action.allow { background-color: rgba(0, 160, 0, 0.3); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.allow { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.allow { background-color: rgba(255, 194, 57, 0.4); } -#netFilteringDialog > div.panes > .dynamic .entry > .action.noop { +.netFilteringDialog > div.panes > .dynamic .entry > .action.noop { background-color: rgba(108, 108, 108, 0.3); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.noop { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.noop { background-color: rgba(96, 96, 96, 0.4); } -#netFilteringDialog > div.panes > .dynamic .entry > .action.block { +.netFilteringDialog > div.panes > .dynamic .entry > .action.block { background-color: rgba(192, 0, 0, 0.3); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.block { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.block { background-color: rgba(0, 19, 110, 0.4); } -#netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow { +.netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow { background-color: rgba(0, 160, 0, 1); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.allow { background-color: rgba(255, 194, 57, 1); } -#netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop, -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop { +.netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop, +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.noop { background-color: rgba(108, 108, 108, 1); } -#netFilteringDialog > div.panes > .dynamic .entry > .action.own.block { +.netFilteringDialog > div.panes > .dynamic .entry > .action.own.block { background-color: rgba(192, 0, 0, 1); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action.own.block { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action.own.block { background-color: rgba(0, 19, 110, 1); } -#netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span { +.netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span { opacity: 0.2; visibility: visible; } -#netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span:hover { +.netFilteringDialog > div.panes > .dynamic .entry > .action:not(.own):hover > span:hover { opacity: 0.75; } -#netFilteringDialog > div.panes > .dynamic .entry > .action > .allow { +.netFilteringDialog > div.panes > .dynamic .entry > .action > .allow { background-color: rgb(0, 160, 0); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action > .allow { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action > .allow { background-color: rgb(255, 194, 57); } -#netFilteringDialog > div.panes > .dynamic .entry > .action > .noop { +.netFilteringDialog > div.panes > .dynamic .entry > .action > .noop { background-color: rgb(108, 108, 108); } -#netFilteringDialog > div.panes > .dynamic .entry > .action > .block { +.netFilteringDialog > div.panes > .dynamic .entry > .action > .block { background-color: rgb(192, 0, 0); } -:root.colorBlind #netFilteringDialog > div.panes > .dynamic .entry > .action > .block { +:root.colorBlind .netFilteringDialog > div.panes > .dynamic .entry > .action > .block { background-color: rgb(0, 19, 110); } -#netFilteringDialog > div.panes > .dynamic .entry > .url { +.netFilteringDialog > div.panes > .dynamic .entry > .url { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -#netFilteringDialog > div.panes > div.static > div { +.netFilteringDialog > div.panes > div.static > div { line-height: 2; } -#netFilteringDialog > div.panes > div.static > div { - padding-bottom: 1em; - } -#netFilteringDialog > div.panes > div.static textarea { +.netFilteringDialog > div.panes > div.static textarea { height: 6em; - max-height: 20vh; - min-height: 10vh; word-break: break-all; } -#netFilteringDialog > div.panes > div.static > div:nth-of-type(2) { +.netFilteringDialog > div.panes > div.static > div:nth-of-type(2) { text-align: center; } @@ -913,10 +981,10 @@ background-color: rgb(var(--primary-70) / 40%); } #loggerExportDialog .output { - font: smaller mono; - height: 60vh; + font-size: small; + height: 80vh; padding: 0.5em; - white-space: pre; + white-space: pre-wrap; } #loggerSettingsDialog { diff -Nru ublock-origin-1.46.0+dfsg/src/css/popup-fenix.css ublock-origin-1.62.0+dfsg/src/css/popup-fenix.css --- ublock-origin-1.46.0+dfsg/src/css/popup-fenix.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/popup-fenix.css 2025-02-09 18:18:39.000000000 +0000 @@ -64,6 +64,7 @@ align-items: stretch; display: flex; justify-content: space-between; + margin: var(--popup-gap-extra-thin) 0; } #switch { color: var(--popup-power-ink); @@ -73,7 +74,7 @@ flex-grow: 1; font-size: 96px; justify-content: center; - margin: var(--popup-gap-thin) var(--popup-gap-thin) 0; + margin: var(--popup-gap) 0; padding: 0; stroke: none; stroke-width: 64; @@ -88,7 +89,7 @@ box-sizing: border-box; display: flex; flex-direction: column; - justify-content: space-evenly; + justify-content: space-between; width: 25%; } .rulesetTools [id] { @@ -113,8 +114,12 @@ visibility: visible; } #hostname { - margin: var(--popup-gap) var(--popup-gap-extra-thin); + background-color: var(--popup-toolbar-surface); + margin: 0; + padding: var(--popup-gap-thin) 0; text-align: center; + white-space: normal; + } #hostname > span { word-break: break-all; @@ -202,11 +207,11 @@ margin-top: 6px; text-align: center; } -body.mobile.no-tooltips .toolRibbon .tool { +:root.mobile.no-tooltips .toolRibbon .tool { font-size: 1.6em; } -#basicTools:not(.canPick) .needPick { +#basicTools .needPick:not(.canPick) { visibility: hidden; } @@ -228,6 +233,26 @@ visibility: visible; } +#unprocessedRequestWarning { + align-items: center; + background-color: #fc0; + color: rgb(var(--ink-80)); + stroke: rgb(var(--ink-80)); + display: none; + font-size: var(--font-size-smaller); + padding: var(--popup-gap-thin); + } +:root.warn #unprocessedRequestWarning { + display: flex; + } +#unprocessedRequestWarning > .dismiss { + flex-shrink: 0; + width: calc(var(--font-size) - 2px); + } +#unprocessedRequestWarning > .dismiss > svg { + width: 100%; + } + #moreOrLess { column-gap: 0; display: grid; @@ -267,6 +292,7 @@ max-width: 460px; min-width: var(--popup-firewall-min-width); padding: 0; + position: relative; overflow-y: auto; } :root.desktop #firewall { @@ -274,19 +300,85 @@ } :root.desktop body.vMin #firewall { max-height: 100vh; + max-height: 100svh; + } +#firewall > * { + direction: ltr; + } +#firewall > section { + align-items: flex-start; + display: flex; + left: 0; + position: absolute; + z-index: 50; + } +#firewall > section .fa-icon { + color: var(--ink-4); + fill: var(--ink-4); + font-size: 150%; + padding: var(--popup-gap-thin); + } +#firewall > section:hover .fa-icon { + color: var(--ink-1); + fill: var(--ink-1); + } +#firewall.showBlocked > section .fa-icon, +#firewall.showAllowed > section .fa-icon, +#firewall.hideBlocked > section .fa-icon, +#firewall.hideAllowed > section .fa-icon, +#firewall.show3pScript > section .fa-icon, +#firewall.show3pFrame > section .fa-icon, +#firewall.hide3pScript > section .fa-icon, +#firewall.hide3pFrame > section .fa-icon { + color: rgb(var(--primary-70)); + fill: rgb(var(--primary-70)); + } +#firewall > section .filterExpressions { + background-color: var(--surface-0); + border: 1px solid var(--border-4); + display: none; + } +#firewall > section:hover .filterExpressions { + display: flex; + flex-direction: column; + } +#firewall > section .filterExpressions div { + border-bottom: 1px dotted #ddd; + padding: 0.25em; + } +#firewall > section .filterExpressions div:last-of-type { + border-bottom: 0; + } +#firewall > section .filterExpressions span { + cursor: default; + display: inline-flex; + margin: 0 0.25em 0 0; + padding: 0.5em; + white-space: nowrap; + border: 1px solid var(--surface-0); + } +#firewall > section .filterExpressions span:last-of-type { + margin: 0; + } +:root:not(.mobile) #firewall > section .filterExpressions span:not(.on):hover { + background-color: rgb(var(--primary-70) / 15%); + border: 1px solid rgb(var(--primary-70)); + } +#firewall > section .filterExpressions span.on { + background-color: rgb(var(--primary-70) / 40%); + border: 1px solid rgb(var(--primary-70)); } #firewall > div { border: 0; - direction: ltr; display: flex; margin: 0; margin-top: 1px; padding: 0; } -#firewall > div:first-child { +#firewall > div:first-of-type { margin-top: 0; } -#firewall > div:first-child ~ div[data-des="*"] { +#firewall > div:first-of-type ~ div[data-des="*"] { display: none; } #firewall:not(.expanded) > div.isSubdomain:not(.expandException):not(.isRootContext), @@ -302,12 +394,20 @@ padding: 0.4em 0; position: relative; } -#firewall > div:first-of-type > span:first-of-type { +#firewall > div:first-of-type span[data-i18n] { cursor: pointer; flex-direction: unset; + flex-grow: 1; + } +#firewall > div:first-of-type span[data-i18n]::before { + color: var(--ink-3); + content: '+'; + padding-right: 0.25em; + } +#firewall.expanded > div:first-of-type span[data-i18n]::before { + content: '\2012'; } #firewall > div > span:first-of-type { - align-items: flex-end; flex-direction: column; flex-grow: 1; justify-content: flex-end; @@ -320,36 +420,34 @@ #firewall > div[data-des="*"] > span:first-of-type { flex-direction: row; } -#firewall > div[data-des="*"] > span:first-of-type > span.filter { - flex-grow: 1; - padding-inline-start: 2px; - -webkit-padding-start: 2px; - text-align: left; - } -#firewall:not(.has3pScript) > [data-type="3p-script"] .filter, -#firewall:not(.has3pFrame) > [data-type="3p-frame"] .filter { - display: none; - } -#firewall > [data-des="*"] .filter::after { - content: '\22EF'; - } -#firewall.show3pScript > [data-type="3p-script"] .filter::after, -#firewall.show3pFrame > [data-type="3p-frame"] .filter::after { - content: '\2191'; - } -#firewall.hide3pScript > [data-type="3p-script"] .filter::after, -#firewall.hide3pFrame > [data-type="3p-frame"] .filter::after { - content: '\2193'; - } -#firewall.show3pScript > div:not([data-des="*"]):not(.hasScript), -#firewall.show3pScript > div:not([data-des="*"]):not(.is3p), +#firewall.show3pScript:not(.show3pFrame) > div:not([data-des="*"]).is3p:not(.hasScript), +#firewall.show3pFrame:not(.show3pScript) > div:not([data-des="*"]).is3p:not(.hasFrame), +#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame), #firewall.hide3pScript > div:not([data-des="*"]).is3p.hasScript, -#firewall.show3pFrame > div:not([data-des="*"]):not(.hasFrame), -#firewall.show3pFrame > div:not([data-des="*"]):not(.is3p), #firewall.hide3pFrame > div:not([data-des="*"]).is3p.hasFrame, -#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).hasScript:not(.hasFrame), -#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).hasFrame:not(.hasScript) { - opacity: 0.5; +#firewall.showBlocked > div:not([data-des="*"]).is3p:not(.totalBlocked):not(.blocked), +#firewall.showAllowed > div:not([data-des="*"]).is3p:not(.totalAllowed):not(.allowed), +#firewall.hideBlocked > div:not([data-des="*"]).is3p.totalBlocked, +#firewall.hideBlocked > div:not([data-des="*"]).is3p.blocked, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.totalAllowed, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.allowed { + max-height: 4px; + overflow-y: hidden; + pointer-events: none; + user-select: none; + } +#firewall.show3pScript:not(.show3pFrame) > div:not([data-des="*"]).is3p:not(.hasScript) *, +#firewall.show3pFrame:not(.show3pScript) > div:not([data-des="*"]).is3p:not(.hasFrame) *, +#firewall.show3pScript.show3pFrame > div:not([data-des="*"]).is3p:not(.hasScript):not(.hasFrame) *, +#firewall.hide3pScript > div:not([data-des="*"]).is3p.hasScript *, +#firewall.hide3pFrame > div:not([data-des="*"]).is3p.hasFrame *, +#firewall.showBlocked > div:not([data-des="*"]).is3p:not(.totalBlocked):not(.blocked) *, +#firewall.showAllowed > div:not([data-des="*"]).is3p:not(.totalAllowed):not(.allowed) *, +#firewall.hideBlocked > div:not([data-des="*"]).is3p.totalBlocked *, +#firewall.hideBlocked > div:not([data-des="*"]).is3p.blocked *, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.totalAllowed *, +#firewall.hideAllowed > div:not([data-des="*"]).is3p.allowed * { + color: transparent !important; } #firewall > div.isCname > span:first-of-type { color: var(--popup-cell-cname-ink); @@ -386,16 +484,8 @@ pointer-events: auto; } #firewall > div.isDomain.hasSubdomains > span:first-of-type > span::before { - color: var(--ink-3); content: '\2026\A0'; - } -#firewall > div:first-of-type > span:first-of-type::before { - color: var(--ink-3); - content: '+'; - padding-right: 0.25em; - } -#firewall.expanded > div:first-of-type > span:first-of-type::before { - content: '\2012'; + opacity: 0.6; } #firewall > div[data-des="*"] > span:nth-of-type(3), #firewall > div.isSubdomain > span:nth-of-type(3), @@ -453,7 +543,7 @@ body.advancedUser #firewall > div > span:nth-of-type(2) { display: inline-flex; } -body.advancedUser #firewall > div:first-child ~ div[data-des="*"] { +body.advancedUser #firewall > div:first-of-type ~ div[data-des="*"] { display: flex; } body.advancedUser #firewall > div > span:first-of-type ~ span { @@ -631,7 +721,7 @@ } /* horizontally-constrained viewport */ -:root.portrait body { +:root.portrait:not(.desktop) body { overflow-y: auto; width: 100%; } @@ -647,7 +737,7 @@ min-width: unset; overflow-y: hidden; } -:root.portrait #firewall-vspacer { +:root.portrait body[data-more*="e"] #firewall-vspacer { display: block; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/settings.css ublock-origin-1.62.0+dfsg/src/css/settings.css --- ublock-origin-1.46.0+dfsg/src/css/settings.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/settings.css 2025-02-09 18:18:39.000000000 +0000 @@ -13,7 +13,7 @@ align-items: stretch; align-self: stretch; display: inline-flex; - justify-content: stretch + justify-content: stretch; user-select: none; } #themeMood > span { @@ -32,7 +32,7 @@ align-items: stretch; align-self: stretch; display: inline-flex; - justify-content: stretch + justify-content: stretch; position: relative; } #themePrimary > span { diff -Nru ublock-origin-1.46.0+dfsg/src/css/support.css ublock-origin-1.62.0+dfsg/src/css/support.css --- ublock-origin-1.46.0+dfsg/src/css/support.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/support.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,3 +1,8 @@ +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + body { margin-bottom: 6rem; } @@ -11,6 +16,7 @@ } .supportEntry { display: flex; + margin-block: 1em; } :root.mobile .supportEntry { flex-direction: column; @@ -48,6 +54,35 @@ display: none; } +body[data-should-update-lists]:not(.updated) .e .createEntry { + opacity: 0.25; + pointer-events: none; +} + +body:not([data-should-update-lists]) .shouldUpdate { + display: none; + } +body.updating { + pointer-events: none; + } +body.updating button { + filter: grayscale(1); + opacity: 0.5; + } +body.updated .shouldUpdate button { + display: none; + } +body.updating .shouldUpdate button .fa-icon svg { + animation: spin 1s linear infinite; + transform-origin: 50%; + } +body .shouldUpdate .updated { + align-self: center; + } +body:not(.updated) .shouldUpdate .updated { + display: none; + } + button { align-self: center; } @@ -56,6 +91,10 @@ cursor: pointer; } +#showSupportInfo { + cursor: pointer; + } + body.redacted #redactButton { display: none; } diff -Nru ublock-origin-1.46.0+dfsg/src/css/themes/default.css ublock-origin-1.62.0+dfsg/src/css/themes/default.css --- ublock-origin-1.46.0+dfsg/src/css/themes/default.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/themes/default.css 2025-02-09 18:18:39.000000000 +0000 @@ -35,6 +35,7 @@ --green-40: 84 255 189; --green-50: 63 225 176; --green-60: 42 195 162; + --green-65: 21 165 149; --green-70: 0 135 135; --green-80: 0 94 94; --ink-10: 57 52 115; @@ -127,8 +128,8 @@ * */ :root { --font-size: 14px; - --font-size-smaller: 13px; - --font-size-xsmall: 11px; + --font-size-smaller: calc(var(--font-size) - 1px); + --font-size-xsmall: calc(var(--font-size) - 3px); --font-size-larger: 15px; --font-family: Inter, sans-serif; --monospace-size: 12px; @@ -239,6 +240,8 @@ --dashboard-tab-focus-surface-rgb: var(--primary-90); --dashboard-highlight-surface-rgb: var(--primary-90); + --dashboard-happy-green: rgb(var(--green-65)); + /* popup panel */ --popup-cell-cname-ink: #0054d7; /* h260 S:100 Luv:40 */; --popup-cell-label-mixed-surface: #c29100; /* TODO: fix */ @@ -284,6 +287,7 @@ --sf-notice-ink: var(--ink-4); --sf-readonly-ink: var(--ink-3); --sf-tag-ink: #006e2e /* h:135 S:100 Luv:40 */; + --sf-unicode-ink: var(--ink-1); --sf-value-ink: #974900 /* h:30 S:100 Luv:40 */; --sf-variable-ink: var(--ink-1); --sf-warning-ink: #e49d00; /* h:50 S:100 Luv:70 */ @@ -296,8 +300,9 @@ /* logger */ --logger-modified-surface: #0000c010; - --logger-redirected-surface: rgb(var(--yellow-5) / 50%); --logger-modified-em-surface: #0000c028; + --logger-redirected-surface: rgb(var(--yellow-5) / 50%); + --logger-scriptlet-surface: rgb(var(--yellow-30) / 50%); } /* https://material.io/design/color/dark-theme.html */ @@ -373,6 +378,7 @@ /* logger */ --logger-modified-surface: #663efd60; --logger-redirected-surface: rgb(var(--yellow-5) / 40%); + --logger-scriptlet-surface: rgb(var(--yellow-30) / 40%); } :root.dark input, @@ -416,6 +422,7 @@ --checkbox-ink: var(--ink-3); --checkbox-checked-ink: var(--accent-surface-1); --checkbox-disabled-filter: opacity(50%); + --checkbox-margin-end: calc(var(--font-size) * 0.75); --notice-ink: var(--accent-ink-1); --notice-surface: var(--accent-surface-1); diff -Nru ublock-origin-1.46.0+dfsg/src/css/whitelist.css ublock-origin-1.62.0+dfsg/src/css/whitelist.css --- ublock-origin-1.46.0+dfsg/src/css/whitelist.css 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/css/whitelist.css 2025-02-09 18:18:39.000000000 +0000 @@ -1,5 +1,6 @@ html { height: 100vh; + height: 100svh; overflow: hidden; width: 100vw; } diff -Nru ublock-origin-1.46.0+dfsg/src/dashboard.html ublock-origin-1.62.0+dfsg/src/dashboard.html --- ublock-origin-1.46.0+dfsg/src/dashboard.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/dashboard.html 2025-02-09 18:18:39.000000000 +0000 @@ -4,23 +4,28 @@ - - - + + + + - + +
- + + + + book
@@ -31,16 +36,19 @@
- + + + + diff -Nru ublock-origin-1.46.0+dfsg/src/devtools.html ublock-origin-1.62.0+dfsg/src/devtools.html --- ublock-origin-1.46.0+dfsg/src/devtools.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/devtools.html 2025-02-09 18:18:39.000000000 +0000 @@ -29,6 +29,9 @@ + + +
@@ -41,13 +44,14 @@ - - - - + + + + + diff -Nru ublock-origin-1.46.0+dfsg/src/document-blocked.html ublock-origin-1.62.0+dfsg/src/document-blocked.html --- ublock-origin-1.46.0+dfsg/src/document-blocked.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/document-blocked.html 2025-02-09 18:18:39.000000000 +0000 @@ -33,6 +33,9 @@
+ +
@@ -42,18 +45,19 @@ - - + + - + diff -Nru ublock-origin-1.46.0+dfsg/src/dyna-rules.html ublock-origin-1.62.0+dfsg/src/dyna-rules.html --- ublock-origin-1.46.0+dfsg/src/dyna-rules.html 2023-01-23 21:00:41.000000000 +0000 +++ ublock-origin-1.62.0+dfsg/src/dyna-rules.html 2025-02-09 18:18:39.000000000 +0000 @@ -20,7 +20,7 @@
-

info-circle

+

@@ -40,7 +40,7 @@
filter  double-angle-up
-
+
- info-circle + +
+
+ book
@@ -34,9 +37,9 @@
+ -
@@ -51,22 +54,33 @@ - + - + angle-up
-
+
+
+ +
css/fontimagemediascript
+
xhrframedomscriptletother
+
+
+
tabless
+
getheadpost
+
+ + csppermissionsredirectremoveparamreplaceurlskip + +
+
-
css/fontimagemediascript
-
xhrframedomother
+
infoerror
-
-
@@ -85,32 +99,46 @@
-
00:00:00 ** 3,3inline-script 
+
00:00:00 ** 3,3optionsinline-script 
+
+
+
+
+ +   + +
+
+
+
+
+
-