JZersche

Facebook JSInject Show Timestamp Information (JZers) 2020 11.22

Nov 22nd, 2020 (edited)
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name     FB: Post Tools & Statistics DEBUG
  3. // @match    https://www.facebook.com/*
  4. // @match    https://*.facebook.com/*
  5. // @match    http://www.facebook.com/*
  6. // @match    http://*.facebook.com/*
  7. // @run-at   document-start
  8. // @grant    GM_addStyle
  9. // @author   JZersche & wOxxOm
  10. // @require  https://greasyfork.org/scripts/12228/code/setMutationHandler.js
  11. // @require  https://momentjs.com/downloads/moment.min.js
  12. // @require  https://momentjs.com/downloads/moment-with-locales.min.js
  13. // @require  https://html2canvas.hertzen.com/dist/html2canvas.js
  14. // @version 1.32DEBUG
  15. // @namespace https://greasyfork.org/users/95175
  16. // @description Shows exact timestamps and post information on Facebook Posts.
  17. // ==/UserScript==
  18.  
  19. var options = {
  20.     weekday: 'long',
  21.     year: 'numeric',
  22.     month: 'numeric',
  23.     day: '2-digit'
  24. };
  25.  
  26. //GM_addStyle('');
  27.  
  28. // process the already loaded portion of the page if any
  29. expandDates(document.querySelectorAll('abbr[data-utime]'));
  30. RecentTimestamps(document.querySelectorAll('.q_1zif-zjsq'));
  31. RecentPostURLs(document.querySelectorAll('.q_1zif-zjsq, ._5r69, ._6ks'));
  32. ExternalURLs(document.querySelectorAll('._52c6'))
  33. //expandSeeMoreText(document.querySelectorAll('.mtm ._5pco'))
  34.  
  35. document.querySelectorAll('.hasCaption');
  36. // process the stuff added from now on
  37. setMutationHandler(document, 'abbr[data-utime]', expandDates);
  38. setMutationHandler(document, '.q_1zif-zjsq', RecentTimestamps);
  39. setMutationHandler(document, '.q_1zif-zjsq, ._5r69, ._6ks', RecentPostURLs);
  40. setMutationHandler(document, '._52c6', ExternalURLs);
  41.  
  42.  
  43. setMutationHandler({
  44.     target: document.querySelector('._5pcr'),
  45.     selector: '.mtm._5pco, ._5pbx.userContent._3576',
  46.     handler: nodes => nodes.forEach(node => {
  47.         console.log('Before —> '+node.childNodes[0].classList);
  48.         let _seemore = node.childNodes[0];
  49.         if(_seemore.classList.length == 1 && _seemore.innerText.match(/\w+\s/)) {
  50.             _seemore.classList.add('text_exposed');
  51.             console.log('After —> '+node.childNodes[0].classList);
  52.         }
  53.     })
  54. })
  55.  
  56.  
  57.  
  58. setMutationHandler({
  59.     target: document.querySelector('._n9'),
  60.     selector: '._n3',
  61.     handler: nodes => nodes.forEach(node => {
  62.         console.log('Before —> '+node.childNodes[1]);
  63.         //if() {
  64.  
  65.         //}
  66.     })
  67. })
  68.  
  69. /* — Copy Text Button Functionality — */
  70. setMutationHandler({
  71.     target: document.querySelector('._3576'),
  72.     selector: '.copybtnP',
  73.     handler: nodes => nodes.forEach(node => {
  74.         //node.setAttribute("style", "");
  75.         node.addEventListener('click', function (event) {
  76.             var classCheck = document.getElementsByClassName('canvasArea');
  77.             //console.log(event.target.parentNode.parentNode.nextSibling.nextSibling.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling.className);
  78.             //console.log(event.target.closest("._1dwg._1w_m._q7o").childNodes[0].nextSibling.childNodes[0].nextSibling.className);
  79.             //alert(event.target.previousSibling.innerText);
  80.             if (classCheck.length == 0) {
  81.  
  82.                 //node.parentNode.appendChild(eTxT1);
  83.                 getSelection().removeAllRanges();
  84.                 var status_content1 = event.target.closest('._1dwg._1w_m._q7o');
  85.  
  86.                 var sName = event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].children[0];
  87. console.log('s name is '+event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].className);
  88.                 var sTime = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0];
  89.                 var sURL = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0].nextSibling.nextSibling;
  90.                 var sContent = event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling;
  91.  
  92.                 var shared_sName = event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling.nextSibling.nextSibling.children[0].nextSibling.children[0].children[0].children[1].children[0].children[0]
  93.  
  94.                 //var status_content2 = event.target.closest('._1dwg._1w_m._q7o').children[1].children[1];
  95.                 var range1 = document.createRange();
  96.                 var range2 = document.createRange();
  97.                 var range3 = document.createRange();
  98.                 var range4 = document.createRange();
  99.                 var range5 = document.createRange();
  100.  
  101.                 range1.selectNodeContents(sName);
  102.                 range2.selectNodeContents(sTime);
  103.                 range3.selectNodeContents(sURL);
  104.                 range4.selectNodeContents(sContent);
  105.                 range5.selectNodeContents(shared_sName);
  106.  
  107.                 window.getSelection().addRange(range1);
  108.                 window.getSelection().addRange(range2);
  109.                 window.getSelection().addRange(range3);
  110.                 window.getSelection().addRange(range4);
  111.                 window.getSelection().addRange(range5);
  112.  
  113.                 var eTxT1 = document.createElement("span"); eTxT1.classList.add("nSpan");
  114.                 var eTxT1_class = document.getElementsByClassName("nSpan")[0];
  115.                 //var eTxT1_text = document.createTextNode("<br>");
  116.                 //eTxT1.appendChild(eTxT1_text);
  117.                 node.parentNode.appendChild(eTxT1);
  118.  
  119. console.log(node);
  120. console.log(document.getElementsByClassName("nSpan")[0].className);
  121.                 let ranges = [];
  122.                 var selection = window.getSelection();
  123.  
  124.                 for(let i = 0; i < selection.rangeCount; i++) {
  125.                     ranges[i] = selection.getRangeAt(i);
  126.                 }
  127.  
  128.                 selection.getRangeAt(3).insertNode(eTxT1); console.log(ranges);
  129.  
  130.  
  131.                 //alert(window.getSelection() + ' (Workings)');
  132.                 ////////var rCon = event.target.closest('._1dwg._1w_m._q7o').textContent = range1.toString() + '<br />' + range2.toString() + '<br />' + range3.toString() + '<br />' + range4.toString();
  133.                 //var ts = range1.toString().replace('·','');
  134.                 //window.getSelection().addRange(range2);
  135.                 //alert(status_content1 + ' (Working)');
  136.             }
  137.  
  138.             if (classCheck.length == 1) {
  139.                 console.log('classcheck length 1');
  140.                 getSelection().removeAllRanges();
  141.                 //console.log(event.target.className);
  142.                 var status_content0 = event.target.parentNode.childNodes[3];
  143.                 //status_content1 = event.target.parentNode.children[0];
  144.                 //status_content2 = event.target.closest('._1dwg._1w_m._q7o').children[1].children[1];
  145.  
  146.                 //Base64 -- event.target.parentNode.children[3]
  147.                 var range0 = document.createRange();
  148.                 //range1 = document.createRange();
  149.                 //range2 = document.createRange();
  150.                 range0.selectNode(status_content0);
  151.                 //range1.selectNode(status_content1);
  152.                 //range2.selectNode(status_content2);
  153.                 window.getSelection().addRange(range0);
  154.                 //window.getSelection().addRange(range1);
  155.                 //window.getSelection().addRange(range2);
  156.             }
  157.  
  158.             try {
  159.                 var successful = document.execCommand('copy');
  160.                 var msg = successful ? 'successful' : 'unsuccessful';
  161.                 //console.log('Copying text command was ' + msg);
  162.             } catch (err) {
  163.                 console.log('Oops, unable to copy');
  164.             }
  165.             return false;
  166.         })
  167.     })
  168. });
  169.  
  170. /* — Insert Copy Text/HTML Button — */
  171.     var nodeCount = 0;
  172.     var NumIncr = 0;
  173.  
  174.     setMutationHandler({
  175.     target: document.querySelector('._3576'),
  176.     selector: '._5pcp',
  177.     processExisting: false,
  178.     handler: nodes => nodes.forEach(node => {
  179.         /*._5pcq*/ /* node.setAttribute("style", ""); */
  180.                     nodeCount++; /* ———---> */ console.log('Amount of Nodes' + nodeCount);
  181.  
  182.             /* Delay Script */
  183.             setTimeout(function () {
  184.                 if (!node.parentNode.innerHTML.match(/copybtnP"|s2img"/)) {
  185.                 /*uncomment-to-enable/* Node Counter console.log('(' + NumIncr++ + ') ' + node.innerText); */
  186.                   var PosterName = 'Posted By: '+node.closest('._6a._5u5j._6b').children[0].innerText;
  187.                   var PostInformation = node.innerText;
  188.                   var PostCategory = document.getElementsByClassName('_5pcq')[1].parentNode.innerText.replace(' · ','');
  189.                   var PostContent = node.closest('.n_1zif-ycce.h_1zif-v9xd.clearfix').nextSibling.innerText;
  190.                       if(!PostCategory) {console.log(PosterName+'\n'+PostInformation+'\n\n'+PostContent)}
  191.                       else {console.log(PosterName+'\n'+PostInformation+'\n\n'+PostContent+'\n\nPost Category: ['+PostCategory+']')} // Next Next Next Update
  192.                           //console.log('node is'+node.className);
  193.                   if(!node.parentNode.parentNode.outerHTML.match(/copybtnP"|copybtnHTML"|s2img"/)) {
  194.                     node.insertAdjacentHTML('afterend', '<input type="button" class="copybtnP" name="copyp" value="Copy Text"/>');
  195.                     node.insertAdjacentHTML('afterend', '<input type="button" class="copybtnHTML" name="copyHTML" value="Copy HTML"/>');
  196.                     node.insertAdjacentHTML('afterend', '<input type="button" class="s2img" name="s2img" value="Export Status"/>');console.log(node.parentNode);}
  197.                 }
  198.             }, 0);
  199.         })
  200.  
  201.     });
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213. /* — Copy Test/HTML Button Functionality — */
  214. setMutationHandler({
  215.     target: document.querySelector('._3576'),
  216.     selector: '.copybtnHTML',
  217.     handler: nodes => nodes.forEach(node => {
  218.         //node.setAttribute("style", "");
  219.         nodeCount++;
  220.         try {
  221.                if(node.parentNode.parentNode.closest('.n_1zif-ycce').nextSibling.nextSibling.children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[0])
  222.                {
  223.                    var youtube_attach = node.parentNode.parentNode.closest('.n_1zif-ycce').nextSibling.nextSibling.children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[0].children[0];
  224.                    //console.log(youtube_attach);
  225.                    if(youtube_attach.href.match(/youtube/)[0] == "youtube")
  226.                    {
  227.                        youtube_attach.parentNode.parentNode.nextSibling.setAttribute("style","position: absolute;top: 0px;height: 72px;left: 170px;padding: 2px;z-index: 0;width: 340px");
  228.                        youtube_attach.children[0].nextSibling.children[0].setAttribute("style", "width: 160px;height: auto;max-width: 175px;max-height: 90px;left: 8px; border-radius:8px; overflow: hidden");
  229.                        youtube_attach.children[1].setAttribute('style','background: #0000;');
  230.                    }
  231.                }
  232.             } catch (Error) {var Error = {name:"YouTube Link not Found ", message:nodeCount}; console.log(Error.name + Error.message);}
  233.  
  234.         node.addEventListener('click', function (event) {
  235.             var classCheck = document.getElementsByClassName('canvasArea');
  236.             //console.log(event.target.parentNode.parentNode.nextSibling.nextSibling.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling.className);
  237.             //console.log(event.target.closest("._1dwg._1w_m._q7o").childNodes[0].nextSibling.childNodes[0].nextSibling.className);
  238.             //alert(event.target.previousSibling.innerText);
  239.             if (classCheck.length == 0) {
  240.                 console.log('LENGTH IS 0 [Line 231]');
  241.                 //node.parentNode.appendChild(eTxT1);
  242.                 getSelection().removeAllRanges();
  243.                 var status_content1 = event.target.closest('._1dwg._1w_m._q7o');
  244.  
  245.                 var sName = event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].children[0];
  246. var sNr = sName.innerHTML;
  247.                 event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].children[0].innerHTML = '&lt;/span class="status_uname"&gt'+sNr+'&lt;/span&gt&lt;br&gt;';
  248.  
  249.                 var sTime = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0];
  250. var sTr = sTime.innerHTML;
  251.                 event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0].innerHTML = '&lt;span class="status_time"&gt'+sTr+'&lt;/span&gt';
  252.  
  253.                 var sURL = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[2];
  254. var sURLr = sURL.innerHTML;
  255.                 event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[2].innerHTML = '<br style="display:block;">&lt;br&gt;&lt;span class=&quot;_hrefURL&quot;&gt'+event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[2].innerHTML+'&lt;&#47;span&gt';
  256.  
  257.                 var sContent = event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling;
  258. var sCont = sContent.innerHTML;
  259.                 event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling.innerHTML = '&lt;span class="status_text"&gt'+sCont+'&lt;/span&gt';
  260.  
  261.  
  262.                 var shared_sName = event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling.nextSibling.children[0].nextSibling.children[0].children[0].children[1].children[0];
  263.  
  264.                 //var status_content2 = event.target.closest('._1dwg._1w_m._q7o').children[1].children[1];
  265.                 var range0 = document.createRange();
  266.                 var range1 = document.createRange();
  267.                 var range2 = document.createRange();
  268.                 var range3 = document.createRange();
  269.                 var range4 = document.createRange();
  270.                 var range5 = document.createRange();
  271.  
  272.                 range0.selectNodeContents(sName);
  273.                 range1.selectNodeContents(sTime);
  274.                 range2.selectNodeContents(sURL);
  275.                 range3.selectNodeContents(sContent);//range3.collapse(true);
  276.                 range4.selectNodeContents(sContent.nextSibling);
  277. range4.setStartAfter(sContent);
  278. range4.setEndBefore(sContent.nextSibling);
  279.                 range5.selectNodeContents(shared_sName);
  280.                 //range4.collapse(true);
  281.  
  282.                 window.getSelection().addRange(range0);
  283.                 window.getSelection().addRange(range1);
  284.                 window.getSelection().addRange(range2);
  285.                 window.getSelection().addRange(range3);
  286.                 window.getSelection().addRange(range4);
  287.                 window.getSelection().addRange(range5);
  288.  
  289.                 var r_ins_before = document.createElement("span");
  290.                 r_ins_before.classList.add("range_ins_Before");
  291.                 var r_ins_before_text = document.createTextNode("BEFORE");
  292.                 r_ins_before.appendChild(r_ins_before_text);
  293.  
  294.                 var r_ins_after = document.createElement("span");
  295.                 r_ins_after.classList.add("range_ins_After");
  296.                 var r_ins_after_text = document.createTextNode("AFTER");
  297.                 r_ins_after.appendChild(r_ins_after_text);
  298.  
  299.                 //node.parentNode.appendChild(eTxT1);
  300.  
  301.                 let ranges = [];
  302.                 var selection = window.getSelection();
  303.  
  304.                 for(let i = 0; i < selection.rangeCount; i++) {
  305.                     ranges[i] = selection.getRangeAt(i);
  306.                 }
  307.  
  308.                 selection.getRangeAt(0).insertNode(r_ins_before);
  309.                 selection.getRangeAt(4).insertNode(r_ins_after);
  310.                 console.log(ranges);
  311.                 console.log(range4.endOffset)
  312.  
  313.  
  314.                 //alert(window.getSelection() + ' (Workings)');
  315.                 ////////var rCon = event.target.closest('._1dwg._1w_m._q7o').textContent = range1.toString() + '<br />' + range2.toString() + '<br />' + range3.toString() + '<br />' + range4.toString();
  316.                 //var ts = range1.toString().replace('·','');
  317.                 //window.getSelection().addRange(range2);
  318.                 //alert(status_content1 + ' (Working)');
  319.  /**********/event.target.closest('._1dwg._1w_m._q7o').insertAdjacentHTML('afterend','<textarea style="max-width: 100%;resize: none;border: none;font-size: 10px !important;line-height: 10px;background-color: #000;color: #262 !important;height: 100px">sdasds</textarea>');
  320.             }
  321.  
  322.             try {
  323.                 var successful = document.execCommand('copy');
  324.                 var msg = successful ? 'successful' : 'unsuccessful';
  325.                 //console.log('Copying text command was ' + msg);
  326.             } catch (err) {
  327.                 console.log('Oops, unable to copy');
  328.             }
  329.             return false;
  330.         })
  331.     })
  332. });
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.   setMutationHandler({
  348.     target: document.querySelector('.fbPhotosPhotoCaption'),
  349.     selector: '.hasCaption',
  350.     handler: nodes => nodes.forEach(node => {
  351.         node.style.color = '#f00';
  352.         var PhotoCaption = document.getElementsByClassName('hasCaption')[0];
  353.         console.log('Current Image: ' + PhotoCaption.innerText);
  354.         if (!document.getElementsByClassName('fbPhotosPhotoCaption')[0].innerHTML.includes('copybtn"')) {
  355.             PhotoCaption.insertAdjacentHTML('afterend', '<input type="button" class="copybtn" name="copy" value="Copy"/>');
  356.         }
  357.         var copyTextareaBtn = document.querySelector('.copybtn');
  358.         copyTextareaBtn.addEventListener('click', function (event) {
  359.             var copy_text = document.getElementsByClassName("hasCaption")[0];
  360.             var range = document.createRange();
  361.             range.selectNode(copy_text);
  362.             window.getSelection().addRange(range);
  363.             try {
  364.                 var successful = document.execCommand('copy');
  365.                 var msg = successful ? 'successful' : 'unsuccessful';
  366.                 console.log('Copying text command was ' + msg);
  367.             } catch (err) {
  368.                 console.log('Oops, unable to copy');
  369.             }
  370.         });
  371.     })
  372.   });
  373.  
  374.  
  375. function pad(n, width, z) {
  376.     z = z || '0';
  377.     n = n + '';
  378.     return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
  379. }
  380.  
  381. function expandDates(e) {
  382.     for (var t, a = 0; t = e[a++];)
  383.     {
  384.       t.querySelector(".full-timestamp") || t.insertAdjacentHTML("beforeend", '<span class="full-timestamp"> on ' + moment(new Date(1e3 * t.dataset.utime)).format("l \\at LTS") + '</span>');
  385.       if(t.children[0].innerText.match(/[A-Z]\D+\s\d{1,2}\s\D{2}\s\d{1,2}\:\d{2}\s(A|P)M/)) {t.removeChild(t.children[0])}
  386.     };
  387. }
  388.  
  389. function RecentTimestamps(e) {
  390.     for (var t, n = 0; t = e[n++];)
  391.         if (!t.querySelector(".full-timestamp")) {
  392.             if (1 == t.innerText.includes("min")) {
  393.                 var a = t.innerText.match(/[0-9]{1,2}/),
  394.                     s = parseInt(a, 10);
  395.                 t.insertAdjacentHTML("beforeend", '<span class="full-timestamp"> <span style="color:#365899">(' + moment(new Date).subtract(s, "minutes").format("h:mm:ss A") + ' ≃ <span style="color:#365899">ᴀᴘᴘʀᴏxɪᴍᴀᴛᴇ)</span><br>')
  396.             }
  397.             if (1 == t.innerText.includes("hr")) {
  398.                 var r = t.innerText.match(/[0-9]{1,2}/),
  399.                     m = parseInt(r, 10),
  400.                     o = 10 * parseInt(moment(new Date).format("mm") / 10, 10),
  401.                     l = 10 * parseInt(moment(new Date).format("ss") / 10, 10);
  402.                 t.insertAdjacentHTML("beforeend", '<span class="full-timestamp"> <span style="color:#365899">on ' + moment(new Date).subtract(m, "hours").format("l \\at h:") + pad(o, 2) + ":" + pad(l, 2) + '<span style="color:#365899"> ≃ (ᴀᴘᴘʀᴏxɪᴍᴀᴛᴇ)</span><br>')
  403.             }
  404.         }
  405. }
  406.  
  407. function RecentPostURLs(e) {
  408.     if (e.parentNode) {
  409.         for (var a = 0; a < e.length; a++) {
  410.             var r = e[a];
  411.             !1 === r.innerHTML.includes("<br>") && "_5r69" != r.className && (r.getElement, r.insertAdjacentHTML("afterend", '<br><span style="color:#9c9dc3">' + r.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.previousSibling.href.replace(/\?fref=nf/, "").replace("&__tn__=", "").replace("&__tn__=m-R", "").replace("7%2Cdm-R-R", "").replace("%2Cdm-R-R", "").replace(/&eid=.+/, "").replace(/xts/, "").match(/facebook.com\/[a-z|A-Z|[0-9|\-|_|.]+.[a-zA-Z|[0-9|\-|_|.|]+[a-zA-Z|[0-9|\-|_|.|?=]+/) + "</span>"))
  412.         }
  413.     }
  414. }
  415.  
  416. function ExternalURLs(e) {
  417.     for (var n = 0; n < e.length; n++) {
  418.         var r = e[n], a = r.href.replace(/https:\/\/l\.facebook.com\/l.php\?u=/, "");
  419.         console.log('log '+e.length);
  420.         if(r.parentNode.innerHTML.match(/external/) == null) {
  421.             r.parentNode.insertAdjacentHTML("afterend", '<div class="externalURLs">' + decodeURIComponent(a.replace(/\+/g, " ")).replace(/.fbclid=[\D}\d]+/, "").slice(0, 256) + "</div>"); break;
  422.         } else {break;}
  423.     }
  424. }
  425.  
  426.  
  427.  
  428. setMutationHandler({
  429.     target: document.querySelector('.f_1zif-zmj1'),
  430.     selector: '.q_1zif-zjsq',
  431.     handler: nodes => nodes.forEach(node => {
  432.         if(node) {
  433.             var event1 = new MouseEvent('mouseover');
  434.             node.dispatchEvent(event1);
  435.             var _newsfeed__fulltimes = event1.target.title;
  436.             console.log(_newsfeed__fulltimes);
  437.             //if(!node.parentNode.innerHTML.includes(/timess/)) { alert('test');
  438.  
  439.                 //alert(node.parentNode.innerHTML);
  440. setTimeout( function() {
  441.                 if(!node.parentNode.innerHTML.includes('timess')) {
  442.                     node.insertAdjacentHTML("beforebegin", "<span class='timess' style='color:#f00;margin-left:0px;'>" + event1.target.title + '</span>');
  443.                     node.parentNode.childNodes[0].parentNode.childNodes[1].setAttribute('style','margin-left:3px;color:#fff!important;background:#000;border-radius:0px;border-left:0px solid #bbb;padding-right:2px;padding-left:4px!important;z-index: 0;font-weight: 600;font-family: \'Segoe UI\';font-size:13px;');
  444.                 }
  445. }, 1000)
  446.             //alert(node.parentNode.innerHTML);
  447.             //node.previousSibling.setAttribute('style','background:red!important;border-radius:6px!important;');
  448.             //var ago_formatter = node.parentNode.childNodes[1].parentNode.childNodes[1].innerText.match(/([0-9]{1,2}\D)/);
  449.             //alert(node.parentNode.childNodes[0].parentNode.childNodes[1].innerHTML.length);
  450.             //node.parentNode.innerText = ago_formatter;
  451.  
  452.         }
  453.     })
  454.  
  455. });
  456.  
  457. setMutationHandler({
  458.     target: document.querySelector('._1dwg._1w_m._q7o'),
  459.     selector: '._5ptz',
  460.     handler: nodes => nodes.forEach(node => {
  461.         if(!node.parentNode.innerHTML.includes("<br>")) {
  462.             /* DISPLAYED URL SANITIZATION */ var hrefp = node.parentNode.href.replace(/(\?__xts__%\S+)/,"<span style='color:lime!important;display:none;'> $1 </span>").replace(/(\&__xts__\S+)/,"<span style='color:red!important;display:none;'> $1 </span>").replace(/(https:\/\/www.facebook.com\/#)/,"<span style='display:none!important;color:orange!important;display:none;'> $1</span>").replace(/(https:\/\/www.facebook.com\/)/,"<span style='color:indigo!important;display:none;'> $1</span>").replace(/(\/\?story_token=S%3A_)/,"<span style='color:#f0f!important;display:;'><br>Story Token: </span>").replace(/(\w+)(\%3A)(\w+)/,"<span style='color:#f0f!important;'>$1:$3</span>");
  463.             /* HREF LINK SANITIZATION */ node.parentNode.href = node.parentNode.href.replace(/(.__xts__.+)/,"#FBTools");
  464.             node.parentNode.setAttribute('style','background:#000!important;border-radius:6px!important;');
  465.             node.insertAdjacentHTML("beforeend", "<br><span class='_hrefURL'>" + hrefp + '</span>');
  466.  
  467.         }
  468.     })
  469.  
  470. });
  471.  
  472. setMutationHandler({
  473.     target: document.querySelector('._5pcp._5lel._2jyu._232_'),
  474.     selector: '._5pcq',
  475.     handler: nodes => nodes.forEach(node => {
  476.         if(!node.innerHTML.includes("<br>")) {
  477.             if(!window.location.href.match(/Galactic/)){
  478.             /* DISPLAYED URL SANITIZATION */ var hrefp = node.href.replace(/(\?__xts__%\S+)/,"<span style='color:lime!important;display:none;'> $1 </span>").replace(/(\&__xts__\S+)/,"<span style='color:red!important;display:none;'> $1 </span>").replace(/(https:\/\/www.facebook.com\/#)/,"<span style='display:none!important;color:orange!important;display:;'> $1</span>").replace(/(https:\/\/www.facebook.com)(\/\S+#)/,"<span style='color:#f64!important;display:none;'>aaaa</span>").replace(/(\/\?story_token=S%3A_)/,"<span style='color:#f0f!important;display:;'><br>Story Token: </span>").replace(/(\w+)(\%3A)(\w+)/,"<span style='color:#f0f!important;'>$1:$3</span>").replace(/\/\?type=3/,'<br>FB Post Tools 2020');
  479.                 node.insertAdjacentHTML("beforeend", "<br><span class='_hrefURL'>" + hrefp + '</span>');
  480. }
  481.  
  482.             /* HREF LINK SANITIZATION */ node.href = node.href.replace(/(.__xts__.+)/,"#FBTools");
  483.             node.setAttribute('style','border:0px solid #fff!important;border-radius:12px;line-height:14px!important;letter-spacing:-0.15px!important;');
  484.             //node.insertAdjacentHTML("beforeend", "<br><span class='_hrefURL'>" + hrefp + '</span>');
  485.  
  486.         }
  487.     })
  488.  
  489. });
  490.  
  491.  
Add Comment
Please, Sign In to add comment