var SkillData = angular.module('SkillsList', ['ui.bootstrap', 'ngSanitize', 'angularBootstrapNavTree']); SkillData.controller('SkillMainDataController', ['$scope', '$http', function ($scope, $http) { $scope.skills = [] $scope.rawSkills = [] $scope.rawLineData = {} $scope.rawSkillData = {} $scope.skillNames = [] $scope.buildSkillList = function(skillTable) { $scope.rawSkillData = skillTable; $scope.rawSkills = []; for( v in skillTable) { $scope.rawSkills.push(skillTable[v]); } } $scope.setSkills = function() { $scope.skillNames = this.data.skills } $http.get('skilldata.json') .then(function(res) { $scope.buildSkillList(res.data.skills); $scope.rawLineData = res.data.lines; }); }]); SkillData.controller('SkillListController', ['$scope', function($scope) { $scope.currentPage=1 $scope.numPerPage=5 $scope.maxSize=5 $scope.$watch("currentPage + numPerPage", function() { var begin = (($scope.currentPage - 1) * $scope.numPerPage), end = begin + $scope.numPerPage; $scope.skills = $scope.rawSkills.slice(begin, end); }); $scope.$watch("skillNames", function(names) { if(names.length == 0) return; var skillObjs = [] var obj for(k in names) { skillObjs.push($scope.rawSkillData[names[k]]); } $scope.skills = skillObjs; }); }]); SkillData.controller('SkillLineController', ['$scope', function ($scope) { $scope.skillLineTree = [] $scope.linesTree = {}; $scope.$watch("rawLineData", function() { var data = $scope.rawLineData $scope.skillLineTree = [] for(i in data) { var skillLines = data[i] line = { onSelect: $scope.openBranch, label: i, children: [] } for(j in skillLines) { line.children.push({ label: j.replace("'",""), onSelect: $scope.setSkills, data: { skills: skillLines[j] } }) } $scope.skillLineTree.push(line) } }); $scope.openBranch = function(branch) { $scope.linesTree.collapse_all() branch.expanded = true } }]); SkillData.controller('LoadoutController', ['$scope', function ($scope) { }]); SkillData.filter('fitQualityClass', function() { return function(input) { input == input || 0 if(input > 0.999) { return 'label-success'; } else if(input > 0.9) { return 'label-warning'; } else { return 'label-danger'; } } }); SkillData.filter('resource',function() { return function(input, label, suffix) { if(input == '' || input == 0) { return ''; } switch(input) { case 'Stamina': return '<span class="stam">Stamina</span>'; case 'Magicka': return '<span class="magk">Magicka</span>'; case 'Ultimate': return '<span class="ultm">Ultimate</span>'; case 'Health': return '<span class="health">Health</span>'; default: return input; } } }); SkillData.filter('fID', function() { return function(input) { input = input || ''; return input.replace(/(##f[0-9]+##)/g,'<span class="formulaID">$1</span>'); } }); SkillData.filter('divide', function() { return function(input, amount) { return Number(input) / Number(amount); } }); SkillData.filter('nl2br', function() { return function(input) { input = input || ''; return input.replace(/\n/g,'<br />'); } }); SkillData.directive('skillDesc', function() { return { restrict: 'E', scope: true, link: function(scope, element, attrs) { var desc = scope.skill.description.replace(/\n/g,'<br />') desc = desc.replace(/Flame Damage/g, '<span class="label dmg-flame">Flame Damage</span>') desc = desc.replace(/Magic Damage/g, '<span class="label dmg-magic">Magic Damage</span>') desc = desc.replace(/Ice Damage/g, '<span class="label dmg-ice">Ice Damage</span>') desc = desc.replace(/Cold Damage/g, '<span class="label dmg-ice">Cold Damage</span>') desc = desc.replace(/Shock Damage/g, '<span class="label dmg-shock">Shock Damage</span>') desc = desc.replace(/Poison Damage/g, '<span class="label dmg-poison">Poison Damage</span>') desc = desc.replace(/Disease Damage/g, '<span class="label dmg-disease">Disease Damage</span>') desc = desc.replace(/Physical Damage/g, '<span class="label dmg-physical">Physical Damage</span>') element.html(desc.replace(/(##f[0-9]+##)/g,'<span class="formulaID">$1</span>')) } }; }); SkillData.directive('formulaPart', function() { return { restrict: 'E', scope: { label: '@', value: '@' }, template: '<span ng-show="{{value > 0.0001}}"><span class="coef">{{value}}</span> × <span class="var">{{label}}</span> +</span>' } }) SkillData.directive("rsq", function() { return { scope: { rsqValue: '=value', }, template: '<span class="rsq label {{fitQualityClass}}">{{rsqValue|number:4}}</span>' } }); SkillData.directive('skillInfo', function() { return { restrict: 'E', scope: { label: '@', value: '@', suffix: '@' }, template: '<div class="info" ng-show="{{value}} > 0"><b>{{label}}:</b> {{value}}{{suffix}}</div>' } })