(function () { var isExtensionOn = true; function toDataURL(url, callback) { var xhr = new XMLHttpRequest(); xhr.onload = function() { var blob = xhr.response; if (blob.size > (25 * 1024)) { callback(url); // Image size is larger than 25kb. return; } var reader = new FileReader(); reader.onloadend = function() { callback(reader.result); } reader.readAsDataURL(xhr.response); }; xhr.open('GET', url); xhr.responseType = 'blob'; xhr.send(); } function escapeHtml(unsafe){ // success is when goofs be trying to hack me return unsafe .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'") || ""; } function getAllContentNodes(element) { var resp = ""; if (!element.childNodes || !element.childNodes.length){ if (element.nodeType===3){ return escapeHtml(element.textContent) || ""; } } element.childNodes.forEach(node=>{ if (node.childNodes.length){ resp += getAllContentNodes(node) } else if ((node.nodeType === 3) && node.textContent && (node.textContent.trim().length > 0)){ resp += escapeHtml(node.textContent); } else if (node.nodeType === 1){ if (!settings.textonlymode){ if ((node.nodeName == "IMG") && node.src){ node.src = node.src+""; } resp += node.outerHTML; } } }); return resp; } function processMessage(ele){ //console.log(ele); var chatimg = ""; try{ chatimg = ele.querySelector(".tw-comment-item-icon img[src]").src; } catch(e){ // console.warn(e); } var name=""; try { name = ele.querySelector(".tw-comment-item-name").childNodes[0].textContent.trim(); name = escapeHtml(name); } catch(e){ // console.warn(e); } var userid=""; try { userid = ele.querySelector(".tw-comment-item-name[href]").href; userid = userid.replace("/",""); } catch(e){ // console.warn(e); } var msg=""; try { msg = getAllContentNodes(ele.querySelector(".tw-comment-item-comment")); } catch(e){ // console.warn(e); } if (!name || !msg){ return; } var data = {}; data.chatname = name; data.chatbadges = ""; data.userid = userid; data.backgroundColor = ""; data.textColor = ""; data.chatmessage = msg; data.chatimg = chatimg; data.hasDonation = ""; data.membership = "";; data.contentimg = ""; data.textonly = settings.textonlymode || false; data.type = "twitcasting"; // console.log(data); pushMessage(data); } function pushMessage(data){ try{ chrome.runtime.sendMessage(chrome.runtime.id, { "message": data }, function(e){}); } catch(e){ } } var settings = {}; // settings.textonlymode // settings.captureevents chrome.runtime.sendMessage(chrome.runtime.id, { "getSettings": true }, function(response){ // {"state":isExtensionOn,"streamID":channel, "settings":settings} if (typeof chrome !== "undefined" && chrome.runtime && chrome.runtime.lastError) { return; } response = response || {}; if ("settings" in response){ settings = response.settings; } }); chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { try{ if ("getSource" == request){sendResponse("twitcasting"); return; } if ("focusChat" == request){ // if (prev.querySelector('[id^="message-username-"]')){ //slateTextArea- document.querySelector('textarea').focus(); sendResponse(true); return; } if (typeof request === "object"){ if ("settings" in request){ settings = request.settings; sendResponse(true); return; } } } catch(e){} sendResponse(false); } ); var lastURL = ""; var observer = null; function onElementInserted(containerSelector) { var target = document.querySelector(containerSelector); if (!target){return;} var onMutationsObserved = function(mutations) { mutations.forEach(function(mutation) { if (mutation.addedNodes.length) { for (var i = 0, len = mutation.addedNodes.length; i < len; i++) { try { if (mutation.addedNodes[i].skip){continue;} mutation.addedNodes[i].skip = true; processMessage(mutation.addedNodes[i]); } catch(e){} } } }); }; var config = { childList: true, subtree: true }; var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; observer = new MutationObserver(onMutationsObserved); observer.observe(target, config); } console.log("social stream injected"); setInterval(function(){ try { if (document.querySelector('.tw-comment-list-view')){ if (!document.querySelector('.tw-comment-list-view').marked){ document.querySelector('.tw-comment-list-view').marked=true; console.log("CONNECTED chat detected"); onElementInserted('.tw-comment-list-view'); } }} catch(e){} },2000); })();