@duckduckgo/autoconsent 16.49.0 → 16.51.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/.agents/skills/optimize-button-patterns/SKILL.md +4 -4
- package/.github/workflows/release-labels.yml +2 -6
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +130 -0
- package/build.sh +2 -0
- package/data/labelled-button-texts.csv +36 -36
- package/dist/addon-firefox/background.bundle.js +4 -1
- package/dist/addon-firefox/compact-rules.json +1 -1
- package/dist/addon-firefox/content.bundle.js +67 -46
- package/dist/addon-firefox/manifest.json +1 -1
- package/dist/addon-firefox/rule-index.json +1 -1
- package/dist/addon-firefox/rules.json +1 -1
- package/dist/addon-mv3/background.bundle.js +4 -1
- package/dist/addon-mv3/compact-rules.json +1 -1
- package/dist/addon-mv3/content.bundle.js +67 -46
- package/dist/addon-mv3/manifest.json +1 -1
- package/dist/addon-mv3/rule-index.json +1 -1
- package/dist/addon-mv3/rules.json +1 -1
- package/dist/autoconsent.cjs.js +67 -46
- package/dist/autoconsent.esm.js +67 -46
- package/dist/autoconsent.playwright.js +68 -46
- package/dist/autoconsent.standalone.js +68 -47
- package/dist/heuristics.cjs.js +886 -0
- package/dist/heuristics.mjs +847 -0
- package/dist/types/eval-snippets.d.ts +2 -0
- package/dist/types/heuristic-classify.d.ts +16 -0
- package/dist/types/heuristics.d.ts +2 -9
- package/dist/types/types.d.ts +3 -5
- package/lib/eval-snippets.ts +4 -0
- package/lib/heuristic-classify.ts +136 -0
- package/lib/heuristic-patterns.ts +33 -16
- package/lib/heuristics.ts +3 -124
- package/lib/types.ts +3 -5
- package/lib/web.ts +1 -1
- package/package.json +7 -2
- package/playwright/content.ts +5 -0
- package/readme.md +12 -0
- package/rules/autoconsent/abcacupuncture1.json +34 -0
- package/rules/autoconsent/aceodds.json +13 -0
- package/rules/autoconsent/allabout-japan.json +42 -0
- package/rules/autoconsent/amazon-hiring.json +16 -0
- package/rules/autoconsent/avada-cookie-consent.json +43 -0
- package/rules/autoconsent/avvio.json +22 -0
- package/rules/autoconsent/axeptio.json +22 -6
- package/rules/autoconsent/bdirect-booking-engine.json +33 -0
- package/rules/autoconsent/berelax.com.json +33 -0
- package/rules/autoconsent/bigcrunch.json +39 -0
- package/rules/autoconsent/bigid.json +59 -0
- package/rules/autoconsent/bluepark.json +31 -0
- package/rules/autoconsent/bricklink.json +33 -0
- package/rules/autoconsent/burpee-com.json +5 -1
- package/rules/autoconsent/bynder.json +33 -0
- package/rules/autoconsent/ceneo.json +9 -0
- package/rules/autoconsent/cinemaplus.json +9 -0
- package/rules/autoconsent/columbia-privacy-notice.json +32 -0
- package/rules/autoconsent/complianz-notice.json +1 -1
- package/rules/autoconsent/conjointly.json +43 -0
- package/rules/autoconsent/cookieconsent2-legacy.json +44 -0
- package/rules/autoconsent/cookiesjsr.json +27 -0
- package/rules/autoconsent/copaamerica.json +29 -0
- package/rules/autoconsent/cornerstone-brands.json +51 -0
- package/rules/autoconsent/darkounity.com.json +35 -0
- package/rules/autoconsent/dhbbank.json +13 -0
- package/rules/autoconsent/duda-cookie-notification.json +41 -0
- package/rules/autoconsent/ee-consent-notice.json +40 -0
- package/rules/autoconsent/endocrine.org.json +35 -0
- package/rules/autoconsent/ezoic.json +2 -2
- package/rules/autoconsent/fera-cookies.json +67 -0
- package/rules/autoconsent/fis-data-exchange.json +13 -0
- package/rules/autoconsent/getproven.json +33 -0
- package/rules/autoconsent/givedirectly.json +36 -0
- package/rules/autoconsent/godaddy-website-builder-cosmetic.json +13 -0
- package/rules/autoconsent/godaddy-website-builder.json +9 -0
- package/rules/autoconsent/guesty.json +31 -0
- package/rules/autoconsent/gundam-base-entry.json +40 -0
- package/rules/autoconsent/hearst-us.json +1 -1
- package/rules/autoconsent/indy-systems.json +26 -0
- package/rules/autoconsent/ing-nl.json +54 -0
- package/rules/autoconsent/iubenda.json +25 -3
- package/rules/autoconsent/la7-cmp.json +30 -0
- package/rules/autoconsent/laravel-cookie-consent.json +45 -0
- package/rules/autoconsent/legislation-gov-uk.json +43 -0
- package/rules/autoconsent/lucrin.json +18 -0
- package/rules/autoconsent/mackeeper.json +34 -0
- package/rules/autoconsent/makitatools.json +41 -0
- package/rules/autoconsent/milestone-internet.json +32 -0
- package/rules/autoconsent/ndl-go-jp.json +35 -0
- package/rules/autoconsent/nhm-ac-uk.json +29 -0
- package/rules/autoconsent/npo-ccm.json +42 -0
- package/rules/autoconsent/opalcollection-com.json +12 -0
- package/rules/autoconsent/orw-cookie-banner.json +42 -0
- package/rules/autoconsent/osf-io.json +29 -0
- package/rules/autoconsent/palace-company.json +13 -0
- package/rules/autoconsent/paypal-us.json +3 -3
- package/rules/autoconsent/paypal.json +5 -2
- package/rules/autoconsent/paytronix.json +30 -0
- package/rules/autoconsent/pitt-edu.json +12 -0
- package/rules/autoconsent/pizzapilgrims.co.uk.json +49 -0
- package/rules/autoconsent/podimo.json +73 -0
- package/rules/autoconsent/publicmobile.json +16 -0
- package/rules/autoconsent/rakshaos.json +45 -0
- package/rules/autoconsent/rutjes.json +13 -0
- package/rules/autoconsent/saturdaysnyc.json +33 -0
- package/rules/autoconsent/serpstat-com.json +13 -0
- package/rules/autoconsent/shopquarters.json +41 -0
- package/rules/autoconsent/shopware.json +71 -0
- package/rules/autoconsent/simpleview-cookie-banner.json +27 -0
- package/rules/autoconsent/solvhealth-com.json +12 -0
- package/rules/autoconsent/spermidinelife-us.json +29 -0
- package/rules/autoconsent/squarespace-cookie-banner.json +1 -1
- package/rules/autoconsent/squarespace-cookie-notice.json +29 -0
- package/rules/autoconsent/store2000-fr.json +17 -0
- package/rules/autoconsent/tempest-cookie-notice.json +9 -0
- package/rules/autoconsent/termsfeed.json +4 -4
- package/rules/autoconsent/texas-instruments.json +17 -0
- package/rules/autoconsent/thegrandyork.json +46 -0
- package/rules/autoconsent/thenounproject.json +61 -0
- package/rules/autoconsent/therealest.json +42 -0
- package/rules/autoconsent/tineye.json +35 -0
- package/rules/autoconsent/tk-aerztefuehrer.de.json +18 -0
- package/rules/autoconsent/toyota.json +16 -5
- package/rules/autoconsent/tplink.json +57 -9
- package/rules/autoconsent/trust360.json +29 -0
- package/rules/autoconsent/uft-cookie-notice.json +15 -0
- package/rules/autoconsent/up-cookie-consent.json +53 -0
- package/rules/autoconsent/uw-madison-cookieconsent.json +10 -0
- package/rules/autoconsent/vowels.json +13 -0
- package/rules/autoconsent/wbd-legal-terms.json +32 -0
- package/rules/autoconsent/web-rewind.com.json +21 -0
- package/rules/autoconsent/wildling-com.json +29 -0
- package/rules/autoconsent/worldbank.json +30 -0
- package/rules/autoconsent/yuntrack.json +50 -0
- package/rules/compact-rules.json +1 -1
- package/rules/rule-index.json +1 -1
- package/rules/rules.json +1 -1
- package/scripts/benchmark-button-classification.ts +18 -3
- package/scripts/button-text-benchmark.ts +5 -5
- package/tests/abcacupuncture1.spec.ts +3 -0
- package/tests/aceodds.spec.ts +3 -0
- package/tests/allabout-japan.spec.ts +3 -0
- package/tests/amazon-hiring.spec.ts +3 -0
- package/tests/avada-cookie-consent.spec.ts +9 -0
- package/tests/avvio.spec.ts +8 -0
- package/tests/axeptio.spec.ts +11 -4
- package/tests/bdirect-booking-engine.spec.ts +9 -0
- package/tests/berelax.com.spec.ts +5 -0
- package/tests/bigcrunch.spec.ts +16 -0
- package/tests/bigid.spec.ts +8 -0
- package/tests/bluepark.spec.ts +8 -0
- package/tests/bricklink.spec.ts +3 -0
- package/tests/burpee-com.spec.ts +2 -0
- package/tests/bynder.spec.ts +3 -0
- package/tests/ceneo.spec.ts +3 -0
- package/tests/cinemaplus.spec.ts +8 -0
- package/tests/columbia-privacy-notice.spec.ts +8 -0
- package/tests/complianz-notice.spec.ts +7 -3
- package/tests/conjointly.spec.ts +3 -0
- package/tests/cookieconsent2-legacy.spec.ts +8 -0
- package/tests/cookiesjsr.spec.ts +9 -0
- package/tests/copaamerica.spec.ts +3 -0
- package/tests/cornerstone-brands.spec.ts +8 -0
- package/tests/darkounity.com.spec.ts +6 -0
- package/tests/dhbbank.spec.ts +6 -0
- package/tests/duda-cookie-notification.spec.ts +8 -0
- package/tests/ee-consent-notice.spec.ts +9 -0
- package/tests/endocrine.org.spec.ts +3 -0
- package/tests/ezoic.spec.ts +1 -1
- package/tests/fera-cookies.spec.ts +6 -0
- package/tests/fis-data-exchange.spec.ts +9 -0
- package/tests/getproven.spec.ts +5 -0
- package/tests/givedirectly.spec.ts +3 -0
- package/tests/godaddy-website-builder-cosmetic.spec.ts +7 -0
- package/tests/godaddy-website-builder.spec.ts +8 -0
- package/tests/guesty.spec.ts +7 -0
- package/tests/gundam-base-entry.spec.ts +3 -0
- package/tests/hearst-us.spec.ts +1 -0
- package/tests/indy-systems.spec.ts +8 -0
- package/tests/ing-nl.spec.ts +6 -0
- package/tests/iubenda.spec.ts +5 -0
- package/tests/la7-cmp.spec.ts +6 -0
- package/tests/laravel-cookie-consent.spec.ts +10 -0
- package/tests/legislation-gov-uk.spec.ts +3 -0
- package/tests/lucrin.spec.ts +3 -0
- package/tests/mackeeper.spec.ts +3 -0
- package/tests/makitatools.spec.ts +5 -0
- package/tests/milestone-internet.spec.ts +8 -0
- package/tests/ndl-go-jp.spec.ts +8 -0
- package/tests/nhm-ac-uk.spec.ts +3 -0
- package/tests/npo-ccm.spec.ts +17 -0
- package/tests/opalcollection-com.spec.ts +3 -0
- package/tests/orw-cookie-banner.spec.ts +5 -0
- package/tests/osf-io.spec.ts +3 -0
- package/tests/palace-company.spec.ts +8 -0
- package/tests/paypal-us.spec.ts +2 -3
- package/tests/paytronix.spec.ts +7 -0
- package/tests/pitt-edu.spec.ts +3 -0
- package/tests/pizzapilgrims.co.uk.spec.ts +3 -0
- package/tests/podimo.spec.ts +3 -0
- package/tests/publicmobile.spec.ts +3 -0
- package/tests/rakshaos.spec.ts +9 -0
- package/tests/rutjes.spec.ts +3 -0
- package/tests/saturdaysnyc.spec.ts +3 -0
- package/tests/serpstat-com.spec.ts +3 -0
- package/tests/shopquarters.spec.ts +5 -0
- package/tests/shopware.spec.ts +8 -0
- package/tests/simpleview-cookie-banner.spec.ts +10 -0
- package/tests/solvhealth-com.spec.ts +10 -0
- package/tests/spermidinelife-us.spec.ts +3 -0
- package/tests/squarespace-cookie-notice.spec.ts +9 -0
- package/tests/store2000-fr.spec.ts +5 -0
- package/tests/tempest-cookie-notice.spec.ts +7 -0
- package/tests/termsfeed.spec.ts +4 -0
- package/tests/texas-instruments.spec.ts +3 -0
- package/tests/thegrandyork.spec.ts +3 -0
- package/tests/thenounproject.spec.ts +3 -0
- package/tests/therealest.spec.ts +6 -0
- package/tests/tineye.spec.ts +3 -0
- package/tests/tk-aerztefuehrer.de.spec.ts +6 -0
- package/tests/tplink.spec.ts +11 -1
- package/tests/trust360.spec.ts +8 -0
- package/tests/uft-cookie-notice.spec.ts +3 -0
- package/tests/up-cookie-consent.spec.ts +9 -0
- package/tests/uw-madison-cookieconsent.spec.ts +7 -0
- package/tests/vowels.spec.ts +3 -0
- package/tests/wbd-legal-terms.spec.ts +18 -0
- package/tests/web-rewind.com.spec.ts +5 -0
- package/tests/wildling-com.spec.ts +3 -0
- package/tests/worldbank.spec.ts +7 -0
- package/tests/yuntrack.spec.ts +6 -0
- package/tests-wtr/heuristics/button-classification-accuracy.test.ts +9 -5
- package/tests-wtr/heuristics/get-potential-popups.test.ts +28 -0
- package/tests-wtr/heuristics/heuristics-utils.test.ts +57 -6
- package/tsconfig.build.json +1 -1
- package/tsconfig.heuristics.json +10 -0
- package/rules/autoconsent/paypal-cookieprefs.json +0 -29
- package/tests/paypal-cookieprefs.spec.ts +0 -7
|
@@ -0,0 +1,886 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// lib/heuristic-classify.ts
|
|
21
|
+
var heuristic_classify_exports = {};
|
|
22
|
+
__export(heuristic_classify_exports, {
|
|
23
|
+
ACCEPT_PATTERNS: () => ACCEPT_PATTERNS,
|
|
24
|
+
ACKNOWLEDGE_PATTERNS: () => ACKNOWLEDGE_PATTERNS,
|
|
25
|
+
BUTTON_NEVER_MATCH_PATTERNS: () => BUTTON_NEVER_MATCH_PATTERNS,
|
|
26
|
+
DETECT_NEVER_MATCH_PATTERNS: () => DETECT_NEVER_MATCH_PATTERNS,
|
|
27
|
+
DETECT_PATTERNS: () => DETECT_PATTERNS,
|
|
28
|
+
REJECT_PATTERNS: () => REJECT_PATTERNS,
|
|
29
|
+
SETTINGS_PATTERNS: () => SETTINGS_PATTERNS,
|
|
30
|
+
checkHeuristicPatterns: () => checkHeuristicPatterns,
|
|
31
|
+
classifyButtonTextRegex: () => classifyButtonTextRegex,
|
|
32
|
+
classifyButtons: () => classifyButtons,
|
|
33
|
+
classifyPopup: () => classifyPopup,
|
|
34
|
+
cleanButtonText: () => cleanButtonText,
|
|
35
|
+
isExcludedPopup: () => isExcludedPopup
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(heuristic_classify_exports);
|
|
38
|
+
|
|
39
|
+
// lib/heuristic-patterns.ts
|
|
40
|
+
var DETECT_PATTERNS = [
|
|
41
|
+
/accept cookies/gi,
|
|
42
|
+
/accept all/gi,
|
|
43
|
+
/reject all/gi,
|
|
44
|
+
/only necessary cookies/gi,
|
|
45
|
+
// "only necessary" is probably too broad
|
|
46
|
+
/(?:by continuing.{0,100}cookie)|(?:cookie.{0,100}by continuing)/gi,
|
|
47
|
+
/(?:by continuing.{0,100}privacy)|(?:privacy.{0,100}by continuing)/gi,
|
|
48
|
+
// a single qualifier is common: "optional", "essential", "necessary", "analytics", ...
|
|
49
|
+
/we (?:use|serve)(?: \w+)? cookies/gi,
|
|
50
|
+
/we are using cookies/gi,
|
|
51
|
+
/use of cookies/gi,
|
|
52
|
+
/website uses cookies to enhance your browsing experience/gi,
|
|
53
|
+
/(?:this|our) (?:web)?site.{0,100}cookies/gi,
|
|
54
|
+
/cookies (?:and|or) .{0,100} technologies/gi,
|
|
55
|
+
/such as cookies/gi,
|
|
56
|
+
/read more about.{0,100}cookies/gi,
|
|
57
|
+
/consent to.{0,100}cookies/gi,
|
|
58
|
+
/we and our partners.{0,100}cookies/gi,
|
|
59
|
+
/we.{0,100}store.{0,100}information.{0,100}such as.{0,100}cookies/gi,
|
|
60
|
+
/store and\/or access information.{0,100}on a device/gi,
|
|
61
|
+
/personalised ads and content, ad and content measurement/gi,
|
|
62
|
+
// it might be tempting to add the patterns below, but they cause too many false positives. Don't do it :)
|
|
63
|
+
// /cookies? settings/i,
|
|
64
|
+
// /cookies? preferences/i,
|
|
65
|
+
// FR
|
|
66
|
+
/utilisons.{0,100}des.{0,100}cookies/gi,
|
|
67
|
+
/des.{0,100}cookies.{0,100}pour/gi,
|
|
68
|
+
/retirer.{0,100}votre.{0,100}consentement/gi,
|
|
69
|
+
/et.{0,100}nos.{0,100}partenaires/gi,
|
|
70
|
+
/publicités.{0,100}et.{0,100}du.{0,100}contenu/gi,
|
|
71
|
+
/utilise.{0,100}des.{0,100}cookies/gi,
|
|
72
|
+
/utilisent.{0,100}des.{0,100}cookies/gi,
|
|
73
|
+
/stocker.{0,100}et.{0,100}ou.{0,100}accéder/gi,
|
|
74
|
+
/consentement.{0,100}à.{0,100}tout.{0,100}moment/gi,
|
|
75
|
+
/votre.{0,100}consentement/gi,
|
|
76
|
+
/accepter.{0,100}tout/gi,
|
|
77
|
+
/utilisation.{0,100}des.{0,100}cookies/gi,
|
|
78
|
+
/cookies.{0,100}ou.{0,100}technologies/gi,
|
|
79
|
+
/acceptez.{0,100}l.{0,100}utilisation/gi,
|
|
80
|
+
/continuer sans accepter/gi,
|
|
81
|
+
/tout refuser/gi,
|
|
82
|
+
/(?:refuser|rejeter) tous les cookies/gi,
|
|
83
|
+
/je refuse/gi,
|
|
84
|
+
/refuser et continuer/gi,
|
|
85
|
+
/refuser les cookies/gi,
|
|
86
|
+
/seulement nécessaires/gi,
|
|
87
|
+
/je désactive les finalités non essentielles/gi,
|
|
88
|
+
/cookies essentiels uniquement/gi,
|
|
89
|
+
/nécessaires uniquement/gi,
|
|
90
|
+
// DE
|
|
91
|
+
/wir.{0,100}verwenden.{0,100}cookies/gi,
|
|
92
|
+
/wir.{0,100}und.{0,100}unsere.{0,100}partner/gi,
|
|
93
|
+
/zugriff.{0,100}auf.{0,100}informationen.{0,100}auf/gi,
|
|
94
|
+
/inhalte.{0,100}messung.{0,100}von.{0,100}werbeleistung.{0,100}und/gi,
|
|
95
|
+
/cookies.{0,100}und.{0,100}andere/gi,
|
|
96
|
+
/verwendung.{0,100}von.{0,100}cookies/gi,
|
|
97
|
+
/wir.{0,100}nutzen.{0,100}cookies/gi,
|
|
98
|
+
/verwendet.{0,100}cookies/gi,
|
|
99
|
+
/sie.{0,100}können.{0,100}ihre.{0,100}auswahl/gi,
|
|
100
|
+
/und.{0,100}ähnliche.{0,100}technologien/gi,
|
|
101
|
+
/cookies.{0,100}wir.{0,100}verwenden/gi,
|
|
102
|
+
/alles?.{0,100}ablehnen/gi,
|
|
103
|
+
/(?:nur|nicht).{0,100}(?:zusätzliche|essenzielle|funktionale|notwendige|erforderliche).{0,100}(?:cookies|akzeptieren|erlauben|ablehnen)/gi,
|
|
104
|
+
/weiter.{0,100}(?:ohne|mit).{0,100}(?:einwilligung|zustimmung|cookies)/gi,
|
|
105
|
+
/(?:cookies|einwilligung).{0,100}ablehnen/gi,
|
|
106
|
+
/nur funktionale cookies akzeptieren/gi,
|
|
107
|
+
/optionale ablehnen/gi,
|
|
108
|
+
/zustimmung verweigern/gi,
|
|
109
|
+
// NL
|
|
110
|
+
/gebruik.{0,100}van.{0,100}cookies/gi,
|
|
111
|
+
/(?:we|wij).{0,100}gebruiken.{0,100}cookies.{0,100}om/gi,
|
|
112
|
+
/cookies.{0,100}en.{0,100}vergelijkbare/gi,
|
|
113
|
+
/(?:alles|cookies).{0,100}(?:afwijzen|weigeren|verwerpen)/gi,
|
|
114
|
+
/alleen.{0,100}noodzakelijke?\b/gi,
|
|
115
|
+
/cookies weigeren/gi,
|
|
116
|
+
/weiger.{0,100}(?:cookies|alles)/gi,
|
|
117
|
+
/doorgaan zonder (?:te accepteren|akkoord te gaan)/gi,
|
|
118
|
+
/alleen.{0,100}(?:optionele|functionele|functioneel|noodzakelijke|essentiële).{0,100}cookies/gi,
|
|
119
|
+
/wijs alles af/gi,
|
|
120
|
+
// Spanish (ES)
|
|
121
|
+
/(si|al) contin[úu]a[sr]?( navegando)?.{0,100} cookie/gi,
|
|
122
|
+
/(usamos|utilizar?|utilizamos)( (tanto|las))?.{0,20}cookie/gi,
|
|
123
|
+
/\b(hacemos|hace) uso de cookies\b/gi,
|
|
124
|
+
/\busa cookies de google\b/gi,
|
|
125
|
+
/acepta.{0,80} uso de cookies/gi,
|
|
126
|
+
/al utilizar nuestro sitio web.{0,80}cookie/gi,
|
|
127
|
+
/almacenar la información en un dispositivo y\/?o acceder a ella/gi,
|
|
128
|
+
/cookie.{0,30} utiliza/gi,
|
|
129
|
+
/cookies propias y de/gi,
|
|
130
|
+
/cookies.{0,80}son necesarias/gi,
|
|
131
|
+
/est[ea] (sitio|página|web)( web)?( también)? (usa|utiliza|requiere del uso de|se sirven|emplea) cookies?/gi,
|
|
132
|
+
/navegando.{0,100}cookie/gi,
|
|
133
|
+
/nosotros y nuestros( \d+)? (socios|proveedores).{0,180} cookies/gi,
|
|
134
|
+
/recopilamos y almacenamos datos de usted y de su dispositivo/gi,
|
|
135
|
+
/utilizamos tecnolog[ií]as como las cookies/gi,
|
|
136
|
+
// Polish (PL)
|
|
137
|
+
// examples:
|
|
138
|
+
// wykorzystuje pliki cookie (uses cookies)
|
|
139
|
+
// Wykorzystujemy informacje w plikach cookie (We use information in cookies)
|
|
140
|
+
/(używamy|stosujemy|stosuje|wykorzystujemy|wykorzyst(uje|ywane))( są)?.{0,20} plik(i|ów|ach) cookie/gi,
|
|
141
|
+
/(używać|używamy).{0,80} (ciasteczek|cookie)/gi,
|
|
142
|
+
/cele przetwarzania twoich danych przez zaufanych partnerów iab/gi,
|
|
143
|
+
/dzięki (plikom cookie|ciasteczkom|cookie)/gi,
|
|
144
|
+
/korzysta.{0,80} plików cookie/gi,
|
|
145
|
+
/korzystamy z technologii, takich jak pliki cookie/gi,
|
|
146
|
+
/korzystamy.{0,50} cookies/gi,
|
|
147
|
+
/niektóre pliki cookies/gi,
|
|
148
|
+
/pliki cookies i pokrewne im technologie umożliwiają poprawne działanie strony i pomagają nam dostosować ofertę do twoich potrzeb/gi,
|
|
149
|
+
/przechowywanie informacji na urządzeniu lub dostęp do nich/gi,
|
|
150
|
+
/przechowywanie plików cookie na swoim urządzeniu/gi,
|
|
151
|
+
/przechowywać i uzyskiwać dostęp do informacji na twoich urządzeniach/gi,
|
|
152
|
+
/przetwarzamy.{0,80} cookie/gi,
|
|
153
|
+
/strona.{0,50} używa (ciasteczek|cookie)/gi,
|
|
154
|
+
/ta strona korzysta z ciasteczek/gi,
|
|
155
|
+
/uzyskujemy dostęp i przechowujemy informacje na urządzeniu/gi,
|
|
156
|
+
/używa plik[ió]w? cookie/gi,
|
|
157
|
+
/używamy plików.{0,20}cookie/gi,
|
|
158
|
+
/wykorzystują .{0,100}cookie/gi,
|
|
159
|
+
/za pomocą plików cookies.{0,100} my lub nasi partnerzy/gi,
|
|
160
|
+
/zgodą my i nasi partnerzy możemy wykorzystywać precyzyjne dane geolokalizacyjne i identyfikację/gi,
|
|
161
|
+
// Catalan (CA)
|
|
162
|
+
/cookies pròpies i de tercers/gi,
|
|
163
|
+
/utilitzem galetes/gi,
|
|
164
|
+
/\búnicament utilitza galetes pròpies amb finalitat tècnica\b/gi,
|
|
165
|
+
/este lloc web utilitza només cookies tècniques necessàries per al seu funcionament/gi,
|
|
166
|
+
/utilitza cookies tècniques,\s*de personalització i anàlisi/gi,
|
|
167
|
+
/utilitzem cookies i altres tecnologies/gi,
|
|
168
|
+
// Basque (EU)
|
|
169
|
+
/cookie propio eta hirugarrenenak helburu teknikoarekin erabiltzen ditu/gi,
|
|
170
|
+
/cookie propioak eta hirugarrenen cookieak erabiltzen ditugu/gi,
|
|
171
|
+
/cookie propioak eta hirugarrenenak helburu teknikoarekin erabiltzen ditu/gi,
|
|
172
|
+
/cookie[-\s]*ak erabiltzen ditu/gi,
|
|
173
|
+
/cookieak erabiltzen ditu/gi,
|
|
174
|
+
/guk eta gure \d+ bazkideek cookieak eta identifikadoreak erabiltzen ditugu/gi,
|
|
175
|
+
/norberaren eta hirugarrenen cookie-?ak baino ez ditu erabiltzen/gi,
|
|
176
|
+
/web orri honek cookieak erabiltzen ditu/gi,
|
|
177
|
+
/webgune honek cookie propioak eta hirugarrenen cookie-fitxategiak erabiltzen ditu/gi,
|
|
178
|
+
// Galician (GL)
|
|
179
|
+
/^\s*empregamos cookies propias\b/gi,
|
|
180
|
+
/este portal emprega cookies propias ou de terceiros con fins analíticos/gi,
|
|
181
|
+
// Russian (RU)
|
|
182
|
+
// e.g. "мы используем файлы cookie", "сайт использует куки", "используются технологии cookie"
|
|
183
|
+
// note: \w does not match Cyrillic, so these use explicit character ranges
|
|
184
|
+
/использу[а-яё]*.{0,40}(?:файл[а-яё]*[\s-]+)?(?:cookie|куки)/gi,
|
|
185
|
+
/(?:cookie|куки).{0,40}использу[а-яё]*/gi,
|
|
186
|
+
/(?:использовани[а-яё]*|обработк[а-яё]*|хранени[а-яё]*).{0,20}(?:файл(?:ов|ы)[\s-]+)?(?:cookie|куки)/gi,
|
|
187
|
+
/технологи[а-яё]*\s+(?:cookie|куки)/gi,
|
|
188
|
+
// e.g. "сайт собирает cookie", "мы применяем файлы cookie", "сохраняем куки на вашем устройстве"
|
|
189
|
+
/(?:собира[а-яё]*|сбор|применя[а-яё]*|сохраня[а-яё]*|размеща[а-яё]*|устанавлива[а-яё]*).{0,30}(?:файл[а-яё]*[\s-]+)?(?:cookie|куки)/gi,
|
|
190
|
+
// "файлы cookie" / "cookie-файлы" / "куки-файлы" in any phrasing
|
|
191
|
+
/(?:файл[а-яё]*[\s-]+(?:cookie|куки)|(?:cookie|куки)[\s-]+файл[а-яё]*)/gi,
|
|
192
|
+
// Italian (IT)
|
|
193
|
+
/usiamo.{0,20}cookie/gi,
|
|
194
|
+
// Japanese (JA)
|
|
195
|
+
// e.g. "当サイトはCookieを使用しています", "クッキー(Cookie)を利用しています"
|
|
196
|
+
/(?:cookie|クッキー).{0,10}を(?:使用|利用)/gi
|
|
197
|
+
];
|
|
198
|
+
var REJECT_PATTERNS_ENGLISH = [
|
|
199
|
+
// e.g. "reject", "reject all", "reject all cookies", "deny all", "refuse cookies", "decline",
|
|
200
|
+
// "reject non-essential cookies", "reject unnecessary cookies", "reject all but necessary", "reject all and close"
|
|
201
|
+
// note that "reject and subscribe" and "reject and pay" are excluded via BUTTON_NEVER_MATCH_PATTERNS
|
|
202
|
+
/^\s*(no,?\s*)?(i\s+)?(reject|deny|refuse|decline|disable)\s*(all)?\s*(but|except)?\s*(non[- ]?essential|un(necessary|required)|optional|additional|targeting|analytics|marketing|non[- ]?necessary|extra|tracking|advertising|necessary|essential)?\s*(cookies)?\s*(and\s+close)?\s*$/is,
|
|
203
|
+
// e.g. "i do not accept", "do not accept cookies", "i do not accept the use of cookies"
|
|
204
|
+
/^\s*(no,?\s*)?(i\s+)?do\s+not\s+accept\s*(the\s+use\s+of\s+)?(any\s+)?(cookies)?\s*$/is,
|
|
205
|
+
// e.g. "continue without accepting", "continue without agreeing", "continue without agreeing →"
|
|
206
|
+
/^\s*(continue|proceed|continue\s+browsing)\s+without\s+(accepting|agreeing|consent|cookies|tracking)(\s*→)?\s*$/is,
|
|
207
|
+
// essential/necessary/functional-only, e.g. "essential cookies only", "accept only essential cookies",
|
|
208
|
+
// "allow necessary cookies continue", "use essential cookies only", "functional only", "essential only cookies", "i confirm necessary"
|
|
209
|
+
/^\s*(i\s+)?(want\s+to\s+)?(only\s+)?(use|accept|allow|keep|enable|choose|continue\s+with|i\s+confirm)\s*(only\s+)?(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s*(continue|only)?\s*$/is,
|
|
210
|
+
/^\s*(i\s+)?(want\s+to\s+)?only\s+(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s*(cookies)?\s*(continue|only)?\s*$/is,
|
|
211
|
+
/^\s*(strictly\s+)?(necessary|essential|essentials|functional|required|minimal)\s+((cookies\s+)?only|only\s+cookies)\s*$/is,
|
|
212
|
+
// e.g. "do not sell or share my personal information", "do not share my personal information", "opt out of sale ..." (CCPA)
|
|
213
|
+
// "do not sell page" is a link; "do not sellcookie settings" is two concatenated buttons
|
|
214
|
+
/do\s+not\s+sell(?!\s*(page|cookie settings))|do\s+not\s+share\s+my\s+(personal\s+)?(information|info|data)|opt\s+out\s+of\s+sale/is,
|
|
215
|
+
// e.g. "opt-out of sale/share or targeted advertising", "opt-out of advertising/social media cookies"
|
|
216
|
+
/^opt[ -]?out of /is,
|
|
217
|
+
// e.g. "reject all except strictly necessary", "reject all (except necessary cookies)"
|
|
218
|
+
/except\s+(strictly\s+)?necessary/is,
|
|
219
|
+
// e.g. "disagree", "i disagree", "disagree and close"
|
|
220
|
+
/^(i\s+)?disagree\s*(and\s+close)?$/i,
|
|
221
|
+
"no",
|
|
222
|
+
/^no,? thank(s| you)$/is,
|
|
223
|
+
/^opt[ -]out$/is,
|
|
224
|
+
"dont enable",
|
|
225
|
+
"i do not agree"
|
|
226
|
+
];
|
|
227
|
+
var REJECT_PATTERNS_DUTCH = [
|
|
228
|
+
// weigeren / afwijzen / verwerpen (reject verbs, any position)
|
|
229
|
+
/weiger|afwijz|verwerp/is,
|
|
230
|
+
// "wijs (alles/ze) af" (reject verb with split particle)
|
|
231
|
+
/wijs\b.*\baf\b/is,
|
|
232
|
+
// "alleen/enkel/uitsluitend ... (noodzakelijk|functioneel|essentieel|...)"
|
|
233
|
+
/(^|\s)(alleen|enkel|uitsluitend)\s+.{0,20}(noodzakelijk|functione|essenti|vereiste|verplichte|strikt|minimale|basis|basic|standaard)/is,
|
|
234
|
+
// essential/necessary-only nouns
|
|
235
|
+
/^\s*(accepteer\s+|aanvaard\s+|gebruik\s+|sta\s+|ik wil\s+)?(alleen\s+|enkel\s+|uitsluitend\s+|strikt\s+)?(de\s+)?(noodzakelijke?|functionele?|functioneel|essentiële|essentieel|vereiste|verplichte|minimale|basiscookies|basis|standaard)\s*(cookies?)?\s*(accepteren|toestaan|aanvaarden)?\s*$/is,
|
|
236
|
+
// continue without accepting / consent
|
|
237
|
+
/(doorgaan|ga door|ga verder|verder)\s+.{0,15}(zonder|aanvaard)/is,
|
|
238
|
+
// "nee" refusals (but not "nee, sluiten" → acknowledge)
|
|
239
|
+
/^nee(,?\s+(bedankt|dank je|dankje|liever niet|liever geen cookies|geen persoonlijke cookies|geen cookies.*|weigeren?))?$/is,
|
|
240
|
+
"niet accepteren",
|
|
241
|
+
"niet akkoord",
|
|
242
|
+
"ik ga niet akkoord",
|
|
243
|
+
"liever niet",
|
|
244
|
+
"geen cookies toestaan",
|
|
245
|
+
"liever geen cookies",
|
|
246
|
+
"functioneel altijd actief"
|
|
247
|
+
];
|
|
248
|
+
var REJECT_PATTERNS_FRENCH = [
|
|
249
|
+
// refuser / rejeter / interdire / décliner (reject verbs, any position)
|
|
250
|
+
// "refuser et s'abonner" / "refuser et payer" are excluded via BUTTON_NEVER_MATCH_PATTERNS
|
|
251
|
+
// skip English prose such as "cookies that you can refuse"
|
|
252
|
+
/^(?!.*\bcan refuse\b)(.*\s)?(refus|rejet|rejeter|interdire|interdis|déclin|declin)/is,
|
|
253
|
+
// only necessary / essential / technical / functional
|
|
254
|
+
/^(?=.*(cookie|nécessaire|essentiel|techni|requis|obligatoire|fonctionnel|indispensable|sdk)).*(uniquement|seulement|indispensable|strictement nécessaire|que les cookies\s+(nécessaires|techniques|essentiels|indispensables|fonctionnels))/is,
|
|
255
|
+
// continue/proceed without accepting; refuse everything; disable purposes
|
|
256
|
+
/(sans accepter|ne pas accepter|je naccepte rien|je désactive)/is,
|
|
257
|
+
// "non" / "non, merci"
|
|
258
|
+
/^non(,?\s+merci\.?)?$/is
|
|
259
|
+
];
|
|
260
|
+
var REJECT_PATTERNS_GERMAN = [
|
|
261
|
+
// "... ablehnen" / "ablehnen ..." (reject/decline). Exclude the settings-list phrase "einstell(ungen|en) oder ablehnen".
|
|
262
|
+
/^(?!einstell(ungen|en) oder ablehnen$).*ablehnen/is,
|
|
263
|
+
// verweigern / verweigere / verweigert (refuse)
|
|
264
|
+
/verweiger/is,
|
|
265
|
+
// essential/necessary/functional-only variants (accepting only necessary → reject)
|
|
266
|
+
/^\s*(nur|ausschließlich|lediglich|weiter\s+mit|mit|akzeptiere?n?|unbedingt|es\s+werden\s+nur)?\s*(technisch\s+)?(notwendige?[nrs]?|essenzielle?[nrs]?|essentielle?[nrs]?|erforderliche?[nrs]?|funktionale?[nrs]?|funktionelle?[nrs]?|wesentliche?[nrs]?)\s*(cookies?|technologien|funktionscookies|dienste)?\s*(akzeptieren|erlauben|zulassen|verwenden|annehmen|setzen|speichern|zustimmen|auswählen)?\.?\s*$/is,
|
|
267
|
+
// continue without consent
|
|
268
|
+
/(^|\s)(ohne\s+(zu\s+)?(einwilligung|zustimmung|einverständnis|annahme|annehmen|akzeptanz|akzeptieren)|(weiter|fortfahren)\s+ohne)/is,
|
|
269
|
+
// negations / refusals not covered by the regexes above
|
|
270
|
+
"nein, danke",
|
|
271
|
+
"nein, bitte nicht",
|
|
272
|
+
"nein, ich stimme nicht zu",
|
|
273
|
+
"nicht zustimmen",
|
|
274
|
+
"nicht einverstanden",
|
|
275
|
+
"ich lehne ab",
|
|
276
|
+
"mit erforderlichen einstellungen fortfahren",
|
|
277
|
+
"mit erforderlichen cookies fortfahren",
|
|
278
|
+
"mit notwendigen fortfahren"
|
|
279
|
+
];
|
|
280
|
+
var REJECT_PATTERNS_ITALIAN = [
|
|
281
|
+
// rifiuta / rifiutare / rifiuto / nega / negare / blocca (reject verbs)
|
|
282
|
+
/(^|\s)(rifiut|neg(a|are|hi)|blocca i cookie)/is,
|
|
283
|
+
// accept/use only necessary / essential / technical
|
|
284
|
+
/^\s*(accetta|accettare|usa|installa|consenti|chiudi e prosegui( solo con)?)?\s*(solo|soltanto|unicamente)?\s*(i\s+|gli\s+)?(cookies?\s+)?(strettamente\s+)?(necessari|necessary|essenziali|tecnici|di navigazione)\s*(necessari|tecnici|essenziali)?\s*$/is,
|
|
285
|
+
// continue without accepting
|
|
286
|
+
/continua(re)? senza accettare/is,
|
|
287
|
+
"non accetto"
|
|
288
|
+
];
|
|
289
|
+
var REJECT_PATTERNS_BRAZILIAN_PORTUGUESE = [
|
|
290
|
+
// (deny)
|
|
291
|
+
/^\s*(rejeitar|recusar|desativar|bloquear|negar|não\s*aceito|não \s*aceitar)\s*$/is,
|
|
292
|
+
// (proceed) (without accepting)
|
|
293
|
+
/^\s*(continuar|prosseguir|seguir)\s*(sem\s*aceitar)\s*$/is,
|
|
294
|
+
// (deny) (everything) (optional)
|
|
295
|
+
/^\s*(rejeitar|recusar|desativar|bloquear|negar|não\s*aceito|não \s*aceitar)\s*(tudo|o)?\s*(opcional|(não[-\s](essencial|funcional|obrigatório|necessário)))?\s*$/is,
|
|
296
|
+
// (deny) (all) (the) (optional) (cookies)
|
|
297
|
+
/^\s*(rejeitar|recusar|desativar|bloquear|negar|não\s*aceito|não \s*aceitar)\s*(todos)?\s*(os)?\s*(cookies)?\s*(opcionais|(não[-\s](essenciais|funcionais|obrigatórios|necessários)))?\s*$/is,
|
|
298
|
+
// (accept) (only) (the) (essential)
|
|
299
|
+
/^\s*(aceitar|utilizar)?\s*(apenas|somente|só)?\s*(o)?\s*(essencial|funcional|obrigatório|necessário)\s*$/is,
|
|
300
|
+
// (accept) (only) (the) (essential) (cookies)
|
|
301
|
+
/^\s*(aceitar|utilizar)?\s*(apenas|somente|só)?\s*(os)?\s*(cookies)?\s*(essenciais|funcionais|obrigatórios|necessários)\s*$/is
|
|
302
|
+
];
|
|
303
|
+
var REJECT_PATTERNS_SPANISH = [
|
|
304
|
+
// rechazar / denegar / declinar / negar (reject verbs, any position)
|
|
305
|
+
// "rechazar y pagar" / "rechazar y suscribirse" are excluded via BUTTON_NEVER_MATCH_PATTERNS
|
|
306
|
+
/(^|\s)(rechaz|recház|deneg|negar|declin)/is,
|
|
307
|
+
// accept/allow/use (only) necessary / essential / technical / functional / own
|
|
308
|
+
/^\s*(aceptar?|acepta|permitir|permite|usar|utilizar)?\s*(solo|sólo|només|únicamente)?\s*(las?\s+|los\s+)?(cookies?\s+)?(estrictamente\s+)?(necesari\w*|esencial\w*|técnic\w*|obligatori\w*|funcional\w*|propias)\s*$/is,
|
|
309
|
+
// "solo/sólo/no, sólo ... necessary/essential"
|
|
310
|
+
/^(no,?\s+)?(solo|sólo|només)\s+(usar\s+|las?\s+|los\s+|lo\s+)?.{0,20}(necesari|esencial|estrictamente)/is,
|
|
311
|
+
// refusals / opt-outs
|
|
312
|
+
/^(no acept|no consentir|no permitir|no estoy de acuerdo|no,? gracias|sin consentimiento|continuar sin aceptar|prefiero rechazarlas|descartar todas)/is,
|
|
313
|
+
"acceptar nom\xE9s les necess\xE0ries",
|
|
314
|
+
"nom\xE9s sutilitzen cookies quan \xE9s necessari",
|
|
315
|
+
"pulsa aqu\xED para desactivar las cookies opcionales"
|
|
316
|
+
];
|
|
317
|
+
var REJECT_PATTERNS_SWEDISH = [
|
|
318
|
+
// avvisa / avböj / neka / förneka (reject verbs)
|
|
319
|
+
/(^|\s)(avvisa|avböj|neka|nekar|förneka)/is,
|
|
320
|
+
// (allow/accept/use) only necessary cookies/kakor
|
|
321
|
+
/(bara|endast|enbart)\s+nödvändig/is,
|
|
322
|
+
// "godkänn/acceptera/använd/tillåt (bara/endast/enbart) nödvändiga (cookies/kakor)"
|
|
323
|
+
/^(ok,?\s+|nej,?\s+)?(jag\s+)?(godkänn\w*|godta|acceptera\w*|använd\w*|tillåt|spara)?\s*(bara|endast|enbart)?\s*(strikt\s+)?nödvändiga?t?( (cookies|kakor|tjänster))?\.?$/is,
|
|
324
|
+
// continue without accepting
|
|
325
|
+
/fortsätt utan att (acceptera|godkänna)/is,
|
|
326
|
+
/strikt nödvändig/is,
|
|
327
|
+
"till\xE5t inte cookies",
|
|
328
|
+
"jag accepterar endast grundl\xE4ggande kakor"
|
|
329
|
+
];
|
|
330
|
+
var REJECT_PATTERNS_CATALAN = [/(^|\s)rebutj/is, "no accepto", "no, gr\xE0cies"];
|
|
331
|
+
var REJECT_PATTERNS_GALICIAN = [/(^|\s)rexeitar/is];
|
|
332
|
+
var REJECT_PATTERNS_BASQUE = [/(^|\s)(baztertu|ukatu)/is];
|
|
333
|
+
var REJECT_PATTERNS_PORTUGUESE = [/^aceitar apenas cookies essenciais\.$/];
|
|
334
|
+
var REJECT_PATTERNS_CZECH = ["povolit pouze nezbytn\xE9 cookie"];
|
|
335
|
+
var REJECT_PATTERNS_POLISH = [
|
|
336
|
+
// odrzuć / odrzucam / odmawiam / rezygnuję / blokuj wszystkie (reject verbs)
|
|
337
|
+
/odrzu(ć|cam|cenie|cać|canie|cić)|odmaw|odmowa|odmów|rezygnuj|blokuj wszystk/is,
|
|
338
|
+
// (accept) only necessary / required
|
|
339
|
+
/(^|\s)tylko\s+(bezwzględnie\s+)?(niezbędn\w*|wymagan\w*|konieczne)/is,
|
|
340
|
+
/(akceptuj|akceptuję|zaakceptuj|zatwierdź|potwierdzam|zezwól)\s+(tylko\s+)?(na\s+)?(niezbędn\w*|wymagan\w*|konieczne)/is,
|
|
341
|
+
/korzystaj wyłącznie z niezbędn/is,
|
|
342
|
+
// continue without accepting / consent
|
|
343
|
+
/kontynuuj bez (akceptacj|akceptowani|wyrażania zgody)/is,
|
|
344
|
+
// refusals
|
|
345
|
+
/nie (akceptuję|zgadzam|wyrażam zgody|wyrażaj zgody|zezwalaj|potwierdzam)/is,
|
|
346
|
+
/^nie(,?\s+(dziękuję|nie zgadzam.*))?$/is,
|
|
347
|
+
"niezb\u0119dne",
|
|
348
|
+
"niezb\u0119dne pliki cookie",
|
|
349
|
+
/^funkcjonalne pliki cookie \(wymagane\)$/
|
|
350
|
+
];
|
|
351
|
+
var REJECT_PATTERNS_RUSSIAN = [
|
|
352
|
+
// отклонить / отказаться / запретить (reject verbs); \w does not match Cyrillic
|
|
353
|
+
/(^|\s)(отклон[а-яё]*|отказ[а-яё]*|откаж[а-яё]*|запрет[а-яё]*|запрещ[а-яё]*)/is,
|
|
354
|
+
// "только необходимые (файлы cookie)" / "принять только необходимые куки"
|
|
355
|
+
/^\s*(принять\s+|принима[а-яё]+\s+|разрешить\s+|использовать\s+|оставить\s+)?(только|лишь)\s+(строго\s+)?(необходим[а-яё]+|нужн[а-яё]+|обязательн[а-яё]+|техническ[а-яё]+|функциональн[а-яё]+)(\s+файл[а-яё]*)?([\s-]+(cookie|куки)([\s-]+файл[а-яё]*)?)?\s*$/is,
|
|
356
|
+
// refusals: "не принимаю", "не согласен", "не соглашаюсь", "нет, спасибо"
|
|
357
|
+
/^\s*(не\s+(принима[а-яё]+|соглас[а-яё]+|разреша[а-яё]+|хочу)|нет(,?\s+спасибо)?)\s*$/is
|
|
358
|
+
];
|
|
359
|
+
var REJECT_PATTERNS_TURKISH = ["reddet", "\xE7erezleri reddet"];
|
|
360
|
+
var REJECT_PATTERNS_INDONESIAN = ["tolak cookie"];
|
|
361
|
+
var REJECT_PATTERNS_JAPANESE = [
|
|
362
|
+
// e.g. "拒否", "すべて拒否", "全て拒否する", "cookieを拒否"
|
|
363
|
+
/^(すべて|全て)?\s?(の)?(cookie|クッキー)?\s?(を)?拒否(する)?$/i,
|
|
364
|
+
"\u540C\u610F\u3057\u306A\u3044",
|
|
365
|
+
"\u540C\u610F\u3057\u307E\u305B\u3093"
|
|
366
|
+
];
|
|
367
|
+
var REJECT_PATTERNS = [
|
|
368
|
+
...REJECT_PATTERNS_ENGLISH,
|
|
369
|
+
...REJECT_PATTERNS_DUTCH,
|
|
370
|
+
...REJECT_PATTERNS_FRENCH,
|
|
371
|
+
...REJECT_PATTERNS_GERMAN,
|
|
372
|
+
...REJECT_PATTERNS_ITALIAN,
|
|
373
|
+
...REJECT_PATTERNS_BRAZILIAN_PORTUGUESE,
|
|
374
|
+
...REJECT_PATTERNS_SPANISH,
|
|
375
|
+
...REJECT_PATTERNS_SWEDISH,
|
|
376
|
+
...REJECT_PATTERNS_CATALAN,
|
|
377
|
+
...REJECT_PATTERNS_GALICIAN,
|
|
378
|
+
...REJECT_PATTERNS_BASQUE,
|
|
379
|
+
...REJECT_PATTERNS_PORTUGUESE,
|
|
380
|
+
...REJECT_PATTERNS_CZECH,
|
|
381
|
+
...REJECT_PATTERNS_POLISH,
|
|
382
|
+
...REJECT_PATTERNS_RUSSIAN,
|
|
383
|
+
...REJECT_PATTERNS_TURKISH,
|
|
384
|
+
...REJECT_PATTERNS_INDONESIAN,
|
|
385
|
+
...REJECT_PATTERNS_JAPANESE
|
|
386
|
+
];
|
|
387
|
+
var BUTTON_NEVER_MATCH_PATTERNS = [
|
|
388
|
+
// text of several concatenated buttons, or popup body text rather than a button
|
|
389
|
+
/accept all.*reject all|reject all.*accept all/is,
|
|
390
|
+
/^.{300,}$/s,
|
|
391
|
+
/pay|subscribe/is,
|
|
392
|
+
/abonneer/is,
|
|
393
|
+
/abonnier/is,
|
|
394
|
+
/abonner/is,
|
|
395
|
+
/abbonati/is,
|
|
396
|
+
/iscriviti/is,
|
|
397
|
+
/abbonare/is,
|
|
398
|
+
/iscrivere/is,
|
|
399
|
+
/sostienici/is,
|
|
400
|
+
/suscribir/is,
|
|
401
|
+
// Spanish (ES)
|
|
402
|
+
/^abandonar este sitio$/,
|
|
403
|
+
/suscribo/,
|
|
404
|
+
/^accede gratis con cookies publicitarias$/,
|
|
405
|
+
/pagar/,
|
|
406
|
+
/suscríbete/,
|
|
407
|
+
/sin cookies .{0,10}euro/s,
|
|
408
|
+
// Polish (PL)
|
|
409
|
+
/subskrybuj/,
|
|
410
|
+
// Russian (RU): paywall/subscription wording, e.g. "отказаться от подписки", "оплатить"
|
|
411
|
+
/подписатьс|подписк|оплатит|оплачива/is
|
|
412
|
+
];
|
|
413
|
+
var DETECT_NEVER_MATCH_PATTERNS = [
|
|
414
|
+
// e.g. "age verification", "age confirmation", "age check", "age gate", "age restriction"
|
|
415
|
+
/age\s+(?:verification|confirmation|check|gate|restriction)/i,
|
|
416
|
+
// e.g. "over 18 years", "at least 21 years", "older than 21", "18+"
|
|
417
|
+
/(?:over|above|at\s*least|minimum|older\s+than)\s*(?:18|21)\s*(?:years|yo|y\.?o\.?|\+)?/i,
|
|
418
|
+
// e.g. "18 years of age", "18+ years old", "21 years or older"
|
|
419
|
+
/(?:18|21)\s*(?:\+|years?)\s*(?:of\s*age|or\s*older|or\s*above)/i,
|
|
420
|
+
// e.g. "I am 18+", "I am over 18", "I'm 21 or older"
|
|
421
|
+
/(?:i'?m|i\s*am)\s*(?:over|above|at\s*least)?\s*(?:18|21)(?:\+|\s*(?:or\s*older|years))?/i,
|
|
422
|
+
// e.g. "you must be 18", "users must be at least 21", "visitors must be over 18"
|
|
423
|
+
/(?:you|users?|visitors?)\s+must\s+be\s+(?:over|above|at\s*least)?\s*(?:18|21)/i,
|
|
424
|
+
// e.g. "adult oriented material", "adult content", "adult-only website"
|
|
425
|
+
/adult[\s-]+(?:oriented|only|content|material|websites?)/i
|
|
426
|
+
];
|
|
427
|
+
var SETTINGS_PATTERNS = [
|
|
428
|
+
// Multilingual "open customization" patterns: a customization verb next to a
|
|
429
|
+
// cookie/preference/settings/options/details/purposes noun (both word orders).
|
|
430
|
+
// The negative lookahead avoids policy links and save/confirm/accept phrases (those are accept/acknowledge/other).
|
|
431
|
+
/^(?!.*\b(policy|policies|notice|statement|impressum|\w*richtlinie\w*|\w*erklärung|page|beschrijving|privacy$|beleid|politique|política|polityk|speichern|guardar|opslaan|zapisz|enregistrer|sauvegarder|bevestig|bestätig|confirm|save|submit|akzeptier|accept|zaakcept)\b)(customi[sz]e|manage|adjust|configure|personali[sz]e|let me choose|edit|change|set|select|view|see|review|update|open|show|choose|anpassen|verwalten|konfigurieren|bearbeiten|öffnen|anzeigen|einblenden|einstellen|festlegen|auswählen|wählen|aanpassen|beheren|instellen|wijzig\w*|personaliseren|personaliseer|kies|bekijk|toon|personnaliser|paramétrer|gérer|configurer|choisir|afficher|définir|modifier|configurar|personalizar|gestionar|administrar|ajustar|seleccionar|modificar|establecer|dostosuj|zarządzaj|personalizuj|ustaw\w*|zmień|pokaż|wybierz)\b.{0,20}(cookies?|preferences?|settings?|options?|choices?|controls?|details?|purposes?|services?|consent|einstellung\w*|optionen|präferenzen|einzelheiten|zwecke|dienste|datenschutz\w*|auswahl|voorkeur\w*|instelling\w*|opties|diensten|préférences|paramètres|réglages|choix|détails|finalités|témoins|preferencia\w*|opciones|ajustes|configuraci\w*|detalles|servicios|elección|preferencj\w*|ustawie\w*|opcje|szczegół\w*|cele|galetes)\b/is,
|
|
432
|
+
/^(?!.*\b(policy|policies|notice|statement|impressum|\w*richtlinie\w*|\w*erklärung|page|beschrijving|privacy$|beleid|politique|política|polityk|speichern|guardar|opslaan|zapisz|enregistrer|sauvegarder|bevestig|bestätig|confirm|save|submit|akzeptier|accept|zaakcept)\b)(cookies?|preferences?|settings?|options?|choices?|controls?|details?|purposes?|services?|consent|einstellung\w*|optionen|präferenzen|einzelheiten|zwecke|dienste|datenschutz\w*|auswahl|voorkeur\w*|instelling\w*|opties|diensten|préférences|paramètres|réglages|choix|détails|finalités|témoins|preferencia\w*|opciones|ajustes|configuraci\w*|detalles|servicios|elección|preferencj\w*|ustawie\w*|opcje|szczegół\w*|cele|galetes)\b(.{0,14}\W)?(customi[sz]e|manage|adjust|configure|personali[sz]e|let me choose|edit|change|set|select|view|see|review|update|open|show|choose|anpassen|verwalten|konfigurieren|bearbeiten|öffnen|anzeigen|einblenden|einstellen|festlegen|auswählen|wählen|aanpassen|beheren|instellen|wijzig\w*|personaliseren|personaliseer|kies|bekijk|toon|personnaliser|paramétrer|gérer|configurer|choisir|afficher|définir|modifier|configurar|personalizar|gestionar|administrar|ajustar|seleccionar|modificar|establecer|dostosuj|zarządzaj|personalizuj|ustaw\w*|zmień|pokaż|wybierz)\b/is,
|
|
433
|
+
// settings noun + cookies, e.g. "paramètres des cookies", "ajustes de cookies", "instellingen voor cookies en diensten"
|
|
434
|
+
/^(paramètres|préférences|réglages|ajustes|opciones|elección|preferencias|instellingen)( (de|des|les|voor|van))? cookies( (et des|en|y) (services|diensten|servicios))?$/is,
|
|
435
|
+
"settings",
|
|
436
|
+
"preferences",
|
|
437
|
+
/customi(s|z)e/is,
|
|
438
|
+
"more options",
|
|
439
|
+
/(manage|configure) (my|your) (preferences|choices|cookies)/is,
|
|
440
|
+
/(cookie )?preference center/is,
|
|
441
|
+
"configure",
|
|
442
|
+
"cookie manager",
|
|
443
|
+
"cookie preference",
|
|
444
|
+
"let me choose",
|
|
445
|
+
"cookieconsent preferences",
|
|
446
|
+
/privacy choices/is,
|
|
447
|
+
/^(privacy|cookie|custom) settings$/is,
|
|
448
|
+
/^cookies? (settings|preferences|setting)(?!.*\bdo not\b)/is,
|
|
449
|
+
/^(?!.*\bpolic(y|ies)\b).*(manage|customize|customise|opt-out|edit).*(cookies|preferences|settings|options)/is,
|
|
450
|
+
"cookie consent options",
|
|
451
|
+
"privacy controls",
|
|
452
|
+
// German
|
|
453
|
+
"einstellungen",
|
|
454
|
+
// Spanish (ES)
|
|
455
|
+
/^(configurar|configuración|administrar)$/,
|
|
456
|
+
/^(gestionar|ver|establecer) preferencias$/,
|
|
457
|
+
"ajustes",
|
|
458
|
+
"centro de preferencias",
|
|
459
|
+
"configura",
|
|
460
|
+
/^configuración( de( las)?)? cookies?( y servicios)?$/,
|
|
461
|
+
/^configurar\.\.\.$/,
|
|
462
|
+
"configurarlas",
|
|
463
|
+
"detalles",
|
|
464
|
+
"gestiona tus preferencias",
|
|
465
|
+
/^gestionar ?(las?|mis)? ?(configuración|preferencias)?(( de)? cookies?)?$/,
|
|
466
|
+
"gesti\xF3n cookies",
|
|
467
|
+
"gesti\xF3n de cookies",
|
|
468
|
+
"mis preferencias",
|
|
469
|
+
"mostrar detalles",
|
|
470
|
+
"mostrar los prop\xF3sitos",
|
|
471
|
+
"m\xE1s opciones",
|
|
472
|
+
"no, ajustar",
|
|
473
|
+
"obtener m\xE1s informaci\xF3n y configuraci\xF3n",
|
|
474
|
+
"opciones de gesti\xF3n",
|
|
475
|
+
"panel de configuraci\xF3n de cookies",
|
|
476
|
+
"personalice",
|
|
477
|
+
"personalizar",
|
|
478
|
+
"preferencias de privacidad",
|
|
479
|
+
"preferencias",
|
|
480
|
+
"quiero configurarlas",
|
|
481
|
+
"saber m\xE1s y personalizar",
|
|
482
|
+
"seleccionar fines individuales",
|
|
483
|
+
// Catalan (CA)
|
|
484
|
+
"configura-les",
|
|
485
|
+
"personalitza",
|
|
486
|
+
"veure prefer\xE8ncies",
|
|
487
|
+
// Galician (GL)
|
|
488
|
+
"xestionar preferencias",
|
|
489
|
+
// Basque (EU)
|
|
490
|
+
/^(konfigurazioa|konfiguratu)$/,
|
|
491
|
+
// Portuguese (PT)
|
|
492
|
+
"gerenciar cookies",
|
|
493
|
+
// French (FR)
|
|
494
|
+
"param\xE9trage des cookies",
|
|
495
|
+
"param\xE9trer",
|
|
496
|
+
"personnaliser",
|
|
497
|
+
"param\xE8tres",
|
|
498
|
+
"pr\xE9f\xE9rences",
|
|
499
|
+
"r\xE9glages",
|
|
500
|
+
"d\xE9tails",
|
|
501
|
+
"gestion des cookies",
|
|
502
|
+
/^gérer (les |mes )?cookies$/,
|
|
503
|
+
"je choisis",
|
|
504
|
+
"voir les pr\xE9f\xE9rences",
|
|
505
|
+
// German (DE)
|
|
506
|
+
"abschnitt einzelheiten",
|
|
507
|
+
"cookie-details",
|
|
508
|
+
/^datenschutz-?einstellungen$/,
|
|
509
|
+
"cookie-einstellungen",
|
|
510
|
+
/^einstell(ungen|en) oder ablehnen$/,
|
|
511
|
+
"ausw\xE4hlen",
|
|
512
|
+
/^einstellungen (anpassen|ansehen|verwalten|ändern)$/,
|
|
513
|
+
"erweiterte einstellungen",
|
|
514
|
+
"individuelle datenschutz-pr\xE4ferenzen",
|
|
515
|
+
"individuelle datenschutzeinstellungen",
|
|
516
|
+
"konfigurieren",
|
|
517
|
+
"mehr optionen",
|
|
518
|
+
"pr\xE4ferenzen",
|
|
519
|
+
"individuelle einstellungen",
|
|
520
|
+
"privatsph\xE4re einstellungen",
|
|
521
|
+
// Dutch (NL)
|
|
522
|
+
/^(aan|an)passen$/,
|
|
523
|
+
/^cookie[- ]instellingen$/,
|
|
524
|
+
"cookiestatement instellingen",
|
|
525
|
+
/^details (tonen|weergeven)$/,
|
|
526
|
+
"instellingen",
|
|
527
|
+
"meer opties",
|
|
528
|
+
"zelf instellen",
|
|
529
|
+
// Czech (CS)
|
|
530
|
+
"podrobn\xE9 nastaven\xED",
|
|
531
|
+
// Polish (PL)
|
|
532
|
+
// examples:
|
|
533
|
+
// dostosuj pliki cookie (adjust cookies)
|
|
534
|
+
// zarządzaj plikami cookie (manage cookies)
|
|
535
|
+
/^(dostosuj|s?personalizuj|chcę dostosować|zarządzaj) ?(moje|moimi)? ?(ustawieniami|preferencjami)? ?(zgody|wybory|(plik(i|ami|ów))? cookies?)?$/,
|
|
536
|
+
/^(preferencje|zarządzaj preferencjami)$/,
|
|
537
|
+
/^(ustawienia|zmień ustawienia|zmiana ustawień|zarządzaj opcjami)$/,
|
|
538
|
+
"centrum preferencji",
|
|
539
|
+
/^chcę dokonać ustawień cookies\.$/,
|
|
540
|
+
"dostosuj wyb\xF3r",
|
|
541
|
+
"edytuj ustawienia",
|
|
542
|
+
"konfiguracja zg\xF3d",
|
|
543
|
+
"otw\xF3rz ustawienia",
|
|
544
|
+
"personalizacja",
|
|
545
|
+
"poka\u017C cele",
|
|
546
|
+
"poka\u017C szczeg\xF3\u0142y",
|
|
547
|
+
"szczeg\xF3\u0142y",
|
|
548
|
+
"pozw\xF3l mi wybra\u0107",
|
|
549
|
+
/^przejdź do ustawień plików cookies\.$/,
|
|
550
|
+
"przejd\u017A do ustawie\u0144 prywatno\u015Bci",
|
|
551
|
+
"przejd\u017A do ustawie\u0144",
|
|
552
|
+
"skonfiguruj",
|
|
553
|
+
"ustaw swoje wybory",
|
|
554
|
+
"ustawienia ciasteczek",
|
|
555
|
+
"ustawienia prywatno\u015Bci",
|
|
556
|
+
"ustawienia zaawansowane",
|
|
557
|
+
"ustawienia zgody",
|
|
558
|
+
/^ustawienia(ch)?( plików)? cookies?$/,
|
|
559
|
+
"ustawieniach",
|
|
560
|
+
"ustawie\u0144 zaawansowanych",
|
|
561
|
+
"wi\u0119cej opcji",
|
|
562
|
+
"wi\u0119cej ustawie\u0144",
|
|
563
|
+
/^wybierz, jakie pliki cookies chcesz zaakceptować\.$/,
|
|
564
|
+
"zaawansowane",
|
|
565
|
+
"zarz\u0105dzaj zgodami dotycz\u0105cymi plik\xF3w cookies",
|
|
566
|
+
"zarz\u0105dzaj zgodami",
|
|
567
|
+
"zarz\u0105dzania zgodami",
|
|
568
|
+
"zarz\u0105dzanie opcjami",
|
|
569
|
+
"zarz\u0105dzanie preferencjami",
|
|
570
|
+
"zarz\u0105dzanie ustawieniami plik\xF3w cookie",
|
|
571
|
+
"zmieniam ustawienia",
|
|
572
|
+
"zmieniam zgody",
|
|
573
|
+
"zmie\u0144 swoje preferencje",
|
|
574
|
+
/^zmień ustawienia( plików)? cookies?$/,
|
|
575
|
+
"zmie\u0144 zgody",
|
|
576
|
+
"zobacz preferencje",
|
|
577
|
+
// Russian (RU)
|
|
578
|
+
// e.g. "настроить", "настройки куки", "параметры конфиденциальности"; \w does not match Cyrillic
|
|
579
|
+
/^\s*((мои|моими|свои|своими)\s+)?(настро[а-яё]+|парамет[а-яё]+|предпочтени[а-яё]+)([\s-]+(мои|моими|свои|своими|файл[а-яё]*|cookie|куки[а-яё]*|конфиденциальност[а-яё]*|согласи[а-яё]*|приватност[а-яё]*))*\s*$/is,
|
|
580
|
+
// e.g. "управление файлами cookie", "изменить настройки", "выбрать категории"
|
|
581
|
+
// "подробн" is deliberately excluded: it would also match the "подробнее о cookie" policy link
|
|
582
|
+
/^\s*(управл[а-яё]+|измен[а-яё]+|выбрать|персонализ[а-яё]+|расширенн[а-яё]+|индивидуальн[а-яё]+)[\s-]+.{0,20}(настройк[а-яё]*|парамет[а-яё]*|предпочтени[а-яё]*|категори[а-яё]*|файл[а-яё]*|cookie|куки[а-яё]*|согласи[а-яё]*|конфиденциальност[а-яё]*)\s*$/is,
|
|
583
|
+
"\u043F\u043E\u0434\u0440\u043E\u0431\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438",
|
|
584
|
+
// Italian (IT)
|
|
585
|
+
"personalizza cookie",
|
|
586
|
+
// English (EN)
|
|
587
|
+
"advanced settings",
|
|
588
|
+
"consent settings",
|
|
589
|
+
/^details (anzeigen|zeigen|section)$/,
|
|
590
|
+
"no, adjust",
|
|
591
|
+
"personalize",
|
|
592
|
+
"plus doptions",
|
|
593
|
+
"privacy manager"
|
|
594
|
+
];
|
|
595
|
+
var ACCEPT_PATTERNS = [
|
|
596
|
+
// EN accept/agree/allow/consent/enable (+ all/cookies/selection/continue/close/proceed...).
|
|
597
|
+
// The negative lookahead avoids essential-only/reject wording (those are reject).
|
|
598
|
+
/^(?!.*\b(essential|necessary|required|functional|minimal|reject|deny|refuse|decline|only|dismiss)\b)(?!.*all cookies continue)(yes,?\s+)?(i\s+)?(accept|agree|allow|consent|enable)(\s+(to\s+)?(all( cookies)?|cookies|selection|selected( cookies)?|everything|recommended( cookies| settings)?|optional( cookies)?|additional cookies|analytics cookies))?(\s+(and\s+)?(continue|close|proceed|save))?\s*$/is,
|
|
599
|
+
/^continue (and accept|using cookies|with (all|recommended cookies|cookies))$/is,
|
|
600
|
+
// DE accept verbs
|
|
601
|
+
/^(alle[sn]?\s+|allem\s+|ich\s+|cookies\s+|ausgewählte\s+|webanalyse\s+)?(cookies?\s+)?(akzeptieren|annehmen|zustimmen|zulassen|erlauben|einwilligen|aktivieren|auswählen)(\s+(und\s+)?(weiter|schlie(ß|ss)en))?\s*$/is,
|
|
602
|
+
/^((meine\s+)?auswahl|alle)\s+(bestätigen|akzeptieren|auswählen)$/is,
|
|
603
|
+
/^(alle[nm]?\s+)?(zustimmen|einverstanden|einwilligung|zustimmung)$/is,
|
|
604
|
+
/^ich (bin einverstanden|akzeptiere( alle)?|stimme zu)$/is,
|
|
605
|
+
// NL accept verbs
|
|
606
|
+
/^(ja,?\s+)?(alle[s]?\s+|ik\s+)?(cookies?\s+)?(accepteer|accepteren|toestaan|aanvaard|aanvaarden|ga akkoord|akkoord)(\s+((en\s+)?sluiten|en\s+(doorgaan|verdergaan)|cookies|alle))?\s*$/is,
|
|
607
|
+
/^(selectie (accepteren|toestaan)|accepteer (selectie|alle)|alle (toestaan|accepteren|aanvaarden)|ja, (dat is prima|prima|alles toestaan|accepteren|ik accepteer cookies|ik ga akkoord)|is goed)$/is,
|
|
608
|
+
// FR accept verbs
|
|
609
|
+
/^(oui,?\s+)?(je\s+)?(tout\s+)?(accepter|jaccepte|autoriser)(\s+(tout|tous les (cookies|témoins)|les (cookies|témoins)|la sélection|et (continuer|fermer|poursuivre)))?\s*$/is,
|
|
610
|
+
/^(oui, (jaccepte|je suis daccord)|jaccepte (les cookies|lutilisation de cookies)|accepter (continuer|et poursuivre)|continuer et accepter|fermer et accepter)$/is,
|
|
611
|
+
// ES/CA accept verbs
|
|
612
|
+
/^(sí,?\s+|si,?\s+)?(aceptar|acepta|permitir|permitirlas|consentir|estoy de acuerdo|de acuerdo|estic dacord)(\s+(todo|todas( las cookies)?|cookies|la selección|selección|y (cerrar|continuar|seguir( leyendo)?|leer gratis)))?\s*$/is,
|
|
613
|
+
// save / submit selection / preferences (accept semantics; acknowledge catches "guardar configuración/selección" first)
|
|
614
|
+
/^(save|store|submit|guardar|sauvegarder|zapisz|opslaan|bewaar)\b.{0,25}(preference|setting|selection|choice|mes choix|cookie|voorkeur|keuze|ustawien|zgod)/is,
|
|
615
|
+
/^((meine\s+)?auswahl|einstellungen|einwilligung|voorkeuren|instellingen|selectie|keuzes)\s+(speichern|opslaan)$/is,
|
|
616
|
+
/i (accept|allow)( all)?/is,
|
|
617
|
+
"yes",
|
|
618
|
+
/accept all above/is,
|
|
619
|
+
"close and accept",
|
|
620
|
+
/(^|\s)accept all$/is,
|
|
621
|
+
"im ok with that",
|
|
622
|
+
// Spanish (ES)
|
|
623
|
+
/^acept(ar|o)( cookies)?$/,
|
|
624
|
+
/^acept(o|ar) todas las cookies$/,
|
|
625
|
+
"aceptar cookies opcionales",
|
|
626
|
+
"aceptar gratis",
|
|
627
|
+
"aceptar las cookies",
|
|
628
|
+
"aceptar todas cookies",
|
|
629
|
+
"aceptar todas y cerrar",
|
|
630
|
+
"aceptar todas y continuar",
|
|
631
|
+
"aceptar todo y cerrar",
|
|
632
|
+
/^aceptar y (continuar|seguir|navegar)( gratis)?$/,
|
|
633
|
+
"aceptar y seguir navegando",
|
|
634
|
+
"aceptarlas todas",
|
|
635
|
+
"guardar preferencias",
|
|
636
|
+
"ok, las acepto",
|
|
637
|
+
/^s[íi], acepto todas las cookies$/,
|
|
638
|
+
/^s[íi], acepto$/,
|
|
639
|
+
/^s[íi], estoy de acuerdo$/,
|
|
640
|
+
"x aceptar y cerrar",
|
|
641
|
+
// Catalan (CA)
|
|
642
|
+
/^accept(ar|o)( cookies)?$/,
|
|
643
|
+
"accepta",
|
|
644
|
+
"accepta totes les cookies",
|
|
645
|
+
"accepta-ho tot",
|
|
646
|
+
// FR/CA "d'accord" / "d'acord"
|
|
647
|
+
/^dac?cord( fermer)?$/is,
|
|
648
|
+
"accepta-les totes",
|
|
649
|
+
"acceptar galetes",
|
|
650
|
+
"acceptar i tancar",
|
|
651
|
+
"acceptar tot",
|
|
652
|
+
"acepta-les totes",
|
|
653
|
+
"permet-les totes",
|
|
654
|
+
"permetre totes les cookies",
|
|
655
|
+
"permetre la selecci\xF3",
|
|
656
|
+
// Basque (EU)
|
|
657
|
+
/^denak? onartu$/,
|
|
658
|
+
/^onartu \(cookie\)$/,
|
|
659
|
+
"onartu cookieak",
|
|
660
|
+
"onartu",
|
|
661
|
+
// Portuguese (PT)
|
|
662
|
+
"aceitar cookies",
|
|
663
|
+
"aceitar",
|
|
664
|
+
"de acordo",
|
|
665
|
+
// French (FR)
|
|
666
|
+
/^accepter (tout|tous les cookies|fermer)$/,
|
|
667
|
+
// German (DE)
|
|
668
|
+
/^(alles akzeptieren|alle zulassen|auswahl erlauben|cookies zulassen|einverstanden|einwilligung|zustimmen|zustimmung)$/,
|
|
669
|
+
// Dutch (NL)
|
|
670
|
+
/^(accepteer (alles|alle cookies)|alles (accepteren|toestaan)|alle cookies (accepteren|toestaan))$/,
|
|
671
|
+
// Czech (CS)
|
|
672
|
+
"souhlas\xEDm",
|
|
673
|
+
// Polish (PL)
|
|
674
|
+
// examples:
|
|
675
|
+
// akceptuj cookies (Accept cookies)
|
|
676
|
+
// akceptuj wszystkie pliki cookie (Accept all cookies)
|
|
677
|
+
/^(zaakceptuj|akceptuj[eę]|akceptuj) ?(wszystkie|wszystko)?( pliki)? ?(zgody|ciasteczka|cookies?)?$/,
|
|
678
|
+
"akceptowanie plik\xF3w cookie",
|
|
679
|
+
"akceptuj wybrane",
|
|
680
|
+
"akceptuj i zamknij",
|
|
681
|
+
"akceptuj wszystkie i przejd\u017A do serwisu",
|
|
682
|
+
"akceptuj\u0119 i przechodz\u0119 do serwisu",
|
|
683
|
+
"akceptuj\u0119 polityk\u0119 plik\xF3w cookies i przechodz\u0119 do strony",
|
|
684
|
+
"akceptuj\u0119 ustawienia cookies",
|
|
685
|
+
"akceptuj\u0119 wszystkie i korzystam z us\u0142ug",
|
|
686
|
+
"akceptuj\u0119!",
|
|
687
|
+
"ok, zgadzam si\u0119",
|
|
688
|
+
"potwierdzam wszystkie",
|
|
689
|
+
"tak",
|
|
690
|
+
"tak, zgadzam si\u0119 na wszystkie pliki cookie",
|
|
691
|
+
"tak, zgadzam si\u0119",
|
|
692
|
+
"wyra\u017A zgod\u0119 na wszystko",
|
|
693
|
+
"wyra\u017Cam zgod\u0119 na wszystkie",
|
|
694
|
+
"wyra\u017Cam zgod\u0119",
|
|
695
|
+
"w\u0142\u0105cz wszystkie ciasteczka",
|
|
696
|
+
"zaakceptuj i kontynuuj",
|
|
697
|
+
"zaakceptuj i zamknij",
|
|
698
|
+
"zaakceptuj wszystkie i przejd\u017A do serwisu",
|
|
699
|
+
"zaakceptuj wszystkie zgody i wejd\u017A do serwisu",
|
|
700
|
+
"zaakceptuj wszystkie zgody i zapisz",
|
|
701
|
+
"zatwierd\u017A",
|
|
702
|
+
"zezwolenie na wszystkie",
|
|
703
|
+
"zezw\xF3l na wszystkie ciasteczka",
|
|
704
|
+
"zezw\xF3l na wszystkie cookies",
|
|
705
|
+
"zezw\xF3l na wszystkie pliki cookies",
|
|
706
|
+
"zezw\xF3l na wszystkie",
|
|
707
|
+
"zezw\xF3l na wyb\xF3r",
|
|
708
|
+
"zezw\xF3l",
|
|
709
|
+
"zgadzam si\u0119 na wszystkie",
|
|
710
|
+
"zgadzam si\u0119",
|
|
711
|
+
"zgoda na wszystkie",
|
|
712
|
+
"zgoda",
|
|
713
|
+
"zaakceptuj wybrane",
|
|
714
|
+
"zezw\xF3l na wybrane",
|
|
715
|
+
"zgoda na wybrane",
|
|
716
|
+
// Russian (RU)
|
|
717
|
+
// e.g. "принять всё", "принять все файлы cookie", "разрешить куки", "я согласен"
|
|
718
|
+
// confirm/save wording (подтвердить, сохранить) is acknowledge, not accept
|
|
719
|
+
/^\s*(да,?\s+)?(я\s+)?(принять|принима[а-яё]+|соглас[а-яё]+|разрешить|разреша[а-яё]+)(\s+(вс[её]|(все\s+)?(файлы[\s-]+)?(cookie|куки)([\s-]+файл[а-яё]*)?|выбранные|выбор))?\s*$/is,
|
|
720
|
+
"\u043F\u0440\u0438\u043D\u044F\u0442\u044C",
|
|
721
|
+
// Turkish (TR)
|
|
722
|
+
"kabul et",
|
|
723
|
+
// Italian (IT)
|
|
724
|
+
"accetta",
|
|
725
|
+
"accetta tutti i cookie"
|
|
726
|
+
];
|
|
727
|
+
var ACKNOWLEDGE_PATTERNS = [
|
|
728
|
+
// close / dismiss the banner/dialog/message (multilingual). The negative lookahead avoids
|
|
729
|
+
// accept/save phrases (e.g. "agree and close", "akkoord en sluiten", "speichern schließen").
|
|
730
|
+
/^(?!.*\b(accept\w*|accepter|accepteer|accepteren|agree|allow|akkoord|aanvaard\w*|zustimm\w*|annehm\w*|akzeptier\w*|aceptar|acepta|permit\w*|consent\w*|einverstanden|zezw\w*|zgadzam|zgoda|guardar|opslaan|enregistrer|speicher\w*|zapisz)\b)(x\s+|nee,?\s+)?(close|dismiss|schlie(ß|ss)en|sluiten|afsluiten|fermer|cerrar|tanca|beenden|masquer|zamknij)( (this|the|ce|le|el|de|des|het|la|een)?\s*(banner|bandeau|banier|bar|dialog|dialogue|window|okno|melding|message|notification|informa\w*|notificaci\w*|cookie\w*|bannière|rgpd|gdpr|hier|des cookies|de cookies|x))*\.?\s*$/is,
|
|
731
|
+
// "ok" / "okay" / "oké" (optionally followed by a short acknowledgement)
|
|
732
|
+
/^(ok|okay|oké|okey|k)([ .!,]*)(got it|verstanden|compris|rozumiem|thanks|gracias|ik begrijp( dat| het)?|continue to website|pour moi|fermer)?[ .!]*$/is,
|
|
733
|
+
// "understood" / "got it" / "that's ok" (multilingual)
|
|
734
|
+
/^(i understand|understood|got it|thats (ok|fine|okay)|alright|alles klar|in ordnung|verstanden|begrepen|jai compris|je comprends|compris|ik begrijp het|ik snap het|entendido|c(e)?st ok pour moi)[ !.,]*(merci|bedankt|dismiss this banner)?[ !.]*$/is,
|
|
735
|
+
// confirm
|
|
736
|
+
/^(confirm|bestätigen|bevestigen|confirmar|potwierdź)[ !.]*$/is,
|
|
737
|
+
// neutral "continue" without accept/reject wording
|
|
738
|
+
/^(continuer|doorgaan|ga verder)$/is,
|
|
739
|
+
"continue",
|
|
740
|
+
"x",
|
|
741
|
+
/^got it!?$/,
|
|
742
|
+
"acknowledge",
|
|
743
|
+
/^close (banner|cookie notification)$/is,
|
|
744
|
+
/understood$/is,
|
|
745
|
+
"confirm my choices",
|
|
746
|
+
// German (DE)
|
|
747
|
+
"speichern schlie\xDFen",
|
|
748
|
+
// Spanish (ES)
|
|
749
|
+
/^.?( lo)?(entendido|entiendo).?$/s,
|
|
750
|
+
"aceptar seleccionadas",
|
|
751
|
+
"continuar",
|
|
752
|
+
"guardar configuraci\xF3n",
|
|
753
|
+
"guardar selecci\xF3n",
|
|
754
|
+
"guardar y cerrar",
|
|
755
|
+
"ir al contenido principal",
|
|
756
|
+
"seguir",
|
|
757
|
+
"vale",
|
|
758
|
+
"\xA1vamos!",
|
|
759
|
+
// Polish (PL)
|
|
760
|
+
"kontynuuj",
|
|
761
|
+
"ok, zrozumia\u0142em",
|
|
762
|
+
/^ok.? rozumiem.?$/s,
|
|
763
|
+
"rozumiem!",
|
|
764
|
+
"rozumiem",
|
|
765
|
+
"rozumiem, nie pokazuj wi\u0119cej",
|
|
766
|
+
"w porz\u0105dku!",
|
|
767
|
+
"w porz\u0105dku",
|
|
768
|
+
/^zamknij informację o( plikach)? cookies$/,
|
|
769
|
+
"zapisz i zamknij",
|
|
770
|
+
// Russian (RU)
|
|
771
|
+
// e.g. "понятно", "всё понятно", "хорошо", "ясно"; \w does not match Cyrillic
|
|
772
|
+
/^\s*(хорошо|ясно|(вс[её]\s+)?(понятно|понял[аи]?))[!.]*\s*$/is,
|
|
773
|
+
// e.g. "закрыть", "закрыть уведомление о cookie"
|
|
774
|
+
/^\s*закрыть([\s-]+(это|эту|баннер|уведомлени[а-яё]*|окно|сообщени[а-яё]*|плашк[а-яё]*|информаци[а-яё]*)){0,2}([\s-]+(о|об)[\s-]+(cookie|куки[а-яё]*|файл[а-яё]*[\s-]+cookie))?\s*$/is,
|
|
775
|
+
// e.g. "больше не показывать", "не показывать снова"
|
|
776
|
+
/^\s*(больше\s+не\s+показывать|не\s+показывать(\s+(снова|больше|это\s+сообщение))?)\s*$/is,
|
|
777
|
+
// e.g. "подтвердить", "подтверждаю выбор", "сохранить настройки", "сохранить и закрыть"
|
|
778
|
+
/^\s*(подтвер(дить|ждаю|ждени[а-яё]*)|сохран(ить|яю|ение))([\s-]+(мой|мои|моё|свой|свои|своё)?[\s-]*(выбор[а-яё]*|настройк[а-яё]*|парамет[а-яё]*|предпочтени[а-яё]*|согласи[а-яё]*))?([\s-]+и[\s-]+(закрыть|продолжить))?\s*$/is,
|
|
779
|
+
"\u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C"
|
|
780
|
+
];
|
|
781
|
+
|
|
782
|
+
// lib/heuristic-classify.ts
|
|
783
|
+
var TEXT_LIMIT = 1e5;
|
|
784
|
+
function checkHeuristicPatterns(allText, detectPatterns = DETECT_PATTERNS) {
|
|
785
|
+
allText = allText.slice(0, TEXT_LIMIT);
|
|
786
|
+
const patterns = [];
|
|
787
|
+
const snippets = [];
|
|
788
|
+
for (const p of detectPatterns) {
|
|
789
|
+
const matches = allText?.match(p);
|
|
790
|
+
if (matches) {
|
|
791
|
+
patterns.push(p.toString());
|
|
792
|
+
for (const m of matches) {
|
|
793
|
+
if (typeof m === "string") {
|
|
794
|
+
snippets.push(m.substring(0, 200));
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
return { patterns, snippets };
|
|
800
|
+
}
|
|
801
|
+
function classifyButtons(buttons) {
|
|
802
|
+
for (const button of buttons) {
|
|
803
|
+
button.regexClassification = classifyButtonTextRegex(button.text);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
function isExcludedPopup(popupText, excludePatterns = DETECT_NEVER_MATCH_PATTERNS) {
|
|
807
|
+
if (!popupText) {
|
|
808
|
+
return false;
|
|
809
|
+
}
|
|
810
|
+
const truncated = popupText.slice(0, TEXT_LIMIT);
|
|
811
|
+
return excludePatterns.some((p) => p.test(truncated));
|
|
812
|
+
}
|
|
813
|
+
function classifyPopup(buttons) {
|
|
814
|
+
const { reject, settings, accept, acknowledge } = buttons.reduce(
|
|
815
|
+
(acc, button) => {
|
|
816
|
+
if (button.regexClassification && button.regexClassification !== "other") {
|
|
817
|
+
acc[button.regexClassification]++;
|
|
818
|
+
}
|
|
819
|
+
return acc;
|
|
820
|
+
},
|
|
821
|
+
{ reject: 0, settings: 0, accept: 0, acknowledge: 0 }
|
|
822
|
+
);
|
|
823
|
+
if (reject > 0) {
|
|
824
|
+
return "reject";
|
|
825
|
+
}
|
|
826
|
+
if (settings > 0) {
|
|
827
|
+
return "none";
|
|
828
|
+
}
|
|
829
|
+
if (acknowledge > 0) {
|
|
830
|
+
return "tier1";
|
|
831
|
+
}
|
|
832
|
+
if (accept > 0) {
|
|
833
|
+
return accept === 1 ? "tier2" : "none";
|
|
834
|
+
}
|
|
835
|
+
return "none";
|
|
836
|
+
}
|
|
837
|
+
function testButtonMatches(buttonText, matchPatterns, neverMatchPatterns) {
|
|
838
|
+
if (!buttonText) {
|
|
839
|
+
return false;
|
|
840
|
+
}
|
|
841
|
+
const cleanedButtonText = cleanButtonText(buttonText);
|
|
842
|
+
return !neverMatchPatterns.some((p) => p instanceof RegExp && p.test(cleanedButtonText) || p === cleanedButtonText) && matchPatterns.some((p) => p instanceof RegExp && p.test(cleanedButtonText) || p === cleanedButtonText);
|
|
843
|
+
}
|
|
844
|
+
function cleanButtonText(buttonText) {
|
|
845
|
+
let result = buttonText.toLowerCase();
|
|
846
|
+
result = result.replace(/[“”"'/#&[\]→✕×⟩❯><✗ב’›«»]+/g, "");
|
|
847
|
+
result = result.replace(
|
|
848
|
+
/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F1E0}-\u{1F1FF}\u2600-\u26FF\u2700-\u27BF\u{1F900}-\u{1F9FF}\u{1FA70}-\u{1FAFF}]/gu,
|
|
849
|
+
""
|
|
850
|
+
);
|
|
851
|
+
result = result.replace(/\n+/g, " ");
|
|
852
|
+
result = result.replace(/\s+/g, " ");
|
|
853
|
+
result = result.trim();
|
|
854
|
+
return result;
|
|
855
|
+
}
|
|
856
|
+
function classifyButtonTextRegex(buttonText) {
|
|
857
|
+
if (testButtonMatches(buttonText, REJECT_PATTERNS, BUTTON_NEVER_MATCH_PATTERNS)) {
|
|
858
|
+
return "reject";
|
|
859
|
+
}
|
|
860
|
+
if (testButtonMatches(buttonText, SETTINGS_PATTERNS, BUTTON_NEVER_MATCH_PATTERNS)) {
|
|
861
|
+
return "settings";
|
|
862
|
+
}
|
|
863
|
+
if (testButtonMatches(buttonText, ACCEPT_PATTERNS, BUTTON_NEVER_MATCH_PATTERNS)) {
|
|
864
|
+
return "accept";
|
|
865
|
+
}
|
|
866
|
+
if (testButtonMatches(buttonText, ACKNOWLEDGE_PATTERNS, BUTTON_NEVER_MATCH_PATTERNS)) {
|
|
867
|
+
return "acknowledge";
|
|
868
|
+
}
|
|
869
|
+
return "other";
|
|
870
|
+
}
|
|
871
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
872
|
+
0 && (module.exports = {
|
|
873
|
+
ACCEPT_PATTERNS,
|
|
874
|
+
ACKNOWLEDGE_PATTERNS,
|
|
875
|
+
BUTTON_NEVER_MATCH_PATTERNS,
|
|
876
|
+
DETECT_NEVER_MATCH_PATTERNS,
|
|
877
|
+
DETECT_PATTERNS,
|
|
878
|
+
REJECT_PATTERNS,
|
|
879
|
+
SETTINGS_PATTERNS,
|
|
880
|
+
checkHeuristicPatterns,
|
|
881
|
+
classifyButtonTextRegex,
|
|
882
|
+
classifyButtons,
|
|
883
|
+
classifyPopup,
|
|
884
|
+
cleanButtonText,
|
|
885
|
+
isExcludedPopup
|
|
886
|
+
});
|