diff --git a/client/app/css/teambuilder.styl b/client/app/css/teambuilder.styl index 9927df7..c07617f 100644 --- a/client/app/css/teambuilder.styl +++ b/client/app/css/teambuilder.styl @@ -21,6 +21,9 @@ $pokemon-list-height = 50px margin-bottom 0!important width 100% + .filter-tier-box + width 25px + .teambuilder .meta-info max-width 1368px diff --git a/client/app/js/views/teambuilder/pokemon_edit_view.coffee b/client/app/js/views/teambuilder/pokemon_edit_view.coffee index 0f2c223..7cc6e88 100644 --- a/client/app/js/views/teambuilder/pokemon_edit_view.coffee +++ b/client/app/js/views/teambuilder/pokemon_edit_view.coffee @@ -26,9 +26,11 @@ class @PokemonEditView extends Backbone.View speciesTemplate: JST['teambuilder/species'] nonStatsTemplate: JST['teambuilder/non_stats'] movesTemplate: JST['teambuilder/moves'] + tierFilterBool: true events: 'change .sortSpecies': 'changeSort' + 'change .filter-tier': 'filterTier' 'change .species_list': 'changeSpecies' 'change .selected_nickname': 'changeNickname' 'click .selected_shininess': 'changeShiny' @@ -61,10 +63,41 @@ class @PokemonEditView extends Backbone.View @setGeneration(format.generation) # TODO: Set PBV limit based on conditions + filterTier:(e) => + thistier = @pokemon.getTeam().getTier().tierRank + {SpeciesData, FormeData} = @generation + if e.target.checked + arr = @objectToArr(SpeciesData) + console.log(thistier) + for obj in arr + obj.tier = window.PokeBattle.Tier.Tiers[FormeData[obj.pokename].default.tier[0]].tierRank + console.log(arr) + arr = _.filter arr, (thing) -> thing.tier is thistier + obj = @arrToObject(arr) + @speciesList = (species for species, data of obj) + @render() + else + @speciesList = (species for species, data of SpeciesData) + @render() + + + objectToArr: (data) => + arr = [] + for key, val of data + val.pokename = key + arr.push(val) + return arr + + arrToObject: (arr) => + obj = {} + for thing in arr + obj[thing.pokename] = thing + return obj + changeSort:(e) => sort = $(e.currentTarget).val() - if sort =="Default Sort" - @sortSpecieslist("Default") + if sort == "Sort" + @sortSpecieslist("tier", false) else if sort == "Sort by Dexnumber" @sortSpecieslist("id", false) else if sort == "Invert by Dexnumber" @@ -73,7 +106,10 @@ class @PokemonEditView extends Backbone.View @sortSpecieslist("pokename", false) else if sort == "Invert Alphabetically" @sortSpecieslist("pokename", true) - + else if sort == "Sort by Tier" + @sortSpecieslist("tier", false) + else if sort == "Invert by Tier" + @sortSpecieslist("tier", true) sortSpecieslist: (option, reverse) => {MoveData, SpeciesData, ItemData} = @generation @@ -85,17 +121,18 @@ class @PokemonEditView extends Backbone.View @render() sortObject: (data, option, reverse) -> - arr = [] - for key, val of data - val.pokename = key - arr.push(val) - arr = _.sortBy(arr, option) + arr = @objectToArr(data) + if option != 'tier' + arr = _.sortBy(arr, option) + else + {FormeData} = @generation + for obj in arr + obj.tier = window.PokeBattle.Tier.Tiers[FormeData[obj.pokename].default.tier[0]].tierRank + arr = _.sortBy(arr, 'tier') if reverse == true arr.reverse() - newobj = {} - for thing in arr - newobj[thing.pokename] = thing - finished = newobj + obj = @arrToObject(arr) + finished = obj setGeneration: (generation) => @generation = window.Generations[generation.toUpperCase()] @@ -387,6 +424,13 @@ class @PokemonEditView extends Backbone.View return "
#{item.text}
#{tier.humanName}
" ) attachSelectize(@$el.find(".selected_item")) + filtertierbox = @$el.find(".filter-tier-box")[0] + if @tierFilterBool is false + filtertierbox.checked = true + @tierFilterBool = true + else if @tierFilterBool is true + filtertierbox.checked = false + @tierFilterBool = false return this renderPokemon: => diff --git a/client/views/teambuilder/pokemon.jade b/client/views/teambuilder/pokemon.jade index 5f12248..09f9454 100644 --- a/client/views/teambuilder/pokemon.jade +++ b/client/views/teambuilder/pokemon.jade @@ -14,12 +14,17 @@ mixin printStat(statName, keyName) .meta-info.clearfix .left-side .species + label.filter-tier + input.filter-tier-box(type='checkbox') + | Filter to Current Tier select.sortSpecies - option="" + option="Sort" option="Sort by Dexnumber" option="Invert by Dexnumber" option="Sort Alphabetically" option="Invert Alphabetically" + option="Sort by Tier" + option="Invert by Tier" select.species_list option each species in speciesList diff --git a/public/css/main.css b/public/css/main.css index 7d53b24..961807f 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -454,6 +454,7 @@ h1{font-family:"PT Sans Narrow","Helvetica Neue",sans-serif;font-size:2em;font-w .teambuilder .selectize-input input{height:18px} .teambuilder{position:absolute;top:0;bottom:0;left:0;right:0;} .teambuilder select,.teambuilder input{margin-bottom:0 !important;width:100%} +.teambuilder .filter-tier-box{width:25px} .teambuilder .meta-info{max-width:1368px} .teambuilder .meta-info .left-side,.teambuilder .meta-info .right-side{float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} .teambuilder .navigation{position:absolute;top:50px;bottom:0;background-color:rgba(223,231,232,0.5);width:160px;} diff --git a/public/js/app.js b/public/js/app.js index c9cc018..b8739b3 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -5538,6 +5538,9 @@ this.setGeneration = __bind(this.setGeneration, this); this.sortSpecieslist = __bind(this.sortSpecieslist, this); this.changeSort = __bind(this.changeSort, this); + this.arrToObject = __bind(this.arrToObject, this); + this.objectToArr = __bind(this.objectToArr, this); + this.filterTier = __bind(this.filterTier, this); this.setFormat = __bind(this.setFormat, this); this.initialize = __bind(this.initialize, this); return PokemonEditView.__super__.constructor.apply(this, arguments); @@ -5551,8 +5554,11 @@ PokemonEditView.prototype.movesTemplate = JST['teambuilder/moves']; + PokemonEditView.prototype.tierFilterBool = true; + PokemonEditView.prototype.events = { 'change .sortSpecies': 'changeSort', + 'change .filter-tier': 'filterTier', 'change .species_list': 'changeSpecies', 'change .selected_nickname': 'changeNickname', 'click .selected_shininess': 'changeShiny', @@ -5591,11 +5597,72 @@ return this.setGeneration(format.generation); }; + PokemonEditView.prototype.filterTier = function(e) { + var FormeData, SpeciesData, arr, data, obj, species, thistier, _i, _len, _ref; + thistier = this.pokemon.getTeam().getTier().tierRank; + _ref = this.generation, SpeciesData = _ref.SpeciesData, FormeData = _ref.FormeData; + if (e.target.checked) { + arr = this.objectToArr(SpeciesData); + console.log(thistier); + for (_i = 0, _len = arr.length; _i < _len; _i++) { + obj = arr[_i]; + obj.tier = window.PokeBattle.Tier.Tiers[FormeData[obj.pokename]["default"].tier[0]].tierRank; + } + console.log(arr); + arr = _.filter(arr, function(thing) { + return thing.tier === thistier; + }); + obj = this.arrToObject(arr); + this.speciesList = (function() { + var _results; + _results = []; + for (species in obj) { + data = obj[species]; + _results.push(species); + } + return _results; + })(); + return this.render(); + } else { + this.speciesList = (function() { + var _results; + _results = []; + for (species in SpeciesData) { + data = SpeciesData[species]; + _results.push(species); + } + return _results; + })(); + return this.render(); + } + }; + + PokemonEditView.prototype.objectToArr = function(data) { + var arr, key, val; + arr = []; + for (key in data) { + val = data[key]; + val.pokename = key; + arr.push(val); + } + return arr; + }; + + PokemonEditView.prototype.arrToObject = function(arr) { + var obj, thing, _i, _len; + obj = {}; + for (_i = 0, _len = arr.length; _i < _len; _i++) { + thing = arr[_i]; + obj[thing.pokename] = thing; + } + return obj; + }; + PokemonEditView.prototype.changeSort = function(e) { var sort; sort = $(e.currentTarget).val(); - if (sort === "Default Sort") { - return this.sortSpecieslist("Default"); + if (sort === "Sort") { + return this.sortSpecieslist("tier", false); } else if (sort === "Sort by Dexnumber") { return this.sortSpecieslist("id", false); } else if (sort === "Invert by Dexnumber") { @@ -5604,6 +5671,10 @@ return this.sortSpecieslist("pokename", false); } else if (sort === "Invert Alphabetically") { return this.sortSpecieslist("pokename", true); + } else if (sort === "Sort by Tier") { + return this.sortSpecieslist("tier", false); + } else if (sort === "Invert by Tier") { + return this.sortSpecieslist("tier", true); } }; @@ -5628,23 +5699,23 @@ }; PokemonEditView.prototype.sortObject = function(data, option, reverse) { - var arr, finished, key, newobj, thing, val, _i, _len; - arr = []; - for (key in data) { - val = data[key]; - val.pokename = key; - arr.push(val); + var FormeData, arr, finished, obj, _i, _len; + arr = this.objectToArr(data); + if (option !== 'tier') { + arr = _.sortBy(arr, option); + } else { + FormeData = this.generation.FormeData; + for (_i = 0, _len = arr.length; _i < _len; _i++) { + obj = arr[_i]; + obj.tier = window.PokeBattle.Tier.Tiers[FormeData[obj.pokename]["default"].tier[0]].tierRank; + arr = _.sortBy(arr, 'tier'); + } } - arr = _.sortBy(arr, option); if (reverse === true) { arr.reverse(); } - newobj = {}; - for (_i = 0, _len = arr.length; _i < _len; _i++) { - thing = arr[_i]; - newobj[thing.pokename] = thing; - } - return finished = newobj; + obj = this.arrToObject(arr); + return finished = obj; }; PokemonEditView.prototype.setGeneration = function(generation) { @@ -6026,6 +6097,7 @@ }; PokemonEditView.prototype.render = function() { + var filtertierbox; this.$el.html(this.editTemplate({ window: window, speciesList: this.speciesList, @@ -6053,6 +6125,18 @@ } }); attachSelectize(this.$el.find(".selected_item")); + filtertierbox = this.$el.find(".filter-tier-box")[0]; + console.log(filtertierbox); + console.log(this.tierFilterBool); + if (this.tierFilterBool === false) { + console.log("false"); + filtertierbox.checked = true; + this.tierFilterBool = true; + } else if (this.tierFilterBool === true) { + console.log("true"); + filtertierbox.checked = false; + this.tierFilterBool = false; + } return this; }; diff --git a/public/js/templates.js b/public/js/templates.js index 0dc643d..d4722d0 100644 --- a/public/js/templates.js +++ b/public/js/templates.js @@ -865,7 +865,7 @@ var locals_ = (locals || {}),speciesList = locals_.speciesList,itemList = locals var block = this.block, attributes = this.attributes || {}, escaped = this.escaped || {}; buf.push("" + (jade.escape((jade.interp = statName) == null ? '' : jade.interp)) + ":"); }; -buf.push("
Filter to Current Tier