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;
}
// ===========================================================================================