JSFiddle - React, Tailwind, and code Playground

by sas_sam

HTML

<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.js"></script>
<script src="http://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js"></script>
<div id="rawResults">Raw results from server : <div class="data"></div></div>
Enter a number between 0 and 10 : <br />
<input type="text" id="typeahead" />

CSS

#rawResults {
    padding: 5px;
    background: #ededed;
    margin-bottom: 5px;
    display: none;
}

JavaScript

function showRawResult(results)
{
    var html = '';
    var $container = $('#rawResults').show();
    
    for (var i = 0; i < results.length; ++i) {
        html += '<li><b>Ref</b>:'+results[i].ref+', <b>Détails: </b>'+results[i].details+'</li>';
    }
    $('.data', $container).html('<ul>'+html+'</ul>');
}

function fakeSearchForFiddle(search) {
    var nbResults = parseInt(search, 10);
    var results = [];
    
    if (isNaN(nbResults)) {
        return results;
    }
    nbResults = Math.max(0, Math.min(10, nbResults));
    for (var i = 1; i <= nbResults; ++i) {
        results.push({
            ref: '#REF'+i, 
            details: 'details ref'+i
        });
    }    
    return JSON.stringify(results);
}

$(function(){
    var $el = $('#typeahead');
    var resultsObj = {};
    var resultsStrings = [];
    var engine = new Bloodhound({
        datumTokenizer: Bloodhound.tokenizers.whitespace, 
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote: {
            url: '/echo/json/',  
            prepare: function(xhr, settings) {
                settings.dataType = 'json';
                settings.type = 'POST';
                settings.data = {json: fakeSearchForFiddle($el.typeahead('val'))};
                return settings;
            }, 
            transform: function(data) {
                showRawResult(data);
                
                resultsObj = {};
                resultsStrings = [];
                
                if ($.isArray(data)) {
                    for (var i = 0; i < data.length; ++i) {
                        resultsObj[data[i].ref] = data[i];
                        resultsStrings.push(data[i].ref);
                    }
                }
                return resultsStrings;
            }
        }
    });
    engine.initialize();
    
    $el.typeahead({
        highlight: false
    }, {
        name: 'main', 
        source: engine.ttAdapter(), 
        templates: {
            empty: '<div...