var v = new Vue({ el: '#app', data:{ changelog: null, static: null, user_data: [], search_term: "", enteredData: "", active_page: "bundles", active_room: 0, active_bundle: 0, active_season: "spring", active_skill: "farming", save_mode: false, load_mode: false, pick_spoilers: false, hideCompleted: false, hideSpoilers: false, spoilers: { bundle_rewards: true, item_source: true, item_seasons: true, item_skills: true }, temp_spoilers: {} }, beforeMount: function(){ this.fetchData(); this.fetchChangeLog(); new Clipboard('.copy'); storedUserData = localStorage.getItem('user_data'); if(storedUserData !== null && storedUserData !== ""){ this.loadData(storedUserData); } spoilers = localStorage.getItem('spoilers'); if(spoilers !== null && spoilers !== ""){ this.spoilers = JSON.parse(spoilers); } hideCompleted = localStorage.getItem('hideCompleted'); if(hideCompleted !== null && hideCompleted !== ""){ this.hideCompleted = JSON.parse(hideCompleted); } hideSpoilers = localStorage.getItem('hideSpoilers'); if(hideSpoilers !== null && hideSpoilers !== ""){ this.hideSpoilers = JSON.parse(hideSpoilers); } }, computed: { user_data_serialized: function(){ return btoa(JSON.stringify(this.user_data)); }, active_room_bundles: function(){ var self = this; return this.static.bundles.filter(function(bundle){ return bundle.room === self.active_room }); }, active_bundle_items: function(){ var self = this; return this.static.items.filter(function(item){ return item.bundles.indexOf(self.active_bundle) > -1}); }, active_season_items: function() { var self = this; if (self.active_season === self.static.seasons[0].id){ return _.orderBy( this.static.items.filter( function(item){ return item.seasons.length === 4; } ), 'name' ) } else { return _.orderBy( this.static.items.filter( function (item) { return item.seasons.indexOf(self.active_season) > -1 } ), 'name' ) } }, active_skill_items: function() { var self = this; return _.orderBy( this.static.items.filter( function(item){ return item.skills.indexOf(self.active_skill) > -1 } ), 'name' ) }, filtered_items: function(){ var self = this; return _.orderBy(self.static.items.filter(function(item){ return item.name.toLowerCase().indexOf(self.search_term.toLowerCase()) !== -1 }), 'name'); } }, methods: { fetchData: function(){ this.$http.get('bundles.json').then(function(response) { this.static = response.body; if(this.user_data.length <= 0){ for(i=0; i 0){ return true; } else{ return false; } }, getSeasonName: function(seasonId){ for(i = 0; i < this.static.seasons.length; i++){ if(this.static.seasons[i].id === seasonId){ return this.static.seasons[i].name; } } return ""; }, getSkillName: function(skillId){ for(i = 0; i < this.static.skills.length; i++){ if(this.static.skills[i].id === skillId){ return this.static.skills[i].name; } } return ""; }, getRoomItemsRequired: function(roomId) { return this.static.bundles.reduce(function(previousValue, nextValue){ if(nextValue.room === roomId){ return previousValue + nextValue.items_required; } else{ return previousValue; } }, 0) }, getRoomItemsChecked: function(roomId){ var self = this; return this.static.bundles .filter(function(b){ return b.room === roomId; }) .reduce(function(p, c){ return p + Math.min(self.user_data[c.id].length, c.items_required); }, 0); }, isCompleted: function (item) { for(i=0; i < item.bundles.length; i++){ if(!(this.isItemInBundle(item.bundles[i], item.id, i) || this.isBundleComplete(item.bundles[i]))){ return false; } } return true; }, isBundleComplete: function(bundle_id){ return this.user_data[bundle_id].length >= this.static.bundles[bundle_id].items_required; }, getItemSeasons: function(item){ return this.static.seasons.filter(function(season){ return item.seasons.indexOf(season.id) > -1 }); }, getItemSkills: function(item){ return this.static.skills.filter(function(skill){ return item.skills.indexOf(skill.id) > -1 }); } } }); Vue.filter('inBundle', function(value, id){ return value.filter(function(element){ if(element.bundles.indexOf(id) > -1){ return true; } else{ return false; } }); }); Vue.filter('seasonFilter', function(items, season_id){ return items.filter(function(element){ if(season_id == "allseasons" && element.seasons.length > 3){ return true; } else if(element.seasons.length < 4 && element.seasons.indexOf(season_id) > -1){ return true; } else{ return false; } }); });