181 lines
6.5 KiB
PHP
181 lines
6.5 KiB
PHP
|
<?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>
|