Extension:VIKI

VIKI (Visualization and Knowledge Integration) is a D3-based directed force layout graph visualization of the structure of a wiki. In a VIKI graph, graph nodes represent individual wiki pages or web pages, while links between nodes indicate page links (i.e. one page has a hyperlink to another page, e.g. of the form Other Page ). These links are directional, where the direction of the link indicates which page links to which. If two pages link to each other, the link is bidirectional. We say two pages are linked on a VIKI graph if there is a link between their nodes on the graph, i.e. either of the two pages links to the other, or they link to each other. Some wiki pages also have hyperlinks to external web pages; these pages are also displayed on the VIKI graph (with a generic wi-fi icon), but interaction with these pages is limited.

The graph is pannable and zoomable using either the mouse scroll action or the zoom bar located at the bottom of the graph. Individual nodes may be dragged around and rearranged as well; the D3 graph automatically revises node positions to a local equilibrium state whenever nodes are dragged.

The graph is first initialized with a (user-defined) list of wiki pages, along with all pages linked to these pages. Pages linked to this secondary level of pages are not initially displayed – only the first order links are initially present. The user may then choose to elaborate a node; elaboration involves retrieving and displaying all linked pages for the given node’s page. Elaboration of a node expands the VIKI graph, and users may expand the graph to explore the structure of the wiki. Elaborated nodes are also called hub nodes, and the length of links to hub nodes is longer for improved graph visibility. Users may also choose to hide individual nodes and/or hide entire hubs to focus down the graph to areas of interest.



Users may right click on a given node to bring up a context menu of options. Below is a list of all possible options, but not all nodes may have all options as appropriate.
 * Freeze: this node becomes frozen in position while other nodes may move around it
 * Visit Page: opens the page represented by the node in a new tab or window
 * Elaborate: elaborates a node, as discussed previously
 * Show Categories: Pops up a JavaScript alert listing the categories this page belongs to. (Under construction.)
 * Hide Node: Removes this node and links to it from the VIKI graph.
 * Hide Hub: Removes this hub node and all nodes immediately linked to it from the VIKI graph, unless the linked node is itself a hub.
 * Show All: Adds all previously-hidden nodes and links back into the VIKI graph.

Special thanks to Bernadette Clemente for the original idea that inspired this extension.

Installation
This extension requires Semantic MediaWiki to be installed first.

By design, VIKI only shows nodes from namespaces which are designated as content namespaces. If you have other namespaces whose pages you wish to show up in VIKI, add those namespaces to the list of content namespaces.

Usage
VIKI is a MediaWiki parser function. To embed a VIKI graph into a page, the following parser function syntax is used:

Parameters:
 * pageTitles: a list of wiki pages (given by title) to comprise the initial graph (default: the current page)
 * width: the desired width (in pixels) of the graph (default: 1200)
 * height: the desired height of the graph (default: 600)
 * delimiter: the desired delimiter that separates between pageTitles (default: ,)

VIKI Plugin System
VIKI is designed to be extensible, with a built-in hook system. Developers can write MediaWiki extensions which serve as plugins to the core VIKI architecture to enhance or modify the VIKI graph behavior. For example, we have developed several VIKI plugins to enhance functionality or provide compatibility support for other MediaWiki and Semantic MediaWiki extensions, such as Semantic Title and Title Icon. Details about the plugin structure can be found at this page.

So far we have released two VIKI plugins for use:
 * The VikiSemanticTitle extension, which provides support for pages using the Semantic Title extension
 * The VikiTitleIcon extension, which provides enhanced functionality for pages using the Title Icon extension