app.js

  1
  2$(function(){
  3
  4    var model = {
  5        // renomear
  6        dat: [
  7
  8        ],
  9        read_json: function() {
 10
 11            $.ajax({
 12                url: "cards/info.json",
 13                dataType: 'json',
 14                async: false,
 15                success: function(data) {
 16                    $(data["cards"]).each(function(){
 17                        var card_info = $(this)[0];
 18                        model.set_data(card_info);
 19                    });
 20                }
 21            });
 22
 23        },
 24        set_data: function(d) {
 25            model.dat.push(d);
 26        },
 27        get_data: function() {
 28            return model.dat;
 29        },
 30        filter_data: function(conteudo) {
 31            var $d = model.dat;
 32            var $filter = [];
 33            var $c = conteudo.toLowerCase();
 34            $($d).each(function(i){
 35                if(
 36                    $d[i].name.toLowerCase().indexOf($c) >= 0 ||
 37                    $d[i].description.toLowerCase().indexOf($c) >= 0 ||
 38                    $d[i].button_text.toLowerCase().indexOf($c) >= 0
 39                ) {
 40                    $filter.push($d[i]);
 41                }
 42            });
 43
 44            return $filter;
 45        },
 46        init: function() {
 47            model.read_json();
 48        }
 49    };
 50
 51
 52    var octopus = {
 53        init: function() {
 54            model.init();
 55            view.init();
 56            octopus.create_card(model.get_data());
 57        },
 58        create_card: function(d) {
 59            $.each(d, function(i){
 60                view.create_card(d[i].name, d[i].description, d[i].button_text);
 61            });
 62        },
 63        filter_data: function(c) {
 64            var d = model.filter_data(c);
 65            $.each(d, function(i){
 66                view.create_card(d[i].name, d[i].description, d[i].button_text);
 67            });
 68        },
 69        recreate_cards: function() {
 70            octopus.create_card(model.get_data());
 71        }
 72    };
 73
 74    // Renomear
 75    var view = {
 76        init: function() {
 77            this.container = $(".flex-wrapper");
 78            this.search_field = $("#search_field");
 79            view.events();
 80        },
 81        events: function(){
 82            this.search_field.on('input',function(){
 83                var $conteudo = $(this).val();
 84                view.clean_cards();
 85
 86
 87                if($conteudo.length == 0){
 88                    octopus.recreate_cards();
 89                }else {
 90                    octopus.filter_data($conteudo);
 91                }
 92
 93            });
 94        },
 95        create_card: function(name, desc, bt_txt){
 96            var $card = $("<div>").addClass("card");
 97            var $h2 = $("<h2>").addClass("title").text(name);
 98            var $desc = $("<div>").addClass("description").text(desc);
 99            var $button = $("<button>").text(bt_txt);
100
101
102            $card.append($h2).append($desc).append($button);
103            this.container.append($card);
104        },
105        clean_cards: function() {
106            this.container.empty();
107        }
108    };
109
110
111    octopus.init();
112});