¿Qué es la biblioteca de la barra de tareas?

La biblioteca de la barra de tareas es una extensión de la barra de tareas de AEM que permite a los desarrolladores crear herramientas controladas por la interfaz de usuario para los autores de contenido. Incluye un complemento de bloques integrado que puede mostrar una lista de todos los bloques a los autores de forma intuitiva, lo que elimina la necesidad de que los autores recuerden o busquen cada variación de un bloque. Los desarrolladores también pueden escribir sus propios complementos para la biblioteca de la barra de tareas.

¿Cómo se utiliza la biblioteca de Sidekick?

Los pasos siguientes detallan cómo configurar la biblioteca de la barra de tareas y el complemento de bloques.

Configuración de hoja de biblioteca

La biblioteca de la barra de tareas se rellena con los complementos y el contenido del complemento con una hoja.

1. Comience creando un directorio en sharepoint o gdrive donde desee almacenar el contenido de la biblioteca. Se recomienda almacenar el contenido en /tools/sidekick (o cualquier otro nombre) en la raíz del punto de montaje. Los siguientes pasos asumirán que el directorio se llama /tools/sidekick.

2. A continuación, cree un libro (un archivo de Excel) en el directorio /tools/sidekick llamado library (o cualquier otro nombre). Cada hoja del libro representa un complemento que la biblioteca Sidekick cargará. El nombre de la hoja determina el nombre del complemento que se cargará. Los datos contenidos en la hoja se pasarán al complemento cuando se carguen. El nombre de la hoja de complementos debe ir precedido de helix-. Por ejemplo, si desea cargar un complemento denominado tags, debe crear una hoja denominada helix-tags.

3. Para este tutorial crearemos una hoja para nuestro complemento blocks. Cree una hoja (o cambie el nombre de la hoja predeterminada), llámela `helix-blocks` y déjela vacía por ahora.

Complemento de bloques

La biblioteca Sidekick viene con un complemento blocks.

Configuración del complemento de bloques

Para generar contenido para el complemento de bloques, debe preparar un documento de Word independiente para cada bloque que desee incluir.

1. Cree un directorio dentro del directorio /tools/sidekick donde almacenará todas las variaciones de bloques. Por ejemplo, podría crear un directorio llamado blocks dentro de /tools/sidekick.
2. Para este ejemplo, supongamos que queremos definir todas las variaciones de un bloque denominado columns. Primero cree un documento de Word llamado columns dentro del directorio blocks y proporcione ejemplos de todas las variaciones del bloque columns. Después de cada variación del bloque, agregue un delimitador de sección.
3. Previsualizar y publicar el documento columns.
4. Abra el libro de biblioteca creado en la última sección, dentro de la hoja helix-blocks, y cree dos columnas denominadas name y path.
6. A continuación, debemos agregar una fila para nuestro bloque columns. Agregue el nombre del bloque en la primera columna y la dirección URL al documento que define las variaciones de bloque en la segunda columna. Por ejemplo, si desea agregar el bloque columns, puede crear una fila con el nombre Columns y la ruta de acceso /tools/sidekick/blocks/columns. Para que la biblioteca funcione en entornos (página, activo, prod), no debe utilizar una URL absoluta para la columna de ruta.
7. Previsualizar y publicar el libro library.

> Dado que los bloques de ejemplo se están publicando, debe usar metadatos en bloque para excluir el contenido de /tools/** de la indización.

Captura de pantalla 2024-04-09 a las 2 54 19 PM

Ejemplo library.xlsx

Metadatos de biblioteca

Los complementos de bloques admiten un tipo especial de bloque denominado library metadata, que proporciona a los desarrolladores la forma de indicarle al complemento de bloques alguna información sobre el bloque o cómo se debe representar.

Opciones de metadatos de biblioteca compatibles

Nombre de clave
Valor
Descripción
Requerido
name
Nombre del bloque
Le permite establecer un personalizado nombre del bloque
false
descripción
Una descripción del bloque
Le permite establecer un personalizado descripción de un bloque
false
tipo
El tipo de bloque
Esto indica a los bloques plugin cómo agrupar el contenido que conforma su Bloque. Las opciones posibles son plantilla o sección (detalles más abajo)
false
incluir secciones siguientes
Cuántas secciones hay que incluir en el elemento de bloque
Utilícelo si el bloque requiere contenido de la subsiguiente secciones con el fin de procesar. Debe ser un número valor que indica cómo muchas secciones subsiguientes a incluir.
false
searchtags
Una lista separada por comas de términos de búsqueda
Permite definir otros términos que se pueden utilizar al buscar esto bloquear en el complemento bloques
false
tableHeaderBackgroundColor
Un color hexadecimal (ex #ff3300)
Anula el encabezado de tabla color de fondo para cualquier bloques en la sección o página.
false
tableHeaderForegroundColor
Un color hexadecimal (ex #ffffff)
Anula el encabezado de tabla color de primer plano para cualquier bloques en la sección o página.
false
contentEditable
Un valor booleano (predeterminado: true)
Configúrelo en False para deshabilitarlo edición de contenido en ventana de vista previa.
false
disableCopy
Un valor booleano (predeterminado: false)
Configúrelo en true para deshabilitar las botón copiar en la vista previa ventana.
false
hideDetailsView
Un valor booleano (predeterminado: false)
Ocultar los detalles del bloque panel dentro de la previsualización ventana.
false

Metadatos de biblioteca predeterminados frente a metadatos de biblioteca

Existen dos tipos de library metadata. Los metadatos de biblioteca que se encuentran dentro de una sección que contiene el bloque, o default library metadata que se aplica al documento en su totalidad y que se encuentran en una sección por sí solos (un bloque denominado library metadata como el único elemento secundario de una sección).

Veamos un ejemplo de un bloque a pantalla completa que tiene 5 variantes. Supongamos que desea agregar la misma descripción para cada variación del bloque en lugar de duplicar library metadata con la descripción en cada sección que contenga las variaciones. En su lugar, podría usar default library metadata para aplicar la misma descripción a cada variación del bloque. Si decide que una variación necesita realmente una descripción ligeramente diferente, podría agregar library metadata a la sección que contiene la variación y anularía la descripción predeterminada library metadata cuando se procese dentro del complemento de bloques.

Creación de nombres y descripciones de bloques mediante metadatos de biblioteca

De forma predeterminada, el nombre del bloque (con variación) se utilizará para procesar el elemento en el complemento de bloques. Por ejemplo, si el nombre del bloque es columns (center, background), ese nombre se utilizará como etiqueta cuando se represente en el complemento de bloques. Esto se puede personalizar creando una sección library metadata dentro de la misma sección que el bloque. Los metadatos de biblioteca también se pueden usar para crear una descripción del bloque y para agregar searchTags a fin de incluir un alias para el bloque al usar la característica de búsqueda.

Bloque de ejemplo con nombre y descripción personalizados

Contenido

Captura de pantalla 2023-06-08 a las 11:09 PM

Pantalla

Captura de pantalla 2023-06-08 a las 13:32

Bloques automáticos y contenido predeterminado

El complemento de bloques puede procesar contenido predeterminado y autoblocks. Para conseguirlo, es necesario colocar su default content o autoblock dentro de una sección dedicada, que debe incluir una tabla library metadata que defina una propiedad name, como se describió anteriormente. Si no se especifica ningún nombre en los metadatos de la biblioteca, el elemento se etiquetará como "Elemento sin nombre".

Bloques compuestos de contenido en secciones subsiguientes

Hay situaciones en las que los desarrolladores pueden querer que un bloque consista en contenido de secciones posteriores. No se recomienda este patrón por las razones indicadas aquí, pero si elige usarlo, el complemento de bloques puede procesar estos elementos mediante la propiedad include next sections en library metadata.

Plantillas

Las plantillas son una forma de agrupar todo un documento en un solo elemento de la biblioteca de la barra de tareas. Para marcar un documento como un conjunto de plantillas type a template en default library metadata.

> Importante: library metadata debe estar en su propia sección y ser el único elemento secundario que se considere default library metadata.

También es deseable admitir metadata para las plantillas. Para agregar una tabla de metadatos a la plantilla, puede utilizar un bloque Page metadata.

266064147-12883ee0-147b-4171-b89a-c313e33eef24

Cuando se copie la plantilla, se agregará un(a) metadata con los valores junto con el contenido al portapapeles.

Configuración del complemento de Sidekick

Dado que la biblioteca de la barra de tareas está alojada en el mismo origen que el contenido, es necesario crear una página estática de HTML para cargar y configurar el contenido.

1. Crear un archivo llamado library.html en tools/sidekick/;

2. Pegue el siguiente código en library.html.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, viewport-fit=cover"
    />
    <meta name="Description" content="AEM Sidekick Library" />
    <meta name="robots" content="noindex" />
    <base href="/" />

    <style>
      html,
      body {
        margin: 0;
        padding: 0;
        font-family: sans-serif;
        background-color: #ededed;
        height: 100%;
      }

      helix-sidekick { display: none }
    </style>
    <title>Sidekick Library</title>
  </head>

  <body>
    <script
      type="module"
      src="https://www.aem.live/tools/sidekick/library/index.js"
    ></script>
    <script>
      const library = document.createElement('sidekick-library')
      library.config = {
        base: '/tools/sidekick/library.json',
      }

      document.body.prepend(library)
    </script>
  </body>
</html>

En el código anterior, cargamos la biblioteca de la barra de tareas de aem.live y, a continuación, creamos un elemento sidekick-library personalizado y lo agregamos a la página. El elemento sidekick-library acepta un objeto config necesario para configurar la biblioteca de la barra de tareas.

Parámetros de configuración admitidos

Nombre de parámetro
Valor
Descripción
Requerido
basar
Ruta a la biblioteca
La biblioteca base que se va a crear. cargado
true
extiende
Dirección URL absoluta del biblioteca extendida
Una biblioteca para ampliar el biblioteca base con
false
complementos
Un objeto que contiene complementos con los que registrarse la biblioteca de la barra de tareas
El objeto plugins puede ser se utiliza para registrar complementos y configurar datos que debe pasarse al plugin
false

El complemento de bloques admite las siguientes propiedades de configuración que se pueden establecer con el objeto plugins.

Parámetros de configuración del complemento de bloques

Nombre de parámetro
Valor
Descripción
Requerido
encodeImages
Un valor booleano que indica si las imágenes deben codificar durante la copia operaciones
Si su sitio tiene un cero acceso de red de confianza (ZTNA) servicio habilitado, como Acceso a Cloudflare entonces las imágenes deben codificarse para operaciones de copiar y pegar para trabajar correctamente con imágenes.
true
viewPorts
Completo o simplificado objeto de configuración, consulte ejemplos a continuación.
Configuración para sobrescribir los tamaños predeterminados de las ventanillas. El valor predeterminado es 480 px para móvil, 768 px para tableta y el 100% del actual para escritorio.
false
contentEditable
Un valor booleano para deshabilitar edición de contenido global en previsualizaciones.
Configúrelo en False para deshabilitarlo edición de contenido.
false

Ejemplos

Codificación de imágenes

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    blocks: {
      encodeImages: true,
    }
  }
}

Ventanillas personalizadas (forma corta)

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    blocks: {
      viewPorts: [600, 900],
    }
  }
}

Ventanillas personalizadas

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    blocks: {
      viewPorts: [
        {
          width: '599px',
          label: 'Small',
          icon: 'device-phone',
        },
        {
          width: '899px',
          label: 'Medium',
          icon: 'device-tablet',
        },
        {
          width: '100%',
          label: 'Large',
          icon: 'device-desktop',
          default: true,
        },
      ],
    }
  }
}

Colores de encabezado de tabla personalizados

Puede personalizar el fondo del encabezado de tabla y el color de primer plano al pegar un bloque, metadatos de sección o metadatos que se copiaron del complemento de bloques.

Los estilos predeterminados se pueden establecer en library.html mediante variables css.

 <style>
    :root {
      --sk-block-table-background-color: #03A;
      --sk-block-table-foreground-color: #fff;

      --sk-section-metadata-table-background-color: #f30;
      --sk-section-metadata-table-foreground-color: #000;

      --sk-metadata-table-background-color: #000;
      --sk-metadata-table-foreground-color: #fff;
    }
  </style>

Estos valores se pueden sobrescribir usando metadatos de biblioteca.

> Dependiendo del esquema de colores del sistema seleccionado para el equipo de los usuarios (modo oscuro), Word puede modificar los colores elegidos en un intento de mejorar la accesibilidad.

Configuración del complemento personalizado

El ejemplo siguiente define un complemento tags en la configuración. Las claves del objeto plugins deben coincidir con el nombre del complemento. Cualquier otra propiedad definida en el objeto plugin estará disponible para el complemento a través del argumento context del método decorate.

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  plugins: {
    tags: {
      src: '/tools/sidekick/plugins/tags/tags.js',
      foo: 'bar'
    }
  }
}

Bibliotecas extendidas

En algunos casos, puede ser deseable combinar dos bibliotecas de bloques. Cuando se define una biblioteca extendida, la aplicación de biblioteca de la barra de tareas combinará la biblioteca base y la biblioteca extendida en una sola lista de bibliotecas para los autores.

El ejemplo siguiente define una biblioteca base y una biblioteca extendida (en otro origen) que se combinarán en la biblioteca base.

const library = document.createElement('sidekick-library')
library.config = {
  base: '/tools/sidekick/library.json',
  extends: 'https://main--repo--owner.hlx.live/tools/sidekick/library.json'
}

> Los encabezados Access-Control-Allow-Origin deberán establecerse en library.json y bloques de la biblioteca extendida para que se carguen en la biblioteca de la barra de tareas. Consulte Encabezados de respuesta HTTP personalizados para obtener más información.

> Debido a las políticas del mismo origen que aplican los exploradores en los iframes, no se puede cargar una vista previa de un bloque extendido en este momento.

Configuración de Sidekick config.json

A continuación, para que la biblioteca de la barra de tareas aparezca en la barra de tareas, se debe crear un archivo de configuración en tools/sidekick/config.json. Este archivo de configuración debe crearse en el bus de código y registrarse en github.

{
  "project": "Example",
  "plugins": [
    {
      "id": "library",
      "title": "Library",
      "environments": ["edit"],
      "url": "/tools/sidekick/library.html",
      "includePaths": ["**.docx**"]
    }
  ]
}

La propiedad url de la configuración del complemento indica la ubicación desde la que la barra de tareas debe cargar el complemento. Esto debería apuntar al archivo library.html que creamos anteriormente.

> La configuración de la barra de tareas debe registrarse en la rama main para que el complemento aparezca en la barra de tareas.

> Si el archivo tools/sidekick/config.json no existe en el repositorio de github, se debe crear. Para obtener más información sobre las opciones de configuración del complemento de la barra de tareas, consulte los documentos.

Consideraciones al crear bloques para la biblioteca

La biblioteca de la barra de tareas procesa los bloques recuperando primero la representación plain.html del bloque y, a continuación, lo elimina de cualquier otro bloque del contenido (por ejemplo, si hay varias variaciones de un bloque en la respuesta). A continuación, solicita la misma página (sin .plain.html) y reemplaza el elemento main por el bloque eliminado y carga todo el documento en un elemento iframe mediante el atributo srcdoc.

Uso de window.location

Dado que el bloque se carga en un iframe mediante el atributo srcdoc, la instancia del objeto window.location que usa el código de sitios no contendrá los valores típicos que esperaría ver.

Ejemplo de objeto window.location al ejecutarse en la biblioteca

{
  "host": "",
  "hostname": "",
  "href": "about:srcdoc"
  "origin": "null"
  "pathname": "srcdoc"
  "port": ""
  "protocol": "about:"
}

Por este motivo, si el bloque requiere el uso del objeto window.location, se recomienda agregar las siguientes funciones al archivo scripts.js e importarlas a su función para su uso.

/**
 * Returns the true origin of the current page in the browser.
 * If the page is running in a iframe with srcdoc, the ancestor origin is returned.
 * @returns {String} The true origin
 */
export function getOrigin() {
  const { location } = window;
  return location.href === 'about:srcdoc' ? window.parent.location.origin : location.origin;
}

/**
 * Returns the true of the current page in the browser.mac
 * If the page is running in a iframe with srcdoc,
 * the ancestor origin + the path query param is returned.
 * @returns {String} The href of the current page or the href of the block running in the library
 */
export function getHref() {
  if (window.location.href !== 'about:srcdoc') return window.location.href;

  const { location: parentLocation } = window.parent;
  const urlParams = new URLSearchParams(parentLocation.search);
  return `${parentLocation.origin}${urlParams.get('path')}`;
}

Uso de createOptimizedPicture en lib-aem

La función createOptimizedPicture de lib-aem también usa window.location.href. Si utiliza esta función, le recomendamos que la mueva a scripts.js y la modifique para que utilice la función getHref() anterior.

Comprobación de la presencia de la biblioteca de la barra de tareas

A veces, es posible que desee saber si la página o el bloque se está ejecutando en la biblioteca de la barra de tareas. Para hacer esto hay un par de opciones.

1. Comprobar si window.location.href === 'about:srcdoc'

2. El elemento main y el elemento de bloque contendrán la clase sidekick-library

Creación de un complemento

Desarrollar un complemento es similar a construir un bloque en AEM. Una vez que un usuario intente cargar el complemento, la biblioteca de la barra de tareas almacenará en déclencheur el método decorate() en el complemento. Este método recibe el contenedor para procesar el complemento y cualquier dato incluido en la hoja de complementos.

/**
 * Called when a user tries to load the plugin
 * @param {HTMLElement} container The container to render the plugin in
 * @param {Object} data The data contained in the plugin sheet
 * @param {String} query If search is active, the current search query
 * @param {Object} context contains any properties set when the plugin was registered
 */
export async function decorate(container, data, query, context) {
  // Render your plugin
}

> La función decorate() debe exportarse desde el complemento.

Exportación y búsqueda predeterminadas del complemento

La exportación predeterminada desde un complemento permite a los autores personalizar el nombre del complemento que se muestra en el encabezado al cargar, así como activar la funcionalidad de búsqueda en la biblioteca de la barra de tareas.

export default {
  title: 'Tags',
  searchEnabled: true,
};

Cuando la propiedad searchEnabled es verdadera, el encabezado de la biblioteca mostrará un icono de búsqueda al cargar el complemento. Si el usuario inicia una búsqueda al escribir una consulta, la función decorate() del complemento se activará de nuevo, esta vez con la cadena de búsqueda pasada en el parámetro de consulta de la función decorate().

Componentes web del complemento

Los autores de complementos pueden utilizar un conjunto selecto de componentes web de Spectrum al crear un complemento personalizado.

Los siguientes componentes de Spectrum están disponibles

Componente
Vínculo de documentación
sp-tooltip
Documentos
sp-toast
Documentos
sp-textfield
Documentos
sp-sidenav-item
Documentos
sp-sidenav
Documentos
sp-search
Documentos
sp-progress-circle
Documentos
sp-picker
Documentos
sp-menu-item
Documentos
sp-menu-group
Documentos
sp-menu-divider
Documentos
sp-menu
Documentos
sp-illustrated-message
Documentos
sp-divider
Documentos
sp-card
Documentos
sp-button-group
Documentos
sp-button
Documentos
sp-action-button
Documentos
déclencheur de superposición
Documentos

También están disponibles los siguientes iconos de Spectrum

Componente
Vínculo de documentación
sp-icon-search
Documentos
sp-icon-file-template
Documentos
sp-icon-file-code
Documentos
sp-icon-device-phone
Documentos
sp-icon-device-tablet
Documentos
sp-icon-device-desktop
Documentos
sp-icon-magic-wand
Documentos
sp-icon-copy
Documentos
sp-icon-preview
Documentos
sp-icon-info
Documentos
sp-icon-view-detail
Documentos
sp-icon-chevron-right
Documentos
sp-icon-chevron-left
Documentos

Eventos de complemento

Los autores de complementos pueden enviar eventos desde su complemento a la biblioteca de la barra de tareas principal para mostrar un cargador o mostrar un mensaje de mensaje.

Mensajes de Toast

import { PLUGIN_EVENTS } from 'https://www.aem.live/tools/sidekick/library/events/events.js';

export async function decorate(container, data, query) {
  // Show a toast message
  container.dispatchEvent(new CustomEvent(PLUGIN_EVENTS.TOAST,  { detail: { message: 'Toast Shown!', variant: 'positive | negative' } }))
}

Mostrar y ocultar cargador

import { PLUGIN_EVENTS } from 'https://www.aem.live/tools/sidekick/library/events/events.js';

export async function decorate(container, data, query) {
  // Show loader
  container.dispatchEvent(new CustomEvent(PLUGIN_EVENTS.SHOW_LOADER))
  ...
  // Hide loader
  container.dispatchEvent(new CustomEvent(PLUGIN_EVENTS.HIDE_LOADER))
}

Complemento de ejemplo

Complemento Etiquetas

Ejemplo de API de complemento

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