app.js

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