PageSourceSearch

https://www.degiro.com/assets/js/v7_degiro_channel_attribution.js?v=3

js degiro.com collected 2026-10-01 12:05:47 UTC 12,569 bytes, 490 lines download raw bytes

1  /**
2   * UTMZ Cookie Replicator
3   *
4   * Makes a generally faithful representation of the old __utmz cookie
5   * from Classic Analytics. Stores the data in a cookie named __utmzz.
6   * Also sets a session cookie named __utmzzses.
7   *
8   * Data is stored in the __utmzz cookie in the following format; brackets
9   * indicate optional data and are aexcluded from the stored string:
10   *
11   * utmcsr=SOURCE|utmcmd=MEDIUM[|utmccn=CAMPAIGN][|utmcct=CONTENT]
12   * [|utmctr=TERM/KEYWORD]
13   *
14   * e.g.:
15   *
16   * utmcsr=example.com|utmcmd=affl-link|utmccn=foo|utmcct=bar|utmctr=biz
17   *
18   * Follows the same campaign assignment/overriding flow as Classic Analytics.
19   */
20  (function(document) {
21
22    var referrer = document.referrer;
23	//default value in case everything else fails
24    var gaReferral = {
25      'utmcsr': '(direct)',
26      'utmcmd': '(none)',
27      'utmccn': '(not set)'
28    };
29		var thisHostname = document.location.hostname;
30    var thisDomain = getDomain_(thisHostname);
31    var referringDomain = getDomain_(document.referrer);
32		var sessionCookie = getCookie_('__utmzzses');
33    var cookieExpiration = new Date(+new Date() + 1000 * 60 * 60 * 24 * 30 * 6);
34		//return the parameters of the current url
35		var qs = document.location.search.replace('?', '');
36		var hash = document.location.hash.replace('#', '');
37	//atribution from parameters
38    var gaParams = parseGoogleParams(qs + '#' + hash);
39	//atribution from referrer
40    var referringInfo = parseGaReferrer(referrer);
41	//atribution from cookie 
42    var storedVals = getCookie_('__utmz') || getCookie_('__utmzz');
43    var newCookieVals = [];
44    var keyMap = {
45      'utm_source': 'utmcsr',
46      'utm_medium': 'utmcmd',
47      'utm_campaign': 'utmccn',
48      'utm_content': 'utmcct',
49      'utm_term': 'utmctr',
50	  'd_source': 'utmcsr',
51      'd_medium': 'utmcmd',
52      'd_campaign': 'utmccn',
53      'd_content': 'utmcct',
54      'd_term': 'utmctr',
55      'gclid': 'utmgclid',
56      'dclid': 'utmdclid',
57	  'tap_a': 'tap_a',
58	  'tap_s': 'tap_s',
59    };
60    var keyName,
61      values,
62      _val,
63      _key,
64      raw,
65      key,
66      len,
67      i;
68
69	// if there is already attribution and the previous page is internal
70    if (sessionCookie && referringDomain === thisDomain) {
71
72      gaParams = null;
73      referringInfo = null;
74
75    }
76
77	//if there are parameters and source or google ads params are defined
78    if (gaParams && (gaParams.utm_source ||gaParams.d_source|| gaParams.gclid || gaParams.dclid)) {
79
80      for (key in gaParams) {
81
82        if (typeof gaParams[key] !== 'undefined') {
83
84          keyName = keyMap[key];
85          gaReferral[keyName] = gaParams[key];
86
87        }
88
89      }
90	//if it comes from google ads set predefined source/medium
91      if (gaParams.gclid || gaParams.dclid) {
92
93        gaReferral.utmcsr = 'google';
94        gaReferral.utmcmd = gaReferral.utmgclid ? 'cpc' : 'cpm';
95
96      }
97	//if there is no utm_params, use the previous one recorded 
98    } else if (storedVals && !storedVals.includes('utmcsr=(direct)')) {
99
100      values = {};
101      raw = storedVals.split('|');
102      len = raw.length;
103
104      for (i = 0; i < len; i++) {
105
106        _val = raw[i].split('=');
107        _key = _val[0].split('.').pop();
108        values[_key] = _val[1];
109
110      }
111
112      gaReferral = values;
113
114	//if there are no utm_params or cookie then use data from referrer
115    } else if (referringInfo) {
116
117      gaReferral.utmcsr = referringInfo.source;
118      gaReferral.utmcmd = referringInfo.medium;
119      if (referringInfo.term) gaReferral.utmctr = referringInfo.term;
120
121    } 
122
123    for (key in gaReferral) {
124
125      if (typeof gaReferral[key] !== 'undefined') {
126
127        newCookieVals.push(key + '=' + gaReferral[key]);
128
129      }
130
131    }
132
133    writeCookie_('__utmzz', newCookieVals.join('|'), cookieExpiration, '/', thisDomain);
134    writeCookie_('__utmzzses', 1, null, '/', thisDomain);
135
136	//function to get data from parameters
137    function parseGoogleParams(str) {
138
139      var campaignParams = ['source', 'medium', 'campaign', 'term', 'content'];
140	  //regex to match any utm (defined before) or google ads parameters
141      var regex = new RegExp('((utm|d)_(' + campaignParams.join('|') + ')|(d|g)clid|tap_(a|s))=.*?([^&#]*|$)', 'gi');
142      var gaParams = str.match(regex);
143      var paramsObj,
144        vals,
145        len,
146        i;
147
148	//if there are parameters, save them into paramsObj array
149      if (gaParams) {
150
151        paramsObj = {};
152        len = gaParams.length;
153
154        for (i = 0; i < len; i++) {
155
156          vals = gaParams[i].split('=');
157
158          if (vals) {
159
160            paramsObj[vals[0]] = vals[1];
161
162          }
163
164        }
165
166      }
167
168      return paramsObj;
169
170    }
171
172	//attribution when the url doesn't contain parameters
173    function parseGaReferrer(referrer) {
174
175      if (!referrer) return;
176
177      var searchEngines = {
178        'daum.net': {
179          'p': 'q',
180          'n': 'daum'
181        },
182        'eniro.se': {
183          'p': 'search_word',
184          'n': 'eniro '
185        },
186        'naver.com': {
187          'p': 'query',
188          'n': 'naver '
189        },
190        'yahoo.com': {
191          'p': 'p',
192          'n': 'yahoo'
193        },
194        'msn.com': {
195          'p': 'q',
196          'n': 'msn'
197        },
198        'bing.com': {
199          'p': 'q',
200          'n': 'live'
201        },
202        'aol.com': {
203          'p': 'q',
204          'n': 'aol'
205        },
206        'lycos.com': {
207          'p': 'q',
208          'n': 'lycos'
209        },
210        'ask.com': {
211          'p': 'q',
212          'n': 'ask'
213        },
214        'altavista.com': {
215          'p': 'q',
216          'n': 'altavista'
217        },
218        'search.netscape.com': {
219          'p': 'query',
220          'n': 'netscape'
221        },
222        'cnn.com': {
223          'p': 'query',
224          'n': 'cnn'
225        },
226        'about.com': {
227          'p': 'terms',
228          'n': 'about'
229        },
230        'mamma.com': {
231          'p': 'query',
232          'n': 'mama'
233        },
234        'alltheweb.com': {
235          'p': 'q',
236          'n': 'alltheweb'
237        },
238        'voila.fr': {
239          'p': 'rdata',
240          'n': 'voila'
241        },
242        'search.virgilio.it': {
243          'p': 'qs',
244          'n': 'virgilio'
245        },
246        'baidu.com': {
247          'p': 'wd',
248          'n': 'baidu'
249        },
250        'alice.com': {
251          'p': 'qs',
252          'n': 'alice'
253        },
254        'yandex.com': {
255          'p': 'text',
256          'n': 'yandex'
257        },
258        'najdi.org.mk': {
259          'p': 'q',
260          'n': 'najdi'
261        },
262        'seznam.cz': {
263          'p': 'q',
264          'n': 'seznam'
265        },
266        'search.com': {
267          'p': 'q',
268          'n': 'search'
269        },
270        'wp.pl': {
271          'p': 'szukaj ',
272          'n': 'wirtulana polska'
273        },
274        'online.onetcenter.org': {
275          'p': 'qt',
276          'n': 'o*net'
277        },
278        'szukacz.pl': {
279          'p': 'q',
280          'n': 'szukacz'
281        },
282        'yam.com': {
283          'p': 'k',
284          'n': 'yam'
285        },
286        'pchome.com': {
287          'p': 'q',
288          'n': 'pchome'
289        },
290        'kvasir.no': {
291          'p': 'q',
292          'n': 'kvasir'
293        },
294        'sesam.no': {
295          'p': 'q',
296          'n': 'sesam'
297        },
298        'ozu.es': {
299          'p': 'q',
300          'n': 'ozu '
301        },
302        'terra.com': {
303          'p': 'query',
304          'n': 'terra'
305        },
306        'mynet.com': {
307          'p': 'q',
308          'n': 'mynet'
309        },
310        'ekolay.net': {
311          'p': 'q',
312          'n': 'ekolay'
313        },
314        'rambler.ru': {
315          'p': 'words',
316          'n': 'rambler'
317        },
318        'google': {
319          'p': 'q',
320          'n': 'google'
321        }
322      };
323      var a = document.createElement('a');
324      var values = {};
325      var searchEngine,
326        termRegex,
327        term;
328
329      a.href = referrer;
330
331      // Shim for the billion google search engines
332      if (a.hostname.indexOf('google') > -1) {
333
334        referringDomain = 'google';
335
336      }
337
338      if (searchEngines[referringDomain]) {
339
340        searchEngine = searchEngines[referringDomain];
341        termRegex = new RegExp(searchEngine.p + '=.*?([^&#]*|$)', 'gi');
342        term = a.search.match(termRegex);
343
344        values.source = searchEngine.n;
345        values.medium = 'organic';
346
347        values.term = (term ? term[0].split('=')[1] : '') || '(not provided)';
348
349		//if it's not a search engine, saves it as a referral with the domain it came from.
350      } else if (referringDomain !== thisDomain) {
351
352        values.source = a.hostname;
353        values.medium = 'referral';
354
355      }
356
357      return values;
358
359    }
360
361    function writeCookie_(name, value, expiration, path, domain) {
362
363      var str = name + '=' + value + ';';
364      if (expiration) str += 'Expires=' + expiration.toGMTString() + ';';
365      if (path) str += 'Path=' + path + ';';
366      if (domain) str += 'Domain=' + domain + ';';
367
368      document.cookie = str;
369
370    }
371
372		function getCookie_(name) {
373
374			var cookies = '; ' + document.cookie
375			var cvals = cookies.split('; ' + name + '=');
376
377			if (cvals.length > 1) return cvals.pop().split(';')[0];
378
379		}
380
381    function getDomain_(url) {
382
383      if (!url) return;
384
385      var a = document.createElement('a');
386      a.href = url;
387
388      try {
389
390        return a.hostname.match(/[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$/)[0];
391
392      } catch(squelch) {}
393
394    }
395
396    function splitUTMCookie(cookieName, keyMap, oldHref) {
397      var cookie = getCookie_(cookieName);
398      var utmParams = cookie.split('|');
399      var newUTMParams;
400      var keyMapValues = Object.values(keyMap);
401      var keyMapKeys = Object.keys(keyMap);
402
403      var paramsString ='';
404      utmParams.forEach(function (value, index) {
405        var b = value.split('=');
406
407        var paramName = Object.keys(keyMap).find(key => keyMap[key] === b[0] && !key.includes('utm'));
408        var paramValue = b[1];
409
410        if((paramName === 'gclid') || (paramName === 'dclid')) {
411            if(Cookiebot.consent?.marketing) {
412            paramName = 'd_click';
413          }else return;
414        } 
415
416          var paramsConector = '&';
417          if (index === 0 ){
418            paramsConector ='';
419          }
420          paramsString += paramsConector + paramName+ '='+paramValue;
421
422
423      });
424      var landingCodeCookie = getCookie_('landingCode');
425      if(landingCodeCookie) {
426        paramsString += '&ref='+landingCodeCookie;
427      }
428      if(isPensionPage){
429        paramsString = '&'+paramsString;
430      }
431      else if(paramsString.length) {
432        paramsString ='?'+paramsString;
433      }
434      
435      return oldHref + paramsString;
436
437    }
438
439    const allOpenAccountCTA = document.querySelectorAll('.openaccountbtn');
440    for (var i = 0; i < allOpenAccountCTA.length; i++) {
441      var oldHref = allOpenAccountCTA.item(i).getAttribute("href");
442      allOpenAccountCTA.item(i).href = splitUTMCookie('__utmzz',keyMap, oldHref)
443    }
444    const crossDomainParams = document.querySelectorAll('.crossDomainParams');
445    for (var i = 0; i < crossDomainParams.length; i++) {
446      var oldHref2 = crossDomainParams.item(i).getAttribute("href");
447      crossDomainParams.item(i).href = splitUTMCookie('__utmzz',keyMap, oldHref2)
448    }
449
450    window.addEventListener('CookiebotOnConsentReady', () => {
451      if(Cookiebot.consent?.marketing) {
452        for (let i = 0; i < allOpenAccountCTA.length; i++) {
453          let oldHref = allOpenAccountCTA.item(i).getAttribute("href");
454          if(oldHref.includes('d_click')) { return };
455          let hasParams = oldHref.indexOf('?');
456          let cookie = getCookie_('__utmzz');
457          let utmParams = cookie.split('|');
458          utmParams.forEach(function (value, index) {
459            let b = value.split('=');
460            let paramName = Object.keys(keyMap).find(key => keyMap[key] === b[0] && !key.includes('utm'));
461            let paramValue = b[1];
462            if((paramName === 'gclid') || (paramName === 'dclid')) {
463              paramName = 'd_click';
464              if(hasParams > -1) {
465                allOpenAccountCTA.item(i)["href"] = oldHref+= '&'+paramName+ '='+paramValue;
466              } else {
467                allOpenAccountCTA.item(i)["href"] = oldHref+= '?'+paramName+ '='+paramValue;
468              }
469            }
470          })
471        }
472      }
473    })
474
475  })(document);
476
477
478  //
479  // function getCookieValue(a, b, c, d, e) {
480  //   b = document.cookie.split('; ');
481  //   console.log(b);
482  //   for (e = b.length - 1; e >= 0; e--)
483  //     {
484  //       c = b[e].split('=');
485  //       if (a === c[0])
486  //         return c[1];
487  //     }
488  //   return '';
489  // }
490

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.