[hideprofile]
[html] <div id="bank-calculator-wrapper">
<div class='my-bank-calculator-bank'>
<div class='my-bank-calculator-account'>
<label for="initialAmount">Введите ваш баланс:</label>
<input type="number" id="initialAmount" value="0">
</div>
<p>В окошках укажите, сколько раз посчитать каждый пункт (укажите цифрами количество). Если считать не нужно, не указывайте ничего. Строки с примечаниями "дополнительно" начисляются за выполнение условий: например, вы получите за закрытие эпизода определённую сумму, но если сделаете это за неделю, то можете взять вместе с этим и дополнительный бонус.</p>
<div class='my-bank-calculator-banklist'>
<ul class='earn'>
<li data-bank="40" id='1' class='headli'><span class="item-description">регистрация</span><textarea></textarea></li>
<li data-bank="50"><span class="item-description">регистрация нужного</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">привести друга на форум [+ принятая анкета]</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">написание заявки в «хочу видеть»</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">написание заявки в «нужные»</span><textarea></textarea></li>
<li data-bank="35"><span class="item-description">написание группы «нужных»</span><textarea></textarea></li>
<li data-bank="5"><span class="item-description">предложить что-либо написавшему в «хочу к вам»</span><textarea></textarea></li>
<li data-bank="80" id='2' class='headli'><span class="item-description">открытие эпизода (каждому)</span><textarea></textarea></li>
<li data-bank="40"><span class="item-description">первый пост в эпизоде (каждому)</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">пост в снс</span><textarea></textarea></li>
<li data-bank="30"><span class="item-description">пост до 3к</span><textarea></textarea></li>
<li data-bank="40"><span class="item-description">пост от 3к</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">дополнительно: использование 1 сюжетной ситуации в посте</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">дополнительно: за ответ в течение суток</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">закрытие эпизода</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">дополнительно: эпизод закрыт за неделю или меньше</span><textarea></textarea></li>
<li data-bank="200"><span class="item-description">дополнительно: за закрытый эпизод с сюжетной ситуацией</span><textarea></textarea></li>
<li data-bank="20" id='3' class='headli'><span class="item-description">завести соцсеть</span><textarea></textarea></li>
<li data-bank="5"><span class="item-description">1 пост в соцсеть</span><textarea></textarea></li>
<li data-bank="150"><span class="item-description">проведение квеста</span><textarea></textarea></li>
<li data-bank="100"><span class="item-description">проведение ивента</span><textarea></textarea></li>
<li data-bank="20" id='4' class='headli'><span class="item-description">каждые 100 сообщений</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">каждые 100 плюсов репутации</span><textarea></textarea></li>
<li data-bank="10"><span class="item-description">каждые 100 плюсов позитива</span><textarea></textarea></li>
<li data-bank="50"><span class="item-description">попадание в таблицу [за каждую номинацию]</span><textarea></textarea></li>
<li data-bank="20"><span class="item-description">помощь с графикой</span><textarea></textarea></li>
<li data-bank="3"><span class="item-description">1 реклама</span><textarea></textarea></li>
<li data-bank="300"><span class="item-description">единоразово: баннер на одном арт-форуме</span><textarea></textarea></li>
</ul>
<ul class='spend'>
<li data-bank="400" id='5' class='headli'><span class="item-description">выкуп внешности для нужного/твина на 2 недели</span><textarea></textarea></li>
<li data-bank="300"><span class="item-description">выкупить имя/фамилию [для нужного/твина] на 2 недели</span><textarea></textarea></li>
<li data-bank="500"><span class="item-description">реклама с нужным [наша графика] на 2 недели</span><textarea></textarea></li>
<li data-bank="1600"><span class="item-description">вечный выкуп имени/фамилии [для нужного/твина]</span><textarea></textarea></li>
<li data-bank="100" id='6' class='headli'><span class="item-description">смена внешности [первый раз бесплатно]</span><textarea></textarea></li>
<li data-bank="100"><span class="item-description">смена имени [первый раз бесплатно]</span><textarea></textarea></li>
<li data-bank="300"><span class="item-description">смена персонажа [первый раз бесплатно]</span><textarea></textarea></li>
<li data-bank="2000" id='7' class='headli'><span class="item-description">заказ гма [один эпизод]</span><textarea></textarea></li>
<li data-bank="500"><span class="item-description">иммунитет от чистки [одной]</span><textarea></textarea></li>
<li data-bank="100"><span class="item-description">покупка места в таблице</span><textarea></textarea></li>
<li data-bank="500"><span class="item-description">получить награду ивента без выполнения заданий, если награда - оформление или спутник</span><textarea></textarea></li>
</ul>
</div>
<p>Скопируйте расчёт ниже и приложите необходимые ссылки-подтверждения, если требуется:</p>
<div class='my-bank-calculator-outbank'>
<h2>× <b>Доходы</b></h2>
<code id="outbankEarn"></code>
<h2>× <b>Расходы</b></h2>
<code id="outbankSpend"></code>
<h2>× <b>Итого в профиле</b></h2>
<code id="outbankResult"></code>
</div>
<button class="my-bank-calculator-copy-button">Копировать</button>
<button class="my-bank-calculator-resetButton">Сбросить всё</button>
</div>
</div>
<div id="copyMessage"></div>
<script>
const initialAmountInput = document.getElementById('initialAmount');
const earnList = document.querySelector('.earn');
const spendList = document.querySelector('.spend');
const outbankEarn = document.getElementById('outbankEarn');
const outbankSpend = document.getElementById('outbankSpend');
const outbankResult = document.getElementById('outbankResult');
const resetButton = document.querySelector('.my-bank-calculator-resetButton');
const copyButton = document.querySelector('.my-bank-calculator-copy-button');
const copyMessage = document.getElementById('copyMessage');
function calculateValues(list, isAddition) {
let total = 0;
let text = "";
const sign = isAddition ? '+' : '-';
for (let i = 0; i < list.children.length; i++) {
const item = list.children[i];
if (item.tagName === 'H3') continue;
const itemDescriptionSpan = item.querySelector('.item-description');
const itemDescription = itemDescriptionSpan ? itemDescriptionSpan.textContent : 'Неизвестный пункт';
const valueText = item.querySelector('textarea').value;
const values = valueText.split(',').map(v => parseFloat(v.trim())).filter(v => !isNaN(v));
if (values.length > 0) {
const bankValue = parseInt(item.dataset.bank);
let itemTotal = 0;
// Используем <p> для заголовка пункта, это создаст новую строку при innerText
text += `<p><strong>${itemDescription} (${sign}${bankValue}):</strong></p>`;
for (const value of values) {
const calculationResult = bankValue * value;
// Используем <p> для каждого вычисления, это создаст новую строку при innerText
text += `<p style="margin-left: 20px;">${sign}${bankValue} x ${value} = ${calculationResult}</p>`;
itemTotal += calculationResult;
}
if (values.length > 1) {
// Используем <p> для итога по пункту, это создаст новую строку при innerText
text += `<p style="margin-left: 20px;">Итого по пункту: ${itemTotal}</p>`;
}
total += itemTotal;
}
}
return { total, text };
}
function updateCalculation() {
let initialAmount = parseFloat(initialAmountInput.value) || 0;
const earnResult = calculateValues(earnList, true);
const spendResult = calculateValues(spendList, false);
let finalResult = initialAmount + earnResult.total - spendResult.total;
let difference = finalResult - initialAmount; // Вычисляем разницу
// Формируем текст для итогового блока с использованием <br> для отображения
let resultSummaryHTML = `Начальный баланс: ${initialAmount}<br>`;
resultSummaryHTML += `Всего начислено: ${earnResult.total}<br>`;
resultSummaryHTML += `Всего потрачено: ${spendResult.total}<br>`;
resultSummaryHTML += `Итого: ${finalResult}<br>`; // Добавляем перенос строки после Итого
resultSummaryHTML += `Разница с начальным балансом: ${difference}`; // Добавляем строку с разницей
outbankEarn.innerHTML = `<code>${earnResult.text}</code>`;
outbankSpend.innerHTML = `<code>${spendResult.text}</code>`;
outbankResult.innerHTML = resultSummaryHTML;
}
initialAmountInput.addEventListener('input', updateCalculation);
earnList.addEventListener('input', updateCalculation);
spendList.addEventListener('input', updateCalculation);
resetButton.addEventListener('click', () => {
initialAmountInput.value = '0';
earnList.querySelectorAll('textarea').forEach(textarea => textarea.value = '');
spendList.querySelectorAll('textarea').forEach(textarea => textarea.value = '');
outbankEarn.innerHTML = '';
outbankSpend.innerHTML = '';
outbankResult.innerHTML = '';
});
function addBankValueToListItem() {
const listItems = document.querySelectorAll('.my-bank-calculator-banklist li');
listItems.forEach(listItem => {
const bankNumber = listItem.dataset.bank;
const span = document.createElement('span');
span.textContent = bankNumber;
span.classList.add('bank-value');
const itemDescriptionSpan = listItem.querySelector('.item-description');
if (itemDescriptionSpan) {
listItem.insertBefore(span, itemDescriptionSpan);
} else {
listItem.insertBefore(span, listItem.firstChild);
}
});
}
addBankValueToListItem();
function showCopyMessage(message) {
copyMessage.textContent = message;
copyMessage.style.display = 'block';
setTimeout(() => {
copyMessage.style.display = 'none';
}, 2000);
}
function copyToClipboard() {
// Получаем заголовки и содержимое каждого блока по отдельности
const earnTitle = document.querySelector('.my-bank-calculator-outbank h2:nth-of-type(1)').innerText;
const earnContent = outbankEarn.innerText; // innerText сохранит переносы строк из <p>
const spendTitle = document.querySelector('.my-bank-calculator-outbank h2:nth-of-type(2)').innerText;
const spendContent = outbankSpend.innerText; // innerText сохранит переносы строк из <p>
const resultTitle = document.querySelector('.my-bank-calculator-outbank h2:nth-of-type(3)').innerText;
const resultContent = outbankResult.innerText; // innerText сохранит переносы строк из <br>
// Собираем текст для копирования, добавляя пустые строки между блоками
let textToCopy = `${earnTitle}\n${earnContent}\n\n`;
textToCopy += `${spendTitle}\n${spendContent}\n\n`;
textToCopy += `${resultTitle}\n${resultContent}\n`;
navigator.clipboard.writeText(textToCopy)
.then(() => {
showCopyMessage("Текст скопирован в буфер обмена!");
})
.catch(err => {
console.error('Failed to copy using Clipboard API: ', err);
const tempInput = document.createElement('textarea');
tempInput.value = textToCopy;
document.body.appendChild(tempInput);
tempInput.focus();
tempInput.select();
try {
document.execCommand('copy');
showCopyMessage('Текст скопирован в буфер обмена!');
} catch (e) {
console.error("execCommand('copy') failed", e);
showCopyMessage('Копирование не поддерживается вашим браузером. Пожалуйста, скопируйте текст вручную.');
} finally {
document.body.removeChild(tempInput);
}
});
}
copyButton.addEventListener('click', copyToClipboard);
updateCalculation();
</script>
[/html]














