JSFiddle - React, Tailwind, and code Playground

by wolfpackt99

HTML

<input type='button' value='do (shithead)' id='clkBtn' />
<input type='button' value='do (linkAdded)' id='clkAdded' />
<input type='button' value='do (linkOther)' id='clkOther' />
<input type='button' value='remove added bind' id='removeBtn'/>

<div id='container'>
    <div id='divListener'></div>
</div>

JavaScript

var dialog = function($) {

    var x = {};
    var bindings = $(x);

    var unbindItem = function(tag) {
        console.log('dialog: unbind');
        bindings.unbind(tag);
    };

    var triggerItem = function(tag, data) {
        console.log('dialog: trigger');
        bindings.trigger(tag, data);
    };

    return {
        unbind: unbindItem,
        trigger: triggerItem,
        bindings: bindings
    };
}(jQuery);

addMethod(dialog, "bind", function(tag, data, callback) {
        console.log('dialog: bind 3');
    dialog.bindings.bind(tag, data, callback);
});

addMethod(dialog, "bind", function(tag, callback) {
    console.log('dialog: bind 2');
    dialog.bindings.bind(tag, callback);
});

$(function() {
    var x = {
        First: 'Trent',
        Last: 'Jones'
    };

    var xOb = $({});

    $("#clkBtn").click(function() {
        dialog.trigger('shithead', {
            someVal: true
        });
        console.log('clicked shithead');
    });

    $("#clkAdded").click(function() {
        dialog.trigger('shithead.linkAdded', {
            someVal: 'wow look at me.'
        });
        console.log('clicked Added');
    });

    $("#clkOther").click(function() {
        dialog.trigger('shithead.linkother', {
            someVal: true
        });
        console.log('clicked Added');
    });

    dialog.bind('shithead.linkAdded', {
        msg: 'link'
    }, function(e, data) {
        console.log('custome data: ' + e.data.msg);
        console.log('linkAdded: ' + data.someVal);
    });

    dialog.bind('shithead.linkother', function(e, data) {
        console.log('custome data: ' + e.data);
        console.log('linkother');
    });

    $("#removeBtn").click(function() {
        dialog.unbind('shithead.linkAdded');
    });
});

function addMethod(object, name, fn) {
    console.log('adding method ' + name);
    var old = object[name];
    if (old) object[name] = function() {
        if (fn.length == arguments.length) return fn.apply(this,...