// keeps track of how many events have been displayed let count = 1; $(document).ready(function () { /* Expand alias tab if they have any */ $('#profile_aliases_btn').click(function (e) { const aliases = $('#profile_aliases').text().trim(); if (aliases && aliases.length !== 0) { $('#profile_aliases').slideToggle(150); } }); /* load the initial 40 events */ $.each(clientInfo.Meta, function (index, meta) { if (meta.key.includes("Event")) { loadMeta(meta); if (count % 40 === 0) { count++; return false; } count++; } }); /* load additional events on scroll */ $(window).scroll(function () { if ($(window).scrollTop() === $(document).height() - $(window).height() || $(document).height() === $(window).height()) { while (count % 40 !== 0 && count < clientInfo.Meta.length) { loadMeta(clientInfo.Meta[count - 1]); count++; } count++; } }); /* load meta thats not an event */ $.each(clientInfo.Meta, function (index, meta) { if (!meta.key.includes("Event")) { let metaString = `
${meta.value} ${meta.key}
`; $("#profile_meta").append(metaString); } }); /* get ip geolocation info into modal */ $('.ip-locate-link').click(function (e) { e.preventDefault(); const ip = $(this).data("ip"); $.getJSON("http://ip-api.com/json/" + ip) .done(function (response) { $('.modal-title').text(ip); $('.modal-body').text(""); $('.modal-body').append("ASN — " + response["as"] + "
"); $('.modal-body').append("ISP — " + response["isp"] + "
"); $('.modal-body').append("Organization — " + response["org"] + "
"); $('.modal-body').append("Location — " + response["city"] + ", " + response["regionName"] + ", " + response["country"] + "
"); $('#mainModal').modal(); }); }); /* * handle action modal */ $('.profile-action').click(function (e) { const actionType = $(this).data('action'); $.get('/Action/' + actionType + 'Form') .done(function (response) { $('#actionModal .modal-body').html(response); $('#actionModal').modal(); }) .fail(function (jqxhr, textStatus, error) { $('#actionModal .modal-body').html('' + error + ''); $('#actionModal').modal(); }); }); /* * handle action submit */ $(document).on('submit', '.action-form', function (e) { e.preventDefault(); $(this).append($('#target_id input')); const data = $(this).serialize(); $.get($(this).attr('action') + '/?' + data) .done(function (response) { $('#actionModal .modal-body').html(response); $('#actionModal').modal(); }) .fail(function (jqxhr, textStatus, error) { $('#actionModal .modal-body').html('Error' + error + ''); }); }); }); function penaltyToName(penaltyName) { switch (penaltyName) { case "Flag": return "Flagged"; case "Warning": return "Warned"; case "Report": return "Reported"; case "Ban": return "Banned"; case "Kick": return "Kicked"; case "TempBan": return "Temp Banned"; case "Unban": return "Unbanned"; } } function shouldIncludePlural(num) { return num > 1 ? 's' : ''; } let mostRecentDate = 0; let currentStepAmount = 0; let lastStep = ""; function timeStep(stepDifference) { let hours = (stepDifference / (1000 * 60 * 60)); let days = (stepDifference / (1000 * 60 * 60 * 24)); let weeks = (stepDifference / (1000 * 60 * 60 * 24 * 7)); if (Math.round(weeks) > Math.round(currentStepAmount / 24 * 7)) { currentStepAmount = Math.round(weeks); return `${currentStepAmount} week${shouldIncludePlural(currentStepAmount)} ago`; } if (Math.round(days) > Math.round(currentStepAmount / 24)) { currentStepAmount = Math.round(days); return `${currentStepAmount} day${shouldIncludePlural(currentStepAmount)} ago`; } if (Math.round(hours) > currentStepAmount) { currentStepAmount = Math.round(hours); return `${currentStepAmount} hour${shouldIncludePlural(currentStepAmount)} ago`; } } function loadMeta(meta) { let eventString = ''; const metaDate = Date.parse(meta.when); if (mostRecentDate === 0) { mostRecentDate = metaDate; } const step = timeStep(new Date().getTime() - metaDate); if (step !== lastStep) { $('#profile_events').append(' ' + step + ''); lastStep = step; } // it's a penalty if (meta.class.includes("Penalty")) { if (meta.value.punisherId !== clientInfo.clientId) { eventString = `
${penaltyToName(meta.value.type)} by ${meta.value.punisherName} for ${meta.value.offense}
`; } else { eventString = `
${penaltyToName(meta.value.type)} ${meta.value.offenderName} for ${meta.value.offense}
`; } } // it's a message else if (meta.key.includes("Event")) { eventString = `
> ${meta.value}
`; } $('#profile_events').append(eventString); }