1*3c9c7f3bSLORTET# Visualindex Plugin 2*3c9c7f3bSLORTET 3*3c9c7f3bSLORTET## Plugin Info 4*3c9c7f3bSLORTET 5*3c9c7f3bSLORTET- Description: displays a visual index 6*3c9c7f3bSLORTET- Author: Valentin LORTET, Gabriel CHOIMET 7*3c9c7f3bSLORTET- Email: contact@lortet.fr 8*3c9c7f3bSLORTET- Type: Syntax, Action 9*3c9c7f3bSLORTET- Last update: 2026-03-09 10*3c9c7f3bSLORTET- Compatible: Librarian 11*3c9c7f3bSLORTET 12*3c9c7f3bSLORTET## Installation 13*3c9c7f3bSLORTET 14*3c9c7f3bSLORTETInstall the plugin from the [Extension Manager](https://www.dokuwiki.org/plugin:extension). 15*3c9c7f3bSLORTET 16*3c9c7f3bSLORTET## Description 17*3c9c7f3bSLORTET 18*3c9c7f3bSLORTETThe **visualindex** plugin displays a visual index of pages (or media files) from a DokuWiki namespace. 19*3c9c7f3bSLORTET 20*3c9c7f3bSLORTETIt is compatible with: 21*3c9c7f3bSLORTET- the classic editor, 22*3c9c7f3bSLORTET- [ProseMirror](https://www.dokuwiki.org/plugin:prosemirror). 23*3c9c7f3bSLORTET 24*3c9c7f3bSLORTET## Syntax 25*3c9c7f3bSLORTET 26*3c9c7f3bSLORTETBase syntax: 27*3c9c7f3bSLORTET 28*3c9c7f3bSLORTET```txt 29*3c9c7f3bSLORTET{{visualindex>namespace}} 30*3c9c7f3bSLORTET``` 31*3c9c7f3bSLORTET 32*3c9c7f3bSLORTETExamples: 33*3c9c7f3bSLORTET 34*3c9c7f3bSLORTET```txt 35*3c9c7f3bSLORTET{{visualindex>.}} 36*3c9c7f3bSLORTET{{visualindex>wiki}} 37*3c9c7f3bSLORTET{{visualindex>wiki;filter=start|syntax*}} 38*3c9c7f3bSLORTET{{visualindex>wiki;desc=1}} 39*3c9c7f3bSLORTET{{visualindex>wiki;medias=1}} 40*3c9c7f3bSLORTET{{visualindex>.;filter=guide*;desc=1;medias=1}} 41*3c9c7f3bSLORTET``` 42*3c9c7f3bSLORTET 43*3c9c7f3bSLORTETSupported options: 44*3c9c7f3bSLORTET- `filter`: simple wildcard filter with `*` (example: `guide*|doc*`), 45*3c9c7f3bSLORTET- `desc`: descending sort (`1` / `true`), 46*3c9c7f3bSLORTET- `medias`: list media from the namespace (`1` / `true`). 47*3c9c7f3bSLORTET 48*3c9c7f3bSLORTETSpecial namespace values: 49*3c9c7f3bSLORTET- `.`: current namespace, 50*3c9c7f3bSLORTET- `~sub:folder`: namespace relative to current namespace. 51*3c9c7f3bSLORTET 52*3c9c7f3bSLORTET## Settings 53*3c9c7f3bSLORTET 54*3c9c7f3bSLORTET- `taille_icone`: icon size (example: `100px`), 55*3c9c7f3bSLORTET- `taille_texte`: text size (example: `13px`), 56*3c9c7f3bSLORTET- `couleur_texte`: text color (hex, rgb/rgba, or CSS color name), 57*3c9c7f3bSLORTET- `skip_file`: regex of pages to ignore, 58*3c9c7f3bSLORTET- `show_in_editor_menu`: show Visualindex in editor menus (classic and ProseMirror), 59*3c9c7f3bSLORTET- `use_pagesicon`: use `pagesicon` helper when available, 60*3c9c7f3bSLORTET- `default_image`: default image (media ID, e.g. `wiki:logo.png`); if empty, plugin internal image is used. 61*3c9c7f3bSLORTET 62*3c9c7f3bSLORTET## pagesicon Integration 63*3c9c7f3bSLORTET 64*3c9c7f3bSLORTETIf [pagesicon](https://www.dokuwiki.org/plugin:pagesicon) is installed and `use_pagesicon` is enabled: 65*3c9c7f3bSLORTET- Visualindex resolves page icons, 66*3c9c7f3bSLORTET- Visualindex resolves media icons, 67*3c9c7f3bSLORTET- fallback is applied when no icon is found. 68*3c9c7f3bSLORTET 69*3c9c7f3bSLORTETFallback order: 70*3c9c7f3bSLORTET1. icon from `pagesicon`, 71*3c9c7f3bSLORTET2. Visualindex `default_image`, 72*3c9c7f3bSLORTET3. plugin internal image (`images/default_image.png`). 73*3c9c7f3bSLORTET 74*3c9c7f3bSLORTET## ProseMirror 75*3c9c7f3bSLORTET 76*3c9c7f3bSLORTETThe plugin exposes a `Visualindex` button in ProseMirror (when `show_in_editor_menu` is enabled) with a configuration popup. 77*3c9c7f3bSLORTET 78*3c9c7f3bSLORTETPopup fields: 79*3c9c7f3bSLORTET- namespace, 80*3c9c7f3bSLORTET- filter, 81*3c9c7f3bSLORTET- descending order, 82*3c9c7f3bSLORTET- media listing. 83*3c9c7f3bSLORTET 84*3c9c7f3bSLORTET## Main Files 85*3c9c7f3bSLORTET 86*3c9c7f3bSLORTET- `syntax/visualindex.php`: parsing and XHTML rendering, 87*3c9c7f3bSLORTET- `action/prosemirror.php`: editor integration, 88*3c9c7f3bSLORTET- `script/prosemirror.js`: ProseMirror node, 89*3c9c7f3bSLORTET- `script/toolbar.js`: button and popup, 90*3c9c7f3bSLORTET- `style.css`: display styles. 91