<!DOCTYPE html>
<html ng-app="vote.app">

<head>
  <meta charset="UTF-8">
  <title>Blog do Gabriel Feitosa> AngularJS: Iniciando com Controladores</title>
  <link rel="stylesheet" href="style.css" />
</head>

<body>
  <h1>
    <a href="http://gabrielfeitosa.com" target="_blank">Blog do Gabriel Feitosa</a>
  </h1>
  <h2>
    AngularJS: Iniciando com Controllers 
  </h2>
  <div ng-controller="VotacaoController as votacao">

    <form>
      <input ng-model="votacao.item.nome" placeholder="Informe um item" />
      <button ng-click="votacao.adicionar()">Add</button>
    </form>

    <br>
    <br>

    <table>
      <tr>
        <th>
          Item
        </th>
        <th>
          Classificação
        </th>
      </tr>
      <tr ng-repeat="i in votacao.items" ng-class-even="'even'">
        <td>{{i.nome}}</td>
        <td>
          <a ng-click="votacao.like($index)">like</a><span class="like"> ({{i.like}})</span>
          <a ng-click="votacao.unlike($index)">unlike</a><span class="unlike"> ({{i.unlike}})</span>
        </td>
      </tr>
    </table>

    <br>
    <br>
    <button ng-click="votacao.reset()">Reset</button>
    <br>
    <br>
    <h2>
      JSON
    </h2>
    <pre ng-class="{pre: votacao.items.length}">
        {{votacao.items | json}}
    </pre>
  </div>

  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
  <script src="vote.app.js"></script>
  <script src="votacao.controller.js"></script>
  
</body>
</html>
/* Put your css in here */

a {
  text-decoration: underline;
  cursor: pointer;
}

table{
  border-collapse: collapse;
  width: 100%;
  text-align: center;
}

table th{
  background-color: silver;
  padding: 10px;
  
}

table td{
  padding: 10px;
}

table td span{
  font-weight: bold;
}

.pre {
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 4px;
}

.even{
  background-color: #D0DEF3;
}

.like{
  color: blue;
}

.unlike{
  color: red;
}

(function(){
  
  // Definindo o módulo e o controlador
  angular.module('vote.app')
  .controller('VotacaoController', VotacaoController);

  // Injeção de dependência
  VotacaoController.$inject = [];

  function VotacaoController() {
    var self = this;
    
    self.items = [];

    //Declarando as funções que serão expostas à view
    self.adicionar = adicionar;
    self.remover = remover;
    self.like = like;
    self.unlike = unlike;
    self.reset = reset;

    prepararNovoItem();

    
    //////////FUNÇÕES/////////////
    // essa função não é acessível através da view
    function prepararNovoItem() {
      self.item = {
        nome: '',
        like: 0,
        unlike: 0
      };
    }
  
    function adicionar() {
      self.items.push(self.item);
      prepararNovoItem();
    }

    function remover(index) {
      self.items.splice(index, 1);
    }

    function like(index) {
      self.items[index].like++;
    }

    function unlike(index) {
      self.items[index].unlike++;
    }

    function reset() {
      self.items = [];
      prepararNovoItem();
    }

  }
  
})();
(function() {

  angular.module('vote.app', []);

})();