Hola! Estoy intentando crear un componente de tema para usar el script externo tabbis.js para poder crear pestañas en las publicaciones. Seguí el tutorial aquí: Embed widget within text in a topic - #2 by Johani
Así es como se ve mi componente de tema hasta ahora.
Común > Encabezado
<script type="text/discourse-plugin" version="0.8">
// options
const TABBIS_SCRIPT_SRC = "https://cdn.jsdelivr.net/gh/jenstornell/tabbis.js/assets/js/src/tabbis.es6.js";
// usamos la biblioteca Discourse Load script para asegurar que los scripts se carguen
// correctamente. No te preocupes, esto es lo suficientemente inteligente como para no duplicar el script
// si ya está cargado
const loadScript = require("discourse/lib/load-script").default;
// crear un decorador de publicación
api.decorateCookedElement(
post => {
// ¿tiene esta publicación pestañas tabbis?
const tabbisTabs = post.querySelectorAll('[data-wrap="tabbis"]');
// Sí, así que vamos a hacer algo de trabajo.
if (tabbisTabs.length) {
// para cada widget tabbis
tabbisTabs.forEach(tabbisTab => {
// cargar el script tabbis.
loadScript(TABBIS_SCRIPT_SRC).then(() => {
// todo está listo, llamemos al script tabbis
tabbis();
});
});
}
},
// añadir un id al decorador para evitar fugas de memoria
{ id: "render-tabbis-tabs" }
);
</script>
Común > CSS (copiado directamente del repositorio de tabbis.js)
[data-panes] {
--color: #000; }
[data-tabs] {
background: var(--color);
border: 2px solid var(--color);
border-bottom: none;
overflow-x: auto;
display: flex; }
[data-tabs] > [role="tab"] {
all: unset;
padding: .75rem 1.5rem;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
font-weight: 600;
color: #fff;
border: 1px solid transparent;
outline: none; }
[data-tabs] > [role="tab"]:hover {
background: rgba(255, 255, 255, 0.2); }
[data-tabs] > [role="tab"]:active {
background: rgba(255, 255, 255, 0.3); }
[data-tabs] > [role="tab"]:focus {
border: 1px dotted rgba(255, 255, 255, 0.5); }
[data-tabs] > [role="tab"][aria-selected="true"] {
background: #fff;
color: #000; }
[data-tabs] > [role="tab"][aria-selected="true"]:focus {
border: 1px dotted rgba(0, 0, 0, 0.5); }
[data-panes] {
border: 2px solid var(--color);
border-top: none; }
[data-panes] > * {
background: #fff;
padding: 2rem;
font-weight: 600;
outline: none;
border: 1px solid transparent; }
[data-panes] > *:focus {
border: 1px dotted rgba(0, 0, 0, 0.5); }
@media screen and (max-width: 460px) {
[data-panes] > * {
padding: 1rem; } }
Script de Política de Seguridad de Contenido: se agregó https://cdn.jsdelivr.net
Marcado de publicación
[wrap="tabbis"]<div data-tabs>
<button>Tab1</button>
<button>Tab2</button>
<button>Tab3</button>
</div>
<div data-panes>
<div>Pane1</div>
<div>Pane2</div>
<div>Pane3</div>
</div>[/wrap]
El script parece cargarse por una fracción de segundo después de editar la publicación, pero una vez que se carga por completo, es inutilizable.
Esto aparece en la consola, pero no tengo idea de cómo solucionarlo. ¿Hay algún conflicto con otras pestañas en Discourse?
¿Cómo puedo hacer que esto funcione? ¡Estoy perdido!
