Large diffs are not rendered by default.

@@ -6,7 +6,7 @@
const fs = require('fs')
const { forEach, sortBy } = require('lodash')
const { EVENTS, EVENTNAMES, EVENTTIMES, allClassEventItems } = require('./dataMapper/EVENTDATA.js')
const { getCleanID, getClassForHero, getItemType, getImageURL, sortObject, stupidNames } = require('./dataMapper/helpers.js')
const { getCleanID, getClassForHero, getItemType, getImageURL, sortObject, stupidNames } = require('./dataMapper/utils.js')

var rawData
try {
@@ -193,6 +193,19 @@ try {
updates = sortObject(updates, true)
heroes = sortObject(heroes)

var allData = {
currentEvent: 'YEAR_OF_THE_ROOSTER_2017',
prices: {
'common': 75,
'rare': 225,
'epic': 750,
'legendary': 3000
},
updates,
heroes
}

// Write new items.json and updates.json files to disk
fs.writeFileSync(`${__dirname}/../data/items.json`, JSON.stringify(heroes, null, 2), 'utf8')
fs.writeFileSync(`${__dirname}/../data/updates.json`, JSON.stringify(updates, null, 2), 'utf8')
fs.writeFileSync(`${__dirname}/../data/master.json`, JSON.stringify(allData, null, 2), 'utf8')
File renamed without changes.
@@ -10,7 +10,6 @@
<script src="./js/vendor/ui-bootstrap.min.js"></script>
<script src="./js/vendor/particles.min.js"></script>
<script src="./js/app.js"></script>
<script src="./js/data.js"></script>
<script src="./js/services.js"></script>
<script src="./js/controllers.js"></script>
<script src="./js/directives.js"></script>
@@ -5,9 +5,18 @@ OWI.config(['$compileProvider', '$urlMatcherFactoryProvider', '$stateProvider',
$urlMatcherFactoryProvider.strictMode(false);

$stateProvider
.state('home', {
url: '/',
views: {
main: {
templateUrl: './templates/home.html',
controller: 'HomeCtrl'
}
}
})

.state('heroes', {
url: '/heroes',
templateUrl: './templates/heroes.html',
views: {
main: {
templateUrl: './templates/heroes.html',
@@ -19,16 +28,16 @@ OWI.config(['$compileProvider', '$urlMatcherFactoryProvider', '$stateProvider',
.state('hero', {
url: '/hero/:id',
resolve: {
hero: function($q, Data, $stateParams) {
hero: function($q, DataService, $stateParams) {
var deferred = $q.defer();
setTimeout(function() {
var hero = Data.heroes[$stateParams.id]
DataService.waitForInitialization().then(function(data) {
var hero = data.heroes[$stateParams.id];
if (hero) {
deferred.resolve(hero)
deferred.resolve(hero);
} else {
deferred.reject("INVALID_HERO")
deferred.reject("INVALID_HERO");
}
}, 0);
})
return deferred.promise
}
},
@@ -44,18 +53,18 @@ OWI.config(['$compileProvider', '$urlMatcherFactoryProvider', '$stateProvider',
})

.state('update', {
url: '/:id',
url: '/update/:id',
resolve: {
event: function($q, Data, $stateParams) {
event: function($q, DataService, $stateParams) {
var deferred = $q.defer();
setTimeout(function() {
var event = Data.updates[$stateParams.id]
DataService.waitForInitialization().then(function(data) {
var event = data.updates[$stateParams.id];
if (event) {
deferred.resolve(event)
deferred.resolve(event);
} else {
deferred.reject("INVALID_EVENT")
deferred.reject("INVALID_EVENT");
}
}, 0);
})
return deferred.promise
}
},
@@ -73,7 +82,7 @@ OWI.config(['$compileProvider', '$urlMatcherFactoryProvider', '$stateProvider',
$urlRouterProvider.otherwise('/');
}])

.run(["$rootScope", "$state", "Data", function($rootScope, $state, Data) {
.run(["$rootScope", "$state", "DataService", function($rootScope, $state, Data) {
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
console.warn(error);
if (error == 'INVALID_HERO') {
@@ -1,13 +1,27 @@
OWI.controller('MainCtrl', ["$rootScope", "$q", "$document", "$uibModal", "Data", "StorageService", function($rootScope, $q, $document, $uibModal, Data, StorageService) {
OWI.controller('HomeCtrl', ["$scope", function($scope) {
$scope.getHeroImage = function(id) {
return id !== 'all' ? './resources/heroes/' + id + '/portrait.png' : './resources/logo.svg';
}

$scope.getEventImage = function(id) {
return './resources/updates/' + id + '/logo.png';
}
}])

OWI.controller('MainCtrl', ["$rootScope", "$q", "$document", "$uibModal", "DataService", function($rootScope, $q, $document, $uibModal, DataService) {
var vm = this;
this.preview = false;
this.updates = Data.updates;
this.heroes = Data.heroes
this.selectedUpdate = Data.currentEvent;
this.currentDate = Date.now();
this.showSidebar = false;
this.supportsWebM = true

DataService.waitForInitialization().then(function(data) {
vm.updates = data.updates;
vm.heroes = data.heroes
vm.selectedUpdate = data.currentEvent;
})

// Check to see if the web browser supports WebM videos
var v = document.createElement('video')
if (v.canPlayType) {
this.supportsWebM = ("" !== v.canPlayType('video/webm; codecs="vp8, opus"') && "" !== v.canPlayType('video/webm; codecs="vp9, opus"'))
@@ -72,13 +86,9 @@ OWI.controller('MainCtrl', ["$rootScope", "$q", "$document", "$uibModal", "Data"
controllerAs: 'settings'
});
};

this.particles = StorageService.getSetting('particles');
var savedData = StorageService.getData();
Data.checked = Object.assign({}, Data.checked, savedData);
}]);

OWI.controller('SettingsCtrl', ["$rootScope", "$uibModalInstance", "StorageService", "Data", function($rootScope, $uibModalInstance, StorageService, Data) {
OWI.controller('SettingsCtrl', ["$rootScope", "$uibModalInstance", "StorageService", "DataService", function($rootScope, $uibModalInstance, StorageService, Data) {
var vm = this;
this.particles = StorageService.getSetting('particles');
this.hdVideos = StorageService.getSetting('hdVideos');
@@ -154,17 +164,15 @@ OWI.controller('SettingsCtrl', ["$rootScope", "$uibModalInstance", "StorageServi
}
}])

OWI.controller('HeroesCtrl', ["$scope", "$rootScope", "Data", "StorageService", "hero", function($scope, $rootScope, Data, StorageService, hero) {
OWI.controller('HeroesCtrl', ["$scope", "$rootScope", "DataService", "StorageService", "hero", function($scope, $rootScope, Data, StorageService, hero) {
Object.assign(this, hero)
}])

OWI.controller("UpdateCtrl", ["$scope", "$rootScope", "Data", "StorageService", "event", function($scope, $rootScope, Data, StorageService, event) {
OWI.controller("UpdateCtrl", ["$scope", "$rootScope", "DataService", "StorageService", "event", function($scope, $rootScope, Data, StorageService, event) {
$scope.preview = false;
$scope.checked = Data.checked[event.id];
$scope.data = event;

$scope.checked = Data.checked[$scope.data.id];

$rootScope.$on('selectAll', function() {
$scope.calculateCosts();
$scope.calculatePerHeroProgress();
@@ -2,19 +2,19 @@ OWI.factory("StorageService", function() {
var service = {
data: {},
settings: {},
defaults: {
defaultSettings: {
particles: true,
hdVideos: false,
currentTheme: 'standard'
},
getData: function() {
return service.data
return service.data;
},
isItemChecked: function(event, type, id) {
return (event in service.data ? (type in service.data[event] ? service.data[event][type][id] : false) : false)
return (event in service.data ? (type in service.data[event] ? service.data[event][type][id] : false) : false);
},
getSetting: function(key) {
return (key in service.settings ? service.settings[key] : (key in service.defaults ? service.defaults[key] : false))
return (key in service.settings ? service.settings[key] : (key in service.defaultSettings ? service.defaultSettings[key] : false));
},
setSetting: function(key, value) {
service.settings[key] = value;
@@ -43,3 +43,48 @@ OWI.factory("StorageService", function() {
service.init();
return service;
})

OWI.factory("DataService", ["$http", "$q", "StorageService", function($http, $q, StorageService) {
var items = `{"skinsLegendary":{},"skinsEpic":{},"emotes":{},"intros":{},"sprays":{},"voicelines":{},"poses":{},"icons":{}}`
function initialize(data) {
var storedData = StorageService.getData() || {};
var out = {
initialized: true,
checked: {}
}
Object.keys(data.updates).forEach(function(event) {
out.checked[event] = JSON.parse(items)
})
Object.assign(out.checked, storedData)
Object.assign(service, out, data)
}

var service = {
initialized: false,
waitForInitialization: function() {
return $q(function(resolve) {
function waitForInitialize() {
if (service.initialized) {
resolve(service);
} else {
setTimeout(waitForInitialize, 50);
}
}
waitForInitialize();
});
},
init: function() {
$http.get('./data/master.json').then(function(resp) {
if (resp.status == 200) {
initialize(resp.data);
} else {
console.error("Failed loading master.json ???", resp.status, resp.error);
}
}, function(resp) {
console.error("Failed loading master.json ???", resp.status, resp.error);
})
}
}
service.init();
return service;
}])
@@ -1,7 +1,7 @@
<div id="hero-container" class="{{hero.id}} body-container">
<div id="hero-bar">
<div id="hero-nav">
<div class="nav-group selected" ui-sref="heroes">
<div class="nav-group selected" ui-sref="home">
Heroes
</div>
<div class="nav-group">

This file was deleted.

@@ -0,0 +1,13 @@
<div id="home">
<div class="gallery" id="event-gallery">
<div ng-repeat="event in $ctrl.updates track by $index" ui-sref="update({id: event.id})">
<div lazy-background="{{getEventImage(event.id)}}"></div>
</div>
</div>
<div class="gallery" id="hero-gallery">
<div ng-repeat="hero in $ctrl.heroes track by $index" ui-sref="hero({id: hero.id})">
<div lazy-background="{{getHeroImage(hero.id)}}"></div>
<h2>{{hero.name}}</h2>
</div>
</div>
</div>