@duckduckgo/autoconsent 15.0.0 → 16.0.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.
- package/.github/dependabot.yml +0 -3
- package/.github/workflows/release.yml +0 -4
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +32 -0
- package/build.sh +3 -2
- package/dist/addon-firefox/background.bundle.js +8 -24
- package/dist/addon-firefox/compact-rules.json +1 -1
- package/dist/addon-firefox/content.bundle.js +184 -686
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-firefox/popup.bundle.js +196 -25
- package/dist/addon-firefox/popup.html +98 -5
- package/dist/addon-firefox/rule-index.json +1 -0
- package/dist/addon-firefox/rules.json +1 -1
- package/dist/addon-mv3/background.bundle.js +8 -24
- package/dist/addon-mv3/compact-rules.json +1 -1
- package/dist/addon-mv3/content.bundle.js +184 -686
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/popup.bundle.js +196 -25
- package/dist/addon-mv3/popup.html +98 -5
- package/dist/addon-mv3/rule-index.json +1 -0
- package/dist/addon-mv3/rules.json +1 -1
- package/dist/autoconsent.cjs.js +184 -685
- package/dist/autoconsent.esm.js +184 -685
- package/dist/autoconsent.playwright.js +185 -689
- package/dist/autoconsent.standalone.js +3625 -0
- package/dist/types/cmps/base.d.ts +3 -3
- package/dist/types/cmps/trustarc-top.d.ts +1 -1
- package/dist/types/eval-handler.d.ts +3 -3
- package/dist/types/heuristics.d.ts +2 -2
- package/dist/types/types.d.ts +10 -23
- package/dist/types/web.d.ts +0 -9
- package/docs/api.md +1 -8
- package/docs/puppeteer.md +1 -3
- package/docs/rule-syntax.md +0 -17
- package/eslint.config.mjs +1 -1
- package/lib/cmps/base.ts +5 -6
- package/lib/cmps/conversant.ts +7 -4
- package/lib/cmps/trustarc-top.ts +1 -1
- package/lib/cmps/uniconsent.ts +4 -4
- package/lib/eval-handler.ts +6 -3
- package/lib/heuristics.ts +15 -15
- package/lib/types.ts +9 -21
- package/lib/utils.ts +13 -9
- package/lib/web.ts +3 -53
- package/package.json +4 -17
- package/playwright/content.ts +1 -2
- package/readme.md +3 -6
- package/rules/autoconsent/dreamlab-cmp.json +13 -0
- package/rules/build.ts +4 -23
- package/rules/compact-rules.json +1 -1
- package/rules/rule-index-builder.ts +58 -0
- package/rules/rule-index.json +1 -0
- package/rules/rules.json +1 -1
- package/standalone/content.ts +101 -0
- package/tests/dreamlab-cmp.spec.ts +3 -0
- package/tests/quantcast.spec.ts +0 -6
- package/tests-wtr/heuristics/get-actionable-popups.ts +13 -13
- package/tests-wtr/heuristics/heuristic-cmp.ts +32 -33
- package/tests-wtr/lifecycle/find-cmp.ts +5 -8
- package/tests-wtr/web/do-opt-in.test.ts +0 -1
- package/tests-wtr/web/do-opt-out.test.ts +0 -1
- package/tests-wtr/web/do-self-test.test.ts +0 -1
- package/tests-wtr/web/filter-cmps.test.ts +0 -1
- package/tests-wtr/web/receive-message-callback.test.ts +1 -2
- package/tests-wtr/web/update-state.test.ts +1 -3
- package/tsconfig.build.json +1 -1
- package/.github/workflows/update-filterlist.yml +0 -42
- package/dist/autoconsent.extra.cjs.js +0 -15709
- package/dist/autoconsent.extra.esm.js +0 -15641
- package/dist/types/cmps/consentomatic.d.ts +0 -34
- package/dist/types/consentomatic/index.d.ts +0 -2
- package/dist/types/consentomatic/tools.d.ts +0 -10
- package/dist/types/filterlist-engine.d.ts +0 -2
- package/dist/types/filterlist-utils.d.ts +0 -4
- package/dist/types/web-extra.d.ts +0 -11
- package/lib/cmps/consentomatic.ts +0 -97
- package/lib/consentomatic/index.ts +0 -252
- package/lib/consentomatic/tools.ts +0 -199
- package/lib/filterlist-engine.ts +0 -5
- package/lib/filterlist-utils.ts +0 -45
- package/lib/web-extra.ts +0 -116
- package/rules/consentomatic.json +0 -1
- package/rules/filterlist.txt +0 -18440
- package/rules/filterlists/overrides.txt +0 -4
- package/scripts/compile-filterlist.mjs +0 -63
- package/scripts/fetch-easylist.sh +0 -25
- package/scripts/rebuild-filterlist.mjs +0 -216
- package/tests/oil.spec.ts +0 -7
- package/tests/springer.spec.ts +0 -7
- package/tests/wordpressgdpr.spec.ts +0 -6
|
@@ -8,412 +8,8 @@
|
|
|
8
8
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
9
9
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
10
10
|
|
|
11
|
-
// lib/
|
|
12
|
-
var
|
|
13
|
-
static setBase(base) {
|
|
14
|
-
_Tools.base = base;
|
|
15
|
-
}
|
|
16
|
-
static findElement(options, parent = null, multiple = false) {
|
|
17
|
-
let possibleTargets = null;
|
|
18
|
-
if (parent != null) {
|
|
19
|
-
possibleTargets = Array.from(parent.querySelectorAll(options.selector));
|
|
20
|
-
} else {
|
|
21
|
-
if (_Tools.base != null) {
|
|
22
|
-
possibleTargets = Array.from(
|
|
23
|
-
_Tools.base.querySelectorAll(options.selector)
|
|
24
|
-
);
|
|
25
|
-
} else {
|
|
26
|
-
possibleTargets = Array.from(
|
|
27
|
-
document.querySelectorAll(options.selector)
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (options.textFilter != null) {
|
|
32
|
-
possibleTargets = possibleTargets.filter((possibleTarget) => {
|
|
33
|
-
const textContent = possibleTarget.textContent.toLowerCase();
|
|
34
|
-
if (Array.isArray(options.textFilter)) {
|
|
35
|
-
let foundText = false;
|
|
36
|
-
for (const text of options.textFilter) {
|
|
37
|
-
if (textContent.indexOf(text.toLowerCase()) !== -1) {
|
|
38
|
-
foundText = true;
|
|
39
|
-
break;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return foundText;
|
|
43
|
-
} else if (options.textFilter != null) {
|
|
44
|
-
return textContent.indexOf(options.textFilter.toLowerCase()) !== -1;
|
|
45
|
-
}
|
|
46
|
-
return false;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
if (options.styleFilters != null) {
|
|
50
|
-
possibleTargets = possibleTargets.filter((possibleTarget) => {
|
|
51
|
-
const styles = window.getComputedStyle(possibleTarget);
|
|
52
|
-
let keep = true;
|
|
53
|
-
for (const styleFilter of options.styleFilters) {
|
|
54
|
-
const option = styles[styleFilter.option];
|
|
55
|
-
if (styleFilter.negated) {
|
|
56
|
-
keep = keep && option !== styleFilter.value;
|
|
57
|
-
} else {
|
|
58
|
-
keep = keep && option === styleFilter.value;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return keep;
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
if (options.displayFilter != null) {
|
|
65
|
-
possibleTargets = possibleTargets.filter((possibleTarget) => {
|
|
66
|
-
if (options.displayFilter) {
|
|
67
|
-
return possibleTarget.offsetHeight !== 0;
|
|
68
|
-
} else {
|
|
69
|
-
return possibleTarget.offsetHeight === 0;
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
if (options.iframeFilter != null) {
|
|
74
|
-
possibleTargets = possibleTargets.filter(() => {
|
|
75
|
-
if (options.iframeFilter) {
|
|
76
|
-
return window.location !== window.parent.location;
|
|
77
|
-
} else {
|
|
78
|
-
return window.location === window.parent.location;
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (options.childFilter != null) {
|
|
83
|
-
possibleTargets = possibleTargets.filter((possibleTarget) => {
|
|
84
|
-
const oldBase = _Tools.base;
|
|
85
|
-
_Tools.setBase(possibleTarget);
|
|
86
|
-
const childResults = _Tools.find(options.childFilter);
|
|
87
|
-
_Tools.setBase(oldBase);
|
|
88
|
-
return childResults.target != null;
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
if (multiple) {
|
|
92
|
-
return possibleTargets;
|
|
93
|
-
} else {
|
|
94
|
-
if (possibleTargets.length > 1) {
|
|
95
|
-
console.warn(
|
|
96
|
-
"Multiple possible targets: ",
|
|
97
|
-
possibleTargets,
|
|
98
|
-
options,
|
|
99
|
-
parent
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
return possibleTargets[0];
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
static find(options, multiple = false) {
|
|
106
|
-
const results = [];
|
|
107
|
-
if (options.parent != null) {
|
|
108
|
-
const parent = _Tools.findElement(options.parent, null, multiple);
|
|
109
|
-
if (parent != null) {
|
|
110
|
-
if (parent instanceof Array) {
|
|
111
|
-
parent.forEach((p) => {
|
|
112
|
-
const targets = _Tools.findElement(options.target, p, multiple);
|
|
113
|
-
if (targets instanceof Array) {
|
|
114
|
-
targets.forEach((target) => {
|
|
115
|
-
results.push({
|
|
116
|
-
parent: p,
|
|
117
|
-
target
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
} else {
|
|
121
|
-
results.push({
|
|
122
|
-
parent: p,
|
|
123
|
-
target: targets
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
return results;
|
|
128
|
-
} else {
|
|
129
|
-
const targets = _Tools.findElement(options.target, parent, multiple);
|
|
130
|
-
if (targets instanceof Array) {
|
|
131
|
-
targets.forEach((target) => {
|
|
132
|
-
results.push({
|
|
133
|
-
parent,
|
|
134
|
-
target
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
} else {
|
|
138
|
-
results.push({
|
|
139
|
-
parent,
|
|
140
|
-
target: targets
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
} else {
|
|
146
|
-
const targets = _Tools.findElement(options.target, null, multiple);
|
|
147
|
-
if (targets instanceof Array) {
|
|
148
|
-
targets.forEach((target) => {
|
|
149
|
-
results.push({
|
|
150
|
-
parent: null,
|
|
151
|
-
target
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
} else {
|
|
155
|
-
results.push({
|
|
156
|
-
parent: null,
|
|
157
|
-
target: targets
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (results.length === 0) {
|
|
162
|
-
results.push({
|
|
163
|
-
parent: null,
|
|
164
|
-
target: null
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
if (multiple) {
|
|
168
|
-
return results;
|
|
169
|
-
} else {
|
|
170
|
-
if (results.length !== 1) {
|
|
171
|
-
console.warn(
|
|
172
|
-
"Multiple results found, even though multiple false",
|
|
173
|
-
results
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
return results[0];
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
_Tools.base = null;
|
|
181
|
-
var Tools = _Tools;
|
|
182
|
-
|
|
183
|
-
// lib/consentomatic/index.ts
|
|
184
|
-
function matches(config) {
|
|
185
|
-
const result = Tools.find(config);
|
|
186
|
-
if (config.type === "css") {
|
|
187
|
-
return !!result.target;
|
|
188
|
-
} else if (config.type === "checkbox") {
|
|
189
|
-
return !!result.target && result.target.checked;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async function executeAction(config, param) {
|
|
193
|
-
switch (config.type) {
|
|
194
|
-
case "click":
|
|
195
|
-
return clickAction(config);
|
|
196
|
-
case "list":
|
|
197
|
-
return listAction(config, param);
|
|
198
|
-
case "consent":
|
|
199
|
-
return consentAction(config, param);
|
|
200
|
-
case "ifcss":
|
|
201
|
-
return ifCssAction(config, param);
|
|
202
|
-
case "waitcss":
|
|
203
|
-
return waitCssAction(config);
|
|
204
|
-
case "foreach":
|
|
205
|
-
return forEachAction(config, param);
|
|
206
|
-
case "hide":
|
|
207
|
-
return hideAction(config);
|
|
208
|
-
case "slide":
|
|
209
|
-
return slideAction(config);
|
|
210
|
-
case "close":
|
|
211
|
-
return closeAction();
|
|
212
|
-
case "wait":
|
|
213
|
-
return waitAction(config);
|
|
214
|
-
case "eval":
|
|
215
|
-
return evalAction(config);
|
|
216
|
-
default:
|
|
217
|
-
throw new Error("Unknown action type: " + config.type);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
var STEP_TIMEOUT = 0;
|
|
221
|
-
function waitTimeout(timeout) {
|
|
222
|
-
return new Promise((resolve) => {
|
|
223
|
-
setTimeout(() => {
|
|
224
|
-
resolve();
|
|
225
|
-
}, timeout);
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
async function clickAction(config) {
|
|
229
|
-
const result = Tools.find(config);
|
|
230
|
-
if (result.target != null) {
|
|
231
|
-
result.target.click();
|
|
232
|
-
}
|
|
233
|
-
return waitTimeout(STEP_TIMEOUT);
|
|
234
|
-
}
|
|
235
|
-
async function listAction(config, param) {
|
|
236
|
-
for (const action of config.actions) {
|
|
237
|
-
await executeAction(action, param);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
async function consentAction(config, consentTypes) {
|
|
241
|
-
for (const consentConfig of config.consents) {
|
|
242
|
-
const shouldEnable = consentTypes.indexOf(consentConfig.type) !== -1;
|
|
243
|
-
if (consentConfig.matcher && consentConfig.toggleAction) {
|
|
244
|
-
const isEnabled = matches(consentConfig.matcher);
|
|
245
|
-
if (isEnabled !== shouldEnable) {
|
|
246
|
-
await executeAction(consentConfig.toggleAction);
|
|
247
|
-
}
|
|
248
|
-
} else {
|
|
249
|
-
if (shouldEnable) {
|
|
250
|
-
await executeAction(consentConfig.trueAction);
|
|
251
|
-
} else {
|
|
252
|
-
await executeAction(consentConfig.falseAction);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
async function ifCssAction(config, param) {
|
|
258
|
-
const result = Tools.find(config);
|
|
259
|
-
if (!result.target) {
|
|
260
|
-
if (config.trueAction) {
|
|
261
|
-
await executeAction(config.trueAction, param);
|
|
262
|
-
}
|
|
263
|
-
} else {
|
|
264
|
-
if (config.falseAction) {
|
|
265
|
-
await executeAction(config.falseAction, param);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
async function waitCssAction(config) {
|
|
270
|
-
await new Promise((resolve) => {
|
|
271
|
-
let numRetries = config.retries || 10;
|
|
272
|
-
const waitTime = config.waitTime || 250;
|
|
273
|
-
const checkCss = () => {
|
|
274
|
-
const result = Tools.find(config);
|
|
275
|
-
if (config.negated && result.target || !config.negated && !result.target) {
|
|
276
|
-
if (numRetries > 0) {
|
|
277
|
-
numRetries -= 1;
|
|
278
|
-
setTimeout(checkCss, waitTime);
|
|
279
|
-
} else {
|
|
280
|
-
resolve();
|
|
281
|
-
}
|
|
282
|
-
} else {
|
|
283
|
-
resolve();
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
checkCss();
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
async function forEachAction(config, param) {
|
|
290
|
-
const results = Tools.find(config, true);
|
|
291
|
-
const oldBase = Tools.base;
|
|
292
|
-
for (const result of results) {
|
|
293
|
-
if (result.target) {
|
|
294
|
-
Tools.setBase(result.target);
|
|
295
|
-
await executeAction(config.action, param);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
Tools.setBase(oldBase);
|
|
299
|
-
}
|
|
300
|
-
async function hideAction(config) {
|
|
301
|
-
const result = Tools.find(config);
|
|
302
|
-
if (result.target) {
|
|
303
|
-
result.target.classList.add("Autoconsent-Hidden");
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
async function slideAction(config) {
|
|
307
|
-
const result = Tools.find(config);
|
|
308
|
-
const dragResult = Tools.find(config.dragTarget);
|
|
309
|
-
if (result.target) {
|
|
310
|
-
const targetBounds = result.target.getBoundingClientRect();
|
|
311
|
-
const dragTargetBounds = dragResult.target.getBoundingClientRect();
|
|
312
|
-
let yDiff = dragTargetBounds.top - targetBounds.top;
|
|
313
|
-
let xDiff = dragTargetBounds.left - targetBounds.left;
|
|
314
|
-
if (this.config.axis.toLowerCase() === "y") {
|
|
315
|
-
xDiff = 0;
|
|
316
|
-
}
|
|
317
|
-
if (this.config.axis.toLowerCase() === "x") {
|
|
318
|
-
yDiff = 0;
|
|
319
|
-
}
|
|
320
|
-
const screenX = window.screenX + targetBounds.left + targetBounds.width / 2;
|
|
321
|
-
const screenY = window.screenY + targetBounds.top + targetBounds.height / 2;
|
|
322
|
-
const clientX = targetBounds.left + targetBounds.width / 2;
|
|
323
|
-
const clientY = targetBounds.top + targetBounds.height / 2;
|
|
324
|
-
const mouseDown = document.createEvent("MouseEvents");
|
|
325
|
-
mouseDown.initMouseEvent(
|
|
326
|
-
"mousedown",
|
|
327
|
-
true,
|
|
328
|
-
true,
|
|
329
|
-
window,
|
|
330
|
-
0,
|
|
331
|
-
screenX,
|
|
332
|
-
screenY,
|
|
333
|
-
clientX,
|
|
334
|
-
clientY,
|
|
335
|
-
false,
|
|
336
|
-
false,
|
|
337
|
-
false,
|
|
338
|
-
false,
|
|
339
|
-
0,
|
|
340
|
-
result.target
|
|
341
|
-
);
|
|
342
|
-
const mouseMove = document.createEvent("MouseEvents");
|
|
343
|
-
mouseMove.initMouseEvent(
|
|
344
|
-
"mousemove",
|
|
345
|
-
true,
|
|
346
|
-
true,
|
|
347
|
-
window,
|
|
348
|
-
0,
|
|
349
|
-
screenX + xDiff,
|
|
350
|
-
screenY + yDiff,
|
|
351
|
-
clientX + xDiff,
|
|
352
|
-
clientY + yDiff,
|
|
353
|
-
false,
|
|
354
|
-
false,
|
|
355
|
-
false,
|
|
356
|
-
false,
|
|
357
|
-
0,
|
|
358
|
-
result.target
|
|
359
|
-
);
|
|
360
|
-
const mouseUp = document.createEvent("MouseEvents");
|
|
361
|
-
mouseUp.initMouseEvent(
|
|
362
|
-
"mouseup",
|
|
363
|
-
true,
|
|
364
|
-
true,
|
|
365
|
-
window,
|
|
366
|
-
0,
|
|
367
|
-
screenX + xDiff,
|
|
368
|
-
screenY + yDiff,
|
|
369
|
-
clientX + xDiff,
|
|
370
|
-
clientY + yDiff,
|
|
371
|
-
false,
|
|
372
|
-
false,
|
|
373
|
-
false,
|
|
374
|
-
false,
|
|
375
|
-
0,
|
|
376
|
-
result.target
|
|
377
|
-
);
|
|
378
|
-
result.target.dispatchEvent(mouseDown);
|
|
379
|
-
await this.waitTimeout(10);
|
|
380
|
-
result.target.dispatchEvent(mouseMove);
|
|
381
|
-
await this.waitTimeout(10);
|
|
382
|
-
result.target.dispatchEvent(mouseUp);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
async function waitAction(config) {
|
|
386
|
-
await waitTimeout(config.waitTime);
|
|
387
|
-
}
|
|
388
|
-
async function closeAction() {
|
|
389
|
-
window.close();
|
|
390
|
-
}
|
|
391
|
-
async function evalAction(config) {
|
|
392
|
-
console.log("eval!", config.code);
|
|
393
|
-
return new Promise((resolve) => {
|
|
394
|
-
try {
|
|
395
|
-
if (config.async) {
|
|
396
|
-
window.eval(config.code);
|
|
397
|
-
setTimeout(() => {
|
|
398
|
-
resolve(window.eval("window.__consentCheckResult"));
|
|
399
|
-
}, config.timeout || 250);
|
|
400
|
-
} else {
|
|
401
|
-
resolve(window.eval(config.code));
|
|
402
|
-
}
|
|
403
|
-
} catch (e) {
|
|
404
|
-
console.warn("eval error", e, config.code);
|
|
405
|
-
resolve(false);
|
|
406
|
-
}
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
// lib/types.ts
|
|
411
|
-
var PopupHandlingModes = {
|
|
412
|
-
None: -1,
|
|
413
|
-
Reject: 0,
|
|
414
|
-
Tier1: 1,
|
|
415
|
-
Tier2: 2
|
|
416
|
-
};
|
|
11
|
+
// lib/rules.ts
|
|
12
|
+
var SUPPORTED_RULE_STEP_VERSION = 2;
|
|
417
13
|
|
|
418
14
|
// lib/random.ts
|
|
419
15
|
function getRandomID() {
|
|
@@ -441,6 +37,9 @@
|
|
|
441
37
|
sendContentMessage: null
|
|
442
38
|
};
|
|
443
39
|
function requestEval(code, snippetId) {
|
|
40
|
+
if (!evalState.sendContentMessage) {
|
|
41
|
+
return Promise.reject(new Error("AutoConsent is not initialized yet"));
|
|
42
|
+
}
|
|
444
43
|
const id = getRandomID();
|
|
445
44
|
evalState.sendContentMessage({
|
|
446
45
|
type: "eval",
|
|
@@ -463,6 +62,155 @@
|
|
|
463
62
|
}
|
|
464
63
|
}
|
|
465
64
|
|
|
65
|
+
// lib/utils.ts
|
|
66
|
+
function getStyleElement(styleOverrideElementId = "autoconsent-css-rules") {
|
|
67
|
+
const styleSelector = `style#${styleOverrideElementId}`;
|
|
68
|
+
const existingElement = document.querySelector(styleSelector);
|
|
69
|
+
if (existingElement && existingElement instanceof HTMLStyleElement) {
|
|
70
|
+
return existingElement;
|
|
71
|
+
} else {
|
|
72
|
+
const parent = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
|
|
73
|
+
const css = document.createElement("style");
|
|
74
|
+
css.id = styleOverrideElementId;
|
|
75
|
+
parent.appendChild(css);
|
|
76
|
+
return css;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function getHidingStyle(method) {
|
|
80
|
+
const hidingSnippet = method === "opacity" ? `opacity: 0` : `display: none`;
|
|
81
|
+
return `${hidingSnippet} !important; z-index: -1 !important; pointer-events: none !important;`;
|
|
82
|
+
}
|
|
83
|
+
function hideElements(styleEl, selector, method = "display") {
|
|
84
|
+
const rule = `${selector} { ${getHidingStyle(method)} } `;
|
|
85
|
+
if (styleEl instanceof HTMLStyleElement) {
|
|
86
|
+
styleEl.innerText += rule;
|
|
87
|
+
return selector.length > 0;
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
async function waitFor(predicate, maxTimes, interval) {
|
|
92
|
+
const result = await predicate();
|
|
93
|
+
if (!result && maxTimes > 0) {
|
|
94
|
+
return new Promise((resolve) => {
|
|
95
|
+
setTimeout(async () => {
|
|
96
|
+
resolve(waitFor(predicate, maxTimes - 1, interval));
|
|
97
|
+
}, interval);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return Promise.resolve(result);
|
|
101
|
+
}
|
|
102
|
+
function isElementVisible(elem) {
|
|
103
|
+
if (!elem) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
if (elem.offsetParent !== null) {
|
|
107
|
+
return true;
|
|
108
|
+
} else {
|
|
109
|
+
const css = window.getComputedStyle(elem);
|
|
110
|
+
if (css.position === "fixed" && css.display !== "none") {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
function copyObject(data) {
|
|
117
|
+
if (globalThis.structuredClone) {
|
|
118
|
+
return structuredClone(data);
|
|
119
|
+
}
|
|
120
|
+
return JSON.parse(JSON.stringify(data));
|
|
121
|
+
}
|
|
122
|
+
function normalizeConfig(providedConfig) {
|
|
123
|
+
const defaultConfig = {
|
|
124
|
+
enabled: true,
|
|
125
|
+
autoAction: "optOut",
|
|
126
|
+
// if falsy, the extension will wait for an explicit user signal before opting in/out
|
|
127
|
+
disabledCmps: [],
|
|
128
|
+
enablePrehide: true,
|
|
129
|
+
enableCosmeticRules: true,
|
|
130
|
+
enableGeneratedRules: true,
|
|
131
|
+
enableHeuristicDetection: false,
|
|
132
|
+
enablePopupMutationObserver: false,
|
|
133
|
+
detectRetries: 20,
|
|
134
|
+
isMainWorld: false,
|
|
135
|
+
prehideTimeout: 2e3,
|
|
136
|
+
visualTest: false,
|
|
137
|
+
logs: {
|
|
138
|
+
lifecycle: false,
|
|
139
|
+
rulesteps: false,
|
|
140
|
+
detectionsteps: false,
|
|
141
|
+
evals: false,
|
|
142
|
+
errors: true,
|
|
143
|
+
messages: false,
|
|
144
|
+
waits: false
|
|
145
|
+
},
|
|
146
|
+
performanceLoggingEnabled: false,
|
|
147
|
+
heuristicPopupSearchTimeout: 100,
|
|
148
|
+
heuristicMode: "off"
|
|
149
|
+
// heuristic disabled by default
|
|
150
|
+
};
|
|
151
|
+
const updatedConfig = copyObject(defaultConfig);
|
|
152
|
+
for (const key of Object.keys(defaultConfig)) {
|
|
153
|
+
if (typeof providedConfig[key] !== "undefined") {
|
|
154
|
+
updatedConfig[key] = providedConfig[key];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return updatedConfig;
|
|
158
|
+
}
|
|
159
|
+
function scheduleWhenIdle(callback, timeout = 500) {
|
|
160
|
+
if (globalThis.requestIdleCallback) {
|
|
161
|
+
requestIdleCallback(callback, { timeout });
|
|
162
|
+
} else {
|
|
163
|
+
setTimeout(callback, 0);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function highlightNode(node) {
|
|
167
|
+
const highlightedNode = node;
|
|
168
|
+
if (!node.style) return;
|
|
169
|
+
if (highlightedNode.__oldStyles !== void 0) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (node.hasAttribute("style")) {
|
|
173
|
+
highlightedNode.__oldStyles = node.style.cssText;
|
|
174
|
+
}
|
|
175
|
+
node.style.animation = "pulsate .5s infinite";
|
|
176
|
+
node.style.outline = "solid red";
|
|
177
|
+
let styleTag = document.querySelector("style#autoconsent-debug-styles");
|
|
178
|
+
if (!styleTag) {
|
|
179
|
+
styleTag = document.createElement("style");
|
|
180
|
+
styleTag.id = "autoconsent-debug-styles";
|
|
181
|
+
}
|
|
182
|
+
styleTag.textContent = `
|
|
183
|
+
@keyframes pulsate {
|
|
184
|
+
0% {
|
|
185
|
+
outline-width: 8px;
|
|
186
|
+
outline-offset: -4px;
|
|
187
|
+
}
|
|
188
|
+
50% {
|
|
189
|
+
outline-width: 4px;
|
|
190
|
+
outline-offset: -2px;
|
|
191
|
+
}
|
|
192
|
+
100% {
|
|
193
|
+
outline-width: 8px;
|
|
194
|
+
outline-offset: -4px;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
198
|
+
document.head.appendChild(styleTag);
|
|
199
|
+
}
|
|
200
|
+
function unhighlightNode(node) {
|
|
201
|
+
const highlightedNode = node;
|
|
202
|
+
if (!node.style || !node.hasAttribute("style")) return;
|
|
203
|
+
if (highlightedNode.__oldStyles !== void 0) {
|
|
204
|
+
node.style.cssText = highlightedNode.__oldStyles;
|
|
205
|
+
delete highlightedNode.__oldStyles;
|
|
206
|
+
} else {
|
|
207
|
+
node.removeAttribute("style");
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function isTopFrame() {
|
|
211
|
+
return window.top === window && (!globalThis.location.ancestorOrigins || globalThis.location.ancestorOrigins.length === 0);
|
|
212
|
+
}
|
|
213
|
+
|
|
466
214
|
// lib/eval-snippets.ts
|
|
467
215
|
var snippets = {
|
|
468
216
|
// code-based rules
|
|
@@ -640,154 +388,6 @@
|
|
|
640
388
|
return `(${snippetStr})()`;
|
|
641
389
|
}
|
|
642
390
|
|
|
643
|
-
// lib/utils.ts
|
|
644
|
-
function getStyleElement(styleOverrideElementId = "autoconsent-css-rules") {
|
|
645
|
-
const styleSelector = `style#${styleOverrideElementId}`;
|
|
646
|
-
const existingElement = document.querySelector(styleSelector);
|
|
647
|
-
if (existingElement && existingElement instanceof HTMLStyleElement) {
|
|
648
|
-
return existingElement;
|
|
649
|
-
} else {
|
|
650
|
-
const parent = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
|
|
651
|
-
const css = document.createElement("style");
|
|
652
|
-
css.id = styleOverrideElementId;
|
|
653
|
-
parent.appendChild(css);
|
|
654
|
-
return css;
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
function getHidingStyle(method) {
|
|
658
|
-
const hidingSnippet = method === "opacity" ? `opacity: 0` : `display: none`;
|
|
659
|
-
return `${hidingSnippet} !important; z-index: -1 !important; pointer-events: none !important;`;
|
|
660
|
-
}
|
|
661
|
-
function hideElements(styleEl, selector, method = "display") {
|
|
662
|
-
const rule = `${selector} { ${getHidingStyle(method)} } `;
|
|
663
|
-
if (styleEl instanceof HTMLStyleElement) {
|
|
664
|
-
styleEl.innerText += rule;
|
|
665
|
-
return selector.length > 0;
|
|
666
|
-
}
|
|
667
|
-
return false;
|
|
668
|
-
}
|
|
669
|
-
async function waitFor(predicate, maxTimes, interval) {
|
|
670
|
-
const result = await predicate();
|
|
671
|
-
if (!result && maxTimes > 0) {
|
|
672
|
-
return new Promise((resolve) => {
|
|
673
|
-
setTimeout(async () => {
|
|
674
|
-
resolve(waitFor(predicate, maxTimes - 1, interval));
|
|
675
|
-
}, interval);
|
|
676
|
-
});
|
|
677
|
-
}
|
|
678
|
-
return Promise.resolve(result);
|
|
679
|
-
}
|
|
680
|
-
function isElementVisible(elem) {
|
|
681
|
-
if (!elem) {
|
|
682
|
-
return false;
|
|
683
|
-
}
|
|
684
|
-
if (elem.offsetParent !== null) {
|
|
685
|
-
return true;
|
|
686
|
-
} else {
|
|
687
|
-
const css = window.getComputedStyle(elem);
|
|
688
|
-
if (css.position === "fixed" && css.display !== "none") {
|
|
689
|
-
return true;
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
return false;
|
|
693
|
-
}
|
|
694
|
-
function copyObject(data) {
|
|
695
|
-
if (globalThis.structuredClone) {
|
|
696
|
-
return structuredClone(data);
|
|
697
|
-
}
|
|
698
|
-
return JSON.parse(JSON.stringify(data));
|
|
699
|
-
}
|
|
700
|
-
function normalizeConfig(providedConfig) {
|
|
701
|
-
const defaultConfig = {
|
|
702
|
-
enabled: true,
|
|
703
|
-
autoAction: "optOut",
|
|
704
|
-
// if falsy, the extension will wait for an explicit user signal before opting in/out
|
|
705
|
-
disabledCmps: [],
|
|
706
|
-
enablePrehide: true,
|
|
707
|
-
enableCosmeticRules: true,
|
|
708
|
-
enableGeneratedRules: true,
|
|
709
|
-
enableHeuristicDetection: false,
|
|
710
|
-
enableHeuristicAction: false,
|
|
711
|
-
enablePopupMutationObserver: false,
|
|
712
|
-
detectRetries: 20,
|
|
713
|
-
isMainWorld: false,
|
|
714
|
-
prehideTimeout: 2e3,
|
|
715
|
-
enableFilterList: false,
|
|
716
|
-
visualTest: false,
|
|
717
|
-
logs: {
|
|
718
|
-
lifecycle: false,
|
|
719
|
-
rulesteps: false,
|
|
720
|
-
detectionsteps: false,
|
|
721
|
-
evals: false,
|
|
722
|
-
errors: true,
|
|
723
|
-
messages: false,
|
|
724
|
-
waits: false
|
|
725
|
-
},
|
|
726
|
-
performanceLoggingEnabled: false,
|
|
727
|
-
heuristicPopupSearchTimeout: 100,
|
|
728
|
-
heuristicMode: PopupHandlingModes.Reject
|
|
729
|
-
};
|
|
730
|
-
const updatedConfig = copyObject(defaultConfig);
|
|
731
|
-
for (const key of Object.keys(defaultConfig)) {
|
|
732
|
-
if (typeof providedConfig[key] !== "undefined") {
|
|
733
|
-
updatedConfig[key] = providedConfig[key];
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
return updatedConfig;
|
|
737
|
-
}
|
|
738
|
-
function scheduleWhenIdle(callback, timeout = 500) {
|
|
739
|
-
if (globalThis.requestIdleCallback) {
|
|
740
|
-
requestIdleCallback(callback, { timeout });
|
|
741
|
-
} else {
|
|
742
|
-
setTimeout(callback, 0);
|
|
743
|
-
}
|
|
744
|
-
}
|
|
745
|
-
function highlightNode(node) {
|
|
746
|
-
if (!node.style) return;
|
|
747
|
-
if (node.__oldStyles !== void 0) {
|
|
748
|
-
return;
|
|
749
|
-
}
|
|
750
|
-
if (node.hasAttribute("style")) {
|
|
751
|
-
node.__oldStyles = node.style.cssText;
|
|
752
|
-
}
|
|
753
|
-
node.style.animation = "pulsate .5s infinite";
|
|
754
|
-
node.style.outline = "solid red";
|
|
755
|
-
let styleTag = document.querySelector("style#autoconsent-debug-styles");
|
|
756
|
-
if (!styleTag) {
|
|
757
|
-
styleTag = document.createElement("style");
|
|
758
|
-
styleTag.id = "autoconsent-debug-styles";
|
|
759
|
-
}
|
|
760
|
-
styleTag.textContent = `
|
|
761
|
-
@keyframes pulsate {
|
|
762
|
-
0% {
|
|
763
|
-
outline-width: 8px;
|
|
764
|
-
outline-offset: -4px;
|
|
765
|
-
}
|
|
766
|
-
50% {
|
|
767
|
-
outline-width: 4px;
|
|
768
|
-
outline-offset: -2px;
|
|
769
|
-
}
|
|
770
|
-
100% {
|
|
771
|
-
outline-width: 8px;
|
|
772
|
-
outline-offset: -4px;
|
|
773
|
-
}
|
|
774
|
-
}
|
|
775
|
-
`;
|
|
776
|
-
document.head.appendChild(styleTag);
|
|
777
|
-
}
|
|
778
|
-
function unhighlightNode(node) {
|
|
779
|
-
if (!node.style || !node.hasAttribute("style")) return;
|
|
780
|
-
if (node.__oldStyles !== void 0) {
|
|
781
|
-
node.style.cssText = node.__oldStyles;
|
|
782
|
-
delete node.__oldStyles;
|
|
783
|
-
} else {
|
|
784
|
-
node.removeAttribute("style");
|
|
785
|
-
}
|
|
786
|
-
}
|
|
787
|
-
function isTopFrame() {
|
|
788
|
-
return window.top === window && (!globalThis.location.ancestorOrigins || globalThis.location.ancestorOrigins.length === 0);
|
|
789
|
-
}
|
|
790
|
-
|
|
791
391
|
// lib/heuristic-patterns.ts
|
|
792
392
|
var DETECT_PATTERNS = [
|
|
793
393
|
/accept cookies/gi,
|
|
@@ -1546,15 +1146,19 @@
|
|
|
1546
1146
|
const patterns = [];
|
|
1547
1147
|
const snippets2 = [];
|
|
1548
1148
|
for (const p of detectPatterns) {
|
|
1549
|
-
const
|
|
1550
|
-
if (
|
|
1149
|
+
const matches = allText?.match(p);
|
|
1150
|
+
if (matches) {
|
|
1551
1151
|
patterns.push(p.toString());
|
|
1552
|
-
snippets2.push(...
|
|
1152
|
+
snippets2.push(...matches.map((m) => m.substring(0, 200)));
|
|
1553
1153
|
}
|
|
1554
1154
|
}
|
|
1555
1155
|
return { patterns, snippets: snippets2 };
|
|
1556
1156
|
}
|
|
1557
|
-
function getActionablePopups(mode =
|
|
1157
|
+
function getActionablePopups(mode = "reject", timeout = POPUP_SEARCH_MAX_TIME) {
|
|
1158
|
+
const acceptedLevels = mode === "tier2" ? ["reject", "tier1", "tier2"] : mode === "tier1" ? ["reject", "tier1"] : ["reject"];
|
|
1159
|
+
if (acceptedLevels.length === 0) {
|
|
1160
|
+
return [];
|
|
1161
|
+
}
|
|
1558
1162
|
const popups = getPotentialPopups(timeout);
|
|
1559
1163
|
const result = popups.reduce((acc, popup) => {
|
|
1560
1164
|
const popupText = popup.text?.trim();
|
|
@@ -1570,9 +1174,7 @@
|
|
|
1570
1174
|
}
|
|
1571
1175
|
return acc;
|
|
1572
1176
|
}, []);
|
|
1573
|
-
return result.filter(
|
|
1574
|
-
(popup) => popup.regexClassification !== void 0 && popup.regexClassification !== PopupHandlingModes.None && popup.regexClassification <= mode
|
|
1575
|
-
).sort((a, b) => (a.regexClassification ?? 0) - (b.regexClassification ?? 0));
|
|
1177
|
+
return result.filter((popup) => popup.regexClassification !== void 0 && acceptedLevels.includes(popup.regexClassification)).sort((a, b) => (a.regexClassification ?? "") > (b.regexClassification ?? "") ? 1 : -1);
|
|
1576
1178
|
}
|
|
1577
1179
|
function classifyButtons(buttons) {
|
|
1578
1180
|
for (const button of buttons) {
|
|
@@ -1590,18 +1192,18 @@
|
|
|
1590
1192
|
{ reject: 0, settings: 0, accept: 0, acknowledge: 0 }
|
|
1591
1193
|
);
|
|
1592
1194
|
if (reject > 0) {
|
|
1593
|
-
return
|
|
1195
|
+
return "reject";
|
|
1594
1196
|
}
|
|
1595
1197
|
if (settings > 0) {
|
|
1596
|
-
return
|
|
1198
|
+
return "none";
|
|
1597
1199
|
}
|
|
1598
1200
|
if (acknowledge > 0) {
|
|
1599
|
-
return
|
|
1201
|
+
return "tier1";
|
|
1600
1202
|
}
|
|
1601
1203
|
if (accept > 0) {
|
|
1602
|
-
return accept === 1 ?
|
|
1204
|
+
return accept === 1 ? "tier2" : "none";
|
|
1603
1205
|
}
|
|
1604
|
-
return
|
|
1206
|
+
return "none";
|
|
1605
1207
|
}
|
|
1606
1208
|
function testButtonMatches(buttonText, matchPatterns, neverMatchPatterns) {
|
|
1607
1209
|
if (!buttonText) {
|
|
@@ -2082,7 +1684,7 @@
|
|
|
2082
1684
|
}
|
|
2083
1685
|
};
|
|
2084
1686
|
var AutoConsentHeuristicCMP = class extends AutoConsentCMPBase {
|
|
2085
|
-
constructor(autoconsentInstance, mode =
|
|
1687
|
+
constructor(autoconsentInstance, mode = "reject") {
|
|
2086
1688
|
super(autoconsentInstance);
|
|
2087
1689
|
this.popups = [];
|
|
2088
1690
|
this.name = "HEURISTIC";
|
|
@@ -2109,7 +1711,7 @@
|
|
|
2109
1711
|
this.autoconsent.config.performanceLoggingEnabled && performance.mark("heuristicDetectorEnd");
|
|
2110
1712
|
this.autoconsent.config.performanceLoggingEnabled && performance.measure("heuristicDetector", "heuristicDetectorStart", "heuristicDetectorEnd");
|
|
2111
1713
|
if (this.popups.length > 0) {
|
|
2112
|
-
this.name = `HEURISTIC
|
|
1714
|
+
this.name = `HEURISTIC-${this.popups[0].regexClassification?.toUpperCase()}`;
|
|
2113
1715
|
return Promise.resolve(true);
|
|
2114
1716
|
}
|
|
2115
1717
|
return Promise.resolve(false);
|
|
@@ -2127,7 +1729,7 @@
|
|
|
2127
1729
|
const popup = this.popups[0];
|
|
2128
1730
|
const level = popup.regexClassification;
|
|
2129
1731
|
const buttons = popup.buttons;
|
|
2130
|
-
const targetButtonType = level ===
|
|
1732
|
+
const targetButtonType = level === "reject" ? "reject" : level === "tier1" ? "acknowledge" : "accept";
|
|
2131
1733
|
return buttons.find((button) => button.regexClassification === targetButtonType);
|
|
2132
1734
|
}
|
|
2133
1735
|
optOut() {
|
|
@@ -2153,76 +1755,6 @@
|
|
|
2153
1755
|
}
|
|
2154
1756
|
};
|
|
2155
1757
|
|
|
2156
|
-
// lib/cmps/consentomatic.ts
|
|
2157
|
-
var ConsentOMaticCMP = class {
|
|
2158
|
-
constructor(name, config) {
|
|
2159
|
-
this.name = name;
|
|
2160
|
-
this.config = config;
|
|
2161
|
-
this.methods = /* @__PURE__ */ new Map();
|
|
2162
|
-
this.runContext = defaultRunContext;
|
|
2163
|
-
this.isCosmetic = false;
|
|
2164
|
-
config.methods.forEach((methodConfig) => {
|
|
2165
|
-
if (methodConfig.action) {
|
|
2166
|
-
this.methods.set(methodConfig.name, methodConfig.action);
|
|
2167
|
-
}
|
|
2168
|
-
});
|
|
2169
|
-
this.hasSelfTest = false;
|
|
2170
|
-
}
|
|
2171
|
-
get isIntermediate() {
|
|
2172
|
-
return false;
|
|
2173
|
-
}
|
|
2174
|
-
checkRunContext() {
|
|
2175
|
-
return true;
|
|
2176
|
-
}
|
|
2177
|
-
checkFrameContext(isTop) {
|
|
2178
|
-
return true;
|
|
2179
|
-
}
|
|
2180
|
-
hasMatchingUrlPattern() {
|
|
2181
|
-
return false;
|
|
2182
|
-
}
|
|
2183
|
-
async detectCmp() {
|
|
2184
|
-
const matchResults = this.config.detectors.map((detectorConfig) => matches(detectorConfig.presentMatcher));
|
|
2185
|
-
return matchResults.some((r) => !!r);
|
|
2186
|
-
}
|
|
2187
|
-
async detectPopup() {
|
|
2188
|
-
const matchResults = this.config.detectors.map((detectorConfig) => matches(detectorConfig.showingMatcher));
|
|
2189
|
-
return matchResults.some((r) => !!r);
|
|
2190
|
-
}
|
|
2191
|
-
async executeAction(method, param) {
|
|
2192
|
-
if (this.methods.has(method)) {
|
|
2193
|
-
return executeAction(this.methods.get(method), param);
|
|
2194
|
-
}
|
|
2195
|
-
return true;
|
|
2196
|
-
}
|
|
2197
|
-
async optOut() {
|
|
2198
|
-
await this.executeAction("HIDE_CMP");
|
|
2199
|
-
await this.executeAction("OPEN_OPTIONS");
|
|
2200
|
-
await this.executeAction("HIDE_CMP");
|
|
2201
|
-
await this.executeAction("DO_CONSENT", []);
|
|
2202
|
-
await this.executeAction("SAVE_CONSENT");
|
|
2203
|
-
return true;
|
|
2204
|
-
}
|
|
2205
|
-
async optIn() {
|
|
2206
|
-
await this.executeAction("HIDE_CMP");
|
|
2207
|
-
await this.executeAction("OPEN_OPTIONS");
|
|
2208
|
-
await this.executeAction("HIDE_CMP");
|
|
2209
|
-
await this.executeAction("DO_CONSENT", ["D", "A", "B", "E", "F", "X"]);
|
|
2210
|
-
await this.executeAction("SAVE_CONSENT");
|
|
2211
|
-
return true;
|
|
2212
|
-
}
|
|
2213
|
-
async openCmp() {
|
|
2214
|
-
await this.executeAction("HIDE_CMP");
|
|
2215
|
-
await this.executeAction("OPEN_OPTIONS");
|
|
2216
|
-
return true;
|
|
2217
|
-
}
|
|
2218
|
-
async test() {
|
|
2219
|
-
return true;
|
|
2220
|
-
}
|
|
2221
|
-
};
|
|
2222
|
-
|
|
2223
|
-
// lib/rules.ts
|
|
2224
|
-
var SUPPORTED_RULE_STEP_VERSION = 2;
|
|
2225
|
-
|
|
2226
1758
|
// lib/cmps/trustarc-top.ts
|
|
2227
1759
|
var cookieSettingsButton = "#truste-show-consent";
|
|
2228
1760
|
var shortcutOptOut = "#truste-consent-required";
|
|
@@ -2825,7 +2357,7 @@
|
|
|
2825
2357
|
async optOut() {
|
|
2826
2358
|
await this.waitForElement(".unic button", 1e3);
|
|
2827
2359
|
document.querySelectorAll(".unic button").forEach((button) => {
|
|
2828
|
-
const text = button.textContent;
|
|
2360
|
+
const text = button.textContent || "";
|
|
2829
2361
|
if (text.includes("Manage Options") || text.includes("Optionen verwalten")) {
|
|
2830
2362
|
button.click();
|
|
2831
2363
|
}
|
|
@@ -2838,7 +2370,7 @@
|
|
|
2838
2370
|
}
|
|
2839
2371
|
});
|
|
2840
2372
|
for (const b of document.querySelectorAll(".unic button")) {
|
|
2841
|
-
const text = b.textContent;
|
|
2373
|
+
const text = b.textContent || "";
|
|
2842
2374
|
for (const pattern of ["Confirm Choices", "Save Choices", "Auswahl speichern"]) {
|
|
2843
2375
|
if (text.includes(pattern)) {
|
|
2844
2376
|
b.click();
|
|
@@ -2895,6 +2427,9 @@
|
|
|
2895
2427
|
item.querySelector(".cmp-accordion-item-title").click();
|
|
2896
2428
|
await waitFor(() => !!item.querySelector(".cmp-accordion-item-content.cmp-active"), 10, 50);
|
|
2897
2429
|
const content = item.querySelector(".cmp-accordion-item-content.cmp-active");
|
|
2430
|
+
if (!content) {
|
|
2431
|
+
return false;
|
|
2432
|
+
}
|
|
2898
2433
|
content.querySelectorAll(".cmp-toggle-actions .cmp-toggle-deny:not(.cmp-toggle-deny--active)").forEach((e) => e.click());
|
|
2899
2434
|
content.querySelectorAll(".cmp-toggle-actions .cmp-toggle-checkbox:not(.cmp-toggle-checkbox--active)").forEach((e) => e.click());
|
|
2900
2435
|
}
|
|
@@ -3247,15 +2782,15 @@
|
|
|
3247
2782
|
}
|
|
3248
2783
|
querySelectorChain(selectors) {
|
|
3249
2784
|
let parent = document;
|
|
3250
|
-
let
|
|
2785
|
+
let matches = [];
|
|
3251
2786
|
for (const selector of selectors) {
|
|
3252
|
-
|
|
3253
|
-
if (
|
|
2787
|
+
matches = this.querySingleReplySelector(selector, parent);
|
|
2788
|
+
if (matches.length === 0) {
|
|
3254
2789
|
return [];
|
|
3255
2790
|
}
|
|
3256
|
-
parent =
|
|
2791
|
+
parent = matches[0];
|
|
3257
2792
|
}
|
|
3258
|
-
return
|
|
2793
|
+
return matches;
|
|
3259
2794
|
}
|
|
3260
2795
|
elementSelector(selector) {
|
|
3261
2796
|
if (typeof selector === "string") {
|
|
@@ -3402,8 +2937,6 @@
|
|
|
3402
2937
|
this.rules = [];
|
|
3403
2938
|
__privateAdd(this, _config);
|
|
3404
2939
|
this.state = {
|
|
3405
|
-
cosmeticFiltersOn: false,
|
|
3406
|
-
filterListReported: false,
|
|
3407
2940
|
lifecycle: "loading",
|
|
3408
2941
|
prehideOn: false,
|
|
3409
2942
|
findCmpAttempts: 0,
|
|
@@ -3453,9 +2986,6 @@
|
|
|
3453
2986
|
if (declarativeRules) {
|
|
3454
2987
|
this.parseDeclarativeRules(declarativeRules);
|
|
3455
2988
|
}
|
|
3456
|
-
if (config.enableFilterList) {
|
|
3457
|
-
this.initializeFilterList();
|
|
3458
|
-
}
|
|
3459
2989
|
this.rules = filterCMPs(this.rules, normalizedConfig);
|
|
3460
2990
|
if (this.shouldPrehide) {
|
|
3461
2991
|
if (document.documentElement) {
|
|
@@ -3479,8 +3009,6 @@
|
|
|
3479
3009
|
}
|
|
3480
3010
|
this.updateState({ lifecycle: "initialized" });
|
|
3481
3011
|
}
|
|
3482
|
-
initializeFilterList() {
|
|
3483
|
-
}
|
|
3484
3012
|
get shouldPrehide() {
|
|
3485
3013
|
return this.config.enablePrehide && !this.config.visualTest;
|
|
3486
3014
|
}
|
|
@@ -3509,11 +3037,6 @@
|
|
|
3509
3037
|
parseDeclarativeRules(declarativeRules) {
|
|
3510
3038
|
const perfEnabled = __privateGet(this, _config)?.performanceLoggingEnabled;
|
|
3511
3039
|
perfEnabled && performance.mark("parseDeclarativeRulesStart");
|
|
3512
|
-
if (declarativeRules.consentomatic) {
|
|
3513
|
-
for (const [name, rule] of Object.entries(declarativeRules.consentomatic)) {
|
|
3514
|
-
this.addConsentomaticCMP(name, rule);
|
|
3515
|
-
}
|
|
3516
|
-
}
|
|
3517
3040
|
if (declarativeRules.autoconsent) {
|
|
3518
3041
|
declarativeRules.autoconsent.forEach((ruleset) => {
|
|
3519
3042
|
this.addDeclarativeCMP(ruleset);
|
|
@@ -3535,9 +3058,6 @@
|
|
|
3535
3058
|
this.rules.push(new AutoConsentCMP(ruleset, this));
|
|
3536
3059
|
}
|
|
3537
3060
|
}
|
|
3538
|
-
addConsentomaticCMP(name, config) {
|
|
3539
|
-
this.rules.push(new ConsentOMaticCMP(`com_${name}`, config));
|
|
3540
|
-
}
|
|
3541
3061
|
// start the detection process, possibly with a delay
|
|
3542
3062
|
start() {
|
|
3543
3063
|
scheduleWhenIdle(() => this._start());
|
|
@@ -3556,7 +3076,8 @@
|
|
|
3556
3076
|
if (this.shouldPrehide) {
|
|
3557
3077
|
this.undoPrehide();
|
|
3558
3078
|
}
|
|
3559
|
-
|
|
3079
|
+
this.updateState({ lifecycle: "nothingDetected" });
|
|
3080
|
+
return false;
|
|
3560
3081
|
}
|
|
3561
3082
|
this.updateState({ lifecycle: "cmpDetected" });
|
|
3562
3083
|
const staticCmps = [];
|
|
@@ -3614,7 +3135,7 @@
|
|
|
3614
3135
|
}
|
|
3615
3136
|
}
|
|
3616
3137
|
});
|
|
3617
|
-
const heuristicRules = isTop && this.config.
|
|
3138
|
+
const heuristicRules = isTop && this.config.heuristicMode !== "off" && this.state.findCmpAttempts % 2 === 0 ? [new AutoConsentHeuristicCMP(this, this.config.heuristicMode)] : [];
|
|
3618
3139
|
const rulesPriorityStages = [
|
|
3619
3140
|
["site-specific", siteSpecificRules],
|
|
3620
3141
|
["generic", genericRules],
|
|
@@ -3722,9 +3243,6 @@
|
|
|
3722
3243
|
if (this.shouldPrehide && !this.state.prehideOn) {
|
|
3723
3244
|
this.prehideElements();
|
|
3724
3245
|
}
|
|
3725
|
-
if (this.state.cosmeticFiltersOn) {
|
|
3726
|
-
this.undoCosmetics();
|
|
3727
|
-
}
|
|
3728
3246
|
this.foundCmp = cmp;
|
|
3729
3247
|
if (this.config.autoAction === "optOut") {
|
|
3730
3248
|
return await this.doOptOut();
|
|
@@ -3888,25 +3406,6 @@
|
|
|
3888
3406
|
this.updateState({ prehideOn: false });
|
|
3889
3407
|
this.domActions.undoPrehide();
|
|
3890
3408
|
}
|
|
3891
|
-
undoCosmetics() {
|
|
3892
|
-
}
|
|
3893
|
-
reportFilterlist() {
|
|
3894
|
-
this.sendContentMessage({
|
|
3895
|
-
type: "cmpDetected",
|
|
3896
|
-
url: location.href,
|
|
3897
|
-
cmp: "filterList"
|
|
3898
|
-
});
|
|
3899
|
-
this.sendContentMessage({
|
|
3900
|
-
type: "popupFound",
|
|
3901
|
-
cmp: "filterList",
|
|
3902
|
-
url: location.href
|
|
3903
|
-
});
|
|
3904
|
-
this.updateState({ filterListReported: true });
|
|
3905
|
-
}
|
|
3906
|
-
filterListFallback() {
|
|
3907
|
-
this.updateState({ lifecycle: "nothingDetected" });
|
|
3908
|
-
return false;
|
|
3909
|
-
}
|
|
3910
3409
|
updateState(change) {
|
|
3911
3410
|
Object.assign(this.state, change);
|
|
3912
3411
|
this.sendContentMessage({
|
|
@@ -3957,12 +3456,9 @@
|
|
|
3957
3456
|
};
|
|
3958
3457
|
_config = new WeakMap();
|
|
3959
3458
|
|
|
3960
|
-
// rules/consentomatic.json
|
|
3961
|
-
var consentomatic = { oil: { detectors: [{ presentMatcher: { target: { selector: ".as-oil-content-overlay" }, type: "css" }, showingMatcher: { target: { selector: ".as-oil-content-overlay" }, type: "css" } }], methods: [{ action: { actions: [{ target: { selector: ".as-js-advanced-settings" }, type: "click" }, { retries: "10", target: { selector: ".as-oil-cpc__purpose-container" }, type: "waitcss", waitTime: "250" }], type: "list" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ consents: [{ matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Information storage and access", "Opbevaring af og adgang til oplysninger p\xE5 din enhed"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Information storage and access", "Opbevaring af og adgang til oplysninger p\xE5 din enhed"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "D" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personlige annoncer", "Personalisation"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personlige annoncer", "Personalisation"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "E" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Annoncevalg, levering og rapportering", "Ad selection, delivery, reporting"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Annoncevalg, levering og rapportering", "Ad selection, delivery, reporting"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "F" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personalisering af indhold", "Content selection, delivery, reporting"] }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: ["Personalisering af indhold", "Content selection, delivery, reporting"] }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "E" }, { matcher: { parent: { childFilter: { target: { selector: ".as-oil-cpc__purpose-header", textFilter: ["M\xE5ling", "Measurement"] } }, selector: ".as-oil-cpc__purpose-container" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { childFilter: { target: { selector: ".as-oil-cpc__purpose-header", textFilter: ["M\xE5ling", "Measurement"] } }, selector: ".as-oil-cpc__purpose-container" }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: "Google" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".as-oil-cpc__purpose-container", textFilter: "Google" }, target: { selector: ".as-oil-cpc__switch" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, name: "DO_CONSENT" }, { action: { target: { selector: ".as-oil__btn-optin" }, type: "click" }, name: "SAVE_CONSENT" }, { action: { target: { selector: "div.as-oil" }, type: "hide" }, name: "HIDE_CMP" }] }, optanon: { detectors: [{ presentMatcher: { target: { selector: "#optanon-menu, .optanon-alert-box-wrapper" }, type: "css" }, showingMatcher: { target: { displayFilter: true, selector: ".optanon-alert-box-wrapper" }, type: "css" } }], methods: [{ action: { actions: [{ target: { selector: ".optanon-alert-box-wrapper .optanon-toggle-display, a[onclick*='OneTrust.ToggleInfoDisplay()'], a[onclick*='Optanon.ToggleInfoDisplay()']" }, type: "click" }], type: "list" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ target: { selector: ".preference-menu-item #Your-privacy" }, type: "click" }, { target: { selector: "#optanon-vendor-consent-text" }, type: "click" }, { action: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "X" }], type: "consent" }, target: { selector: "#optanon-vendor-consent-list .vendor-item" }, type: "foreach" }, { target: { selector: ".vendor-consent-back-link" }, type: "click" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-performance" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-performance" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-functional" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-functional" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-advertising" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-advertising" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-social" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-social" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Social Media Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Social Media Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalisation" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalisation" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Site monitoring cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Site monitoring cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Third party privacy-enhanced content" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Third party privacy-enhanced content" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "X" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Performance & Advertising Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Performance & Advertising Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Information storage and access" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Information storage and access" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "D" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad selection, delivery, reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad selection, delivery, reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content selection, delivery, reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content selection, delivery, reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Measurement" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Measurement" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Recommended Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Recommended Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "X" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Unclassified Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Unclassified Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "X" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Analytical Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Analytical Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "B" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Marketing Cookies" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Marketing Cookies" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalization" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Personalization" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad Selection, Delivery & Reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Ad Selection, Delivery & Reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, type: "ifcss" }, { parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content Selection, Delivery & Reporting" }, trueAction: { actions: [{ parent: { selector: "#optanon-menu, .optanon-menu" }, target: { selector: ".menu-item-necessary", textFilter: "Content Selection, Delivery & Reporting" }, type: "click" }, { consents: [{ matcher: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status input" }, type: "checkbox" }, toggleAction: { parent: { selector: "#optanon-popup-body-right" }, target: { selector: ".optanon-status label" }, type: "click" }, type: "E" }], type: "consent" }], type: "list" }, type: "ifcss" }], type: "list" }, name: "DO_CONSENT" }, { action: { parent: { selector: ".optanon-save-settings-button" }, target: { selector: ".optanon-white-button-middle" }, type: "click" }, name: "SAVE_CONSENT" }, { action: { actions: [{ target: { selector: "#optanon-popup-wrapper" }, type: "hide" }, { target: { selector: "#optanon-popup-bg" }, type: "hide" }, { target: { selector: ".optanon-alert-box-wrapper" }, type: "hide" }], type: "list" }, name: "HIDE_CMP" }] }, quantcast2: { detectors: [{ presentMatcher: { target: { selector: "[data-tracking-opt-in-overlay]" }, type: "css" }, showingMatcher: { target: { selector: "[data-tracking-opt-in-overlay] [data-tracking-opt-in-learn-more]" }, type: "css" } }], methods: [{ action: { target: { selector: "[data-tracking-opt-in-overlay] [data-tracking-opt-in-learn-more]" }, type: "click" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ type: "wait", waitTime: 500 }, { action: { actions: [{ target: { selector: "div", textFilter: ["Information storage and access"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "D" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Personalization"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "F" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Ad selection, delivery, reporting"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "F" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Content selection, delivery, reporting"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "E" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Measurement"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "B" }], type: "consent" }, type: "ifcss" }, { target: { selector: "div", textFilter: ["Other Partners"] }, trueAction: { consents: [{ matcher: { target: { selector: "input" }, type: "checkbox" }, toggleAction: { target: { selector: "label" }, type: "click" }, type: "X" }], type: "consent" }, type: "ifcss" }], type: "list" }, parent: { childFilter: { target: { selector: "input" } }, selector: "[data-tracking-opt-in-overlay] > div > div" }, target: { childFilter: { target: { selector: "input" } }, selector: ":scope > div" }, type: "foreach" }], type: "list" }, name: "DO_CONSENT" }, { action: { target: { selector: "[data-tracking-opt-in-overlay] [data-tracking-opt-in-save]" }, type: "click" }, name: "SAVE_CONSENT" }] }, springer: { detectors: [{ presentMatcher: { parent: null, target: { selector: ".cmp-app_gdpr" }, type: "css" }, showingMatcher: { parent: null, target: { displayFilter: true, selector: ".cmp-popup_popup" }, type: "css" } }], methods: [{ action: { actions: [{ target: { selector: ".cmp-intro_rejectAll" }, type: "click" }, { type: "wait", waitTime: 250 }, { target: { selector: ".cmp-purposes_purposeItem:not(.cmp-purposes_selectedPurpose)" }, type: "click" }], type: "list" }, name: "OPEN_OPTIONS" }, { action: { consents: [{ matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Przechowywanie informacji na urz\u0105dzeniu lub dost\u0119p do nich", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Przechowywanie informacji na urz\u0105dzeniu lub dost\u0119p do nich", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "D" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r podstawowych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r podstawowych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "F" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "F" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "E" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Tworzenie profilu spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "E" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Wyb\xF3r spersonalizowanych tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci reklam", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Pomiar wydajno\u015Bci tre\u015Bci", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "B" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Stosowanie bada\u0144 rynkowych w celu generowania opinii odbiorc\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Stosowanie bada\u0144 rynkowych w celu generowania opinii odbiorc\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "X" }, { matcher: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Opracowywanie i ulepszanie produkt\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch .cmp-switch_isSelected" }, type: "css" }, toggleAction: { parent: { selector: ".cmp-purposes_detailHeader", textFilter: "Opracowywanie i ulepszanie produkt\xF3w", childFilter: { target: { selector: ".cmp-switch_switch" } } }, target: { selector: ".cmp-switch_switch:not(.cmp-switch_isSelected)" }, type: "click" }, type: "X" }], type: "consent" }, name: "DO_CONSENT" }, { action: { target: { selector: ".cmp-details_save" }, type: "click" }, name: "SAVE_CONSENT" }] }, wordpressgdpr: { detectors: [{ presentMatcher: { parent: null, target: { selector: ".wpgdprc-consent-bar" }, type: "css" }, showingMatcher: { parent: null, target: { displayFilter: true, selector: ".wpgdprc-consent-bar" }, type: "css" } }], methods: [{ action: { parent: null, target: { selector: ".wpgdprc-consent-bar .wpgdprc-consent-bar__settings", textFilter: null }, type: "click" }, name: "OPEN_OPTIONS" }, { action: { actions: [{ target: { selector: ".wpgdprc-consent-modal .wpgdprc-button", textFilter: "Eyeota" }, type: "click" }, { consents: [{ description: "Eyeota Cookies", matcher: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Eyeota" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Eyeota" }, target: { selector: "label" }, type: "click" }, type: "X" }], type: "consent" }, { target: { selector: ".wpgdprc-consent-modal .wpgdprc-button", textFilter: "Advertising" }, type: "click" }, { consents: [{ description: "Advertising Cookies", matcher: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Advertising" }, target: { selector: "input" }, type: "checkbox" }, toggleAction: { parent: { selector: ".wpgdprc-consent-modal__description", textFilter: "Advertising" }, target: { selector: "label" }, type: "click" }, type: "F" }], type: "consent" }], type: "list" }, name: "DO_CONSENT" }, { action: { parent: null, target: { selector: ".wpgdprc-button", textFilter: "Save my settings" }, type: "click" }, name: "SAVE_CONSENT" }] } };
|
|
3962
|
-
|
|
3963
3459
|
// playwright/content.ts
|
|
3964
3460
|
if (!window.autoconsentReceiveMessage) {
|
|
3965
|
-
const consent = new AutoConsent(window.autoconsentSendMessage, null, { autoconsent: []
|
|
3461
|
+
const consent = new AutoConsent(window.autoconsentSendMessage, null, { autoconsent: [] });
|
|
3966
3462
|
window.autoconsentReceiveMessage = (message) => {
|
|
3967
3463
|
return Promise.resolve(consent.receiveMessageCallback(message));
|
|
3968
3464
|
};
|