JSFiddle - React, Tailwind, and code Playground
by gwwar
HTML
<!-- BoingBoing bbs mute, to add this as a bookmarklet prefix copy the javascript pane and save as a bookmark. Run this once on page load. -->
JavaScript
javascript:(function() {
$(function() {
function format(str, args) {
var keys = Object.keys(args), i;
for (i=0; i<keys.length; i++) {
str = str.replace(new RegExp("\\{" + keys[i] + "\\}", "gi"), args[keys[i]]);
}
return str;
}
$("body").on("click", "article .show-more-actions", function() {
var article = $(this).closest("article");
var userId = article.data("user-id");
var muteButton = $("<button>", {"class":"bbsmutebutton", "data-user-id":userId});
muteButton.append('<i class="fa fa-ban" aria-hidden="true"></i>');
setTimeout(function() {
var actionRow = article.find(".actions");
actionRow.find(".bbsmutebutton").remove();
muteButton.insertBefore(actionRow.find('button:last'));
}, 100);
});
$("body").on("click", ".bbsmutebutton", function(event) {
event.preventDefault();
var userId = $(this).data("user-id");
var index = mute.muteList.indexOf(userId);
if(index > -1) {
mute.removeUser(userId);
} else {
mute.addUser(userId);
}
});
var Mute = function() {
this.muteList = window.localStorage.getItem("muteList") ? JSON.parse(window.localStorage.getItem("muteList")) : [];
this.update();
};
Mute.prototype.addUser = function(id) {
this.muteList.push(id);
this.update();
};
Mute.prototype.removeUser = function(id) {
var index = this.muteList.indexOf(id);
if(index > -1) {
this.muteList.splice(index, 1);
}
this.update();
};
Mute.prototype.update = function() {
var rule, i, rules = "";
window.localStorage.setItem("muteList",...