您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Podgląd statusu zgłoszonych postów.
// ==UserScript== // @name Konfident+ // @namespace karachan.org // @description Podgląd statusu zgłoszonych postów. // @version 1.0 // @downloadURL // @grant GM_addStyle // @match *://*.karachan.org/* // @exclude http://www.karachan.org/*/src/* // @exclude https://www.karachan.org/*/src/* // @exclude http://karachan.org/*/src/* // @exclude https://karachan.org/*/src/* // ==/UserScript== var myReports = (function(){ if(typeof localStorage.reports === "undefined") { localStorage.reports = "[]"; } function escapeHtml(text) { var map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; return text.replace(/[&<>"']/g, function(m) { return map[m]; }); } function addReport(reason) { var rep = JSON.parse(localStorage.reports); $('input[name^="del"]:checked').each((a, el)=>{ var thisId = $(el).parent().attr("id").replace(/pi/g, ""); var skip = false; rep.forEach((r)=>{ skip = (r.id === thisId); if(skip) return; }); if(!skip){ rep.push({ id: thisId, resto: $(el).closest(".thread")[0].id.replace(/t/g, ""), reason: reason, time: Date.now(), board: board, }); } }); localStorage.reports = JSON.stringify(rep); $('.myReportsTblContainer').html(getReportsTable()); } function getReportsTable(){ if(typeof localStorage.reports === "undefined") return "<center><i>(empty)</i></center>"; var rep = JSON.parse(localStorage.reports); if(!rep.length){ return "<center><i>(empty)</i></center>"; } var tableBody = ""; rep.forEach((report)=>{ var tim = new Date(parseInt(report.time)); tableBody += `<tr data-id="${escapeHtml(report.id)}"> <td><a href="${escapeHtml(document.location.origin+"/"+report.board+"/res/"+report.resto+".html#p"+report.id)}">>>/${escapeHtml(report.board)}/${escapeHtml(report.id)}</a></td> <td>${escapeHtml(report.reason)}</td> <td>${tim.toLocaleDateString()+" "+tim.toLocaleTimeString()}</td> </tr>`; }); return `<table><tr><th>ID</th><th>Reason</th><th>When</th></tr><tr>${tableBody}</tr>`; } $(()=>{ $(` <div id="tab-settings-reports" class="tab-content"><h2>My reports</h2> <style> .myReportsButtons button .ladda-label{ padding-top: 0px !important; } .checkLegend { width:200px; margin:auto; text-align: center; } .checkResult center{ margin: 5px 0px; font-size: 20px; } .checkResultButtons{ margin: 5px 0px; } </style> <div class="myReportsTblContainer"></div> <div class="myReportsButtons"> <center> <button class="btn-clear ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Clear all</button> <button class="btn-check ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Check all</button> </center> </div> <div class="checkResult" style="display:none"> <center></center> <div style="display:none" class="checkResultButtons"> <button class="clearBanned ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Clear banned/removed/404</button> <button class="closeCheckingResult ladda-button" data-style="expand-right" data-size="xs" data-color="mint">Close</button> </div> </div> <div class="checkLegend" style="display:none"> <table style="font-weight: bold"> <tr><th>Legend</th></tr> <tr><td style="color:red">Post banned</td></tr> <tr><td style="color:yellow">Post deleted</td></tr> <tr><td style="color:green">Post NOT banned</td></tr> <tr><td style="color:black">404'd thread</td></tr> <tr><td style="color:#003399">Reported thread deleted/404'd</td></tr> </table> </div> </div> `).insertBefore(".modal-cont .btn-wrap"); $("ul.modal-nav").append('<li data-tab-ref="tab-settings-reports">Konfident+</li>'); $('li[data-tab-ref="tab-settings-reports"]').click(function() { var $tab = $(this); if (!$tab.hasClass('tab-opened')) { var $openedTab = $tab.parent().children('.tab-opened'); $openedTab.removeClass('tab-opened'); $('#' + $openedTab.data('tab-ref')).removeClass('opened'); $tab.addClass('tab-opened'); $('#' + $tab.data('tab-ref')).addClass('opened'); } }); $("input[name=report]").click((e)=>{ addReport($(e.target).parent().find("input[name=reason]").first().val()); }); function clearReports(idArr = undefined){ if(typeof idArr === "undefined"){ localStorage.reports = "[]"; } else { var rep = JSON.parse(localStorage.reports); rep.forEach((r, i)=>{ if(idArr.includes(r.id)){ rep.splice(i, 1); } }); localStorage.reports = JSON.stringify(rep); } } $(".myReportsButtons .btn-clear").click((e)=>{ if(!confirm("Are you sure?")) return; clearReports(); $('.myReportsTblContainer').html(getReportsTable()); }); var laddaCheck = Ladda.create(document.querySelector(".myReportsButtons .btn-check")); var laddaClear = Ladda.create(document.querySelector(".myReportsButtons .btn-clear")); $(".myReportsButtons .btn-check").click((e)=>{ var toClear = []; var checked = 0; var banned = 0; var rows = $(".myReportsTblContainer table tr[data-id]"); var checkedMax = rows.length; if(checkedMax === 0)return; laddaCheck.start(); function checkingFinished(){ laddaCheck.stop(); $(".checkResult center").html(`Banned/Deleted: ${banned}/${checkedMax} (${((banned/checkedMax)*100).toPrecision(2)}%)`); $(".checkResult").slideDown(); $(".checkResultButtons").slideDown(); $(".closeCheckingResult").click(()=>{ $(".checkResult").hide(); $(".checkLegend").hide(); $(".checkResultButtons").hide(); $('.myReportsTblContainer').html(getReportsTable()); }); $(".clearBanned").click(()=>{ $(".checkResult").hide(); $(".checkLegend").hide(); $(".checkResult button").hide(); clearReports(toClear); $('.myReportsTblContainer').html(getReportsTable()); }); } function markRow(row, type){ $(row).find("a").css("opacity", "1"); $(row).find("a").css("font-weight", "bold"); switch(type){ case "banned": $(row).find("a").css("color", "red"); break; case "notbanned": $(row).find("a").css("color", "green"); break; case "deleted": $(row).find("a").css("color", "yellow"); break; case "404/deleted": $(row).find("a").css("color", "#003399"); break; case "404": $(row).find("a").css("color", "black"); break; case "wait": $(row).find("a").css("opacity", "0.3"); break; } } $(".checkLegend").slideDown(); rows.each(function(i, el){ markRow(el, "wait"); var url = $(el).find("a").first().attr("href"); $.ajax({ type: "GET", url: url, success: function(data){ var nodes = $.parseHTML(data); var reportedPost = $(".postContainer#pc"+el.dataset.id, nodes); if(!reportedPost.length) { markRow(el, "deleted"); toClear.push(el.dataset.id); banned++; } else if(reportedPost.find('blockquote b[style*="red"]').length || reportedPost.html().includes("USER WAS BANNED FOR THIS POST")) { markRow(el, "banned"); toClear.push(el.dataset.id); banned++; } else { markRow(el, "notbanned"); } }, error: function(){ if(url.split("#")[0].includes(el.dataset.id)){ //zgłoszony został temat i jest spadnięty albo wyjebany banned++; markRow(el, "404/deleted"); } else { markRow(el, "404"); } toClear.push(el.dataset.id); }, complete: function(){ checked++; if(checked >= checkedMax){ checkingFinished(); } } }); }); }); $('.myReportsTblContainer').html(getReportsTable()); }); return { addReport: addReport, getReportsTable: getReportsTable, escapeHtml: escapeHtml, }; })();