-
-
Save tahajahangir/1758636 to your computer and use it in GitHub Desktop.
Unobfuscated version of tynt Tracer.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //v26 © 2011 Tynt | |
| Tynt = window.Tynt || []; | |
| if (typeof Tynt.TIL != "undefined") { | |
| } else { | |
| (function () { | |
| var mainTynt = function () { | |
| var body = document.body, | |
| documentElement = document.documentElement, | |
| isIE = eval("/*@cc_on!@*/false"), | |
| repeat = function (a, b) { | |
| for (var c = "", f = 0; f < b; f++) c += a; | |
| return c | |
| }, | |
| a50 = repeat("a", 50), | |
| ic_tynt_com = (Tynt.e || "") + "ic.tynt.com", | |
| de_tynt_com = (Tynt.e || "") + "de.tynt.com/deb/?id=" + a50, | |
| now = function () { | |
| return (new Date).getTime() | |
| }, | |
| trim = function (a) { | |
| return a.replace(/^\s+|\s+$/g, "") | |
| }, | |
| copyObj = function (a, b) { | |
| for (var c in a) if (a.hasOwnProperty(c)) b[c] = a[c] | |
| }, | |
| createElem = function (tag, attrs, styles) { | |
| tag = document.createElement(tag); | |
| copyObj(attrs, tag); | |
| copyObj(styles, tag.style); | |
| return tag | |
| }, | |
| myAddEvent, myRemoveEvent; | |
| // Define myAddEvent and myRemoveEvent based on browser (IE/nonIE) | |
| if (window.addEventListener) { | |
| myAddEvent = function (a, b, c) { | |
| a.addEventListener(b, c, false) | |
| }; | |
| myRemoveEvent = function (a, b, c) { | |
| a.removeEventListener(b, c, false) | |
| } | |
| } else { | |
| myAddEvent = function (a, b, c) { | |
| a.attachEvent("on" + b, c) | |
| }; | |
| myRemoveEvent = function (a, b, c) { | |
| a.detachEvent("on" + b, c) | |
| } | |
| } | |
| var setCookie = function (key, value) { | |
| var c = location.hostname.split("."), | |
| f = 2; | |
| do { | |
| var d = c.slice(c.length - f, c.length).join("."); | |
| document.cookie = key + ";path=/;domain=." + d + ";" + value; | |
| f++ | |
| } while (document.cookie.indexOf(key) == -1 && f <= c.length); | |
| if (document.cookie.indexOf(key) == -1) document.cookie = key + ";path=/;" + value | |
| }, | |
| addLoadEvent = function (a) { | |
| document.readyState == "complete" ? a() : myAddEvent(window, "load", function () { | |
| setTimeout(function () { | |
| if (typeof document.readyState == "undefined" && !isIE) document.readyState = "complete"; | |
| a() | |
| }, 10) | |
| }) | |
| }, | |
| sendRequestAfterLoad = function (source, errorHandler2) { | |
| var sendQueue = [], | |
| makeImage = function (src, errorHandler) { | |
| // Tynt.join("~") is user id | |
| var url = "http://" + src.replace("id=" + a50, "id=" + Tynt.join("~")); | |
| if (url.indexOf(ic_tynt_com + "/b/p?") > -1 && typeof Tynt.b == "string") url += "&b=" + Tynt.b; | |
| var imgTag = new Image(1, 1); | |
| if (errorHandler) imgTag.onerror = errorHandler; | |
| imgTag.src = url | |
| }; | |
| sendRequestAfterLoad = function (d, e) { | |
| sendQueue.push([d, e]) | |
| }; | |
| addLoadEvent(function () { | |
| sendRequestAfterLoad = makeImage; | |
| for (var d = 0; d < sendQueue.length; d++) sendRequestAfterLoad(sendQueue[d][0], sendQueue[d][1]); | |
| sendQueue = null | |
| }); | |
| sendRequestAfterLoad(source, errorHandler2) | |
| }, | |
| ca = function (a) { | |
| var b = [], | |
| c = "", | |
| f; | |
| for (f in a) if (a.hasOwnProperty(f)) { | |
| b.push(c, f, "=", a[f]); | |
| c = "&" | |
| } | |
| return b.join("") | |
| }, | |
| getHash = function (a) { | |
| // Returns a base62 9-byte hash of input | |
| for (var b = 0, c = a.length < 100 ? a.length : 100, f = 0; f < c; f++) b += a.charCodeAt(f); | |
| a = Math.floor(Math.random() * 3844); | |
| c = Math.abs(now() - 12281184E5); | |
| return da(c, 7) + da((b + a) % 3844, 2) | |
| }, | |
| ea = function (a) { | |
| if (a < 62) return "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".charAt(this); | |
| else { | |
| var b = Math.floor(a / 62); | |
| a = a - b * 62; | |
| return b >= 62 ? ea(b) + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".charAt(a) : "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".charAt(b) + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".charAt(a) | |
| } | |
| }, | |
| da = function (a, b) { | |
| var c = ea(a); | |
| return repeat("0", b - c.length) + c | |
| }, | |
| numOfWords = function (a) { | |
| return (a = trim(a)) ? a.split(/\s+/i).length : 0 | |
| }, | |
| documentTitle = trim((document.title || location.hostname).toString()).replace(RegExp(location.hash, "g"), ""), | |
| removeSchema = function (a) { | |
| return a.replace(/^https?:\/\//, "") | |
| }, | |
| getCookie = function (a, b) { | |
| for (var c = b + "=", f = a.split(";"), d = 0; d < f.length; d++) { | |
| for (var e = f[d]; e.charAt(0) == " ";) e = e.substring(1, e.length); | |
| if (e.indexOf(c) == 0) return e.substring(c.length, e.length) | |
| } | |
| return null | |
| }, | |
| checkAndPush3 = function () { | |
| // an implementation of queue of length 3! | |
| // myfun = checkAndPush3() | |
| // myfun(1) -> true | |
| // myfun(2) -> true | |
| // myfun(1) -> false | |
| // myfun(10) -> true | |
| // myfun(2) -> false | |
| // myfun(3) -> true | |
| // myfun(1) -> true // memory size is 3! | |
| var list = []; | |
| return function (value) { | |
| for (var c = list.length - 1; c >= 0; c--) | |
| if (list[c] == value) return false; | |
| list.unshift(value); | |
| list.length > 3 && list.pop(); | |
| return true | |
| } | |
| }, | |
| copyAlreadyProccessed = checkAndPush3(), | |
| imgSrcAlreadyProccessed = checkAndPush3(), | |
| contextMenuListener = function () { | |
| var targetElem, processConetxtMenu = function () { | |
| console.log('contextMenuListener clicked') | |
| window.removeEventListener("blur", processConetxtMenu, false); | |
| processCopyEvent(targetElem); | |
| return true | |
| }; | |
| return function (event) { | |
| targetElem = event.target || event.srcElement; | |
| window.removeEventListener("blur", processConetxtMenu, false); | |
| if (targetElem.nodeName == "IMG" && targetElem.parentNode.nodeName != "A") { | |
| window.addEventListener("blur", processConetxtMenu, false); | |
| setTimeout(function () { | |
| document.removeEventListener("blur", processConetxtMenu, false) | |
| }, 1E4) | |
| } | |
| return true | |
| } | |
| }(), | |
| copyListener = function (a) { | |
| processCopyEvent(a.target || a.srcElement, true) | |
| }, | |
| draggingImg, | |
| mouseDownListener = function (a) { | |
| a = a.target || a.srcElement; | |
| draggingImg = a.nodeName == "IMG" ? a : null; | |
| }, | |
| dragLeaveListener = function () { //generate dragListenerBasedOnBrowser | |
| var extractXYfromEvent = function (event) { | |
| return typeof event.pageX == "number" ? { | |
| x:event.pageX - (documentElement.scrollLeft ? documentElement.scrollLeft : body.scrollLeft), | |
| y:event.pageY - (documentElement.scrollTop ? documentElement.scrollTop : body.scrollTop) | |
| } : { | |
| x:event.clientX, | |
| y:event.clientY | |
| } | |
| }, | |
| detectDrag_Ie = function (e) { | |
| e = extractXYfromEvent(e); | |
| return e.x <= 0 || e.y <= 0 || e.x >= body.clientWidth || e.y >= body.clientHeight | |
| }, | |
| detectDrag_Ie_compat = function (e) { | |
| e = extractXYfromEvent(e); | |
| return e.x <= 0 || e.y <= 0 || e.x >= documentElement.clientWidth || e.y >= documentElement.clientHeight | |
| }, | |
| detectDrag_firefox = function (e) { | |
| return e.target.nodeName == "#document" | |
| }, | |
| detectDrag_others = function (e) { | |
| e = extractXYfromEvent(e); | |
| return e.x <= 4 || e.y <= 4 || e.x >= documentElement.clientWidth - 4 || e.y >= documentElement.clientHeight - 4 | |
| }, | |
| detectDrag = function (event) { | |
| detectDrag = navigator.userAgent.match("MSIE") ? | |
| !document.compatMode || | |
| document.compatMode.indexOf("CSS") == -1 ? detectDrag_Ie : detectDrag_Ie_compat | |
| : navigator.userAgent.match("Firefox") ? detectDrag_firefox : detectDrag_others; | |
| detectDrag(event) | |
| }; | |
| return function (event) { | |
| if (draggingImg && detectDrag(event)) { | |
| console.log('dragCaptured', event) | |
| processCopyEvent(draggingImg); | |
| draggingImg = null | |
| } | |
| return true | |
| } | |
| }(), | |
| addAnchorClickEvents = function () { | |
| function sendUrlVisitedReport(url, l) { | |
| if (urlIsNew(url)) { | |
| console.log('Reporting /b/o '+url) | |
| //sendRequestAfterLoad(ic_tynt_com + "/b/o?id=" + a50 + (l ? "&i=" : "&l=") + encodeURIComponent(url) + "&ts=" + now()) | |
| } | |
| } | |
| function processAnchorClicks(event) { | |
| var target = event.target || event.srcElement; | |
| if (event.button < 2) | |
| for (; target && target != document;) { | |
| var href = target.href; | |
| if (target.nodeName == "A" && href && location.href.split("#")[0] != href.split("#")[0] && !/^javascript/i.test(href)) { | |
| sendUrlVisitedReport(href); | |
| break | |
| } | |
| target = target.parentNode | |
| } | |
| } | |
| function windowBlured() { | |
| objectSrc && sendUrlVisitedReport(objectSrc, true) | |
| } | |
| function objectOverListener(e) { | |
| if (e) { | |
| e = e.target || e.srcElement; | |
| objectSrc = e.src || e.data || "flash"; | |
| myAddEvent(window, "blur", windowBlured) | |
| } | |
| } | |
| function objectOutListener() { | |
| objectSrc = null; | |
| myRemoveEvent(window, "blur", windowBlured) | |
| } | |
| function processObject(elem) { | |
| myAddEvent(elem, "mouseover", objectOverListener); | |
| myAddEvent(elem, "mouseout", objectOutListener) | |
| } | |
| function windowUnloaded() { | |
| objectSrc && sendUrlVisitedReport(objectSrc, true) | |
| } | |
| var objectSrc, urlIsNew = checkAndPush3(); | |
| myAddEvent(document, "mousedown", processAnchorClicks); | |
| addLoadEvent(function () { | |
| for (var elems = document.getElementsByTagName("iframe"), l = elems.length - 1; l >= 0; l--) { | |
| var iframe = elems[l]; | |
| if (iframe.src) | |
| processObject(iframe); | |
| else if (iframe.name) { | |
| try { | |
| myAddEvent(frames[iframe.name].document, "mousedown", processAnchorClicks) | |
| } catch (u) { | |
| } | |
| } | |
| } | |
| elems = document.getElementsByTagName("object"); | |
| for (l = elems.length - 1; l >= 0; l--) | |
| processObject(elems[l]) // <object> elem | |
| }); | |
| myAddEvent(window, "beforeunload", windowUnloaded); | |
| myAddEvent(window, "unload", windowUnloaded) | |
| }, | |
| registerAllEvents = function () { | |
| /* Registers copy / drag / link click events | |
| * Returns a function to be called when user copy something | |
| */ | |
| var unimportant3 = true, | |
| b, | |
| sendCopyEventReq = function (args, copiedText) { | |
| var data = { | |
| id:a50, | |
| wc:numOfWords(copiedText), | |
| c:copiedText, | |
| f:unimportant3 ? 1 : 0, | |
| t:documentTitle | |
| }; | |
| copyObj(args, data); | |
| unimportant3 = false; | |
| var h = data.trace_type; | |
| delete data.trace_type; | |
| var k = data.g; | |
| delete data.g; | |
| for (var o = [], j = ["id", "wc", "f", "now", "h", "trim", "c"], l = 0; l < j.length; l++) { | |
| var r = j[l], | |
| u = data[r]; | |
| u && o.push([r, encodeURIComponent(u).replace(/\'/g, "%27")]); | |
| delete data[r] | |
| } | |
| for (var y in data) if (data.hasOwnProperty(y))(j = data[y]) && o.push([y, encodeURIComponent(j).replace(/\'/g, "%27")]); | |
| data = []; | |
| l = 2048 - (("http://" + ic_tynt_com + "/a/t/x#?").length + (3 + k.length) + 5); | |
| r = o.length; | |
| var B = u = 0, | |
| z = 0, | |
| U, H, V, I, J = 0; | |
| for (data[J] = { | |
| g:k, | |
| tp:null | |
| }; u < r && data.length < 35;) { | |
| U = o[u][0]; | |
| y = o[u][1]; | |
| V = U.length + 2; | |
| H = l - V - B; | |
| if (H > 0) { | |
| j = y.substring(z, z + H); | |
| I = j.slice(-2).indexOf("%"); | |
| if (I > -1) { | |
| j = y.substring(z, z + H - 2 + I); | |
| B += I + 2 | |
| } | |
| B += j.length + V; | |
| z += j.length; | |
| data[J][U] = j | |
| } else B = l; | |
| if (B >= l) { | |
| data[++J] = { | |
| g:k, | |
| p:J | |
| }; | |
| B = 0 | |
| } | |
| if (z >= y.length) { | |
| u++; | |
| z = 0 | |
| } | |
| } | |
| data[0].tp = data.length; | |
| sendRequestAfterLoad(ic_tynt_com + "/b/t/" + h + "?" + ca(data[0])); | |
| for (k = 1; k < data.length; k++) | |
| sendRequestAfterLoad(ic_tynt_com + "/b/x/" + h + "?" + ca(data[k])) | |
| }; | |
| // Register events | |
| /tynt=nout/.test(location.href) || addAnchorClickEvents(); | |
| if (window.addEventListener) { | |
| navigator.userAgent.match("Firefox/2") || body.addEventListener("copy", copyListener, false); | |
| window.addEventListener("mousedown", mouseDownListener, false); | |
| window.addEventListener("dragleave", dragLeaveListener, false); | |
| window.addEventListener("dragexit", dragLeaveListener, false); | |
| document.addEventListener("contextmenu", contextMenuListener, false) | |
| } else { | |
| body.attachEvent("oncopy", copyListener); | |
| document.getElementsByTagName("html")[0].attachEvent("ondragleave", dragLeaveListener); | |
| body.attachEvent("onmousedown", mouseDownListener) | |
| } | |
| //sendRequestAfterLoad(de_tynt_com); | |
| var processCopyEvent = function (elem, isCopyEvent) { | |
| if (!document.getElementById("tyntSS")) { | |
| // assert isCopyEvent || elem.src | |
| var selString; | |
| if (isCopyEvent) | |
| selString = typeof getSelection != "undefined" ? getSelection().toString() : document.selection.createRange().text; | |
| var elemSrc = elem.src; | |
| // when dragging image (doessn't work in my ubuntu/firefox) | |
| elemSrc && !selString && imgSrcAlreadyProccessed(elemSrc) && sendCopyEventReq({ | |
| g:getHash(elemSrc), | |
| trace_type:3, | |
| w:elem.width, | |
| h:elem.height | |
| }, elemSrc); | |
| // Copying a text (not from an input/textarea) | |
| if (selString && trim(selString).length && | |
| elem.nodeName != "TEXTAREA" && elem.nodeName != "INPUT") { | |
| var isNewEvent = copyAlreadyProccessed(selString); | |
| var k = { | |
| trace_type:1 | |
| }; | |
| if (isNewEvent) b = getHash(selString); | |
| k.g = b; | |
| // Add 'Read more ...' to selected text | |
| var success = Tynt.tyntAddToSelection ? Tynt.tyntAddToSelection(k, selString) : true; | |
| isNewEvent && success && sendCopyEventReq(k, selString) | |
| } | |
| } | |
| }; | |
| return processCopyEvent | |
| }, | |
| validUnicodeText = function (a) { | |
| a = a.charCodeAt(0); | |
| return 3584 <= a && a <= 3711 || 11904 <= a && a <= 12591 || 12688 <= a && a <= 40959 || 63744 <= a && a <= 64255 || 65072 <= a && a <= 65103 || 131072 <= a && a <= 173791 || 194560 <= a && a <= 195103 | |
| }, | |
| removeScriptTags = function (elem) { | |
| var scripts = elem.getElementsByTagName("script"); | |
| for (var b = scripts.length - 1; b >= 0; b--) { | |
| var script = scripts[b]; | |
| script.parentNode.removeChild(script) | |
| } | |
| }, | |
| tracerVars, id_tynt_com = (Tynt.e || "") + "id.tynt.com", | |
| unimportant2 = { | |
| t:3, | |
| p:6, | |
| w:7 | |
| }, | |
| A, W, X, | |
| addIxzzCode = function (a) { | |
| var b = location.href; | |
| b = b.replace(/#(i|a)xzz=?(.*)$/g, ""); | |
| return b + "#" + ("ixzz" + a) | |
| }, | |
| escape = function (a) { | |
| return a.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">") | |
| }, | |
| addToSelectionLock = false, | |
| //something related to add extra text to selection | |
| addToSelection = function (ixzzCode) { | |
| // Returns false if another addToSelection already called | |
| if (addToSelectionLock) return false; | |
| addToSelectionLock = true; | |
| var addText = ""; | |
| if (tracerVars.changeCopiedText) { | |
| var linkUrl = addIxzzCode(ixzzCode), | |
| a_start_tag = '<a style="color: #003399;" href="'; | |
| addText += tracerVars.readMore; | |
| if (tracerVars.st) addText = addText + a_start_tag + linkUrl + '">' + escape(documentTitle) + "</a> "; | |
| if (tracerVars.su) addText = addText + a_start_tag + linkUrl + '">' + escape(linkUrl) + "</a>"; | |
| if (tracerVars.as.length > 0) addText = addText + "\n<br>" + tracerVars.as + " "; | |
| } | |
| var div, div2; | |
| div = createElem("div", {}, { | |
| overflow:"hidden", | |
| color:"#000000", | |
| backgroundColor:"#FFFFFF", | |
| textAlign:"left", | |
| textDecoration:"none", | |
| border:"none" | |
| }); | |
| if (!document.selection || !document.selection.createRange) { | |
| var selec = getSelection(); | |
| if (selec.toString()) if (typeof selec.setBaseAndExtent != "undefined") { | |
| var range = selec.getRangeAt(0); | |
| addText = createElem("span", { | |
| innerHTML:addText | |
| }); | |
| if (tracerVars.t) { | |
| addText.innerHTML += "<br/><br/>"; | |
| div.appendChild(addText); | |
| div.appendChild(range.cloneContents()) | |
| } else { | |
| div.appendChild(range.cloneContents()); | |
| addText.innerHTML = "<br/><br/>" + addText.innerHTML; | |
| div.appendChild(addText) | |
| } | |
| removeScriptTags(div); | |
| div.style.width = 0.1; | |
| div.style.height = 0.1; | |
| div.style.position = "absolute"; | |
| div.style.top = "-1000px"; | |
| div.style.left = "-1001px"; | |
| div.appendChild(document.createElement("br")); | |
| addText = div.innerText.length; | |
| body.insertBefore(div, body.firstChild); | |
| if (div.innerText.length != addText) div.style.overflow = ""; | |
| selec.selectAllChildren(div); | |
| setTimeout(function () { | |
| div.parentNode.removeChild(div); | |
| getSelection().setBaseAndExtent(range.startContainer, range.startOffset, range.endContainer, range.endOffset); | |
| addToSelectionLock = false | |
| }, 0) | |
| } else { | |
| div2 = createElem("div", {}, { | |
| height:0, | |
| position:"absolute", | |
| top:"-1000px" | |
| }); | |
| div2.innerHTML = "<br>"; | |
| if (tracerVars.t) { | |
| body.insertBefore(div2, body.firstChild); | |
| div.innerHTML = addText + "<br><br>" | |
| } else { | |
| body.appendChild(div2); | |
| div.innerHTML = "<br>" + addText + "<br>" | |
| } | |
| div2.appendChild(div); | |
| addText = document.createRange(); | |
| addText.selectNode(div); | |
| selec.addRange(addText); | |
| window.setTimeout(function () { | |
| div2.parentNode.removeChild(div2); | |
| addToSelectionLock = false | |
| }, 0) | |
| } | |
| } else { | |
| var k = documentElement.scrollLeft || body.scrollLeft, | |
| o = documentElement.scrollTop || body.scrollTop; | |
| div2 = createElem("div", {}, { | |
| overflow:"hidden", | |
| position:"absolute", | |
| left:k + 20 + "px", | |
| top:o + 20 + "px", | |
| width:"1px", | |
| height:"1px" | |
| }); | |
| body.insertBefore(div2, body.firstChild); | |
| var j = document.selection.createRange(); | |
| div.innerHTML = tracerVars.t ? addText + "<br><br>" + j.htmlText : j.htmlText + "<br><br>" + addText; | |
| removeScriptTags(div); | |
| div2.appendChild(document.createElement("br")); | |
| div2.appendChild(div); | |
| addText = body.createTextRange(); | |
| addText.moveToElementText(div); | |
| addText.select(); | |
| setTimeout(function () { | |
| body.removeChild(div2); | |
| if (j.text != "") { | |
| j.select(); | |
| documentElement.scrollLeft = k; | |
| body.scrollLeft = k; | |
| documentElement.scrollTop = o; | |
| body.scrollTop = o | |
| } | |
| addToSelectionLock = false | |
| }, 0) | |
| } | |
| return true | |
| }, | |
| doAddToSelection = function (param, selectText) { | |
| var success = true; | |
| if (tracerVars.changeCopiedText || A || tracerVars.el) { | |
| var trimmed = trim(selectText); | |
| var validText = trimmed.length >= 2 ? | |
| validUnicodeText(trimmed.charAt(0)) || | |
| validUnicodeText(trimmed.charAt(trimmed.length - 1)) || | |
| validUnicodeText(trimmed.charAt(trimmed.length / 2)) | |
| : validUnicodeText(trimmed); | |
| var d; | |
| // OOPCH: very complex code! | |
| if (d = tracerVars.h) LABELLABEL: { | |
| console.log('This code never executes'); | |
| d = (d = unimportant4()) ? d.className.split(/\s+/) : []; | |
| for (var e = d.length - 1; e >= 0; e--) if (tracerVars.h[d[e]] !== undefined) { | |
| d = tracerVars.h[d[e]]; | |
| break LABELLABEL | |
| } | |
| d = void 0 | |
| } | |
| d = d; | |
| // d is always undefined | |
| if (d !== false && | |
| (validText && selectText.replace(/\s/g, "").length >= tracerVars.minCopyLength * 2 || | |
| !validText && numOfWords(selectText) >= tracerVars.minCopyLength) | |
| || d) | |
| if (tracerVars.changeCopiedText || A || tracerVars.el) { | |
| success = addToSelection(param.g); | |
| if (tracerVars.changeCopiedText) param.trace_type = 0 | |
| } | |
| } | |
| return success | |
| }, | |
| unimportant4 = function () { | |
| return !document.selection || !document.selection.createRange ? | |
| function () { | |
| var a = getSelection().getRangeAt(0), | |
| b = a.startContainer.nodeType == 3 ? a.startContainer.parentNode : a.startContainer; | |
| return b && trim(a.toString()) == trim(b.textContent) ? b : null | |
| } : function () { | |
| var a = document.selection.createRange(), | |
| b = a.duplicate(); | |
| b.collapse(true); | |
| return (b = b.parentElement()) && trim(a.text) == trim(b.innerText) ? b : null | |
| } | |
| }(), | |
| unused1 = function (a) { | |
| if (a.hash != "") return false; | |
| if (typeof tracerVars.ba == "boolean" && tracerVars.ba) tracerVars.ba = ["/"]; | |
| else if (!tracerVars.ba) return true; | |
| for (var b, c = tracerVars.ba.length - 1; c >= 0; c--) { | |
| b = null; | |
| var f = tracerVars.ba[c], | |
| d = f.indexOf("/"); | |
| if (d != 0) { | |
| b = f.slice(0, d); | |
| f = f.slice(d) | |
| } | |
| if (!b || a.host == b) if (f.charAt(f.length - 1) == "#") { | |
| if (a.pathname.indexOf(f.slice(0, -1)) == 0) return false | |
| } else if (a.pathname == f) return false | |
| } | |
| return true | |
| }, | |
| initTracerVarsArgs = function (a) { | |
| tracerVars = Tynt.i || window.tyntVariables || {}; | |
| tracerVars.s = a.s || 1; | |
| tracerVars.changeCopiedText = !(tracerVars.changeCopiedText == 0 || a.a == 0); | |
| tracerVars.cc = tracerVars.cc || a.cc || 0; | |
| if (tracerVars.cc > 6) tracerVars.cc = 0; | |
| tracerVars.b = !!(tracerVars.b || a.b); | |
| tracerVars.minCopyLength = Math.max(tracerVars.minCopyLength || 8, 8); | |
| if (tracerVars.changeCopiedText) { | |
| tracerVars.readMore = (tracerVars.readMore || (typeof tyntAP != "undefined" ? tyntAP : null) || "Read more:") + " "; | |
| tracerVars.as = tracerVars.as || (typeof tyntAS != "undefined" ? tyntAS : null) || ""; | |
| tracerVars.st = !!(tracerVars.st || a.st); | |
| tracerVars.su = !(tracerVars.su == 0 || a.su == 0); | |
| tracerVars.sp = tracerVars.sp || a.sp; | |
| if (tracerVars.sp) { | |
| X = tracerVars.spid; | |
| W = (tracerVars.spt || decodeURIComponent(a.spt || "")) + " "; | |
| A = tracerVars.sp || decodeURIComponent(a.sp || "") | |
| } | |
| } | |
| }, | |
| removeIAxzzFromTitle = function () { | |
| var a = document.title.indexOf("#ixzz"); | |
| if (a > -1) document.title = document.title.substring(0, a); | |
| a = document.title.indexOf("#axzz"); | |
| if (a > -1) document.title = document.title.substring(0, a) | |
| }, | |
| getUserId = function () { | |
| for (var a = 0; a < Tynt.length; a++) if (Tynt[a] && Tynt[a].length == 22) return Tynt[a]; | |
| return null | |
| }, | |
| tracerJsParams = function (tracerJsSrc) { | |
| if (!tracerJsSrc) return {}; | |
| for (var parsed = {}, params = tracerJsSrc.substring(tracerJsSrc.indexOf("?") + 1).split("&"), f = 0; f < params.length; f++) { | |
| var key_value = params[f].split("="); | |
| if (key_value[0].indexOf("amp;") == 0) key_value[0] = key_value[0].substring(4); | |
| parsed[key_value[0]] = key_value[1] | |
| } | |
| tracerJsSrc = tracerJsSrc.split("/"); | |
| tracerJsSrc.pop(); | |
| parsed.scriptPathUri = tracerJsSrc.join("/"); | |
| return parsed | |
| }(function () { | |
| for (var a = document.getElementsByTagName("script"), b = 0; b < a.length; b++) | |
| if (/\/tracer.*\?/i.test(a[b].src)) return a[b].src; | |
| return null | |
| }()), | |
| userId = tracerJsParams.user || getUserId(); | |
| if (!userId) throw Error("Error finding Tynt Insight userId. Please check your HTML for errors."); | |
| tracerJsParams.user && Tynt.push(tracerJsParams.user); | |
| // Check tracking is disabled or not | |
| var trackingDisabled = function () { | |
| var a = /tracer=test/.test(location.href); | |
| a && sendRequestAfterLoad(id_tynt_com + "/script/verify/" + userId); | |
| if (a) return true; | |
| if (/tracer=no_tracing/.test(location.href)) return true; | |
| if (/disableTracer=/.test(location.href)) { | |
| a = location.href.match(/disableTracer=([^?$]*)/)[1]; | |
| var b = new Date; | |
| b.setDate(a && a == "on" ? b.getDate() + 365 : b.getDate() - 2); | |
| setCookie("disableTracer=y", "expires=" + b.toUTCString()); | |
| console.log('oho'); // never runs | |
| b = createElem("div", {}, { | |
| zIndex:"10000", | |
| position:"absolute", | |
| top:"10%", | |
| left:"10%", | |
| width:"80%", | |
| height:"80%", | |
| backgroundColor:"white", | |
| color:"black", | |
| textAlign:"center", | |
| fontSize:"32px", | |
| paddingTop:"10%", | |
| border:"1px solid gray" | |
| }); | |
| b.innerHTML = "Tynt Insight has been turned " + (a && a == "on" ? "off" : "on") + " in this browser.<br>You may close this window."; | |
| body.insertBefore(b, body.firstChild); | |
| return true | |
| } | |
| if (getCookie(document.cookie, "disableTracer")) return true; | |
| return false | |
| }(); | |
| if (!trackingDisabled) { | |
| if (isIE) { | |
| removeIAxzzFromTitle(); | |
| document.attachEvent("onpropertychange", removeIAxzzFromTitle) | |
| } | |
| initTracerVarsArgs(tracerJsParams); | |
| var processCopyEvent = registerAllEvents(); | |
| Tynt.tyntAddToSelection = doAddToSelection; | |
| } | |
| }; | |
| Tynt.TIL = function () { | |
| document.body ? mainTynt() : setTimeout(Tynt.TIL, 300) | |
| } | |
| })(); | |
| Tynt.TIL() | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Does this script only perform what the name indicates? Or something else? Thanks