-
Notifications
You must be signed in to change notification settings - Fork 13
BasePluginVisor_es
Este objeto básicamente funciona igual que BasePlugin excepto que está diseñado para que sea usado por el visor y el exportador, así que mucha de la funcionalidad que incluye BasePlugin no es necesaria aquí.
- Las siguientes propiedades o funciones funcionan exactamente igual que en
BasePlugin: descendant, init, create. -
export: es el método principal de
BasePluginVisor, ya que devuelve lo que el visor mostrará. Recibe tres parámetros, el estado del plugin (que se almacena en el núcleo), su nombre y si tiene hijos. Esta última distinción se hace porque en caso de no tenerlos, se puede devolver el HTML generado por la plantilla con un pequeño tratamiento, mientras que en caso contrario, es necesario hacer más cosas.
Lo primero que se hace es instanciar la definición del plugin (según cuál esté definida) ya que las almacenadas hasta este momento son instancias de BasePlugin o BasePluginVisor y no tienen acceso a las plantillas de los plugins y se guarda en una variable si se ha usado la definición del visor o no.
Tras esto, se obtiene la plantilla definida en el plugin si la hubiera (los plugins basados en texto no tienen por qué definirla, en este caso se obtiene la propiedad __text almacenada en el estado) y se buscan todas las ocurrencias del texto $dali$, que se usa para identificar las declaraciones de funciones incrustadas en el HTML. Una vez encontradas, se asegura que reciben como parámetro el evento correspondiente, el propio elemento que escucha el evento y el contenedor de toda la plantilla y se elimina el texto $dali$ y la de la propiedad de CSS pointer-events: none (si se encontrara). Tras esto, si no tiene hijos se devuelve el resultado de lo hecho hasta ahora y si los tuviera, se transforma a JSON, se procesa como se explicará más adelante y se devuelve ese resultado.
- parseJson: esta función va recorriendo recursivamente el JSON generado para tratarlo siguiendo una serie de instrucciones y recibe tres parámetros, el JSON, el estado, si se ha usado la definición del visor o la del editor.
Primero, si detecta que un elemento es padre de un <plugin /> calcula la altura que debe tener según lo que esté guardado en el estado en la propiedad "__pluginContainerIds" y asigna al hijo el atributo "data-plugin-height" que necesitará en un futuro.
Tras esto, todos los atributos llamados className son sustituidos por class, ya que esto es necesario sólo si se va a usar React. Esta sustitución de class a className se hace en la librería html2json, por lo que en el caso de llamarse a export y el elemento no tuviera hijos, se exporta directamente el HTML proporcionado por la plantilla.
Por último, si el elemento inspeccionado es un <plugin />, se le asigna el atributo "plugin-data-id" almacenado en el estado y que necesitará en el futuro para poder renderizar su contenido correctamente.
- extraFunctions: es un diccionario de funciones "extra" registradas en el plugin para que puedan ser accesibles desde otros plugins. La clave es el alias otorgado a la función y el valor asignado es una referencia a la misma.
- registerExtraFunction: registra una función "extra" que será accesible desde el resto de plugins. Recibe dos parámetros, la función a registrar y un alias para poder poner un nombre más amigable a la función. En caso de no proporcionar el alias, se usa el nombre de la función.
- getExtraFunctions: devuelve el objeto extraFunctions con las funciones extra previamente registradas.
- callExtraFunction: recibe dos parámetros, el alias del plugin cuya función extra se quiere invocar y el alias de la función. Invoca esta función.