Un complemento de Docsify es una función con la capacidad de ejecutar código JavaScript personalizado en varias etapas del ciclo de vida de Docsify.
Los complementos de Docsify se pueden agregar directamente al array plugins
:
window.$docsify = {
plugins: [
function myPlugin1(hook, vm) {
// ...
},
function myPlugin2(hook, vm) {
// ...
},
],
};
Alternativamente, un complemento se puede guardar en un archivo separado e "instalarlo" utilizando una etiqueta <script>
estándar:
// docsify-plugin-myplugin.js
{
function myPlugin(hook, vm) {
// ...
}
// Agrega el complemento al array de complementos de docsify
window.$docsify = window.$docsify || {};
$docsify.plugins = [...($docsify.plugins || []), myPlugin];
}
<script src="docsify-plugin-myplugin.js"></script>
A continuación, se muestra una plantilla de complemento con marcadores de posición para todos los hooks de ciclo de vida disponibles.
- Copia la plantilla.
- Modifica el nombre
myPlugin
según corresponda. - Agrega tu lógica de complemento.
- Elimina los hooks de ciclo de vida no utilizados.
- Guarda el archivo como
docsify-plugin-[nombre].js
. - Carga tu complemento utilizando una etiqueta
<script>
estándar.
{
function myPlugin(hook, vm) {
// Invocado una vez cuando se inicializa el script de Docsify
hook.init(() => {
// ...
});
// Invocado una vez cuando la instancia de Docsify se ha montado en el DOM
hook.mounted(() => {
// ...
});
// Invocado en cada carga de página antes de que el nuevo markdown se transforme a HTML.
// Admite tareas asincrónicas (consulte la documentación de beforeEach para obtener más detalles).
hook.beforeEach(markdown => {
// ...
return markdown;
});
// Invocado en cada carga de página después de que el nuevo markdown se ha transformado a HTML.
// Admite tareas asincrónicas (consulte la documentación de afterEach para obtener más detalles).
hook.afterEach(html => {
// ...
return html;
});
// Invocado en cada carga de página después de que el nuevo HTML se haya agregado al DOM
hook.doneEach(() => {
// ...
});
// Invocado una vez después de renderizar la página inicial
hook.ready(() => {
// ...
});
}
// Agrega el complemento al array de complementos de Docsify
window.$docsify = window.$docsify || {};
$docsify.plugins = [myPlugin, ...($docsify.plugins || [])];
}
Los hooks de ciclo de vida se proporcionan a través del argumento hook
pasado a la función del complemento.
Invocado una vez cuando se inicializa el script de Docsify.
hook.init(() => {
// ...
});
Invocado una vez cuando la instancia de Docsify se ha montado en el DOM.
hook.mounted(() => {
// ...
});
Invocado en cada carga de página antes de que el nuevo markdown se transforme a HTML.
hook.beforeEach(markdown => {
// ...
return markdown;
});
Para tareas asincrónicas, la función de hook acepta un segundo argumento next
. Llama a esta función con el valor final de markdown
cuando esté listo. Para evitar que los errores afecten a Docsify y otros complementos, envuelve el código asincrónico en un bloque try/catch/finally
.
hook.beforeEach((markdown, next) => {
try {
// Tarea(s) asincrónica(s)...
} catch (err) {
// ...
} finally {
next(markdown);
}
});
Invocado en cada carga de página después de que el nuevo markdown se ha transformado a HTML.
hook.afterEach(html => {
// ...
return html;
});
Para tareas asincrónicas, la función de hook acepta un segundo argumento next
. Llama a esta función con el valor final de html
cuando esté listo. Para evitar que los errores afecten a Docsify y otros complementos, envuelve el código asincrónico en un bloque try/catch/finally
.
hook.afterEach((html, next) => {
try {
// Tarea(s) asincrónica(s)...
} catch (err) {
// ...
} finally {
next(html);
}
});
Invocado en cada carga de página después de que el nuevo HTML se haya agregado al DOM.
hook.doneEach(() => {
// ...
});
Invocado una vez después de renderizar la página inicial.
hook.ready(() => {
// ...
});
- Accede a los métodos y propiedades de Docsify utilizando
window.Docsify
- Accede a la instancia actual de Docsify utilizando el argumento
vm
- Los desarrolladores que prefieran utilizar un depurador pueden configurar la opción de configuración
catchPluginErrors
enfalse
para permitir que su depurador pause la ejecución de JavaScript en caso de error. - Asegúrate de probar tu complemento en todas las plataformas admitidas y con las opciones de configuración relacionadas (si corresponde) antes de publicarlo.
window.$docsify = {
plugins: [
function pageFooter(hook, vm) {
const footer = /* html */ `
<hr/>
<footer>
<span><a href="https://github.com/QingWei-Li">cinwell</a> ©2017.</span>
<span>Publicado con orgullo utilizando <a href="https://github.com/docsifyjs/docsify" target="_blank">docsify</a>.</span>
</footer>
`;
hook.afterEach(html => {
return html + footer;
});
},
],
};
window.$docsify = {
plugins: [
function editButton(hook, vm) {
// El patrón de plantilla de fecha
$docsify.formatUpdated = '{YYYY}/{MM}/{DD} {HH}:{mm}';
hook.beforeEach(html => {
const url =
'https://github.com/docsifyjs/docsify/blob/master/docs/' +
vm.route.file;
const editHtml = '[📝 EDITAR DOCUMENTO](' + url + ')\n';
return (
editHtml +
html +
'\n----\n' +
'Última modificación {docsify-updated}' +
editHtml
);
});
},
],
};