Tipo personalizado no reconocido en la importación
Hola, Para que conste, cuando intento cambiar el retorno de isComponent, con un tipo definido en un plugin como este : 'isComponent: el => { if (el.tagName === 'DIV' && (typeof el.classList !== 'undefined' && el.classList.contains('imagelink-class'))) { return { type: 'marketing-button' }; } },` la importación reconoc...
Lee la respuesta completa abajo ↓Pregunta
Hola,
Consigo crear un nuevo tipo que contiene una imagen clickable. Pero, desafortunadamente, el nuevo tipo personalizado no es reconocido por el analizador HTML al importar.
Aquí está mi nuevo código fuente tipo:
'Editor. DomComponents.addType('imagelink', {
isComponent: el => {
if (el.tagName === 'DIV' && (typeof el.classList !== 'undefined' && el.classList.contains('imagelink-class'))) {
return { type: 'imagelink' };
}
},
modelo: {
Predeterminados: {
etiquetaNombre: 'div',
redimensionable: {keepAutoHeight: true},
Atributos: {clase: 'Clase Enlace Imagen', "Tipo de Datos": "Enlace Imagen"},
Droppable: falso,
Rasgos: [
{
tipo: 'href', etiqueta: 'Fuente', nombre: 'href'
},
{
tipo: 'select',
etiqueta: 'Target',
Nombre: 'Objetivo',
Opciones: [
{ valor: '', nombre: 'Esta ventana' },
{ valor: '_blank', nombre: 'Nueva ventana' }
]
}
],
Componentes: [
{
redimensionable: falso,
arrastrable: falso,
Droppable: falso,
seleccionable: false,
Hoverable: falso,
Tipo: 'Enlace',
componentes: [{
tipo: 'imagen',
atributos: {
src: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR U0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3R5bGU9ImZpbGw6IHJnEoMCwwLDAsMC4xNSk7IHRyYW5zZm9ybTogc2NhbGUoMC43NSkiPgogICAgICAgIDxwYXRoOMC43NSkiPgogICAgICAgIDxwYXRoIGQ9Ik04LjUgMTMuNWwyLjUgMyAzLjUtNC41IDQuNSA2SDVtMTYgMVY1YTIgMiAwIDAgMC0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnoiPjwvcGF0aD4KICAgICAgPC9zdmc+',
estilo:'ancho:100%;'
},
redimensionable: falso,
arrastrable: falso,
Droppable: falso,
Hoverable: falso,
seleccionable: false,
}]
}
]
},
init() {
this.on('change:attributes:href', this.handleHrefChange);
this.on('change:atributos:objetivo', this.handleTargetChange);
},
handleHrefChange: función ( componente, valor ) {
eliminar component.attributes.attributes.href;
eliminar component.atributos.atributos.objetivo;
component.atributos.componentes.modelos[0].atributos.atributos.href = valor;
return false;
},
handleTargetChange: función ( componente, valor ) {
eliminar component.attributes.attributes.href;
eliminar component.atributos.atributos.objetivo;
componentes.atributos.modelos[0].atributos.atributos.target = valor;
return false;
},
},
});`
Preciso la definición del nuevo tipo que se incluye en un plugin, que se pasa en la inicialización del editor:
var editor = grapesjs.init({
....
Plugins: [myplugin];
...
}
Intenté usar el parámetro isComponent para hacerlo, la condición es buena, pero el plugin renderiza todos los componentes del dom por separado ('<img>' y '<a>') en lugar del tipo "imagelink". Así que cuando hago clic en la imagen, no puedo cambiar los rasgos definidos en mi tipo.
Creo que me estoy perdiendo algunos puntos, pero no consigo entenderlo... ¿Podrías decirme qué te pasa?
Sé que es posible, por ejemplo el plugin 'gjs-social' y su tipo 'Social-link-block' funcionan perfectamente...
Un cordialRespuestas (3)
Hola,
Para que conste, cuando intento cambiar el retorno de isComponent, con un tipo definido en un plugin como este :
'isComponent: el => {
if (el.tagName === 'DIV' && (typeof el.classList !== 'undefined' && el.classList.contains('imagelink-class'))) {
return { type: 'marketing-button' };
}
},`
la importación reconocerá mis resultados del<div><a><img></a></div> DOM como un botón de marketing (definido en el plugin grapesjs-block-avance
Creo que me estoy perdiendo algo en la definición de tipo para ayudar a grapesjs a reconocer mi tipo en la importación...
Un cordialOtra curiosidad que podría ser lógica... Si intentara poner una función exótica isComponent así:
'if (el.tagName === 'ABCDE') { return { type: 'imagelink' }; }`
Y cuando intento importar este texto html: '<abcde>prueba</abcde>' El plugin detecta correctamente mi tipo personalizado "imagelink".
PERO, cuando importo este texto html: '<abcde><img src="ggggg"></abcde>'
No funcionó. Supongo que el plugin sigue yendo más allá en el reconocimiento de componentes y detecta el IMG y el dominante A, y anula para que la detección...
Creo que te estás perdiendo el sentido de los componentes. Tienes uno personalizado ('imagelink') y luego uno interno ('img'), así que el editor lo muestra y no veo problemas aquí. Para ver los rasgos del componente personalizado tienes que seleccionarlo y no tiene nada que ver con la imagen interna
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #2076
[PREGUNTA] ¿Cómo crear un nuevo componente que permita directivas de la hoja Laravel?
Hola, gracias por el buen trabajo. Me gustaría saber si hay alguna forma de usar las directivas de las cuchillas dentro del código. Ya añad...
Issue #1826
[Pregunta] ¿Cómo añadir un enlace a una imagen?
Hola Artur, ! captura ¿Cómo añadir un enlace a esta imagen? Si necesito crear un componente personalizado, por favor dadme algún código de...
Issue #3331
Gestor de activos personalizado
Hola @artf Seguí la documentación para crear un nuevo tipo de gestor de activos Aquí (https://codepen.io/abhi_punk81/pen/MWbWzaq) He creado...
Issue #3409
[PREGUNTA] Propiedad de componente personalizada que no es un rasgo
Me gustaría crear un componente personalizado con una propiedad que se actualice según un código específico, pero no quiero que esta propie...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.