1/* 2 GLOW COOKIES 3 CREATED BY MANUEL CARRILLO 4 https://github.com/manucaralmo/GlowCookies 5 2021 - v 3.1.3 6*/ 7 8class GlowCookies { 9 constructor() { 10 // Cookies banner 11 this.banner = undefined 12 // Config 13 this.config = undefined 14 this.tracking = undefined 15 // DOM ELEMENTS 16 this.PreBanner = undefined 17 this.Cookies = undefined 18 this.DOMbanner = undefined 19 } 20 21 render() { 22 this.addCss() 23 this.createDOMElements() 24 this.checkStatus() 25 } 26 27 addCss() { 28 const stylesheet = document.createElement('link'); 29 stylesheet.setAttribute('rel', 'stylesheet'); 30 stylesheet.setAttribute('href', `https://cdn.jsdelivr.net/gh/manucaralmo/[email protected]/src/glowCookies.min.css`); 31 document.head.appendChild(stylesheet); 32 } 33 34 createDOMElements() { 35 // COOKIES BUTTON 36 this.PreBanner = document.createElement("div"); 37 this.PreBanner.innerHTML = `<button type="button" id="prebannerBtn" class="prebanner prebanner__border__${this.config.bannerStyle} glowCookies__${this.config.position} glowCookies__${this.config.border} animation" style="color: ${this.banner.manageCookies.color}; background-color: ${this.banner.manageCookies.background};"> 38 <svg fill="currentColor" style="margin-right: 7px; margin-top: 2px; vertical-align: text-top;" height="15px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> 39 <path d="M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"/>
39 40 </svg>${this.banner.manageCookies.text}</button>`; 41 this.PreBanner.style.display = "none"; 42 document.body.appendChild(this.PreBanner); 43 44 // COOKIES BANNER 45 this.Cookies = document.createElement("div"); 46 this.Cookies.innerHTML = `<div 47 id="glowCookies-banner" 48 class="glowCookies__banner glowCookies__banner__${this.config.bannerStyle} glowCookies__${this.config.border} glowCookies__${this.config.position}" 49 style="background-color: ${this.banner.background};" 50 > 51 <h3 style="color: ${this.banner.color};">${this.banner.heading}</h3> 52 <p style="color: ${this.banner.color};"> 53 ${this.banner.description} 54 <a 55 href="${this.banner.link}" 56 target="_blank" 57 class="read__more" 58 style="color: ${this.banner.color};" 59 > 60 ${this.banner.linkText} 61 </a> 62 </p> 63 <div class="btn__section"> 64 <button type="button" id="acceptCookies" class="btn__accept accept__btn__styles" style="color: ${this.banner.acceptBtn.color}; background-color: ${this.banner.acceptBtn.background};"> 65 ${this.banner.acceptBtn.text} 66 </button> 67 <button type="button" id="rejectCookies" class="btn__settings settings__btn__styles" style="color: ${this.banner.rejectBtn.color}; background-color: ${this.banner.rejectBtn.background};"> 68 ${this.banner.rejectBtn.text} 69 </button> 70 </div> 71 </div> 72 `; 73 document.body.appendChild(this.Cookies); 74 this.DOMbanner = document.getElementById('glowCookies-banner') 75 76 77 // SET EVENT LISTENERS 78 document.getElementById('prebannerBtn').addEventListener('click', () => this.openSelector()) 79 document.getElementById('acceptCookies').addEventListener('click', () => this.acceptCookies()) 80 document.getElementById('rejectCookies').addEventListener('click', () => this.rejectCookies()) 81 } 82 83 checkStatus() { 84 switch (localStorage.getItem("GlowCookies")) { 85 case "1": 86 this.openManageCookies(); 87 this.activateTracking(); 88 this.addCustomScript(); 89 break; 90 case "0": 91 this.openManageCookies(); 92 break; 93 default: 94 this.openSelector(); 95 } 96 } 97 98 openManageCookies() { 99 this.PreBanner.style.display = this.config.hideAfterClick ? "none" : "block" 100 this.DOMbanner.classList.remove('glowCookies__show') 101 } 102 103 openSelector() { 104 this.PreBanner.style.display = "none"; 105 this.DOMbanner.classList.add('glowCookies__show') 106 } 107 108 acceptCookies() { 109 localStorage.setItem("GlowCookies", "1") 110 this.openManageCookies() 111 this.activateTracking() 112 this.addCustomScript() 113 } 114 115 rejectCookies() { 116 localStorage.setItem("GlowCookies", "0"); 117 this.openManageCookies(); 118 this.disableTracking(); 119 } 120 121 activateTracking() { 122 // Google Analytics Tracking 123 if (this.tracking.AnalyticsCode) { 124 let Analytics = document.createElement('script'); 125 Analytics.setAttribute('src', `https://www.googletagmanager.com/gtag/js?id=${this.tracking.AnalyticsCode}`); 126 document.head.appendChild(Analytics); 127 let AnalyticsData = document.createElement('script'); 128 AnalyticsData.text = `window.dataLayer = window.dataLayer || []; 129 function gtag(){dataLayer.push(arguments);} 130 gtag('js', new Date()); 131 gtag('config', '${this.tracking.AnalyticsCode}');`; 132 document.head.appendChild(AnalyticsData); 133 } 134 135 // Facebook pixel tracking code 136 if (this.tracking.FacebookPixelCode) { 137 let FacebookPixelData = document.createElement('script'); 138 FacebookPixelData.text = `
139 !function(f,b,e,v,n,t,s) 140 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 141 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 142 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 143 n.queue=[];t=b.createElement(e);t.async=!0; 144 t.src=v;s=b.getElementsByTagName(e)[0]; 145 s.parentNode.insertBefore(t,s)}(window, document,'script', 146 'https://connect.facebook.net/en_US/fbevents.js'); 147 fbq('init', '${this.tracking.FacebookPixelCode}'); 148 fbq('track', 'PageView'); 149 `; 150 document.head.appendChild(FacebookPixelData); 151 let FacebookPixel = document.createElement('noscript'); 152 FacebookPixel.setAttribute('height', `1`); 153 FacebookPixel.setAttribute('width', `1`); 154 FacebookPixel.setAttribute('style', `display:none`); 155 FacebookPixel.setAttribute('src', `https://www.facebook.com/tr?id=${this.tracking.FacebookPixelCode}&ev=PageView&noscript=1`); 156 document.head.appendChild(FacebookPixel); 157 } 158 159 // Hotjar Tracking 160 if (this.tracking.HotjarTrackingCode) { 161 let hotjarTrackingData = document.createElement('script'); 162 hotjarTrackingData.text = `
163 (function(h,o,t,j,a,r){ 164 h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; 165 h._hjSettings={hjid:${this.tracking.HotjarTrackingCode},hjsv:6}; 166 a=o.getElementsByTagName('head')[0]; 167 r=o.createElement('script');r.async=1; 168 r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; 169 a.appendChild(r); 170 })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); 171 `; 172 document.head.appendChild(hotjarTrackingData); 173 } 174 } 175 176 disableTracking() { 177 // Google Analytics Tracking ('client_storage': 'none') 178 if (this.tracking.AnalyticsCode) { 179 let Analytics = document.createElement('script'); 180 Analytics.setAttribute('src', `https://www.googletagmanager.com/gtag/js?id=${this.tracking.AnalyticsCode}`); 181 document.head.appendChild(Analytics); 182 let AnalyticsData = document.createElement('script'); 183 AnalyticsData.text = `window.dataLayer = window.dataLayer || []; 184 function gtag(){dataLayer.push(arguments);} 185 gtag('js', new Date()); 186 gtag('config', '${this.tracking.AnalyticsCode}' , { 187 'client_storage': 'none', 188 'anonymize_ip': true 189 });`; 190 document.head.appendChild(AnalyticsData); 191 } 192 193 // Clear cookies - not working 100% 194 this.clearCookies() 195 } 196 197 clearCookies() {
198 let cookies = document.cookie.split("; "); 199 for (let c = 0; c < cookies.length; c++) { 200 let d = window.location.hostname.split("."); 201 while (d.length > 0) { 202 let cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path='; 203 let p = location.pathname.split('/'); 204 document.cookie = cookieBase + '/'; 205 while (p.length > 0) { 206 document.cookie = cookieBase + p.join('/'); 207 p.pop(); 208 }; 209 d.shift(); 210 } 211 } 212 } 213 214 addCustomScript() { 215 if (this.tracking.customScript !== undefined) { 216 let customScriptTag 217 218 this.tracking.customScript.forEach(script => { 219 if (script.type === 'src') { 220 customScriptTag = document.createElement('script'); 221 customScriptTag.setAttribute('src', script.content); 222 } else if (script.type === 'custom') { 223 customScriptTag = document.createElement('script'); 224 customScriptTag.text = script.content; 225 } 226 227 if (script.position === 'head') { 228 document.head.appendChild(customScriptTag); 229 } else { 230 document.body.appendChild(customScriptTag); 231 } 232 }) 233 } 234 } 235 236 start(languaje, obj) { 237 if (!obj) obj = {} 238 const lang = new LanguagesGC(languaje) 239 240 this.config = { 241 border: obj.border || 'border', 242 position: obj.position || 'left', 243 hideAfterClick: obj.hideAfterClick || false, 244 bannerStyle: obj.style || 2 245 } 246 247 this.tracking = { 248 AnalyticsCode: obj.analytics || undefined, 249 FacebookPixelCode: obj.facebookPixel || undefined, 250 HotjarTrackingCode: obj.hotjar || undefined, 251 customScript: obj.customScript || undefined 252 } 253 254 this.banner = { 255 description: obj.bannerDescription || lang.bannerDescription, 256 linkText: obj.bannerLinkText || lang.bannerLinkText, 257 link: obj.policyLink || '#link', 258 background: obj.bannerBackground || '#fff', 259 color: obj.bannerColor || '#1d2e38', 260 heading: obj.bannerHeading !== 'none' ? obj.bannerHeading || lang.bannerHeading : '', 261 acceptBtn: { 262 text: obj.acceptBtnText || lang.acceptBtnText, 263 background: obj.acceptBtnBackground || '#253b48', 264 color: obj.acceptBtnColor || '#fff' 265 }, 266 rejectBtn: { 267 text: obj.rejectBtnText || lang.rejectBtnText, 268 background: obj.rejectBtnBackground || '#E8E8E8', 269 color: obj.rejectBtnColor || '#636363' 270 }, 271 manageCookies: { 272 color: obj.manageColor || '#1d2e38',
273 background: obj.manageBackground || '#fff', 274 text: obj.manageText || lang.manageText, 275 } 276 } 277 278 // Draw banner 279 window.addEventListener('load', () => { this.render() }) 280 } 281} 282 283class LanguagesGC { 284 constructor(code) { 285 this.init() 286 let lang = this.arrLang[code] || this.arrLang['en'] 287 this.bannerHeading = lang['bannerHeading'] 288 this.bannerDescription = lang['bannerDescription'] 289 this.bannerLinkText = lang['bannerLinkText'] 290 this.acceptBtnText = lang['acceptBtnText'] 291 this.rejectBtnText = lang['rejectBtnText'] 292 this.manageText = lang['manageText'] 293 } 294 295 init() { 296 this.arrLang = { 297 af: { 298 'bannerHeading': 'Ons gebruik koekies', 299 'bannerDescription': 'Ons gebruik ons eie koekies en die van derdepartye, om inhoud te verpersoonlik en om webverkeer te ontleed.', 300 'bannerLinkText': 'Lees meer oor koekies', 301 'acceptBtnText': 'Aanvaar koekies', 302 'rejectBtnText': 'Weier', 303 'manageText': 'Koekie-instellings' 304 }, 305 bg: { 306 'bannerHeading': 'Ðие използваме биÑквиÑки', 307 'bannerDescription': 'Ðзползваме наÑи и биÑквиÑки на ÑÑеÑи ÑÑÑани, за да запазим ÐаÑиÑе пÑедпоÑиÑÐ°Ð½Ð¸Ñ Ð¸ да ÑÑбиÑаме аналиÑиÑни данни.', 308 'bannerLinkText': 'ÐÑоÑеÑеÑе повеÑе за биÑквиÑкиÑе', 309 'acceptBtnText': 'ÐÑиеми биÑквиÑкиÑе', 310 'rejectBtnText': 'ÐÑкажи', 311 'manageText': 'ÐаÑÑÑой биÑквиÑкиÑе' 312 }, 313 de: { 314 'bannerHeading': 'Verwendung von Cookies', 315 'bannerDescription': 'Wir nutzen Cookies (auch von Drittanbietern), um Inhalte zu personalisieren und Surfverhalten zu analysieren.', 316 'bannerLinkText': 'Mehr über Cookies', 317 'acceptBtnText': 'Cookies akzeptieren', 318 'rejectBtnText': 'Ablehnen', 319 'manageText': 'Cookies verwalten' 320 }, 321 en: { 322 'bannerHeading': 'We use cookies', 323 'bannerDescription': 'We use our own and third-party cookies to personalize content and to analyze web traffic.', 324 'bannerLinkText': 'Read more about cookies', 325 'acceptBtnText': 'Accept cookies', 326 'rejectBtnText': 'Reject', 327 'manageText': 'Manage cookies' 328 }, 329 sv: { 330 'bannerHeading': 'Vi använder cookies', 331 'bannerDescription' : 'Vi använder vÃ¥ra egna och tredjepartscookies för att personalisera innehÃ¥ll och till statistik.', 332 'bannerLinkText' : 'Läs mer om cookies', 333 'acceptBtnText' : 'Acceptera cookies', 334 'rejectBtnText' : 'AvslÃ¥', 335 'manageText' : 'Hantera cookies' 336 }, 337 no: { 338 'bannerHeading': 'Vi benytter cookies', 339 'bannerDescription' : 'Vi benytter vÃ¥re egne og tredjepartscookies for Ã¥ personalisere innehold og til statistikk.', 340 'bannerLinkText' : 'Les mer om cookies', 341 'acceptBtnText' : 'Aksepter cookies', 342 'rejectBtnText' : 'AvslÃ¥', 343 'manageText' : 'HÃ¥ndter cookies' 344 }, 345 da: { 346 'bannerHeading': 'Vi bruger cookies', 347 'bannerDescription' : 'Vi bruger vores egne og tredjepartscookies til at tilpasse indhold og mÃ¥le statistik.', 348 'bannerLinkText' : 'Læs mere om cookies', 349 'acceptBtnText' : 'Accepter cookies', 350 'rejectBtnText' : 'Afvis', 351 'manageText' : 'Administrer cookies' 352 }, 353 es: { 354 'bannerHeading': 'Uso de cookies', 355 'bannerDescription': 'Utilizamos cookies propias y de terceros para personalizar el contenido y para analizar el tráfico de la web.', 356 'bannerLinkText': 'Ver más sobre las cookies', 357 'acceptBtnText': 'Aceptar cookies', 358 'rejectBtnText': 'Rechazar', 359 'manageText': 'Cookies' 360 }, 361 fr: { 362 'bannerHeading': 'Nous utilisons des cookies', 363 'bannerDescription': 'Nous utilisons nos propres cookies et ceux de tiers pour adapter le contenu et analyser le trafic web.', 364 'bannerLinkText': 'En savoir plus sur les cookies', 365 'acceptBtnText': 'Accepter les cookies', 366 'rejectBtnText': 'Refuser', 367 'manageText': 'Paramétrez les cookies' 368 }, 369 it: { 370 'bannerHeading': 'Utilizziamo i cookie', 371 'bannerDescription': 'Utilizziamo cookie nostri e di terze parti per personalizzare il contenuto e analizzare il traffico web.', 372 'bannerLinkText': 'Per saperne di più riguardo i cookie', 373 'acceptBtnText': 'Accetta i cookie', 374 'rejectBtnText': 'Rifiuta', 375 'manageText': 'Gestisci i cookie' 376 }, 377 mg: { 378 'bannerHeading': 'Izahay dia mampiasa cookies', 379 'bannerDescription': "Mampiasa ny cookies anay manokana sy ireo an'ny antoko fahatelo izahay hampifanarahana ny atiny sy hamakafaka ny fivezivezena amin'ny tranonkala.", 380 'bannerLinkText': 'Maniry halala bebe kokoa momba ny cookies', 381 'acceptBtnText': 'Manaiky ireo cookies', 382 'rejectBtnText': 'Tsy mety', 383 'manageText': 'Hamboarina ny cookies' 384 }, 385 nl: { 386 'bannerHeading': 'We gebruiken cookies', 387 'bannerDescription': 'We gebruiken onze en third-party cookies om content te personaliseren en web traffic te analyseren.', 388 'bannerLinkText': 'Lees meer over cookies', 389 'acceptBtnText': 'Cookies accepteren', 390 'rejectBtnText': 'Weigeren', 391 'manageText': 'Cookies beheren' 392 }, 393 oc: { 394 'bannerHeading': 'Utilizam de cookies', 395 'bannerDescription': 'Utilizam nòstres pròpris cookies e de cookies tèrces per adaptar lo contengut e analisar lo trafic web.', 396 'bannerLinkText': 'Ne saber mai suls cookies', 397 'acceptBtnText': 'Acceptar los cookies', 398 'rejectBtnText': 'Refusar', 399 'manageText': 'Configurar los cookies' 400 }, 401 pl: { 402 'bannerHeading': 'Używamy plików cookie', 403 'bannerDescription': 'Ta strona używa plików cookie - zarówno wÅasnych, jak i od zewnÄtrznych dostawców, w celu personalizacji treÅci i analizy ruchu.', 404 'bannerLinkText': 'WiÄcej o plikach cookie', 405 'acceptBtnText': 'Zaakceptuj pliki cookie', 406 'rejectBtnText': 'OdrzuÄ', 407 'manageText': 'Ustawienia plików cookie' 408 }, 409 pt_BR: { 410 'bannerHeading': 'Uso de cookies', 411 'bannerDescription': 'Usamos cookies próprios e de terceiros para personalizar o conteúdo e analisar o tráfego da web.', 412 'bannerLinkText': 'Leia mais sobre os cookies', 413 'acceptBtnText': 'Aceitar cookies', 414 'rejectBtnText': 'Rejeitar', 415 'manageText': 'Gerenciar cookies' 416 }, 417 ru: { 418 'bannerHeading': 'ÐозволÑÑе иÑполÑзоваÑÑ ÐºÑки?', 419 'bannerDescription': 'ÐÑ Ð¸ÑполÑзÑем ÑобÑÑвеннÑе и ÑÑоÑонние кÑки Ð´Ð»Ñ Ð¿ÐµÑÑонализаÑии конÑенÑа и анализа веб-ÑÑаÑика.', 420 'bannerLinkText': 'УзнаÑÑ Ð±Ð¾Ð»ÑÑе пÑо кÑки.', 421 'acceptBtnText': 'Ðк, иÑполÑзÑйÑе', 422 'rejectBtnText': 'Ðе ÑазÑеÑаÑ', 423 'manageText': 'РазÑеÑиÑе иÑполÑзоваÑÑ ÐºÑки?' 424 }, 425 sk: { 426 'bannerHeading': 'PoužÃvame cookies', 427 'bannerDescription': 'Na prispôsobenie obsahu a analýzu webovej stránky použÃvame vlastné cookies a cookies tretÃch strán.', 428 'bannerLinkText': 'Äo sú cookies?', 429 'acceptBtnText': 'PovoliÅ¥ cookies', 430 'rejectBtnText': 'NepovoliÅ¥', 431 'manageText': 'SpravovaÅ¥ cookies' 432 }, 433 th: { 434 'bannerHeading': 'Cookies', 435 'bannerDescription': 'à¸à¸§à¸à¹à¸£à¸²à¹à¸à¹à¸à¸¸à¸
435à¸à¸µà¹à¸à¸¸à¸à¸à¸¥à¸à¸µà¹à¸ªà¸²à¸¡ à¹à¸à¸·à¹à¸à¸à¸£à¸±à¸à¹à¸à¹à¸à¹à¸à¸·à¹à¸à¸«à¸²à¹à¸¥à¸°à¸§à¸´à¹à¸à¸£à¸²à¸°à¸«à¹à¸à¸²à¸£à¹à¸à¹à¸²à¸à¸¡à¹à¸§à¹à¸', 436 'bannerLinkText': 'à¸à¹à¸²à¸à¹à¸à¸´à¹à¸¡à¹à¸à¸´à¸¡à¹à¸à¸µà¹à¸¢à¸§à¸à¸±à¸à¸à¸¸à¸à¸à¸µà¹', 437 'acceptBtnText': 'ยà¸à¸¡à¸£à¸±à¸à¸à¸¸à¸à¸à¸µà¹', 438 'rejectBtnText': 'à¸à¸à¸´à¹à¸ªà¸à¸à¸¸à¸à¸à¸µà¹', 439 'manageText': 'Cookies' 440 }, 441 tr: { 442 'bannerHeading': 'Ãerez kullanımı', 443 'bannerDescription': 'İçeriÄi kiÅiselleÅtirmek ve web trafiÄini analiz etmek için kendi ve üçüncü taraf çerezlerimizi kullanıyoruz.', 444 'bannerLinkText': 'Ãerezler hakkında daha fazlasını okuyun', 445 'acceptBtnText': 'Ãerezleri kabul et', 446 'rejectBtnText': 'Reddet', 447 'manageText': 'Ãerezleri yönet' 448 }, 449 uk: { 450 'bannerHeading': 'Ðи викоÑиÑÑовÑÑмо кÑкÑ', 451 'bannerDescription': 'Ðи викоÑиÑÑовÑÑмо влаÑÐ½Ñ Ñа ÑÑоÑÐ¾Ð½Ð½Ñ cookie Ð´Ð»Ñ Ð¿ÐµÑÑоналÑзаÑÑÑ Ð´Ð¾ÑвÑÐ´Ñ ÐºÐ¾ÑиÑÑÑÐ²Ð°Ð½Ð½Ñ Ñа аналÑÐ·Ñ Ð²ÐµÐ±-ÑÑаÑÑкÑ.', 452 'bannerLinkText': 'ÐÑзнайÑеÑÑ Ð±ÑлÑÑе пÑо cookie', 453 'acceptBtnText': 'ÐÑийнÑÑи', 454 'rejectBtnText': 'ÐÑÐ´Ñ Ð¸Ð»Ð¸Ñи', 455 'manageText': 'ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ cookie' 456 }, 457 ja: { 458 'bannerHeading': 'Cookies ã使ç¨ãã¦ãã¾ã', 459 'bannerDescription': 'ç§ãã¡ã¯ãã³ã³ãã³ãã®ãã¼ã½ãã©ã¤ãºããã©ãã£ãã¯ã®åæã®ããã«ãç¬èªããã³ãµã¼ããã¼ãã£ã¼è£½ Cookies ã使ç¨ãã¦ãã¾ãã', 460 'bannerLinkText': 'Cookiesã«ã¤ãã¦è©³ããè¦ã', 461 'acceptBtnText': 'Cookiesãåãå ¥ãã', 462 'rejectBtnText': 'æå¦', 463 'manageText': 'cookies管ç' 464 }, 465 zh_TW: { 466 'bannerHeading': 'æåä½¿ç¨ Cookies', 467 'bannerDescription' : 'æå使ç¨äºèªå·±åç¬¬ä¸æ¹ç cookies ä¾åäººåæ¨çå §å®¹ååæç¶²é çæµéã', 468 'bannerLinkText' : 'é±è®æ´å¤éæ¼ cookies', 469 'acceptBtnText' : 'åæ cookies', 470 'rejectBtnText' : 'æçµ', 471 'manageText' : '管ç cookies' 472 }, 473 zh: { 474 'bannerHeading': 'æä»¬ä½¿ç¨ Cookies', 475 'bannerDescription': 'æä»¬ä½¿ç¨äºèªå·±åç¬¬ä¸æ¹ç cookies æ¥ä¸ªæ§åæ¨çå 容ååæç½é¡µçæµéã', 476 'bannerLinkText': 'é 读æ´å¤å ³äº cookies', 477 'acceptBtnText': 'åæ cookies', 478 'rejectBtnText': 'æç»', 479 'manageText': '管ç cookies' 480 } 481 } 482 } 483 484} 485 486const glowCookies = new GlowCookies()
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.