@browserless.io/browserless 2.32.1-beta-1 → 2.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/build/browsers/browsers.playwright.d.ts +1 -1
  3. package/build/browsers/browsers.playwright.js +6 -3
  4. package/build/routes/chrome/http/content.post.body.json +9 -8
  5. package/build/routes/chrome/http/pdf.post.body.json +9 -8
  6. package/build/routes/chrome/http/scrape.post.body.json +9 -8
  7. package/build/routes/chrome/http/screenshot.post.body.json +9 -8
  8. package/build/routes/chrome/tests/websocket.spec.js +2 -0
  9. package/build/routes/chromium/http/content.post.body.json +9 -8
  10. package/build/routes/chromium/http/pdf.post.body.json +9 -8
  11. package/build/routes/chromium/http/scrape.post.body.json +9 -8
  12. package/build/routes/chromium/http/screenshot.post.body.json +9 -8
  13. package/build/routes/chromium/tests/websocket.spec.js +2 -0
  14. package/build/routes/edge/http/content.post.body.json +9 -8
  15. package/build/routes/edge/http/pdf.post.body.json +9 -8
  16. package/build/routes/edge/http/scrape.post.body.json +9 -8
  17. package/build/routes/edge/http/screenshot.post.body.json +9 -8
  18. package/build/routes/edge/tests/websocket.spec.js +3 -1
  19. package/build/routes/firefox/tests/websocket.spec.js +2 -0
  20. package/build/routes/webkit/tests/websocket.spec.js +2 -0
  21. package/extensions/ublocklite/_locales/ar/messages.json +34 -2
  22. package/extensions/ublocklite/_locales/az/messages.json +34 -2
  23. package/extensions/ublocklite/_locales/be/messages.json +33 -1
  24. package/extensions/ublocklite/_locales/bg/messages.json +32 -0
  25. package/extensions/ublocklite/_locales/bn/messages.json +32 -0
  26. package/extensions/ublocklite/_locales/br_FR/messages.json +32 -0
  27. package/extensions/ublocklite/_locales/bs/messages.json +34 -2
  28. package/extensions/ublocklite/_locales/ca/messages.json +32 -0
  29. package/extensions/ublocklite/_locales/cs/messages.json +34 -2
  30. package/extensions/ublocklite/_locales/cv/messages.json +34 -2
  31. package/extensions/ublocklite/_locales/cy/messages.json +32 -0
  32. package/extensions/ublocklite/_locales/da/messages.json +32 -0
  33. package/extensions/ublocklite/_locales/de/messages.json +34 -2
  34. package/extensions/ublocklite/_locales/el/messages.json +32 -0
  35. package/extensions/ublocklite/_locales/en/messages.json +34 -2
  36. package/extensions/ublocklite/_locales/en_GB/messages.json +32 -0
  37. package/extensions/ublocklite/_locales/eo/messages.json +34 -2
  38. package/extensions/ublocklite/_locales/es/messages.json +34 -2
  39. package/extensions/ublocklite/_locales/et/messages.json +41 -9
  40. package/extensions/ublocklite/_locales/eu/messages.json +32 -0
  41. package/extensions/ublocklite/_locales/fa/messages.json +34 -2
  42. package/extensions/ublocklite/_locales/fi/messages.json +32 -0
  43. package/extensions/ublocklite/_locales/fil/messages.json +32 -0
  44. package/extensions/ublocklite/_locales/fr/messages.json +34 -2
  45. package/extensions/ublocklite/_locales/fy/messages.json +34 -2
  46. package/extensions/ublocklite/_locales/gl/messages.json +32 -0
  47. package/extensions/ublocklite/_locales/gu/messages.json +34 -2
  48. package/extensions/ublocklite/_locales/he/messages.json +33 -1
  49. package/extensions/ublocklite/_locales/hi/messages.json +33 -1
  50. package/extensions/ublocklite/_locales/hr/messages.json +34 -2
  51. package/extensions/ublocklite/_locales/hu/messages.json +32 -0
  52. package/extensions/ublocklite/_locales/hy/messages.json +33 -1
  53. package/extensions/ublocklite/_locales/id/messages.json +32 -0
  54. package/extensions/ublocklite/_locales/it/messages.json +32 -0
  55. package/extensions/ublocklite/_locales/ja/messages.json +32 -0
  56. package/extensions/ublocklite/_locales/ka/messages.json +32 -0
  57. package/extensions/ublocklite/_locales/kk/messages.json +34 -2
  58. package/extensions/ublocklite/_locales/kn/messages.json +34 -2
  59. package/extensions/ublocklite/_locales/ko/messages.json +32 -0
  60. package/extensions/ublocklite/_locales/lt/messages.json +34 -2
  61. package/extensions/ublocklite/_locales/lv/messages.json +32 -0
  62. package/extensions/ublocklite/_locales/mk/messages.json +33 -1
  63. package/extensions/ublocklite/_locales/ml/messages.json +34 -2
  64. package/extensions/ublocklite/_locales/mr/messages.json +34 -2
  65. package/extensions/ublocklite/_locales/ms/messages.json +34 -2
  66. package/extensions/ublocklite/_locales/nb/messages.json +32 -0
  67. package/extensions/ublocklite/_locales/nl/messages.json +34 -2
  68. package/extensions/ublocklite/_locales/oc/messages.json +34 -2
  69. package/extensions/ublocklite/_locales/pa/messages.json +33 -1
  70. package/extensions/ublocklite/_locales/pl/messages.json +33 -1
  71. package/extensions/ublocklite/_locales/pt_BR/messages.json +56 -24
  72. package/extensions/ublocklite/_locales/pt_PT/messages.json +32 -0
  73. package/extensions/ublocklite/_locales/ro/messages.json +33 -1
  74. package/extensions/ublocklite/_locales/ru/messages.json +34 -2
  75. package/extensions/ublocklite/_locales/si/messages.json +32 -0
  76. package/extensions/ublocklite/_locales/sk/messages.json +32 -0
  77. package/extensions/ublocklite/_locales/sl/messages.json +34 -2
  78. package/extensions/ublocklite/_locales/so/messages.json +34 -2
  79. package/extensions/ublocklite/_locales/sq/messages.json +32 -0
  80. package/extensions/ublocklite/_locales/sr/messages.json +33 -1
  81. package/extensions/ublocklite/_locales/sv/messages.json +34 -2
  82. package/extensions/ublocklite/_locales/sw/messages.json +34 -2
  83. package/extensions/ublocklite/_locales/ta/messages.json +34 -2
  84. package/extensions/ublocklite/_locales/te/messages.json +34 -2
  85. package/extensions/ublocklite/_locales/th/messages.json +33 -1
  86. package/extensions/ublocklite/_locales/tr/messages.json +32 -0
  87. package/extensions/ublocklite/_locales/uk/messages.json +32 -0
  88. package/extensions/ublocklite/_locales/ur/messages.json +34 -2
  89. package/extensions/ublocklite/_locales/vi/messages.json +32 -0
  90. package/extensions/ublocklite/_locales/zh_CN/messages.json +39 -7
  91. package/extensions/ublocklite/_locales/zh_TW/messages.json +32 -0
  92. package/extensions/ublocklite/css/dashboard.css +0 -1
  93. package/extensions/ublocklite/css/default.css +1 -1
  94. package/extensions/ublocklite/css/develop.css +25 -2
  95. package/extensions/ublocklite/css/fonts/Inter/Inter-Regular.woff2 +0 -0
  96. package/extensions/ublocklite/css/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  97. package/extensions/ublocklite/css/picker-ui.css +144 -0
  98. package/extensions/ublocklite/css/popup.css +91 -181
  99. package/extensions/ublocklite/css/tool-overlay-ui.css +99 -0
  100. package/extensions/ublocklite/css/unpicker-ui.css +62 -0
  101. package/extensions/ublocklite/css/zapper-ui.css +4 -42
  102. package/extensions/ublocklite/dashboard.html +4 -1
  103. package/extensions/ublocklite/js/background.js +67 -21
  104. package/extensions/ublocklite/js/dashboard.js +6 -1
  105. package/extensions/ublocklite/js/debug.js +9 -9
  106. package/extensions/ublocklite/js/develop.js +14 -12
  107. package/extensions/ublocklite/js/ext-compat.js +1 -1
  108. package/extensions/ublocklite/js/ext.js +11 -0
  109. package/extensions/ublocklite/js/filter-manager.js +157 -0
  110. package/extensions/ublocklite/js/mode-editor.js +10 -6
  111. package/extensions/ublocklite/js/picker-ui.js +431 -0
  112. package/extensions/ublocklite/js/popup.js +35 -106
  113. package/extensions/ublocklite/js/report.js +4 -105
  114. package/extensions/ublocklite/js/scripting/css-user.js +37 -0
  115. package/extensions/ublocklite/js/scripting/isolated-api.js +1 -1
  116. package/extensions/ublocklite/js/scripting/picker.js +270 -0
  117. package/extensions/ublocklite/js/scripting/tool-overlay.js +360 -0
  118. package/extensions/ublocklite/js/scripting/unpicker.js +61 -0
  119. package/extensions/ublocklite/js/scripting/zapper.js +25 -308
  120. package/extensions/ublocklite/js/scripting-manager.js +11 -7
  121. package/extensions/ublocklite/js/tool-overlay-ui.js +241 -0
  122. package/extensions/ublocklite/js/troubleshooting.js +123 -0
  123. package/extensions/ublocklite/js/ubo-parser.js +5 -1
  124. package/extensions/ublocklite/js/unpicker-ui.js +164 -0
  125. package/extensions/ublocklite/js/zapper-ui.js +44 -149
  126. package/extensions/ublocklite/lib/codemirror/cm6.bundle.ubol.min.js +1 -1
  127. package/extensions/ublocklite/manifest.json +22 -1
  128. package/extensions/ublocklite/picker-ui.html +56 -0
  129. package/extensions/ublocklite/popup.html +22 -21
  130. package/extensions/ublocklite/report.html +1 -1
  131. package/extensions/ublocklite/rulesets/generic-details.json +5 -61
  132. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +5 -8
  133. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +14 -13
  134. package/extensions/ublocklite/rulesets/main/annoyances-others.json +2 -1
  135. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +5 -14
  136. package/extensions/ublocklite/rulesets/main/annoyances-widgets.json +1 -1
  137. package/extensions/ublocklite/rulesets/main/block-lan.json +2 -1
  138. package/extensions/ublocklite/rulesets/main/chn-0.json +25 -16
  139. package/extensions/ublocklite/rulesets/main/deu-0.json +1 -1
  140. package/extensions/ublocklite/rulesets/main/dpollock-0.json +4 -0
  141. package/extensions/ublocklite/rulesets/main/easylist.json +21 -26
  142. package/extensions/ublocklite/rulesets/main/easyprivacy.json +43 -15
  143. package/extensions/ublocklite/rulesets/main/fin-0.json +8 -20
  144. package/extensions/ublocklite/rulesets/main/fra-0.json +7 -25
  145. package/extensions/ublocklite/rulesets/main/hun-0.json +5 -2
  146. package/extensions/ublocklite/rulesets/main/idn-0.json +9 -3
  147. package/extensions/ublocklite/rulesets/main/ind-0.json +51 -37
  148. package/extensions/ublocklite/rulesets/main/isr-0.json +1 -1
  149. package/extensions/ublocklite/rulesets/main/ita-0.json +1 -0
  150. package/extensions/ublocklite/rulesets/main/jpn-1.json +21 -33
  151. package/extensions/ublocklite/rulesets/main/kor-1.json +5 -1
  152. package/extensions/ublocklite/rulesets/main/nld-0.json +1 -1
  153. package/extensions/ublocklite/rulesets/main/nor-0.json +25 -3
  154. package/extensions/ublocklite/rulesets/main/pgl.json +4 -22
  155. package/extensions/ublocklite/rulesets/main/pol-0.json +2 -0
  156. package/extensions/ublocklite/rulesets/main/rus-0.json +28 -42
  157. package/extensions/ublocklite/rulesets/main/rus-1.json +3 -2
  158. package/extensions/ublocklite/rulesets/main/spa-1.json +12 -14
  159. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +18360 -761
  160. package/extensions/ublocklite/rulesets/main/swe-1.json +37 -36
  161. package/extensions/ublocklite/rulesets/main/tur-0.json +27 -17
  162. package/extensions/ublocklite/rulesets/main/ublock-badware.json +10 -5
  163. package/extensions/ublocklite/rulesets/main/ublock-filters.json +75 -96
  164. package/extensions/ublocklite/rulesets/main/ukr-0.json +5 -11
  165. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +333 -648
  166. package/extensions/ublocklite/rulesets/main/vie-1.json +28 -28
  167. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +4 -0
  168. package/extensions/ublocklite/rulesets/modify-headers/easylist.json +1 -1
  169. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +1 -0
  170. package/extensions/ublocklite/rulesets/modify-headers/swe-1.json +1 -2
  171. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +3 -6
  172. package/extensions/ublocklite/rulesets/modify-headers/vie-1.json +2 -2
  173. package/extensions/ublocklite/rulesets/redirect/fin-0.json +19 -0
  174. package/extensions/ublocklite/rulesets/redirect/isr-0.json +1 -1
  175. package/extensions/ublocklite/rulesets/redirect/jpn-1.json +0 -1
  176. package/extensions/ublocklite/rulesets/redirect/spa-1.json +2 -2
  177. package/extensions/ublocklite/rulesets/redirect/swe-1.json +1 -1
  178. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +52 -47
  179. package/extensions/ublocklite/rulesets/redirect/vie-1.json +18 -2
  180. package/extensions/ublocklite/rulesets/regex/chn-0.json +2 -1
  181. package/extensions/ublocklite/rulesets/regex/easylist.json +1 -1
  182. package/extensions/ublocklite/rulesets/regex/jpn-1.json +3 -3
  183. package/extensions/ublocklite/rulesets/regex/kor-1.json +1 -1
  184. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -5
  185. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +11 -7
  186. package/extensions/ublocklite/rulesets/regex/ukr-0.json +2 -2
  187. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +14 -12
  188. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +1 -1
  189. package/extensions/ublocklite/rulesets/removeparam/ublock-filters.json +2 -1
  190. package/extensions/ublocklite/rulesets/ruleset-details.json +227 -227
  191. package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +3 -3
  192. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +1 -1
  193. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +3 -3
  194. package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +3 -3
  195. package/extensions/ublocklite/rulesets/scripting/declarative/fin-0.js +3 -3
  196. package/extensions/ublocklite/rulesets/scripting/declarative/fra-0.js +3 -3
  197. package/extensions/ublocklite/rulesets/scripting/declarative/idn-0.js +3 -3
  198. package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +3 -3
  199. package/extensions/ublocklite/rulesets/scripting/declarative/kor-1.js +3 -3
  200. package/extensions/ublocklite/rulesets/scripting/declarative/pol-0.js +3 -3
  201. package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
  202. package/extensions/ublocklite/rulesets/scripting/declarative/rus-1.js +1 -1
  203. package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
  204. package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
  205. package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
  206. package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/declarative/ukr-0.js +1 -1
  208. package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +3 -3
  209. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  210. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-overlays.js +2 -2
  211. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
  212. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  213. package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +2 -2
  214. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
  215. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +3 -3
  216. package/extensions/ublocklite/rulesets/scripting/generic/ind-0.js +2 -2
  217. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/generic/nld-0.js +1 -1
  219. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +1 -1
  220. package/extensions/ublocklite/rulesets/scripting/generic/swe-1.js +1 -1
  221. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +2 -2
  222. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +2 -2
  223. package/extensions/ublocklite/rulesets/scripting/generic/vie-1.js +1 -1
  224. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +4 -0
  225. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +6 -0
  226. package/extensions/ublocklite/rulesets/scripting/generichigh/nor-0.css +2 -1
  227. package/extensions/ublocklite/rulesets/scripting/generichigh/rus-0.css +1 -0
  228. package/extensions/ublocklite/rulesets/scripting/generichigh/ublock-filters.css +0 -1
  229. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  230. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-others.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-social.js +3 -3
  233. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +3 -3
  234. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  235. package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +3 -3
  236. package/extensions/ublocklite/rulesets/scripting/procedural/idn-0.js +3 -3
  237. package/extensions/ublocklite/rulesets/scripting/procedural/ind-0.js +3 -3
  238. package/extensions/ublocklite/rulesets/scripting/procedural/ita-0.js +1 -1
  239. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  240. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  241. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  242. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  243. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +2 -2
  244. package/extensions/ublocklite/rulesets/scripting/procedural/tur-0.js +3 -3
  245. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-badware.js +1 -1
  246. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.remove-class.js +2 -2
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +1 -1
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/{annoyances-overlays.href-sanitizer.js → annoyances-cookies.remove-node-text.js} +104 -196
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +2 -2
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-session-storage-item.js +2 -2
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +2 -2
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +3 -3
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-cookie.js +2 -2
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +2 -2
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-write.js +2 -2
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-stack-trace.js +1 -1
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.noeval-if.js +1 -1
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-fetch.js +2 -2
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setInterval.js +2 -2
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.prevent-setTimeout.js +2 -2
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-attr.js +2 -2
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +1 -1
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +1 -1
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +2 -2
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +2 -2
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-session-storage-item.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-local-storage-item.js +2 -2
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.addEventListener-defuser.js +2 -2
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.evaldata-prune.js +1 -1
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-window-open.js +1 -1
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.remove-attr.js +2 -2
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +2 -2
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.json-prune-xhr-response.js +2 -2
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.json-prune-fetch-response.js +2 -2
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.json-prune.js +2 -2
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-setInterval.js +2 -2
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-setTimeout.js +2 -2
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-window-open.js +1 -1
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.remove-attr.js +1 -1
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-fetch.js +2 -2
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.adjust-setInterval.js +1 -1
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/idn-0.prevent-fetch.js +1 -1
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +2 -2
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-property-read.js +1 -1
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.adjust-setInterval.js +1 -1
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setInterval.js +2 -2
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +2 -2
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-window-open.js +1 -1
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-current-script.js +2 -2
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  301. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +2 -2
  302. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +2 -2
  303. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
  304. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  305. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +2 -2
  306. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  307. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie.js +2 -2
  308. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +1 -1
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +2 -2
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +2 -2
  312. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-fetch.js +1 -1
  313. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setTimeout.js +2 -2
  314. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  315. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-xhr.js +1 -1
  316. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +1 -1
  317. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  318. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  319. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  320. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +2 -2
  321. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  322. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  323. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
  324. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  325. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.evaldata-prune.js +1 -1
  326. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.href-sanitizer.js +2 -2
  327. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-fetch-response.js +2 -2
  328. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
  329. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.m3u-prune.js +1 -1
  330. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +2 -2
  331. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.nowebrtc.js +1 -1
  332. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +2 -2
  333. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-refresh.js +1 -1
  334. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-requestAnimationFrame.js +2 -2
  335. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setInterval.js +1 -1
  336. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +3 -3
  337. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +3 -3
  338. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  339. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  340. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +2 -2
  341. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +2 -2
  342. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  343. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +2 -2
  344. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  345. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-session-storage-item.js +2 -2
  346. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-create-html.js +360 -0
  347. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +2 -2
  348. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +1 -1
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie.js +3 -3
  351. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +2 -2
  352. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
  353. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.xml-prune.js +2 -2
  354. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-write.js +1 -1
  355. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.remove-class.js +1 -1
  356. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +1 -1
  357. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  358. package/extensions/ublocklite/rulesets/scripting/scriptlet/{fra-0.abort-on-stack-trace.js → vie-1.json-prune.js} +189 -104
  359. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
  360. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  361. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  362. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  363. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  364. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  365. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  366. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  367. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  368. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  369. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  370. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  371. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  372. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  373. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +3 -3
  374. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  375. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  376. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  377. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  378. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  379. package/extensions/ublocklite/rulesets/scripting/specific/pol-0.js +3 -3
  380. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  381. package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +3 -3
  382. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  383. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  384. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  385. package/extensions/ublocklite/rulesets/scripting/specific/ublock-badware.js +3 -3
  386. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  387. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  388. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  389. package/extensions/ublocklite/rulesets/scriptlet-details.json +316 -576
  390. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +0 -1
  391. package/extensions/ublocklite/rulesets/strictblock/annoyances-cookies.json +2 -1
  392. package/extensions/ublocklite/rulesets/strictblock/annoyances-overlays.json +0 -1
  393. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +185 -6
  394. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +4 -0
  395. package/extensions/ublocklite/rulesets/strictblock/easylist.json +7 -7
  396. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +25 -2
  397. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +1 -0
  398. package/extensions/ublocklite/rulesets/strictblock/hun-0.json +1 -0
  399. package/extensions/ublocklite/rulesets/strictblock/isr-0.json +3 -0
  400. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +159 -161
  401. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
  402. package/extensions/ublocklite/rulesets/strictblock/pgl.json +4 -22
  403. package/extensions/ublocklite/rulesets/strictblock/rus-0.json +0 -1
  404. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +2 -17
  405. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +18360 -761
  406. package/extensions/ublocklite/rulesets/strictblock/swe-1.json +4 -2
  407. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +5 -1
  408. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +459 -457
  409. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +3 -2
  410. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +1 -8
  411. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +333 -648
  412. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +2 -0
  413. package/extensions/ublocklite/rulesets/urlskip/annoyances-overlays.json +0 -6
  414. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +14 -0
  415. package/extensions/ublocklite/ublock.zip +0 -0
  416. package/extensions/ublocklite/unpicker-ui.html +40 -0
  417. package/extensions/ublocklite/zapper-ui.html +2 -1
  418. package/package.json +20 -20
  419. package/scripts/build-schemas.js +1 -1
  420. package/src/browsers/browsers.playwright.ts +6 -4
  421. package/src/routes/chrome/tests/websocket.spec.ts +2 -0
  422. package/src/routes/chromium/tests/websocket.spec.ts +2 -0
  423. package/src/routes/edge/tests/websocket.spec.ts +3 -1
  424. package/src/routes/firefox/tests/websocket.spec.ts +2 -1
  425. package/src/routes/webkit/tests/websocket.spec.ts +2 -0
  426. package/static/docs/swagger.json +22 -10
  427. package/static/docs/swagger.min.json +21 -9
  428. package/static/function/client.js +47 -12
  429. package/static/function/index.html +47 -12
  430. package/extensions/ublocklite/css/fonts/Metropolis/Metropolis-Regular.woff2 +0 -0
  431. package/extensions/ublocklite/css/fonts/Metropolis/Metropolis-SemiBold.woff2 +0 -0
  432. package/extensions/ublocklite/css/fonts/Metropolis/README.md +0 -25
  433. package/extensions/ublocklite/css/fonts/Metropolis/UNLICENSE +0 -24
@@ -0,0 +1,431 @@
1
+ /*******************************************************************************
2
+
3
+ uBlock Origin - a comprehensive, efficient content blocker
4
+ Copyright (C) 2025-present Raymond Hill
5
+
6
+ This program is free software: you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation, either version 3 of the License, or
9
+ (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
18
+
19
+ Home: https://github.com/gorhill/uBlock
20
+ */
21
+
22
+ import { dom, qs$, qsa$ } from './dom.js';
23
+ import { localRead, localWrite } from './ext.js';
24
+ import { toolOverlay } from './tool-overlay-ui.js';
25
+
26
+ /******************************************************************************/
27
+
28
+ let selectorPartsDB = new Map();
29
+ let sliderParts = [];
30
+ let previewCSS = '';
31
+
32
+ /******************************************************************************/
33
+
34
+ function isValidSelector(selector) {
35
+ isValidSelector.error = undefined;
36
+ if ( selector === '' ) { return false; }
37
+ try {
38
+ void document.querySelector(`${selector},a`);
39
+ } catch (reason) {
40
+ isValidSelector.error = reason;
41
+ return false;
42
+ }
43
+ return true;
44
+ }
45
+
46
+ /******************************************************************************/
47
+
48
+ function onSvgTouch(ev) {
49
+ if ( ev.type === 'touchstart' ) {
50
+ onSvgTouch.x0 = ev.touches[0].screenX;
51
+ onSvgTouch.y0 = ev.touches[0].screenY;
52
+ onSvgTouch.t0 = ev.timeStamp;
53
+ return;
54
+ }
55
+ if ( onSvgTouch.x0 === undefined ) { return; }
56
+ const stopX = ev.changedTouches[0].screenX;
57
+ const stopY = ev.changedTouches[0].screenY;
58
+ const distance = Math.sqrt(
59
+ Math.pow(stopX - onSvgTouch.x0, 2) +
60
+ Math.pow(stopY - onSvgTouch.y0, 2)
61
+ );
62
+ // Interpret touch events as a tap if:
63
+ // - Swipe is not valid; and
64
+ // - The time between start and stop was less than 200ms.
65
+ const duration = ev.timeStamp - onSvgTouch.t0;
66
+ if ( distance >= 32 || duration >= 200 ) { return; }
67
+ onSvgClicked({
68
+ type: 'touch',
69
+ target: ev.target,
70
+ clientX: ev.changedTouches[0].pageX,
71
+ clientY: ev.changedTouches[0].pageY,
72
+ });
73
+ ev.preventDefault();
74
+ }
75
+ onSvgTouch.x0 = onSvgTouch.y0 = 0;
76
+ onSvgTouch.t0 = 0;
77
+
78
+ /******************************************************************************/
79
+
80
+ function onSvgClicked(ev) {
81
+ // Unpause picker if:
82
+ // - click outside dialog AND
83
+ // - not in preview mode
84
+ if ( dom.cl.has(dom.root, 'paused') ) {
85
+ if ( dom.cl.has(dom.root, 'preview') ) {
86
+ updatePreview(false);
87
+ }
88
+ unpausePicker();
89
+ return;
90
+ }
91
+ // Force dialog to always be visible when using a touch-driven device.
92
+ if ( ev.type === 'touch' ) {
93
+ dom.cl.add(dom.root, 'show');
94
+ }
95
+ toolOverlay.postMessage({
96
+ what: 'candidatesAtPoint',
97
+ mx: ev.clientX,
98
+ my: ev.clientY,
99
+ broad: ev.ctrlKey,
100
+ }).then(details => {
101
+ showDialog(details);
102
+ });
103
+ }
104
+
105
+ /******************************************************************************/
106
+
107
+ function onKeyPressed(ev) {
108
+ if ( ev.key === 'Escape' || ev.which === 27 ) {
109
+ quitPicker();
110
+ return;
111
+ }
112
+ }
113
+
114
+ /******************************************************************************/
115
+
116
+ function onMinimizeClicked() {
117
+ if ( dom.cl.has(dom.root, 'paused') === false ) {
118
+ pausePicker();
119
+ highlightCandidate();
120
+ return;
121
+ }
122
+ dom.cl.toggle(dom.root, 'minimized');
123
+ }
124
+
125
+ /******************************************************************************/
126
+
127
+ function onFilterTextChanged() {
128
+ highlightCandidate();
129
+ }
130
+
131
+ /******************************************************************************/
132
+
133
+ function toggleView(view, persist = false) {
134
+ dom.root.dataset.view = `${view}`;
135
+ if ( persist !== true ) { return; }
136
+ localWrite('picker.view', dom.root.dataset.view);
137
+ }
138
+
139
+ function onViewToggled(dir) {
140
+ let view = parseInt(dom.root.dataset.view, 10);
141
+ view += dir;
142
+ if ( view < 0 ) { view = 0; }
143
+ if ( view > 2 ) { view = 2; }
144
+ toggleView(view, true);
145
+ }
146
+
147
+ /******************************************************************************/
148
+
149
+ function selectorFromCandidates() {
150
+ const selectorParts = [];
151
+ let liPrevious = null;
152
+ for ( const li of qsa$('#candidateFilters li') ) {
153
+ const selector = [];
154
+ for ( const span of qsa$(li, '.on[data-part]') ) {
155
+ selector.push(span.textContent);
156
+ }
157
+ if ( selector.length !== 0 ) {
158
+ if ( liPrevious !== null ) {
159
+ if ( li.previousElementSibling === liPrevious ) {
160
+ selectorParts.unshift(' > ');
161
+ } else if ( liPrevious !== li ) {
162
+ selectorParts.unshift(' ');
163
+ }
164
+ }
165
+ liPrevious = li;
166
+ selectorParts.unshift(selector.join(''));
167
+ }
168
+ }
169
+ return selectorParts.join('');
170
+ }
171
+
172
+ /******************************************************************************/
173
+
174
+ function onSliderChanged(ev) {
175
+ updateSlider(ev.target.valueAsNumber);
176
+ }
177
+
178
+ function updateSlider(i) {
179
+ qs$('#slider').value = i;
180
+ dom.cl.remove('#candidateFilters [data-part]', 'on');
181
+ const parts = sliderParts[i];
182
+ for ( const address of parts ) {
183
+ dom.cl.add(`#candidateFilters [data-part="${address}"]`, 'on');
184
+ }
185
+ const selector = selectorFromCandidates();
186
+ qs$('textarea').value = selector;
187
+ highlightCandidate();
188
+ }
189
+
190
+ /******************************************************************************/
191
+
192
+ function updateElementCount(details) {
193
+ const { count, error } = details;
194
+ const span = qs$('#resultsetCount');
195
+ if ( error ) {
196
+ span.textContent = 'Error';
197
+ span.setAttribute('title', error);
198
+ } else {
199
+ span.textContent = count;
200
+ span.removeAttribute('title');
201
+ }
202
+ const disabled = Boolean(count) === false ? '' : null;
203
+ dom.attr('#create', 'disabled', disabled);
204
+ updatePreview();
205
+ }
206
+
207
+ /******************************************************************************/
208
+
209
+ function onPreviewClicked() {
210
+ dom.cl.toggle(dom.root, 'preview');
211
+ updatePreview();
212
+ }
213
+
214
+ function updatePreview(state) {
215
+ if ( state === undefined ) {
216
+ state = dom.cl.has(dom.root, 'preview');
217
+ } else {
218
+ dom.cl.toggle(dom.root, 'preview', state)
219
+ }
220
+ if ( previewCSS !== '' ) {
221
+ toolOverlay.postMessage({ what: 'removeCSS', css: previewCSS });
222
+ previewCSS = '';
223
+ }
224
+ if ( state === false ) { return; }
225
+ const selector = qs$('textarea').value;
226
+ if ( isValidSelector(selector) === false ) { return; }
227
+ previewCSS = `${selector}{display:none!important;}`;
228
+ toolOverlay.postMessage({ what: 'insertCSS', css: previewCSS });
229
+ }
230
+
231
+ /******************************************************************************/
232
+
233
+ async function onCreateClicked() {
234
+ const selector = qs$('textarea').value;
235
+ if ( isValidSelector(selector) === false ) { return; }
236
+ await toolOverlay.postMessage({ what: 'uninjectCustomFilters' }).then(( ) =>
237
+ toolOverlay.sendMessage({
238
+ what: 'addCustomFilter',
239
+ hostname: toolOverlay.url.hostname,
240
+ selector,
241
+ })
242
+ ).then(( ) =>
243
+ toolOverlay.postMessage({ what: 'injectCustomFilters' })
244
+ );
245
+ qs$('textarea').value = '';
246
+ dom.cl.remove(dom.root, 'preview');
247
+ quitPicker();
248
+ }
249
+
250
+ /******************************************************************************/
251
+
252
+ function attributeNameFromSelector(part) {
253
+ const pos = part.search(/\^?=/);
254
+ return part.slice(1, pos);
255
+ }
256
+
257
+ /******************************************************************************/
258
+
259
+ function onCandidateClicked(ev) {
260
+ const target = ev.target;
261
+ if ( target.matches('[data-part]') ) {
262
+ const address = target.dataset.part;
263
+ const part = selectorPartsDB.get(parseInt(address, 10));
264
+ if ( part.startsWith('[') ) {
265
+ if ( target.textContent === part ) {
266
+ target.textContent = `[${attributeNameFromSelector(part)}]`;
267
+ dom.cl.remove(target, 'on');
268
+ } else if ( dom.cl.has(target, 'on') ) {
269
+ target.textContent = part;
270
+ } else {
271
+ dom.cl.add(target, 'on');
272
+ }
273
+ } else {
274
+ dom.cl.toggle(target, 'on');
275
+ }
276
+ } else if ( target.matches('li') ) {
277
+ if ( qs$(target, ':scope > span:not(.on)') !== null ) {
278
+ dom.cl.add(qsa$(target, ':scope > [data-part]:not(.on)'), 'on');
279
+ } else {
280
+ dom.cl.remove(qsa$(target, ':scope > [data-part]'), 'on');
281
+ }
282
+ }
283
+ const selector = selectorFromCandidates();
284
+ qs$('textarea').value = selector;
285
+ highlightCandidate();
286
+ }
287
+
288
+ /******************************************************************************/
289
+
290
+ function showDialog(msg) {
291
+ pausePicker();
292
+
293
+ /* global */selectorPartsDB = new Map(msg.partsDB);
294
+ const { listParts } = msg;
295
+ const root = qs$('#candidateFilters');
296
+ const ul = qs$(root, 'ul');
297
+ while ( ul.firstChild !== null ) {
298
+ ul.firstChild.remove();
299
+ }
300
+ for ( const parts of listParts ) {
301
+ const li = document.createElement('li');
302
+ for ( const address of parts ) {
303
+ const span = document.createElement('span');
304
+ const part = selectorPartsDB.get(address);
305
+ span.dataset.part = address;
306
+ if ( part.startsWith('[') ) {
307
+ span.textContent = `[${attributeNameFromSelector(part)}]`;
308
+ } else {
309
+ span.textContent = part;
310
+ }
311
+ li.append(span);
312
+ }
313
+ ul.appendChild(li);
314
+ }
315
+
316
+ /* global */sliderParts = msg.sliderParts;
317
+ const slider = qs$('#slider');
318
+ const last = sliderParts.length - 1;
319
+ dom.attr(slider, 'max', last);
320
+ dom.attr(slider, 'value', last);
321
+ dom.attr(slider, 'disabled', last !== 0 ? null : '');
322
+ updateSlider(last);
323
+ }
324
+
325
+ /******************************************************************************/
326
+
327
+ function highlightCandidate() {
328
+ const selector = qs$('textarea').value;
329
+ if ( isValidSelector(selector) === false ) {
330
+ toolOverlay.postMessage({ what: 'unhighlight' });
331
+ updateElementCount({ count: 0, error: isValidSelector.error });
332
+ return;
333
+ }
334
+ toolOverlay.postMessage({
335
+ what: 'highlightFromSelector',
336
+ selector,
337
+ }).then(result => {
338
+ updateElementCount(result);
339
+ });
340
+ }
341
+
342
+ /*******************************************************************************
343
+ *
344
+ * paused:
345
+ * - select element mode disabled
346
+ * - preview mode enabled or disabled
347
+ * - dialog unminimized
348
+ *
349
+ * unpaused:
350
+ * - select element mode enabled
351
+ * - preview mode disabled
352
+ * - dialog minimized
353
+ *
354
+ * */
355
+
356
+ function pausePicker() {
357
+ dom.cl.add(dom.root, 'paused');
358
+ dom.cl.remove(dom.root, 'minimized');
359
+ toolOverlay.highlightElementUnderMouse(false);
360
+ }
361
+
362
+ function unpausePicker() {
363
+ dom.cl.remove(dom.root, 'paused', 'preview');
364
+ dom.cl.add(dom.root, 'minimized');
365
+ updatePreview();
366
+ toolOverlay.postMessage({
367
+ what: 'togglePreview',
368
+ state: false,
369
+ });
370
+ toolOverlay.highlightElementUnderMouse(true);
371
+ }
372
+
373
+ /******************************************************************************/
374
+
375
+ function startPicker() {
376
+ toolOverlay.postMessage({ what: 'startTool' });
377
+
378
+ localRead('picker.view').then(value => {
379
+ if ( Boolean(value) === false ) { return; }
380
+ toggleView(value);
381
+ });
382
+
383
+ self.addEventListener('keydown', onKeyPressed, true);
384
+ dom.on('svg#overlay', 'click', onSvgClicked);
385
+ dom.on('svg#overlay', 'touchstart', onSvgTouch, { passive: true });
386
+ dom.on('svg#overlay', 'touchend', onSvgTouch);
387
+ dom.on('#minimize', 'click', onMinimizeClicked);
388
+ dom.on('textarea', 'input', onFilterTextChanged);
389
+ dom.on('#quit', 'click', quitPicker);
390
+ dom.on('#slider', 'input', onSliderChanged);
391
+ dom.on('#pick', 'click', resetPicker);
392
+ dom.on('#preview', 'click', onPreviewClicked);
393
+ dom.on('#moreOrLess > span:first-of-type', 'click', ( ) => { onViewToggled(1); });
394
+ dom.on('#moreOrLess > span:last-of-type', 'click', ( ) => { onViewToggled(-1); });
395
+ dom.on('#create', 'click', ( ) => { onCreateClicked(); });
396
+ dom.on('#candidateFilters ul', 'click', onCandidateClicked);
397
+ toolOverlay.highlightElementUnderMouse(true);
398
+ }
399
+
400
+ /******************************************************************************/
401
+
402
+ function quitPicker() {
403
+ updatePreview(false);
404
+ toolOverlay.stop();
405
+ }
406
+
407
+ /******************************************************************************/
408
+
409
+ function resetPicker() {
410
+ toolOverlay.postMessage({ what: 'unhighlight' });
411
+ unpausePicker();
412
+ }
413
+
414
+ /******************************************************************************/
415
+
416
+ function onMessage(msg) {
417
+ switch ( msg.what ) {
418
+ case 'startTool':
419
+ startPicker();
420
+ break;
421
+ default:
422
+ break;
423
+ }
424
+ }
425
+
426
+ /******************************************************************************/
427
+
428
+ // Wait for the content script to establish communication
429
+ toolOverlay.start(onMessage);
430
+
431
+ /******************************************************************************/
@@ -19,15 +19,9 @@
19
19
  Home: https://github.com/gorhill/uBlock
20
20
  */
21
21
 
22
- import {
23
- browser,
24
- localRead, localWrite,
25
- runtime,
26
- sendMessage,
27
- } from './ext.js';
28
-
22
+ import { browser, runtime, sendMessage } from './ext.js';
29
23
  import { dom, qs$ } from './dom.js';
30
- import { i18n, i18n$ } from './i18n.js';
24
+ import { i18n$ } from './i18n.js';
31
25
  import punycode from './punycode.js';
32
26
 
33
27
  /******************************************************************************/
@@ -208,8 +202,7 @@ dom.on(
208
202
  ev => {
209
203
  const span = ev.target;
210
204
  const level = parseInt(span.dataset.level, 10);
211
- dom.text(
212
- '#filteringModeText > span:nth-of-type(2)',
205
+ dom.text('#filteringModeText > span:nth-of-type(2)',
213
206
  i18n$(`filteringMode${level}Name`)
214
207
  );
215
208
  }
@@ -226,65 +219,7 @@ dom.on(
226
219
 
227
220
  /******************************************************************************/
228
221
 
229
- // The popup panel is made of sections. Visibility of sections can be
230
- // toggled on/off.
231
-
232
- const maxNumberOfSections = 2;
233
-
234
- const sectionBitsFromAttribute = function() {
235
- const value = dom.body.dataset.section;
236
- if ( value === '' ) { return 0; }
237
- let bits = 0;
238
- for ( const c of value.split(' ') ) {
239
- bits |= 1 << (c.charCodeAt(0) - 97);
240
- }
241
- return bits;
242
- };
243
-
244
- const sectionBitsToAttribute = function(bits) {
245
- if ( typeof bits !== 'number' ) { return; }
246
- if ( isNaN(bits) ) { return; }
247
- const value = [];
248
- for ( let i = 0; i < maxNumberOfSections; i++ ) {
249
- const bit = 1 << i;
250
- if ( (bits & bit) === 0 ) { continue; }
251
- value.push(String.fromCharCode(97 + i));
252
- }
253
- dom.body.dataset.section = value.join(' ');
254
- };
255
-
256
- async function toggleSections(more) {
257
- let currentBits = sectionBitsFromAttribute();
258
- let newBits = currentBits;
259
- for ( let i = 0; i < maxNumberOfSections; i++ ) {
260
- const bit = 1 << (more ? i : maxNumberOfSections - i - 1);
261
- if ( more ) {
262
- newBits |= bit;
263
- } else {
264
- newBits &= ~bit;
265
- }
266
- if ( newBits !== currentBits ) { break; }
267
- }
268
- if ( newBits === currentBits ) { return; }
269
- sectionBitsToAttribute(newBits);
270
- localWrite('popupPanelSections', newBits);
271
- }
272
-
273
- localRead('popupPanelSections').then(bits => {
274
- sectionBitsToAttribute(bits || 0);
275
- });
276
-
277
- dom.on('#moreButton', 'click', ( ) => {
278
- toggleSections(true);
279
- });
280
-
281
- dom.on('#lessButton', 'click', ( ) => {
282
- toggleSections(false);
283
- });
284
-
285
- /******************************************************************************/
286
-
287
- dom.on('#showMatchedRules', 'click', ev => {
222
+ dom.on('#gotoMatchedRules', 'click', ev => {
288
223
  if ( ev.isTrusted !== true ) { return; }
289
224
  if ( ev.button !== 0 ) { return; }
290
225
  sendMessage({
@@ -295,7 +230,7 @@ dom.on('#showMatchedRules', 'click', ev => {
295
230
 
296
231
  /******************************************************************************/
297
232
 
298
- dom.on('[data-i18n-title="popupTipReport"]', 'click', ev => {
233
+ dom.on('#gotoReport', 'click', ev => {
299
234
  if ( ev.isTrusted !== true ) { return; }
300
235
  let url;
301
236
  try {
@@ -314,7 +249,7 @@ dom.on('[data-i18n-title="popupTipReport"]', 'click', ev => {
314
249
 
315
250
  /******************************************************************************/
316
251
 
317
- dom.on('[data-i18n-title="popupTipDashboard"]', 'click', ev => {
252
+ dom.on('#gotoDashboard', 'click', ev => {
318
253
  if ( ev.isTrusted !== true ) { return; }
319
254
  if ( ev.button !== 0 ) { return; }
320
255
  runtime.openOptionsPage();
@@ -325,7 +260,29 @@ dom.on('[data-i18n-title="popupTipDashboard"]', 'click', ev => {
325
260
  dom.on('#gotoZapper', 'click', ( ) => {
326
261
  if ( browser.scripting === undefined ) { return; }
327
262
  browser.scripting.executeScript({
328
- files: [ '/js/scripting/zapper.js' ],
263
+ files: [ '/js/scripting/tool-overlay.js', '/js/scripting/zapper.js' ],
264
+ target: { tabId: currentTab.id },
265
+ });
266
+ self.close();
267
+ });
268
+
269
+ /******************************************************************************/
270
+
271
+ dom.on('#gotoPicker', 'click', ( ) => {
272
+ if ( browser.scripting === undefined ) { return; }
273
+ browser.scripting.executeScript({
274
+ files: [ '/js/scripting/tool-overlay.js', '/js/scripting/picker.js' ],
275
+ target: { tabId: currentTab.id },
276
+ });
277
+ self.close();
278
+ });
279
+
280
+ /******************************************************************************/
281
+
282
+ dom.on('#gotoUnpicker', 'click', ( ) => {
283
+ if ( browser.scripting === undefined ) { return; }
284
+ browser.scripting.executeScript({
285
+ files: [ '/js/scripting/tool-overlay.js', '/js/scripting/unpicker.js' ],
329
286
  target: { tabId: currentTab.id },
330
287
  });
331
288
  self.close();
@@ -357,7 +314,8 @@ async function init() {
357
314
  const response = await sendMessage({
358
315
  what: 'popupPanelData',
359
316
  origin: url.origin,
360
- hostname: normalizedHostname(tabURL.hostname),
317
+ normalHostname: normalizedHostname(tabURL.hostname),
318
+ hostname: tabURL.hostname,
361
319
  });
362
320
  if ( response instanceof Object ) {
363
321
  Object.assign(popupPanelData, response);
@@ -370,46 +328,17 @@ async function init() {
370
328
 
371
329
  dom.text('#hostname', punycode.toUnicode(tabURL.hostname));
372
330
 
373
- dom.cl.toggle('#showMatchedRules', 'enabled',
331
+ dom.cl.toggle('#gotoMatchedRules', 'enabled',
374
332
  popupPanelData.isSideloaded === true &&
375
333
  popupPanelData.developerMode &&
376
334
  typeof currentTab.id === 'number' &&
377
335
  isNaN(currentTab.id) === false
378
336
  );
379
337
 
380
- const isNetworkPage = url.protocol === 'http:' || url.protocol === 'https:';
338
+ const isHTTP = url.protocol === 'http:' || url.protocol === 'https:';
339
+ dom.cl.toggle(dom.root, 'isHTTP', isHTTP);
381
340
 
382
- dom.cl.toggle('#reportFilterIssue', 'enabled', isNetworkPage );
383
- dom.cl.toggle('#gotoZapper', 'enabled', isNetworkPage);
384
-
385
- const parent = qs$('#rulesetStats');
386
- for ( const details of popupPanelData.rulesetDetails || [] ) {
387
- const div = dom.clone('#templates .rulesetDetails');
388
- qs$(div, 'h1').append(i18n.patchUnicodeFlags(details.name));
389
- const { rules, filters, css } = details;
390
- let ruleCount = rules.plain + rules.regex;
391
- if ( popupPanelData.hasOmnipotence ) {
392
- ruleCount += rules.removeparam + rules.redirect + rules.modifyHeaders;
393
- }
394
- let specificCount = 0;
395
- if ( typeof css.specific === 'number' ) {
396
- specificCount += css.specific;
397
- }
398
- if ( typeof css.declarative === 'number' ) {
399
- specificCount += css.declarative;
400
- }
401
- if ( typeof css.procedural === 'number' ) {
402
- specificCount += css.procedural;
403
- }
404
- dom.text(
405
- qs$(div, 'p'),
406
- i18n$('perRulesetStats')
407
- .replace('{{ruleCount}}', ruleCount.toLocaleString())
408
- .replace('{{filterCount}}', filters.accepted.toLocaleString())
409
- .replace('{{cssSpecificCount}}', specificCount.toLocaleString())
410
- );
411
- parent.append(div);
412
- }
341
+ dom.cl.toggle('#gotoUnpicker', 'enabled', popupPanelData.hasCustomFilters);
413
342
 
414
343
  dom.cl.remove(dom.body, 'loading');
415
344