Mudanças entre as edições de "Widget:Droflax"
| Linha 7: | Linha 7: | ||
<button id="mostrar-total" class="acao-carrinho">Mostrar Total</button> | <button id="mostrar-total" class="acao-carrinho">Mostrar Total</button> | ||
</div> | </div> | ||
<div id="resumo-total" style="margin-top: 20px;"></div> | |||
<script> | <script> | ||
| Linha 122: | Linha 123: | ||
function mostrarTotal() { | function mostrarTotal() { | ||
const total = calcularTotal(); | const total = calcularTotal(); | ||
const resumoContainer = document.getElementById('resumo-total'); | |||
resumoContainer.innerHTML = ''; // Limpiar anterior | |||
const ingredientesTotais = {}; | |||
for (const id in carrinho) { | |||
const item = carrinho[id]; | |||
const receitaOriginal = encontrarReceita(id); | |||
if (!receitaOriginal || !receitaOriginal.ingredients) continue; | |||
receitaOriginal.ingredients.forEach(([nomeIngrediente, qtd]) => { | |||
const totalIngrediente = qtd * item.quantidade; | |||
if (!ingredientesTotais[nomeIngrediente]) { | |||
ingredientesTotais[nomeIngrediente] = 0; | |||
} | |||
ingredientesTotais[nomeIngrediente] += totalIngrediente; | |||
}); | |||
} | |||
// Crear HTML do resumo | |||
const titulo = document.createElement('h4'); | |||
titulo.innerText = '📦 Ingredientes Totais Necessários:'; | |||
resumoContainer.appendChild(titulo); | |||
const lista = document.createElement('ul'); | |||
for (const ingrediente in ingredientesTotais) { | |||
const li = document.createElement('li'); | |||
li.innerText = `${ingrediente}: ${ingredientesTotais[ingrediente]}`; | |||
lista.appendChild(li); | |||
} | |||
resumoContainer.appendChild(lista); | |||
const totalDiv = document.createElement('div'); | |||
totalDiv.style.fontWeight = 'bold'; | |||
totalDiv.style.marginTop = '10px'; | |||
totalDiv.innerText = `💰 Total: ${total.toLocaleString()} Berry`; | |||
resumoContainer.appendChild(totalDiv); | |||
} | } | ||
function calcularTotal() { | function calcularTotal() { | ||
Edição das 19h21min de 9 de abril de 2025
🛒 Carrinho de Compras
<button id="esvaziar-carrinho" class="acao-carrinho">Esvaziar Carrinho</button> <button id="mostrar-total" class="acao-carrinho">Mostrar Total</button>
<script> // Carrinho const carrinho = {}; let receitas = {};
// Función para cargar las recetas desde el JSON async function cargarReceitas() {
try {
const response = await fetch('https://wiki.gla.com.br/index.php?title=Receitas.json&action=raw');
const data = await response.json();
// Transformar la estructura del JSON al formato esperado por el código
receitas = {
baratie: Object.entries(data.baratie).map(([id, item]) => ({
id,
nome: item.nome,
preco: item.cost,
img: item.thumb
})),
alianca: Object.entries(data.alianca).map(([id, item]) => ({
id,
nome: item.nome,
preco: item.cost,
img: item.thumb
}))
};
renderizarReceitas();
} catch (error) {
console.error('Error al cargar las recetas:', error);
alert('No se pudieron cargar las recetas. Por favor, inténtalo más tarde.');
}
}
// Renderizar receitas function renderizarReceitas() {
renderizarSecao('baratie');
renderizarSecao('alianca');
}
function renderizarSecao(secao) {
const container = document.getElementById(`receitas-${secao}`);
if (!container) return;
container.innerHTML = ;
receitas[secao].forEach(receita => {
const card = document.createElement('div');
card.className = 'receita-card';
card.innerHTML = `
<img src="${receita.img}" width="64" height="64" />
<button onclick="adicionarAoCarrinho('${receita.id}')">➕</button>
`;
container.appendChild(card);
});
}
// Funções do carrinho function adicionarAoCarrinho(id) {
let receita = encontrarReceita(id); if (!receita) return;
if (!carrinho[id]) {
carrinho[id] = { ...receita, quantidade: 1 };
} else {
carrinho[id].quantidade++;
}
renderizarCarrinho();
}
function encontrarReceita(id) {
for (const secao in receitas) {
const receita = receitas[secao].find(r => r.id === id);
if (receita) return receita;
}
return null;
}
function alterarQuantidade(id, alteracao) {
if (alteracao === 100) {
carrinho[id].quantidade = 100;
} else {
carrinho[id].quantidade += alteracao;
}
if (carrinho[id].quantidade <= 0) {
delete carrinho[id];
}
renderizarCarrinho();
}
function atualizarQuantidadeManual(id, event) {
const novoValor = parseInt(event.target.value);
if (!isNaN(novoValor) && novoValor >= 0) {
if (novoValor === 0) {
delete carrinho[id];
} else {
carrinho[id].quantidade = novoValor;
}
renderizarCarrinho();
}
}
function esvaziarCarrinho() {
for (const id in carrinho) {
delete carrinho[id];
}
renderizarCarrinho();
}
function mostrarTotal() {
const total = calcularTotal();
const resumoContainer = document.getElementById('resumo-total');
resumoContainer.innerHTML = ; // Limpiar anterior
const ingredientesTotais = {};
for (const id in carrinho) {
const item = carrinho[id];
const receitaOriginal = encontrarReceita(id);
if (!receitaOriginal || !receitaOriginal.ingredients) continue;
receitaOriginal.ingredients.forEach(([nomeIngrediente, qtd]) => {
const totalIngrediente = qtd * item.quantidade;
if (!ingredientesTotais[nomeIngrediente]) {
ingredientesTotais[nomeIngrediente] = 0;
}
ingredientesTotais[nomeIngrediente] += totalIngrediente; }); }
// Crear HTML do resumo
const titulo = document.createElement('h4');
titulo.innerText = '📦 Ingredientes Totais Necessários:';
resumoContainer.appendChild(titulo);
const lista = document.createElement('ul');
for (const ingrediente in ingredientesTotais) {
const li = document.createElement('li');
li.innerText = `${ingrediente}: ${ingredientesTotais[ingrediente]}`;
lista.appendChild(li);
}
resumoContainer.appendChild(lista);
const totalDiv = document.createElement('div');
totalDiv.style.fontWeight = 'bold';
totalDiv.style.marginTop = '10px';
totalDiv.innerText = `💰 Total: ${total.toLocaleString()} Berry`;
resumoContainer.appendChild(totalDiv);
}
function calcularTotal() {
return Object.values(carrinho).reduce((sum, item) => sum + (item.preco * item.quantidade), 0);
}
function renderizarCarrinho() {
const container = document.getElementById('carrinho-container');
container.innerHTML = ;
let total = 0;
for (const id in carrinho) {
const item = carrinho[id];
const subtotal = item.preco * item.quantidade;
total += subtotal;
const itemDiv = document.createElement('div');
itemDiv.className = 'item-carrinho';
itemDiv.innerHTML = `
<img src="${item.img}" width="40" height="40" />
<button onclick="alterarQuantidade('${id}', -1)">−</button>
<input type="number" value="${item.quantidade}" min="0"
onchange="atualizarQuantidadeManual('${id}', event)">
<button onclick="alterarQuantidade('${id}', 1)">+</button>
<button class="btn-100" onclick="alterarQuantidade('${id}', 100)">x100</button>
<button class="remover-item" onclick="removerDoCarrinho('${id}')">🗑️</button>
`;
container.appendChild(itemDiv);
}
document.getElementById('carrinho-total').innerText = total > 0
? `Total: ${total.toLocaleString()} Berry`
: ;
}
function removerDoCarrinho(id) {
delete carrinho[id]; renderizarCarrinho();
}
// Event listeners document.getElementById('esvaziar-carrinho').addEventListener('click', esvaziarCarrinho); document.getElementById('mostrar-total').addEventListener('click', mostrarTotal);
// CSS document.head.insertAdjacentHTML('beforeend', ` <style>
.receitas-container {
display: flex;
flex-wrap: wrap;
gap: 16px;
margin-bottom: 24px;
}
.receita-card {
width: 150px;
text-align: center;
border: 1px solid #ccc;
border-radius: 8px;
padding: 8px;
background-color: #fff;
box-shadow: 2px 2px 4px rgba(0,0,0,0.1);
transition: transform 0.2s;
}
.receita-card:hover {
transform: scale(1.05);
}
.receita-nome {
font-weight: bold;
margin: 4px 0;
min-height: 3em; /* força ocupar duas linhas mesmo se o texto for curto */
line-height: 1.5em;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
.receita-preco {
margin-bottom: 6px;
}
.item-carrinho {
display: flex;
align-items: center;
gap: 12px;
padding: 8px;
border: 1px solid #ccc;
border-radius: 8px;
margin-bottom: 8px;
}
.info-carrinho {
flex: 1;
}
.controle-quantidade {
display: flex;
align-items: center;
gap: 4px;
margin-top: 4px;
}
.controle-quantidade input {
width: 50px;
text-align: center;
padding: 2px;
}
.controle-quantidade button {
width: 24px;
height: 24px;
}
.btn-100 {
width: auto !important;
padding: 0 4px;
margin-left: 4px;
font-size: 12px;
}
.remover-item {
background: none;
border: none;
cursor: pointer;
font-size: 16px;
}
.acao-carrinho {
padding: 8px 16px;
background-color: #4393ff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
.acao-carrinho:hover {
background-color: #3275c7;
}
#carrinho-container {
width: 25%;
}
</style> `);
// Cargar las recetas al iniciar document.addEventListener('DOMContentLoaded', cargarReceitas); </script>