calculator WIP
This commit is contained in:
parent
c987c39dca
commit
10218fcd01
180
page-calculator.php
Normal file
180
page-calculator.php
Normal file
|
@ -0,0 +1,180 @@
|
|||
<?php
|
||||
/**
|
||||
* Калькулятор призов.
|
||||
*
|
||||
* @package kril
|
||||
*/
|
||||
?>
|
||||
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/css/ion.rangeSlider.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/css/ion.rangeSlider.skinHTML5.min.css">
|
||||
|
||||
<?php while ( have_posts() ) : the_post(); ?>
|
||||
|
||||
<?php get_template_part( 'loop-templates/content', 'page' ); ?>
|
||||
|
||||
<?php
|
||||
// If comments are open or we have at least one comment, load up the comment template.
|
||||
if ( comments_open() || get_comments_number() ) :
|
||||
|
||||
comments_template();
|
||||
|
||||
endif;
|
||||
?>
|
||||
|
||||
<?php endwhile; // end of the loop. ?>
|
||||
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="formControlRange">Призовой фонд конкурса</label>
|
||||
<input type="range" class="form-control-range" id="fundRange" min=11000 max=100000 value="14000">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="formControlRange">Размер основной номинации</label>
|
||||
<input type="range" class="form-control-range" id="gameRange" min=10 max=100>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="formControlRange">Размер номинации переводов</label>
|
||||
<input type="range" class="form-control-range" id="translateRange" min=10 max=100>
|
||||
</div>
|
||||
</form>
|
||||
<h3>Основная номинация</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Награда</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="gameTable">
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>Номинация переводов</h3>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Награда</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="translateTable">
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<script
|
||||
src="https://code.jquery.com/jquery-3.3.1.min.js"
|
||||
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.2.0/js/ion.rangeSlider.min.js"></script>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
|
||||
// округление для денег, до 100 рублей
|
||||
// потому что бутербродик стоит уже 99
|
||||
function roundup(value){
|
||||
var retval = Math.round( value / 100) * 100;
|
||||
if (retval <= 0) { // если игр МНОГО, а в фонде нет денег
|
||||
return 0;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
// Функция величины приза. Точно из скриптов IFComp.
|
||||
function prizefn(value) {
|
||||
return 1.0 * value * value - 2.0 * value + 1.0;
|
||||
}
|
||||
|
||||
// Вычисление призов для номинации.
|
||||
function recalNom(maxPrize, minPrize, count, prizeCount, fund, table) {
|
||||
$(table).empty();
|
||||
for (var i = 1; i <= prizeCount; i++) {
|
||||
if (fund === 0) { // а тут копилка и кончилась
|
||||
break;
|
||||
}
|
||||
var prize = roundup(maxPrize * prizefn((i-0.5)/count) + minPrize);
|
||||
fund = fund - prize;
|
||||
if (i === count) {
|
||||
prize += fund; // добавляем ошибку округления
|
||||
}
|
||||
$(table).append("<tr><th scope='row'>"+i+"</th><td>"+prize+" руб.</td></tr>");
|
||||
}
|
||||
}
|
||||
|
||||
function calcMaxPrize(fund, minPrize, count) {
|
||||
if (count === 1) {
|
||||
return fund;
|
||||
}
|
||||
if (fund > (minPrize * count)) {
|
||||
return roundup(3 * (fund - minPrize * count) / count);
|
||||
} else { // вот он, русский КРИЛ - много игр и мало денег
|
||||
if (count > 1) {
|
||||
return calcMaxPrize(fund, minPrize, count - 1);
|
||||
} else { // да за что ж вы так с авторами
|
||||
return calcMaxPrize(fund, minPrize - 500, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var recalculate = function(){
|
||||
// общий фонд
|
||||
var fund = $("#fundRange").prop("value");
|
||||
// фонды номинаций
|
||||
var gameFund = roundup( fund * 0.66 );
|
||||
var translateFund = roundup( fund * 0.33 );
|
||||
// размеры номинаций
|
||||
var games = $("#gameRange").prop("value");
|
||||
var translations = translateRange.result;//.from_percent;
|
||||
console.log(translations);
|
||||
if (translations === undefined) {
|
||||
return;
|
||||
}
|
||||
// кол-во призовых мест
|
||||
var prizeGames = Math.ceil(games * 0.1);
|
||||
var prizeTranslations = Math.ceil(translations * 0.2);
|
||||
if (prizeTranslations > translations) {
|
||||
prizeTranslations = translations;
|
||||
}
|
||||
if (prizeGames > games) {
|
||||
prizeGames = games;
|
||||
}
|
||||
// минимальный приз
|
||||
var minPrize = 1000;
|
||||
var maxPrizeGames = calcMaxPrize(gameFund, minPrize, prizeGames);
|
||||
var maxPrizeTranslations = calcMaxPrize(translateFund, minPrize, prizeTranslations);
|
||||
|
||||
recalNom(maxPrizeGames, minPrize, games, prizeGames, gameFund, "#gameTable");
|
||||
recalNom(maxPrizeTranslations, minPrize, translations, prizeTranslations, translateFund, "#translateTable");
|
||||
}
|
||||
$("#fundRange").ionRangeSlider({
|
||||
grid: true,
|
||||
min: 10000,
|
||||
max: 50000,
|
||||
step: 500,
|
||||
prettify_enabled: true,
|
||||
postfix: "руб.",
|
||||
onChange: recalculate,
|
||||
});
|
||||
$("#gameRange").ionRangeSlider({
|
||||
onChange: recalculate,
|
||||
});
|
||||
$("#translateRange").ionRangeSlider({
|
||||
min: 1,
|
||||
max: 30,
|
||||
onChange: recalculate,
|
||||
});
|
||||
var fundRange = $("#fundRange").data("ionRangeSlider");
|
||||
var gameRange = $("#gameRange").data("ionRangeSlider");
|
||||
var translateRange = $("#translateRange").data("ionRangeSlider");
|
||||
recalculate();
|
||||
});
|
||||
</script>
|
||||
<div class="wrapper" id="wrapper-hero">
|
||||
|
||||
<?php get_template_part( 'sidebar-templates/sidebar', 'hero' ); ?>
|
||||
|
||||
<?php get_template_part( 'sidebar-templates/sidebar', 'herocanvas' ); ?>
|
||||
|
||||
<?php get_template_part( 'sidebar-templates/sidebar', 'statichero' ); ?>
|
||||
|
||||
</div>
|
10
sass/assets/bootstrap4.scss
vendored
10
sass/assets/bootstrap4.scss
vendored
|
@ -27,16 +27,16 @@
|
|||
@import "../../src/sass/bootstrap4/card";
|
||||
@import "../../src/sass/bootstrap4/breadcrumb";
|
||||
@import "../../src/sass/bootstrap4/pagination";
|
||||
@import "../../src/sass/bootstrap4/badge";
|
||||
@import "../../src/sass/bootstrap4/jumbotron";
|
||||
//@import "../../src/sass/bootstrap4/badge";
|
||||
//@import "../../src/sass/bootstrap4/jumbotron";
|
||||
@import "../../src/sass/bootstrap4/alert";
|
||||
@import "../../src/sass/bootstrap4/progress";
|
||||
@import "../../src/sass/bootstrap4/media";
|
||||
@import "../../src/sass/bootstrap4/list-group";
|
||||
@import "../../src/sass/bootstrap4/close";
|
||||
@import "../../src/sass/bootstrap4/modal";
|
||||
//@import "../../src/sass/bootstrap4/modal";
|
||||
@import "../../src/sass/bootstrap4/tooltip";
|
||||
@import "../../src/sass/bootstrap4/popover";
|
||||
@import "../../src/sass/bootstrap4/carousel";
|
||||
//@import "../../src/sass/bootstrap4/carousel";
|
||||
@import "../../src/sass/bootstrap4/utilities";
|
||||
@import "../../src/sass/bootstrap4/print";
|
||||
@import "../../src/sass/bootstrap4/print";
|
||||
|
|
Loading…
Reference in a new issue