Extensión:Graph
Advertencia: El código o la configuración aquí descrita supone un grave riesgo de seguridad. Administradores del sitio: Desaconsejamos su uso hasta que se resuelva el problema de seguridad. Problema: Vulnerable a ataques de Cross-site scripting, debido a que pasa el contenido escrito por el usuario directamente al navegador. Esto puede causar el robo de cuentas de usuario, entre otros problemas. Véase task T336556 para más información. Solución: valida estrictamente los datos introducidos por el usuario y/o aplica técnicas de escape a todos los caracteres que puedan tener un significado especial en HTML |
¡En estos momentos no hay nadie que se encargue del mantenimiento de esta extensión! Aunque todavía puede que funcione, los informes sobre errores o peticiones de nuevas funcionalidades serán probablemente ignorados. Si estás interesado en el desarrollo y mantenimiento de esta extensión, puedes solicitar acceso al repositorio. Como cortesía, puede que quieras contactar a su autor. También deberás quitar esta plantilla y añadirte como encargado del mantenimiento de esta extensión en la plantilla {{Extensión }} de la página. |
Graph Estado de lanzamiento: sin mantenimiento |
|
---|---|
Implementación | Etiqueta , ContentHandler |
Descripción | Gráficos basados en datos |
Autor(es) | |
MediaWiki | >= 1.43 |
Licencia | MIT Licencia |
Descarga | |
|
|
Descargas trimestrales | 32 (Ranked 108th) |
Wikis públicos que lo utilizan | 884 (Ranked 281st) |
Traduce la extensión Graph si está disponible en translatewiki.net | |
Asuntos | Tareas abiertas · Reportar un bug |
La extensión Graph habilita la etiqueta <graph>
para describir visualizaciones de datos tales como diagramas de barras, gráficos circulares, líneas de tiempo e histogramas (véase la demo) en un formato JSON que genera un gráfico basado en Vega.
Información general
La extensión Graph permite integrar gráficos potentes basados en Vega en las páginas wiki. Los gráficos pueden ser interactivos.
La manera más fácil de añadir un gráfico es mediante una plantilla ya preparada como {{Graph:Chart}}. Estas plantillas ocultan todas las complejidades. Los usuarios avanzados pueden usar la zona de pruebas de Graph para desarrollar gráficos. La zona de pruebas de Graph admite la sintaxis de las plantillas wiki además de JSON. La extensión se integra con VisualEditor, proporcionando una sencilla herramienta/asistente que genera gráficos básicos introduciendo los valores directamente en el editor.
Enlaces útiles
- Documentación de Vega 2 – páginas de documentación de Vega 2 en nyurik/vega/wiki
- Guía – recomendaciones generales sobre cómo usar gráficos en un wiki.
- Tutorial interactivo – instrucciones paso a paso sobre cómo construir un gráfico interactivo complejo desde cero.
- Página de demostración – con muchos ejemplos y atajos.
- Video TechTalk – una discusión técnica de la WMF acerca de la extensión Graph, que incluye una demostración magistral del editor Lyra (también instalado en labs).
- También pueden interesarte algunas de las funcionalidades futuras de Vega (presentación de Jeffrey Heer).
- Vega para desarrolladores - la mejor colección de todos los recursos de Vega.
- Migrar a Vega 2.0
- Introducción en video a Vega interactivo
Instalación
- Requiere la extensión JsonConfig
- Descarga y extrae los archivos en un directorio denominado «
Graph
» dentro de la carpetaextensions/
.
Developers and code contributors should install the extension from Git instead, using:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Graph - Añade el siguiente código en la parte final de tu archivo LocalSettings.php :
wfLoadExtension( 'Graph' );
- Hecho – Navega a Special:Version en el wiki para verificar que la extensión se haya instalado correctamente.
Instalación Vagrant:
- Si se utiliza Vagrant , instala con
vagrant roles enable graph --provision
Configuración adicional
Si estás tratando de replicar un entorno de producción como es.wiki, deberás completar los siguientes pasos:
- Instala Scribunto , Imagemap y TemplateStyles y habilita las subidas de SVG.
- Si usas Vagrant, puedes usar
vagrant roles enable --provision scribunto imagemap templatestyles svg
- Si usas Vagrant, puedes usar
- Importa de MediaWiki Module:Graph, Module:Graph/doc, Template:Nowrap y Template:Nowrap/styles.css (enlace de exportación)
- Importa de Wikipedia en inglés Module:Chart y Module:Chart/Default colors (enlace de exportación)
- Importa el archivo File:Circle_frame.svg
Depurar gráficos y portar gráficos de Vega 2 a Vega 5
Se proporciona una zona de pruebas en Special:GraphSandbox que funciona de forma similar al editor de gráficos Vega. La herramienta de MediaWiki incluye código de compatibilidad que hace corresponder los esquemas anteriores de Vega a la versión actualmente habilitada. Al insertar un esquema antiguo en el área de texto principal, se incluirá un esquema modificado y modernizado bajo el gráfico donde sea posible.
Al igual que vega.github.io/editor, el objeto de Vega se puede inspeccionar mediante la variable global VEGA_DEBUG
de JavaScript.
Véase la guía de depuración de Vega sobre cómo usarlo.
Migración de esquemas de versiones anteriores de Vega
Anteriormente Graph era compatible con Vega 2. Puedes copiar el JSON de los gráficos en http://vega.github.io/vega-editor/?mode=vega para ver cómo se mostraban a modo de comparación con Vega 5.
Se puede usar Special:GraphSandbox (para el código más reciente, véase la versión beta del clúster de la zona de pruebas) para hacer corresponder los esquemas antiguos con los nuevos. Copia el esquema antiguo en el área de texto principal y el esquema actualizado aparecerá en el área de texto debajo del gráfico. Copia el nuevo esquema en tu código.
Ejemplos de diagramas
Véase la página de demostración para un amplio surtido de ejemplos y trucos de uso.
Respaldo definido por el usuario
Al utilizar la visualización desde el lado del cliente, es posible utilizar Wikimedia Commons para proporcionar una imagen estática de respaldo a los usuarios noscript
.
Esta es una solución temporal hasta que se implante un nuevo servicio para proporcionar la visualización del lado del servidor.
El usuario debe subir en primer lugar el gráfico estático a Wikimedia Commons.
Las imágenes de respaldo tienen dos variables: fallback
y fallbackWidth
.
fallback
se refiere a un nombre de archivo de Wikimedia Commons.
fallbackWidth
es el ancho de las imágenes de respaldo en píxeles.
Estas variables se transfieren al gráfico de la siguiente manera:
<graph fallback="Graph test seddon.png" fallbackWidth=450>
Donde se usen módulos de Lua tales como Module:Graph, se pueden proporcionar estas variables mediante la función de la etiqueta. Si se adaptara Template:Graph:Chart , tendría este aspecto:
{{safesubst:#tag:graph|{{safesubst:#invoke:Graph|chartWrapper}} | fallback = {{{fallback|''}}} | fallbackWidth= {{{fallbackWidth|''}}} }}
Se utilizaría en una plantilla de la siguiente manera:
{{Graph:Chart|width=400|height=100|xAxisTitle=X|yAxisTitle=Y
|type=rect|x=1,2,3,4,5,6,7,8|y=10,12,6,14,2,10,7,9|fallback=Graph test seddon.png|fallbackWidth=450}}
Si no se proporcionara un fallbackWidth pero se definiera una imagen, la extensión derivaría su ancho del ancho del gráfico provisto. Esto se debe a que a menudo hay una diferencia entre el ancho de la imagen generada y el ancho real de la imagen.
{{Graph:Chart|width=400|height=100|xAxisTitle=X|yAxisTitle=Y
|type=rect|x=1,2,3,4,5,6,7,8|y=10,12,6,14,2,10,7,9|fallback=Graph test seddon.png}}
Datos externos
El protocolo HTTP(S) no se puede usar para obtener datos para el gráfico.
En su lugar, usa un protocolo wiki personalizado tal como wikiraw:
, wikiapi:
u otro.
La extensión Graph utiliza el parámetro GraphAllowedDomains
para controlar la resolución de estos protocolos:
Ten en cuenta que, dado que las consultas dependen de la estructura de los elementos wikibase, pueden dejar de funcionar si se editan y se cambian los datos subyacentes, ya que pueden producir datos incompletos, vacíos o no válidos que no se pueden usar para crear un gráfico.
En estos casos, se generará un gráfico vacío (véase phab:T168601).
$wgGraphAllowedDomains = [
# las claves http y https enumeran todos los dominios permitidos para el acceso de datos externos.
# Cualquier dominio en esta lista también permite automáticamente todos los subdominios.
# Los protocolos personalizados como 'wikiraw' lo usan para determinar qué protocolo se usa.
# De esta manera, wikiraw://en.wikipedia.org/Page será una petición de la API a https://en.wikipedia.org/w/api.php?action=query&titles=Page&...
'https' => [ 'wikipedia.org', 'wikimedia.org', ... ],
'http' => [ 'wmflabs.org', ... ],
# lista de dominios permitidos para el acceso al protocolo wikirawupload: (subida en crudo wiki)
# Correspondencia exacta, sin subdominios.
'wikirawupload' => [ 'upload.wikimedia.org' ],
# igual que wikirawupload pero para consultas Sparql de Wikidata
'wikidatasparql' => [ 'query.wikidata.org' ],
];
Funcionamiento interno
Durante el análisis sintáctico, la extensión Graph expande todos los parámetros y expresiones de las plantillas y almacena las definiciones completas del gráfico en la propiedad de página ParserOutput utilizando hashes del gráfico para los identificadores.
La extensión Graph añade HTML a la página adonde deberían ir los gráficos, un <div>
con un graph-id como atributo.
Ejemplo:
<div class="mw-graph" data-graph-id="72edc224f0a10b343c1e84f63dbfc97cac9bc957">
</div>
La extensión Graph añade un módulo ResourceLoader ext.graph
de JavaScript a la página que incluye la biblioteca Vega, y coloca el JSON de definiciones del gráfico en una variable mediawiki.config
de JavaScript con el nombre wgGraphSpecs
.
Una vez que el cliente ha cargado este módulo, la biblioteca JavaScript Vega rellena cada <div>
con un lienzo (canvas) HTML y dibuja el gráfico en su interior, reemplazando la imagen estática.
Funciones de seguridad
Se puede configurar <graph>
para no permitir la referenciación de fuentes no fiables (p. ej., Wikimedia solo permite datos de los sitios de Wikimedia).
Licencia
La biblioteca Vega se distribuye bajo una licencia BSD modificada aceptable para nuestro uso, a saber:
“ | Esto parece ser una copia de la licencia BSD con algunas modificadores menores (aceptables). Usarla no nos supondrá un problema, aunque lo ideal es que no hagan cambios así a la licencia. Es mejor que la gente no haga cambios como estos a su licencia para evitar confusiones (como esta) sobre si la licencia es segura para el uso de fuentes abiertas. | ” |
—Stephen LaPorte |
Configuración
wgGraphAllowedDomains
Véase la sección sobre datos externos.
Módulo VisualEditor
Desde verano de 2015, la extensión Graph también incluye un módulo (ext.graph.VisualEditor) que permite la edición de gráficos en el editor visual.
Este módulo fue un resultado del proyecto del Verano de Código 2015 (Summer of Code 2015) de Google. Véase phab:T89287 para más información.
Este módulo permite a los usuarios ver gráficos en el editor visual, en contraposición a los nodos de extensiones ajenas. Además, los usuarios pueden abrir un cuadro de diálogo para editar el tipo, los datos y el relleno (padding) de un gráfico. La interfaz visual ofrece una forma de editar los parámetros brutos JSON de un gráfico en el editor visual sin tener que cambiar al editor clásico de wikitexto, dando la posibilidad a los usuarios avanzados de ajustar los parámetros incompatibles con la interfaz.
Este primer paso sirve como un trampolín para el desarrollo de la edición de gráficos en el editor visual, con muchas posibilidades para mejorar y extender el módulo.
Corregir gráficos rotos
Los errores en los gráficos se registrarán en la consola de desarrollador.
Error: Argumentos de constructor erróneos (phab:T277906)
Para corregir: cambia filepath:Earthmap1000x500compac.jpg por filepath:Earthmap1000x500.jpg
TypeError: undefined is not an object (evaluating 'datum.firstYear.value')
Para corregir: asegúrate de no haber inicializado el valor por defecto como null
Véase también
- Diagram extensions
- Plotly — La biblioteca JavaScript de creación de gráficos de fuentes abiertas (con capacidades de representación en 3D)
- D3 — Documentos guiados por datos (data-driven documents)
Esta extensión está incluida en los siguientes anfitriones/granjas wiki y/o paquetes: No se trata de una lista oficial. Algunas granjas/hosts wiki y/o paquetes pueden tener disponible esta extensión aunque no estén listados aquí. Siempre compruébelo con su anfitrión o granja wiki para confirmarlo. |