Desarrollo para Sidekick

El objetivo de este documento es explicar cómo los desarrolladores pueden interactuar con la barra de tareas y cómo se puede personalizar a nivel de proyecto.

Eventos

La barra de tareas emite los siguientes eventos:

Nombre del evento
Elemento de destino
Carga útil
Descripción
sidekick-ready
document
-
El elemento de la barra de tareas tiene se ha añadido al DOM y está listo para su uso.
previewed
aem-sidekick
(cadena) La(s) ruta(s) de recurso previsualizado
Se ha seleccionado el botón Vista previa pulsado.
updated
aem-sidekick
(cadena) La ruta del recurso actualizado
Se ha pulsado el botón Recargar pulsado.
published
aem-sidekick
(cadena) La ruta del recurso publicado
El botón Publicar se ha pulsado.
deleted
aem-sidekick
(cadena) La ruta del recurso eliminado
Se ha eliminado el botón pulsado.
unpublished
aem-sidekick
(cadena) La ruta del recurso sin publicar
El botón Cancelar la publicación tiene se ha seleccionado.
env-switched
aem-sidekick

(objeto) Un objeto con siguientes propiedades:

  • (cadena) sourceUrl: La variable URL de origen
  • (cadena) targetUrl: La variable URL de destino
El usuario ha cambiado el entorno.
plugin-used
aem-sidekick
(cadena) ID del complemento
Se ha agregado un botón de complemento pulsado
logged-in
aem-sidekick
(objeto) El objeto de perfil
El usuario ha iniciado sesión.
logged-out
aem-sidekick
(objeto) El objeto de perfil
El usuario ha cerrado la sesión.
status-fetched
aem-sidekick
(objeto) El objeto de estado
Estado de un recurso se ha recuperado de la API de administración
custom:<name>
aem-sidekick

(objeto) Un objeto con siguientes propiedades:

  • (objeto) config: La variable configuración de tareas
  • (objeto) ubicación: La variable objeto de ubicación
  • (objeto) estado: El objeto de estado
Un complemento personalizado basado en eventos se ha hecho clic en el botón.

Se puede encontrar la carga útil de un evento en la propiedad event.detail.

Escucha de eventos

En el código de su proyecto (por ejemplo, en /scripts/scripts.js), puede reaccionar a los eventos de la barra de tareas de la siguiente manera (reemplace foo por el nombre del evento que desea escuchar):

const doFoo = ({ detail: payload }) => {
  console.log('something happened', payload);
  // your custom code goes here
};

const sk = document.querySelector('aem-sidekick');
if (sk) {
  // sidekick already loaded
  sk.addEventListener('foo', doFoo);
} else {
  // wait for sidekick to be loaded
  document.addEventListener('sidekick-ready', () => {
    // sidekick now loaded
    document.querySelector('aem-sidekick')
      .addEventListener('foo', doFoo);
  }, { once: true });
}

Personalización de Sidekick

Puede personalizar la barra de tareas del proyecto. Puede agregar un archivo de configuración /tools/sidekick/config.json al repositorio de GitHub del proyecto o usar el servicio de configuración.

{
  "project": "My project",
  "host": "www.mydomain.prod",
  "plugins": []
}

Para ver todas las opciones de configuración disponibles, consulte config schema. A continuación se indican algunos conceptos básicos para comenzar:

Plugins

Los complementos le permiten agregar funciones personalizadas a la barra de tareas, lo que mejora la experiencia de los usuarios.

Propiedades de complemento comunes

Las siguientes propiedades se aplican a todos los tipos de complementos:

  • id (cadena) es obligatorio y debe ser único dentro de una configuración de barra de tareas.
  • title (cadena) se mostrará en el botón del complemento.
  • titleI18n (object&lt;string, string>) define títulos traducidos de forma opcional.
  • pinned (booleano) determina si el complemento está anclado a la barra de herramientas (predeterminado) o plegado en el menú …
  • environments (cadena[]) especifica dónde debe aparecer el complemento (desarrollo, edición, administración, vista previa, en directo o producción).
  • exclude_paths (cadena[]) define patrones para excluir el complemento en función de la ruta de la dirección URL de la pestaña actual.
  • include_paths (cadena[]) define patrones para incluir el complemento en función de la ruta de la dirección URL de la pestaña actual.

Complementos basados en URL

Puede especificar un(a) url que se abrirá en una ficha nueva cuando se haga clic en el botón del complemento:

{
  "plugins": [
    {
      "id": "foo",
      "title": "Foo",
      "url": "/tools/sidekick/foo.html"
    }
  ]
}

Complementos basados en eventos

También puede especificar el nombre de un event que se activará cuando se haga clic en el botón del complemento. Esto permite ejecutar código JavaScript personalizado en el contexto de la página al escuchar el evento en el elemento de la barra de tareas. Los eventos personalizados tendrán un prefijo custom:. Para su comodidad, el evento personalizado enviado contiene una copia del estado actual de la barra de tareas.

Nota: Los complementos basados en eventos sólo se pueden usar en los entornos siguientes: Desarrollo, Vista previa, Activo y Producción. No se puede ejecutar el código personalizado en Editar o Administración.

{
  "plugins": [
    {
      "id": "foo",
      "title": "Foo",
      "event": "foo"
    }
  ]
}

En el código del proyecto (por ejemplo, en /scripts/scripts.js), puede reaccionar al evento de la siguiente manera:

const doFoo = ({ detail: payload }) => {
  console.log('a custom event happened', payload);
  // your custom code goes here
};

const sk = document.querySelector('aem-sidekick');
if (sk) {
  // sidekick already loaded
    sk.addEventListener('custom:foo', doFoo);
} else {
  // wait for sidekick to be loaded
  document.addEventListener('sidekick-ready', () => {
    // sidekick now loaded
    document.querySelector('aem-sidekick')
      .addEventListener('custom:foo', doFoo);
  }, { once: true });
}

Tipos de complementos especiales

Complementos de paleta

Las paletas son variantes de los complementos basados en URL que cargan la URL configurada en línea en lugar de abrir una nueva pestaña.

  • isPalette (booleano) abre el destino de un complemento basado en URL en una paleta en lugar de una nueva pestaña.
  • paletteRect (cadena) define opcionalmente el tamaño y la posición de la paleta en el formato de DOMRect.

El siguiente ejemplo crea una paleta estándar en la parte inferior izquierda de la ventana:

{
  "plugins": [
    {
      "id": "tools",
      "title": "Tools",
      "url": "/tools/sidekick/foo-palette.html",
      "isPalette": true
    }
  ]
}

Si desea cambiar el tamaño y la posición de la paleta, utilice paletteRect:

{
  "plugins": [
    {
      "id": "tools",
      "title": "Tools",
      "url": "/tools/sidekick/foo-palette.html",
      "isPalette": true,
      "paletteRect": "top:150px;left:7%;height:675px;width:85vw;"
    }
  ]
}

Complementos de contenedor

Los contenedores le permiten agrupar los complementos y ahorrar espacio en la barra de herramientas. Al hacer clic en un complemento de contenedor, simplemente se alterna su lista desplegable; no puede tener su propia URL o acción de evento.

  • isContainer (booleano) procesa un complemento como un menú desplegable en lugar de como un botón.
  • containerId (cadena) agrega un complemento a un complemento contenedor con el identificador especificado.

En el ejemplo siguiente se crea un contenedor denominado "Tools" y se coloca un complemento "Foo" en él:

{
  "plugins": [
    {
      "id": "tools",
      "title": "Tools",
      "isContainer": true
    },
    {
      "id": "foo",
      "containerId": "tools",
      "title": "Foo",
      "event": "foo"
    }
  ]
}

Complementos de distintivo

Las insignias permiten agregar etiquetas a la barra de tareas en ciertas condiciones. Se representan en la parte derecha de la barra de herramientas. Las insignias tienen un mero propósito decorativo y no se puede hacer clic en ellas.

  • isBadge (booleano) procesa un complemento como un distintivo en lugar de como un botón.
  • badgeVariant (cadena) determina de manera opcional el esquema de colores del distintivo (gris, rojo, naranja, amarillo, chartreuse, apio, verde, espuma de mar, cian, azul, índigo, púrpura, fucsia o magenta)

El siguiente ejemplo agrega un distintivo "Escenario" a la barra de tareas en el entorno de vista previa:

{
  "plugins": [
    {
      "id": "stage",
      "title": "Stage",
      "isBadge": true,
      "environments" ["preview"]
    }
  ]
}

URL de edición personalizadas

Si el proyecto no usa SharePoint o Google Drive como fuente de contenido, puedes indicarle a la barra de tareas cómo vincular a tu entorno de edición personalizado cuando el usuario haga clic en Editar.

Estas son las opciones de configuración disponibles:

  • editUrlLabel (cadena) estableció la etiqueta visible para el usuario
  • editUrlPattern (cadena) define un patrón de URL para el entorno de edición personalizado. Admite marcadores de posición como {{contentSourceUrl}} o {{pathname}}.
{
  "editUrlLabel": "Your Editor",
  "editUrlPattern": "{{contentSourceUrl}}{{pathname}}?cmd=open"
}

Vistas especiales

Puede especificar una vista especial a la que redirigir la barra de tareas cuando la dirección URL de la pestaña actual coincida con un patrón determinado. Esto puede ayudarle a proporcionar una experiencia de usuario perfecta en diferentes tipos de medios y también permite la ejecución de código personalizado (complementos basados en eventos). La dirección URL del recurso original estará disponible en un parámetro de consulta url.

Las propiedades path y viewer son obligatorias. Opcionalmente, puede especificar un(a) title que se mostrará en la parte superior y puede proporcionar títulos localizados en un objeto titleI18n:

{
  "specialViews": [
    {
      "title": "Custom JSON Viewer",
      "path" : "**.json",
      "viewer": "/tools/sidekick/custom-json-viewer/index.html"
    }
  ]
}

En la ruta especificada por viewer, agregue un archivo HTML al repositorio de GitHub, por ejemplo:

<html>
<head>
  <title>Custom JSON Viewer</title>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="./custom-json-viewer.css">
  <!-- add your custom code -->
  <script src="./custom-json-viewer.js"></script>
</head>
  <body>
  </body>
</html>

Añada un archivo CSS opcional en el mismo directorio y un archivo JS con la lógica personalizada, por ejemplo:

try {
  // get the resource URL from the url query parameter
  const url = new URL(window.location.href).searchParams.get('url');
  if (url) {
    const res = await fetch(url);
    if (res.ok) {
      const text = await res.text();
      const data = JSON.parse(text);
      // do something with the data, e.g.
      document.body.innerHTML = `
        <pre>
          ${JSON.stringify(data, null, 2)}
        </pre>
       `;
    } else {
      throw new Error(`failed to load ${url}: ${res.status}`);
    }
  }
} catch (e) {
  console.error('error rendering custom json view', e);
}

Flujo de trabajo de desarrollo

Los siguientes flujos de trabajo están diseñados para el desarrollo de tareas secundarias independientes a fin de evitar interrupciones no intencionadas para los autores del sitio de producción:

Uso de una copia del sitio

Si la configuración de su sitio está almacenada en el Servicio de configuración, puede usar copias temporales del sitio para el desarrollo de la barra de tareas:

  1. Cree una copia de su sitio en el servicio de configuración. Por ejemplo, si el nombre del sitio original es site1, podría crear un site1-dev, reutilizando el mismo código y contenido.
  2. Abra la URL de vista previa de site1-dev en el explorador: https://main--site1-dev--org.aem.page.
  3. Realice los cambios que desee en el objeto de barra de tareas en la configuración de site1-dev.
  4. Actualice la pestaña del explorador después de cada cambio para probar los cambios.
  5. Cuando termine, copie el objeto de la barra de tareas de site1-dev a la configuración de site1 para implementar los cambios con todos los autores.

Nota: Al usar la barra de tareas en un entorno de edición (Google Drive o Microsoft Sharepoint), cargará la configuración del sitio original de forma predeterminada. Si desea que la barra de tareas le permita elegir qué configuración cargar, primero agregue el nuevo sitio a la barra de tareas desde la vista previa o la dirección URL activa. Ahora la barra de tareas mostrará un selector con todos los sitios coincidentes.

Uso de una rama del repositorio

Si la configuración de su sitio no está almacenada en el Servicio de configuración, puede usar una rama en GitHub para el desarrollo de la barra de tareas:

  1. En el repositorio de GitHub de su sitio, cree una rama a partir de main. Para este ejemplo, utilizaremos dev como nombre de la rama.
  2. Abra la dirección URL de vista previa de la rama dev en el explorador: https://dev--site1--org.aem.page.
  3. Abra o cree el siguiente archivo en su repositorio: /tools/sidekick/config.json.
  4. Realice los cambios que desee en el archivo de configuración de la barra de tareas y presione los cambios en la rama dev.
  5. Actualice la pestaña del explorador después de cada cambio para probar los cambios.
  6. Cuando termine, cree una solicitud de extracción y combine los cambios en la rama main del repositorio.

Precaución: No confirmar nunca directamente la rama main en el repositorio original. Cree siempre una rama y pida una revisión de sus cambios mediante una solicitud de extracción antes de combinarlos en main.

Nota: Al usar la barra de tareas en un entorno de edición (Google Drive o Microsoft Sharepoint), cargará la configuración del sitio original de forma predeterminada. Si desea que la barra de tareas le permita elegir qué configuración cargar, primero agregue el nuevo sitio a la barra de tareas desde la vista previa o la dirección URL activa. Ahora la barra de tareas mostrará un selector con todos los sitios coincidentes.

recommendation-more-help
10a6ce9d-c5c5-48d9-8ce1-9797d2f0f3ec