Версия на jQuery UI
This commit is contained in:
parent
fb21d3dc1e
commit
214119167d
134
js/calculator.js
Normal file
134
js/calculator.js
Normal file
|
@ -0,0 +1,134 @@
|
|||
// округление для денег, до 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) {
|
||||
jQuery(table).empty();
|
||||
if (prizeCount === 1) {
|
||||
jQuery(table).append("<tr><th scope='row'>"+1+"</th><td>"+fund+" руб.</td></tr>");
|
||||
return;
|
||||
}
|
||||
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 === prizeCount) {
|
||||
prize += fund; // добавляем ошибку округления
|
||||
}
|
||||
jQuery(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Параметры: общий фонд, размеры номинаций
|
||||
function recalculate(fund, games, translations) {
|
||||
// фонды номинаций
|
||||
var gameFund = roundup( fund * 0.66 );
|
||||
var translateFund = roundup( fund * 0.33 );
|
||||
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");
|
||||
}
|
||||
jQuery(document).ready(function($){
|
||||
jQuery("#fundRange").slider({
|
||||
range: "min",
|
||||
value: 30000,
|
||||
min: 12000,
|
||||
max: 50000,
|
||||
step: 1000,
|
||||
slide: function( event, ui) {
|
||||
jQuery("#fundValue").text(ui.value + " руб.");
|
||||
recalculate(
|
||||
ui.value,
|
||||
$("#gameRange").slider("value"),
|
||||
$("#translateRange").slider("value")
|
||||
);
|
||||
}
|
||||
});
|
||||
jQuery("#gameRange").slider({
|
||||
range: "min",
|
||||
value: 30,
|
||||
min: 1,
|
||||
max: 100,
|
||||
slide: function( event, ui) {
|
||||
jQuery("#gameValue").text(ui.value + " игр");
|
||||
recalculate(
|
||||
$("#fundRange").slider("value"),
|
||||
ui.value,
|
||||
$("#translateRange").slider("value")
|
||||
);
|
||||
}
|
||||
});
|
||||
jQuery("#translateRange").slider({
|
||||
range: "min",
|
||||
value: 5,
|
||||
min: 1,
|
||||
max: 50,
|
||||
slide: function( event, ui) {
|
||||
jQuery("#translateValue").text(ui.value + " игр");
|
||||
recalculate(
|
||||
$("#fundRange").slider("value"),
|
||||
$("#gameRange").slider("value"),
|
||||
ui.value
|
||||
);
|
||||
}
|
||||
});
|
||||
jQuery("#fundValue").text(
|
||||
$("#fundRange").slider("value") + " руб."
|
||||
);
|
||||
jQuery("#gameValue").text(
|
||||
$("#gameRange").slider("value") + " игр"
|
||||
);
|
||||
jQuery("#translateValue").text(
|
||||
$("#translateRange").slider("value") + " игр"
|
||||
);
|
||||
recalculate(
|
||||
$("#fundRange").slider("value"),
|
||||
$("#gameRange").slider("value"),
|
||||
$("#translateRange").slider("value")
|
||||
);
|
||||
});
|
|
@ -4,177 +4,90 @@
|
|||
*
|
||||
* @package kril
|
||||
*/
|
||||
|
||||
get_header();
|
||||
wp_enqueue_script(
|
||||
'calculator',
|
||||
get_stylesheet_directory_uri() . '/js/calculator.js',
|
||||
array(
|
||||
'jquery',
|
||||
'jquery-ui-core',
|
||||
'jquery-ui-slider',
|
||||
),
|
||||
'1.0',
|
||||
true
|
||||
);
|
||||
wp_enqueue_style(
|
||||
'calculator-ui-css',
|
||||
'http://ajax.googleapis.com/ajax/libs/jqueryui/' . $wp_scripts->registered['jquery-ui-core']->ver . '/themes/black-tie/jquery-ui.css'
|
||||
);
|
||||
|
||||
$container = get_theme_mod( 'understrap_container_type' );
|
||||
?>
|
||||
<div class="wrapper" id="page-wrapper">
|
||||
<div class="<?php echo esc_attr( $container ); ?>" id="content">
|
||||
<div class="row">
|
||||
<div
|
||||
class="<?php if ( is_active_sidebar( 'right-sidebar' ) ) : ?>col-md-8<?php else : ?>col-md-12<?php endif; ?> content-area"
|
||||
id="primary">
|
||||
<main class="site-main" id="main" role="main">
|
||||
|
||||
<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 while ( have_posts() ) : the_post(); ?>
|
||||
<?php get_template_part( 'loop-templates/content', 'page' ); ?>
|
||||
|
||||
<?php get_template_part( 'loop-templates/content', 'page' ); ?>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
// If comments are open or we have at least one comment, load up the comment template.
|
||||
if ( comments_open() || get_comments_number() ) :
|
||||
<form>
|
||||
<div class="form-group">
|
||||
<label for="formControlRange">
|
||||
Призовой фонд конкурса:
|
||||
<b><span id="fundValue"></span></b>
|
||||
</label>
|
||||
<div id="fundRange"></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="formControlRange">
|
||||
Размер основной номинации:
|
||||
<b><span id="gameValue"></span></b>
|
||||
</label>
|
||||
<div id="gameRange"></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="formControlRange">
|
||||
Размер номинации переводов:
|
||||
<b><span id="translateValue"></span></b>
|
||||
</label>
|
||||
<div id="translateRange"></div>
|
||||
</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>
|
||||
</main><!-- #main -->
|
||||
</div><!-- #primary -->
|
||||
<?php get_template_part( 'sidebar-templates/sidebar', 'right' ); ?>
|
||||
</div><!-- .row -->
|
||||
</div><!-- Container end -->
|
||||
</div><!-- Wrapper end -->
|
||||
|
||||
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>
|
||||
<?php get_footer();
|
||||
|
|
Loading…
Reference in a new issue