NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name RAP+ Mentor Advanced // @author Michal "ceem" Kovac // @namespace com.heroesofnewerth.rap // @description Updates to RAP portal for Mentors // @match *://rap.heroesofnewerth.com/gm* // @match *://s3.amazonaws.com/* // @match *://www.heroesofnewerth.com/playerstats/ranked/ // @version 1.4.16 // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js // @require https://code.jquery.com/ui/1.12.1/jquery-ui.js // @require https://rap.heroesofnewerth.com/js/moment.js // @updateURL https://openuserjs.org/meta/Chirrox/RAP+_Mentor_Advanced.meta.js // @downloadURL https://openuserjs.org/install/Chirrox/RAP+_Mentor_Advanced.user.js // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues // @grant GM_openInTab // @grant GM_setClipboard // @grant GM_xmlhttpRequest // @icon https://i.imgur.com/uWfCTD0.png // @license 0BSD // ==/UserScript== // ========= Global variables ================================================================ var $activeView; // Active view var $mentorName; var $spotcheckedGmName; var activeSite; var spotcheckFormReady; GM_setValue("formReady",false); var spotcheck = { ready: false, mentor: "", gm: "", ots: "", }; // Links, forms and IDs of form fields var $loadingImage = "https://resources.patchworkklub.sk/rapp/loading.gif"; var $copyToCliboardImage = "https://resources.patchworkklub.sk/rapp/clipboard_plus.png"; var $expandImage = "https://resources.patchworkklub.sk/rapp/horz-lines.png"; // =========================================================================================== // ========= Decide which view we have active ================================================ if ($('.ss-q-title:contains("Select the form you wish to submit")').length) { activeSite = "form"; //processSpotcheckForm(); } else { activeSite = "rap"; initScript(); } // =========================================================================================== // ========= CSS ============================================================================= if (activeSite == "rap") { $('head').append("<link rel='stylesheet' href='https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css'>"+ "<style type='text/css'>" + "#rappm-spotcheck {padding: 0 !important;}" + "#rappm-spotcheckForm{display:none}" + "#rappm-showDetailsBtn{float:right;}" + ".rappm-reasonTd {font-size:10px}"+ ".rappm-highlight {background: #f8ffb2}" + "table#rappm-sch {font-size:10px;border-collapse: collapse;width: 98%;}" + "table#rappm-sch th, table#rappm-sch td {text-align: left;padding: 8px;}" + "table#rappm-sch tr:nth-child(even){background-color: #f9f9f9}" + "table#rappm-sch tr:nth-child(odd).markedOk {background:#deffc6;}" + "table#rappm-sch tr:nth-child(odd).markedOt {background:#ffd9c6;}" + "table#rappm-sch tr:nth-child(odd).marked {background:#fcfdc7;}" + "table#rappm-sch tr:nth-child(even).markedOk {background:#ccffa8;}" + "table#rappm-sch tr:nth-child(even).markedOt {background:#ffccb2;}" + "table#rappm-sch tr:nth-child(even).marked {background:#feffa8;}" + ".rappm-sch-btn {padding: 3px;background: #d9e8fb;border: 1px solid silver;margin-left:5px; display:block;width:100px;font-size:10px;}"+ "#rappm-sch-tab-decisions, #rappm-sch-tab-docs, #rappm-sch-tab-form {margin:10px; margin-left: 250px;}"+ "ul#rappm-sch-nav {margin: 0;color: black;font-weight: bold;margin-left: 80px;float: left;display: block;margin-top: 1px;text-align: center;padding: 5px;position: relative;top: 8px;}"+ "ul#rappm-sch-nav li {padding: 8px;font-weight: normal;margin: 0;display: block;height: 27px;margin-left: 3px;width: 160px;background: #5f5f5f;floaT: left;color: #d0d0d0;height: 36px;border: 1px solid #222222;}"+ "ul#rappm-sch-nav li.rappm-sch-nav-active {background: white;color: #000;font-weight: bold;border: 1px solid #ffffff;text-shadow: #f1f1f1 0px 0px 5px;}" + "table#rappm-sch tr.rappm-overturn-tr {background:#ff7777; border-left:2px solid #ff7777; border-right:2px solid #ff7777;}" + "table#rappm-sch tr.rappm-sch-m-tr {border-left:2px solid #ff7777; border-right:2px solid #ff7777;}" + "table#rappm-sch tr.markedOt {border-left:2px solid #ff7777; border-right:2px solid #ff7777; border-top:2px solid #ff7777;}" + ".hidden {display:none}" + ".hidden-category {display:none}" + ".hidden-verdict {display:none}" + ".hidden-throwaway {display:none}" + "#rappm-filter {padding: 10px 20px;background: #e2f6ff;border: 1px solid #7ea5b7;overflow:auto;font-size:11px;}" + "#rappm-filter span {font-size: 13px;color: #166a90;}" + "#rappm-filter label {font-weight: normal;margin: 0px 10px 5px 3px;font-size: 12px;position: relative;bottom: 2px;}" + ".rappm-filter-title {clear: both;font-size: 12px;margin-top: 5px;border-bottom: 1px solid #b9dae8;margin-bottom: 2px;font-weight: bold;color: #165875;}" + ".rappm-filter-pair {float:left}" + ".rappm-filter-control {clear:both}" + ".maximized {margin:10px !important;}" + ".rappm-navToggle {display: block;width: 45px;height: 35px;background: url("+$expandImage+") 0px 0px no-repeat #2b3643;padding: 10px;float: left;margin: 8px 2px;}" + "a#rappm-sch-form-fetch { background: linear-gradient(to bottom, rgba(255, 255, 255, 0.65) 0%,rgba(0, 0, 0, 0.1) 100%); border:1px solid #9a9a9a;border-radius:3px !important;padding:2px 4px;}"+ ".rappm-sch-m-div table {font-size:10px}"+ "#floatingCounter {position:absolute;padding-left:10px;right:0px;top:50px;width:100px;height:60px;}" + "#floatingCounter .countSel {background:#fcfdc7}" + "#floatingCounter .countOK {background:#deffc6}" + "#floatingCounter .countOT {background:#ffd9c6}" + "#floatingCounter .countTotal {background:white}" + "#floatingCounter div {padding: 1 5px;font-size: 12px;}"+ "#floatingCounter .copyMarked {background: #d9e8fb;padding: 4 4px;border: 1px solid #7ea5b7;font-size: 11px;margin-top: 0px;text-align: center;font-weight: bold;}"+ "#floatingCounter span {float: right;}" + "</style>"); } else { $('head').append("<style type='text/css'>" + "#form-n{float:left}" + "#form-b{float:left}" + "#form-i{display:none;clear:both;}" + "#form-m{display:none}" + "h2 {margin:0}" + "</style>"); } // =========================================================================================== // ======== Initialization functions ========================================================= function initScript() { // --------- Parse mentor name ----------------------------------------------------------- var $logoffButtonText = $('span.username').text(); $mentorName = $logoffButtonText.substring($logoffButtonText.indexOf("GM: ")+4).trim(); // --------------------------------------------------------------------------------------- // --------- Create mentor interface ----------------------------------------------------- var $newMenuItemVersion = "<li class='rapp-menuItem' id='rappm-spotcheck'><a><i class='icon-book-open'></i><span class='title'>Spotcheck (v"+GM_info.script.version+")</span></a></li>"; var $menu = $('ul.page-sidebar-menu'); $menu.append($newMenuItemVersion); $("#rappm-spotcheck").click(function($event) { $event.preventDefault(); $("#gmNameInput").select(); showSpotcheckDialog(); }); } function showSpotcheckDialog() { var $spotcheckDialogContent=""; $spotcheckDialogContent += "<form id=\"rappm-spotcheckForm\">"; $spotcheckDialogContent += "<fieldset>"; $spotcheckDialogContent += " <label for=\"gmNameInput\">GM Name<\/label> "; $spotcheckDialogContent += " <input id=\"gmNameInput\" name=\"gmNameInput\" type=\"text\" placeholder=\"\" required=\"\"><br>"; $spotcheckDialogContent += " <label for=\"lastSpotcheckInput\">Last spotcheck<\/label> "; $spotcheckDialogContent += " <input id=\"lastSpotcheckInput\" name=\"lastSpotcheckInput\" type=\"text\" placeholder=\"mm\/dd\/yy\" required=\"\">"; $spotcheckDialogContent += "<\/fieldset>"; $spotcheckDialogContent += "<img style='margin-top:5px;visibility: hidden;' src="+$loadingImage+">"; $spotcheckDialogContent += "<\/form>"; $("body").append($spotcheckDialogContent); $("#rappm-spotcheckForm input").on('click', function () { this.select(); }); $("#gmNameInput").on('paste', function () { setTimeout(function () { var pastedText = $("#gmNameInput").val().split("\t"); $("#gmNameInput").val(pastedText[0]); if (pastedText.length>1) { $("#lastSpotcheckInput").val(pastedText[1]); } } , 100); }); var $spotcheckDialog = $("#rappm-spotcheckForm").dialog({ autoOpen: true, height: 250, width: 250, modal: true, resizable: false, title: "RAP+ Mentor Spotcheck", buttons: { "Start spotcheck": function() { var gmName = $("#gmNameInput").val(); $spotcheckedGmName = gmName; var lastSpotcheck = $("#lastSpotcheckInput").val(); //var validationResult = validateInput(gmName,lastSpotcheck); //if (validationResult.success) { // $( document ).ajaxComplete(function() { $("#rappm-spotcheckForm img").css("visibility","visible"); initAll(gmName,lastSpotcheck); $( document ).ajaxComplete(function() { $("#rappm-spotcheckForm img").css("visibility","hidden"); $spotcheckDialog.dialog( "close" ); }); // }); }, "Cancel": function() { $spotcheckDialog.dialog( "close" ); } } }); // $spotcheckDialog.dialog("open"); } function checkPriors($currentDecisionTitle) { var $result = { chatAbuse:0, other:0 }; var $9monthsAgo = new Date((new Date()).setMonth((new Date()).getMonth()-9)); var $priorDecisionsTitles = $currentDecisionTitle.nextAll("p"); $priorDecisionsTitles.each(function (i) { var $priorDecision = { id:0, verdict:"Innocnet", ticket:0, judgedOn:0, category:"", }; var $p = $(this); var ptxt = $p.text(); $priorDecision.id = $p.find("a:eq(0)").text().trim(); var $priorDetails = $p.closest('.page-wrapper').find("#decisionModal-"+$priorDecision.id+" .modal-body").text(); $priorDecision.ticket = $priorDetails.substring($priorDetails.indexOf("Ticket id:")+10,$priorDetails.indexOf("Match id:")).trim(); $priorDecision.verdict = ptxt.substring(ptxt.indexOf("|")+1,ptxt.lastIndexOf("(")).trim(); var $priorTicketDetail = $p.nextUntil("p").filter("a:contains('"+$priorDecision.ticket+"')").first().text(); $priorDecision.category = $priorTicketDetail.substring($priorTicketDetail.indexOf(" - ")+3).trim(); $priorDecision.judgedOn = new Date(ptxt.substring((ptxt.indexOf("judged on")+10),(ptxt.indexOf("|")-1)).trim()); //Check if the prior is more recent than 9 months if (($priorDecision.judgedOn > $9monthsAgo) && ($priorDecision.verdict !== "Innocent") && ($priorDecision.verdict !== "Undone")) { if ($priorDecision.category == "Verbal abuse") { if ($result.chatAbuse === 0) { $result.chatAbuse = $priorDecision.id; } } else { if ($result.other === 0) { $result.other = $priorDecision.id; } } } }); return $result; } function initAll(gmName,lastSpotcheck) { var filters= '' + '<div id="rappm-filter">' + ' <span>Filter decisions [+]</span>' + ' <div id="rappm-filter-category">' + ' <div class="rappm-filter-title">Category</div>'+ ' <div class="rappm-filter-control">' + ' <a href="#" class="rappm-filter-sal">Show All</a> | ' + ' <a href="#" class="rappm-filter-hal">Hide All</a>' + ' </div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-aia" checked><label for="rappm-filter-aia">Ability or item abuse</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-afk" checked><label for="rappm-filter-afk">Avoiding AFK detection</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-bad" checked><label for="rappm-filter-bad">Bad Nickname</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-fed" checked><label for="rappm-filter-fed">Feeding</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-stf" checked><label for="rappm-filter-stf">Staff impersonation</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-ver" checked><label for="rappm-filter-ver">Verbal abuse</label></div>' + ' </div>' + ' <div id="rappm-filter-verdict">' + ' <div class="rappm-filter-title">Verdict</div>'+ ' <div class="rappm-filter-control">' + ' <a href="#" class="rappm-filter-sal">Show All</a> | ' + ' <a href="#" class="rappm-filter-hal">Hide All</a>' + ' </div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-g" checked><label for="rappm-filter-g">Guilty</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-w" checked><label for="rappm-filter-w">Warning</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-i" checked><label for="rappm-filter-i">Innocent</label></div>' + ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-u" checked><label for="rappm-filter-u">Undone</label></div>' + ' </div>' + ' <div id="rappm-filter-throwaway">' + ' <div class="rappm-filter-title">Special</div>'+ ' <div class="rappm-filter-pair"><input type="checkbox" id="rappm-filter-thr" checked><label for="rappm-filter-thr">Throwaway</label></div>' + ' </div>' + '</div>'; var floatingCounter = '<div id="floatingCounter">'+ '<div class="countSel">Selected<span>0</span></div>'+ '<div class="countOK">OK<span>0</span></div>'+ '<div class="countOT">OT<span>0</span></div>'+ '<div class="countTotal">Total<span>0</span></div>'+ '<div class="copyMarked"><a>Summary</a></div>' '</div>'; var tableStr=""; tableStr += "<table id='rappm-sch'>"; tableStr += "<thead>"; tableStr += "<tr>"; tableStr += "<th class=\"rappm-sch-decision\">Decision<\/th>"; tableStr += "<th class=\"rappm-sch-time\">Time<\/th>"; tableStr += "<th class=\"rappm-sch-offender\">Offender<\/th>"; tableStr += "<th class=\"rappm-sch-matchId\">Match ID<\/th>"; tableStr += "<th class=\"rappm-sch-numMatches\"># of matches<\/th>"; tableStr += "<th class=\"rappm-sch-ticketId\">Ticket ID<\/th>"; tableStr += "<th class=\"rappm-sch-verdict\">Verdict<\/th>"; tableStr += "<th class=\"rappm-sch-category\">Category<\/th>"; tableStr += "<th class=\"rappm-sch-reason\">Reason given<\/th>"; tableStr += "<th class=\"rappm-sch-priors\">Priors (relative)<\/th>"; tableStr += "<th class=\"rappm-sch-status\">Action<\/th>"; tableStr += "<\/tr>"; tableStr += "<\/thead>"; tableStr += "<tbody>"; tableStr += "<\/tbody>"; tableStr += "<\/table>"; var spotcheckFormURL = 'https://docs.google.com/forms/d/e/1FAIpQLSckTqUqn290Keux55sZagoOlXrfAEhEdnWfgbwlC2pAqlFGSg/viewform?entry.1000000=Spot+Check'; var spotcheckForm = // '<div id="form_div" style="float:right; width: 50%; margin-bottom: 5px; margin-top: 15px;"></div>' + '<div id="data_div" style="width: 90%; margin-bottom: 5px; margin-top: 15px; float:left">'+ //'<strong>Your Name</strong><br><span id="rappm-form-yourname">'+$mentorName+'</span><br>'+ //'<strong>Who is this Spot Check for?</strong><br><span id="rappm-form-gmname">'+$spotcheckedGmName+'</span><br><br>'+ '<a href="" id="rappm-sch-form-fetch">Generate formatted feedback for Discord</a><div id="rappm-form-otInfo"></div><textarea id="rappm-form-feedback" style="width:100%;height:100%" class="hidden"></textarea><br>'+ //'<a href="" id="rappm-sch-form-fill">Fill form \>\></a>'+ '</div>'; var mentorDocsURL = 'https://docs.google.com/spreadsheets/d/1QPmry2FhcJkguvk2pxL0CAOsxfCONXS_dfoFFRUSmXQ/edit?usp=drive_web'; var mentorTable = '<div id="mentor_docs_div" style="width: 100%; margin-bottom: 5px; margin-top: 15px;"><iframe frameborder="0" width="100%" height="'+($(window).height()-90)+'px" src="'+mentorDocsURL+'"></iframe></div>'; var decisions = []; moment().format(); $('body').css('background-color','#fff'); var spotcheckStart = moment(lastSpotcheck,'MM/DD/YY').add(1, 'day'); if ($("#rappm-sch-tab-decisions").length) { $("#rappm-sch-tab-decisions").remove(); $("#rappm-sch-tab-form").remove(); $("#rappm-sch-tab-docs").remove(); } $(".page-content-wrapper").html('<div id="rappm-sch-tab-decisions" class="rappm-sch-tab-active">'+filters+'<br>'+tableStr+'</div>'); $(".page-footer").remove(); $("#rappm-sch-tab-decisions").after('<div id="rappm-sch-tab-form" style="display:none">'+spotcheckForm+'</div>'); $("#rappm-sch-tab-decisions").after('<div id="rappm-sch-tab-docs" style="display:none">'+mentorTable+'</div>'); spotcheckFormReady = false; //processSpotcheckForm("#form_div iframe"); $('#rappm-filter-category').slideUp(); $('#rappm-filter-verdict').slideUp(); $('#rappm-filter-throwaway').slideUp(); $('#rappm-filter span').click(function($event){ $event.preventDefault(); if ($(this).text().includes('+')) { $('#rappm-filter-category').slideDown(); $('#rappm-filter-verdict').slideDown(); $('#rappm-filter-throwaway').slideDown(); $(this).text($(this).text().replace('+','-')); } else { $('#rappm-filter-category').slideUp(); $('#rappm-filter-verdict').slideUp(); $('#rappm-filter-throwaway').slideUp(); $(this).text($(this).text().replace('-','+')); } }); $('.rappm-filter-sal').click(function($event){ $event.preventDefault(); $(this).parent().parent().find("input").prop("checked",true); $(this).parent().parent().find("input").trigger("change"); }); $('.rappm-filter-hal').click(function($event){ $event.preventDefault(); $(this).parent().parent().find("input").prop("checked",false); $(this).parent().parent().find("input").trigger("change"); }); $('#rappm-filter input').change(function($event){ var suffix = $(this).attr("id").substring($(this).attr("id").lastIndexOf("-")+1); if (suffix == 'thr') { var $checkbox = $(this); var filterType = 'throwaway'; $('#rappm-sch tr[id^=rappm-sch-tr]').each(function(index){ if ($(this).find('.rappm-sch-throwaway').length===0) { if (!$checkbox.prop("checked")) { $(this).addClass('hidden-'+filterType); $(this).nextUntil('tr[id^=rappm-sch-tr]').addClass('hidden-'+filterType); } else { $(this).removeClass('hidden-'+filterType); $(this).nextUntil('tr[id^=rappm-sch-tr]').removeClass('hidden-'+filterType); } } }); } else { var label = $(this).next("label").text(); var filterType = $(this).parent().parent().attr("id").includes('category')?'category':'verdict'; var $checkbox = $(this); $('#rappm-sch tr[id^=rappm-sch-tr]').each(function(index){ if ($(this).find('.rappm-sch-'+filterType).text() == label) { console.log($checkbox.prop("checked")); if (!$checkbox.prop("checked")) { $(this).addClass('hidden-'+filterType); $(this).nextUntil('tr[id^=rappm-sch-tr]').addClass('hidden-'+filterType); } else { $(this).removeClass('hidden-'+filterType); $(this).nextUntil('tr[id^=rappm-sch-tr]').removeClass('hidden-'+filterType); } } }); } }); // Hide navigation & add a button to show it //$("#rappm-sch-tab-decisions").nextAll().remove(); $("#rappm-sch-tab-decisions, #rappm-sch-tab-docs, #rappm-sch-tab-form").addClass("maximized"); $(".page-sidebar-wrapper").addClass("hidden"); $(".rappm-navToggle").remove(); $(".page-logo").after("<a href='' class='rappm-navToggle'></a>"); $(".rappm-navToggle").click(function($event) { $event.preventDefault(); if ($(".page-sidebar-wrapper").hasClass("hidden")) { $("#rappm-sch-tab-decisions, #rappm-sch-tab-docs, #rappm-sch-tab-form").removeClass("maximized"); $(".page-sidebar-wrapper").removeClass("hidden"); } else { $("#rappm-sch-tab-decisions, #rappm-sch-tab-docs, #rappm-sch-tab-form").addClass("maximized"); $(".page-sidebar-wrapper").addClass("hidden"); } }); if (!$("#rappm-sch-nav").length) { $(".top-menu").before('<ul id="rappm-sch-nav"><li id="rappm-sch-nav-docs">Mentor Doc</li>'+ '<li id="rappm-sch-nav-decisions" class="rappm-sch-nav-active">Decisions overview</li>'+ '<li id="rappm-sch-nav-form">Discord feedback</li>' + '</ul>' + floatingCounter); $('#floatingCounter .copyMarked').click(function($event){ $event.preventDefault(); var markedDecisions = $mentorName + ' ' + gmName + ' '; if ($('tbody tr[class^="marked"]').length) { $('tbody tr[class^="marked"]').each(function (i) { markedDecisions += $(this).find('.rappm-sch-decision').text() + ' '; }); } GM_openInTab('https://docs.google.com/forms/d/e/1FAIpQLSe5T16rmPh5xUaQVFmBZ3rwekNuca7EJXwkS92nPEw3SDmxvA/viewform?entry.958854914='+markedDecisions); }); $("#rappm-sch-nav-decisions").click(function($event) { if (!$(this).hasClass('rappm-sch-nav-active')) { $('.rappm-sch-nav-active').removeClass('rappm-sch-nav-active'); $(this).addClass('rappm-sch-nav-active'); $('.rappm-sch-tab-active').css('display','none'); $('.rappm-sch-tab-active').removeClass('rappm-sch-tab-active'); $("#rappm-sch-tab-decisions").css('display','block'); $("#rappm-sch-tab-decisions").addClass('rappm-sch-tab-active'); $("#floatingCounter").removeClass('hidden'); } }); $("#rappm-sch-nav-form").click(function($event) { if (!$(this).hasClass('rappm-sch-nav-active')) { $('.rappm-sch-nav-active').removeClass('rappm-sch-nav-active'); $(this).addClass('rappm-sch-nav-active'); $('.rappm-sch-tab-active').css('display','none'); $('.rappm-sch-tab-active').removeClass('rappm-sch-tab-active'); $("#rappm-sch-tab-form").css('display','block'); $("#rappm-sch-tab-form").addClass('rappm-sch-tab-active'); $("#floatingCounter").addClass('hidden'); } }); $("#rappm-sch-nav-docs").click(function($event) { if (!$(this).hasClass('rappm-sch-nav-active')) { $('.rappm-sch-nav-active').removeClass('rappm-sch-nav-active'); $(this).addClass('rappm-sch-nav-active'); $('.rappm-sch-tab-active').css('display','none'); $('.rappm-sch-tab-active').removeClass('rappm-sch-tab-active'); $("#rappm-sch-tab-docs").css('display','block'); $("#rappm-sch-tab-docs").addClass('rappm-sch-tab-active'); $("#floatingCounter").addClass('hidden'); } }); } else { $("#rappm-sch-nav-decisions").trigger("click"); $('#floatingCounter .copyMarked').off("click"); $('#floatingCounter .copyMarked').click(function($event){ $event.preventDefault(); var markedDecisions = $mentorName + ' ' + gmName + ' '; if ($('tbody tr[class^="marked"]').length) { $('tbody tr[class^="marked"]').each(function (i) { markedDecisions += $(this).find('.rappm-sch-decision').text() + ' '; }); } GM_openInTab('https://docs.google.com/forms/d/e/1FAIpQLSe5T16rmPh5xUaQVFmBZ3rwekNuca7EJXwkS92nPEw3SDmxvA/viewform?entry.958854914='+markedDecisions); }); } function composeUrl(searchFilters,searchValues,from,to,queryFilter,queryValue){ var url = "https://rap.heroesofnewerth.com/gm/tickets/judged/data?"; if (searchFilters.constructor !== Array) { searchFilters = ["id",searchFilters]; } else { searchFilters.unshift("id"); } if (searchValues.constructor !== Array) { searchValues = ["",searchValues]; } else { searchValues.unshift(""); } if (searchFilters.length >= searchValues.length) { for (var i = 0, len = searchFilters.length; i < len; i++) { var sv = searchValues[i]===undefined?"":searchValues[i]; url += "columns["+i+"][data]="+searchFilters[i]+"&"+ "columns["+i+"][name]="+searchFilters[i]+"&"+ "columns["+i+"][searchable]="+((sv==="")?"false":"true")+"&"+ "columns["+i+"][orderable]="+((i===0)?"true":"false")+"&"+ "columns["+i+"][search][value]="+sv+"&"+ "columns["+i+"][search][regex]=false&"; } url += "order[0][column]=0&"+ "order[0][dir]=desc&"+ "start="+from+"&"+ "length="+to+"&"+ "search[value]=&"+ "search[regex]=false&"+ "search_filter="+queryFilter+"&"+ "search_query="+queryValue; return url; } else { throw "Error: Few search filters than values."; } } $.ajax({ url: composeUrl(['id','time','status','ticket_id','offender','offenderAction'],[],0,200,"gm",gmName), success: function(data){ var judged = data.data; for (i = 0; i < judged.length; i++) { var entry = judged[i]; if ($(entry.offenderAction).find("a").length) { var decisionTime = moment(entry.time,'YYYY-MM-DD HH:mm:ss'); if (decisionTime>spotcheckStart) { console.log(entry.offenderAction); var ticketUrl = $(entry.offenderAction).find("a").attr("href").trim(); var offender = $(entry.offenderAction).find("a").text().trim(); var decision = { id : entry.id, time : entry.time, verdict : entry.status, ticketId : entry.ticket_id, offender : offender, throwaway : "", link: ticketUrl, chatlogLink : "", downloadLink : "", matchId: "", matches : [], category : "", reason : "", priors : { chatAbuse: 0, other: 0 } }; decisions.push(decision); } else { break; } } } var loadingImage = "<img style='margin-top:5px;visibility: visible' src="+$loadingImage+">"; decisions.forEach(function (decision) { $("#rappm-sch tbody").append("<tr id='rappm-sch-tr"+decision.id+"'></tr>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-decision\"><a href='"+decision.link+"'>"+decision.id+"</a><\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-time\">"+decision.time+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-offender\">"+decision.offender+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-matchId\">"+loadingImage+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-numMatches\">"+loadingImage+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-ticketId\">"+decision.ticketId+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-verdict\">"+decision.verdict+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-category\">"+loadingImage+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-reason\">"+loadingImage+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-priors\">"+loadingImage+"<\/td>"); $("#rappm-sch tbody tr:last").append("<td class=\"rappm-sch-action\">"+ "<a class='rappm-sch-status rappm-sch-btn' href='#'>Select</a>"+ //"<a class='rappm-sch-details rappm-sch-btn' href='#'>Fetch other matches & tickets details</a>"+ "<a class='rappm-sch-replays rappm-sch-btn' href='#'>Request all replays</a>"+ "<a class='rappm-sch-downloadReplay rappm-sch-btn' href='#'>Download replay</a>"+ //"<a class='rappm-sch-copyLinks rappm-sch-btn' href='#'>Copy replay links</a>"+ //#1.4# "<a class='rappm-sch-otText rappm-sch-btn' href='#'>OT Copy</a>"+ "<a class='rappm-sch-pmText rappm-sch-btn' href='#'>PM Copy</a>"+ "<\/td>"); }); // parseTicketPage var copyLinksStatus = [{decisionId:"",string:""}]; // Add batch buttons // $("#rappm-sch").before("<a href=# id='rappm-reqAll'>Request All Visible</a> | <a href=# id='rappm-copyAll'>Copy all</a>"); $("#rappm-sch").before("<a href=# id='rappm-reqAll'>Request All Visible</a> | <a href=# id='rappm-downloadSelected'>Download all selected replays</a> | <a href='#' id='rappm-copyAll'>Copy all decisions</a> "+ '<input type="checkbox" id="rappm-chatScriptCompat"><label for="rappm-chatScriptCompat">Compatibility with <i>GM Chat Extended</i> script</label>'); $('#rappm-copyAll').on('click', function() { var ids = gmName + ' '; if ($('.rappm-decisionList').length > 0) { $('.rappm-decisionList').remove(); } $('td.rappm-sch-decision').each(function(index, match) { ids += $(match).find('a')[0].innerText + ' ' }); GM_setClipboard(ids); }); $("#rappm-reqAll").click(function ($event) { $event.preventDefault(); $("tr[id^='rappm-sch-tr']:not(tr[class*='hidden'])").find(".rappm-sch-replays").trigger("click"); //$("tr[id^='rappm-sch-tr']:not(tr[class*='hidden'])").find(".rappm-sch-copyLinks").trigger("click"); }); $("#rappm-downloadSelected").click(function ($event) { $event.preventDefault(); $("tr.marked .rappm-sch-downloadReplay").trigger("click"); }); $('#rappm-chatScriptCompat').change(function($event){ if($(this).is(":checked")) { $('.rappm-chlLink').each(function (i) { var chlink = $(this).attr('href'); if (!chlink.includes('&items=on&apm=on')) { chlink += "&items=on&apm=on"; $(this).attr('href',chlink); } }); } else { $('.rappm-chlLink').each(function (i) { var chlink = $(this).attr('href'); if (chlink.includes('&items=on&apm=on')) { chlink = chlink.split("&items=on&apm=on").join(""); $(this).attr('href',chlink); } }); } }); /* $("#rappm-copyAll").click(function ($event) { $event.preventDefault(); var cpy = ""; $("tr[id^='rappm-sch-tr']:not(tr[class*='hidden'])").find(".rappm-sch-copyLinks").each(function ($event) { var decid = $(this).closest("tr[id^='rappm-sch-tr']").attr("id").substring(12); copyLinksStatus.forEach(function(pair){ if (pair !== null) { if (pair.decisionId == decid) { cpy += pair.string; } } }); }); GM_setClipboard (cpy); }); */ // var offenses = [ "Ability or item abuse", "Avoiding AFK detection", "Bad Nickname", "Feeding", "Staff impersonation", "Verbal abuse" ]; decisions.forEach(function(decision) { $.ajax({ url: decision.link, success: function(html){ var decisionSummaryDivId = "#decisionModal-"+decision.id; var decisionText = $(html).find(decisionSummaryDivId + " .modal-body").text(); var $decisionHtml = $(html).find(decisionSummaryDivId + " .modal-body").html(); decision.throwaway = $(html).find("#ticketContent tr:contains('Account type:') th:eq(2)").text().trim() == "Regular" && $(html).find("#ticketContent tr:contains('Standing:') th:eq(2)").text().trim() !== "Legacy" && decision.verdict == "Guilty" && $(html).find("#ticketContent").text().includes('Currently suspended'); decision.matchId = decisionText.substring(decisionText.indexOf("Match id: ")+10,decisionText.indexOf("Match id: ")+19).trim(); decision.reason = $decisionHtml.substring($decisionHtml.indexOf(decision.matchId,$decisionHtml.indexOf(decision.matchId)+1)+19,$decisionHtml.length).trim(); decision.chatlogLink = $(html).find("a[href*='chat.php']").attr("href"); decision.downloadLink = $(html).find("a[href$='.honreplay']").attr("href"); decision.suspension = ""; if (decisionText.indexOf("Suspension length: ")>-1) { decision.suspension = decisionText.substring(decisionText.indexOf("Suspension length: ")+19,decisionText.lastIndexOf("Ticket id:")).trim(); } var $decisionTitle = $(html).find(".portlet-title:contains('Decisions made') + .portlet-body p a[data-target='"+decisionSummaryDivId+"']").parent(); $decisionTitle.nextUntil("p").filter("strong:contains('Match ID')").each(function (i) { var matchId = $(this).text().trim().substring(10,$(this).text().length); var tickets = []; var $decisionElements = $(this).nextUntil("p"); //console.log($decisionElements); var nextMatchReached = 0; var $ticketLinks = $decisionElements.filter(function(index){ if ($(this).is("strong")) { nextMatchReached = 1; } return ($(this).is("a[href*='/ticket/']") && !nextMatchReached); }); //console.log($ticketLinks); $ticketLinks.each(function(i) { var ticketLinkText = $(this).text().split(" - "); var ticket = { id : ticketLinkText[0].trim(), category : ticketLinkText[1].trim(), link : $(this).attr("href"), description : "", gameTime : "", matchId : matchId, chatlogLink : "", downloadLink : "" }; tickets.push(ticket); }); var match = { id : matchId, tickets : tickets }; console.log(tickets.length); decision.matches.push(match); }); var $ticketLink = $(html).find("a[href$='/ticket/"+decision.ticketId+"']"); var ticketLinkText = $ticketLink.text(); decision.category=ticketLinkText.substring(ticketLinkText.indexOf(" - ")+3,ticketLinkText.length).trim(); decision.priors = checkPriors($ticketLink); $("#rappm-sch-tr"+decision.id+" .rappm-sch-matchId").last().html(decision.matchId+" <a href='"+decision.chatlogLink+"' class='rappm-chlLink'>[CH.L.]</a>"); $("#rappm-sch-tr"+decision.id+" .rappm-sch-matchId a").last().click(function($event){ $event.preventDefault(); GM_openInTab(decision.chatlogLink); }); // <skipping check> var skippingNote = ""; if ((decision.category == "Bad Nickname" || decision.category == "Verbal abuse" || decision.category == "Staff mpersonation")&& (decision.verdict == "Innocent")) { var skipping = findSkipping($(html),decision.ticketId); if (skipping !== false) { skippingNote = "<div style='font-size:10px;display:inline-block;padding:2px;border:red;background:#ffe8e8;color:red;width:200px'>"+skipping+"</div>"; } } $("#rappm-sch-tr"+decision.id+" .rappm-sch-action").last().append(skippingNote); // </skipping check> var countMarked = $('.marked').length+$('.markedOt').length+$('.markedOk').length; var countTotal = $('tr[id^="rappm-sch-tr"]').length; $("#floatingCounter .countTotal span").html('<em style="color:'+((countMarked>9)?'green':'red')+'">' + countMarked + '</em> / ' + '<em style="color:'+((countTotal<10)?'red':'green')+'">' + countTotal + '</em>'); $("#rappm-sch-tr"+decision.id+" .rappm-sch-numMatches").last().html(decision.matches.length); $("#rappm-sch-tr"+decision.id+" .rappm-sch-category").last().html(decision.category); $("#rappm-sch-tr"+decision.id+" .rappm-sch-reason").last().html(decision.reason); $("#rappm-sch-tr"+decision.id+" .rappm-sch-priors").last().html((decision.priors.chatAbuse > 0 || decision.priors.other > 0) ? "HAS PRIORS" : ""); console.log(decision.id+" - "+decision.priors.chatAbuse+" : " +decision.priors.other); $("#rappm-sch-tr"+decision.id+" .rappm-sch-status").click(function($event){ var $row = $(this).parent().parent(); $event.preventDefault(); // if is OK, change to OT if ($row.hasClass("markedOk")) { $row.removeClass("markedOk"); $row.addClass("markedOt"); $(this).text("Unmark"); if ($("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr").length || $("#rappm-sch-tr"+decision.id).next(".rappm-sch-m-tr").next(".rappm-overturn-tr").length) { $("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr").removeClass("hidden"); $("#rappm-sch-tr"+decision.id).next(".rappm-sch-m-tr").next(".rappm-overturn-tr").removeClass("hidden"); $(this).siblings(".rappm-sch-loadMatches").removeClass("hidden"); } else { var matchOptions = ""; decision.matches.forEach(function(match) { matchOptions += "<option value='"+match.id+"' "+ (match.id==decision.matchId?"selected=''":"") +">"+match.id+"</option>"; }); var categoryOptions = ""; offenses.forEach(function(offense) { categoryOptions += "<option value='"+offense+"' "+ (offense==decision.category?"selected=''":"") +">"+offense+"</option>"; }); $("#rappm-sch-tr"+decision.id).after("<tr class='rappm-overturn-tr'>" + "<td class=\"rappm-sch-decision\"><\/td>" + "<td class=\"rappm-sch-time\"><strong>Overturn details<\/strong><\/td>" + "<td class=\"rappm-sch-offender\"><\/td>" + "<td class=\"rappm-sch-matchId\">"+/*"<span class='rappm-new-matchId'><strong>New match:</strong><br><select>"+ matchOptions + "</select></span>"+*/"<\/td>" + "<td class=\"rappm-sch-numMatches\"><\/td>" + "<td class=\"rappm-sch-ticketId\"><\/td>" + "<td class=\"rappm-sch-verdict\">"+/*"<span class='rappm-new-verdict'><strong>New verdict:</strong><br><select>"+ "<option>Guilty</option>"+ "<option>Warning</option>"+ "<option>Innocent</option>"+ "</select></span>"+*/"<\/td>" + "<td class=\"rappm-sch-category\">"+/*"<span class='rappm-new-category'><strong>New category:</strong><br><select>"+ categoryOptions + "</select></span>"+*/"<\/td>" + "<td class=\"rappm-sch-reason\">"+"<span class='rappm-new-reason'><strong>Short OT description:</strong><br><textarea class='rappm-ta-reason' rows='4' cols='50'></textarea>"+ "</span>"+"<\/td>" + "<td colspan=\"2\">"+"<strong>Explanation:</strong><br><textarea class='rappm-ta-explanation' rows='4' cols='30'></textarea>"+"<\/td>" + "<\/tr>"); $("#rappm-sch-tr"+decision.id+" .rappm-sch-action").append("<a class='rappm-sch-loadMatches rappm-sch-btn' href='#'>Load all matches</a>"); $("#rappm-sch-tr"+decision.id+" .rappm-sch-loadMatches").click(function($event){ if (!$("#rappm-sch-tr"+decision.id).next(".rappm-sch-m-tr").length) { $event.preventDefault(); var $row = $(this).parent().parent(); $row.after("<tr class='rappm-sch-m-tr'><td colspan='11'><div class='rappm-sch-m-div'><table>"+ "<tr class='rappm-sch-tr-matchHeader'>"+ "<th>Match ID</th>"+ "<th>Summary of tickets</th>"+ "<th>Actions</th>"+ //http://rap.heroesofnewerth.com/chat.php?match_id=147432893&highlight[]=Infeell1:030&highlight[]=tonhito1510:300 "</tr>"+ "</table><div></td></tr>"); var $div = $row.next(".rappm-sch-m-tr").find(".rappm-sch-m-div"); $div.slideDown(); decision.matches.forEach(function(match){ $div.find("table").append("<tr id='rappm-sch-tr-m"+match.id+"'>"+ "<td class='rappm-sch-m-id'>"+match.id+"</td>"+ "<td class='rappm-sch-m-summary'>"+loadingImage+"</td>"+ "<td class='rappm-sch-m-actions'>"+loadingImage+"</td>"+ "</tr>"); $div.css("background",$row.css("background")); var $matchRow = $("#rappm-sch-tr-m"+match.id); var matchSummary = "Reports:"; var counter = 0; match.tickets.forEach(function(ticket){ $.ajax({ url: ticket.link, dataType : 'html', type: 'GET', success: function(data){ ticket.gameTime = $(data).find('td:contains("Game time:")').next().next().text().trim(); ticket.description = $(data).find('td:contains("Description:")').next().next().text().trim(); ticket.chatlogLink = $(data).find("a[href*='chat.php']").attr("href"); console.log(ticket); counter++; matchSummary += "<br>"+ticket.category; if (ticket.gameTime != "") { matchSummary += " @["+ticket.gameTime+"]"; } if (ticket.description != "") { matchSummary += " ("+ticket.description+")"; } if (counter==match.tickets.length) { $matchRow.find(".rappm-sch-m-summary").html(matchSummary); $matchRow.find(".rappm-sch-m-actions").html("<a id='rappm-sch-m-chl"+match.id+"' class='rappm-chlLink' href='#'>Chatlog</a> | "+ "<a id='rappm-sch-m-anal"+match.id+"' href='#'>Analyser</a> | "+ "<a id='rappm-sch-m-tl"+match.id+"' href='#'>Ticket link</a>"+ /* "<a id='rappm-sch-m-use"+match.id+"' href='#'>Use match in OT</a>"*/ ""); $("#rappm-sch-m-chl"+match.id).click(function($event){ $event.preventDefault(); GM_openInTab(ticket.chatlogLink); }); $("#rappm-sch-m-anal"+match.id).click(function($event){ $event.preventDefault(); GM_openInTab(getChatlogAnalyserLink(match.id,decision.offender)); }); $("#rappm-sch-m-tl"+match.id).click(function($event){ $event.preventDefault(); GM_openInTab(ticket.link); }); $("#rappm-sch-m-use"+match.id).click(function($event){ $event.preventDefault(); $row.next().next(".rappm-overturn-tr").find(".rappm-new-matchId select").val(match.id); }); } } }); }); }); } else { var $otherMatchesTable = $("#rappm-sch-tr"+decision.id).next(".rappm-sch-m-tr"); if ($otherMatchesTable.hasClass("hidden")) { $otherMatchesTable.removeClass("hidden"); $(this).siblings(".rappm-sch-loadMatches").removeClass("hidden"); } } }); } // if is OT, change to nothing } else if ($row.hasClass("markedOt")) { $(this).siblings(".rappm-sch-loadMatches").addClass("hidden"); $row.removeClass("markedOt"); $("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr").addClass("hidden"); $("#rappm-sch-tr"+decision.id).next(".rappm-sch-m-tr").next(".rappm-overturn-tr").addClass("hidden"); $("#rappm-sch-tr"+decision.id).next(".rappm-sch-m-tr").addClass("hidden"); $(this).text("Select"); // if is marked, change to OK } else if ($row.hasClass("marked")) { $row.removeClass("marked"); $row.addClass("markedOk"); $(this).text("Mark OT"); // if is nothing, change to marked } else { $row.addClass("marked"); $(this).text("Mark OK"); } $("#floatingCounter .countSel span").html($('.marked').length); $("#floatingCounter .countOK span").html($('.markedOk').length); $("#floatingCounter .countOT span").html($('.markedOt').length); var countMarked = $('.marked').length+$('.markedOt').length+$('.markedOk').length; var countTotal = $('tr[id^="rappm-sch-tr"]').length; $("#floatingCounter .countTotal span").html('<em style="color:'+((countMarked>9)?'green':'red')+'">' + countMarked + '</em> / ' + '<em style="color:'+((countTotal<10)?'red':'green')+'">' + countTotal + '</em>'); }); $("#rappm-sch-tr"+decision.id+" .rappm-sch-decision a").click(function($event){ $event.preventDefault(); GM_openInTab($(this).attr("href")); }); $("#rappm-sch-tr"+decision.id+" .rappm-sch-replays").click(function($event){ $event.preventDefault(); var $button = $(this); var counter = 0; decision.matches.forEach(function(match){ var url = "https://rap.heroesofnewerth.com/api/rap/replays/request/match_id/"+match.id; $.ajax({ url:url, type:"GET", success: function(data){ counter++; if (decision.matches.length == counter) { $button.text("All replays requested"); } } }); }); }); if (decision.throwaway) { // --------- Add new menu item - Report Throwaway Account Link --------------------------- var $throwawayURL = "https://docs.google.com/forms/d/e/1FAIpQLSfkxBuu5vMBynxXmBOlcywJTmz3xYaL2PnIMzXlRnnAeBPiWg/viewform"; var $throwawayFieldGM = "1074411029"; var $throwawayFieldReported = "1839907460"; var $throwawayFieldTicket = "1618775217"; var $throwawayFields = "?entry."+$throwawayFieldGM+"=" + $mentorName +"&entry."+$throwawayFieldReported+"=" + decision.offender; $("#rappm-sch-tr"+decision.id+" .rappm-sch-action").append("<a class='rappm-sch-throwaway rappm-sch-btn' href='"+$throwawayURL+$throwawayFields+"'>Report throwaway</a>"); $("#rappm-sch-tr"+decision.id+" .rappm-sch-throwaway").click(function($event){ var $link = $(this).attr("href").concat("&entry."+$throwawayFieldTicket+"=" + decision.ticketId); if($link.length > 0) { GM_openInTab($link); } $event.preventDefault(); }); // --------------------------------------------------------------------------------------- } $("#rappm-sch-tr"+decision.id+" .rappm-sch-otText").click(function($event){ $event.preventDefault(); if(decision.otText !== 'undefined') { var date = new Date(Date.now()).toLocaleDateString("en-US"); var $otDetailsRow; if (!$("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr").length) { $otDetailsRow = $("#rappm-sch-tr"+decision.id).next().next(".rappm-overturn-tr"); } else { $otDetailsRow = $("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr"); } var newReason = ''; if ($otDetailsRow.find(".rappm-ta-reason").length) { newReason = $otDetailsRow.find(".rappm-ta-reason").val().split('\n').join(';'); } else { newReason = '~~~~~~~~~~ reason for OT ~~~~~~~~~~' } GM_setClipboard(decision.offender + '\t' + gmName + '\t' + $mentorName + '\t' + date + '\t\t' + decision.id + '\t' + decision.verdict + '\t\t\t' + newReason); } }); $("#rappm-sch-tr"+decision.id+" .rappm-sch-pmText").click(function($event){ $event.preventDefault(); var $otDetailsRow; if (!$("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr").length) { $otDetailsRow = $("#rappm-sch-tr"+decision.id).next().next(".rappm-overturn-tr"); } else { $otDetailsRow = $("#rappm-sch-tr"+decision.id).next(".rappm-overturn-tr"); } var newExplanation = ''; if ($otDetailsRow.find(".rappm-ta-explanation").length) { newExplanation =$otDetailsRow.find(".rappm-ta-explanation").val(); } else { newExplanation = '~~~~~~~~~~ explanation of the mistake ~~~~~~~~~~'; } var pmMessage = ""+ "Hello " + gmName + ",\n" + "your [url=" + decision.link + "]decision #" + decision.id + "[/url] (details below) was incorrect.\n"+ "[spoiler]"+ "[table]Player | "+decision.offender+"\n"+ "Match ID | [m]"+decision.matchId+"[/m]\n"+ "Verdict | "+(decision.verdict=="Guilty"?"[color=red]Guilty[/color]":(decision.verdict=="Warning"?"[color=orange]Warning[/color]":"[color=green]Innocent[/color]"))+"\n"+ "Category | "+decision.category+ ((decision.suspension.length<1)?"[/table]\n":("\nSuspension | "+decision.suspension+"[/table]\n"))+ (((decision.verfict=="Innocent")&&(decision.reason.trim()===""))?"\n": ("[b][color=white]Your description[/color][/b]\n[hr][/hr][indent]"+$('<div>').html(uncensorText(decision.reason)).text()+"[/indent]"))+ "[hr][/hr]\nSubmitted "+decision.time+"[/spoiler]\n"+ uncensorText(newExplanation)+ "\n\n"+ "Please read the [url=https://forums.heroesofnewerth.com/showthread.php?546907-Overturns-and-how-to-avoid-them-RAP-Q-amp-A-(Trials-please-read)]Overturns and how to avoid them[/url]"+ " forum post or contact me or other mentors for instructions in how to avoid more overturns in the future.\n" + "Should you disagree with the overturn, then it can be [url=https://rap.heroesofnewerth.com/gm/tasks/create]appealed in the GM Portal[/url] for an SGM to review." + "\n\n"+ "Regards,\n"+ $mentorName; GM_setClipboard(pmMessage); }); $("#rappm-sch-tr"+decision.id+" .rappm-sch-downloadReplay").click(function($event){ $event.preventDefault(); if(decision.downloadLink !== 'undefined') { GM_openInTab(decision.downloadLink); } }); $("#rappm-sch-tr"+decision.id+" .rappm-sch-copyLinks").click(function($event){ $event.preventDefault(); var copyLinksString = ""; copyLinksStatus.forEach(function(pair){ if (pair !== null) { if (pair.decisionId == decision.id) { copyLinksString = pair.string; } } }); if (copyLinksString === "") { var $button = $(this); $button.text($button.text()+"[0/"+decision.matches.length+"]"); $event.preventDefault(); var output = decision.offender + ";"; decision.matches.forEach(function(match){ $.ajax({ url:match.tickets[0].link, success: function(data){ output = output + $(data).find("a[href*='.amazo']").attr("href").trim().replace(".honreplay",".zip") + ";"; var btnSplit = $button.text().split("["); var btnTextEnd = btnSplit[1].substring(btnSplit[1].indexOf("/")); var numberOfLoaded = parseInt(btnSplit[1].substring(0,btnSplit[1].indexOf("/")))+1; if (numberOfLoaded == decision.matches.length) { $button.text(btnSplit[0]); GM_setClipboard (output); var entry = { decisionId : decision.id, string : output }; copyLinksStatus.push(entry); } else { $button.text(btnSplit[0] +"["+numberOfLoaded+ btnTextEnd); } } }); }); } else GM_setClipboard (copyLinksString); }); /*$('#rappm-sch-form-fill').unbind("click"); $('#rappm-sch-form-fill').click(function($event) { $event.preventDefault(); collectSpotcheckData(decisions); GM_setValue("dataChanged",true); //updateSpotcheckForm(); });*/ $('#rappm-sch-form-fetch').unbind("click"); $('#rappm-sch-form-fetch').click(function ($event) { $event.preventDefault(); $('#hdrfb').remove(); $("#rappm-form-feedback").remove(); //remove feedback text area and create a new one, to reset the feedback text if it changed $("#data_div").append('<textarea id="rappm-form-feedback" style="width:100%;height:100%" class=""></textarea>') $('#rappm-form-feedback').before("<div id='hdrfb'><br><strong>Discord feedback</strong><div>"); $('.markedOt').each(function () { var OTtext = ""; var feedbackText = ""; var decId = $(this).find('.rappm-sch-decision').text().trim(); decisions.forEach(function (dec) { if (dec.id == decId) { var $otDetailsRow; if (!$("#rappm-sch-tr" + decId).next(".rappm-overturn-tr").length) { $otDetailsRow = $("#rappm-sch-tr" + decId).next().next(".rappm-overturn-tr"); } else { $otDetailsRow = $("#rappm-sch-tr" + decId).next(".rappm-overturn-tr"); } //var newVerdict = $otDetailsRow.find(".rappm-new-verdict select option:selected").text(); //var newMatch = $otDetailsRow.find(".rappm-new-matchId select option:selected").text(); //var newTicket = getTicketForMatch(newMatch, dec); //var newCategory = $otDetailsRow.find(".rappm-new-category select option:selected").text(); var reg = new RegExp('(`|_|\\*|~)', 'gi'); var reg2 = new RegExp('(`{3,})', 'gi'); var newOffender = dec.offender.replaceAll(reg, '\\$1'); var newReason = $otDetailsRow.find(".rappm-ta-reason").val().split('\n').join('<br>').replace('<br><br><br>', '<br>').replace('<br><br>', '<br>').replace('<br><br>', '<br>').replaceAll(reg, '\\$1'); var newExplanationRaw = $otDetailsRow.find(".rappm-ta-explanation").val().replaceAll(reg, '\\$1'); var newExplanation = newExplanationRaw.split('\n').filter(word => word.length > 0).join('_<br>_').split('__').join(''); var reason = dec.reason.split('\n').join('<br>').split('<br><br><br>').join('<br>').split('<br><br>').join('<br>'); if (reason.match(reg2)) { reason = reason.replaceAll('`', 'ยด'); } //var tab = "	"; // var tabCount = Math.ceil(6-(dec.offender.length/2)); OTtext = "Decision " + dec.id + " - " + dec.verdict + " - " + newReason.trim(); feedbackText = ":bust_in_silhouette: Player: " + newOffender + " | :movie_camera: Match: " + dec.matchId + " | :writing_hand: Your decision: _" + dec.verdict + (" (" + dec.category + ")") + "_<br>**Your description:**" + ((dec.reason === "") ? " N/A<br>" : "<br>```<br>" + reason + "<br>```<br>") + "**My comments:**<br>_" + newExplanation + "_<br>" + "<br>"; feedbackText = feedbackText.split('<br>').join('\n').split('\n\n').join('\n'); } }); //$('#rappm-form-otInfo').append(OTtext+"<br>"); $('#rappm-form-feedback').append(feedbackText + "\n\n"); }); }); //console.log($(".rappm-sch-tr"+decision.id+" .rappm-sch-decision a")); //console.log($(".rappm-sch-tr"+decision.id+" .rappm-sch-copyLinks")); //console.log($(".rappm-sch-tr"+decision.id+" .rappm-sch-status")); //console.log($(".rappm-sch-tr"+decision.id+" .rappm-sch-replays")); // do later $("#rappm-sch-tr"+decision.id+" .rappm-sch-details").click(function($event){ $event.preventDefault(); var $row = $(this).parent().parent(); $row.after("<tr class='rappm-sch-tr-matchHeader'>"+ "<th class='rappm-sch-nullTd'></th>" + "<th>Match ID</th>"+ "<th>Summary of tickets</th>"+ "<th>Actions</th>"+ //http://rap.heroesofnewerth.com/chat.php?match_id=147432893&highlight[]=Infeell1:030&highlight[]=tonhito1510:300 "</tr>"); decision.matches.forEach(function(match){ $row.next().after("<tr id='rappm-sch-tr-m"+match.id+"><td class='rappm-sch-nullTd'></td></tr>"); var $matchRow = $("#rappm-sch-tr-m"+match.id); $matchRow.append("<td>"+match.id+"</td>"); $.ajax({ }); }); }); } }); }); } }); } function getChatlogAnalyserLink(matchId,player) { return 'https://rap.heroesofnewerth.com/gm/ajax/chat/parse/match_id/'+matchId+'/player_name/'+player; } function getTicketForMatch(newMatch,decision) { var result; decision.matches.forEach(function(match){ if (match.id==newMatch) { result = match.tickets[0].id; } }); return result; } function collectSpotcheckData(decisions) { GM_setValue("sch-gm",$spotcheckedGmName); GM_setValue("sch-mentor",$mentorName); var ots = ""; $('.markedOt').each(function(){ var OTtext = ""; var decId = $(this).find('.rappm-sch-decision').text().trim(); decisions.forEach(function (dec) { if (dec.id == decId) { var $otDetailsRow; if (!$("#rappm-sch-tr"+decId).next(".rappm-overturn-tr").length) { $otDetailsRow = $("#rappm-sch-tr"+decId).next().next(".rappm-overturn-tr"); } else { $otDetailsRow = $("#rappm-sch-tr"+decId).next(".rappm-overturn-tr"); } var newVerdict = $otDetailsRow.find(".rappm-new-verdict select option:selected").text(); var newMatch = $otDetailsRow.find(".rappm-new-matchId select option:selected").text(); var newTicket = getTicketForMatch(newMatch,dec); var newCategory = $otDetailsRow.find(".rappm-new-category select option:selected").text(); var newReason = $otDetailsRow.find(".rappm-ta-reason").val(); var newExplanation =$otDetailsRow.find(".rappm-ta-explanation").val(); OTtext = "Decision "+dec.id+" | Match "+newMatch+" | Ticket "+newTicket+"\n"+ dec.verdict + (dec.verdict=="Innocent"?"":(" ("+dec.category+")")) + " -> " + newVerdict + (newVerdict=="Innocent"?"":(" (" + newCategory + ")")) +"\n\n"+ (newReason.trim()==""?"":(newReason + "\n\n"))+ (newExplanation.trim()==""?"":("(" + newExplanation +")" +"\n\n"))+ "----------------------------------------------------------"+ "\n"; } }); ots += "\n"+OTtext; }); GM_setValue("sch-ots",ots); } function processSpotcheckForm() { $('#group_1000000_1').prop('checked',true); var url = $('form').attr('action').trim(); $("#ss-submit").trigger("click"); var interval1 = setInterval(function () { if ($(".ss-q-title:contains('Did you manage to contact the GM you spotchecked?')").length) { GM_setValue("formReady",true); console.log("Form ready"); } }, 1000); var reformated = false; var interval2 = setInterval(function () { if (GM_getValue("formReady")) { /* if (!reformated) { $("link[rel='stylesheet']:eq(1)").remove(); $("form ol").children("div:eq(0)").before("<div id='form-n'>"); $("form ol").children("div:eq(3)").after("</div>"); $("form ol").children("div:eq(4)").before("<div id='form-b'>"); $("form ol").children("div:eq(6)").after("</div>"); $("form ol").children("div:eq(7)").before("<div id='form-o'>"); $("form ol").children("div:eq(8)").after("</div>"); $("form ol").children("div:eq(9)").before("<div id='form-m'>"); $("form ol").children("div:eq(10)").after("</div>"); reformated = true; }*/ clearInterval(interval1); if (GM_getValue("dataChanged")) { updateSpotcheckForm(); GM_setValue("dataChanged",false); } } }, 1000); } function updateSpotcheckForm() { if (GM_getValue("formReady")) { $("#entry_1000001").val(GM_getValue("sch-mentor")); $("#entry_1000001").addClass("valid"); $("#entry_1000003").val(GM_getValue("sch-gm")); $("#entry_1000003").addClass("valid"); $("#entry_1000011").val(GM_getValue("sch-ots")); $("#entry_1000011").addClass("valid");} else {console.log("Not ready")}; } function checkForSkipping(decisionUrl) { $.ajax({ url: decisionUrl, success: function(data){ var $html = $(data); var ticketId = decisionUrl.substring(decisionUrl.lastIndexOf('/')+1); findSkipping($html,ticketId); } }); } function uncensorText(string) { return string.split('fuck').join('fu ck') .split('cunt').join('cu nt') .split('cock').join('co ck') .split('ass').join('as s') .split('nigger').join('ni gger') .split('clit').join('cl it') .split('shit').join('sh it') .split('bitch').join('bi tch') .split('faggot').join('fa ggot'); } function findSkipping($html,ticketId) { var $decisionsMade = $html.find('.portlet-title:contains("Decisions made")').next('div'); var matchId = $decisionsMade.find('a:contains("'+ticketId+'")').prevUntil('strong').last().prev('strong').text(); matchId = matchId.substring(matchId.lastIndexOf(':')+1).trim(); var gmName = $decisionsMade.find('a:contains("'+ticketId+'")').prevUntil('p').last().prev('p').text(); gmName = gmName.substring(gmName.lastIndexOf('(')+1,gmName.lastIndexOf(')')).trim(); var $newDecisions = $decisionsMade.children().slice(0,$decisionsMade.find('a:contains("'+ticketId+'")').prevUntil('hr').last().index()).filter('p,strong,a:contains(" - ")'); $newDecisions.each(function(i){ if ($(this).is('p')) { $(this).nextUntil('p').addBack().wrapAll('<div class="decisionDiv">'); } }); var skipped = false; var skippingEvidence = ""; $html.find('.decisionDiv').each(function (i) { var judge = $(this).find('p').text(); var decisionId = judge.substring(judge.lastIndexOf('Decision')+8,judge.lastIndexOf('judged on')).trim(); judge = judge.substring(judge.lastIndexOf('(')+1,judge.lastIndexOf(')')).trim(); if (judge!=gmName) { var match; $(this).find('strong:contains("Match ID")').each(function (i) { //$(this).find('strong:contains("Match ID"),a:contains(" - ")').each(function (i) { if ($(this).is("strong")) { match = $(this).text(); match = match.substring(match.lastIndexOf(':')+1).trim(); if (match==matchId) { skippingEvidence += (skippingEvidence===""?"":", ") + "match "+match+" afterwards decided via "+decisionId+" by "+judge; skipped = true; } } else { var report = $(this).text(); report = report.substring(0,report.indexOf(' - ')).trim(); if (report<=ticketId) { if (!skippingEvidence.includes("match "+match)) { console.log(match); console.log(skippingEvidence); skippingEvidence += (skippingEvidence===""?"":", ") + "report "+report+" afterwards decided via "+decisionId+" by "+judge; } skipped = true; } } }); } }); var $openTickets = $html.find('.portlet-title:contains("Open tickets")').next('div'); var $unjudgedTickets = $openTickets.children().filter('strong,a:contains(" - ")'); var match; $unjudgedTickets.each(function(i){ if ($(this).is("strong")) { match = $(this).text(); match = match.substring(match.lastIndexOf(':')+1).trim(); if (match<=matchId) { skippingEvidence += (skippingEvidence===""?"":", ") + "unjudged match "+match; skipped = true; } } else { var report = $(this).text(); report = report.substring(0,report.indexOf(' - ')).trim(); if (report<=ticketId) { if (!skippingEvidence.includes("match "+match)) { console.log(match); console.log(skippingEvidence); skippingEvidence += (skippingEvidence===""?"":", ") + "unjudged report "+report; } skipped = true; } } }); return skipped?(gmName+" innocents VA/BN/SI and leaves other reports unjudged.. This is supported by "+skippingEvidence+"."):skipped; } // ===========================================================================================