Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .vscode/settings.json

This file was deleted.

201 changes: 103 additions & 98 deletions web/static/js/cardstrength.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ angular.module('CardStrength', ['ngResource', 'ngStorage', 'fixed.table.header',
skill: "@skill"
})
}).factory('ownedcardsAPI', function ($resource, $http) {
return $resource("/api/ownedcards/?expand_card&page_size=100&card__is_special=False&owner_account=:account&card__attribute=:attr&card__is_promo=:promo&card__is_event=:event:stored&card__rarity=:rarity&card__skill=:skill", {
return $resource("/api/ownedcards/?page_size=100&card__is_special=False&owner_account=:account&card__attribute=:attr&card__is_promo=:promo&card__is_event=:event:stored&card__rarity=:rarity&card__skill=:skill", {
account: "@account",
stored: "@stored",
attr: "@attr",
Expand Down Expand Up @@ -62,7 +62,7 @@ angular.module('CardStrength', ['ngResource', 'ngStorage', 'fixed.table.header',
return Math.floor(song.points / skill.interval)
}
else {
//TODO: handle Snow Maiden Umi and point-based score up
//TODO: handle Snow Maiden Umi
return 0
}
};
Expand Down Expand Up @@ -95,7 +95,7 @@ angular.module('CardStrength', ['ngResource', 'ngStorage', 'fixed.table.header',
var bonus = Math.floor(on_attr * 0.33)
// how many more points greats give
var trick_greats_bonus = Math.floor(bonus * 0.0125 * .22 * Math.floor(song.notes / 2) * 1 * 1.1 * 1.1) * greats_during_pl
// how many more points perfects give
// how many more points perfects give
var trick_perfects_bonus = Math.floor(bonus * 0.0125 * 1 * Math.floor(song.notes / 2) * 1 * 1.1 * 1.1) * perfects_during_pl

return ret.scoreUpMod(song, trick_greats_bonus + trick_perfects_bonus)
Expand Down Expand Up @@ -282,116 +282,121 @@ angular.module('CardStrength', ['ngResource', 'ngStorage', 'fixed.table.header',

$rootScope.loadingMsg = false;
}

// TODO: figure out why this isn't printing
$scope.getCards = function () {
console.log("getCards()")
$rootScope.loadingMsg = true;
if ($scope.filters.account == "" && $scope.filters.stored == "") {
console.log("calling from cards");
var cards = cardsAPI.get($scope.filters, function () {
fromAccount = false
populateRootCards(cards, false)
});
}
else {
console.log("calling from ownedcards");
var cards = ownedcardsAPI.get($scope.filters, function () {
fromAccount = true
populateRootCards(cards)
})
}
}
})
.controller('SkillController', function ($rootScope, $scope, Calculations, $localStorage, $window) {
var calcOnAttr = function (card) {
card.on_attr = {}
if (card.attribute == "Smile") {
card.on_attr.base = card.non_idolized_maximum_statistics_smile
card.on_attr.idlz = card.idolized_maximum_statistics_smile
}
else if (card.attribute == "Pure") {
card.on_attr.base = card.non_idolized_maximum_statistics_pure
card.on_attr.idlz = card.idolized_maximum_statistics_pure
}
else if (card.attribute == "Cool") {
card.on_attr.base = card.non_idolized_maximum_statistics_cool
card.on_attr.idlz = card.idolized_maximum_statistics_cool
}

if (card.rarity == 'R') {
card.on_attr.base += 100
card.on_attr.idlz += 200
}
else if (card.rarity == "SR") {
card.on_attr.base += 250
card.on_attr.idlz += 500
}
else if (card.rarity == "SSR") {
card.on_attr.base += 375
card.on_attr.idlz += 750
}
else if (card.rarity == "UR") {
card.on_attr.base += 500
card.on_attr.idlz += 1000
}
}
var parseSkill = function (card) {
var skilltype = card.skill
card.skill = {
category: skilltype,
interval: 0,
type: "",
amount: 0,
percent: 0
}
card.sis = {}

var parsedNumbers = 0, i = 0;
var skill_words = card.skill_details.split(" ")
var length = skill_words.length
var word;
for (var i = 0; i < length; i++) {
word = skill_words[i]
var num = parseInt(word)

if (num && (parsedNumbers == 0)) {
card.skill.interval = word
card.skill.type = skill_words[i + 1].replace(',', '')
++parsedNumbers
}
else if (num && parsedNumbers == 1) {
card.skill.percent = num / 100
++parsedNumbers
}
else if (num && parsedNumbers == 2) {
card.skill.amount = word
++parsedNumbers
break
}
}
}
$scope.getCards = function () {
var cardsQuery = API.get($scope.filters, function () {
console.log($scope.filters)
$scope.cards = []
angular.forEach(cardsQuery.results, function (value) {
$scope.cards.push(value)
})

if (cardsQuery.next) {
console.debug(cardsQuery.next)
HTTP.getUrl(cardsQuery.next).then(getNextUrlSuccess);
}

var length = $scope.cards.length
for (var i = 0; i < length; i++) {
card = $scope.cards[i]
calcOnAttr(card)
parseSkill(card)
}
$rootScope.cards = $scope.cards
$scope.$storage.cards = $rootScope.cards
});

$scope.$broadcast("cardsUpdate", { cards: $scope.$storage.cards })
}
})
// .controller('SkillController', function ($rootScope, $scope, Calculations, $localStorage, $window) {
// var calcOnAttr = function (card) {
// card.on_attr = {}
// if (card.attribute == "Smile") {
// card.on_attr.base = card.non_idolized_maximum_statistics_smile
// card.on_attr.idlz = card.idolized_maximum_statistics_smile
// }
// else if (card.attribute == "Pure") {
// card.on_attr.base = card.non_idolized_maximum_statistics_pure
// card.on_attr.idlz = card.idolized_maximum_statistics_pure
// }
// else if (card.attribute == "Cool") {
// card.on_attr.base = card.non_idolized_maximum_statistics_cool
// card.on_attr.idlz = card.idolized_maximum_statistics_cool
// }
//
// if (card.rarity == 'R') {
// card.on_attr.base += 100
// card.on_attr.idlz += 200
// }
// else if (card.rarity == "SR") {
// card.on_attr.base += 250
// card.on_attr.idlz += 500
// }
// else if (card.rarity == "SSR") {
// card.on_attr.base += 375
// card.on_attr.idlz += 750
// }
// else if (card.rarity == "UR") {
// card.on_attr.base += 500
// card.on_attr.idlz += 1000
// }
// }
// var parseSkill = function (card) {
// var skilltype = card.skill
// card.skill = {
// category: skilltype,
// interval: 0,
// type: "",
// amount: 0,
// percent: 0
// }
// card.sis = {}
//
// var parsedNumbers = 0, i = 0;
// var skill_words = card.skill_details.split(" ")
// var length = skill_words.length
// var word;
// for (var i = 0; i < length; i++) {
// word = skill_words[i]
// var num = parseInt(word)
//
// if (num && (parsedNumbers == 0)) {
// card.skill.interval = word
// card.skill.type = skill_words[i + 1].replace(',', '')
// ++parsedNumbers
// }
// else if (num && parsedNumbers == 1) {
// card.skill.percent = num / 100
// ++parsedNumbers
// }
// else if (num && parsedNumbers == 2) {
// card.skill.amount = word
// ++parsedNumbers
// break
// }
// }
// }
// $scope.getCards = function () {
// var cardsQuery = API.get($scope.filters, function () {
// console.log($scope.filters)
// $scope.cards = []
// angular.forEach(cardsQuery.results, function (value) {
// $scope.cards.push(value)
// })
//
// if (cardsQuery.next) {
// console.debug(cardsQuery.next)
// HTTP.getUrl(cardsQuery.next).then(getNextUrlSuccess);
// }
//
// var length = $scope.cards.length
// for (var i = 0; i < length; i++) {
// card = $scope.cards[i]
// calcOnAttr(card)
// parseSkill(card)
// }
// $rootScope.cards = $scope.cards
// $scope.$storage.cards = $rootScope.cards
// });
//
// $scope.$broadcast("cardsUpdate", { cards: $scope.$storage.cards })
// }
// })
.controller('CalculationsController', function ($rootScope, $scope, $localStorage, Calculations, $window) {
$scope.$storage = $localStorage
$scope.song = {
Expand Down Expand Up @@ -634,4 +639,4 @@ angular.module('CardStrength', ['ngResource', 'ngStorage', 'fixed.table.header',
})
.config(function ($qProvider) {
$qProvider.errorOnUnhandledRejections(false);
})
})
102 changes: 54 additions & 48 deletions web/templates/cardstrength.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@
margin: 0px;
}

.input-group-addon {
cursor: help
}

.section.submit {
margin-bottom: 50px;
}
Expand Down Expand Up @@ -57,16 +53,6 @@ <h4>{% trans 'Filter' %}</h4>
</select>
</div>

<!-- attribute -->
<div class="form-group">
<label for="id_attribute">{% trans 'Attribute' %}</label><br>
<div class="cuteform">
<img class="cuteform-elt" ng-class="{'cuteform-selected': filters.attr==''}" ng-click="setString('attr','')" src="{{ static_url }}static/empty.png"> {% for attribute, _ in filters.attribute_choices %} {% if attribute != 'All'%}
<img class="cuteform-elt" ng-class="{'cuteform-selected': filters.attr=='{{attribute}}'}" ng-click="setString('attr','{{attribute}}')"
src="{{ static_url }}static/{{attribute}}.png"> {% endif %} {% endfor %}
</div>
</div>

<!-- rarity -->
<div class="form-group">
<label class="control-label" for="id_rarity">{% trans 'Rarity' %}</label>
Expand All @@ -79,6 +65,17 @@ <h4>{% trans 'Filter' %}</h4>
</div>
</div>

<!-- attribute -->
<div class="form-group">
<label for="id_attribute">{% trans 'Attribute' %}</label><br>
<div class="cuteform">
<img class="cuteform-elt" ng-class="{'cuteform-selected': filters.attr==''}" ng-click="setString('attr','')" src="{{ static_url }}static/empty.png">
{% for attribute, _ in filters.attribute_choices %} {% if attribute != 'All'%}
<img class="cuteform-elt" ng-class="{'cuteform-selected': filters.attr=='{{attribute}}'}" ng-click="setString('attr','{{attribute}}')"
src="{{ static_url }}static/{{attribute}}.png"> {% endif %} {% endfor %}
</div>
</div>

<!-- server -->
<div class="form-group">
<div class="pull-right"><input id="id_is_world" name="is_world" ng-model="filters.is_world" ng-click="setJPOnly()" type="checkbox"></div>
Expand Down Expand Up @@ -245,43 +242,52 @@ <h4>{% trans 'View' %}</h4>
<div class="container-fluid">
<div class="row" id="row-header">
<h1 class="text-center">{% trans 'Card Strength' %} <small>how good a card <i>actually</i> is</small></h1>
<div class="col-sm-4">
Hello! Here, we look at card strength by evaluating their skills.
<center>
<div class="btn-group btn-group-sm">
<button type="button" class="btn btn-{% if not interfaceColor or interfaceColor == 'default' %}Smile{% else %}{{ interfaceColor }}{% endif %}"
ng-class="{active: allSIS}" ng-click="toggleAllSIS()">Equip SIS to All Cards</button>
<button type="button" class="btn btn-{% if not interfaceColor or interfaceColor == 'default' %}Smile{% else %}{{ interfaceColor }}{% endif %}"
ng-class="{active: allIdlz}" ng-click="toggleAllIdlz()">Idolize All Cards</button>
</div>
</center>
</div>

<div class="col-sm-8">
<h3 style="margin: 0"> Song Details <small>for skill analysis</small></h3>
<div class="col-xs-3">
<div class="input-group input-group-sm">
<span class="input-group-addon" data-toggle="tooltip" title="song length in notes" data-placement="bottom"><i class="flaticon-song"></i></span>
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.notes" class="form-control" placeholder="total notes">
</div>
</div>
<div class="col-xs-3">
<div class="input-group input-group-sm">
<span class="input-group-addon" data-toggle="tooltip" title="song length in seconds" data-placement="bottom"><i class="flaticon-times"></i></span>
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.seconds" class="form-control" placeholder="total seconds">
</div>
</div>
<div class="col-xs-3">
<div class="input-group input-group-sm">
<span class="input-group-addon" data-toggle="tooltip" title="percentage of perfect notes achieved" data-placement="bottom"><i class="flaticon-achievement"></i></span>
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.perfects" class="form-control" placeholder="% perfects">
</div>
<div class="col-sm-12">
<div class="col-xs-4" id="song_input">
<h4 style="margin-top: 0">Song Parameters </h4>
<div class="col-xs-6">
<div class="input-group input-group-sm">
<!-- <span class="input-group-addon" data-toggle="tooltip" title="song length in notes" data-placement="bottom"><i class="flaticon-song"></i></span> -->
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.notes" class="form-control" placeholder="total notes">
<span class="input-group-addon">total notes</span>

</div>
</div>
<div class="col-xs-">
<div class="input-group input-group-sm">
<!-- <span class="input-group-addon" data-toggle="tooltip" title="song length in seconds" data-placement="bottom"><i class="flaticon-times"></i></span> -->
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.seconds" class="form-control" placeholder="total seconds">
<span class="input-group-addon">total seconds</span>
</div>
</div>
</div>
<div class="col-xs-3">
<div class="input-group input-group-sm">
<span class="input-group-addon" data-toggle="tooltip" title="score achieved on clear" data-placement="bottom"><i class="flaticon-scoreup"></i></span>
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.points" class="form-control" placeholder="total score">
<div class="col-xs-4" id="play_input">
<h4 style="margin-top: 0"> Play Style Input </h4>
<div class="col-xs-6">
<div class="input-group input-group-sm">
<!-- <span class="input-group-addon" data-toggle="tooltip" title="percentage of perfect notes achieved" data-placement="bottom"><i class="flaticon-achievement"></i></span> -->
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.perfects" class="form-control" placeholder="% perfects">
<span class="input-group-addon">% perfects</span>
</div>
</div>
<div class="col-xs-6">
<div class="input-group input-group-sm">
<!-- <span class="input-group-addon" data-toggle="tooltip" title="score achieved on clear" data-placement="bottom"><i class="flaticon-scoreup"></i></span> -->
<input type="text" ng-blur="recalcSkill()" ng-keypress="onEnter($event)" ng-model="song.points" class="form-control" placeholder="total score">
<span class="input-group-addon">final score</span>
</div>
</div>
</div>
<div class="col-xs-4" id="options">
<h4 style="margin-top: 0">Options</h4>

<div class="btn-group btn-group-sm">
<button type="button" class="btn btn-{% if not interfaceColor or interfaceColor == 'default' %}Smile{% else %}{{ interfaceColor }}{% endif %}"
ng-class="{active: allSIS}" ng-click="toggleAllSIS()">Equip SIS to All Cards</button>
<button type="button" class="btn btn-{% if not interfaceColor or interfaceColor == 'default' %}Smile{% else %}{{ interfaceColor }}{% endif %}"
ng-class="{active: allIdlz}" ng-click="toggleAllIdlz()">Idolize All Cards</button>
</div>
</div>
</div>
</div>
Expand Down
1 change: 1 addition & 0 deletions web/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3332,4 +3332,5 @@ def drown(request):

def cardstrength(request):
context = globalContext(request)
context['filters'] = get_cards_form_filters(request, settings.CARDS_INFO)
return render(request, 'cardstrength.html', context)