Spaces:
Sleeping
Sleeping
Update app.py
Browse filesRetirei o botão copiar texto e usei o botão nativo
app.py
CHANGED
|
@@ -162,8 +162,8 @@ CACHE_DIR = Path("post_cache")
|
|
| 162 |
CACHE_DIR.mkdir(exist_ok=True)
|
| 163 |
|
| 164 |
# Nomes de arquivo padrão para download
|
| 165 |
-
CSV_FILENAME = "
|
| 166 |
-
ZIP_FILENAME = "
|
| 167 |
|
| 168 |
|
| 169 |
# ============================================
|
|
@@ -465,7 +465,6 @@ def _formatar_historico_para_html(history_list):
|
|
| 465 |
caracteres = stats.get('caracteres', 0)
|
| 466 |
hashtags = stats.get('hashtags', 0)
|
| 467 |
|
| 468 |
-
# CORREÇÃO: Aplicado 'cor_texto_clara' a todos os spans de texto
|
| 469 |
html += f"""
|
| 470 |
<div style='border: 1px solid {cor_fundo}; padding: 16px; margin: 12px 0;
|
| 471 |
border-radius: 8px; background-color: {cor_fundo}; color: {cor_texto_clara};
|
|
@@ -517,6 +516,8 @@ def criar_alerta(tipo, mensagem):
|
|
| 517 |
|
| 518 |
def copiar_feedback(texto):
|
| 519 |
# Esta função agora só retorna o alerta, o JS faz a cópia.
|
|
|
|
|
|
|
| 520 |
if texto:
|
| 521 |
return criar_alerta('success', '✅ Texto copiado!')
|
| 522 |
return criar_alerta('warning', '⚠️ Nada para copiar')
|
|
@@ -1258,8 +1259,10 @@ with gr.Blocks(theme=custom_theme, title="Gerador de Posts e Chatbot (Completo)"
|
|
| 1258 |
editor_locked = gr.State(True)
|
| 1259 |
refinar_btn = gr.Button("✏️ Refinar Post")
|
| 1260 |
|
|
|
|
|
|
|
|
|
|
| 1261 |
with gr.Row():
|
| 1262 |
-
copiar_btn = gr.Button("📋 Copiar Texto", variant="secondary")
|
| 1263 |
limpar_btn = gr.Button("🧹 Limpar Tudo", variant="stop")
|
| 1264 |
|
| 1265 |
gr.Markdown("") # Espaçamento
|
|
@@ -1519,57 +1522,7 @@ with gr.Blocks(theme=custom_theme, title="Gerador de Posts e Chatbot (Completo)"
|
|
| 1519 |
show_progress="full"
|
| 1520 |
)
|
| 1521 |
|
| 1522 |
-
#
|
| 1523 |
-
copiar_btn.click(
|
| 1524 |
-
fn=copiar_feedback,
|
| 1525 |
-
inputs=[texto_output],
|
| 1526 |
-
outputs=[status_output],
|
| 1527 |
-
_js="""
|
| 1528 |
-
(texto_do_output) => {
|
| 1529 |
-
// Tenta a API moderna (navigator.clipboard)
|
| 1530 |
-
if (navigator.clipboard && window.isSecureContext) {
|
| 1531 |
-
navigator.clipboard.writeText(texto_do_output)
|
| 1532 |
-
.then(() => {
|
| 1533 |
-
console.log("Texto copiado com sucesso (navigator.clipboard)");
|
| 1534 |
-
})
|
| 1535 |
-
.catch(err => {
|
| 1536 |
-
console.warn("Falha ao copiar (navigator.clipboard), tentando fallback...", err);
|
| 1537 |
-
// Fallback: Tentar execCommand
|
| 1538 |
-
const elem = document.createElement('textarea');
|
| 1539 |
-
elem.value = texto_do_output;
|
| 1540 |
-
elem.style.position = 'absolute';
|
| 1541 |
-
elem.style.left = '-9999px';
|
| 1542 |
-
document.body.appendChild(elem);
|
| 1543 |
-
elem.select();
|
| 1544 |
-
try {
|
| 1545 |
-
document.execCommand('copy');
|
| 1546 |
-
console.log("Texto copiado com sucesso (execCommand fallback)");
|
| 1547 |
-
} catch (e) {
|
| 1548 |
-
console.error("Falha ao copiar (execCommand fallback)", e);
|
| 1549 |
-
}
|
| 1550 |
-
document.body.removeChild(elem);
|
| 1551 |
-
});
|
| 1552 |
-
} else {
|
| 1553 |
-
// Fallback final para HTTP ou navegadores muito antigos
|
| 1554 |
-
const elem = document.createElement('textarea');
|
| 1555 |
-
elem.value = texto_do_output;
|
| 1556 |
-
elem.style.position = 'absolute';
|
| 1557 |
-
elem.style.left = '-9999px';
|
| 1558 |
-
document.body.appendChild(elem);
|
| 1559 |
-
elem.select();
|
| 1560 |
-
try {
|
| 1561 |
-
document.execCommand('copy');
|
| 1562 |
-
console.log("Texto copiado com sucesso (execCommand fallback 2)");
|
| 1563 |
-
} catch (e) {
|
| 1564 |
-
console.error("Falha ao copiar (execCommand fallback 2)", e);
|
| 1565 |
-
}
|
| 1566 |
-
document.body.removeChild(elem);
|
| 1567 |
-
}
|
| 1568 |
-
// Retorna o valor para a função Python (copiar_feedback)
|
| 1569 |
-
return texto_do_output;
|
| 1570 |
-
}
|
| 1571 |
-
"""
|
| 1572 |
-
)
|
| 1573 |
|
| 1574 |
# Lista de outputs para o botão Limpar
|
| 1575 |
limpar_outputs = [
|
|
@@ -1707,4 +1660,4 @@ with gr.Blocks(theme=custom_theme, title="Gerador de Posts e Chatbot (Completo)"
|
|
| 1707 |
# Lançar aplicação
|
| 1708 |
if __name__ == "__main__":
|
| 1709 |
demo.launch()
|
| 1710 |
-
|
|
|
|
| 162 |
CACHE_DIR.mkdir(exist_ok=True)
|
| 163 |
|
| 164 |
# Nomes de arquivo padrão para download
|
| 165 |
+
CSV_FILENAME = "posthistpeacechatbot001.csv"
|
| 166 |
+
ZIP_FILENAME = "postpeacechatbot001.zip"
|
| 167 |
|
| 168 |
|
| 169 |
# ============================================
|
|
|
|
| 465 |
caracteres = stats.get('caracteres', 0)
|
| 466 |
hashtags = stats.get('hashtags', 0)
|
| 467 |
|
|
|
|
| 468 |
html += f"""
|
| 469 |
<div style='border: 1px solid {cor_fundo}; padding: 16px; margin: 12px 0;
|
| 470 |
border-radius: 8px; background-color: {cor_fundo}; color: {cor_texto_clara};
|
|
|
|
| 516 |
|
| 517 |
def copiar_feedback(texto):
|
| 518 |
# Esta função agora só retorna o alerta, o JS faz a cópia.
|
| 519 |
+
# Esta função é chamada pelo _js, mas seu retorno (o alerta) não será usado.
|
| 520 |
+
# No entanto, é bom mantê-la para o caso de o _js ser removido novamente.
|
| 521 |
if texto:
|
| 522 |
return criar_alerta('success', '✅ Texto copiado!')
|
| 523 |
return criar_alerta('warning', '⚠️ Nada para copiar')
|
|
|
|
| 1259 |
editor_locked = gr.State(True)
|
| 1260 |
refinar_btn = gr.Button("✏️ Refinar Post")
|
| 1261 |
|
| 1262 |
+
# CORREÇÃO: Removido o botão de cópia e adicionada instrução
|
| 1263 |
+
gr.Markdown("ℹ️ *Use o ícone de prancheta (📋) no canto superior direito da caixa de texto para copiar o conteúdo.*")
|
| 1264 |
+
|
| 1265 |
with gr.Row():
|
|
|
|
| 1266 |
limpar_btn = gr.Button("🧹 Limpar Tudo", variant="stop")
|
| 1267 |
|
| 1268 |
gr.Markdown("") # Espaçamento
|
|
|
|
| 1522 |
show_progress="full"
|
| 1523 |
)
|
| 1524 |
|
| 1525 |
+
# CORREÇÃO: Removido o evento de cópia JS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1526 |
|
| 1527 |
# Lista de outputs para o botão Limpar
|
| 1528 |
limpar_outputs = [
|
|
|
|
| 1660 |
# Lançar aplicação
|
| 1661 |
if __name__ == "__main__":
|
| 1662 |
demo.launch()
|
| 1663 |
+
|