Advertisement
drchloe

Mewch Scripts

Apr 18th, 2018
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //NamePerBoard
  2. var board = window.location.href.split('/')[3];
  3. var stored = JSON.parse(localStorage.getItem('tripnames'));
  4. var fields = [document.getElementById('fieldName'), document.getElementById('qrname')]
  5.  
  6. var names = {};
  7. if (stored) {
  8.     names = stored;
  9. } else {
  10.     names[board] = fields[0].value;
  11.     localStorage.setItem('tripnames', JSON.stringify(names));
  12. }
  13.  
  14. var name = '';
  15. for (object in names) {
  16.     if (board == object) {
  17.         name = names[object];
  18.     }
  19. }
  20.  
  21. for (var i = 0; i < fields.length; ++i) {
  22.     if (fields[i]) {
  23.         fields[i].addEventListener("change", function (e) {
  24.             names[board] = this.value;
  25.             localStorage.setItem('tripnames', JSON.stringify(names));
  26.         });
  27.         fields[i].value = name;
  28.     }
  29. }
  30.  
  31. //Event Drivers
  32. var cooldown = true;
  33. document.getElementById('divThreads').addEventListener("mouseover", function (e) {
  34.     if (e)
  35.         if (e.target.className == 'imgLink' || e.target.tagName == "IMG") {
  36.             hoverImg(e)
  37.         }
  38.     if (e.target.className == "myQuote") {
  39.         if (cooldown) {
  40.             hoverThis(e);
  41.             cooldown = false;
  42.             setTimeout(function () {
  43.                 cooldown = true;
  44.             }, 500);
  45.         }
  46.     };
  47.  
  48. });
  49.  
  50. var targetNode = document.getElementsByClassName('divPosts')[0];
  51. var config = {
  52.     childList : true
  53. };
  54. var callback = function (mutationsList) {
  55.     for (var mutation of mutationsList) {
  56.         if (mutation.type == 'childList') {
  57.             var quotes = mutation.addedNodes[0].querySelectorAll('.quoteLink')
  58.                 for (var i = 0; i < quotes.length; ++i) {
  59.                     prepNewhovers([quotes[i]]);
  60.                     console.log('mutated');
  61.                     newcount();
  62.                 }
  63.  
  64.         }
  65.     }
  66. };
  67. var observer = new MutationObserver(callback);
  68. observer.observe(targetNode, config);
  69.  
  70. //Image Hover
  71. var imagehover = document.createElement('div');
  72. imagehover.style = 'pointer-events: none;z-index: 9999999;position:fixed;top:20px;right:20px;max-width:90%;height:700px';
  73. imagehover.id = 'imageHover';
  74. document.body.appendChild(imagehover);
  75.  
  76. function hoverImg(e) {
  77.     if (e.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.className == 'quotebox') {
  78.         return;
  79.     }
  80.     if (e.target.src && e.target.src.indexOf('video') > -1) {
  81.         var ext = e.target.src.split('video')[1]
  82.             imagehover.innerHTML = '<video style="width:auto;height:100%;" src="' + e.target.src.replace("t_", "") + '.' + ext + '" autoplay controls>'
  83.     } else {
  84.         if (e.target.className == 'imgExpanded') {
  85.             return;
  86.         }
  87.         imagehover.innerHTML = '<img style="width:auto;height:100%;" src="' + e.target.parentElement.href + '">'
  88.     }
  89.     e.target.addEventListener("mouseout", function (e) {
  90.         imagehover.innerHTML = '';
  91.     });
  92. };
  93.  
  94. //NonAjaxQuotes
  95. function prepNewhovers(targets) {
  96.     if (!targets) {
  97.         targets = [];
  98.         var quotes = document.querySelectorAll('.quoteLink');
  99.         var backlinks = document.querySelectorAll('span.panelBacklinks a');
  100.         targets.push.apply(targets, quotes);
  101.         targets.push.apply(targets, backlinks);
  102.     }
  103.     for (var i = 0; i < targets.length; ++i) {
  104.         if (targets[i].className == "myQuote"){
  105.             return;
  106.         }
  107.         var post = targets[i].innerHTML.replace('&gt;&gt;', '');
  108.         var quoted = document.getElementById(post);
  109.         if (quoted) {
  110.             var name = quoted.getElementsByClassName('linkName')[0].innerHTML;
  111.             var flag = quoted.getElementsByClassName('imgFlag')[0]
  112.                 var oflag = '';
  113.             if (flag) {
  114.                 oflag = flag.outerHTML.replace('class', 'style=\"height:6px;width:auto;\" nope')
  115.             }
  116.             targets[i].setAttribute("class", "myQuote");
  117.             targets[i].outerHTML = targets[i].outerHTML + '<div style="display:inline-block;font-size:10px;"> - ' + name + ' ' + oflag + '</div>';
  118.         } else {
  119.             targets[i].setAttribute("class", "myQuote");
  120.             targets[i].title = 'ajax';
  121.             targets[i].outerHTML = targets[i].outerHTML;
  122.         }
  123.     };
  124. }
  125. prepNewhovers();
  126.  
  127. var quotebox = document.createElement('div');
  128. quotebox.className = 'quotebox';
  129. document.getElementById('divThreads').appendChild(quotebox);
  130.  
  131. var quoted = [];
  132. var open = false;
  133. var hold = false;
  134. function hoverThis(e) {
  135.     var quoteUrl = e.target.href;
  136.     var matches = quoteUrl.match(/\/(\w+)\/res\/(\d+)\.html\#(\d+)/);
  137.     var board = matches[1];
  138.     var thread = +matches[2];
  139.     var post = +matches[3];
  140.     var quoteData;
  141.     if (open && e.target.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.className !== 'quotebox'){return;};
  142.     if (e.target.title == "ajax") { //AJAX
  143.         var threadUrl = '/' + board + '/res/' + thread + '.json';
  144.         localRequest(threadUrl, function receivedData(error, data) {
  145.             if (error) {
  146.                 return;
  147.             }
  148.             var threadData = JSON.parse(data);
  149.             var postingData;
  150.  
  151.             if (thread === post) {
  152.                 threadData.postId = post;
  153.                 postingData = threadData;
  154.             } else {
  155.                 for (var i = 0; i < threadData.posts.length; i++) {
  156.                     var postData = threadData.posts[i];
  157.                     if (postData.postId === post) {
  158.                         postingData = postData;
  159.                         break;
  160.                     }
  161.                 }
  162.             }
  163.  
  164.             if (!postingData) {
  165.                 return;
  166.             }
  167.             addquote(addPost(postingData, board, thread, true).outerHTML);
  168.             prepNewhovers();
  169.        
  170.            
  171.         });
  172.     } else {
  173.         addquote(document.getElementById(post).outerHTML);
  174.     }
  175.  
  176.     if (quoted.indexOf(post) == -1) {
  177.         quoted.push(post);
  178.         if (!open) {
  179.             var topval = e.pageY - 100;
  180.             var leftval = e.pageX + 5;
  181.             open = true;
  182.             quotebox.style = 'position:absolute;left:' + leftval + 'px;top:' + topval + 'px;border:dotted red 1px;';
  183.         }
  184.  
  185.     }
  186.     quotebox.addEventListener("mouseleave", function () {
  187.         clearquote()
  188.     });
  189.     e.target.addEventListener("mouseleave", function () {
  190.         setTimeout(function () {
  191.             if (!hold) {
  192.                 clearquote()
  193.             }
  194.         }, 300);
  195.     });
  196.  
  197. }
  198.  
  199. function addquote(quote) {
  200.     quotebox.innerHTML = quote + quotebox.innerHTML;
  201. }
  202.  
  203. function clearquote() {
  204.     quotebox.style = '';
  205.     quotebox.innerHTML = '';
  206.     quoted = [];
  207.     open = false;
  208.     hold = false;
  209. }
  210.  
  211. quotebox.addEventListener("mouseenter", function () {
  212.     hold = true;
  213. });
  214.  
  215. // PostcontWidget
  216. var count = document.createElement('div');
  217. if (window.location.href.indexOf('/res/') > -1) {
  218.     document.getElementById('footer').appendChild(count)
  219. };
  220. count.style = 'float:right;';
  221. function newcount() {
  222.     count.innerHTML = 'Posts: ' + document.getElementsByClassName('postCell').length;
  223. }
  224. newcount();
  225.  
  226. //filter files
  227. document.getElementById('files').accept = ".jpg, .png, .jpeg, .gif, .mp4, .webm";
  228.  
  229. document.getElementById('fieldPostingPassword').autocomplete = 'new-password';
  230. document.getElementById('fieldSubject').autocomplete = 'new-password';
  231.  
  232. document.querySelectorAll('.redText').forEach(function(e){if (e.innerHTML.toLowerCase().indexOf('elta') !== -1){e.innerHTML = '';}});
  233.  
  234.  
  235.  
  236.  
  237. //New Post Notifier Test
  238. var regclass = /<div class="[^"]*?boardsCell[^"]*?">(.*?)<\/div>/g
  239.     var seen = {};
  240.     var boards = ['b','wai','int','meta','nsfw','chad','fringe','tech','a','fur'];
  241.  
  242.  
  243. var curboard = false;
  244. if (boards.indexOf(window.location.href.split('/')[3]) !== -1) {
  245.     curboard = window.location.href.split('/')[3];
  246. };
  247.  
  248. function getnew() {
  249.     var xhr = new XMLHttpRequest();
  250.     xhr.onreadystatechange = function () {
  251.         if (xhr.readyState == XMLHttpRequest.DONE) {
  252.             var counts = xhr.response.replace(/(\r\n\t|\n|\r\t)/gm, "").match(regclass);
  253.             var hidden = document.createElement('div');
  254.             hidden.style.display = 'none';
  255.             document.body.appendChild(hidden);
  256.             var dif = [];
  257.             for (var i = 0; i < counts.length; i++) {
  258.                 hidden.innerHTML = counts[i];
  259.                 board = hidden.getElementsByClassName('linkBoard')[0].href.split('/')[3];
  260.                 count = hidden.getElementsByClassName('labelPostCount')[0].innerHTML;
  261.                 if (board == curboard){
  262.                     var test = document.getElementById(count);
  263.                     if (test){
  264.                         seen[board] = count;
  265.                     }
  266.                 }
  267.                
  268.                 if (seen[board]) {
  269.                     vdif = count - seen[board];
  270.                     dif.push([board, vdif]);
  271.                 } else {
  272.                     seen[board] = count;
  273.                     dif.push([board, 0]);
  274.                 }
  275.             };
  276.             localStorage.setItem("seen", JSON.stringify(seen));
  277.             owo(dif);
  278.         }
  279.     }
  280.     xhr.open('GET', 'https://mewch.net/boards.js', true);
  281.     xhr.send(null);
  282. };
  283.  
  284. document.addEventListener("DOMContentLoaded", function(event) {
  285.     if (localStorage.getItem("seen")) {
  286.     seen = JSON.parse(localStorage.getItem("seen"));
  287. }
  288.     getnew();
  289. });
  290.  
  291. setInterval(function () {
  292.     if (localStorage.getItem("seen")) {
  293.     seen = JSON.parse(localStorage.getItem("seen"));
  294. }
  295.     getnew();
  296. }, 120000);
  297.  
  298. function owo(who) {
  299.     console.log(who);
  300.     var nav = document.getElementById('navBoardsSpan').querySelectorAll('a');
  301.     var fav = JSON.parse(localStorage.getItem("favouriteBoards"));
  302.     for (var i = 0; i < who.length; i++) {
  303.         if (fav.indexOf(who[i][0]) !== -1) {
  304.             var old = document.getElementById('a_' + who[i][0]);
  305.             if (old) {
  306.                 old.parentNode.removeChild(old);
  307.             }
  308.             for (var n = 0; n < nav.length; n++) {
  309.                 if (nav[n].innerHTML == who[i][0] && who[i][1] !== 0) {
  310.                     nav[n].innerHTML = nav[n].innerHTML + '<span id="a_' + who[i][0] + '" style="float:right;color:red;font-size:9px;">' + who[i][1] + '</span>';
  311.                 }
  312.             };
  313.         }
  314.     }
  315. }
  316.  
  317.  
  318. //timeago
  319. function timeago() {
  320.     var times = document.querySelectorAll('.labelCreated');
  321.     for (i = 0; i < times.length; i++) {
  322.         if (times[i].title){
  323.             then = new Date(times[i].title);
  324.         } else {
  325.             then = new Date(times[i].innerHTML);           
  326.             times[i].title = times[i].innerHTML;
  327.         }
  328.        
  329.         var now = new Date(new Date().toUTCString().substr(0, 25));
  330.         dif = now - then;
  331.         dif = Math.max(dif,0)
  332.         var date = new Date(dif);
  333.         var str = '';
  334.         var day = date.getUTCDate() - 1;
  335.         var hour = date.getUTCHours();
  336.         var minute = date.getUTCMinutes();
  337.         if (day !== 0) {
  338.             if (day == 1){
  339.                 str += day + " day, ";
  340.             } else {
  341.                 str += day + " days, ";
  342.             };         
  343.         };
  344.         if (hour !== 0) {
  345.             if (hour == 1){
  346.                 str += hour + " hour, ";
  347.             }else{
  348.                 str += hour + " hours, ";
  349.             }          
  350.         };
  351.         if (minute == 1){
  352.             str += minute + " minute";
  353.         } else if (minute == 0) {
  354.             str += " Now"
  355.         } else {
  356.             str += minute + " minutes";
  357.         }
  358.        
  359.         times[i].innerHTML = str;
  360.     }
  361. }
  362.  
  363.  
  364. document.addEventListener("DOMContentLoaded", function(event) {
  365. timeago();
  366. });
  367.  
  368. setInterval(function () {
  369. timeago();
  370. }, 120000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement