Mudanças entre as edições de "Widget:Droflax"
| Linha 1: | Linha 1: | ||
<h3>🛒 Carrinho de Compras</h3> | <h3>🛒 Carrinho de Compras</h3> | ||
<div id="carrinho-container"></div> | <div id="carrinho-container"></div> | ||
<div id="carrinho-total" style="font-weight: bold; margin-top: 10px;"></div> | <div id="carrinho-total" style="font-weight: bold; margin-top: 10px;"></div> | ||
| Linha 23: | Linha 9: | ||
<script> | <script> | ||
// | // Carrinho | ||
const carrinho = {}; | |||
let receitas = {}; | let receitas = {}; | ||
// Función para cargar las recetas desde el JSON | |||
async function cargarReceitas() { | |||
// Función para cargar las recetas desde el JSON | |||
async function | |||
try { | try { | ||
const response = await fetch('https://wiki.gla.com.br/index.php?title=Receitas.json&action=raw' | 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 = { | receitas = { | ||
baratie: { | baratie: Object.entries(data.baratie).map(([id, item]) => ({ | ||
id, | |||
nome: item.nome, | |||
}, | preco: item.cost, | ||
alianca: { | img: item.thumb | ||
})), | |||
alianca: Object.entries(data.alianca).map(([id, item]) => ({ | |||
} | id, | ||
nome: item.nome, | |||
preco: item.cost, | |||
img: item.thumb | |||
})) | |||
}; | }; | ||
renderizarReceitas(); | 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 | // Renderizar receitas | ||
function renderizarReceitas() { | function renderizarReceitas() { | ||
renderizarSecao('baratie'); | renderizarSecao('baratie'); | ||
| Linha 81: | Linha 48: | ||
} | } | ||
function renderizarSecao(secao) { | function renderizarSecao(secao) { | ||
const container = document.getElementById(`receitas-${secao}`); | const container = document.getElementById(`receitas-${secao}`); | ||
if (!container | if (!container) return; | ||
container.innerHTML = ''; | container.innerHTML = ''; | ||
receitas[secao].forEach(receita => { | |||
const card = document.createElement('div'); | const card = document.createElement('div'); | ||
card.className = 'receita-card'; | card.className = 'receita-card'; | ||
card.innerHTML = ` | card.innerHTML = ` | ||
<img src="${receita. | <img src="${receita.img}" width="64" height="64" /> | ||
<div class="receita-nome">${receita.nome}</div> | <div class="receita-nome">${receita.nome}</div> | ||
<div class="receita-preco">${receita. | <div class="receita-preco">${receita.preco.toLocaleString()} Berry</div> | ||
<button onclick="adicionarAoCarrinho('${id}')">➕</button> | <button onclick="adicionarAoCarrinho('${receita.id}')">➕</button> | ||
`; | `; | ||
container.appendChild(card); | container.appendChild(card); | ||
} | }); | ||
} | } | ||
// | // Funções do carrinho | ||
function adicionarAoCarrinho(id) { | function adicionarAoCarrinho(id) { | ||
let receita = encontrarReceita(id); | let receita = encontrarReceita(id); | ||
| Linha 107: | Linha 73: | ||
if (!carrinho[id]) { | if (!carrinho[id]) { | ||
carrinho[id] = { | carrinho[id] = { ...receita, quantidade: 1 }; | ||
} else { | } else { | ||
carrinho[id].quantidade++; | carrinho[id].quantidade++; | ||
| Linha 121: | Linha 82: | ||
function encontrarReceita(id) { | function encontrarReceita(id) { | ||
for (const secao in receitas) { | for (const secao in receitas) { | ||
const receita = receitas[secao].find(r => r.id === id); | |||
if (receita) return receita; | |||
} | } | ||
return null; | return null; | ||
| Linha 218: | Linha 173: | ||
document.getElementById('mostrar-total').addEventListener('click', mostrarTotal); | document.getElementById('mostrar-total').addEventListener('click', mostrarTotal); | ||
// | // Cargar las recetas al iniciar | ||
document.addEventListener('DOMContentLoaded', cargarReceitas); | |||
document.addEventListener('DOMContentLoaded', | |||
</script> | </script> | ||
Edição das 18h35min de 8 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();
alert(`Total atual: ${total.toLocaleString()} Berry`);
}
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);
// Cargar las recetas al iniciar document.addEventListener('DOMContentLoaded', cargarReceitas); </script>