diff --git a/js/calculator.js b/js/calculator.js index 4e62eb6..22735ea 100644 --- a/js/calculator.js +++ b/js/calculator.js @@ -6,148 +6,64 @@ * @return integer; */ function roundup(value){ - var retval = Math.round( value / 100) * 100; - if (retval <= 0) { // если игр МНОГО, а в фонде нет денег + if (value <= 0) { return 0; } + var retval = Math.round( value / 100) * 100; return retval; } -/** - * Функция расчёта приза. - * - * @param {float} value - * - * @return float - */ -function prizefn(value) { - return 1.0 * value * value - 2.0 * value + 1.0; -} - /** * Вычисление призов для номинации. * - * @param {integer} maxPrize максимальный приз номинации - * @param {integer} minPrize минимальный приз номинации - * @param {integer} count количество игр в номинации - * @param {integer} prizeCount количество призовых мест + * @param {integer} prizes количество призов в номинации * @param {integer} fund призовой фонд номинации * @param {string} table ID таблицы для вывода * * @return void */ -function recalNom(maxPrize, minPrize, count, prizeCount, fund, table) { +function recalNom(prizes, fund, table) { jQuery(table).empty(); - if (prizeCount === 1) { - jQuery(table).append(""+1+""+fund+" руб."); - return; + var prizeTable = {}; // таблица призов в % + if (prizes === 3) { + prizeTable = { + 1: 40, + 2: 35, + 3: 25 + }; + } else if (prizes == 2) { + prizeTable = { + 1: 60, + 2: 40 + }; } - for (var i = 1; i <= prizeCount; i++) { - if (fund === 0) { // а тут копилка и кончилась - break; - } - var prize = roundup(maxPrize * prizefn(i/count) + minPrize); - if (prize <= fund) { - fund = fund - prize; - } else { - prize = fund; - fund = 0; - } + for (var i = 1; i <= prizes; i++) { + var prize = roundup(fund * (prizeTable[i] / 100)); jQuery(table).append(""+i+""+prize+" руб."); } } -/** - * Вычисление максимального приза в номинации. - * - * @param {integer} fund фонд конкурса - * @param {integer} minPrize текущий минимальный приз - * @param {integer} count текущее количество призовых мест - * @param {integer} a коэффициент приза - * - * @return object максимальный приз, количество призовых, минимальный приз - */ -function calcMaxPrize(fund, minPrize, count, a) { - if (count === 1) { - return { - prize: fund, - count: count, - minPrize: minPrize - }; - } - if (minPrize === 0) { - return { - prize: 0, - count: count, - minPrize: minPrize - }; - } - if (fund >= a * (minPrize * count)) { - return { - prize: roundup(a * (fund - (minPrize * count)) / count), - count: count, - minPrize: minPrize - }; - } else { // много игр и мало денег - if (count > 1) { - return calcMaxPrize(fund, minPrize, count - 1, a); - } else { // да за что ж вы так с авторами - if (a > 1) { - return calcMaxPrize(fund, minPrize, count - 1, a - 1); - } else { - return calcMaxPrize(fund, minPrize - 100, count, a); - } - } - } -} -// Параметры: общий фонд, размеры номинаций -function recalculate(fund, games, translations) { +/** + * Обновление калькулятора. + * Вызывается при загрузке страницы или смене параметра. + * + * @param {integer} fund размер общего призового фонда + */ +function recalculate(fund) { // фонды номинаций var gameFund = roundup( fund * 0.74 ); var translateFund = roundup( fund * 0.25 ); - if (translations === undefined) { - return; - } - // если переводов нет, то фонд уходит играм - if (translations === 0) { - gameFund = roundup(fund * 0.99); - translateFund = 0; - } - // если игр нет, то фонд уходит переводам - // (но UI калькулятора этого не позволит) - if (games === 0) { - gameFund = 0; - translateFund = roundup(fund * 0.99); - } - // кол-во призовых мест - var prizeGames = Math.ceil(games * 0.2); - var prizeTranslations = Math.ceil(translations * 0.3); - if (prizeTranslations > translations) { - prizeTranslations = translations; - } - if (prizeGames > games) { - prizeGames = games; - } - // минимальный приз - var minPrize = 1000; - var a = 3; - var maxPrizeGames = calcMaxPrize(gameFund, minPrize, prizeGames, a); - var maxPrizeTranslations = calcMaxPrize(translateFund, minPrize, prizeTranslations, a); + var prizeGames = 3; // 3 призовых места в основной номинации + var prizeTranslations = 2; // 2 призовых места в переводах recalNom( - maxPrizeGames.prize, - maxPrizeGames.minPrize, - games, - maxPrizeGames.count, + prizeGames, gameFund, "#gameTable" ); recalNom( - maxPrizeTranslations.prize, - maxPrizeTranslations.minPrize, - translations, - maxPrizeTranslations.count, + prizeTranslations, translateFund, "#translateTable" ); @@ -161,53 +77,11 @@ jQuery(document).ready(function($){ 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: 0, - max: 50, - slide: function( event, ui) { - jQuery("#translateValue").text(ui.value + " игр"); - recalculate( - $("#fundRange").slider("value"), - $("#gameRange").slider("value"), - ui.value - ); + recalculate(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") - ); + recalculate($("#fundRange").slider("value")); }); diff --git a/page-calculator.php b/page-calculator.php index 8ffa5e9..6210be5 100644 --- a/page-calculator.php +++ b/page-calculator.php @@ -42,20 +42,6 @@ $container = get_theme_mod( 'understrap_container_type' );
-
- -
-
-
- -
-

Основная номинация