ы
банк
Сообщений 1 страница 2 из 2
Поделиться2Сегодня 02:57:37
[hideprofile][html]
<style>
/* =========================================================
ON:AIR BANK / СИНЯЯ ВЕРСИЯ
ЦВЕТА И ГАБАРИТЫ — МЕНЯЙТЕ В ЭТОМ БЛОКЕ
========================================================= */
.oa-bank {
--bank-dark: #11182f; /* внешняя рамка */
--bank-blue: #273b70; /* второй цвет рамки */
--cover-1: #253e7d; /* первый цвет верхней обложки */
--cover-2: #5278bc; /* второй цвет верхней обложки */
--cover-3: #24345e; /* третий цвет верхней обложки */
--bank-paper: #f6f8ff; /* светлая правая панель */
--bank-row: #eaf0fa; /* фон строк с ценами */
--bank-text: #283757; /* основной текст */
--bank-muted: #7586a5; /* дополнительные подписи */
--bank-accent: #5479bd; /* акценты/кнопки/скролл */
--bank-ice: #9de1f3; /* голубой свет */
--bank-height: 598px; /* ВАЖНО: общая высота обеих колонок */
width: min(900px, 100%);
max-width: calc(100vw - 16px);
margin: 20px auto;
padding: 12px;
box-sizing: border-box;
border-radius: 32px;
background: linear-gradient(130deg,var(--bank-dark),var(--bank-blue));
box-shadow: 0 16px 38px rgba(15,26,61,.19);
font: 12px/1.45 'Trebuchet MS',Arial,sans-serif;
color: var(--bank-text);
}
.oa-bank, .oa-bank *, .oa-bank *::before, .oa-bank *::after { box-sizing:border-box; }
.oa-bank input[type="radio"] { position:absolute; width:1px; height:1px; opacity:0; pointer-events:none; }
.oa-bank-card {
padding: 18px 18px 16px;
border-radius: 25px;
background:
radial-gradient(circle at 92% 4%,rgba(157,225,243,.13),transparent 24%),
radial-gradient(circle at 8% 88%,rgba(157,225,243,.09),transparent 31%),
linear-gradient(125deg,var(--cover-1),var(--cover-2) 48%,var(--cover-3));
overflow: hidden;
}
/* ВЕРХ БАНКА */
.oa-bank-top { display:flex; align-items:center; justify-content:space-between; gap:14px; margin-bottom:14px; color:#fff; }
.oa-bank-top > div:first-child > span { display:block; color:#d2ebff; font-size:10px; letter-spacing:2px; text-transform:uppercase; }
.oa-bank-top h2 { margin:4px 0 3px; font-size:34px; line-height:1; font-weight:900; text-transform:lowercase; color:#fff; }
.oa-bank-top em { display:block; font-style:normal; font-size:10px; letter-spacing:1px; color:#d8e8fc; text-transform:uppercase; }
.oa-bank-coins { flex:0 0 auto; text-align:center; min-width:112px; padding:9px 13px; border:1px solid rgba(255,255,255,.24); border-radius:19px; background:rgba(255,255,255,.16); }
.oa-bank-coins b { display:block; font-size:24px; line-height:1.1; color:var(--bank-ice); }
.oa-bank-coins span { display:block; margin-top:3px; font-size:9px; letter-spacing:.9px; color:#fff; text-transform:uppercase; }
/* ВКЛАДКИ — ВЫСОТА ПРИ ПЕРЕКЛЮЧЕНИИ НЕ МЕНЯЕТСЯ */
.oa-bank-tabs { display:flex; gap:7px; flex-wrap:wrap; margin-bottom:14px; }
.oa-bank-tabs label { padding:8px 13px; border-radius:999px; border:1px solid rgba(255,255,255,.20); background:rgba(10,24,57,.24); color:#eff7ff; font-size:10px; letter-spacing:1px; text-transform:uppercase; cursor:pointer; }
.oa-bank-tabs label:hover { background:rgba(255,255,255,.18); }
#oa-bank-main:checked ~ .oa-bank-card .oa-bank-tabs label[for="oa-bank-main"],
#oa-bank-game:checked ~ .oa-bank-card .oa-bank-tabs label[for="oa-bank-game"],
#oa-bank-active:checked ~ .oa-bank-card .oa-bank-tabs label[for="oa-bank-active"],
#oa-bank-spend:checked ~ .oa-bank-card .oa-bank-tabs label[for="oa-bank-spend"] {
background:#f5f9ff; color:#294779; border-color:#fff; font-weight:bold;
}
/* ОСНОВНАЯ СЕТКА: ОБЕ КОЛОНКИ ФИКСИРОВАННОЙ ВЫСОТЫ */
.oa-bank-body {
display:grid;
grid-template-columns: 246px minmax(0,1fr);
gap:14px;
height: var(--bank-height);
min-height:0;
align-items:stretch;
}
/* СЛЕВА — ТЁМНАЯ ПАНЕЛЬ И НЕПОДВИЖНЫЙ СЧЁТЧИК */
.oa-bank-machine { display:flex; flex-direction:column; min-height:0; height:100%; padding:10px; background:linear-gradient(155deg,#18213a,#0d1630); color:#fff; border-radius:24px; }
.oa-bank-display { flex:0 0 154px; position:relative; overflow:hidden; padding:14px; border-radius:19px; background:
radial-gradient(circle at 90% 12%,rgba(157,225,243,.16),transparent 36%),
linear-gradient(135deg,rgba(255,255,255,.10),rgba(91,132,200,.07)); }
.oa-bank-display:after { content:'ON AIR'; position:absolute; right:-6px; bottom:-17px; white-space:nowrap; color:rgba(255,255,255,.05); font-size:60px; letter-spacing:-4px; font-weight:900; pointer-events:none; }
.oa-bank-live { display:inline-flex; align-items:center; gap:7px; padding:5px 9px; border-radius:30px; background:rgba(255,255,255,.09); color:#f5faff; font-size:9px; letter-spacing:1.3px; }
.oa-bank-live i { width:7px; height:7px; border-radius:50%; background:var(--bank-ice); box-shadow:0 0 7px rgba(157,225,243,.5); }
.oa-bank-title { position:relative; z-index:2; margin-top:13px; }
.oa-bank-title span { display:block; font-size:9px; text-transform:uppercase; letter-spacing:1.6px; color:#b4c8e8; }
.oa-bank-title b { display:block; font-size:26px; line-height:1; margin-top:3px; }
.oa-bank-title em { display:block; font-style:normal; font-size:10px; color:#d9eafa; margin-top:7px; }
.oa-bank-equalizer { position:absolute; bottom:12px; right:14px; z-index:2; display:flex; align-items:end; gap:4px; height:21px; }
.oa-bank-equalizer i { width:4px; border-radius:5px; background:linear-gradient(180deg,var(--bank-ice),#709bc8); }
.oa-bank-equalizer i:nth-child(1) {height:7px}.oa-bank-equalizer i:nth-child(2){height:15px}.oa-bank-equalizer i:nth-child(3){height:12px}.oa-bank-equalizer i:nth-child(4){height:20px}.oa-bank-equalizer i:nth-child(5){height:9px}
.oa-bank-tags {display:none}
.oa-bank-reader { flex:1 1 auto; display:flex; flex-direction:column; min-height:0; margin-top:9px; padding:10px; background:rgba(255,255,255,.07); border-radius:19px; }
.oa-bank-reader h4 { margin:0 0 8px; color:var(--bank-ice); font-size:11px; letter-spacing:1px; text-transform:uppercase; }
.oa-reader-tabs { display:grid; grid-template-columns:1fr 1fr; gap:6px; margin-bottom:8px; }
.oa-reader-tabs button { border:0; border-radius:11px; padding:7px; background:#344563; color:#fff; font:10px 'Trebuchet MS',Arial,sans-serif; cursor:pointer; }
.oa-reader-tabs button.active { background:#a9e2f3; color:#1c335a; font-weight:bold; }
.oa-reader-panel { display:none; min-height:0; }
.oa-reader-panel.active { display:flex; flex:1 1 auto; flex-direction:column; min-height:0; }
.oa-bank-picked { flex:1 1 auto; height:102px; min-height:0; overflow-y:auto; padding-right:4px; }
.oa-bank-picked > span { display:block; color:#c4d4ec; font-size:10px; line-height:1.3; padding:6px 2px; }
.oa-picked-item { padding:8px; margin-bottom:6px; border-radius:11px; background:rgba(7,20,43,.40); }
.oa-picked-item strong { display:block; color:#fff; font-size:10px; line-height:1.3; }
.oa-picked-item em { display:block; font-style:normal; font-size:10px; color:var(--bank-ice); margin:3px 0 5px; }
.oa-picked-controls { display:grid; grid-template-columns:24px 1fr 24px; gap:5px; }
.oa-picked-minus,.oa-picked-plus { min-width:0; border:0; border-radius:7px; background:#4d6289; color:#fff; cursor:pointer; }
.oa-bank .oa-picked-item input { width:100%; min-width:0; text-align:center; padding:5px; border:0; border-radius:7px; background:#edf4fd; color:#283757; font:12px 'Trebuchet MS',Arial,sans-serif; }
.oa-picked-remove { margin-top:5px; padding:4px 7px; border:0; border-radius:10px; background:rgba(255,255,255,.1); color:#fff; font-size:9px; cursor:pointer; }
.oa-bank-total { display:flex; justify-content:space-between; align-items:center; gap:4px; margin:7px 0; border-radius:10px; padding:7px 8px; background:#0d1630; color:#b6e9f4; font-size:10px; }
.oa-bank-total b {white-space:nowrap}
.oa-bank #oaBankResult,.oa-bank #oaSpendResult { flex:0 0 94px; resize:none; width:100%; height:94px; min-height:0; border:0; border-radius:10px; background:#f4f7fc; color:#394a68; padding:8px; font:10px/1.3 'Trebuchet MS',Arial,sans-serif; }
.oa-bank #oaBankCopy,.oa-bank #oaBankClear,.oa-bank #oaSpendCopy,.oa-bank #oaSpendClear { flex:0 0 auto; width:100%; border:0; border-radius:10px; margin-top:5px; padding:7px; background:#86c8e7; color:#172e4f; font:10px 'Trebuchet MS',Arial,sans-serif; cursor:pointer; }
.oa-bank #oaBankClear,.oa-bank #oaSpendClear { background:#30405f; color:#fff; }
/* ПРАВАЯ ПАНЕЛЬ: ФИКСИРОВАННАЯ ВЫСОТА + СКРОЛЛ ВНУТРИ КАЖДОЙ ВКЛАДКИ */
.oa-bank-pages {
min-width:0; height:100%; min-height:0;
padding:12px;
border-radius:23px;
background:rgba(247,249,255,.97);
overflow:hidden;
}
.oa-bank-page {
display:none;
height:100%;
min-height:0;
overflow-y:auto;
overflow-x:hidden;
padding:1px 6px 1px 1px;
scrollbar-width:thin;
scrollbar-color:#9eb4d7 transparent;
}
#oa-bank-main:checked ~ .oa-bank-card .page-main,
#oa-bank-game:checked ~ .oa-bank-card .page-game,
#oa-bank-active:checked ~ .oa-bank-card .page-active,
#oa-bank-spend:checked ~ .oa-bank-card .page-spend { display:block; }
.oa-bank-page::-webkit-scrollbar,.oa-bank-picked::-webkit-scrollbar {width:6px}
.oa-bank-page::-webkit-scrollbar-thumb,.oa-bank-picked::-webkit-scrollbar-thumb {background:#9eb4d7;border-radius:9px}
.oa-bank-hero { padding:17px; margin-bottom:11px; background:linear-gradient(135deg,#dfe9fa,#f9fbff); border-radius:19px; }
.oa-bank-hero h3 { margin:0 0 6px; font-size:21px; line-height:1.1; color:#2f487e; }
.oa-bank-hero p { margin:0; line-height:1.45; color:#5a6c8d; font-size:12px; }
/* ВАЖНО: height:auto, иначе длинная «Активность» растягивала родительский блок */
.oa-bank-section { display:block; height:auto; min-height:0; padding:14px; margin-bottom:10px; border-radius:18px; background:#fff; box-shadow:0 3px 12px rgba(43,69,110,.07); }
.oa-bank-section h3 { margin:0 0 11px; color:#2e4676; font-size:18px; line-height:1.1; }
.oa-bank-row { display:flex; justify-content:space-between; align-items:center; gap:9px; min-width:0; padding:9px 10px; margin-bottom:6px; background:var(--bank-row); border-radius:12px; }
.oa-bank-row:last-child {margin-bottom:0}
.oa-bank-row span { min-width:0; font-size:11px; line-height:1.4; color:#4d5d79; }
.oa-bank-row b { flex:0 0 auto; max-width:52%; padding:5px 8px; border-radius:999px; background:#d8e5f7; color:#365991; font-size:10px; line-height:1.3; text-align:center; font-weight:bold; }
.oa-bank-row[data-calc],.oa-bank-row[data-spend] {cursor:pointer}
.oa-bank-row[data-calc]:hover,.oa-bank-row[data-spend]:hover { background:#dceafc; }
/* АДАПТИВ: НА УЗКИХ ЭКРАНАХ СЧЁТЧИК НАД СПИСКОМ,
НО ВЫСОТА ВКЛАДОК ОСТАЁТСЯ ПОСТОЯННОЙ */
@media(max-width:760px) {
.oa-bank { max-width:calc(100vw - 12px); padding:8px; }
.oa-bank-card { padding:14px; }
.oa-bank-top { flex-wrap:wrap; }
.oa-bank-top h2 {font-size:30px}
.oa-bank-tabs {flex-wrap:nowrap;overflow-x:auto;padding-bottom:5px}
.oa-bank-tabs label {flex:0 0 auto;white-space:nowrap}
.oa-bank-body {display:flex;flex-direction:column;height:auto;gap:12px}
.oa-bank-machine {height:540px;flex:0 0 540px}
.oa-bank-display {flex-basis:112px}
.oa-bank-pages {height:485px;flex:0 0 485px}
}
@media(max-width:440px) {
.oa-bank-card {padding:10px;border-radius:20px}
.oa-bank-coins {padding:6px 10px;min-width:90px}
.oa-bank-coins b {font-size:20px}
.oa-bank-tabs label {padding:7px 10px;font-size:9px}
.oa-bank-pages {padding:8px}
.oa-bank-section {padding:10px}
.oa-bank-row {flex-wrap:wrap;gap:5px}
.oa-bank-row b {max-width:100%;margin-left:auto}
}
</style>
<div class="oa-bank">
<input type="radio" name="oa-bank-tabs" id="oa-bank-main" checked>
<input type="radio" name="oa-bank-tabs" id="oa-bank-game">
<input type="radio" name="oa-bank-tabs" id="oa-bank-active">
<input type="radio" name="oa-bank-tabs" id="oa-bank-spend">
<div class="oa-bank-card">
<div class="oa-bank-top">
<div>
<span>ON:AIR BANK</span>
<h2>банк</h2>
<em>баланс / начисления / списания / активность</em>
</div>
<div class="oa-bank-coins">
<b>Ⓥ</b>
<span>считаем голоса</span>
</div>
</div>
<div class="oa-bank-tabs">
<label for="oa-bank-main">основное</label>
<label for="oa-bank-game">игровое</label>
<label for="oa-bank-active">активное</label>
<label for="oa-bank-spend">траты</label>
</div>
<div class="oa-bank-body">
<div class="oa-bank-machine">
<div class="oa-bank-display">
<div class="oa-bank-live">
<i></i>
<b>BANK ON AIR</b>
</div>
<div class="oa-bank-title">
<span>daily balance</span>
<b>банк</b>
<em>зарабатываем / тратим</em>
</div>
<div class="oa-bank-equalizer">
<i></i><i></i><i></i><i></i><i></i>
</div>
<div class="oa-bank-tags"></div>
</div>
<div class="oa-bank-reader">
<h4>счётчик</h4>
<div class="oa-reader-tabs">
<button type="button" class="active" id="oaReaderIncomeTab">начислить</button>
<button type="button" id="oaReaderSpendTab">тратить</button>
</div>
<div class="oa-reader-panel active" id="oaReaderIncome">
<div class="oa-bank-picked" id="oaBankPicked">
<span>нажми на позиции справа</span>
</div>
<div class="oa-bank-total">
<span>итого</span>
<b id="oaBankTotal">0 голосов</b>
</div>
<textarea id="oaBankResult" readonly></textarea>
<button type="button" id="oaBankCopy">скопировать</button>
<button type="button" id="oaBankClear">очистить</button>
</div>
<div class="oa-reader-panel" id="oaReaderSpend">
<div class="oa-bank-picked" id="oaSpendPicked">
<span>нажми на траты справа</span>
</div>
<div class="oa-bank-total">
<span>тратим</span>
<b id="oaSpendTotal">0 голосов</b>
</div>
<textarea id="oaSpendResult" readonly></textarea>
<button type="button" id="oaSpendCopy">скопировать</button>
<button type="button" id="oaSpendClear">очистить</button>
</div>
</div>
</div>
<div class="oa-bank-pages">
<div class="oa-bank-page page-main">
<div class="oa-bank-hero">
<h3>как работает банк?</h3>
<p>
Банк — это тема, где игроки забирают голоса за основные действия на форуме:
регистрацию, анкету, приход по заявке, оформление профиля и другие стартовые активности.
Всё приносится по шаблону с доказательствами.
</p>
</div>
<div class="oa-bank-section">
<h3>основные начисления</h3>
<div class="oa-bank-row" data-calc data-name="регистрация персонажа" data-price="50"><span>регистрация персонажа</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="пришёл по заявке" data-price="100"><span>пришёл по заявке</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="анкета текстом" data-price="100"><span>анкета текстом</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="анкета мемами" data-price="70"><span>анкета мемами</span><b>70 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="оставить заявку на нужного" data-price="150"><span>оставить заявку на нужного</span><b>150 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="привести друга" data-price="200"><span>привести друга</span><b>200 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="первая покупка в магазине" data-price="50"><span>первая покупка в магазине</span><b>50 голосов</b></div>
</div>
</div>
<div class="oa-bank-page page-game">
<div class="oa-bank-section">
<h3>игровые начисления</h3>
<div class="oa-bank-row" data-calc data-name="открыть игровой эпизод" data-price="100"><span>открыть игровой эпизод</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="закрыть игровой эпизод" data-price="150"><span>закрыть игровой эпизод</span><b>150 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="написать первый игровой пост" data-price="200"><span>написать первый игровой пост</span><b>200 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="написать sns-пост" data-price="50"><span>написать sns-пост</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="каждые 5 sns-постов" data-price="100"><span>каждые 5 sns-постов</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="пост до 3500 символов" data-price="100"><span>пост до 3500 символов</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="пост от 3500 до 7000 символов" data-price="200"><span>пост от 3500 до 7000 символов</span><b>200 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="пост от 7500 символов и выше" data-price="500"><span>пост от 7500 символов и выше</span><b>500 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="ответ в течение суток" data-price="200"><span>ответ в течение суток</span><b>200 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="что-то про соцсеть" data-price="200"><span>что-то про соцсеть</span><b>200 голосов</b></div>
</div>
</div>
<div class="oa-bank-page page-active">
<div class="oa-bank-section">
<h3>активность</h3>
<div class="oa-bank-row" data-calc data-name="первые 100 сообщений" data-price="100"><span>первые 100 сообщений</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="каждые 100 сообщений" data-price="50"><span>каждые 100 сообщений</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="каждые 100 позитива" data-price="50"><span>каждые 100 позитива</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="каждые 100 уважения" data-price="50"><span>каждые 100 уважения</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="быть на форуме 1 час" data-price="100"><span>быть на форуме 1 час</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="быть на форуме 3 часа" data-price="300"><span>быть на форуме 3 часа</span><b>300 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="каждые 10 реклам" data-price="100"><span>каждые 10 реклам</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="каждые 15 'это интересно'" data-price="50"><span>каждые 15 'это интересно'</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="создал флуд'" data-price="100"><span>создал флуд</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="добил флуд'" data-price="100"><span>добил флуд</span><b>100 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="участие в конкурсе'" data-price="50"><span>участие в конкурсе</span><b>50 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="попадание в таблицу" data-price="250"><span>попадание в таблицу</span><b>250 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="провёл на форуме 1 день" data-price="200"><span>провёл на форуме 1 день</span><b>200 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="провёл на форуме 15 дней" data-price="500"><span>провёл на форуме 15 дней</span><b>500 голосов</b></div>
<div class="oa-bank-row" data-calc data-name="провёл на форуме 30 дней" data-price="1000"><span>провёл на форуме 30 дней</span><b>1000 голосов</b>
</div>
</div>
</div>
<div class="oa-bank-page page-spend">
<div class="oa-bank-hero">
<h3>траты</h3>
<p>
Здесь можно выбрать позиции, на которые игрок тратит голоса. Нажимай на строку,
и она попадёт в левый счётчик во вкладку «тратить».
</p>
</div>
<div class="oa-bank-section">
<h3>магазин трат</h3>
<div class="oa-bank-row" data-spend data-name="первая смена внешности" data-price="0"><span>смена внешности</span><b>бесплатно</b></div>
<div class="oa-bank-row" data-spend data-name="смена внешности" data-price="1500"><span>смена внешности</span><b>1500 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="выкупить внешность на неделю" data-price="1000"><span>выкупить внешность на неделю</span><b>1000 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="выкупить внешность на 2 недели" data-price="2000"><span>выкупить внешность на неделю</span><b>2000 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="первый твин" data-price="0"><span>твин</span><b>бесплатно (с одобрения амс, коммент) </b></div>
<div class="oa-bank-row" data-spend data-name="твин" data-price="3500"><span>твин</span><b>3500 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="выписаться из списков" data-price="10000"><span>выписаться из списков</span><b>10000 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="аватар от амс" data-price="0"><span>индивидуальный фон</span><b>только в кредит ахах</b></div>
<div class="oa-bank-row" data-spend data-name="индивидуальный фон" data-price="2000"><span>индивидуальный фон</span><b>2000 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="индивидуальная плашка" data-price="1500"><span>индивидуальная плашка</span><b>1500 голосов</b></div>
<div class="oa-bank-row" data-spend data-name="индивидуальная иконка" data-price="1000"><span>индивидуальная иконка</span><b>1000 голосов</b></div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
(function () {
var bank = document.querySelector('.oa-bank');
if (!bank) return;
var incomeRows = bank.querySelectorAll('.oa-bank-row[data-calc]');
var spendRows = bank.querySelectorAll('.oa-bank-row[data-spend]');
var incomeTab = bank.querySelector('#oaReaderIncomeTab');
var spendTab = bank.querySelector('#oaReaderSpendTab');
var incomePanel = bank.querySelector('#oaReaderIncome');
var spendPanel = bank.querySelector('#oaReaderSpend');
var incomeBox = bank.querySelector('#oaBankPicked');
var incomeTotal = bank.querySelector('#oaBankTotal');
var incomeResult = bank.querySelector('#oaBankResult');
var incomeCopy = bank.querySelector('#oaBankCopy');
var incomeClear = bank.querySelector('#oaBankClear');
var spendBox = bank.querySelector('#oaSpendPicked');
var spendTotal = bank.querySelector('#oaSpendTotal');
var spendResult = bank.querySelector('#oaSpendResult');
var spendCopy = bank.querySelector('#oaSpendCopy');
var spendClear = bank.querySelector('#oaSpendClear');
var incomeItems = [];
var spendItems = [];
function bbOpen() {
return '[' + 'b' + ']';
}
function bbClose() {
return '[' + '/' + 'b' + ']';
}
function word(num) {
var n = Math.abs(num) % 100;
var n1 = n % 10;
if (n > 10 && n < 20) return 'голосов';
if (n1 > 1 && n1 < 5) return 'голоса';
if (n1 === 1) return 'голос';
return 'голосов';
}
function switchReader(mode) {
if (mode === 'spend') {
incomeTab.classList.remove('active');
spendTab.classList.add('active');
incomePanel.classList.remove('active');
spendPanel.classList.add('active');
} else {
spendTab.classList.remove('active');
incomeTab.classList.add('active');
spendPanel.classList.remove('active');
incomePanel.classList.add('active');
}
}
function getTotal(items) {
var total = 0;
items.forEach(function (item) {
total += item.price * (parseInt(item.count, 10) || 0);
});
return total;
}
/* ЗДЕСЬ МЕНЯЕТСЯ ГОТОВЫЙ КОД ДЛЯ НАЧИСЛЕНИЙ */
function buildIncomeText() {
var total = getTotal(incomeItems);
var lines = [];
incomeItems.forEach(function (item) {
var count = parseInt(item.count, 10) || 0;
var sum = item.price * count;
var detail = count > 1 ? ' x ' + count : '';
if (sum > 0) {
lines.push('— ' + item.name + detail + ': ' + sum + ' ' + word(sum));
}
});
incomeTotal.textContent = total + ' ' + word(total);
incomeResult.value =
bbOpen() + 'за что:' + bbClose() + '\n' +
(lines.length ? lines.join('\n') : '— ') +
'\n' + bbOpen() + 'доказательства:' + bbClose() + '\n' +
'\n' + bbOpen() + 'сумма:' + bbClose() + ' ' + total + ' ' + word(total) +
'\n' + bbOpen() + 'итого на балансе:' + bbClose();
}
/* ЗДЕСЬ МЕНЯЕТСЯ ГОТОВЫЙ КОД ДЛЯ ТРАТ */
function buildSpendText() {
var total = getTotal(spendItems);
var lines = [];
spendItems.forEach(function (item) {
var count = parseInt(item.count, 10) || 0;
var sum = item.price * count;
var detail = count > 1 ? ' x ' + count : '';
if (sum > 0) {
lines.push('— ' + item.name + detail + ': ' + sum + ' ' + word(sum));
}
});
spendTotal.textContent = total + ' ' + word(total);
spendResult.value =
bbOpen() + 'что берём:' + bbClose() + '\n' +
(lines.length ? lines.join('\n') : '— ') +
'\n' + bbOpen() + 'исхи и пожелания:' + bbClose() + '\n' +
'\n' + bbOpen() + 'скока тратим:' + bbClose() + ' ' + total + ' ' + word(total) +
'\n' + bbOpen() + 'скока осталось:' + bbClose();
}
function renderList(box, items, emptyText, mode) {
box.innerHTML = '';
if (!items.length) {
box.innerHTML = '<span>' + emptyText + '</span>';
if (mode === 'income') buildIncomeText();
if (mode === 'spend') buildSpendText();
return;
}
items.forEach(function (item, index) {
var count = parseInt(item.count, 10) || 0;
var sum = item.price * count;
var el = document.createElement('div');
el.className = 'oa-picked-item';
el.innerHTML =
'<strong>' + item.name + '</strong>' +
'<em>' + sum + ' ' + word(sum) + '</em>' +
'<div class="oa-picked-controls">' +
'<button type="button" class="oa-picked-minus" data-mode="' + mode + '" data-index="' + index + '">-</button>' +
'<input type="number" min="0" value="' + count + '" data-mode="' + mode + '" data-index="' + index + '" placeholder="сколько раз?">' +
'<button type="button" class="oa-picked-plus" data-mode="' + mode + '" data-index="' + index + '">+</button>' +
'</div>' +
'<button type="button" class="oa-picked-remove" data-mode="' + mode + '" data-index="' + index + '">убрать</button>';
box.appendChild(el);
});
if (mode === 'income') buildIncomeText();
if (mode === 'spend') buildSpendText();
}
function renderIncome() {
renderList(incomeBox, incomeItems, 'нажми на позиции справа', 'income');
}
function renderSpend() {
renderList(spendBox, spendItems, 'нажми на траты справа', 'spend');
}
function addItem(items, name, price) {
var exists = items.find(function (item) {
return item.name === name;
});
if (exists) {
exists.count += 1;
} else {
items.push({
name: name,
price: price,
count: 1
});
}
}
function updateInput(target) {
var mode = target.dataset.mode;
var index = parseInt(target.dataset.index, 10);
var items = mode === 'spend' ? spendItems : incomeItems;
if (!items[index]) return;
items[index].count = parseInt(target.value, 10) || 0;
var item = items[index];
var sum = item.price * item.count;
var pickedItem = target.closest('.oa-picked-item');
if (pickedItem) {
pickedItem.querySelector('em').textContent = sum + ' ' + word(sum);
}
if (mode === 'spend') {
buildSpendText();
} else {
buildIncomeText();
}
}
function handlePickedClick(e) {
var mode = e.target.dataset.mode;
if (!mode) return;
var items = mode === 'spend' ? spendItems : incomeItems;
var index = parseInt(e.target.dataset.index, 10);
if (!items[index]) return;
if (e.target.classList.contains('oa-picked-remove')) {
items.splice(index, 1);
}
if (e.target.classList.contains('oa-picked-minus')) {
items[index].count = Math.max(0, (parseInt(items[index].count, 10) || 0) - 1);
}
if (e.target.classList.contains('oa-picked-plus')) {
items[index].count = (parseInt(items[index].count, 10) || 0) + 1;
}
if (mode === 'spend') {
renderSpend();
} else {
renderIncome();
}
}
incomeRows.forEach(function (row) {
row.addEventListener('click', function () {
addItem(incomeItems, row.dataset.name, parseInt(row.dataset.price, 10) || 0);
switchReader('income');
renderIncome();
});
});
spendRows.forEach(function (row) {
row.addEventListener('click', function () {
addItem(spendItems, row.dataset.name, parseInt(row.dataset.price, 10) || 0);
switchReader('spend');
renderSpend();
});
});
incomeTab.addEventListener('click', function () {
switchReader('income');
});
spendTab.addEventListener('click', function () {
switchReader('spend');
});
incomeBox.addEventListener('focusin', function (e) {
if (e.target.matches('input') && e.target.value === '0') e.target.value = '';
});
spendBox.addEventListener('focusin', function (e) {
if (e.target.matches('input') && e.target.value === '0') e.target.value = '';
});
incomeBox.addEventListener('input', function (e) {
if (e.target.matches('input')) updateInput(e.target);
});
spendBox.addEventListener('input', function (e) {
if (e.target.matches('input')) updateInput(e.target);
});
incomeBox.addEventListener('focusout', function (e) {
if (e.target.matches('input') && e.target.value === '') {
e.target.value = '0';
updateInput(e.target);
}
});
spendBox.addEventListener('focusout', function (e) {
if (e.target.matches('input') && e.target.value === '') {
e.target.value = '0';
updateInput(e.target);
}
});
incomeBox.addEventListener('click', handlePickedClick);
spendBox.addEventListener('click', handlePickedClick);
incomeCopy.addEventListener('click', function () {
incomeResult.select();
document.execCommand('copy');
incomeCopy.textContent = 'скопировано';
setTimeout(function () {
incomeCopy.textContent = 'скопировать';
}, 1200);
});
spendCopy.addEventListener('click', function () {
spendResult.select();
document.execCommand('copy');
spendCopy.textContent = 'скопировано';
setTimeout(function () {
spendCopy.textContent = 'скопировать';
}, 1200);
});
incomeClear.addEventListener('click', function () {
incomeItems = [];
renderIncome();
});
spendClear.addEventListener('click', function () {
spendItems = [];
renderSpend();
});
renderIncome();
renderSpend();
})();
</script>
[/html][/hideprofile]
начислить Код: [b]за что:[/b] [b]доказательства:[/b] [b]сумма:[/b] [b]итого на балансе:[/b] | потратить Код: [b]что берём:[/b] [b]скока тратим:[/b] [b]скока осталось:[/b] |
