From f83c2724ab91c5573b7d3f586bdb6c17464f163f Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Mon, 18 Aug 2014 15:28:40 -0700
Subject: [PATCH 01/11] Client: Some work related to the teambuilder These were
 done on a plane on a computer, so I didn't bother separating - Added Move
 description - Fixed team select dropdown not updating when last team is
 removed - Added "Build a Team" to dropdown - Highlight selected move rows

---
 client/app/css/teambuilder.styl               | 12 +++++++--
 client/app/js/helpers/challenge_pane.coffee   | 13 +++++++---
 client/app/js/models/battles/pokemon.coffee   |  3 +++
 .../teambuilder/pokemon_edit_view.coffee      | 26 ++++++++++++++-----
 client/views/team_dropdown.jade               | 10 ++++---
 client/views/teambuilder/moves.jade           |  4 +--
 6 files changed, 50 insertions(+), 18 deletions(-)

diff --git a/client/app/css/teambuilder.styl b/client/app/css/teambuilder.styl
index bc3c51eb..ce0e2a36 100644
--- a/client/app/css/teambuilder.styl
+++ b/client/app/css/teambuilder.styl
@@ -313,9 +313,8 @@ $pokemon-list-height = 50px
       opacity .8
       font-weight bold
 
-.teambuilder .table-moves
+.table-moves
   border-collapse separate
-  margin-top 8px
   border solid 1px #DDD
   thead th
     background whitesmoke
@@ -328,8 +327,17 @@ $pokemon-list-height = 50px
       background #f0f0f9
       &:first-child
         text-decoration underline
+    &.selected td
+      background #f0f0f9
+      &:first-child
+        font-weight bold
     img
       margin-bottom 3px
+  .name
+    white-space nowrap
+
+.teambuilder .table-moves
+  margin-top 8px
 
 .teambuilder .display_teams
   position absolute
diff --git a/client/app/js/helpers/challenge_pane.coffee b/client/app/js/helpers/challenge_pane.coffee
index 3cb7ad2e..d1680029 100644
--- a/client/app/js/helpers/challenge_pane.coffee
+++ b/client/app/js/helpers/challenge_pane.coffee
@@ -67,12 +67,14 @@
 
   $wrapper.html(JST['new_battle']({window, defaultClauses}))
   $selectFormat = $wrapper.find(".select-format")
+  
   # Implement finding battle/challenging
   $button.on 'click.challenge', ->
     # Start requesting for notify permission here
     PokeBattle.requestNotifyPermission()
 
     format = $selectFormat.data('format')
+    
     # Toggle state when you press the button.
     if !$button.hasClass('disabled')
       team = getSelectedTeam()
@@ -136,10 +138,9 @@
   # Clicking the team dropdown brings down a team selection menu.
   # Also updates the allTeams collection
   $wrapper.find('.select-team').click (e) ->
-    allTeams = PokeBattle.TeamStore.models
-    if allTeams && allTeams.length > 0
-      html = JST['team_dropdown'](window: window, teams: allTeams)
-      $wrapper.find('.team-dropdown').html(html)
+    allTeams = PokeBattle.TeamStore.models || []
+    html = JST['team_dropdown'](window: window, teams: allTeams)
+    $wrapper.find('.team-dropdown').html(html)
 
   # Selecting a team from the menu
   $wrapper.find('.team-dropdown').on 'click', '.select-team-dropdown-item', (e) ->
@@ -147,6 +148,10 @@
     selectedTeamId = PokeBattle.TeamStore.at(slot).id
     renderCurrentTeam($wrapper)
 
+  # Selecting build team from the menu
+  $wrapper.find('.team-dropdown').on 'click', '.build-team-option', (e) ->
+    PokeBattle.navigation.showTeambuilder()
+
   # Selecting the format changes the dropdown.
   $wrapper.find('.format-dropdown').on 'click', '.select-format-dropdown-item', (e) ->
     $target = $(e.currentTarget)
diff --git a/client/app/js/models/battles/pokemon.coffee b/client/app/js/models/battles/pokemon.coffee
index 8e1ce503..552fff24 100644
--- a/client/app/js/models/battles/pokemon.coffee
+++ b/client/app/js/models/battles/pokemon.coffee
@@ -120,6 +120,9 @@ class @Pokemon extends Backbone.Model
         genders.push("M", "F")
     genders
 
+  hasSelectedMove: (moveName) ->
+    moveName && moveName in @moves
+
   getMovepool: ->
     {SpeciesData, MoveData} = @getGeneration()
     generation = GENERATION_TO_INT[@collection?.generation || DEFAULT_GENERATION]
diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index 3ad8d595..c40fea68 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -180,6 +180,8 @@ class @PokemonEditView extends Backbone.View
 
   blurMoves: (e) =>
     $input = $(e.currentTarget)
+
+    # If preventBlur is set, then perform a refocus (undo the blur)
     if @_preventBlur
       previousScrollPosition = @$el.scrollTop()
       $input.focus()
@@ -192,7 +194,7 @@ class @PokemonEditView extends Backbone.View
 
     # Remove filtering and row selection
     @filterMovesBy("")
-    $(".table-moves .active").removeClass("active")
+    @$(".table-moves .active").removeClass("active")
 
     if $input.val().length == 0
       @recordMoves()
@@ -222,14 +224,19 @@ class @PokemonEditView extends Backbone.View
       @$el.scrollTop(0)
     @recordMoves()
 
-  recordMoves: =>
+  # Returns the moves currently selected in the teambuilder (Not the Pokemon)
+  getSelectedMoves: =>
     movesArray = []
     $moves = @$el.find('.selected_moves')
     $moves.find('.move-button').each ->
       moveName = $(this).find("span").text().trim()
       if moveName != ""
         movesArray.push(moveName)
-    @pokemon.set("moves", movesArray)
+    movesArray
+
+  recordMoves: =>
+    @updateSelectedMoveStyles()
+    @pokemon.set("moves", @getSelectedMoves())
 
   $selectedMove: =>
     $table = @$el.find('.table-moves')
@@ -256,11 +263,11 @@ class @PokemonEditView extends Backbone.View
   buttonify: ($input, moveName) =>
     return false  if moveName not of @moveData
 
-    # The blur event may have been cancelled, so when removing the input also
-    # remove the filter
+    # The blur event may have been prevented by preventBlurMoves
+    # so when removing the input also remove the filter
     if $input.is(":focus")
       @filterMovesBy("")
-      $(".table-moves .active").removeClass("active")
+      @$(".table-moves .active").removeClass("active")
 
     type = @moveData[moveName].type.toLowerCase()
     $input.replaceWith("""
@@ -445,3 +452,10 @@ class @PokemonEditView extends Backbone.View
       $this = $(el)
       moveName = $this.val()
       @buttonify($this, moveName)
+
+    @updateSelectedMoveStyles()
+
+  updateSelectedMoveStyles: =>
+    @$(".table-moves .selected").removeClass("selected")
+    for move in @getSelectedMoves()
+      @$(".table-moves tr[data-move-id='#{move}']").addClass("selected")
\ No newline at end of file
diff --git a/client/views/team_dropdown.jade b/client/views/team_dropdown.jade
index 54815db9..939d00ad 100644
--- a/client/views/team_dropdown.jade
+++ b/client/views/team_dropdown.jade
@@ -1,9 +1,11 @@
-if teams
+if team
+  div= team.getName()
+  != window.JST['team_small']({team: team, window: window})
+else
   each team, i in teams
     li
       a.select-team-dropdown-item(data-slot = i)
         div= team.getName()
         != window.JST['team_small']({team: team, window: window})
-else
-  div= team.getName()
-  != window.JST['team_small']({team: team, window: window})
+  li
+    a.build-team-option Build a Team
diff --git a/client/views/teambuilder/moves.jade b/client/views/teambuilder/moves.jade
index 4f7df0a0..71b3eee2 100644
--- a/client/views/teambuilder/moves.jade
+++ b/client/views/teambuilder/moves.jade
@@ -27,7 +27,7 @@ table.table.table-hover.table-moves
   tbody
     each move in pokemon.getMovepool()
       tr(data-move-id=move.name, data-move-search-id=move.name.replace(/\s+|-/g, ""))
-        td= move.name
+        td.name= move.name
         td
           img(src=window.TypeSprite(move.type), alt=move.type)
         td
@@ -36,4 +36,4 @@ table.table.table-hover.table-moves
         td= (move.power == 0) ? "-" : move.power
         td.acc= (move.accuracy == 0) ? "-" : move.accuracy + '%'
         td.pp= move.pp
-        td.description Description will go here
+        td.description= move.description

From 1a0f6c9e64bccab07cdd524e935b139f4e747f0c Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Wed, 20 Aug 2014 17:34:39 -0400
Subject: [PATCH 02/11] Teambuilder: Minor refactor - introduced
 reverseButtonify

---
 .../teambuilder/pokemon_edit_view.coffee      | 20 ++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index c40fea68..95fc3886 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -245,26 +245,22 @@ class @PokemonEditView extends Backbone.View
 
   clickSelectedMove: (e) =>
     $this = $(e.currentTarget)
-    moveName = $this.find('span').text()
-    $input = $("<input type='text' value='#{moveName}'/>")
-    $this.replaceWith($input)
-    $input.focus().select()
+    moveName = @reverseButtonify($this).focus().select().val()
 
     # Set the current move row to active
     $(".table-moves tr[data-move-id='#{moveName}']").addClass("active")
 
   removeSelectedMove: (e) =>
     $this = $(e.currentTarget).parent()
-    $input = $("<input type='text'/>")
-    $this.replaceWith($input)
-    $input.focus()
+    @reverseButtonify($this).val('').focus()
     e.stopPropagation()
 
   buttonify: ($input, moveName) =>
     return false  if moveName not of @moveData
 
-    # The blur event may have been prevented by preventBlurMoves
-    # so when removing the input also remove the filter
+    # When removing the input also remove the filter
+    # Normally this is done by blurMoves,
+    # but the blur event may have been prevented by preventBlurMoves 
     if $input.is(":focus")
       @filterMovesBy("")
       @$(".table-moves .active").removeClass("active")
@@ -275,6 +271,12 @@ class @PokemonEditView extends Backbone.View
     """)
     return true
 
+  reverseButtonify: ($button) =>
+    moveName = $button.find('span').text()
+    $input = $("<input type='text' value='#{moveName}'/>")
+    $button.replaceWith($input)
+    $input
+
   keydownMoves: (e) =>
     $input = $(e.currentTarget)
     $table = @$el.find('.table-moves')

From a50780e964081c5c18003e3adfc74764023eb6b1 Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Wed, 20 Aug 2014 17:53:00 -0400
Subject: [PATCH 03/11] Teambuilder: Update selected moves style based on
 buttonify

---
 client/app/js/views/teambuilder/pokemon_edit_view.coffee | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index 95fc3886..509c4aa3 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -235,7 +235,6 @@ class @PokemonEditView extends Backbone.View
     movesArray
 
   recordMoves: =>
-    @updateSelectedMoveStyles()
     @pokemon.set("moves", @getSelectedMoves())
 
   $selectedMove: =>
@@ -269,12 +268,16 @@ class @PokemonEditView extends Backbone.View
     $input.replaceWith("""
       <div class="button move-button #{type}"><span>#{moveName}</span><div class='close'>&times;</div></div>
     """)
+
+    @updateSelectedMoveStyles()
+
     return true
 
   reverseButtonify: ($button) =>
     moveName = $button.find('span').text()
     $input = $("<input type='text' value='#{moveName}'/>")
     $button.replaceWith($input)
+    @updateSelectedMoveStyles()
     $input
 
   keydownMoves: (e) =>
@@ -455,8 +458,6 @@ class @PokemonEditView extends Backbone.View
       moveName = $this.val()
       @buttonify($this, moveName)
 
-    @updateSelectedMoveStyles()
-
   updateSelectedMoveStyles: =>
     @$(".table-moves .selected").removeClass("selected")
     for move in @getSelectedMoves()

From 71e16253bf7b040302bc45cd0f9f12bbae1c8f00 Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Sat, 23 Aug 2014 20:12:41 -0400
Subject: [PATCH 04/11] Teambuilder: Mega Forme dropdown for attaching the item

---
 client/app/js/models/battles/pokemon.coffee    | 13 +++++++++++++
 .../views/teambuilder/pokemon_edit_view.coffee | 18 ++++++++++++++++++
 client/views/teambuilder/species.jade          | 11 +++++++++++
 3 files changed, 42 insertions(+)

diff --git a/client/app/js/models/battles/pokemon.coffee b/client/app/js/models/battles/pokemon.coffee
index 552fff24..8118ac43 100644
--- a/client/app/js/models/battles/pokemon.coffee
+++ b/client/app/js/models/battles/pokemon.coffee
@@ -100,6 +100,10 @@ class @Pokemon extends Backbone.Model
   getSelectableFormes: ->
     _(@getFormes()).reject((forme) => @getForme(forme).isBattleOnly)
 
+  # Returns all mega formes
+  getMegaFormes: ->
+    _(@getFormes()).reject((forme) => forme.indexOf('mega') != 0)
+
   getAbilities: ->
     forme = @getForme()
     abilities = _.clone(forme.abilities)
@@ -233,12 +237,21 @@ class @Pokemon extends Backbone.Model
       "Healthy"
 
   canMegaEvolve: ->
+    # TODO: Refactor this to use getPossibleMegaForme()
+    # I didn't feel like making the change and testing it while implementing getPossibleMegaForme()
     item = @getItem()
     return false  if item.type != 'megastone'
     [ species, forme ] = item.mega
     return false  if @get('species') != species || @get('forme') != 'default'
     return true
 
+  getPossibleMegaForme: ->
+    item = @getItem()
+    return null  if item?.type != 'megastone'
+    [ species, forme ] = item.mega
+    return forme  if @get('species') == species && @get('forme') == 'default'
+    return null
+
   # Returns the complete web address to the pokedex link for this pokemon.
   # For this project, this leads to our website at http://www.pokebattle.com,
   # but if you want it to lead somewhere else, edit this function.
diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index 509c4aa3..752c8523 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -33,6 +33,7 @@ class @PokemonEditView extends Backbone.View
     'click .selected_shininess': 'changeShiny'
     'click .selected_happiness': 'changeHappiness'
     'change .selected-forme': 'changeForme'
+    'change .selected-mega': 'changeMega'
     'change .selected_nature': 'changeNature'
     'change .selected_ability': 'changeAbility'
     'change .selected_item': 'changeItem'
@@ -114,6 +115,23 @@ class @PokemonEditView extends Backbone.View
     # Forme changes may have different abilities, so we have to change this.
     @pokemon.set('ability', @pokemon.getAbilities()[0])
 
+  changeMega: (e) =>
+    mega = $(e.currentTarget).val()
+    if mega
+      for itemName, data of @generation.ItemData
+        if data.mega && data.mega[0] == @pokemon.get('species') && data.mega[1] == mega
+          @pokemon.set('item', itemName)
+          console.log(itemName)
+          break
+    else
+      # Converting to non-mega. Remove the megastone if any
+      item = @generation.ItemData[@pokemon.get('item')]
+      if item?.mega?[0] == @pokemon.get('species')
+        @pokemon.set('item', null)
+
+    # update the item dropdown (note: somewhat inefficient as it updates multiple dropdowns)
+    @renderNonStats()
+
   changeNature: (e) =>
     $list = $(e.currentTarget)
     @pokemon.set("nature", $list.val())
diff --git a/client/views/teambuilder/species.jade b/client/views/teambuilder/species.jade
index a29497f2..d8298c8b 100644
--- a/client/views/teambuilder/species.jade
+++ b/client/views/teambuilder/species.jade
@@ -18,3 +18,14 @@ if formes.length > 1
         - var displayedForme = forme[0].toUpperCase() + forme.substr(1)
         - var selected = (forme === pokemon.get('forme'))
         option(value=forme, selected=selected)= displayedForme
+
+- var megaFormes = pokemon.getMegaFormes()
+if megaFormes.length > 0
+  .teambuilder_row
+    .teambuilder_col Mega Forme:
+    select.teambuilder_col.selected-mega
+      option(value="", selected=(pokemon.getPossibleMegaForme() == null)) None
+      each forme in megaFormes
+        - var displayedForme = forme[0].toUpperCase() + forme.substr(1)
+        - var selected = (forme === pokemon.getPossibleMegaForme())
+        option(value=forme, selected=selected)= displayedForme
\ No newline at end of file

From adbccc6ac671fe456c1622a7846eb4ea021465bc Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Mon, 25 Aug 2014 18:37:41 -0400
Subject: [PATCH 05/11] Teambuilder: Re-implement EV locking.

---
 .../views/teambuilder/pokemon_edit_view.coffee   | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index 752c8523..f7538e71 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -43,7 +43,8 @@ class @PokemonEditView extends Backbone.View
     'focus .ev-entry': 'focusEv'
     'blur .ev-entry': 'changeEv'
     'change .ev-entry': 'changeEv'
-    'input .ev-entry[type=range]': 'changeEv'  # fix for firefox
+    'input .ev-entry[type=range]': 'changeEv'
+    'mouseup .ev-entry[type=range]': 'mouseupEVSlider'
     'change .select-hidden-power': 'changeHiddenPower'
     'keydown .selected_moves input': 'keydownMoves'
     'blur .selected_moves input': 'blurMoves'
@@ -87,6 +88,10 @@ class @PokemonEditView extends Backbone.View
   setTeamPBV: (pbv) =>
     @teamPBV = pbv
 
+  # Returns true if Evs are locked to 510 maximum
+  isEVLocked: =>
+    true
+
   changeSpecies: (e) =>
     return  if not @onPokemonChange
     species = $(e.currentTarget).val()
@@ -180,9 +185,18 @@ class @PokemonEditView extends Backbone.View
     value = 252  if value > 252
     value = 0  if isNaN(value) || value < 0
 
+    if @isEVLocked()
+      availableEVs = 510 - @pokemon.getTotalEVs(exclude: stat)
+      value = availableEVs  if value > availableEVs
+
     value = @pokemon.setEv(stat, value)
     $input.val(value)  if not $input.is("[type=range]")
 
+  mouseupEVSlider: (e) =>
+    $slider = $(e.currentTarget)
+    $input = @$(".ev-entry[data-stat=#{$slider.data('stat')}]").not($slider)
+    $slider.val $input.val()
+
   changeHiddenPower: (e) =>
     $input = $(e.currentTarget)
     type = $input.val()

From 74bfad03c32b27e7645e392ec703c2cdfcf3b087 Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Mon, 25 Aug 2014 19:50:08 -0400
Subject: [PATCH 06/11] Teambuilder: Implement EV lock toggling

---
 .../app/js/views/teambuilder/pokemon_edit_view.coffee  | 10 +++++++---
 client/views/teambuilder/pokemon.jade                  |  3 +++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index f7538e71..e2b89bbf 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -45,6 +45,7 @@ class @PokemonEditView extends Backbone.View
     'change .ev-entry': 'changeEv'
     'input .ev-entry[type=range]': 'changeEv'
     'mouseup .ev-entry[type=range]': 'mouseupEVSlider'
+    'click .ev-lock': 'toggleEVLocked'
     'change .select-hidden-power': 'changeHiddenPower'
     'keydown .selected_moves input': 'keydownMoves'
     'blur .selected_moves input': 'blurMoves'
@@ -90,7 +91,10 @@ class @PokemonEditView extends Backbone.View
 
   # Returns true if Evs are locked to 510 maximum
   isEVLocked: =>
-    true
+    $('.ev-lock span:visible').data('locked')
+
+  toggleEVLocked: =>
+    $('.ev-lock span').toggle()
 
   changeSpecies: (e) =>
     return  if not @onPokemonChange
@@ -178,17 +182,17 @@ class @PokemonEditView extends Backbone.View
     $input.val("")  if value == 0
 
   changeEv: (e) =>
-    # todo: make changeIv and changeEv DRY
     $input = $(e.currentTarget)
     stat = $input.data("stat")
     value = parseInt($input.val(), 10)
+    value = 0  if isNaN(value) 
     value = 252  if value > 252
-    value = 0  if isNaN(value) || value < 0
 
     if @isEVLocked()
       availableEVs = 510 - @pokemon.getTotalEVs(exclude: stat)
       value = availableEVs  if value > availableEVs
 
+    value = 0  if value < 0
     value = @pokemon.setEv(stat, value)
     $input.val(value)  if not $input.is("[type=range]")
 
diff --git a/client/views/teambuilder/pokemon.jade b/client/views/teambuilder/pokemon.jade
index 976d9ce2..3a2b8256 100644
--- a/client/views/teambuilder/pokemon.jade
+++ b/client/views/teambuilder/pokemon.jade
@@ -75,6 +75,9 @@ mixin printStat(statName, keyName)
         +printStat("Speed", "speed")
         tr
           td
+            .ev-lock
+              span(data-locked='false').hidden Unlocked
+              span(data-locked='true') Locked
           td(colspan="5")
             .remaining-evs
               | Remaining EVs: 

From afa1201fdf6876f785fa9f17c9ed6c11e60d797f Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Tue, 26 Aug 2014 21:42:33 -0400
Subject: [PATCH 07/11] Added lock/unlock icons, used for EV lock

---
 client/app/css/teambuilder.styl       |   7 +++
 client/vendor/css/icomoon.css         |  22 +++++---
 client/views/teambuilder/pokemon.jade |   4 +-
 icomoon-selection.json                |  78 +++++++++++++++++---------
 public/fonts/icomoon.eot              | Bin 4144 -> 4956 bytes
 public/fonts/icomoon.svg              |  42 +++++++-------
 public/fonts/icomoon.ttf              | Bin 3980 -> 4792 bytes
 public/fonts/icomoon.woff             | Bin 3204 -> 3328 bytes
 8 files changed, 97 insertions(+), 56 deletions(-)

diff --git a/client/app/css/teambuilder.styl b/client/app/css/teambuilder.styl
index ce0e2a36..5dc709f0 100644
--- a/client/app/css/teambuilder.styl
+++ b/client/app/css/teambuilder.styl
@@ -256,6 +256,13 @@ $pokemon-list-height = 50px
   .hidden-power
     float right
 
+  .ev-lock
+    cursor pointer
+    .icon-lock
+      color #444
+    .icon-unlocked
+      color #888 
+
   .remaining-evs-amount.over-limit
     color $negative-color
     font-weight bold
diff --git a/client/vendor/css/icomoon.css b/client/vendor/css/icomoon.css
index 86eb8f29..9080d390 100644
--- a/client/vendor/css/icomoon.css
+++ b/client/vendor/css/icomoon.css
@@ -1,12 +1,12 @@
 @font-face {
-    font-family: 'icomoon';
-    src:url('../fonts/icomoon.eot');
-    src:url('../fonts/icomoon.eot?#iefix') format('embedded-opentype'),
-        url('../fonts/icomoon.ttf') format('truetype'),
-        url('../fonts/icomoon.woff') format('woff'),
-        url('../fonts/icomoon.svg#icomoon') format('svg');
-    font-weight: normal;
-    font-style: normal;
+  font-family: 'icomoon';
+  src:url('../fonts/icomoon.eot?-lv7lfm');
+  src:url('../fonts/icomoon.eot?#iefix-lv7lfm') format('embedded-opentype'),
+    url('../fonts/icomoon.woff?-lv7lfm') format('woff'),
+    url('../fonts/icomoon.ttf?-lv7lfm') format('truetype'),
+    url('../fonts/icomoon.svg?-lv7lfm#icomoon') format('svg');
+  font-weight: normal;
+  font-style: normal;
 }
 
 [class^="icon-"], [class*=" icon-"] {
@@ -24,6 +24,12 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-lock:before {
+  content: "\e60e";
+}
+.icon-unlocked:before {
+  content: "\e60f";
+}
 .icon-home:before {
   content: "\e600";
 }
diff --git a/client/views/teambuilder/pokemon.jade b/client/views/teambuilder/pokemon.jade
index 3a2b8256..dd8ee4e3 100644
--- a/client/views/teambuilder/pokemon.jade
+++ b/client/views/teambuilder/pokemon.jade
@@ -76,8 +76,8 @@ mixin printStat(statName, keyName)
         tr
           td
             .ev-lock
-              span(data-locked='false').hidden Unlocked
-              span(data-locked='true') Locked
+              span(data-locked='true').icon-lock
+              span(data-locked='false').icon-unlocked.hidden
           td(colspan="5")
             .remaining-evs
               | Remaining EVs: 
diff --git a/icomoon-selection.json b/icomoon-selection.json
index 2ffb9fb5..385d1928 100644
--- a/icomoon-selection.json
+++ b/icomoon-selection.json
@@ -1,6 +1,52 @@
 {
 	"IcoMoonType": "selection",
 	"icons": [
+		{
+			"icon": {
+				"paths": [
+					"M592 448h-16v-192c0-105.87-86.13-192-192-192h-128c-105.87 0-192 86.13-192 192v192h-16c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48zM384 896h-128l27.84-139.2c-16.808-11.532-27.84-30.874-27.84-52.8 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64 0 21.926-11.032 41.268-27.84 52.8l27.84 139.2zM448 448h-256v-192c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192z"
+				],
+				"tags": [
+					"lock",
+					"secure",
+					"private",
+					"encrypted"
+				],
+				"grid": 16
+			},
+			"properties": {
+				"id": 137,
+				"order": 2,
+				"prevSize": 32,
+				"code": 58894,
+				"name": "lock",
+				"ligatures": ""
+			},
+			"setIdx": 0,
+			"iconIdx": 137
+		},
+		{
+			"icon": {
+				"paths": [
+					"M768 64h-128c-105.87 0-192 86.13-192 192v192h-400c-26.4 0-48 21.6-48 48v480c0 26.4 21.6 48 48 48h544c26.4 0 48-21.6 48-48v-480c0-26.4-21.6-48-48-48h-16v-192c0-35.29 28.71-64 64-64h128c35.29 0 64 28.71 64 64v192h128v-192c0-105.87-86.13-192-192-192zM384 896h-128l27.84-139.2c-16.808-11.532-27.84-30.874-27.84-52.8 0-35.346 28.654-64 64-64 35.346 0 64 28.654 64 64 0 21.926-11.032 41.268-27.84 52.8l27.84 139.2z"
+				],
+				"tags": [
+					"unlocked",
+					"lock"
+				],
+				"grid": 16
+			},
+			"properties": {
+				"id": 138,
+				"order": 1,
+				"prevSize": 32,
+				"code": 58895,
+				"name": "unlocked",
+				"ligatures": ""
+			},
+			"setIdx": 0,
+			"iconIdx": 138
+		},
 		{
 			"icon": {
 				"paths": [
@@ -400,42 +446,22 @@
 		"name": "icomoon"
 	},
 	"preferences": {
+		"showGlyphs": true,
+		"showQuickUse": true,
 		"fontPref": {
 			"prefix": "icon-",
 			"metadata": {
 				"fontFamily": "icomoon"
 			},
-			"showGlyphs": true,
 			"metrics": {
-				"emSize": 1024,
+				"emSize": 512,
 				"baseline": 6.25,
 				"whitespace": 50
-			},
-			"resetPoint": 58880,
-			"showQuickUse": true,
-			"quickUsageToken": false,
-			"showMetrics": true,
-			"showMetadata": false,
-			"autoHost": true
-		},
-		"imagePref": {
-			"color": 0,
-			"height": 32,
-			"columns": 16,
-			"margin": 16,
-			"png": false,
-			"sprites": true
+			}
 		},
+		"imagePref": {},
 		"historySize": 100,
 		"showCodes": true,
-		"gridSize": 16,
-		"showLiga": false,
-		"showGrid": true,
-		"showGlyphs": true,
-		"showQuickUse": true,
-		"search": "",
-		"quickUsageToken": {
-			"UntitledProject1": "NDU4Yzk3NTA5NzFlOTk2YzgyMDViMDY1ZTlkM2FhNjcjMiMxNDAwNTgyMTM2IyMj"
-		}
+		"search": ""
 	}
 }
\ No newline at end of file
diff --git a/public/fonts/icomoon.eot b/public/fonts/icomoon.eot
index 14a147eff20caea3beaaa619791e1e3f112dbe44..c1cf462ac3a2cf5b0a113d192367cd3169506aa0 100644
GIT binary patch
literal 4956
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
K-+3gkd;2dn`DJtf

literal 4144
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

diff --git a/public/fonts/icomoon.svg b/public/fonts/icomoon.svg
index b85c686f..a152b8a4 100644
--- a/public/fonts/icomoon.svg
+++ b/public/fonts/icomoon.svg
@@ -3,24 +3,26 @@
 <svg xmlns="http://www.w3.org/2000/svg">
 <metadata>Generated by IcoMoon</metadata>
 <defs>
-<font id="icomoon" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="960" descent="-64" />
-<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
-<glyph unicode="&#xe600;" d="M1024 352l-192 192v288h-128v-160l-192 192-512-512v-32h128v-320h320v192h128v-192h320v320h128z" />
-<glyph unicode="&#xe601;" d="M384 320l128 64 448 448-64 64-448-448-64-128zM289.3 92.902c-31.632 66.728-65.666 100.762-132.396 132.394l99.096 272.792 128 77.912 384 384h-192l-384-384-192-640 640 192 384 384v192l-384-384-77.912-128z" />
-<glyph unicode="&#xe602;" d="M64 768h896v-192h-896zM64 512h896v-192h-896zM64 256h896v-192h-896z" />
-<glyph unicode="&#xe603;" d="M874.040 810.038c96.702-96.704 149.96-225.28 149.96-362.040s-53.258-265.334-149.96-362.038c-96.706-96.702-225.28-149.96-362.040-149.96-136.76 0-265.334 53.258-362.040 149.96-96.702 96.704-149.96 225.278-149.96 362.038 0 136.76 53.254 265.336 149.96 362.040 96.706 96.704 225.28 149.962 362.040 149.962 136.76 0 265.334-53.258 362.040-149.962zM828.784 131.214c63.058 63.060 104.986 141.608 122.272 227.062-13.474-19.836-26.362-27.194-34.344 17.206-8.22 72.39-74.708 26.148-116.516 51.86-44.004-29.658-142.906 57.662-126.098-40.824 25.934-44.422 140.008 59.45 83.148-34.542-36.274-65.616-132.642-210.932-120.106-286.258 1.582-109.744-112.134-22.884-151.314 13.52-26.356 72.92-8.982 200.374-77.898 236.086-74.802 3.248-139.004 10.046-167.994 93.67-17.446 59.828 18.564 148.894 82.678 162.644 93.85 58.966 127.374-69.054 215.39-71.434 27.328 28.594 101.816 37.686 107.992 69.75-57.75 10.19 73.268 48.558-5.528 70.382-43.47-5.112-71.478-45.074-48.368-78.958-84.238-19.642-86.936 121.904-167.91 77.258-2.058-70.59-132.222-22.886-45.036-8.572 29.956 13.088-48.86 51.016-6.28 44.124 20.916 1.136 91.332 25.812 72.276 42.402 39.21 24.34 72.16-58.29 110.538 1.882 27.708 46.266-11.62 54.808-46.35 31.356-19.58 21.924 34.57 69.276 82.332 89.738 15.918 6.82 31.122 10.536 42.746 9.484 24.058-27.792 68.55-32.606 70.878 3.342-59.582 28.534-125.276 43.608-193.292 43.608-97.622 0-190.47-31.024-267.308-88.39 20.65-9.46 32.372-21.238 12.478-36.296-15.456-46.054-78.17-107.876-133.224-99.124-28.586-49.296-47.412-103.606-55.46-160.528 46.112-15.256 56.744-45.45 46.836-55.55-23.496-20.488-37.936-49.53-45.376-81.322 15.010-91.836 58.172-176.476 125.27-243.576 84.616-84.614 197.118-131.214 316.784-131.214 119.664 0 232.168 46.6 316.784 131.214z" />
-<glyph unicode="&#xe604;" d="M839.322 663.584c77.644-55.030 141.37-129.092 184.678-215.584-95.122-189.958-288.686-320-512-320-62.566 0-122.792 10.212-179.178 29.084l77.956 77.956c33.058-7.3 66.972-11.040 101.222-11.040 89.558 0 176.854 25.486 252.446 73.704 60.162 38.376 111.144 89.776 149.436 150.298-37.052 58.566-86.014 108.55-143.65 146.494l69.090 69.088zM512 262c-22.724 0-44.752 2.976-65.728 8.534l313.186 313.184c5.562-20.972 8.542-42.994 8.542-65.718 0-141.384-114.616-256-256-256zM960 960h-53.738l-219.612-219.612c-55.076 17.924-113.754 27.612-174.65 27.612-223.318 0-416.882-130.042-512-320 42.658-85.192 105.128-158.308 181.194-213.068l-181.194-181.194v-53.738h53.738l906.262 906.262v53.738zM416 646c48.044 0 87.846-35.294 94.892-81.37l-109.524-109.524c-46.074 7.048-81.368 46.85-81.368 94.894 0 53.020 42.98 96 96 96zM110.116 448c38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.858 7.3-9.958-27.328-15.408-56.822-15.408-87.596 0-58.524 19.65-112.448 52.698-155.562l-58.55-58.55c-56.072 37.642-103.754 86.772-140.032 144.112z" />
-<glyph unicode="&#xe605;" d="M1024 601.844c0-86.362-37.218-164.030-96.49-217.844h0.49l-320-320c-32-32-64-64-96-64s-64 32-96 64l-319.51 320c-59.272 53.814-96.49 131.482-96.49 217.844 0 162.458 131.698 294.156 294.156 294.156 86.362 0 164.030-37.218 217.844-96.49 53.814 59.272 131.482 96.49 217.844 96.49 162.456 0 294.156-131.698 294.156-294.156z" />
-<glyph unicode="&#xe606;" d="M1024 601.844c0-86.362-37.218-164.030-96.49-217.844h0.49l-320-320c-32-32-64-64-96-64s-64 32-96 64l-319.51 320c-59.272 53.814-96.49 131.482-96.49 217.844 0 162.458 131.698 294.156 294.156 294.156 55.45 0 107.302-15.364 151.572-42.036l-93.728-149.964 224-128-128-320 352 384-224 128 78.892 118.34c23.932 6.288 49.046 9.66 74.952 9.66 162.456 0 294.156-131.698 294.156-294.156z" />
-<glyph unicode="&#xe607;" d="M832 704h-192v64l-192 192h-448v-768h384v-256h640v576l-192 192zM832 613.49l101.49-101.49h-101.49v101.49zM448 869.49l101.49-101.49h-101.49v101.49zM64 896h320v-192h192v-448h-512v640zM960 0h-512v192h192v448h128v-192h192v-448z" />
-<glyph unicode="&#xe608;" d="M448 384h128v256h192l-256 256-256-256h192zM640 528v-98.712l293.066-109.288-421.066-157.018-421.066 157.018 293.066 109.288v98.712l-384-144v-256l512-192 512 192v256z" />
-<glyph unicode="&#xe609;" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384 0-212.078 171.922-384 384-384 95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" />
-<glyph unicode="&#xe60a;" d="M800 832h-576c-53.020 0-96-42.98-96-96v-32h768v32c0 53.020-42.98 96-96 96zM632.32 896l14.116-101h-268.872l14.114 101h240.642zM640 960h-256c-26.4 0-50.99-21.392-54.642-47.538l-18.714-133.924c-3.654-26.146 14.956-47.538 41.356-47.538h320c26.4 0 45.010 21.392 41.358 47.538l-18.714 133.924c-3.654 26.146-28.244 47.538-54.644 47.538v0zM816 640h-608c-35.2 0-61.392-28.682-58.206-63.738l52.412-576.526c3.186-35.054 34.594-63.736 69.794-63.736h480c35.2 0 66.608 28.682 69.794 63.736l52.41 576.526c3.188 35.056-23.004 63.738-58.204 63.738zM384 64h-96l-32 448h128v-448zM576 64h-128v448h128v-448zM736 64h-96v448h128l-32-448z" />
-<glyph unicode="&#xe60b;" d="M512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156 78.572-78.572 183.038-121.844 294.156-121.844 111.118 0 215.584 43.272 294.156 121.844 78.572 78.572 121.844 183.038 121.844 294.156 0 111.118-43.272 215.584-121.844 294.156-78.572 78.572-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512 0 282.77 229.23 512 512 512zM448 256h128v-128h-128zM448 768h128v-384h-128z" />
-<glyph unicode="&#xe60c;" d="M512 960c-278.748 0-505.458-222.762-511.848-499.974 5.92 241.864 189.832 435.974 415.848 435.974 229.75 0 416-200.576 416-448 0-53.020 42.98-96 96-96 53.020 0 96 42.98 96 96 0 282.77-229.23 512-512 512zM512-64c278.748 0 505.458 222.762 511.848 499.974-5.92-241.864-189.832-435.974-415.848-435.974-229.75 0-416 200.576-416 448 0 53.020-42.98 96-96 96-53.020 0-96-42.98-96-96 0-282.77 229.23-512 512-512z" />
-<glyph unicode="&#xe60d;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM416 128l-212 276 94 98 118-150 370 302 46-46-416-480z" />
-<glyph unicode="&#xe6fd;" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" />
-<glyph unicode="&#xe701;" d="M0 544v-192c0-17.672 14.328-32 32-32h960c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32h-960c-17.672 0-32-14.328-32-32z" />
+<font id="icomoon" horiz-adv-x="512">
+<font-face units-per-em="512" ascent="480" descent="-32" />
+<missing-glyph horiz-adv-x="512" />
+<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
+<glyph unicode="&#xe600;" d="M512 176l-96 96v144h-64v-80l-96 96-256-256v-16h64v-160h160v96h64v-96h160v160h64z" />
+<glyph unicode="&#xe601;" d="M192 160l64 32 224 224-32 32-224-224-32-64zM144.65 46.451c-15.816 33.364-32.833 50.381-66.198 66.197l49.548 136.396 64 38.956 192 192h-96l-192-192-96-320 320 96 192 192v96l-192-192-38.956-64z" />
+<glyph unicode="&#xe602;" d="M32 384h448v-96h-448zM32 256h448v-96h-448zM32 128h448v-96h-448z" />
+<glyph unicode="&#xe603;" d="M437.020 405.019c48.351-48.352 74.98-112.64 74.98-181.020s-26.629-132.667-74.98-181.019c-48.353-48.351-112.64-74.98-181.020-74.98s-132.667 26.629-181.020 74.98c-48.351 48.352-74.98 112.639-74.98 181.019s26.627 132.668 74.98 181.020c48.353 48.352 112.64 74.981 181.020 74.981s132.667-26.629 181.020-74.981zM414.392 65.607c31.529 31.53 52.493 70.804 61.136 113.531-6.737-9.918-13.181-13.597-17.172 8.603-4.11 36.195-37.354 13.074-58.258 25.93-22.002-14.829-71.453 28.831-63.049-20.412 12.967-22.211 70.004 29.725 41.574-17.271-18.137-32.808-66.321-105.466-60.053-143.129 0.791-54.872-56.067-11.442-75.657 6.76-13.178 36.46-4.491 100.187-38.949 118.043-37.401 1.624-69.502 5.023-83.997 46.835-8.723 29.914 9.282 74.447 41.339 81.322 46.925 29.483 63.687-34.527 107.695-35.717 13.664 14.297 50.908 18.843 53.996 34.875-28.875 5.095 36.634 24.279-2.764 35.191-21.735-2.556-35.739-22.537-24.184-39.479-42.119-9.821-43.468 60.952-83.955 38.629-1.029-35.295-66.111-11.443-22.518-4.286 14.978 6.544-24.43 25.508-3.14 22.062 10.458 0.568 45.666 12.906 36.138 21.201 19.605 12.17 36.080-29.145 55.269 0.941 13.854 23.133-5.81 27.404-23.175 15.678-9.79 10.962 17.285 34.638 41.166 44.869 7.959 3.41 15.561 5.268 21.373 4.742 12.029-13.896 34.275-16.303 35.439 1.671-29.791 14.267-62.638 21.804-96.646 21.804-48.811 0-95.235-15.512-133.654-44.195 10.325-4.73 16.186-10.619 6.239-18.148-7.728-23.027-39.085-53.938-66.612-49.562-14.293-24.648-23.706-51.803-27.73-80.264 23.056-7.628 28.372-22.725 23.418-27.775-11.748-10.244-18.968-24.765-22.688-40.661 7.505-45.918 29.086-88.238 62.635-121.788 42.308-42.307 98.559-65.607 158.392-65.607s116.084 23.3 158.392 65.607z" />
+<glyph unicode="&#xe604;" d="M419.661 331.792c38.822-27.515 70.685-64.546 92.339-107.792-47.561-94.979-144.343-160-256-160-31.283 0-61.396 5.106-89.589 14.542l38.978 38.978c16.529-3.65 33.486-5.52 50.611-5.52 44.779 0 88.427 12.743 126.223 36.852 30.081 19.188 55.572 44.888 74.718 75.149-18.526 29.283-43.007 54.275-71.825 73.247l34.545 34.544zM256 131c-11.362 0-22.376 1.488-32.864 4.267l156.593 156.592c2.781-10.486 4.271-21.497 4.271-32.859 0-70.692-57.308-128-128-128zM480 480h-26.869l-109.806-109.806c-27.538 8.962-56.877 13.806-87.325 13.806-111.659 0-208.441-65.021-256-160 21.329-42.596 52.564-79.154 90.597-106.534l-90.597-90.597v-26.869h26.869l453.131 453.131v26.869zM208 323c24.022 0 43.923-17.647 47.446-40.685l-54.762-54.762c-23.037 3.524-40.684 23.425-40.684 47.447 0 26.51 21.49 48 48 48zM55.058 224c19.146 30.262 44.637 55.962 74.717 75.148 1.959 1.25 3.938 2.461 5.929 3.65-4.979-13.664-7.704-28.411-7.704-43.798 0-29.262 9.825-56.224 26.349-77.781l-29.275-29.275c-28.036 18.821-51.877 43.386-70.016 72.056z" />
+<glyph unicode="&#xe605;" d="M512 300.922c0-43.181-18.609-82.015-48.245-108.922h0.245l-160-160c-16-16-32-32-48-32s-32 16-48 32l-159.755 160c-29.636 26.907-48.245 65.741-48.245 108.922 0 81.229 65.849 147.078 147.078 147.078 43.181 0 82.015-18.609 108.922-48.245 26.907 29.636 65.741 48.245 108.922 48.245 81.228 0 147.078-65.849 147.078-147.078z" />
+<glyph unicode="&#xe606;" d="M512 300.922c0-43.181-18.609-82.015-48.245-108.922h0.245l-160-160c-16-16-32-32-48-32s-32 16-48 32l-159.755 160c-29.636 26.907-48.245 65.741-48.245 108.922 0 81.229 65.849 147.078 147.078 147.078 27.725 0 53.651-7.682 75.786-21.018l-46.864-74.982 112-64-64-160 176 192-112 64 39.446 59.17c11.966 3.144 24.523 4.83 37.476 4.83 81.228 0 147.078-65.849 147.078-147.078z" />
+<glyph unicode="&#xe607;" d="M416 352h-96v32l-96 96h-224v-384h192v-128h320v288l-96 96zM416 306.745l50.745-50.745h-50.745v50.745zM224 434.745l50.745-50.745h-50.745v50.745zM32 448h160v-96h96v-224h-256v320zM480 0h-256v96h96v224h64v-96h96v-224z" />
+<glyph unicode="&#xe608;" d="M224 192h64v128h96l-128 128-128-128h96zM320 264v-49.356l146.533-54.644-210.533-78.509-210.533 78.509 146.533 54.644v49.356l-192-72v-128l256-96 256 96v128z" />
+<glyph unicode="&#xe609;" d="M496.131 44.302l-121.276 103.147c-12.537 11.283-25.945 16.463-36.776 15.963 28.628 33.534 45.921 77.039 45.921 124.588 0 106.039-85.961 192-192 192s-192-85.961-192-192c0-106.039 85.961-192 192-192 47.549 0 91.054 17.293 124.588 45.922-0.5-10.831 4.68-24.239 15.963-36.776l103.147-121.276c17.661-19.623 46.511-21.277 64.11-3.678s15.946 46.449-3.677 64.11zM192 160c-70.692 0-128 57.308-128 128s57.308 128 128 128 128-57.308 128-128-57.307-128-128-128z" />
+<glyph unicode="&#xe60a;" d="M400 416h-288c-26.51 0-48-21.49-48-48v-16h384v16c0 26.51-21.49 48-48 48zM316.16 448l7.058-50.5h-134.436l7.057 50.5h120.321zM320 480h-128c-13.2 0-25.495-10.696-27.321-23.769l-9.357-66.962c-1.827-13.073 7.478-23.769 20.678-23.769h160c13.2 0 22.505 10.696 20.679 23.769l-9.357 66.962c-1.827 13.073-14.122 23.769-27.322 23.769v0zM408 320h-304c-17.6 0-30.696-14.341-29.103-31.869l26.206-288.263c1.593-17.527 17.297-31.868 34.897-31.868h240c17.6 0 33.304 14.341 34.897 31.868l26.205 288.263c1.594 17.528-11.502 31.869-29.102 31.869zM192 32h-48l-16 224h64v-224zM288 32h-64v224h64v-224zM368 32h-48v224h64l-16-224z" />
+<glyph unicode="&#xe60b;" d="M256 432c-55.559 0-107.792-21.636-147.078-60.922s-60.922-91.519-60.922-147.078c0-55.559 21.636-107.792 60.922-147.078s91.519-60.922 147.078-60.922c55.559 0 107.792 21.636 147.078 60.922s60.922 91.519 60.922 147.078c0 55.559-21.636 107.792-60.922 147.078s-91.519 60.922-147.078 60.922zM256 480v0c141.385 0 256-114.615 256-256s-114.615-256-256-256c-141.385 0-256 114.615-256 256s114.615 256 256 256zM224 128h64v-64h-64zM224 384h64v-192h-64z" />
+<glyph unicode="&#xe60c;" d="M256 480c-139.374 0-252.729-111.381-255.924-249.987 2.96 120.932 94.916 217.987 207.924 217.987 114.875 0 208-100.288 208-224 0-26.51 21.49-48 48-48s48 21.49 48 48c0 141.385-114.615 256-256 256zM256-32c139.374 0 252.729 111.381 255.924 249.987-2.96-120.932-94.916-217.987-207.924-217.987-114.875 0-208 100.288-208 224 0 26.51-21.49 48-48 48s-48-21.49-48-48c0-141.385 114.615-256 256-256z" />
+<glyph unicode="&#xe60d;" d="M256 480c-141.385 0-256-114.615-256-256s114.615-256 256-256 256 114.615 256 256-114.615 256-256 256zM208 64l-106 138 47 49 59-75 185 151 23-23-208-240z" />
+<glyph unicode="&#xe60e;" d="M296 256h-8v96c0 52.935-43.065 96-96 96h-64c-52.935 0-96-43.065-96-96v-96h-8c-13.2 0-24-10.8-24-24v-240c0-13.2 10.8-24 24-24h272c13.2 0 24 10.8 24 24v240c0 13.2-10.8 24-24 24zM192 32h-64l13.92 69.6c-8.404 5.766-13.92 15.437-13.92 26.4 0 17.673 14.327 32 32 32s32-14.327 32-32c0-10.963-5.516-20.634-13.92-26.4l13.92-69.6zM224 256h-128v96c0 17.645 14.355 32 32 32h64c17.645 0 32-14.355 32-32v-96z" />
+<glyph unicode="&#xe60f;" d="M384 448h-64c-52.935 0-96-43.065-96-96v-96h-200c-13.2 0-24-10.8-24-24v-240c0-13.2 10.8-24 24-24h272c13.2 0 24 10.8 24 24v240c0 13.2-10.8 24-24 24h-8v96c0 17.645 14.355 32 32 32h64c17.645 0 32-14.355 32-32v-96h64v96c0 52.935-43.065 96-96 96zM192 32h-64l13.92 69.6c-8.404 5.766-13.92 15.437-13.92 26.4 0 17.673 14.327 32 32 32s32-14.327 32-32c0-10.963-5.516-20.634-13.92-26.4l13.92-69.6z" />
+<glyph unicode="&#xe6fd;" d="M507.331 68.67c-0.002 0.002-0.004 0.004-0.006 0.005l-155.322 155.325 155.322 155.325c0.002 0.002 0.004 0.003 0.006 0.005 1.672 1.673 2.881 3.627 3.656 5.708 2.123 5.688 0.912 12.341-3.662 16.915l-73.373 73.373c-4.574 4.573-11.225 5.783-16.914 3.66-2.080-0.775-4.035-1.984-5.709-3.655 0-0.002-0.002-0.003-0.004-0.005l-155.324-155.326-155.324 155.325c-0.002 0.002-0.003 0.003-0.005 0.005-1.673 1.671-3.627 2.88-5.707 3.655-5.69 2.124-12.341 0.913-16.915-3.66l-73.374-73.374c-4.574-4.574-5.784-11.226-3.661-16.914 0.776-2.080 1.985-4.036 3.656-5.708 0.002-0.001 0.003-0.003 0.005-0.005l155.325-155.324-155.325-155.326c-0.001-0.002-0.003-0.003-0.004-0.005-1.671-1.673-2.88-3.627-3.657-5.707-2.124-5.688-0.913-12.341 3.661-16.915l73.374-73.373c4.575-4.574 11.226-5.784 16.915-3.661 2.080 0.776 4.035 1.985 5.708 3.656 0.001 0.002 0.003 0.003 0.005 0.005l155.324 155.325 155.324-155.325c0.002-0.001 0.004-0.003 0.006-0.004 1.674-1.672 3.627-2.881 5.707-3.657 5.689-2.123 12.342-0.913 16.914 3.661l73.373 73.374c4.574 4.574 5.785 11.227 3.662 16.915-0.776 2.080-1.985 4.034-3.657 5.707z" />
+<glyph unicode="&#xe701;" d="M0 272v-96c0-8.836 7.164-16 16-16h480c8.836 0 16 7.164 16 16v96c0 8.836-7.164 16-16 16h-480c-8.836 0-16-7.164-16-16z" />
 </font></defs></svg>
\ No newline at end of file
diff --git a/public/fonts/icomoon.ttf b/public/fonts/icomoon.ttf
index c66977a2b8c12901ba4fdf0f0beb64ab05dc230c..d894544cd1f1f923ab49668e08b90a375c21c904 100644
GIT binary patch
literal 4792
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
CL{udJ

literal 3980
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

diff --git a/public/fonts/icomoon.woff b/public/fonts/icomoon.woff
index 58b88033a553a93d2994dfa2e4d204ce6c443086..d43499ec9e29b339a1bc3a6147fb164b899c0deb 100644
GIT binary patch
literal 3328
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

literal 3204
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


From e09cf30a677b3ea577d6746e2066a071d9c21877 Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Wed, 27 Aug 2014 21:56:04 -0400
Subject: [PATCH 08/11] Teambuilder: Move EV lock location

---
 client/app/css/teambuilder.styl       | 2 ++
 client/views/teambuilder/pokemon.jade | 6 +++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/client/app/css/teambuilder.styl b/client/app/css/teambuilder.styl
index 5dc709f0..83f3298e 100644
--- a/client/app/css/teambuilder.styl
+++ b/client/app/css/teambuilder.styl
@@ -257,6 +257,8 @@ $pokemon-list-height = 50px
     float right
 
   .ev-lock
+    float left
+    margin-right 5px
     cursor pointer
     .icon-lock
       color #444
diff --git a/client/views/teambuilder/pokemon.jade b/client/views/teambuilder/pokemon.jade
index dd8ee4e3..364fe4b7 100644
--- a/client/views/teambuilder/pokemon.jade
+++ b/client/views/teambuilder/pokemon.jade
@@ -75,11 +75,11 @@ mixin printStat(statName, keyName)
         +printStat("Speed", "speed")
         tr
           td
-            .ev-lock
-              span(data-locked='true').icon-lock
-              span(data-locked='false').icon-unlocked.hidden
           td(colspan="5")
             .remaining-evs
+              .ev-lock
+                span(data-locked='true').icon-lock
+                span(data-locked='false').icon-unlocked.hidden
               | Remaining EVs: 
               span.remaining-evs-amount
             .hidden-power

From e3f891752437ccef3125eabe4a3b94e12d93039b Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Thu, 28 Aug 2014 21:57:17 -0400
Subject: [PATCH 09/11] Teambuilder: Clicking a selected move in the table now
 removes it

---
 .../teambuilder/pokemon_edit_view.coffee      | 41 +++++++++++++------
 client/views/teambuilder/moves.jade           |  8 ++--
 2 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index e2b89bbf..ed28be19 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -240,13 +240,19 @@ class @PokemonEditView extends Backbone.View
   clickMoveName: (e) =>
     $this = $(e.currentTarget)
     moveName = $this.data('move-id')
-    $moves = @$el.find('.selected_moves')
-    $input = $moves.find('input:focus').first()
-    $input = $moves.find('input').first()  if $input.length == 0
-    return  if $input.length == 0
-    @insertMove($input, moveName)
 
-  insertMove: ($input, moveName) =>
+    if moveName in @getSelectedMoves()
+      @removeMove(moveName)
+    else
+      @insertMove(moveName)
+
+  insertMove: (moveName, $input) =>
+    if !$input
+      $moves = @$el.find('.selected_moves')
+      $input = $moves.find('input:focus').first()
+      $input = $moves.find('input').first()  if $input.length == 0
+      return  if $input.length == 0
+
     currentScrollPosition = @$el.scrollTop()
 
     @preventBlurMoves()
@@ -260,14 +266,25 @@ class @PokemonEditView extends Backbone.View
       @$el.scrollTop(0)
     @recordMoves()
 
+  removeMove: (moveName) =>
+    indices = (i for move, i in @getAllSelectedMoves() when move == moveName)
+
+    for idx in indices
+      $input = @$('.selected_moves .move-slot').eq(idx).children()
+      $input = @reverseButtonify($input)  if $input.is('.move-button')
+      $input.val("")
+
   # Returns the moves currently selected in the teambuilder (Not the Pokemon)
   getSelectedMoves: =>
+    _(@getAllSelectedMoves()).compact()
+
+  # Returns the contents of each selected move, even if that selected move is null
+  getAllSelectedMoves: =>
     movesArray = []
-    $moves = @$el.find('.selected_moves')
-    $moves.find('.move-button').each ->
-      moveName = $(this).find("span").text().trim()
-      if moveName != ""
-        movesArray.push(moveName)
+    $moves = @$el.find('.selected_moves .move-slot')
+    $moves.each ->
+      moveName = $(this).find(".move-button span").text().trim()
+      movesArray.push(moveName)
     movesArray
 
   recordMoves: =>
@@ -323,7 +340,7 @@ class @PokemonEditView extends Backbone.View
     switch e.which
       when 13  # [Enter]; we're selecting the active move.
         $activeMove = @$selectedMove()
-        $activeMove.click()
+        @insertMove($activeMove.data('move-id'))
       when 38  # [Up arrow]; selects move above
         $activeMove = $allMoves.filter('.active').first()
         $prevMove = $activeMove.prevAll(":visible").first()
diff --git a/client/views/teambuilder/moves.jade b/client/views/teambuilder/moves.jade
index 71b3eee2..19e575f6 100644
--- a/client/views/teambuilder/moves.jade
+++ b/client/views/teambuilder/moves.jade
@@ -5,13 +5,13 @@
       ="View " + pokemon.get('species') + " Movesets"
 
   .row-fluid
-    .span3
+    .span3.move-slot
       input(type="text", value=pokemon.get("moves")[0])
-    .span3
+    .span3.move-slot
       input(type="text", value=pokemon.get("moves")[1])
-    .span3
+    .span3.move-slot
       input(type="text", value=pokemon.get("moves")[2])
-    .span3
+    .span3.move-slot
       input(type="text", value=pokemon.get("moves")[3])
 
 table.table.table-hover.table-moves

From e0585741d8604a18e91aa015092367efd9667d6a Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Fri, 29 Aug 2014 20:47:03 -0400
Subject: [PATCH 10/11] Teambuilder: Collapse selected moves on insert/remove

---
 .../teambuilder/pokemon_edit_view.coffee      | 43 ++++++++++++++++---
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
index ed28be19..da7e92db 100644
--- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee
+++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee
@@ -264,6 +264,8 @@ class @PokemonEditView extends Backbone.View
       @$el.scrollTop(currentScrollPosition)
     else
       @$el.scrollTop(0)
+
+    @collapseSelectedMoves()
     @recordMoves()
 
   removeMove: (moveName) =>
@@ -274,11 +276,14 @@ class @PokemonEditView extends Backbone.View
       $input = @reverseButtonify($input)  if $input.is('.move-button')
       $input.val("")
 
+    @collapseSelectedMoves()
+
   # Returns the moves currently selected in the teambuilder (Not the Pokemon)
   getSelectedMoves: =>
     _(@getAllSelectedMoves()).compact()
 
   # Returns the contents of each selected move, even if that selected move is null
+  # Non-buttonified moves are considered null
   getAllSelectedMoves: =>
     movesArray = []
     $moves = @$el.find('.selected_moves .move-slot')
@@ -305,6 +310,13 @@ class @PokemonEditView extends Backbone.View
   removeSelectedMove: (e) =>
     $this = $(e.currentTarget).parent()
     @reverseButtonify($this).val('').focus()
+
+    @collapseSelectedMoves()
+
+    # Nothing selected? Focus something
+    if @$('.selected_moves input:focus').length == 0
+      @$('.selected_moves input').first().focus()
+
     e.stopPropagation()
 
   buttonify: ($input, moveName) =>
@@ -326,12 +338,14 @@ class @PokemonEditView extends Backbone.View
 
     return true
 
-  reverseButtonify: ($button) =>
-    moveName = $button.find('span').text()
-    $input = $("<input type='text' value='#{moveName}'/>")
-    $button.replaceWith($input)
-    @updateSelectedMoveStyles()
-    $input
+  reverseButtonify: ($buttons) =>
+    $inputs = $buttons.replaceWith (i, element) =>
+      $button = $(element)
+      moveName = $button.find('span').text()
+      $("<input type='text' value='#{moveName}'/>")
+    
+    @updateSelectedMoveStyles()  
+    $inputs
 
   keydownMoves: (e) =>
     $input = $(e.currentTarget)
@@ -511,6 +525,23 @@ class @PokemonEditView extends Backbone.View
       moveName = $this.val()
       @buttonify($this, moveName)
 
+  # Rerenders the list of selected moves without rerendering the entire moves table
+  collapseSelectedMoves: =>
+    $selectedMoves = @$('.selected_moves')
+
+    # First, check if an input is focused and empty. IF it is, we have to refocus
+    $focused = $selectedMoves.find('input:focus')
+    refocus = true  if $focused.length != 0 && $focused.val() == ''
+
+    $moveSlots = $selectedMoves.find('.move-slot')
+    $emptySlots = $moveSlots.filter -> 
+      input = $(this).find('input')
+      input.length > 0 && input.val() == ''
+
+    $selectedMoves.find('.row-fluid').append($emptySlots.detach())
+
+    $selectedMoves.find('input').first().focus()  if refocus
+
   updateSelectedMoveStyles: =>
     @$(".table-moves .selected").removeClass("selected")
     for move in @getSelectedMoves()

From 9f347a734f4496ee0accb2dd5576ad89b3503d8b Mon Sep 17 00:00:00 2001
From: Carlos Fernandez <cfern1990@gmail.com>
Date: Fri, 29 Aug 2014 21:07:38 -0400
Subject: [PATCH 11/11] Client: Redirect to teambuilder if Find Battle is
 clicked with no teams

---
 client/app/js/helpers/challenge_pane.coffee | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/client/app/js/helpers/challenge_pane.coffee b/client/app/js/helpers/challenge_pane.coffee
index d1680029..dd40cbae 100644
--- a/client/app/js/helpers/challenge_pane.coffee
+++ b/client/app/js/helpers/challenge_pane.coffee
@@ -80,6 +80,7 @@
       team = getSelectedTeam()
       unless team
         alert("You need to create a team using the Teambuilder before you can battle.")
+        PokeBattle.navigation.showTeambuilder()
         return
 
       disableButtons()
@@ -102,6 +103,7 @@
     team = getSelectedTeam()
     unless team
       alert("You need to create a team using the Teambuilder before you can battle.")
+      PokeBattle.navigation.showTeambuilder()
       return
     disableButtons()
     teamJSON = team.toNonNullJSON().pokemon