
ब्राउज़र एक्सटेंशन जो आपकी प्राथमिकताओं के आधार पर कुकी पॉपअप को स्वचालित रूप से भरता है
आजकल अधिकांश वेबसाइटें आपके डेटा को संसाधित करना चाहती हैं और कुकी बैनर का उपयोग करके सहमति माँगती हैं। हालाँकि ये बैनर आपको नियंत्रण देने के लिए होते हैं, व्यवहार में ये अक्सर दोहराए जाने वाले और समय लेने वाले क्लिक का कारण बनते हैं—खासकर यदि आपका ब्राउज़र बंद करने पर कुकीज़ साफ़ कर देता है। वही बैनर फिर से प्रकट होता है, और आप बार-बार वही विकल्प चुनते रहते हैं।
Consent-O-Matic एक ब्राउज़र एक्सटेंशन है जिसे इस समस्या को हल करने के लिए डिज़ाइन किया गया है। आरहूस विश्वविद्यालय के सेंटर फॉर एडवांस्ड विज़ुअलाइज़ेशन एंड इंटरेक्शन (CAVI) द्वारा विकसित, यह उपकरण आपकी ओर से स्वचालित रूप से सहमति बैनर को संभालता है। इंस्टॉलेशन के दौरान अपनी प्राथमिकताएँ निर्धारित करने के बाद, Consent-O-Matic कई सामान्य सहमति प्रबंधन प्लेटफ़ॉर्म (CMP) बैनर को पहचानेगा, आपकी पसंद लागू करेगा, और एक्सटेंशन आइकन के पास एक छोटे चेकमार्क के साथ पुष्टि करेगा।
क्योंकि Consent-O-Matic एक ओपन-सोर्स प्रोजेक्ट है, कोई भी नए नियम जोड़कर, पुराने नियमों को अपडेट करके, या दस्तावेज़ीकरण को अपडेट करके इसके सुधार में योगदान दे सकता है। यह सहयोगात्मक दृष्टिकोण सुनिश्चित करता है कि एक्सटेंशन ऑनलाइन सहमति बैनर के लगातार बदलते परिदृश्य के साथ गति बनाए रखे—और सभी के लिए कम परेशानी के साथ अपने डेटा की सुरक्षा करना आसान बनाता है।
Consent-O-Matic वर्तमान में 200 से अधिक CMP के साथ काम करता है (पूरी सूची यहाँ देखें), जिसमें UserCentrics, CookieBot, OneTrust जैसे प्रमुख प्लेटफ़ॉर्म, साथ ही विशिष्ट वेबसाइटों के कुकी बैनर शामिल हैं।
Consent-O-Matic इंस्टॉल होने पर ब्राउज़र में निम्नलिखित अनुमतियों का उपयोग करता है:
एक्सटेंशन केवल दो स्थितियों में वेब के साथ संचार करता है:
एक्सटेंशन आइकन के माध्यम से रिपोर्ट की गई वेबसाइट का URL भेजा जाता है आरहूस विश्वविद्यालय द्वारा होस्ट की गई वेबसाइट पर URI-एन्कोडेड क्वेरी स्ट्रिंग के रूप में (उदाहरण के लिए, LinkedIn को https://gdprconsent.projects.cavi.au.dk/report.php?url=www.linkedin.com के रूप में रिपोर्ट किया जाएगा)।
हम दृढ़ता से आपके ब्राउज़र के आधिकारिक एक्सटेंशन स्टोर (शीर्ष पर उल्लिखित) के माध्यम से सीधे इंस्टॉल करने की अनुशंसा करते हैं। आधिकारिक चैनलों के माध्यम से इंस्टॉल करना स्वचालित रूप से आपको नए संस्करण जारी होने पर अपडेट रखेगा।
एक्सटेंशन को अन्य माध्यमों से प्राप्त करना भी संभव है।
एक्सटेंशन स्टोर के विकल्प के रूप में, आप Github पर Releases पृष्ठ से प्रकाशित संस्करणों में से किसी एक को मैन्युअल रूप से डाउनलोड और निकाल सकते हैं।
यदि आप ऐसा करते हैं, तो आपको Load Unpacked (Chrome) या Load Temporary Addon (Firefox) की डेवलपर सुविधा का उपयोग करना होगा और इसे अनज़िप की गई zip-निर्देशिका में manifest.json पर इंगित करना होगा।
अंत में, यदि आप कोड की समीक्षा या उसमें बदलाव करने का इरादा रखते हैं, तो आप सीधे स्रोत कोड से निर्माण और इंस्टॉल कर सकते हैं:``` git clone https://github.com/cavi-au/Consent-O-Matic.git cd Consent-O-Matic npm install
और फिर इनमें से एक को चलाएँ: `npm run build-firefox` या `npm run build-chromium` या `npm run build-safari`
Firefox या Chromium के लिए, अब आप रिलीज़ आर्काइव स्थापित करने के लिए ऊपर बताए अनुसार आगे बढ़ सकते हैं, लेकिन ब्राउज़र को `build` फ़ोल्डर या उस फ़ोल्डर की ओर इंगित करें जहाँ आपने build/dist/ से ज़िप निकाला है। Safari के लिए एक ऐप बनाने के लिए XCode प्रोजेक्ट को लोड करना आवश्यक है।
हम स्रोत से स्थापित करने की अनुशंसा नहीं करते हैं।
## Consent-O-Matic का विस्तार करना
यदि आपका पसंदीदा CMP वर्तमान सूची से गायब है, तो बेझिझक एक कस्टम सूची बनाएँ जिसे आप जोड़ सकते हैं (अपने ब्राउज़र में एक्सटेंशन आइकन पर क्लिक करें, "More add-on settings" पर क्लिक करें, "Rule lists" पर क्लिक करें, और अपनी कस्टम सूची का URL दर्ज करें।) यदि आप **वास्तव में** योगदान देना चाहते हैं, तो बेझिझक इस दौरान एक Pull Request बनाएँ।
उपयोगकर्ता तब रिपोर्ट भेज सकते हैं जब विशिष्ट वेबसाइटों के नियम काम नहीं कर रहे हों। रिपोर्ट किए गए URL की पूरी सूची [यहाँ](https://gdprconsent.projects.cavi.au.dk/reports.php) उपलब्ध है। संख्या यह दर्शाती है कि URL कितनी बार रिपोर्ट किया गया था। यह सूची वर्तमान में यह नहीं दिखाती है कि किसी URL के नियमों की जाँच/समायोजन कब किया गया है, इसलिए हमेशा सत्यापित करें कि क्या नियम अभी भी टूटा/गायब है, इससे पहले कि आप उस पर काम करना शुरू करें।
### नियम तत्व
* [मूल संरचना](#basic-structure)
* [डिटेक्टर](#detectors)
* [विधियाँ](#methods)
* [DOM चयन](#dom-selection)
* [कार्रवाइयाँ](#actions)
* [क्लिक करें](#click)
* [सूची](#list)
* [सहमति](#consent)
* [स्लाइड](#slide)
* [यदि CSS](#if-css)
* [CSS की प्रतीक्षा करें](#wait-for-css)
* [प्रत्येक के लिए](#for-each)
* [प्रतीक्षा करें](#wait)
* [छिपाएँ](#hide)
* [बंद करें](#close)
* [मिलानकर्ता](#matchers)
* [CSS](#css)
* [चेकबॉक्स](#checkbox)
* [सहमति](#consent-1)
* [सहमति श्रेणियाँ](#consent-categories)
* [पूर्ण उदाहरण](#full-example)
### मूल संरचना
Consent-O-Matic के लिए एक नियम सूची एक JSON संरचना है जिसमें CMP (Consent Management Provider) का पता लगाने के नियम और उसके पॉपअप से निपटने के नियम शामिल होते हैं जब इसका पता चलता है।
प्रत्येक CMP एक नामित प्रविष्टि है और इसमें 2 भाग होते हैं, `detectors` और `methods`। नाम आदर्श रूप से अंतर्निहित CMP का वास्तविक नाम होना चाहिए (सही ढंग से कैपिटलाइज़ और व्हाइटस्पेस के साथ) या वेबसाइट का नाम यदि वह उस डोमेन के लिए अद्वितीय है। यह नाम एक्सटेंशन सेटिंग्स के About अनुभाग में दिखाया जाएगा, इसलिए इसे उपयोगकर्ता-अनुकूल बनाएँ।```json
{
"MyCMP": {
"detectors": [ ... ],
"methods": [ ... ]
},
"AnotherCMP": {
"detectors": [ ... ],
"methods": [ ... ]
},
}
यदि किसी CMP में 1 से अधिक डिटेक्टर जोड़े जाते हैं, तो CMP का पता चला हुआ माना जाता है यदि कोई भी डिटेक्टर ट्रिगर होता है।
डिटेक्टर वह हिस्सा है जो पता लगाता है कि कोई निश्चित नियम सेट लागू किया जाना चाहिए या नहीं। मूल रूप से, यदि कोई डिटेक्टर ट्रिगर होता है, तो विधियाँ लागू की जाएंगी।
डिटेक्टर संरचना:```json { "presentMatcher": [{ ... }], "showingMatcher": [{ ... }] }
वर्तमान मिलानकर्ता का उपयोग यह पता लगाने के लिए किया जाता है कि CMP पृष्ठ पर मौजूद है या नहीं।
कुछ CMP अभी भी पॉपअप HTML को DOM में डालते हैं, भले ही आप पहले किसी पृष्ठ पर पुनः विज़िट कर रहे हों जहाँ आपने पहले ही सहमति दी हो। हम केवल सहमति प्रपत्र को तभी संभालना चाहते हैं जब वह वास्तव में पृष्ठ पर दिखाई दे रहा हो। इसके लिए दिखाने वाले मिलानकर्ता का उपयोग किया जाता है।
वर्तमान और दिखाने वाला दोनों मिलानकर्ता [`Matchers`](#matchers) की सामान्य संरचना का पालन करते हैं।
वर्तमान और दिखाने वाला दोनों मिलानकर्ता कई मिलानकर्ता हो सकते हैं, जो डिटेक्टर को तभी ट्रिगर करते हैं जब सभी मिलानकर्ता (क्रमशः वर्तमान और दिखाने के लिए) लागू होते हैं।
#### विधियाँ
विधियाँ क्रियाओं के संग्रह हैं। Consent-O-Matic द्वारा 4 विधियाँ समर्थित हैं। `OPEN_OPTIONS`, `DO_CONSENT`, `SAVE_CONSENT`, `HIDE_CMP`
सभी विधियाँ वैकल्पिक हैं, और यदि उपस्थित हैं, तो डिटेक्टर ट्रिगर होने पर विधियाँ नीचे दिए गए क्रम में चलाई जाएंगी।```
HIDE_CMP
OPEN_OPTIONS
HIDE_CMP
DO_CONSENT
SAVE_CONSENT
विधियाँ इस रूप में होती हैं:```json { "name": " ... ", "action": { ... } }
जहाँ name चार समर्थित विधियों में से एक है और action वह [action](#actions) है जिसे निष्पादित करना है।
---
### DOM चयन
अधिकांश actions और matchers का एक लक्ष्य होता है जिस पर वे लागू होते हैं। इस कारण, Consent-O-Matic में एक DOM चयन तंत्र है जो सही DOM तत्व का चयन करने में आसानी से मदद कर सकता है।```json
"parent": {
"selector": ".some.css.selector",
"textFilter": "someTextFilter",
"styleFilter": {
"option": "someStyleOption",
"value": "someStyleValue",
"negated": false
},
"displayFilter": true,
"iframeFilter": false,
"childFilter": {}
},
"target": {
"selector": ".some.css.selector",
"textFilter": "someTextFilter",
"styleFilter": {
"option": "someStyleOption",
"value": "someStyleValue",
"negated": false
},
"displayFilter": true,
"iframeFilter": false,
"childFilter": {}
}
2 भाग होते हैं, parent और target। parent वैकल्पिक है लेकिन यदि यह मौजूद है तो इसे पहले हल किया जाएगा, और target के लिए प्रारंभिक बिंदु के रूप में उपयोग किया जाएगा। यह आपको तत्वों के बहुत जटिल चयन बनाने की अनुमति देता है जो एक सादे CSS चयनकर्ता के साथ अन्यथा संभव नहीं होते। इसका एक उदाहरण छाया DOM में चयन करना है - जहां parent का उपयोग छाया वाले तत्व को लक्षित करने के लिए किया जाता है, और फिर उसके चयनकर्ता के साथ उसके बच्चों को क्वेरी करना संभव होता है।
parent और target के सभी पैरामीटर, selector को छोड़कर, वैकल्पिक हैं।
चयन विधि selector से CSS चयनकर्ता का उपयोग करके काम करती है और फिर परिणामी DOM नोड्स को उपलब्ध विभिन्न फ़िल्टरों के माध्यम से छानती है:
textFilter उन सभी नोड्स को छानता है जिनमें दिया गया टेक्स्ट शामिल नहीं है। इसे एक सारणी के रूप में भी दिया जा सकता है जैसे "textFilter":["फ़िल्टर1", "फ़िल्टर2"] और फिर यह उन सभी नोड्स को छानता है जिनमें दिए गए टेक्स्ट फ़िल्टर में से कोई भी शामिल नहीं है।
styleFilter computedStyles के आधार पर फ़िल्टर करता है। option वह स्टाइल विकल्प है जिसकी तुलना करनी है, उदाहरण के लिए position, value वह मान है जिसके साथ तुलना करनी है, और negated यह निर्धारित करता है कि विकल्प मान दिए गए मान से मेल खाना चाहिए या नहीं।
displayFilter का उपयोग नोड्स को छानने के लिए किया जा सकता है कि वे display hidden हैं या नहीं।
iframeFilter नोड्स को इस आधार पर छानता है कि वे किसी iframe के अंदर हैं या नहीं।
childFilter एक पूरी तरह से नया DOM चयन है, जो फिर मूल चयन को इस आधार पर छानता है कि childFilter द्वारा कोई चयन किया गया था या नहीं।
यहाँ DOM चयन का एक उदाहरण है:```json "parent": { "selector": ".myParent", "iframeFilter": true, "childFilter": { "target": { "selector": ".myChild", "textFilter": "Gregor" } } }, "target": { "selector": ".myTarget" }
यह सेलेक्टर पहले `parent` ढूंढने का प्रयास करता है, जो एक iframe के अंदर `myParent` वर्ग वाला DOM तत्व है और जिसका एक चाइल्ड DOM तत्व `myChild` वर्ग के साथ है जिसमें "Gregor" टेक्स्ट है।
फिर, इस parent को "root" के रूप में उपयोग करते हुए, यह `myTarget` वर्ग वाले DOM तत्व को ढूंढने का प्रयास करता है।
यह तब किसी क्रिया या मिलानकर्ता (matcher) का लक्ष्य (target) हो सकता है।
---
### क्रियाएँ (Actions)
क्रियाएँ Consent-O-Matic का वह हिस्सा हैं जो वास्तव में कुछ करती हैं। कुछ क्रियाएँ किसी लक्ष्य चयन (target selection) पर कुछ करती हैं, अन्य का नियंत्रण प्रवाह (control flow) से संबंध होता है।
#### क्लिक (Click)
यह क्रिया अपने लक्ष्य पर माउस क्लिक का अनुकरण करती है।
उदाहरण:```json
{
"type": "click",
"target": {
"selector": ".myButton",
"textFilter": "Save settings"
},
"openInTab": false
}
openInTab यदि true पर सेट किया गया हो, तो यह एक क्लिक के बजाय ctrl+shift+click को ट्रिगर करेगा, जिससे लिंक (यदि कोई हो) एक नए टैब में खुले और वह टैब फोकस हो जाए।
इस उदाहरण में हम केवल एक सरल target और textFilter का उपयोग करते हैं, लेकिन पूर्ण DOM selection समर्थित है।
यह कार्रवाई क्रियाओं की सूची को क्रम में चलाती है।
उदाहरण:```json { "type": "list", "actions": [] }
`actions` एक array है जिसमें क्रियाएँ शामिल हैं, और सभी क्रमानुसार चलाई जाएंगी।
#### सहमति
सहमति क्रिया consents का एक array लेती है, और उपयोगकर्ता की सहमति चयनों को लागू करने का प्रयास करती है।
उदाहरण:```json
{
"type": "consent",
"consents": []
}
consents एक सरणी है Consent प्रकारों की
कुछ सहमति प्रपत्र सहमति स्तर सेट करने के लिए एक स्लाइडर का उपयोग करते हैं, यह क्रिया ऐसे स्लाइडर के साथ स्लाइडिंग का अनुकरण करने का समर्थन करती है।
उदाहरण:```json { "type": "slide", "target": { "selector": ".mySliderKnob" }, "dragTarget": { "target": { "selector": ".myChoosenOption" } }, "axis": "y" }
`target` स्लाइड मोशन को सिम्युलेट करने के लिए लक्ष्य DOM तत्व है।
`dragTarget` स्लाइड दूरी के लिए उपयोग किया जाने वाला DOM तत्व है।
`axis` चुनता है कि स्लाइडर क्षैतिज "x" या लंबवत "y" जाना चाहिए।
स्लाइड इवेंट यह सिम्युलेट करेगा कि माउस ने दिए गए `axis` पर `target` से `dragTarget` तक की दूरी तक `target` को खींचा।
#### If CSS
यह क्रिया नियंत्रण प्रवाह के रूप में उपयोग की जाती है, यह इस बात पर निर्भर करते हुए कि कोई DOM चयन किसी तत्व को ढूंढता है या नहीं, दूसरी क्रिया चलाती है।
Example:```json
{
"type": "ifcss",
"target": {
"selector": "",
},
"trueAction": {
"type": "click",
"target": {
"selector": ".myTrueButton"
}
},
"falseAction": {
"type": "click",
"target": {
"selector": ".myFalseButton"
}
}
}
trueAction एक क्रिया है जो तब चलेगी जब DOM चयन किसी तत्व को ढूंढ़ता है।
falseAction एक क्रिया है जो तब चलेगी जब DOM चयन को कोई तत्व नहीं मिलता।
यह क्रिया तब तक प्रतीक्षा करती है जब तक DOM सेलेक्टर को कोई मेल खाने वाला DOM तत्व नहीं मिलता। इसका उपयोग अक्सर तब किया जाता है जब सहमति प्रपत्र का कुछ हिस्सा धीमी गति से लोड होता है और प्रतीक्षा की आवश्यकता होती है।
उदाहरण:```json { "type": "waitcss", "target": { "selector": ".myWaitTarget" }, "retries": 10, "waitTime": 200, "negated": false }
`retries` जाँच के प्रयासों की संख्या है। डिफ़ॉल्ट 10 है।
`waitTime` प्रयासों के बीच का समय निर्धारित करता है। डिफ़ॉल्ट 250 है।
`negated` "Wait For CSS" को तब तक प्रतीक्षा करने का कारण बनाता है जब तक लक्ष्य नहीं मिल जाता।
#### For Each
यदि कार्यों के किसी सेट को कई बार चलाने की आवश्यकता है, लेकिन विभिन्न DOM नोड्स को मूल के रूप में उपयोग करते हुए, तो for each क्रिया का उपयोग किया जा सकता है। यह अपनी क्रिया को प्रत्येक DOM तत्व के लिए 1 बार चलाता है जो इसके DOM चयन द्वारा चुना गया है; for each लूप के अंदर चलने वाली सभी क्रियाएँ DOM को वर्तमान में चयनित नोड से शुरू होते हुए देखेंगी।
उदाहरण:```json
{
"type": "foreach",
"target": {
"selector": ".loopElement"
},
"action": {}
}
action प्रत्येक पाए गए DOM तत्व के लिए चलाने की क्रिया है।
यह क्रिया जारी रखने से पहले दिए गए मिलीसेकंड की प्रतीक्षा करती है।
उदाहरण:```json { "type": "wait", "waitTime": 250 }
#### छिपाएँ
यह क्रिया DOM चयन पर 'ConsentOMatic-CMP-Hider' CSS वर्ग सेट करती है। डिफ़ॉल्ट CSS नियम तब तत्व पर opacity को 0 पर सेट कर देंगे।
उदाहरण:```json
{
"type": "hide",
"target": {
"selector": ".myHiddenClass"
}
}
यह क्रिया वर्तमान टैब को बंद करती है, जो Evidon जैसे सहमति प्रदाताओं के लिए उपयोगी है, जो अंदर सहमति डैशबोर्ड के साथ नए टैब खोलना पसंद करते हैं।
उदाहरण:```json { "type": "close" }
### मिलानकर्ता
मिलानकर्ताओं का उपयोग किसी DOM चयन की उपस्थिति, या किसी DOM चयन की स्थिति की जाँच करने के लिए किया जाता है।
#### CSS
यह मिलानकर्ता किसी DOM चयन की उपस्थिति की जाँच करता है, और यदि वह मौजूद है तो वापस करता है कि यह मेल खाता है।
उदाहरण:```json
{
"type": "css",
"target": {
"selector": ".myMatchingClass"
}
}
यह मिलानकर्ता <input type='checkbox' /> की स्थिति की जाँच करता है और यदि चेकबॉक्स चेक किया गया है तो यह मेल खाने की सूचना देता है।
उदाहरण:```json { "type": "checkbox", "target": { "selector": ".myInputCheckbox" } }
---
### सहमति
यह [सहमति क्रियाओं](#consent) के अंदर उपयोग किया जाता है और उस वास्तविक सहमति को परिभाषित करता है जो उपयोगकर्ता को देनी या नहीं देनी चाहिए।
प्रत्येक सहमति का एक प्रकार होता है, जो Consent-O-Matic के अंदर सहमति श्रेणियों से मेल खाता है। इसलिए यदि किसी उपयोगकर्ता ने पहली सहमति श्रेणी को चालू (ON) किया है (प्रकार A) और सहमति का प्रकार "A" है, तो सहमति सक्षम हो जाएगी।
आमतौर पर सहमति या तो टॉगल के रूप में दी जाती है, या चालू/बंद बटनों के एक सेट के रूप में। इसलिए `consent` के पास इनमें से प्रत्येक मामले के लिए एक तंत्र है।
उदाहरण:```json
{
"type": "A",
"toggleAction": {},
"matcher": {},
"trueAction": {},
"falseAction": {}
}
type उस सहमति श्रेणी का प्रकार है जिसे यह नियम परिभाषित करता है और यह निर्धारित करता है कि उस श्रेणी के लिए उपयोगकर्ता के चयन के आधार पर यह सहमति चालू या बंद होनी चाहिए।
toggleAction इस क्रिया का उपयोग सहमति का चयन करने के लिए किया जाता है यदि पॉपअप सहमति को संप्रेषित करने के लिए टॉगल या स्विच का उपयोग करता है। यह क्रिया तब चलेगी जब मैचर कहे कि सहमति उस स्थिति से भिन्न है जो उपयोगकर्ता ने मांगी है, अन्यथा यह नहीं चलेगी।
matcher वह मैचर है जिसका उपयोग यह जांचने के लिए किया जाता है कि सहमति किस स्थिति में है। checkbox matcher के लिए, यदि चेकबॉक्स चेक किया गया है तो सहमति दी जाती है। CSS matcher के लिए, यदि मैचर को कोई DOM चयन मिलता है तो सहमति दी जाती है।
trueAction और falseAction वे क्रियाएं हैं जिनका उपयोग तब किया जाता है जब सहमति को टॉगल ऑन/ऑफ करने के बजाय दो बटनों में से एक को दबाकर देना होता है। ये उपयोगकर्ता की सहमति के चयन के आधार पर चलेंगे। यदि उपयोगकर्ता ने इस श्रेणी प्रकार के लिए सहमति दी है, तो trueAction चलेगा, और यदि उपयोगकर्ता ने इस श्रेणी प्रकार के लिए सहमति नहीं दी है, तो falseAction चलेगा।
यदि कंटेंट कॉन्फ़िग पर toggleAction और matcher मौजूद हैं, तो toggleAction का उपयोग किया जाएगा, यदि उनमें से एक गायब है, तो इसके बजाय trueAction/falseAction का उपयोग किया जाएगा।
ऐड-ऑन सेटिंग्स में देखे गए क्रम में:
सब कुछ एक साथ रखते हुए, यहाँ CMP "MyCMP" का एक पूर्ण उदाहरण है जिसमें टॉगल करने के लिए 2 सहमति श्रेणियाँ हैं।```json { "MyCMP": { "detectors": [ { "presentMatcher": { "type": "css", "target": { "selector": "#theCMP" } }, "showingMatcher": { "target": { "selector": "#theCMP.isShowing" } } } ], "methods": [ { "name": "OPEN_OPTIONS", "action": { "type": "click", "target": { "selector": ".button", "textFilter": "Change settings" } } }, { "name": "DO_CONSENT", "action": { "type": "list", "actions": [ { "type": "click", "target": { "selector": ".menu-vendors" } }, { "type": "consent", "consents": [ { "type": "A", "matcher": { "type": "checkbox", "parent": { "selector": ".vendor-item", "textFilter": "Functional cookies" }, "target": { "selector": "input" } }, "toggleAction": { "type": "click", "parent": { "selector": ".vendor-item", "textFilter": "Functional cookies" }, "target": { "selector": "label" } } }, { "type": "F", "matcher": { "type": "checkbox", "parent": { "selector": ".vendor-item", "textFilter": "Advertisement cookies" }, "target": { "selector": "input" } }, "toggleAction": { "type": "click", "parent": { "selector": ".vendor-item", "textFilter": "Advertisement cookies" }, "target": { "selector": "label" } } } ] } ] } }, { "name": "SAVE_CONSENT", "action": { "type": "click", "target": { "selector": ".save-consent-btn" } } } ] } }