JSFiddle - React, Tailwind, and code Playground

by Andrew Dunai

HTML

<div class="online"></div>
<div><input type="text" class="text" /><input type="button" class="send" value="Send" /></div>
<div class="messages">
</div>

CSS

body {
    font-family: sans-serif;
    color: #333;
}

.message .author, .message .text {
    display: inline-block;
}

.message .author {
    font-weight: bold;
}

JavaScript

var request = function(url, data, callback) {
    $.ajax({
        url: 'http://broadcast.andrewdunai.com' + url,
        data: data,
        jsonp: 'callback',
        dataType: 'jsonp',
        success: callback,
        error: callback,
    });
};

var start_engine = function() {
    request('/events', {}, function(data) {
        $.each(data.messages, function(i, item) {
            $('.messages').prepend('<div class="message"><div class="author">'+item.user_name+'</div>: <div class="text">'+item.text+'</div></div>');
        });
        $('.online').html('Users online: <b>'+data.online+'</b>');
        window.setTimeout(start_engine, 0);
    })
};

$('.send').click(function(){ send_message(); });
$('.text').keydown(function(e) {
    if(e.keyCode == 13) {
        send_message();
    }
});

var send_message = function() {
    if(!$('.text').val()) {
        return;
    }
    request('/post', {text: $('.text').val()}, function(){});
    $('.text').val('');
};

request('/state', {}, function(data) {
    if(!data.authorized) {
        name = '';
        while(!name || name == 'null') {
            name = prompt('Please enter your name:');
        }
        request('/auth', {name: name}, function(data) {
            start_engine();
        });
    } else {
        start_engine();
    }
});