Search in my fiddles

Change your username in the code !

by timmah

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<div class="row">
    <div class="col-md-12">
        <div class="form-group col-xs-4">
            <input type="email" class="form-control" id="query" placeholder="Type a keyword here" />
        </div>
        <div class="form-group col-xs-4">
            <button class="btn" id="search">Search</button>
            <img id='loader' src='https://supportforums.cisco.com/sites/all/themes/ciscotheque_bootstrap/images/ajax-loader.gif' class="hidden" />
        </div>
    </div>
</div>
<div class="row">
    <div class="col-md-12">
        <div id="results"></div>
        <div id="errorMessage"></div>
    </div>
</div>

CSS

@import url('//maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css');
 .container {
    margin-top: 10px;
}
body {
    margin: 10px;
    font-family: Georgia;
}
.hidden {
    display:none;
}

JavaScript

var searchFiddles = {
    dataReceived: function(data){
        var query = this.query;
        var filtered = _.filter(data.list, function(item){if(item.title.contains(query) || item.description.contains(query)){ return item}});
        
        if(filtered.length > 0){
            filtered.forEach(function(value){
                var newArticle = $("<article>");
                newArticle.append($("<a>",
                                    {
                						href: value.url,
                    					target: "_blank",
                    					text: value.title
                					}));
                newArticle.append($("<p>").text(value.description));
                newArticle.appendTo("#results");
            });
        }
        else{
            this.DOM.$errorMessage.html("<div class='alert alert-info'>No result for '"+query+"'</div>");
        }
    },
    errorHappened: function(){
        this.DOM.$errorMessage.html("<div class='alert alert-danger'>An error happened !</div>");
    },
    resetControls: function(){
        this.DOM.$loader.addClass("hidden");
        this.DOM.$searchButton.attr("disabled", false);
        this.DOM.$queryField.attr("disabled", false);
    },
    launchSearch: function(){
        this.DOM.$loader.removeClass("hidden");
        this.DOM.$results.empty();
        this.DOM.$errorMessage.empty();
        this.DOM.$searchButton.attr("disabled", true);
        this.DOM.$queryField.attr("disabled", true);
        

        $.ajax(
            {
                url: "https://jsfiddle.net/api/user/"+this.username+"/demo/list.json",
                data: {
                    limit:this.limit
                },
                dataType: "JSONP",
                jsonp: "jsoncallback",
                type: "GET"
            }
        )
        .done(this.dataReceived.bind(this))
        .fail(this.errorHappened.bind(this))
        .always(this.resetControls.bind(this));   
    },
    initialize: function(options){
       ...