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",...