diff --git a/admin-flag-notifier/admin-flag-notifier.user.js b/admin-flag-notifier/admin-flag-notifier.user.js index 0526ff3..14cec08 100644 --- a/admin-flag-notifier/admin-flag-notifier.user.js +++ b/admin-flag-notifier/admin-flag-notifier.user.js @@ -17,28 +17,28 @@ // ==/UserScript== (function () { - 'use strict'; - if (Notification.permission !== 'granted') { + "use strict"; + if (Notification.permission !== "granted") { Notification.requestPermission(); } - + // Determine site name var host = window.location.host; - var sitename = host.split('.')[0]; - + var sitename = host.split(".")[0]; + // Determine current amount of flags - var currentTitle = $('title').text(); + var currentTitle = $("title").text(); var currentFlags = parseInt(currentTitle); console.log("Current: " + currentFlags); - + setInterval(function () { - var url = 'https://' + host + '/admin/dashboard?filtered=false'; + var url = "https://" + host + "/admin/dashboard?filtered=false"; console.log("Calling: " + url); $.get(url, function (data) { - var updatedTitle = $('').html(data).find('title').text(); + var updatedTitle = $("").html(data).find("title").text(); var updatedFlags = parseInt(updatedTitle); console.log("Update: " + updatedFlags); - + // TODO: check on flag IDs instead if (updatedFlags < currentFlags) { console.log("Less flags."); @@ -47,14 +47,14 @@ } else if (updatedFlags > currentFlags) { console.log("More flags."); // new flags, create a notification. Remember the current number, so that we don't send a notification twice for the same flag - currentFlags = updatedFlags; - if (Notification.permission === 'granted') { - var notification = new Notification('New flags (total: ' + updatedFlags + ')', { - icon: 'https://cdn.sstatic.net/Sites/' + sitename + '/img/apple-touch-icon.png', + currentFlags = updatedFlags; + if (Notification.permission === "granted") { + var notification = new Notification("New flags (total: " + updatedFlags + ")", { + icon: "https://cdn.sstatic.net/Sites/" + sitename + "/img/apple-touch-icon.png", requireInteraction: true // on macOS, this only has effect when you set the notification types of your browser to 'Alert' instead of 'Banner'. }); console.log("Notification created."); - notification.onclick = function() { + notification.onclick = function () { console.log("Notification clicked."); window.focus(); // reload only here, otherwise the notification will be dismissed @@ -64,4 +64,4 @@ } }); }, 60000); -}) (); +})(); diff --git a/destroy-spammer/destroy-spammer.user.js b/destroy-spammer/destroy-spammer.user.js index 90fa7da..4620273 100644 --- a/destroy-spammer/destroy-spammer.user.js +++ b/destroy-spammer/destroy-spammer.user.js @@ -14,77 +14,83 @@ // @grant none // ==/UserScript== (function () { - 'use strict'; - + "use strict"; + // Determine user ID var userIDRegex = /\/users\/(\d+)\//g; - var userID = userIDRegex.exec(document.location) [1]; + var userID = userIDRegex.exec(document.location)[1]; var userName = $(".name.mod-tabs").attr("title"); - var userNameIsSuspicious = typeof userName !== 'undefined' && userName.toLowerCase().contains("insur"); + var userNameIsSuspicious = typeof userName !== "undefined" && userName.toLowerCase().contains("insur"); // Find 'Mod' dialog link - var moderatorLinkElement = $('a#user-moderator-link-' + userID); - if (moderatorLinkElement.length == 0) // Current user is not a moderator, or wrong tab - no action possible - return; + var moderatorLinkElement = $("a#user-moderator-link-" + userID); + if (moderatorLinkElement.length === 0) { + return; // Current user is not a moderator, or wrong tab - no action possible + } var destroySpammerLinkAdded = false; - + // This function will create the 'Destroy spammer' link; // this can happen either synchronously or asynchronously (after fetching additional data). var createDestroyLink = function (userID) { // The link can be added only once. - if (destroySpammerLinkAdded) + if (destroySpammerLinkAdded) { return; + } destroySpammerLinkAdded = true; - - var destroyLink = document.createElement('a'); - destroyLink.appendChild(document.createTextNode('Destroy spammer')); + + var destroyLink = document.createElement("a"); + destroyLink.appendChild(document.createTextNode("Destroy spammer")); destroyLink.onclick = function () { // Ask for confirmation - if (window.confirm('Are you sure?')) { - // TODO: remember the last time this script was activated, - // and build in a 5 second delay to prevent the rate limit from triggering. + if (window.confirm("Are you sure?")) { + // TODO: remember the last time this script was activated, + // and build in a 5 second delay to prevent the rate limit from triggering. $.post({ - url: 'https://' + document.location.host + '/admin/users/' + userID + '/destroy', - data: 'annotation=&deleteReasonDetails=&mod-actions=destroy&destroyReason=This+user+was+created+to+post+spam+or+nonsense+and+has+no+other+positive+participation&destroyReasonDetails=&fkey=' + window.localStorage["se:fkey"].split(",")[0], - success: function (data) { + url: "https://" + document.location.host + "/admin/users/" + userID + "/destroy", + data: "annotation=&deleteReasonDetails=&mod-actions=destroy&destroyReason=This+user+was+created+to+post+spam+or+nonsense+and+has+no+other+positive+participation&destroyReasonDetails=&fkey=" + window.localStorage["se:fkey"].split(",")[0], + success: function () { // Reload page window.location.reload(); }, error: function (jqXHR, textStatus, errorThrown) { - window.alert('An error occurred, please try again later.'); - console.log('Error: ' + textStatus + ' ' + errorThrown); + window.alert("An error occurred, please try again later."); + console.log("Error: " + textStatus + " " + errorThrown); } }); } }; - + // Add to document moderatorLinkElement.after(destroyLink); }; - + // Check for keywords in spammers' profiles - $.get(document.location.href.split('?')[0] + "?tab=profile", function (data) { - if (data.search(/1\D844\D909\D0831/g) != -1) { + $.get(document.location.href.split("?")[0] + "?tab=profile", function (data) { + if (data.search(/1\D844\D909\D0831/g) !== -1) { createDestroyLink(userID); } }); // Check for (deleted) questions and answers - var questionsPanel = $('#user-panel-questions'); - var undeletedQuestions = questionsPanel.find('td.question-hyperlink').not('.deleted-answer').length; // yes, deleted-answer. Don't ask why. - var deletedQuestions = questionsPanel.find('td.question-hyperlink.deleted-answer').length; - if (undeletedQuestions > 0) // User has content - use the dialog instead - return; - var answersPanel = $('#user-panel-answers'); - var undeletedAnswers = answersPanel.find('td.answer-hyperlink').not('.deleted-answer').length; - var deletedAnswers = answersPanel.find('td.answer-hyperlink.deleted-answer').length; - if (undeletedAnswers > 0) // User has content - use the dialog instead - return; - if (deletedQuestions + deletedAnswers == 0 && !userNameIsSuspicious) // User has no deleted content - use the dialog instead - return; - if (deletedQuestions + deletedAnswers > 4) // User has too much deleted content - use the dialog instead - return; - + var questionsPanel = $("#user-panel-questions"); + var undeletedQuestions = questionsPanel.find("td.question-hyperlink").not(".deleted-answer").length; // yes, deleted-answer. Don"t ask why. + var deletedQuestions = questionsPanel.find("td.question-hyperlink.deleted-answer").length; + if (undeletedQuestions > 0) { + return; // User has content - use the dialog instead + } + var answersPanel = $("#user-panel-answers"); + var undeletedAnswers = answersPanel.find("td.answer-hyperlink").not(".deleted-answer").length; + var deletedAnswers = answersPanel.find("td.answer-hyperlink.deleted-answer").length; + if (undeletedAnswers > 0) { + return; // User has content - use the dialog instead + } + if (deletedQuestions + deletedAnswers === 0 && !userNameIsSuspicious) { + return; // User has no deleted content - use the dialog instead + } + if (deletedQuestions + deletedAnswers > 4) { + return; // User has too much deleted content - use the dialog instead + } + // Create Destroy link immediately createDestroyLink(userID); -}) (); +})(); diff --git a/dismiss-banner/dismiss-banner.user.js b/dismiss-banner/dismiss-banner.user.js index 61d9ed7..7f7ced5 100644 --- a/dismiss-banner/dismiss-banner.user.js +++ b/dismiss-banner/dismiss-banner.user.js @@ -16,7 +16,7 @@ (function () { "use strict"; - setTimeout(function() { + setTimeout(function () { $("#net-neutrality-dismiss").click(); }, 100); -})(); \ No newline at end of file +})(); diff --git a/extractScriptMetadata.sh b/extractScriptMetadata.sh new file mode 100644 index 0000000..44049ff --- /dev/null +++ b/extractScriptMetadata.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# Generate