feat: adiciona gerenciador dinamico de personagens para a Fabrica de Quadrinhos com nomes e tipos customizados
This commit is contained in:
+67
-9
@@ -3515,12 +3515,61 @@ const initApp = () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Toggle ativo personagens principais
|
// Gerenciador dinâmico de personagens
|
||||||
document.querySelectorAll('.btn-comics-char').forEach(btn => {
|
const comicsCharListContainer = document.getElementById('comicsCharListContainer');
|
||||||
btn.addEventListener('click', () => {
|
const btnAddHumanChar = document.getElementById('btnAddHumanChar');
|
||||||
btn.classList.toggle('active');
|
const btnAddAnimalChar = document.getElementById('btnAddAnimalChar');
|
||||||
|
|
||||||
|
const addCharacterRow = (type = '', name = '', isAnimal = false) => {
|
||||||
|
const row = document.createElement('div');
|
||||||
|
row.className = 'comic-char-row';
|
||||||
|
row.style.cssText = 'display: flex; gap: 8px; align-items: center; background: var(--bg-primary); padding: 8px; border-radius: 8px; border: 1px solid var(--border-light);';
|
||||||
|
|
||||||
|
const emoji = document.createElement('span');
|
||||||
|
emoji.style.fontSize = '1.1rem';
|
||||||
|
emoji.textContent = isAnimal ? '🐾' : '🧒';
|
||||||
|
row.appendChild(emoji);
|
||||||
|
|
||||||
|
const typeInput = document.createElement('input');
|
||||||
|
typeInput.type = 'text';
|
||||||
|
typeInput.className = 'obs-input char-type-input';
|
||||||
|
typeInput.placeholder = isAnimal ? 'Tipo (ex: Gatinho, Leão)' : 'Tipo (ex: Menino, Menina)';
|
||||||
|
typeInput.value = type;
|
||||||
|
typeInput.style.cssText = 'flex: 1; padding: 6px 10px; font-size: 0.85rem; margin: 0;';
|
||||||
|
row.appendChild(typeInput);
|
||||||
|
|
||||||
|
const nameInput = document.createElement('input');
|
||||||
|
nameInput.type = 'text';
|
||||||
|
nameInput.className = 'obs-input char-name-input';
|
||||||
|
nameInput.placeholder = 'Nome';
|
||||||
|
nameInput.value = name;
|
||||||
|
nameInput.style.cssText = 'flex: 1; padding: 6px 10px; font-size: 0.85rem; margin: 0;';
|
||||||
|
row.appendChild(nameInput);
|
||||||
|
|
||||||
|
const deleteBtn = document.createElement('button');
|
||||||
|
deleteBtn.type = 'button';
|
||||||
|
deleteBtn.className = 'btn-delete-char';
|
||||||
|
deleteBtn.innerHTML = '×';
|
||||||
|
deleteBtn.style.cssText = 'background: none; border: none; color: #ef4444; font-size: 1.3rem; cursor: pointer; padding: 0 4px; line-height: 1;';
|
||||||
|
deleteBtn.addEventListener('click', () => {
|
||||||
|
row.remove();
|
||||||
});
|
});
|
||||||
});
|
row.appendChild(deleteBtn);
|
||||||
|
|
||||||
|
comicsCharListContainer.appendChild(row);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (btnAddHumanChar) {
|
||||||
|
btnAddHumanChar.addEventListener('click', () => {
|
||||||
|
addCharacterRow('', '', false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (btnAddAnimalChar) {
|
||||||
|
btnAddAnimalChar.addEventListener('click', () => {
|
||||||
|
addCharacterRow('', '', true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Exibir/ocultar cenário personalizado
|
// Exibir/ocultar cenário personalizado
|
||||||
if (comicsCenarioSelect) {
|
if (comicsCenarioSelect) {
|
||||||
@@ -3543,6 +3592,11 @@ const initApp = () => {
|
|||||||
comicsVideoLoader.style.display = 'none';
|
comicsVideoLoader.style.display = 'none';
|
||||||
btnGenerateComics.disabled = false;
|
btnGenerateComics.disabled = false;
|
||||||
comicsLoaderProgress.style.width = '0%';
|
comicsLoaderProgress.style.width = '0%';
|
||||||
|
|
||||||
|
// Inicializar lista de personagens com padrão se estiver vazia
|
||||||
|
comicsCharListContainer.innerHTML = '';
|
||||||
|
addCharacterRow("Menino", "Lucas", false);
|
||||||
|
addCharacterRow("Menina", "Mariana", false);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (barBtnComics) {
|
if (barBtnComics) {
|
||||||
@@ -3591,14 +3645,18 @@ const initApp = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reunir personagens selecionados
|
// Reunir personagens dinamicamente
|
||||||
const personagens = [];
|
const personagens = [];
|
||||||
document.querySelectorAll('.btn-comics-char.active').forEach(b => {
|
document.querySelectorAll('.comic-char-row').forEach(row => {
|
||||||
personagens.push(b.textContent.trim());
|
const type = row.querySelector('.char-type-input').value.trim();
|
||||||
|
const name = row.querySelector('.char-name-input').value.trim();
|
||||||
|
if (type && name) {
|
||||||
|
personagens.push(`${type} chamado(a) ${name}`);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (personagens.length === 0) {
|
if (personagens.length === 0) {
|
||||||
alert('Selecione pelo menos um personagem principal.');
|
alert('Adicione e preencha pelo menos um personagem principal.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-6
@@ -786,12 +786,17 @@
|
|||||||
|
|
||||||
<!-- PERSONAGENS -->
|
<!-- PERSONAGENS -->
|
||||||
<div class="settings-group">
|
<div class="settings-group">
|
||||||
<label style="color: var(--text-secondary); font-size: 0.82rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px;">5. Personagens Principais</label>
|
<label style="color: var(--text-secondary); font-size: 0.82rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; display: flex; justify-content: space-between; align-items: center;">
|
||||||
<div style="display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px;">
|
<span>5. Personagens da História</span>
|
||||||
<button type="button" class="btn-music-option btn-comics-char active" data-char="lucas" style="flex: 1; min-width: 120px;">🧒 Lucas (Criança)</button>
|
<div style="display: flex; gap: 8px;">
|
||||||
<button type="button" class="btn-music-option btn-comics-char" data-char="mariana" style="flex: 1; min-width: 120px;">👧 Mariana (Criança)</button>
|
<button type="button" id="btnAddHumanChar" class="btn-music-option" style="padding: 3px 8px; font-size: 0.72rem; border-color: var(--brand-pink); color: var(--brand-pink); background: rgba(219, 39, 119, 0.05); margin: 0;">+ 🧒 Humano</button>
|
||||||
<button type="button" class="btn-music-option btn-comics-char" data-char="animais" style="flex: 1; min-width: 120px;">🐾 Animais da Floresta</button>
|
<button type="button" id="btnAddAnimalChar" class="btn-music-option" style="padding: 3px 8px; font-size: 0.72rem; border-color: var(--brand-pink); color: var(--brand-pink); background: rgba(219, 39, 119, 0.05); margin: 0;">+ 🐾 Animal</button>
|
||||||
<button type="button" class="btn-music-option btn-comics-char" data-char="professor" style="flex: 1; min-width: 120px;">👩🏫 Professora Camila</button>
|
</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
<!-- Lista Dinâmica de Personagens -->
|
||||||
|
<div id="comicsCharListContainer" style="display: flex; flex-direction: column; gap: 8px; margin-top: 6px;">
|
||||||
|
<!-- Itens adicionados dinamicamente por JavaScript -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user