PageSourceSearch

https://shop.hrr.co.uk/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.js?ver=8.9.3

js hrr.co.uk collected 2026-10-01 12:05:24 UTC 27,849 bytes, 878 lines download raw bytes

vendor: 3,809 bytes, lines 1-119
1!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.sbjs=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2"use strict";
3
4var init = _dereq_('./init');
5
6var sbjs = {
7  init: function(prefs) {
8    this.get = init(prefs);
9    if (prefs && prefs.callback && typeof prefs.callback === 'function') {
10      prefs.callback(this.get);
11    }
12  }
13};
14
15module.exports = sbjs;
16},{"./init":6}],2:[function(_dereq_,module,exports){
17"use strict";
18
19var terms = _dereq_('./terms'),
20    utils = _dereq_('./helpers/utils');
21
22var data = {
23
24  containers: {
25    current:          'sbjs_current',
26    current_extra:    'sbjs_current_add',
27    first:            'sbjs_first',
28    first_extra:      'sbjs_first_add',
29    session:          'sbjs_session',
30    udata:            'sbjs_udata',
31    promocode:        'sbjs_promo'
32  },
33
34  service: {
35    migrations:       'sbjs_migrations'
36  },
37
38  delimiter:          '|||',
39
40  aliases: {
41
42    main: {
43      type:           'typ',
44      source:         'src',
45      medium:         'mdm',
46      campaign:       'cmp',
47      content:        'cnt',
48      term:           'trm',
49      id:             'id'
50    },
51
52    extra: {
53      fire_date:      'fd',
54      entrance_point: 'ep',
55      referer:        'rf'
56    },
57
58    session: {
59      pages_seen:     'pgs',
60      current_page:   'cpg'
61    },
62
63    udata: {
64      visits:         'vst',
65      ip:             'uip',
66      agent:          'uag'
67    },
68
69    promo:            'code'
70
71  },
72
73  pack: {
74
75    main: function(sbjs) {
76      return (
77        data.aliases.main.type      + '=' + sbjs.type     + data.delimiter +
78        data.aliases.main.source    + '=' + sbjs.source   + data.delimiter +
79        data.aliases.main.medium    + '=' + sbjs.medium   + data.delimiter +
80        data.aliases.main.campaign  + '=' + sbjs.campaign + data.delimiter +
81        data.aliases.main.content   + '=' + sbjs.content  + data.delimiter +
82        data.aliases.main.term      + '=' + sbjs.term     + data.delimiter +
83        data.aliases.main.id        + '=' + sbjs.id
84      );
85    },
86
87    extra: function(timezone_offset) {
88      return (
89        data.aliases.extra.fire_date      + '=' + utils.setDate(new Date, timezone_offset) + data.delimiter +
90        data.aliases.extra.entrance_point + '=' + document.location.href                   + data.delimiter +
91        data.aliases.extra.referer        + '=' + (document.referrer || terms.none)
92      );
93    },
94
95    user: function(visits, user_ip) {
96      return (
97        data.aliases.udata.visits + '=' + visits  + data.delimiter +
98        data.aliases.udata.ip     + '=' + user_ip + data.delimiter +
99        data.aliases.udata.agent  + '=' + navigator.userAgent
100      );
101    },
102
103    session: function(pages) {
104      return (
105      data.aliases.session.pages_seen   + '=' + pages + data.delimiter +
106      data.aliases.session.current_page + '=' + document.location.href
107      );
108    },
109
110    promo: function(promo) {
111      return (
112        data.aliases.promo + '=' + utils.setLeadingZeroToInt(utils.randomInt(promo.min, promo.max), promo.max.toString().length)
113      );
114    }
115
116  }
117};
118
119module.exports = data;
vendor: 6,774 bytes, lines 120-350
120
121},{"./helpers/utils":5,"./terms":9}],3:[function(_dereq_,module,exports){
122"use strict";
123
124var delimiter = _dereq_('../data').delimiter;
125
126module.exports = {
127
128  encodeData: function(s) {
129    return encodeURIComponent(s).replace(/\!/g, '%21')
130                                .replace(/\~/g, '%7E')
131                                .replace(/\*/g, '%2A')
132                                .replace(/\'/g, '%27')
133                                .replace(/\(/g, '%28')
134                                .replace(/\)/g, '%29');
135  },
136
137  decodeData: function(s) {
138    try {
139      return decodeURIComponent(s).replace(/\%21/g, '!')
140                                  .replace(/\%7E/g, '~')
141                                  .replace(/\%2A/g, '*')
142                                  .replace(/\%27/g, "'")
143                                  .replace(/\%28/g, '(')
144                                  .replace(/\%29/g, ')');
145    } catch(err1) {
146      // try unescape for backward compatibility
147      try { return unescape(s); } catch(err2) { return ''; }
148    }
149  },
150
151  set: function(name, value, minutes, domain, excl_subdomains) {
152    var expires, basehost;
153
154    if (minutes) {
155      var date = new Date();
156      date.setTime(date.getTime() + (minutes * 60 * 1000));
157      expires = '; expires=' + date.toGMTString();
158    } else {
159      expires = '';
160    }
161    if (domain && !excl_subdomains) {
162      basehost = ';domain=.' + domain;
163    } else {
164      basehost = '';
165    }
166    document.cookie = this.encodeData(name) + '=' + this.encodeData(value) + expires + basehost + '; path=/';
167  },
168
169  get: function(name) {
170    var nameEQ = this.encodeData(name) + '=',
171        ca = document.cookie.split(';');
172
173    for (var i = 0; i < ca.length; i++) {
174      var c = ca[i];
175      while (c.charAt(0) === ' ') { c = c.substring(1, c.length); }
176      if (c.indexOf(nameEQ) === 0) {
177        return this.decodeData(c.substring(nameEQ.length, c.length));
178      }
179    }
180    return null;
181  },
182
183  destroy: function(name, domain, excl_subdomains) {
184    this.set(name, '', -1, domain, excl_subdomains);
185  },
186
187  parse: function(yummy) {
188
189    var cookies = [],
190        data    = {};
191
192    if (typeof yummy === 'string') {
193      cookies.push(yummy);
194    } else {
195      for (var prop in yummy) {
196        if (yummy.hasOwnProperty(prop)) {
197          cookies.push(yummy[prop]);
198        }
199      }
200    }
201
202    for (var i1 = 0; i1 < cookies.length; i1++) {
203      var cookie_array;
204      data[this.unsbjs(cookies[i1])] = {};
205      if (this.get(cookies[i1])) {
206        cookie_array = this.get(cookies[i1]).split(delimiter);
207      } else {
208        cookie_array = [];
209      }
210      for (var i2 = 0; i2 < cookie_array.length; i2++) {
211        var tmp_array = cookie_array[i2].split('='),
212            result_array = tmp_array.splice(0, 1);
213        result_array.push(tmp_array.join('='));
214        data[this.unsbjs(cookies[i1])][result_array[0]] = this.decodeData(result_array[1]);
215      }
216    }
217
218    return data;
219
220  },
221
222  unsbjs: function (string) {
223    return string.replace('sbjs_', '');
224  }
225
226};
227
228},{"../data":2}],4:[function(_dereq_,module,exports){
229"use strict";
230
231module.exports = {
232
233  parse: function(str) {
234    var o = this.parseOptions,
235        m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str),
236        uri = {},
237        i = 14;
238
239    while (i--) { uri[o.key[i]] = m[i] || ''; }
240
241    uri[o.q.name] = {};
242    uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
243      if ($1) { uri[o.q.name][$1] = $2; }
244    });
245
246    return uri;
247  },
248
249  parseOptions: {
250    strictMode: false,
251    key: ['source','protocol','authority','userInfo','user','password','host','port','relative','path','directory','file','query','anchor'],
252    q: {
253      name:   'queryKey',
254      parser: /(?:^|&)([^&=]*)=?([^&]*)/g
255    },
256    parser: {
257      strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
258      loose:  /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
259    }
260  },
261
262  getParam: function(custom_params) {
263    var query_string = {},
264        query = custom_params ? custom_params : window.location.search.substring(1),
265        vars = query.split('&');
266
267    for (var i = 0; i < vars.length; i++) {
268      var pair = vars[i].split('=');
269      if (typeof query_string[pair[0]] === 'undefined') {
270        query_string[pair[0]] = pair[1];
271      } else if (typeof query_string[pair[0]] === 'string') {
272        var arr = [ query_string[pair[0]], pair[1] ];
273        query_string[pair[0]] = arr;
274      } else {
275        query_string[pair[0]].push(pair[1]);
276      }
277    }
278    return query_string;
279  },
280
281  getHost: function(request) {
282    return this.parse(request).host.replace('www.', '');
283  }
284
285};
286},{}],5:[function(_dereq_,module,exports){
287"use strict";
288
289module.exports = {
290
291  escapeRegexp: function(string) {
292    return string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
293  },
294
295  setDate: function(date, offset) {
296    var utc_offset    = date.getTimezoneOffset() / 60,
297        now_hours     = date.getHours(),
298        custom_offset = offset || offset === 0 ? offset : -utc_offset;
299
300    date.setHours(now_hours + utc_offset + custom_offset);
301
302    var year    = date.getFullYear(),
303        month   = this.setLeadingZeroToInt(date.getMonth() + 1,   2),
304        day     = this.setLeadingZeroToInt(date.getDate(),        2),
305        hour    = this.setLeadingZeroToInt(date.getHours(),       2),
306        minute  = this.setLeadingZeroToInt(date.getMinutes(),     2),
307        second  = this.setLeadingZeroToInt(date.getSeconds(),     2);
308
309    return (year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second);
310  },
311
312  setLeadingZeroToInt: function(num, size) {
313    var s = num + '';
314    while (s.length < size) { s = '0' + s; }
315    return s;
316  },
317
318  randomInt: function(min, max) {
319    return Math.floor(Math.random() * (max - min + 1)) + min;
320  }
321
322};
323
324},{}],6:[function(_dereq_,module,exports){
325"use strict";
326
327var data        = _dereq_('./data'),
328    terms       = _dereq_('./terms'),
329    cookies     = _dereq_('./helpers/cookies'),
330    uri         = _dereq_('./helpers/uri'),
331    utils       = _dereq_('./helpers/utils'),
332    params      = _dereq_('./params'),
333    migrations  = _dereq_('./migrations');
334
335module.exports = function(prefs) {
336
337  var p         = params.fetch(prefs);
338  var get_param = uri.getParam();
339  var domain    = p.domain.host,
340      isolate   = p.domain.isolate,
341      lifetime  = p.lifetime;
342
343  migrations.go(lifetime, domain, isolate);
344
345  var __sbjs_type,
346      __sbjs_source,
347      __sbjs_medium,
348      __sbjs_campaign,
349      __sbjs_content,
350      __sbjs_term
vendor: 5,210 bytes, lines 350-492
350,
351      __sbjs_id;
352
353  function mainData() {
354    var sbjs_data;
355    if (
356        typeof get_param.utm_source        !== 'undefined' ||
357        typeof get_param.utm_medium        !== 'undefined' ||
358        typeof get_param.utm_campaign      !== 'undefined' ||
359        typeof get_param.utm_content       !== 'undefined' ||
360        typeof get_param.utm_term          !== 'undefined' ||
361        typeof get_param.utm_id            !== 'undefined' ||
362        typeof get_param.gclid             !== 'undefined' ||
363        typeof get_param.yclid             !== 'undefined' ||
364        typeof get_param[p.campaign_param] !== 'undefined' ||
365        typeof get_param[p.term_param]     !== 'undefined' ||
366        typeof get_param[p.content_param]  !== 'undefined'
367    ) {
368      setFirstAndCurrentExtraData();
369      sbjs_data = getData(terms.traffic.utm);
370    } else if (checkReferer(terms.traffic.organic)) {
371      setFirstAndCurrentExtraData();
372      sbjs_data = getData(terms.traffic.organic);
373    } else if (!cookies.get(data.containers.session) && checkReferer(terms.traffic.referral)) {
374      setFirstAndCurrentExtraData();
375      sbjs_data = getData(terms.traffic.referral);
376    } else if (!cookies.get(data.containers.first) && !cookies.get(data.containers.current)) {
377      setFirstAndCurrentExtraData();
378      sbjs_data = getData(terms.traffic.typein);
379    } else {
380      return cookies.get(data.containers.current);
381    }
382
383    return sbjs_data;
384  }
385
386  function getData(type) {
387
388    switch (type) {
389
390      case terms.traffic.utm:
391
392        __sbjs_type = terms.traffic.utm;
393
394        if (typeof get_param.utm_source !== 'undefined') {
395          __sbjs_source = get_param.utm_source;
396        } else if (typeof get_param.gclid !== 'undefined') {
397          __sbjs_source = 'google';
398        } else if (typeof get_param.yclid !== 'undefined') {
399          __sbjs_source = 'yandex';
400        } else {
401          __sbjs_source = terms.none;
402        }
403
404        if (typeof get_param.utm_medium !== 'undefined') {
405          __sbjs_medium = get_param.utm_medium;
406        } else if (typeof get_param.gclid !== 'undefined') {
407          __sbjs_medium = 'cpc';
408        } else if (typeof get_param.yclid !== 'undefined') {
409          __sbjs_medium = 'cpc';
410        } else {
411          __sbjs_medium = terms.none;
412        }
413
414        if (typeof get_param.utm_campaign !== 'undefined') {
415          __sbjs_campaign = get_param.utm_campaign;
416        } else if (typeof get_param[p.campaign_param] !== 'undefined') {
417          __sbjs_campaign = get_param[p.campaign_param];
418        } else if (typeof get_param.gclid !== 'undefined') {
419          __sbjs_campaign = 'google_cpc';
420        } else if (typeof get_param.yclid !== 'undefined') {
421          __sbjs_campaign = 'yandex_cpc';
422        } else {
423          __sbjs_campaign = terms.none;
424        }
425
426        if (typeof get_param.utm_content !== 'undefined') {
427          __sbjs_content = get_param.utm_content;
428        } else if (typeof get_param[p.content_param] !== 'undefined') {
429          __sbjs_content = get_param[p.content_param];
430        } else {
431          __sbjs_content = terms.none;
432        }
433
434        __sbjs_id = get_param.utm_id || terms.none;
435
436        if (typeof get_param.utm_term !== 'undefined') {
437          __sbjs_term = get_param.utm_term;
438        } else if (typeof get_param[p.term_param] !== 'undefined') {
439          __sbjs_term = get_param[p.term_param];
440        } else {
441          __sbjs_term = getUtmTerm() || terms.none;
442        }
443
444        break;
445
446      case terms.traffic.organic:
447        __sbjs_type     = terms.traffic.organic;
448        __sbjs_source   = __sbjs_source || uri.getHost(document.referrer);
449        __sbjs_medium   = terms.referer.organic;
450        __sbjs_campaign = terms.none;
451        __sbjs_content  = terms.none;
452        __sbjs_term     = terms.none;
453        __sbjs_id       = terms.none;
454        break;
455
456      case terms.traffic.referral:
457        __sbjs_type     = terms.traffic.referral;
458        __sbjs_source   = __sbjs_source || uri.getHost(document.referrer);
459        __sbjs_medium   = __sbjs_medium || terms.referer.referral;
460        __sbjs_campaign = terms.none;
461        __sbjs_content  = uri.parse(document.referrer).path;
462        __sbjs_term     = terms.none;
463        __sbjs_id       = terms.none;
464        break;
465
466      case terms.traffic.typein:
467        __sbjs_type     = terms.traffic.typein;
468        __sbjs_source   = p.typein_attributes.source;
469        __sbjs_medium   = p.typein_attributes.medium;
470        __sbjs_campaign = terms.none;
471        __sbjs_content  = terms.none;
472        __sbjs_term     = terms.none;
473        __sbjs_id       = terms.none;
474        break;
475
476      default:
477        __sbjs_type     = terms.oops;
478        __sbjs_source   = terms.oops;
479        __sbjs_medium   = terms.oops;
480        __sbjs_campaign = terms.oops;
481        __sbjs_content  = terms.oops;
482        __sbjs_term     = terms.oops;
483        __sbjs_id       = terms.oops;
484    }
485    var sbjs_data = {
486      type:             __sbjs_type,
487      source:           __sbjs_source,
488      medium:           __sbjs_medium,
489      campaign:         __sbjs_campaign,
490      content:          __sbjs_content,
491      term:             __sbjs_term,
492      id:               __sbjs_id
vendor: 5,026 bytes, lines 492-642
492
493    };
494
495    return data.pack.main(sbjs_data);
496
497  }
498
499  function getUtmTerm() {
500    var referer = document.referrer;
501    if (get_param.utm_term) {
502      return get_param.utm_term;
503    } else if (referer && uri.parse(referer).host && uri.parse(referer).host.match(/^(?:.*\.)?yandex\..{2,9}$/i)) {
504      try {
505        return uri.getParam(uri.parse(document.referrer).query).text;
506      } catch (err) {
507        return false;
508      }
509    } else {
510      return false;
511    }
512  }
513
514  function checkReferer(type) {
515    var referer = document.referrer;
516    switch(type) {
517      case terms.traffic.organic:
518        return (!!referer && checkRefererHost(referer) && isOrganic(referer));
519      case terms.traffic.referral:
520        return (!!referer && checkRefererHost(referer) && isReferral(referer));
521      default:
522        return false;
523    }
524  }
525
526  function checkRefererHost(referer) {
527    if (p.domain) {
528      if (!isolate) {
529        var host_regex = new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(domain) + '$', 'i');
530        return !(uri.getHost(referer).match(host_regex));
531      } else {
532        return (uri.getHost(referer) !== uri.getHost(domain));
533      }
534    } else {
535      return (uri.getHost(referer) !== uri.getHost(document.location.href));
536    }
537  }
538
539  function isOrganic(referer) {
540
541    var y_host  = 'yandex',
542        y_param = 'text',
543        g_host  = 'google';
544
545    var y_host_regex  = new RegExp('^(?:.*\\.)?'  + utils.escapeRegexp(y_host)  + '\\..{2,9}$'),
546        y_param_regex = new RegExp('.*'           + utils.escapeRegexp(y_param) + '=.*'),
547        g_host_regex  = new RegExp('^(?:www\\.)?' + utils.escapeRegexp(g_host)  + '\\..{2,9}$');
548
549    if (
550        !!uri.parse(referer).query &&
551        !!uri.parse(referer).host.match(y_host_regex) &&
552        !!uri.parse(referer).query.match(y_param_regex)
553      ) {
554      __sbjs_source = y_host;
555      return true;
556    } else if (!!uri.parse(referer).host.match(g_host_regex)) {
557      __sbjs_source = g_host;
558      return true;
559    } else if (!!uri.parse(referer).query) {
560      for (var i = 0; i < p.organics.length; i++) {
561        if (
562            uri.parse(referer).host.match(new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(p.organics[i].host)  + '$', 'i')) &&
563            uri.parse(referer).query.match(new RegExp('.*'         + utils.escapeRegexp(p.organics[i].param) + '=.*', 'i'))
564          ) {
565          __sbjs_source = p.organics[i].display || p.organics[i].host;
566          return true;
567        }
568        if (i + 1 === p.organics.length) {
569          return false;
570        }
571      }
572    } else {
573      return false;
574    }
575  }
576
577  function isReferral(referer) {
578    if (p.referrals.length > 0) {
579      for (var i = 0; i < p.referrals.length; i++) {
580        if (uri.parse(referer).host.match(new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(p.referrals[i].host) + '$', 'i'))) {
581          __sbjs_source = p.referrals[i].display  || p.referrals[i].host;
582          __sbjs_medium = p.referrals[i].medium   || terms.referer.referral;
583          return true;
584        }
585        if (i + 1 === p.referrals.length) {
586          __sbjs_source = uri.getHost(referer);
587          return true;
588        }
589      }
590    } else {
591      __sbjs_source = uri.getHost(referer);
592      return true;
593    }
594  }
595
596  function setFirstAndCurrentExtraData() {
597    cookies.set(data.containers.current_extra, data.pack.extra(p.timezone_offset), lifetime, domain, isolate);
598    if (!cookies.get(data.containers.first_extra)) {
599      cookies.set(data.containers.first_extra, data.pack.extra(p.timezone_offset), lifetime, domain, isolate);
600    }
601  }
602
603  (function setData() {
604
605    // Main data
606    cookies.set(data.containers.current, mainData(), lifetime, domain, isolate);
607    if (!cookies.get(data.containers.first)) {
608      cookies.set(data.containers.first, cookies.get(data.containers.current), lifetime, domain, isolate);
609    }
610
611    // User data
612    var visits, udata;
613    if (!cookies.get(data.containers.udata)) {
614      visits  = 1;
615      udata   = data.pack.user(visits, p.user_ip);
616    } else {
617      visits  = parseInt(cookies.parse(data.containers.udata)[cookies.unsbjs(data.containers.udata)][data.aliases.udata.visits]) || 1;
618      visits  = cookies.get(data.containers.session) ? visits : visits + 1;
619      udata   = data.pack.user(visits, p.user_ip);
620    }
621    cookies.set(data.containers.udata, udata, lifetime, domain, isolate);
622
623    // Session
624    var pages_count;
625    if (!cookies.get(data.containers.session)) {
626      pages_count = 1;
627    } else {
628      pages_count = parseInt(cookies.parse(data.containers.session)[cookies.unsbjs(data.containers.session)][data.aliases.session.pages_seen]) || 1;
629      pages_count += 1;
630    }
631    cookies.set(data.containers.session, data.pack.session(pages_count), p.session_length, domain, isolate);
632
633    // Promocode
634    if (p.promocode && !cookies.get(data.containers.promocode)) {
635      cookies.set(data.containers.promocode, data.pack.promo(p.promocode), lifetime, domain, isolate);
636    }
637
638  })();
639
640  return cookies.parse(data.containers);
641
642};
vendor: 3,407 bytes, lines 643-761
643
644},{"./data":2,"./helpers/cookies":3,"./helpers/uri":4,"./helpers/utils":5,"./migrations":7,"./params":8,"./terms":9}],7:[function(_dereq_,module,exports){
645"use strict";
646
647var data    = _dereq_('./data'),
648    cookies = _dereq_('./helpers/cookies');
649
650module.exports = {
651
652  go: function(lifetime, domain, isolate) {
653
654    var migrate = this.migrations,
655        _with   = { l: lifetime, d: domain, i: isolate };
656
657    var i;
658
659    if (!cookies.get(data.containers.first) && !cookies.get(data.service.migrations)) {
660
661      var mids = [];
662      for (i = 0; i < migrate.length; i++) { mids.push(migrate[i].id); }
663
664      var advance = '';
665      for (i = 0; i < mids.length; i++) {
666        advance += mids[i] + '=1';
667        if (i < mids.length - 1) { advance += data.delimiter; }
668      }
669      cookies.set(data.service.migrations, advance, _with.l, _with.d, _with.i);
670
671    } else if (!cookies.get(data.service.migrations)) {
672
673      // We have only one migration for now, so just
674      for (i = 0; i < migrate.length; i++) {
675        migrate[i].go(migrate[i].id, _with);
676      }
677
678    }
679
680  },
681
682  migrations: [
683
684    {
685      id: '1418474375998',
686      version: '1.0.0-beta',
687      go: function(mid, _with) {
688
689        var success = mid + '=1',
690            fail    = mid + '=0';
691
692        var safeReplace = function($0, $1, $2) {
693          return ($1 || $2 ? $0 : data.delimiter);
694        };
695
696        try {
697
698          // Switch delimiter and renew cookies
699          var _in = [];
700          for (var prop in data.containers) {
701            if (data.containers.hasOwnProperty(prop)) {
702              _in.push(data.containers[prop]);
703            }
704          }
705
706          for (var i = 0; i < _in.length; i++) {
707            if (cookies.get(_in[i])) {
708              var buffer = cookies.get(_in[i]).replace(/(\|)?\|(\|)?/g, safeReplace);
709              cookies.destroy(_in[i], _with.d, _with.i);
710              cookies.destroy(_in[i], _with.d, !_with.i);
711              cookies.set(_in[i], buffer, _with.l, _with.d, _with.i);
712            }
713          }
714
715          // Update `session`
716          if (cookies.get(data.containers.session)) {
717            cookies.set(data.containers.session, data.pack.session(0), _with.l, _with.d, _with.i);
718          }
719
720          // Yay!
721          cookies.set(data.service.migrations, success, _with.l, _with.d, _with.i);
722
723        } catch (err) {
724          // Oops
725          cookies.set(data.service.migrations, fail, _with.l, _with.d, _with.i);
726        }
727      }
728    }
729
730  ]
731
732};
733},{"./data":2,"./helpers/cookies":3}],8:[function(_dereq_,module,exports){
734"use strict";
735
736var terms = _dereq_('./terms'),
737    uri   = _dereq_('./helpers/uri');
738
739module.exports = {
740
741  fetch: function(prefs) {
742
743    var user   = prefs || {},
744        params = {};
745
746    // Set `lifetime of the cookie` in months
747    params.lifetime = this.validate.checkFloat(user.lifetime) || 6;
748    params.lifetime = parseInt(params.lifetime * 30 * 24 * 60);
749
750    // Set `session length` in minutes
751    params.session_length = this.validate.checkInt(user.session_length) || 30;
752
753    // Set `timezone offset` in hours
754    params.timezone_offset = this.validate.checkInt(user.timezone_offset);
755
756    // Set `campaign param` for AdWords links
757    params.campaign_param = user.campaign_param || false;
758
759    // Set `term param` and `content param` for AdWords links
760    params.term_param = user.term_param || false;
761    params.content_param = user.content
vendor: 3,623 bytes, lines 761-878
761_param || false;
762
763    // Set `user ip`
764    params.user_ip = user.user_ip || terms.none;
765
766    // Set `promocode`
767    if (user.promocode) {
768      params.promocode = {};
769      params.promocode.min = parseInt(user.promocode.min) || 100000;
770      params.promocode.max = parseInt(user.promocode.max) || 999999;
771    } else {
772      params.promocode = false;
773    }
774
775    // Set `typein attributes`
776    if (user.typein_attributes && user.typein_attributes.source && user.typein_attributes.medium) {
777      params.typein_attributes = {};
778      params.typein_attributes.source = user.typein_attributes.source;
779      params.typein_attributes.medium = user.typein_attributes.medium;
780    } else {
781      params.typein_attributes = { source: '(direct)', medium: '(none)' };
782    }
783
784    // Set `domain`
785    if (user.domain && this.validate.isString(user.domain)) {
786      params.domain = { host: user.domain, isolate: false };
787    } else if (user.domain && user.domain.host) {
788      params.domain = user.domain;
789    } else {
790      params.domain = { host: uri.getHost(document.location.hostname), isolate: false };
791    }
792
793    // Set `referral sources`
794    params.referrals = [];
795
796    if (user.referrals && user.referrals.length > 0) {
797      for (var ir = 0; ir < user.referrals.length; ir++) {
798        if (user.referrals[ir].host) {
799          params.referrals.push(user.referrals[ir]);
800        }
801      }
802    }
803
804    // Set `organic sources`
805    params.organics = [];
806
807    if (user.organics && user.organics.length > 0) {
808      for (var io = 0; io < user.organics.length; io++) {
809        if (user.organics[io].host && user.organics[io].param) {
810          params.organics.push(user.organics[io]);
811        }
812      }
813    }
814
815    params.organics.push({ host: 'bing.com',      param: 'q',     display: 'bing'            });
816    params.organics.push({ host: 'yahoo.com',     param: 'p',     display: 'yahoo'           });
817    params.organics.push({ host: 'about.com',     param: 'q',     display: 'about'           });
818    params.organics.push({ host: 'aol.com',       param: 'q',     display: 'aol'             });
819    params.organics.push({ host: 'ask.com',       param: 'q',     display: 'ask'             });
820    params.organics.push({ host: 'globososo.com', param: 'q',     display: 'globo'           });
821    params.organics.push({ host: 'go.mail.ru',    param: 'q',     display: 'go.mail.ru'      });
822    params.organics.push({ host: 'rambler.ru',    param: 'query', display: 'rambler'         });
823    params.organics.push({ host: 'tut.by',        param: 'query', display: 'tut.by'          });
824
825    params.referrals.push({ host: 't.co',                         display: 'twitter.com'     });
826    params.referrals.push({ host: 'plus.url.google.com',          display: 'plus.google.com' });
827
828
829    return params;
830
831  },
832
833  validate: {
834
835    checkFloat: function(v) {
836      return v && this.isNumeric(parseFloat(v)) ? parseFloat(v) : false;
837    },
838
839    checkInt: function(v) {
840      return v && this.isNumeric(parseInt(v)) ? parseInt(v) : false;
841    },
842
843    isNumeric: function(v){
844      return !isNaN(v);
845    },
846
847    isString: function(v) {
848      return Object.prototype.toString.call(v) === '[object String]';
849    }
850
851  }
852
853};
854},{"./helpers/uri":4,"./terms":9}],9:[function(_dereq_,module,exports){
855"use strict";
856
857module.exports = {
858
859  traffic: {
860    utm:        'utm',
861    organic:    'organic',
862    referral:   'referral',
863    typein:     'typein'
864  },
865
866  referer: {
867    referral:   'referral',
868    organic:    'organic',
869    social:     'social'
870  },
871
872  none:         '(none)',
873  oops:         '(Houston, we have a problem)'
874
875};
876
877},{}]},{},[1])(1)
878});

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.