PluginProbe ʕ •ᴥ•ʔ
WooCommerce / 10.9.4
WooCommerce v10.9.4
10.9.4 10.9.3 10.9.2 10.9.1 10.9.0 10.9.0-rc.1 10.9.0-beta.2 10.9.0-beta.1 10.8.1 10.8.0 10.8.0-rc.1 10.8.0-beta.2 10.8.0-beta.1 7.8.0-beta.1 7.8.0-beta.2 7.8.0-rc.1 7.8.0-rc.2 7.8.1 7.8.2 7.8.3 7.8.4 7.9.0 7.9.0-beta.1 7.9.0-beta.2 7.9.0-rc.2 7.9.0-rc.3 7.9.1 7.9.2 8.0.0 8.0.0-beta.1 8.0.0-beta.2 8.0.0-rc.1 8.0.0-rc.2 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.1.0 8.1.0-beta.1 8.1.0-rc.1 8.1.0-rc.2 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 8.2.0-beta.1 8.2.0-rc.1 8.2.0-rc.2 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.3.0 8.3.0-beta.1 8.3.0-rc.1 8.3.0-rc.2 8.3.1 8.3.2 8.3.3 8.3.4 8.4.0 8.4.0-beta.1 8.4.0-rc.1 8.4.1 8.4.2 8.4.3 8.5.0 8.5.0-beta.1 8.5.0-rc.1 8.5.1 8.5.2 8.5.3 8.5.4 8.5.5 8.6.0 8.6.0-beta.1 8.6.0-rc.1 8.6.1 8.6.2 8.6.3 8.6.4 8.7.0 8.7.0-beta.1 8.7.0-beta.2 8.7.0-rc.1 8.7.1 8.7.2 8.7.3 8.8.0 8.8.0-beta.1 8.8.0-rc.1 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.8.6 8.8.7 8.9.0 8.9.0-beta.1 8.9.0-rc.1 8.9.1 8.9.2 8.9.3 8.9.4 8.9.5 9.0.0 9.0.0-beta.1 9.0.0-beta.2 9.0.0-rc.1 9.0.1 9.0.2 9.0.3 9.0.4 9.1.0 9.1.0-beta.1 9.1.0-rc.1 9.1.1 9.1.2 9.1.3 9.1.4 9.1.5 9.1.6 9.2.0 9.2.0-beta.1 9.2.0-rc.1 9.2.1 9.2.2 9.2.3 9.2.4 9.2.5 9.3.0 9.3.0-beta.1 9.3.0-rc.1 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.3.6 9.4.0 9.4.0-beta.1 9.4.0-beta.2 9.4.0-rc.1 9.4.0-rc.2 9.4.0-rc.3 9.4.0-rc.4 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5 9.5.0 9.5.0-beta.1 9.5.0-beta.2 9.5.0-rc.1 9.5.1 9.5.2 9.5.3 9.5.4 9.6.0 9.6.0-beta.1 9.6.0-beta.2 9.6.0-rc.1 9.6.1 9.6.2 9.6.3 9.6.4 9.7.0 9.7.0-beta.1 9.7.0-rc.1 9.7.1 9.7.2 9.7.3 9.8.0 9.8.0-beta.1 9.8.0-rc.1 9.8.1 9.8.2 9.8.3 9.8.4 9.8.5 9.8.6 9.8.7 9.9.0 9.9.0-beta.1 9.9.0-rc.1 9.9.1 9.9.2 9.9.3 9.9.4 9.9.5 9.9.6 9.9.7 3.7.3 7.1.2 3.8.0 7.2.0 3.8.0-beta.1 7.2.0-beta.1 3.8.0-rc.1 7.2.0-beta.2 3.8.0-rc.2 7.2.0-rc.1 3.8.1 7.2.0-rc.2 3.8.2 7.2.1 3.8.3 7.2.2 3.9.0 7.2.3 3.9.0-beta.1 7.2.4 3.9.0-beta.2 7.3.0 3.9.0-rc.1 7.3.0-beta.1 3.9.0-rc.2 7.3.0-beta.2 3.9.0-rc.3 7.3.0-rc.1 3.9.0-rc.4 7.3.0-rc.2 3.9.1 7.3.1 3.9.2 7.4.0 3.9.3 7.4.0-beta.1 3.9.4 7.4.0-beta.2 3.9.5 7.4.0-rc.1 4.0.0 7.4.0-rc.2 4.0.0-beta.1 7.4.1 4.0.0-rc.1 7.4.2 4.0.0-rc.2 7.5.0 4.0.1 7.5.0-beta.1 4.0.2 7.5.0-beta.2 4.0.3 7.5.0-rc.1 4.0.4 7.5.1 4.1.0 7.5.2 4.1.0-beta.1 7.6.0 4.1.0-beta.2 7.6.0-beta.1 4.1.0-rc.1 7.6.0-beta.2 4.1.0-rc.2 7.6.0-rc.1 4.1.1 7.6.0-rc.2 4.1.2 7.6.0-rc.3 4.1.3 7.6.1 4.1.4 7.6.2 4.2.0 7.7.0 4.2.0-RC.1 7.7.0-beta.1 4.2.0-RC.2 7.7.0-beta.2 4.2.0-beta.1 7.7.0-rc.1 4.2.1 7.7.1 4.2.2 7.7.2 4.2.3 7.7.3 4.2.4 7.8.0 4.2.5 4.3.0 4.3.0-beta.1 4.3.0-rc.1 4.3.0-rc.2 4.3.0-rc.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.4.0 4.4.0-beta.1 4.4.0-rc.1 4.4.1 4.4.2 4.4.3 4.4.4 4.5.0 4.5.0-beta.1 4.5.0-rc.1 4.5.0-rc.3 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.6.0-beta.1 4.6.0-rc.1 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.7.0 4.7.0-beta.1 4.7.0-beta.2 4.7.0-rc.1 4.7.1 4.7.1-beta.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.0-beta.1 4.8.0-rc.1 4.8.0-rc.2 4.8.1 4.8.2 4.8.3 4.9.0 4.9.0-beta.1 4.9.0-rc.1 4.9.0-rc.2 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 5.0.0 5.0.0-beta.1 5.0.0-beta.2 5.0.0-rc.1 5.0.0-rc.2 5.0.0-rc.3 5.0.1 5.0.2 5.0.3 5.1.0 5.1.0-beta.1 5.1.0-rc.1 trunk 5.1.1 10.0.0 5.1.2 10.0.0-rc.1 5.1.3 10.0.0-rc.2 5.2.0 10.0.1 5.2.0-beta.1 10.0.2 5.2.0-rc.1 10.0.3 5.2.0-rc.2 10.0.4 5.2.1 10.0.5 5.2.2 10.0.6 5.2.3 10.1.0 5.2.4 10.1.0-rc.1 5.2.5 10.1.0-rc.2 5.3.0 10.1.0-rc.3 5.3.0-beta.1 10.1.0-rc.4 5.3.0-rc.1 10.1.1 5.3.0-rc.2 10.1.2 5.3.1 10.1.3 5.3.2 10.1.4 5.3.3 10.2.0 5.4.0 10.2.0-beta.1 5.4.0-beta.1 10.2.0-beta.2 5.4.0-rc.1 10.2.0-rc.1 5.4.1 10.2.1 5.4.2 10.2.2 5.4.3 10.2.3 5.4.4 10.2.4 5.4.5 10.3.0 5.5.0 10.3.0-beta.1 5.5.0-beta.1 10.3.0-beta.2 5.5.0-rc.1 10.3.0-rc.1 5.5.0-rc.2 10.3.0-rc.2 5.5.1 10.3.1 5.5.2 10.3.2 5.5.3 10.3.3 5.5.4 10.3.4 5.5.5 10.3.5 5.6.0 10.3.6 5.6.0-beta.1 10.3.7 5.6.0-rc.1 10.3.8 5.6.0-rc.2 10.4.0 5.6.1 10.4.0-beta.1 5.6.2 10.4.0-beta.2 5.6.3 10.4.0-rc.1 5.7.0 10.4.1 5.7.0-beta.1 10.4.2 5.7.0-rc.1 10.4.3 5.7.1 10.4.4 5.7.2 10.5.0 5.7.3 10.5.0-beta.1 5.8.0 10.5.0-beta.2 5.8.0-beta.1 10.5.0-rc.1 5.8.0-beta.2 10.5.0-rc.2 5.8.0-rc.1 10.5.0-rc.3 5.8.1 10.5.1 5.8.2 10.5.2 5.9.0 10.5.3 5.9.0-beta.1 10.6.0 5.9.0-rc.1 10.6.0-beta.1 5.9.0-rc.2 10.6.0-beta.2 5.9.1 10.6.0-rc.1 5.9.2 10.6.1 6.0.0 10.6.2 6.0.0-beta.1 10.7.0 6.0.0-rc.1 10.7.0-beta.1 6.0.1 10.7.0-beta.2 6.0.2 10.7.0-rc.1 6.1.0 3.0.0 6.1.0-beta.1 3.0.1 6.1.0-rc.1 3.0.2 6.1.0-rc.2 3.0.3 6.1.1 3.0.4 6.1.2 3.0.5 6.1.3 3.0.6 6.2.0 3.0.7 6.2.0-beta.1 3.0.8 6.2.0-rc.1 3.0.9 6.2.0-rc.2 3.1.0 6.2.1 3.1.1 6.2.2 3.1.2 6.2.3 3.2.0 6.3.0 3.2.1 6.3.0-beta.1 3.2.2 6.3.0-rc.1 3.2.3 6.3.0-rc.2 3.2.4 6.3.1 3.2.5 6.3.2 3.2.6 6.4.0 3.3.0 6.4.0-beta.1 3.3.1 6.4.0-rc.1 3.3.2 6.4.1 3.3.2-rc.1 6.4.2 3.3.3 6.5.0 3.3.4 6.5.0-beta.1 3.3.5 6.5.0-rc.1 3.3.6 6.5.0-rc.2 3.4.0 6.5.1 3.4.0-beta.1 6.5.2 3.4.0-rc.2 6.6.0 3.4.1 6.6.0-beta.1 3.4.2 6.6.0-rc.1 3.4.3 6.6.0-rc.2 3.4.4 6.6.1 3.4.5 6.6.2 3.4.6 6.7.0 3.4.7 6.7.0-beta.1 3.4.8 6.7.0-beta.2 3.5.0 6.7.0-rc.1 3.5.0-beta.1 6.7.1 3.5.0-rc.1 6.8.0 3.5.0-rc.2 6.8.0-beta.1 3.5.1 6.8.0-beta.2 3.5.10 6.8.0-rc.1 3.5.2 6.8.1 3.5.3 6.8.2 3.5.4 6.8.3 3.5.5 6.9.0 3.5.6 6.9.0-beta.1 3.5.7 6.9.0-beta.2 3.5.8 6.9.0-rc.1 3.5.9 6.9.1 3.6.0 6.9.2 3.6.0-beta.1 6.9.3 3.6.0-rc.1 6.9.4 3.6.0-rc.2 6.9.5 3.6.0-rc.3 7.0.0 3.6.1 7.0.0-beta.1 3.6.2 7.0.0-beta.2 3.6.3 7.0.0-beta.3 3.6.4 7.0.0-rc.1 3.6.5 7.0.0-rc.2 3.6.6 7.0.1 3.6.7 7.0.2 3.7.0 7.1.0 3.7.0-beta.1 7.1.0-beta.1 3.7.0-rc.1 7.1.0-beta.2 3.7.0-rc.2 7.1.0-rc.1 3.7.1 7.1.0-rc.2 3.7.2 7.1.1
woocommerce / assets / js / sourcebuster / sourcebuster.js
woocommerce / assets / js / sourcebuster Last commit date
LICENSE 2 years ago sourcebuster.js 2 years ago sourcebuster.min.js 2 years ago
sourcebuster.js
936 lines
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
4 var init = _dereq_('./init');
5
6 var 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
15 module.exports = sbjs;
16 },{"./init":6}],2:[function(_dereq_,module,exports){
17 "use strict";
18
19 var terms = _dereq_('./terms'),
20 utils = _dereq_('./helpers/utils');
21
22 var 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 platform: 'plt',
51 format: 'fmt',
52 tactic: 'tct'
53 },
54
55 extra: {
56 fire_date: 'fd',
57 entrance_point: 'ep',
58 referer: 'rf'
59 },
60
61 session: {
62 pages_seen: 'pgs',
63 current_page: 'cpg'
64 },
65
66 udata: {
67 visits: 'vst',
68 ip: 'uip',
69 agent: 'uag'
70 },
71
72 promo: 'code'
73
74 },
75
76 pack: {
77
78 main: function(sbjs) {
79 return (
80 data.aliases.main.type + '=' + sbjs.type + data.delimiter +
81 data.aliases.main.source + '=' + sbjs.source + data.delimiter +
82 data.aliases.main.medium + '=' + sbjs.medium + data.delimiter +
83 data.aliases.main.campaign + '=' + sbjs.campaign + data.delimiter +
84 data.aliases.main.content + '=' + sbjs.content + data.delimiter +
85 data.aliases.main.term + '=' + sbjs.term + data.delimiter +
86 data.aliases.main.id + '=' + sbjs.id + data.delimiter +
87 data.aliases.main.platform + '=' + sbjs.platform + data.delimiter +
88 data.aliases.main.format + '=' + sbjs.format + data.delimiter +
89 data.aliases.main.tactic + '=' + sbjs.tactic
90 );
91 },
92
93 extra: function(timezone_offset) {
94 return (
95 data.aliases.extra.fire_date + '=' + utils.setDate(new Date, timezone_offset) + data.delimiter +
96 data.aliases.extra.entrance_point + '=' + document.location.href + data.delimiter +
97 data.aliases.extra.referer + '=' + (document.referrer || terms.none)
98 );
99 },
100
101 user: function(visits, user_ip) {
102 return (
103 data.aliases.udata.visits + '=' + visits + data.delimiter +
104 data.aliases.udata.ip + '=' + user_ip + data.delimiter +
105 data.aliases.udata.agent + '=' + navigator.userAgent
106 );
107 },
108
109 session: function(pages) {
110 return (
111 data.aliases.session.pages_seen + '=' + pages + data.delimiter +
112 data.aliases.session.current_page + '=' + document.location.href
113 );
114 },
115
116 promo: function(promo) {
117 return (
118 data.aliases.promo + '=' + utils.setLeadingZeroToInt(utils.randomInt(promo.min, promo.max), promo.max.toString().length)
119 );
120 }
121
122 }
123 };
124
125 module.exports = data;
126
127 },{"./helpers/utils":5,"./terms":9}],3:[function(_dereq_,module,exports){
128 "use strict";
129
130 var delimiter = _dereq_('../data').delimiter;
131
132 module.exports = {
133
134 useBase64: false, // Base64 flag set to false by default
135
136 setBase64Flag: function(value) {
137 this.useBase64 = value;
138 },
139
140 encodeData: function(s) {
141 return encodeURIComponent(s).replace(/\!/g, '%21')
142 .replace(/\~/g, '%7E')
143 .replace(/\*/g, '%2A')
144 .replace(/\'/g, '%27')
145 .replace(/\(/g, '%28')
146 .replace(/\)/g, '%29');
147 },
148
149 decodeData: function(s) {
150 try {
151 return decodeURIComponent(s).replace(/\%21/g, '!')
152 .replace(/\%7E/g, '~')
153 .replace(/\%2A/g, '*')
154 .replace(/\%27/g, "'")
155 .replace(/\%28/g, '(')
156 .replace(/\%29/g, ')');
157 } catch(err1) {
158 // try unescape for backward compatibility
159 try { return unescape(s); } catch(err2) { return ''; }
160 }
161 },
162
163 set: function(name, value, minutes, domain, excl_subdomains) {
164 var expires, basehost;
165
166 if (minutes) {
167 var date = new Date();
168 date.setTime(date.getTime() + (minutes * 60 * 1000));
169 expires = '; expires=' + date.toGMTString();
170 } else {
171 expires = '';
172 }
173 if (domain && !excl_subdomains) {
174 basehost = ';domain=.' + domain;
175 } else {
176 basehost = '';
177 }
178 var cookie_content = this.encodeData(value);
179 if (this.useBase64) {
180 // Base64 encoding and removing equal sign padding
181 cookie_content = btoa(cookie_content).replace(/=+$/, '');
182 }
183 document.cookie = this.encodeData(name) + '=' + cookie_content + expires + basehost + '; path=/';
184 },
185
186 get: function(name) {
187 var nameEQ = this.encodeData(name) + '=',
188 ca = document.cookie.split(';');
189
190 for (var i = 0; i < ca.length; i++) {
191 var c = ca[i];
192 while (c.charAt(0) === ' ') { c = c.substring(1, c.length); }
193 if (c.indexOf(nameEQ) === 0) {
194 var cookie_content = c.substring(nameEQ.length, c.length);
195 // Decode the content if it only contains Base64-valid characters
196 // Non-alphanumeric characters indicate that the cookie data is not encoded
197 if (/^[A-Za-z0-9+/]+$/.test(cookie_content)) {
198 try {
199 // Attempt to decode the Base64 string (after padding with = to make it a multiple of 4)
200 cookie_content = atob( cookie_content.padEnd(Math.ceil(cookie_content.length / 4) * 4, "=") );
201 } catch (error) {
202 // If the Base64 string is invalid, just keep the cookie content as is
203 }
204 }
205 return this.decodeData(cookie_content);
206 }
207 }
208 return null;
209 },
210
211 destroy: function(name, domain, excl_subdomains) {
212 this.set(name, '', -1, domain, excl_subdomains);
213 },
214
215 parse: function(yummy) {
216
217 var cookies = [],
218 data = {};
219
220 if (typeof yummy === 'string') {
221 cookies.push(yummy);
222 } else {
223 for (var prop in yummy) {
224 if (yummy.hasOwnProperty(prop)) {
225 cookies.push(yummy[prop]);
226 }
227 }
228 }
229
230 for (var i1 = 0; i1 < cookies.length; i1++) {
231 var cookie_array;
232 data[this.unsbjs(cookies[i1])] = {};
233 if (this.get(cookies[i1])) {
234 cookie_array = this.get(cookies[i1]).split(delimiter);
235 } else {
236 cookie_array = [];
237 }
238 for (var i2 = 0; i2 < cookie_array.length; i2++) {
239 var tmp_array = cookie_array[i2].split('='),
240 result_array = tmp_array.splice(0, 1);
241 result_array.push(tmp_array.join('='));
242 data[this.unsbjs(cookies[i1])][result_array[0]] = this.decodeData(result_array[1]);
243 }
244 }
245
246 return data;
247
248 },
249
250 unsbjs: function (string) {
251 return string.replace('sbjs_', '');
252 }
253
254 };
255
256 },{"../data":2}],4:[function(_dereq_,module,exports){
257 "use strict";
258
259 module.exports = {
260
261 parse: function(str) {
262 var o = this.parseOptions,
263 m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str),
264 uri = {},
265 i = 14;
266
267 while (i--) { uri[o.key[i]] = m[i] || ''; }
268
269 uri[o.q.name] = {};
270 uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
271 if ($1) { uri[o.q.name][$1] = $2; }
272 });
273
274 return uri;
275 },
276
277 parseOptions: {
278 strictMode: false,
279 key: ['source','protocol','authority','userInfo','user','password','host','port','relative','path','directory','file','query','anchor'],
280 q: {
281 name: 'queryKey',
282 parser: /(?:^|&)([^&=]*)=?([^&]*)/g
283 },
284 parser: {
285 strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
286 loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
287 }
288 },
289
290 getParam: function(custom_params) {
291 var query_string = {},
292 query = custom_params ? custom_params : window.location.search.substring(1),
293 vars = query.split('&');
294
295 for (var i = 0; i < vars.length; i++) {
296 var pair = vars[i].split('=');
297 if (typeof query_string[pair[0]] === 'undefined') {
298 query_string[pair[0]] = pair[1];
299 } else if (typeof query_string[pair[0]] === 'string') {
300 var arr = [ query_string[pair[0]], pair[1] ];
301 query_string[pair[0]] = arr;
302 } else {
303 query_string[pair[0]].push(pair[1]);
304 }
305 }
306 return query_string;
307 },
308
309 getHost: function(request) {
310 return this.parse(request).host.replace('www.', '');
311 }
312
313 };
314 },{}],5:[function(_dereq_,module,exports){
315 "use strict";
316
317 module.exports = {
318
319 escapeRegexp: function(string) {
320 return string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
321 },
322
323 setDate: function(date, offset) {
324 var utc_offset = date.getTimezoneOffset() / 60,
325 now_hours = date.getHours(),
326 custom_offset = offset || offset === 0 ? offset : -utc_offset;
327
328 date.setHours(now_hours + utc_offset + custom_offset);
329
330 var year = date.getFullYear(),
331 month = this.setLeadingZeroToInt(date.getMonth() + 1, 2),
332 day = this.setLeadingZeroToInt(date.getDate(), 2),
333 hour = this.setLeadingZeroToInt(date.getHours(), 2),
334 minute = this.setLeadingZeroToInt(date.getMinutes(), 2),
335 second = this.setLeadingZeroToInt(date.getSeconds(), 2);
336
337 return (year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second);
338 },
339
340 setLeadingZeroToInt: function(num, size) {
341 var s = num + '';
342 while (s.length < size) { s = '0' + s; }
343 return s;
344 },
345
346 randomInt: function(min, max) {
347 return Math.floor(Math.random() * (max - min + 1)) + min;
348 }
349
350 };
351
352 },{}],6:[function(_dereq_,module,exports){
353 "use strict";
354
355 var data = _dereq_('./data'),
356 terms = _dereq_('./terms'),
357 cookies = _dereq_('./helpers/cookies'),
358 uri = _dereq_('./helpers/uri'),
359 utils = _dereq_('./helpers/utils'),
360 params = _dereq_('./params'),
361 migrations = _dereq_('./migrations');
362
363 module.exports = function(prefs) {
364
365 var p = params.fetch(prefs);
366 var get_param = uri.getParam();
367 var domain = p.domain.host,
368 isolate = p.domain.isolate,
369 lifetime = p.lifetime;
370
371 cookies.setBase64Flag( p.base64 );
372
373 migrations.go(lifetime, domain, isolate);
374
375 var __sbjs_type,
376 __sbjs_source,
377 __sbjs_medium,
378 __sbjs_campaign,
379 __sbjs_content,
380 __sbjs_term,
381 __sbjs_id,
382 __sbjs_platform,
383 __sbjs_format,
384 __sbjs_tactic;
385
386 function mainData() {
387 var sbjs_data;
388 if (
389 typeof get_param.utm_source !== 'undefined' ||
390 typeof get_param.utm_medium !== 'undefined' ||
391 typeof get_param.utm_campaign !== 'undefined' ||
392 typeof get_param.utm_content !== 'undefined' ||
393 typeof get_param.utm_term !== 'undefined' ||
394 typeof get_param.utm_id !== 'undefined' ||
395 typeof get_param.utm_source_platform !== 'undefined' ||
396 typeof get_param.utm_creative_format !== 'undefined' ||
397 typeof get_param.utm_marketing_tactic !== 'undefined' ||
398 typeof get_param.gclid !== 'undefined' ||
399 typeof get_param.yclid !== 'undefined' ||
400 typeof get_param[p.campaign_param] !== 'undefined' ||
401 typeof get_param[p.term_param] !== 'undefined' ||
402 typeof get_param[p.content_param] !== 'undefined'
403 ) {
404 setFirstAndCurrentExtraData();
405 sbjs_data = getData(terms.traffic.utm);
406 } else if (checkReferer(terms.traffic.organic)) {
407 setFirstAndCurrentExtraData();
408 sbjs_data = getData(terms.traffic.organic);
409 } else if (!cookies.get(data.containers.session) && checkReferer(terms.traffic.referral)) {
410 setFirstAndCurrentExtraData();
411 sbjs_data = getData(terms.traffic.referral);
412 } else if (!cookies.get(data.containers.first) && !cookies.get(data.containers.current)) {
413 setFirstAndCurrentExtraData();
414 sbjs_data = getData(terms.traffic.typein);
415 } else {
416 return cookies.get(data.containers.current);
417 }
418
419 return sbjs_data;
420 }
421
422 function getData(type) {
423
424 switch (type) {
425
426 case terms.traffic.utm:
427
428 __sbjs_type = terms.traffic.utm;
429
430 if (typeof get_param.utm_source !== 'undefined') {
431 __sbjs_source = get_param.utm_source;
432 } else if (typeof get_param.gclid !== 'undefined') {
433 __sbjs_source = 'google';
434 } else if (typeof get_param.yclid !== 'undefined') {
435 __sbjs_source = 'yandex';
436 } else {
437 __sbjs_source = terms.none;
438 }
439
440 if (typeof get_param.utm_medium !== 'undefined') {
441 __sbjs_medium = get_param.utm_medium;
442 } else if (typeof get_param.gclid !== 'undefined') {
443 __sbjs_medium = 'cpc';
444 } else if (typeof get_param.yclid !== 'undefined') {
445 __sbjs_medium = 'cpc';
446 } else {
447 __sbjs_medium = terms.none;
448 }
449
450 if (typeof get_param.utm_campaign !== 'undefined') {
451 __sbjs_campaign = get_param.utm_campaign;
452 } else if (typeof get_param[p.campaign_param] !== 'undefined') {
453 __sbjs_campaign = get_param[p.campaign_param];
454 } else if (typeof get_param.gclid !== 'undefined') {
455 __sbjs_campaign = 'google_cpc';
456 } else if (typeof get_param.yclid !== 'undefined') {
457 __sbjs_campaign = 'yandex_cpc';
458 } else {
459 __sbjs_campaign = terms.none;
460 }
461
462 if (typeof get_param.utm_content !== 'undefined') {
463 __sbjs_content = get_param.utm_content;
464 } else if (typeof get_param[p.content_param] !== 'undefined') {
465 __sbjs_content = get_param[p.content_param];
466 } else {
467 __sbjs_content = terms.none;
468 }
469
470 __sbjs_id = get_param.utm_id || terms.none;
471 __sbjs_platform = get_param.utm_source_platform || terms.none;
472 __sbjs_format = get_param.utm_creative_format || terms.none;
473 __sbjs_tactic = get_param.utm_marketing_tactic || terms.none;
474
475 if (typeof get_param.utm_term !== 'undefined') {
476 __sbjs_term = get_param.utm_term;
477 } else if (typeof get_param[p.term_param] !== 'undefined') {
478 __sbjs_term = get_param[p.term_param];
479 } else {
480 __sbjs_term = getUtmTerm() || terms.none;
481 }
482
483 break;
484
485 case terms.traffic.organic:
486 __sbjs_type = terms.traffic.organic;
487 __sbjs_source = __sbjs_source || uri.getHost(document.referrer);
488 __sbjs_medium = terms.referer.organic;
489 __sbjs_campaign = terms.none;
490 __sbjs_content = terms.none;
491 __sbjs_term = terms.none;
492 __sbjs_id = terms.none;
493 __sbjs_platform = terms.none;
494 __sbjs_format = terms.none;
495 __sbjs_tactic = terms.none;
496 break;
497
498 case terms.traffic.referral:
499 __sbjs_type = terms.traffic.referral;
500 __sbjs_source = __sbjs_source || uri.getHost(document.referrer);
501 __sbjs_medium = __sbjs_medium || terms.referer.referral;
502 __sbjs_campaign = terms.none;
503 __sbjs_content = uri.parse(document.referrer).path;
504 __sbjs_term = terms.none;
505 __sbjs_id = terms.none;
506 __sbjs_platform = terms.none;
507 __sbjs_format = terms.none;
508 __sbjs_tactic = terms.none;
509 break;
510
511 case terms.traffic.typein:
512 __sbjs_type = terms.traffic.typein;
513 __sbjs_source = p.typein_attributes.source;
514 __sbjs_medium = p.typein_attributes.medium;
515 __sbjs_campaign = terms.none;
516 __sbjs_content = terms.none;
517 __sbjs_term = terms.none;
518 __sbjs_id = terms.none;
519 __sbjs_platform = terms.none;
520 __sbjs_format = terms.none;
521 __sbjs_tactic = terms.none;
522 break;
523
524 default:
525 __sbjs_type = terms.oops;
526 __sbjs_source = terms.oops;
527 __sbjs_medium = terms.oops;
528 __sbjs_campaign = terms.oops;
529 __sbjs_content = terms.oops;
530 __sbjs_term = terms.oops;
531 __sbjs_id = terms.oops;
532 __sbjs_platform = terms.oops;
533 __sbjs_format = terms.oops;
534 __sbjs_tactic = terms.oops;
535 }
536 var sbjs_data = {
537 type: __sbjs_type,
538 source: __sbjs_source,
539 medium: __sbjs_medium,
540 campaign: __sbjs_campaign,
541 content: __sbjs_content,
542 term: __sbjs_term,
543 id: __sbjs_id,
544 platform: __sbjs_platform,
545 format: __sbjs_format,
546 tactic: __sbjs_tactic
547 };
548
549 return data.pack.main(sbjs_data);
550
551 }
552
553 function getUtmTerm() {
554 var referer = document.referrer;
555 if (get_param.utm_term) {
556 return get_param.utm_term;
557 } else if (referer && uri.parse(referer).host && uri.parse(referer).host.match(/^(?:.*\.)?yandex\..{2,9}$/i)) {
558 try {
559 return uri.getParam(uri.parse(document.referrer).query).text;
560 } catch (err) {
561 return false;
562 }
563 } else {
564 return false;
565 }
566 }
567
568 function checkReferer(type) {
569 var referer = document.referrer;
570 switch(type) {
571 case terms.traffic.organic:
572 return (!!referer && checkRefererHost(referer) && isOrganic(referer));
573 case terms.traffic.referral:
574 return (!!referer && checkRefererHost(referer) && isReferral(referer));
575 default:
576 return false;
577 }
578 }
579
580 function checkRefererHost(referer) {
581 if (p.domain) {
582 if (!isolate) {
583 var host_regex = new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(domain) + '$', 'i');
584 return !(uri.getHost(referer).match(host_regex));
585 } else {
586 return (uri.getHost(referer) !== uri.getHost(domain));
587 }
588 } else {
589 return (uri.getHost(referer) !== uri.getHost(document.location.href));
590 }
591 }
592
593 function isOrganic(referer) {
594
595 var y_host = 'yandex',
596 y_param = 'text',
597 g_host = 'google';
598
599 var y_host_regex = new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(y_host) + '\\..{2,9}$'),
600 y_param_regex = new RegExp('.*' + utils.escapeRegexp(y_param) + '=.*'),
601 g_host_regex = new RegExp('^(?:www\\.)?' + utils.escapeRegexp(g_host) + '\\..{2,9}$');
602
603 if (
604 !!uri.parse(referer).query &&
605 !!uri.parse(referer).host.match(y_host_regex) &&
606 !!uri.parse(referer).query.match(y_param_regex)
607 ) {
608 __sbjs_source = y_host;
609 return true;
610 } else if (!!uri.parse(referer).host.match(g_host_regex)) {
611 __sbjs_source = g_host;
612 return true;
613 } else if (!!uri.parse(referer).query) {
614 for (var i = 0; i < p.organics.length; i++) {
615 if (
616 uri.parse(referer).host.match(new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(p.organics[i].host) + '$', 'i')) &&
617 uri.parse(referer).query.match(new RegExp('.*' + utils.escapeRegexp(p.organics[i].param) + '=.*', 'i'))
618 ) {
619 __sbjs_source = p.organics[i].display || p.organics[i].host;
620 return true;
621 }
622 if (i + 1 === p.organics.length) {
623 return false;
624 }
625 }
626 } else {
627 return false;
628 }
629 }
630
631 function isReferral(referer) {
632 if (p.referrals.length > 0) {
633 for (var i = 0; i < p.referrals.length; i++) {
634 if (uri.parse(referer).host.match(new RegExp('^(?:.*\\.)?' + utils.escapeRegexp(p.referrals[i].host) + '$', 'i'))) {
635 __sbjs_source = p.referrals[i].display || p.referrals[i].host;
636 __sbjs_medium = p.referrals[i].medium || terms.referer.referral;
637 return true;
638 }
639 if (i + 1 === p.referrals.length) {
640 __sbjs_source = uri.getHost(referer);
641 return true;
642 }
643 }
644 } else {
645 __sbjs_source = uri.getHost(referer);
646 return true;
647 }
648 }
649
650 function setFirstAndCurrentExtraData() {
651 cookies.set(data.containers.current_extra, data.pack.extra(p.timezone_offset), lifetime, domain, isolate);
652 if (!cookies.get(data.containers.first_extra)) {
653 cookies.set(data.containers.first_extra, data.pack.extra(p.timezone_offset), lifetime, domain, isolate);
654 }
655 }
656
657 (function setData() {
658
659 // Main data
660 cookies.set(data.containers.current, mainData(), lifetime, domain, isolate);
661 if (!cookies.get(data.containers.first)) {
662 cookies.set(data.containers.first, cookies.get(data.containers.current), lifetime, domain, isolate);
663 }
664
665 // User data
666 var visits, udata;
667 if (!cookies.get(data.containers.udata)) {
668 visits = 1;
669 udata = data.pack.user(visits, p.user_ip);
670 } else {
671 visits = parseInt(cookies.parse(data.containers.udata)[cookies.unsbjs(data.containers.udata)][data.aliases.udata.visits]) || 1;
672 visits = cookies.get(data.containers.session) ? visits : visits + 1;
673 udata = data.pack.user(visits, p.user_ip);
674 }
675 cookies.set(data.containers.udata, udata, lifetime, domain, isolate);
676
677 // Session
678 var pages_count;
679 if (!cookies.get(data.containers.session)) {
680 pages_count = 1;
681 } else {
682 pages_count = parseInt(cookies.parse(data.containers.session)[cookies.unsbjs(data.containers.session)][data.aliases.session.pages_seen]) || 1;
683 pages_count += 1;
684 }
685 cookies.set(data.containers.session, data.pack.session(pages_count), p.session_length, domain, isolate);
686
687 // Promocode
688 if (p.promocode && !cookies.get(data.containers.promocode)) {
689 cookies.set(data.containers.promocode, data.pack.promo(p.promocode), lifetime, domain, isolate);
690 }
691
692 })();
693
694 return cookies.parse(data.containers);
695
696 };
697
698 },{"./data":2,"./helpers/cookies":3,"./helpers/uri":4,"./helpers/utils":5,"./migrations":7,"./params":8,"./terms":9}],7:[function(_dereq_,module,exports){
699 "use strict";
700
701 var data = _dereq_('./data'),
702 cookies = _dereq_('./helpers/cookies');
703
704 module.exports = {
705
706 go: function(lifetime, domain, isolate) {
707
708 var migrate = this.migrations,
709 _with = { l: lifetime, d: domain, i: isolate };
710
711 var i;
712
713 if (!cookies.get(data.containers.first) && !cookies.get(data.service.migrations)) {
714
715 var mids = [];
716 for (i = 0; i < migrate.length; i++) { mids.push(migrate[i].id); }
717
718 var advance = '';
719 for (i = 0; i < mids.length; i++) {
720 advance += mids[i] + '=1';
721 if (i < mids.length - 1) { advance += data.delimiter; }
722 }
723 cookies.set(data.service.migrations, advance, _with.l, _with.d, _with.i);
724
725 } else if (!cookies.get(data.service.migrations)) {
726
727 // We have only one migration for now, so just
728 for (i = 0; i < migrate.length; i++) {
729 migrate[i].go(migrate[i].id, _with);
730 }
731
732 }
733
734 },
735
736 migrations: [
737
738 {
739 id: '1418474375998',
740 version: '1.0.0-beta',
741 go: function(mid, _with) {
742
743 var success = mid + '=1',
744 fail = mid + '=0';
745
746 var safeReplace = function($0, $1, $2) {
747 return ($1 || $2 ? $0 : data.delimiter);
748 };
749
750 try {
751
752 // Switch delimiter and renew cookies
753 var _in = [];
754 for (var prop in data.containers) {
755 if (data.containers.hasOwnProperty(prop)) {
756 _in.push(data.containers[prop]);
757 }
758 }
759
760 for (var i = 0; i < _in.length; i++) {
761 if (cookies.get(_in[i])) {
762 var buffer = cookies.get(_in[i]).replace(/(\|)?\|(\|)?/g, safeReplace);
763 cookies.destroy(_in[i], _with.d, _with.i);
764 cookies.destroy(_in[i], _with.d, !_with.i);
765 cookies.set(_in[i], buffer, _with.l, _with.d, _with.i);
766 }
767 }
768
769 // Update `session`
770 if (cookies.get(data.containers.session)) {
771 cookies.set(data.containers.session, data.pack.session(0), _with.l, _with.d, _with.i);
772 }
773
774 // Yay!
775 cookies.set(data.service.migrations, success, _with.l, _with.d, _with.i);
776
777 } catch (err) {
778 // Oops
779 cookies.set(data.service.migrations, fail, _with.l, _with.d, _with.i);
780 }
781 }
782 }
783
784 ]
785
786 };
787 },{"./data":2,"./helpers/cookies":3}],8:[function(_dereq_,module,exports){
788 "use strict";
789
790 var terms = _dereq_('./terms'),
791 uri = _dereq_('./helpers/uri');
792
793 module.exports = {
794
795 fetch: function(prefs) {
796
797 var user = prefs || {},
798 params = {};
799
800 // Set `lifetime of the cookie` in months
801 params.lifetime = this.validate.checkFloat(user.lifetime) || 6;
802 params.lifetime = parseInt(params.lifetime * 30 * 24 * 60);
803
804 // Set `session length` in minutes
805 params.session_length = this.validate.checkInt(user.session_length) || 30;
806
807 // Set `timezone offset` in hours
808 params.timezone_offset = this.validate.checkInt(user.timezone_offset);
809
810 // Enable `base64 encoding`
811 params.base64 = user.base64 || false;
812
813 // Set `campaign param` for AdWords links
814 params.campaign_param = user.campaign_param || false;
815
816 // Set `term param` and `content param` for AdWords links
817 params.term_param = user.term_param || false;
818 params.content_param = user.content_param || false;
819
820 // Set `user ip`
821 params.user_ip = user.user_ip || terms.none;
822
823 // Set `promocode`
824 if (user.promocode) {
825 params.promocode = {};
826 params.promocode.min = parseInt(user.promocode.min) || 100000;
827 params.promocode.max = parseInt(user.promocode.max) || 999999;
828 } else {
829 params.promocode = false;
830 }
831
832 // Set `typein attributes`
833 if (user.typein_attributes && user.typein_attributes.source && user.typein_attributes.medium) {
834 params.typein_attributes = {};
835 params.typein_attributes.source = user.typein_attributes.source;
836 params.typein_attributes.medium = user.typein_attributes.medium;
837 } else {
838 params.typein_attributes = { source: '(direct)', medium: '(none)' };
839 }
840
841 // Set `domain`
842 if (user.domain && this.validate.isString(user.domain)) {
843 params.domain = { host: user.domain, isolate: false };
844 } else if (user.domain && user.domain.host) {
845 params.domain = user.domain;
846 } else {
847 params.domain = { host: uri.getHost(document.location.hostname), isolate: false };
848 }
849
850 // Set `referral sources`
851 params.referrals = [];
852
853 if (user.referrals && user.referrals.length > 0) {
854 for (var ir = 0; ir < user.referrals.length; ir++) {
855 if (user.referrals[ir].host) {
856 params.referrals.push(user.referrals[ir]);
857 }
858 }
859 }
860
861 // Set `organic sources`
862 params.organics = [];
863
864 if (user.organics && user.organics.length > 0) {
865 for (var io = 0; io < user.organics.length; io++) {
866 if (user.organics[io].host && user.organics[io].param) {
867 params.organics.push(user.organics[io]);
868 }
869 }
870 }
871
872 params.organics.push({ host: 'bing.com', param: 'q', display: 'bing' });
873 params.organics.push({ host: 'yahoo.com', param: 'p', display: 'yahoo' });
874 params.organics.push({ host: 'about.com', param: 'q', display: 'about' });
875 params.organics.push({ host: 'aol.com', param: 'q', display: 'aol' });
876 params.organics.push({ host: 'ask.com', param: 'q', display: 'ask' });
877 params.organics.push({ host: 'globososo.com', param: 'q', display: 'globo' });
878 params.organics.push({ host: 'go.mail.ru', param: 'q', display: 'go.mail.ru' });
879 params.organics.push({ host: 'rambler.ru', param: 'query', display: 'rambler' });
880 params.organics.push({ host: 'tut.by', param: 'query', display: 'tut.by' });
881
882 params.referrals.push({ host: 't.co', display: 'twitter.com' });
883 params.referrals.push({ host: 'plus.url.google.com', display: 'plus.google.com' });
884
885
886 return params;
887
888 },
889
890 validate: {
891
892 checkFloat: function(v) {
893 return v && this.isNumeric(parseFloat(v)) ? parseFloat(v) : false;
894 },
895
896 checkInt: function(v) {
897 return v && this.isNumeric(parseInt(v)) ? parseInt(v) : false;
898 },
899
900 isNumeric: function(v){
901 return !isNaN(v);
902 },
903
904 isString: function(v) {
905 return Object.prototype.toString.call(v) === '[object String]';
906 }
907
908 }
909
910 };
911
912 },{"./helpers/uri":4,"./terms":9}],9:[function(_dereq_,module,exports){
913 "use strict";
914
915 module.exports = {
916
917 traffic: {
918 utm: 'utm',
919 organic: 'organic',
920 referral: 'referral',
921 typein: 'typein'
922 },
923
924 referer: {
925 referral: 'referral',
926 organic: 'organic',
927 social: 'social'
928 },
929
930 none: '(none)',
931 oops: '(Houston, we have a problem)'
932
933 };
934
935 },{}]},{},[1])(1)
936 });