<?php if (!defined('PmWiki')) exit(); /* Copyright 2006 Hans Bracker, modified from dictindex.php Copyright 2004 Patrick R. Michaud (pmichaud@pobox.com) This file is toggledictindex.php; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This file adds a "toggledictindex" (dictionary index) format for the (:pagelist:) and (:searchresults:) directives. To see results in dictionary format, simply add fmt=toggledictindex to the directive, as in (:pagelist group=Main fmt=toggledictindex name=-{$Name}:) (the last name=... excludes the current page from appearing at the top of the list) By default the items are display as a simple definition list, but this can be controlled by $FPLToggleDictIndex...Fmt variables: $FPLToggleDictIndexHeadFmt - string for html header to initially hide divisions $FPLToggleDictIndexStartFmt - start string $FPLToggleDictIndexEndFmt - end string $FPLToggleDictIndexLFmt - string to output for each new letter $FPLtoggleDictIndexIFmt - string to output for each item in list $FPLToggleDictIndexHeaderLink - string for the link list at the upper page To enable this module, simply add the following to config.php: include_once("$FarmD/cookbook/toggledictindex.php'); */ define(TOGGLEDICTINDEX_VERSION, '2006-08-01-b'); $FPLFunctions['toggledictindex'] = 'FPLToggleDictIndex'; function FPLToggleDictIndex($pagename,&$matches,$opt) { global $FPLToggleDictIndexStartFmt,$FPLToggleDictIndexEndFmt, $FPLToggleDictIndexLFmt,$FPLToggleDictIndexIFmt, $FPLToggleDictIndexHeaderLink, $FmtV, $HTMLStylesFmt; $opt['order']='title'; $matches = MakePageList($pagename, $opt); SDV($FPLToggleDictIndexHeadFmt,"#\$IndexLetter {display:none} \n"); SDV($FPLToggleDictIndexStartFmt,"<a name='dictindexheader'></a><div class='fpldictindex'><span style='font-size:144%'>\$IndexLinks</span><hr><p class='vspace'></p></div>\n"); SDV($FPLToggleDictIndexEndFmt,'</dl></div>'); SDV($FPLToggleDictIndexLFmt,"</dl></div>\n<div id='\$IndexLetter'><a class=\"wikilink\" href=\"javascript:toggleObj('\$IndexLetter','show','\$IndexLetter','\$IndexLetter','')\" > ▲</a> \$IndexLetter <dl>\n"); SDV($FPLToggleDictIndexIFmt,"<dt><dd><a href='\$PageUrl'> \$Titlespaced </a></dd></dt>\n"); SDV($FPLToggleDictIndexHeaderLink,"<span id='\$IndexLetter-tog'><a class=\"wikilink\" href=\"javascript:toggleObj('\$IndexLetter','hide','\$IndexLetter','\$IndexLetter','')\" >\$IndexLetter</a></span>"); $out = array(); $headerlinks= array(); foreach($matches as $item) { $pletter = substr($item['title'],0,1); $FmtV['$IndexLetter'] = $pletter; if (strcasecmp($pletter,@$lletter)!=0) { $out[] = FmtPageName($FPLToggleDictIndexLFmt,$item['pagename']); $headerlinks[] = FmtPageName($FPLToggleDictIndexHeaderLink,$item['pagename']); $HTMLStylesFmt[] = FmtPageName($FPLToggleDictIndexHeadFmt,$item['pagename']); $lletter = $pletter; } $out[] = FmtPageName($FPLToggleDictIndexIFmt,$item['pagename']); } $FmtV['$IndexLinks']=implode('·',$headerlinks); return FmtPageName($FPLToggleDictIndexStartFmt,$pagename).implode('',$out). FmtPageName($FPLToggleDictIndexEndFmt,$pagename); } $HTMLHeaderFmt['toggleobj'] = " <script type=\"text/javascript\"> function toggleObj(obj,init,lshow,lhide,swap) { var Ar = new Array(obj,init,lshow,lhide,swap); var elstyle = document.getElementById(obj).style; if (Ar[4]) var swstyle = document.getElementById(swap).style; var text = document.getElementById(obj + \"-tog\"); if (Ar[1]=='show') { Ar[1]='hide'; elstyle.display = 'none'; if(Ar[4]) swstyle.display = 'block'; copy='<a class=\"wikilink\" '; copy+='href=\"javascript:toggleObj(\''+Ar[0]+'\',\''+Ar[1]+'\',\''; copy+= Ar[2]+'\',\''+Ar[3]+'\',\''+Ar[4]+'\');\">'+Ar[2]+'</a>'; text.innerHTML = copy; } else if (Ar[1]=='hide') { Ar[1]='show'; elstyle.display = 'block'; if(Ar[4]) swstyle.display = 'none'; copy='<a class=\"wikilink\" '; copy+='href=\"javascript:toggleObj(\''+Ar[0]+'\',\''+Ar[1]+'\',\'' copy+= Ar[2]+'\',\''+Ar[3]+'\',\''+Ar[4]+'\');\">'+Ar[3]+'</a>'; text.innerHTML = copy; } } </script>";