Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var myReports = (function(){
  2.     if(typeof localStorage.reports === "undefined") {
  3.         localStorage.reports = "[]";
  4.     }
  5.  
  6.     function escapeHtml(text) {
  7.         var map = {
  8.             '&': '&',
  9.             '<': '&lt;',
  10.             '>': '&gt;',
  11.             '"': '&quot;',
  12.             "'": '&#039;'
  13.         };
  14.  
  15.         return text.replace(/[&<>"']/g, function(m) { return map[m]; });
  16.     }
  17.  
  18.     function addReport(reason) {
  19.         var rep = JSON.parse(localStorage.reports);
  20.         $('input[name^="del"]:checked').each((a, el)=>{
  21.             var thisId = $(el).parent().attr("id").replace(/pi/g, "");
  22.             var skip = false;
  23.             rep.forEach((r)=>{
  24.                 skip = (r.id === thisId);
  25.                 if(skip) return;
  26.             });
  27.             if(!skip){
  28.                 rep.push({
  29.                     id: thisId,
  30.                     resto: $(el).closest(".thread")[0].id.replace(/t/g, ""),
  31.                     reason: reason,
  32.                     time: Date.now(),
  33.                     board: board,
  34.                 });
  35.             }
  36.         });
  37.         localStorage.reports = JSON.stringify(rep);
  38.         $('.myReportsTblContainer').html(getReportsTable());
  39.     }
  40.  
  41.     function getReportsTable(){
  42.         if(typeof localStorage.reports === "undefined")
  43.             return "<center><i>(empty)</i></center>";
  44.         var rep = JSON.parse(localStorage.reports);
  45.         if(!rep.length){
  46.             return "<center><i>(empty)</i></center>";
  47.         }
  48.         var tableBody = "";
  49.         rep.forEach((report)=>{
  50.             var tim = new Date(parseInt(report.time));
  51.             tableBody += `<tr data-id="${escapeHtml(report.id)}">
  52.                 <td><a href="${escapeHtml(document.location.origin+"/"+report.board+"/res/"+report.resto+".html#p"+report.id)}">&gt&gt/${escapeHtml(report.board)}/${escapeHtml(report.id)}</a></td>
  53.                 <td>${escapeHtml(report.reason)}</td>
  54.                 <td>${tim.toLocaleDateString()+" "+tim.toLocaleTimeString()}</td>
  55.             </tr>`;
  56.         });
  57.         return `<table><tr><th>ID</th><th>Reason</th><th>When</th></tr><tr>${tableBody}</tr>`;
  58.     }
  59.  
  60.     $(()=>{
  61.         $(`
  62.         <div id="tab-settings-reports" class="tab-content"><h2>My reports</h2>
  63.             <style>
  64.                 .myReportsButtons button .ladda-label{
  65.                     padding-top: 0px !important;
  66.                 }
  67.                 .checkLegend {
  68.                     width:200px;
  69.                     margin:auto;
  70.                     text-align: center;
  71.                 }
  72.                 .checkResult center{
  73.                     margin: 5px 0px;
  74.                     font-size: 20px;
  75.                 }
  76.                 .checkResultButtons{
  77.                     margin: 5px 0px;
  78.                 }
  79.             </style>
  80.             <div class="myReportsTblContainer"></div>
  81.            
  82.             <div class="myReportsButtons">
  83.                 <center>
  84.                     <button class="btn-clear ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Clear all</button>
  85.                     <button class="btn-check ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Check all</button>
  86.                 </center>
  87.             </div>
  88.             <div class="checkResult" style="display:none">
  89.                 <center></center>
  90.                 <div style="display:none" class="checkResultButtons">
  91.                     <button class="clearBanned ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Clear banned/removed/404</button>
  92.                     <button class="closeCheckingResult ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Close</button>
  93.                 </div>
  94.             </div>
  95.             <div class="checkLegend" style="display:none">
  96.                 <table style="font-weight: bold">
  97.                     <tr><th>Legend</th></tr>
  98.                     <tr><td style="color:red">Post banned</td></tr>
  99.                     <tr><td style="color:yellow">Post deleted</td></tr>
  100.                     <tr><td style="color:green">Post NOT banned</td></tr>
  101.                     <tr><td style="color:black">404'd thread</td></tr>
  102.                     <tr><td style="color:#003399">Reported thread deleted/404'd</td></tr>
  103.                 </table>
  104.             </div>
  105.  
  106.         </div>
  107.         `).insertBefore(".modal-cont .btn-wrap");
  108.         $("ul.modal-nav").append('<li data-tab-ref="tab-settings-reports">Konfident+</li>');
  109.  
  110.         $('li[data-tab-ref="tab-settings-reports"]').click(function() {
  111.                 var $tab = $(this);
  112.                 if (!$tab.hasClass('tab-opened')) {
  113.                     var $openedTab = $tab.parent().children('.tab-opened');
  114.                     $openedTab.removeClass('tab-opened');
  115.                     $('#' + $openedTab.data('tab-ref')).removeClass('opened');
  116.  
  117.                     $tab.addClass('tab-opened');
  118.                     $('#' + $tab.data('tab-ref')).addClass('opened');
  119.                 }
  120.         });
  121.  
  122.         $("input[name=report]").click((e)=>{
  123.             addReport($(e.target).parent().find("input[name=reason]").first().val());
  124.         });
  125.  
  126.         function clearReports(idArr = undefined){
  127.             if(typeof idArr === "undefined"){
  128.                 localStorage.reports = "[]";
  129.             } else {
  130.                 var rep = JSON.parse(localStorage.reports);
  131.                 rep.forEach((r, i)=>{
  132.                     if(idArr.includes(r.id)){
  133.                         rep.splice(i, 1);
  134.                     }
  135.                 });
  136.                 localStorage.reports = JSON.stringify(rep);
  137.             }
  138.         }
  139.        
  140.         $(".myReportsButtons .btn-clear").click((e)=>{
  141.             if(!confirm("Are you sure?")) return;
  142.             clearReports();
  143.             $('.myReportsTblContainer').html(getReportsTable());
  144.         });
  145.  
  146.         var laddaCheck = Ladda.create(document.querySelector(".myReportsButtons .btn-check"));
  147.         var laddaClear = Ladda.create(document.querySelector(".myReportsButtons .btn-clear"));
  148.        
  149.         $(".myReportsButtons .btn-check").click((e)=>{
  150.             var toClear = [];
  151.             var checked = 0;
  152.             var banned = 0;
  153.             var rows = $(".myReportsTblContainer table tr[data-id]");
  154.             var checkedMax = rows.length;
  155.             if(checkedMax === 0)return;
  156.             laddaCheck.start();
  157.            
  158.             function checkingFinished(){
  159.                 laddaCheck.stop();
  160.                 $(".checkResult center").html(`Banned/Deleted: ${banned}/${checkedMax} (${((banned/checkedMax)*100).toPrecision(2)}%)`);
  161.  
  162.                 $(".checkResult").slideDown();
  163.                 $(".checkResultButtons").slideDown();
  164.                 $(".closeCheckingResult").click(()=>{
  165.                     $(".checkResult").hide();
  166.                     $(".checkLegend").hide();
  167.                     $(".checkResultButtons").hide();
  168.                     $('.myReportsTblContainer').html(getReportsTable());
  169.                 });
  170.                 $(".clearBanned").click(()=>{
  171.                     $(".checkResult").hide();
  172.                     $(".checkLegend").hide();
  173.                     $(".checkResult button").hide();
  174.                     clearReports(toClear);
  175.                     $('.myReportsTblContainer').html(getReportsTable());
  176.                 });
  177.                
  178.             }
  179.  
  180.             function markRow(row, type){
  181.                 $(row).find("a").css("opacity", "1");
  182.                 $(row).find("a").css("font-weight", "bold");
  183.                 switch(type){
  184.                     case "banned":
  185.                         $(row).find("a").css("color", "red");
  186.                     break;
  187.                     case "notbanned":
  188.                         $(row).find("a").css("color", "green");
  189.                     break;
  190.                     case "deleted":
  191.                         $(row).find("a").css("color", "yellow");
  192.                     break;
  193.                     case "404/deleted":
  194.                         $(row).find("a").css("color", "#003399");
  195.                     break;
  196.                     case "404":
  197.                         $(row).find("a").css("color", "black");
  198.                     break;
  199.                     case "wait":
  200.                         $(row).find("a").css("opacity", "0.3");
  201.                     break;
  202.                 }
  203.             }
  204.             $(".checkLegend").slideDown();
  205.  
  206.             rows.each(function(i, el){
  207.                 markRow(el, "wait");
  208.                 var url = $(el).find("a").first().attr("href");
  209.                 $.ajax({
  210.                     type: "GET",
  211.                     url: url,
  212.                     success: function(data){
  213.                         var nodes = $.parseHTML(data);
  214.                         var reportedPost = $(".postContainer#pc"+el.dataset.id, nodes);
  215.                         if(!reportedPost.length) {
  216.                             markRow(el, "deleted");
  217.                             toClear.push(el.dataset.id);
  218.                             banned++;
  219.                         } else if(reportedPost.find('blockquote b[style*="red"]').length || reportedPost.html().includes("USER WAS BANNED FOR THIS POST")) {
  220.                             markRow(el, "banned");
  221.                             toClear.push(el.dataset.id);
  222.                             banned++;
  223.                         } else {
  224.                             markRow(el, "notbanned");
  225.                         }
  226.                     },
  227.                     error: function(){
  228.                         if(url.split("#")[0].includes(el.dataset.id)){ //zgłoszony został temat i jest spadnięty albo wyjebany
  229.                             banned++;
  230.                             markRow(el, "404/deleted");
  231.                         } else {
  232.                             markRow(el, "404");
  233.                         }
  234.  
  235.                         toClear.push(el.dataset.id);
  236.                     },
  237.                     complete: function(){
  238.                         checked++;
  239.                         if(checked >= checkedMax){
  240.                             checkingFinished();
  241.                         }
  242.                     }
  243.                 });
  244.             });
  245.         });
  246.  
  247.         $('.myReportsTblContainer').html(getReportsTable());
  248.     });
  249.  
  250.     return {
  251.         addReport: addReport,
  252.         getReportsTable: getReportsTable,
  253.         escapeHtml: escapeHtml,
  254.     };
  255. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement