Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name FB: Post Tools & Statistics DEBUG
- // @match https://www.facebook.com/*
- // @match https://*.facebook.com/*
- // @match http://www.facebook.com/*
- // @match http://*.facebook.com/*
- // @run-at document-start
- // @grant GM_addStyle
- // @author JZersche & wOxxOm
- // @require https://greasyfork.org/scripts/12228/code/setMutationHandler.js
- // @require https://momentjs.com/downloads/moment.min.js
- // @require https://momentjs.com/downloads/moment-with-locales.min.js
- // @require https://html2canvas.hertzen.com/dist/html2canvas.js
- // @version 1.32DEBUG
- // @namespace https://greasyfork.org/users/95175
- // @description Shows exact timestamps and post information on Facebook Posts.
- // ==/UserScript==
- var options = {
- weekday: 'long',
- year: 'numeric',
- month: 'numeric',
- day: '2-digit'
- };
- //GM_addStyle('');
- // process the already loaded portion of the page if any
- expandDates(document.querySelectorAll('abbr[data-utime]'));
- RecentTimestamps(document.querySelectorAll('.q_1zif-zjsq'));
- RecentPostURLs(document.querySelectorAll('.q_1zif-zjsq, ._5r69, ._6ks'));
- ExternalURLs(document.querySelectorAll('._52c6'))
- //expandSeeMoreText(document.querySelectorAll('.mtm ._5pco'))
- document.querySelectorAll('.hasCaption');
- // process the stuff added from now on
- setMutationHandler(document, 'abbr[data-utime]', expandDates);
- setMutationHandler(document, '.q_1zif-zjsq', RecentTimestamps);
- setMutationHandler(document, '.q_1zif-zjsq, ._5r69, ._6ks', RecentPostURLs);
- setMutationHandler(document, '._52c6', ExternalURLs);
- setMutationHandler({
- target: document.querySelector('._5pcr'),
- selector: '.mtm._5pco, ._5pbx.userContent._3576',
- handler: nodes => nodes.forEach(node => {
- console.log('Before —> '+node.childNodes[0].classList);
- let _seemore = node.childNodes[0];
- if(_seemore.classList.length == 1 && _seemore.innerText.match(/\w+\s/)) {
- _seemore.classList.add('text_exposed');
- console.log('After —> '+node.childNodes[0].classList);
- }
- })
- })
- setMutationHandler({
- target: document.querySelector('._n9'),
- selector: '._n3',
- handler: nodes => nodes.forEach(node => {
- console.log('Before —> '+node.childNodes[1]);
- //if() {
- //}
- })
- })
- /* — Copy Text Button Functionality — */
- setMutationHandler({
- target: document.querySelector('._3576'),
- selector: '.copybtnP',
- handler: nodes => nodes.forEach(node => {
- //node.setAttribute("style", "");
- node.addEventListener('click', function (event) {
- var classCheck = document.getElementsByClassName('canvasArea');
- //console.log(event.target.parentNode.parentNode.nextSibling.nextSibling.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling.className);
- //console.log(event.target.closest("._1dwg._1w_m._q7o").childNodes[0].nextSibling.childNodes[0].nextSibling.className);
- //alert(event.target.previousSibling.innerText);
- if (classCheck.length == 0) {
- //node.parentNode.appendChild(eTxT1);
- getSelection().removeAllRanges();
- var status_content1 = event.target.closest('._1dwg._1w_m._q7o');
- var sName = event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].children[0];
- console.log('s name is '+event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].className);
- var sTime = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0];
- var sURL = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0].nextSibling.nextSibling;
- var sContent = event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling;
- 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]
- //var status_content2 = event.target.closest('._1dwg._1w_m._q7o').children[1].children[1];
- var range1 = document.createRange();
- var range2 = document.createRange();
- var range3 = document.createRange();
- var range4 = document.createRange();
- var range5 = document.createRange();
- range1.selectNodeContents(sName);
- range2.selectNodeContents(sTime);
- range3.selectNodeContents(sURL);
- range4.selectNodeContents(sContent);
- range5.selectNodeContents(shared_sName);
- window.getSelection().addRange(range1);
- window.getSelection().addRange(range2);
- window.getSelection().addRange(range3);
- window.getSelection().addRange(range4);
- window.getSelection().addRange(range5);
- var eTxT1 = document.createElement("span"); eTxT1.classList.add("nSpan");
- var eTxT1_class = document.getElementsByClassName("nSpan")[0];
- //var eTxT1_text = document.createTextNode("<br>");
- //eTxT1.appendChild(eTxT1_text);
- node.parentNode.appendChild(eTxT1);
- console.log(node);
- console.log(document.getElementsByClassName("nSpan")[0].className);
- let ranges = [];
- var selection = window.getSelection();
- for(let i = 0; i < selection.rangeCount; i++) {
- ranges[i] = selection.getRangeAt(i);
- }
- selection.getRangeAt(3).insertNode(eTxT1); console.log(ranges);
- //alert(window.getSelection() + ' (Workings)');
- ////////var rCon = event.target.closest('._1dwg._1w_m._q7o').textContent = range1.toString() + '<br />' + range2.toString() + '<br />' + range3.toString() + '<br />' + range4.toString();
- //var ts = range1.toString().replace('·','');
- //window.getSelection().addRange(range2);
- //alert(status_content1 + ' (Working)');
- }
- if (classCheck.length == 1) {
- console.log('classcheck length 1');
- getSelection().removeAllRanges();
- //console.log(event.target.className);
- var status_content0 = event.target.parentNode.childNodes[3];
- //status_content1 = event.target.parentNode.children[0];
- //status_content2 = event.target.closest('._1dwg._1w_m._q7o').children[1].children[1];
- //Base64 -- event.target.parentNode.children[3]
- var range0 = document.createRange();
- //range1 = document.createRange();
- //range2 = document.createRange();
- range0.selectNode(status_content0);
- //range1.selectNode(status_content1);
- //range2.selectNode(status_content2);
- window.getSelection().addRange(range0);
- //window.getSelection().addRange(range1);
- //window.getSelection().addRange(range2);
- }
- try {
- var successful = document.execCommand('copy');
- var msg = successful ? 'successful' : 'unsuccessful';
- //console.log('Copying text command was ' + msg);
- } catch (err) {
- console.log('Oops, unable to copy');
- }
- return false;
- })
- })
- });
- /* — Insert Copy Text/HTML Button — */
- var nodeCount = 0;
- var NumIncr = 0;
- setMutationHandler({
- target: document.querySelector('._3576'),
- selector: '._5pcp',
- processExisting: false,
- handler: nodes => nodes.forEach(node => {
- /*._5pcq*/ /* node.setAttribute("style", ""); */
- nodeCount++; /* ———---> */ console.log('Amount of Nodes' + nodeCount);
- /* Delay Script */
- setTimeout(function () {
- if (!node.parentNode.innerHTML.match(/copybtnP"|s2img"/)) {
- /*uncomment-to-enable/* Node Counter console.log('(' + NumIncr++ + ') ' + node.innerText); */
- var PosterName = 'Posted By: '+node.closest('._6a._5u5j._6b').children[0].innerText;
- var PostInformation = node.innerText;
- var PostCategory = document.getElementsByClassName('_5pcq')[1].parentNode.innerText.replace(' · ','');
- var PostContent = node.closest('.n_1zif-ycce.h_1zif-v9xd.clearfix').nextSibling.innerText;
- if(!PostCategory) {console.log(PosterName+'\n'+PostInformation+'\n\n'+PostContent)}
- else {console.log(PosterName+'\n'+PostInformation+'\n\n'+PostContent+'\n\nPost Category: ['+PostCategory+']')} // Next Next Next Update
- //console.log('node is'+node.className);
- if(!node.parentNode.parentNode.outerHTML.match(/copybtnP"|copybtnHTML"|s2img"/)) {
- node.insertAdjacentHTML('afterend', '<input type="button" class="copybtnP" name="copyp" value="Copy Text"/>');
- node.insertAdjacentHTML('afterend', '<input type="button" class="copybtnHTML" name="copyHTML" value="Copy HTML"/>');
- node.insertAdjacentHTML('afterend', '<input type="button" class="s2img" name="s2img" value="Export Status"/>');console.log(node.parentNode);}
- }
- }, 0);
- })
- });
- /* — Copy Test/HTML Button Functionality — */
- setMutationHandler({
- target: document.querySelector('._3576'),
- selector: '.copybtnHTML',
- handler: nodes => nodes.forEach(node => {
- //node.setAttribute("style", "");
- nodeCount++;
- try {
- 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])
- {
- 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];
- //console.log(youtube_attach);
- if(youtube_attach.href.match(/youtube/)[0] == "youtube")
- {
- youtube_attach.parentNode.parentNode.nextSibling.setAttribute("style","position: absolute;top: 0px;height: 72px;left: 170px;padding: 2px;z-index: 0;width: 340px");
- 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");
- youtube_attach.children[1].setAttribute('style','background: #0000;');
- }
- }
- } catch (Error) {var Error = {name:"YouTube Link not Found ", message:nodeCount}; console.log(Error.name + Error.message);}
- node.addEventListener('click', function (event) {
- var classCheck = document.getElementsByClassName('canvasArea');
- //console.log(event.target.parentNode.parentNode.nextSibling.nextSibling.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling.className);
- //console.log(event.target.closest("._1dwg._1w_m._q7o").childNodes[0].nextSibling.childNodes[0].nextSibling.className);
- //alert(event.target.previousSibling.innerText);
- if (classCheck.length == 0) {
- console.log('LENGTH IS 0 [Line 231]');
- //node.parentNode.appendChild(eTxT1);
- getSelection().removeAllRanges();
- var status_content1 = event.target.closest('._1dwg._1w_m._q7o');
- var sName = event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].children[0];
- var sNr = sName.innerHTML;
- event.target.closest('._6a._5u5j._6b').children[0].children[0].children[0].children[0].innerHTML = '</span class="status_uname">'+sNr+'</span><br>';
- var sTime = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0];
- var sTr = sTime.innerHTML;
- event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[0].innerHTML = '<span class="status_time">'+sTr+'</span>';
- var sURL = event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[2];
- var sURLr = sURL.innerHTML;
- event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[2].innerHTML = '<br style="display:block;"><br><span class="_hrefURL">'+event.target.closest('._6a._5u5j._6b').children[1].children[0].children[0].children[0].children[2].innerHTML+'</span>';
- var sContent = event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling;
- var sCont = sContent.innerHTML;
- event.target.closest('.n_1zif-ycce._5eit.h_1zif-v9xd.clearfix').nextSibling.innerHTML = '<span class="status_text">'+sCont+'</span>';
- 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];
- //var status_content2 = event.target.closest('._1dwg._1w_m._q7o').children[1].children[1];
- var range0 = document.createRange();
- var range1 = document.createRange();
- var range2 = document.createRange();
- var range3 = document.createRange();
- var range4 = document.createRange();
- var range5 = document.createRange();
- range0.selectNodeContents(sName);
- range1.selectNodeContents(sTime);
- range2.selectNodeContents(sURL);
- range3.selectNodeContents(sContent);//range3.collapse(true);
- range4.selectNodeContents(sContent.nextSibling);
- range4.setStartAfter(sContent);
- range4.setEndBefore(sContent.nextSibling);
- range5.selectNodeContents(shared_sName);
- //range4.collapse(true);
- window.getSelection().addRange(range0);
- window.getSelection().addRange(range1);
- window.getSelection().addRange(range2);
- window.getSelection().addRange(range3);
- window.getSelection().addRange(range4);
- window.getSelection().addRange(range5);
- var r_ins_before = document.createElement("span");
- r_ins_before.classList.add("range_ins_Before");
- var r_ins_before_text = document.createTextNode("BEFORE");
- r_ins_before.appendChild(r_ins_before_text);
- var r_ins_after = document.createElement("span");
- r_ins_after.classList.add("range_ins_After");
- var r_ins_after_text = document.createTextNode("AFTER");
- r_ins_after.appendChild(r_ins_after_text);
- //node.parentNode.appendChild(eTxT1);
- let ranges = [];
- var selection = window.getSelection();
- for(let i = 0; i < selection.rangeCount; i++) {
- ranges[i] = selection.getRangeAt(i);
- }
- selection.getRangeAt(0).insertNode(r_ins_before);
- selection.getRangeAt(4).insertNode(r_ins_after);
- console.log(ranges);
- console.log(range4.endOffset)
- //alert(window.getSelection() + ' (Workings)');
- ////////var rCon = event.target.closest('._1dwg._1w_m._q7o').textContent = range1.toString() + '<br />' + range2.toString() + '<br />' + range3.toString() + '<br />' + range4.toString();
- //var ts = range1.toString().replace('·','');
- //window.getSelection().addRange(range2);
- //alert(status_content1 + ' (Working)');
- /**********/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>');
- }
- try {
- var successful = document.execCommand('copy');
- var msg = successful ? 'successful' : 'unsuccessful';
- //console.log('Copying text command was ' + msg);
- } catch (err) {
- console.log('Oops, unable to copy');
- }
- return false;
- })
- })
- });
- setMutationHandler({
- target: document.querySelector('.fbPhotosPhotoCaption'),
- selector: '.hasCaption',
- handler: nodes => nodes.forEach(node => {
- node.style.color = '#f00';
- var PhotoCaption = document.getElementsByClassName('hasCaption')[0];
- console.log('Current Image: ' + PhotoCaption.innerText);
- if (!document.getElementsByClassName('fbPhotosPhotoCaption')[0].innerHTML.includes('copybtn"')) {
- PhotoCaption.insertAdjacentHTML('afterend', '<input type="button" class="copybtn" name="copy" value="Copy"/>');
- }
- var copyTextareaBtn = document.querySelector('.copybtn');
- copyTextareaBtn.addEventListener('click', function (event) {
- var copy_text = document.getElementsByClassName("hasCaption")[0];
- var range = document.createRange();
- range.selectNode(copy_text);
- window.getSelection().addRange(range);
- try {
- var successful = document.execCommand('copy');
- var msg = successful ? 'successful' : 'unsuccessful';
- console.log('Copying text command was ' + msg);
- } catch (err) {
- console.log('Oops, unable to copy');
- }
- });
- })
- });
- function pad(n, width, z) {
- z = z || '0';
- n = n + '';
- return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
- }
- function expandDates(e) {
- for (var t, a = 0; t = e[a++];)
- {
- t.querySelector(".full-timestamp") || t.insertAdjacentHTML("beforeend", '<span class="full-timestamp"> on ' + moment(new Date(1e3 * t.dataset.utime)).format("l \\at LTS") + '</span>');
- 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])}
- };
- }
- function RecentTimestamps(e) {
- for (var t, n = 0; t = e[n++];)
- if (!t.querySelector(".full-timestamp")) {
- if (1 == t.innerText.includes("min")) {
- var a = t.innerText.match(/[0-9]{1,2}/),
- s = parseInt(a, 10);
- 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>')
- }
- if (1 == t.innerText.includes("hr")) {
- var r = t.innerText.match(/[0-9]{1,2}/),
- m = parseInt(r, 10),
- o = 10 * parseInt(moment(new Date).format("mm") / 10, 10),
- l = 10 * parseInt(moment(new Date).format("ss") / 10, 10);
- 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>')
- }
- }
- }
- function RecentPostURLs(e) {
- if (e.parentNode) {
- for (var a = 0; a < e.length; a++) {
- var r = e[a];
- !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>"))
- }
- }
- }
- function ExternalURLs(e) {
- for (var n = 0; n < e.length; n++) {
- var r = e[n], a = r.href.replace(/https:\/\/l\.facebook.com\/l.php\?u=/, "");
- console.log('log '+e.length);
- if(r.parentNode.innerHTML.match(/external/) == null) {
- r.parentNode.insertAdjacentHTML("afterend", '<div class="externalURLs">' + decodeURIComponent(a.replace(/\+/g, " ")).replace(/.fbclid=[\D}\d]+/, "").slice(0, 256) + "</div>"); break;
- } else {break;}
- }
- }
- setMutationHandler({
- target: document.querySelector('.f_1zif-zmj1'),
- selector: '.q_1zif-zjsq',
- handler: nodes => nodes.forEach(node => {
- if(node) {
- var event1 = new MouseEvent('mouseover');
- node.dispatchEvent(event1);
- var _newsfeed__fulltimes = event1.target.title;
- console.log(_newsfeed__fulltimes);
- //if(!node.parentNode.innerHTML.includes(/timess/)) { alert('test');
- //alert(node.parentNode.innerHTML);
- setTimeout( function() {
- if(!node.parentNode.innerHTML.includes('timess')) {
- node.insertAdjacentHTML("beforebegin", "<span class='timess' style='color:#f00;margin-left:0px;'>" + event1.target.title + '</span>');
- 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;');
- }
- }, 1000)
- //alert(node.parentNode.innerHTML);
- //node.previousSibling.setAttribute('style','background:red!important;border-radius:6px!important;');
- //var ago_formatter = node.parentNode.childNodes[1].parentNode.childNodes[1].innerText.match(/([0-9]{1,2}\D)/);
- //alert(node.parentNode.childNodes[0].parentNode.childNodes[1].innerHTML.length);
- //node.parentNode.innerText = ago_formatter;
- }
- })
- });
- setMutationHandler({
- target: document.querySelector('._1dwg._1w_m._q7o'),
- selector: '._5ptz',
- handler: nodes => nodes.forEach(node => {
- if(!node.parentNode.innerHTML.includes("<br>")) {
- /* 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>");
- /* HREF LINK SANITIZATION */ node.parentNode.href = node.parentNode.href.replace(/(.__xts__.+)/,"#FBTools");
- node.parentNode.setAttribute('style','background:#000!important;border-radius:6px!important;');
- node.insertAdjacentHTML("beforeend", "<br><span class='_hrefURL'>" + hrefp + '</span>');
- }
- })
- });
- setMutationHandler({
- target: document.querySelector('._5pcp._5lel._2jyu._232_'),
- selector: '._5pcq',
- handler: nodes => nodes.forEach(node => {
- if(!node.innerHTML.includes("<br>")) {
- if(!window.location.href.match(/Galactic/)){
- /* 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');
- node.insertAdjacentHTML("beforeend", "<br><span class='_hrefURL'>" + hrefp + '</span>');
- }
- /* HREF LINK SANITIZATION */ node.href = node.href.replace(/(.__xts__.+)/,"#FBTools");
- node.setAttribute('style','border:0px solid #fff!important;border-radius:12px;line-height:14px!important;letter-spacing:-0.15px!important;');
- //node.insertAdjacentHTML("beforeend", "<br><span class='_hrefURL'>" + hrefp + '</span>');
- }
- })
- });
Add Comment
Please, Sign In to add comment