//*****************************************************************************
// VertMenuList.spr - v 1.0 © 2003 Escot-Sep christophe *
// *
// Adaptation d'un menu à base de liste *
// http://www.maxdesign.com.au/presentation/listutorial/sub_master.htm * *
// *
//*****************************************************************************
var i,nl,ici,firstLevel,ThisLevel:integer;
fjmp,texte,FirstTopic,LastTopic,Indent:string;
jmp,idname:string;
SubList,flagLi,FlagLi1:boolean;
BackgroundColor,TextColor : string;
css_filename:string;

width:string;

float:string;
r,g,b:integer;

begin



FlagLi := false;
FlagLi1 := false;
FirstTopic := GetParam('FirstTopic','');
LastTopic := GetParam('LastTopic','');
float := GetParam('float','none');
// si on compile en html (et donc en htmlhelp) on doit générer la feuille de style css
if Condition('_HTML_')or Condition('_HTMLHELP_') then
begin
// nom du style, il doit être unique par page html
idname := GetParam('idname','navcontainer');
// obtenir les couleurs utilisées en xhtml
BackgroundColor := GetParam('BackgroundColor','$804000');
TextColor := GetParam('TextColor','$FFFFFF');
// largeur
width := GetParam('width','9em');
// créer, enregistrer et insérer le fichier css utilisé par notre liste

css_filename := GetParam('FilenameCss',GetProjet+'_hw.css');
// création du fichier css externe
// mais on va d'abord tester si on ne l'a pas déjà fait ;)
if GetVarInt(idname+'VertMenuList',0)=0 then
begin
SetVarInt(idname+'VertMenuList',1); // pour ne pas le recréer la prochaine fois

SetCss(css_filename,'#'+idname+' ul','margin','0');
SetCss(css_filename,'#'+idname+' ul','padding','0');
SetCss(css_filename,'#'+idname+' ul','list-style-type','none');

SetCss(css_filename,'#'+idname+' a','display','block');
SetCss(css_filename,'#'+idname+' a','color',ColorToHtml(TextColor));
SetCss(css_filename,'#'+idname+' a','background-color',ColorToHtml(GetShadowColor(BackGroundColor)));
SetCss(css_filename,'#'+idname+' a','width',width);
SetCss(css_filename,'#'+idname+' a','padding','3px 12px 3px 8px');
SetCss(css_filename,'#'+idname+' a','text-decoration','none');
SetCss(css_filename,'#'+idname+' a','border-bottom','1px solid');
SetCss(css_filename,'#'+idname+' a','font-weight','bold');

SetCss(css_filename,'#'+idname+' a:hover','background-color',ColorToHtml(GetHightLightColor(BackGroundColor)));
SetCss(css_filename,'#'+idname+' a:hover','color',ColorToHtml(Backgroundcolor));

SetCss(css_filename,'#'+idname+' ul ul a','display','block');
SetCss(css_filename,'#'+idname+' ul ul a','color',ColorToHtml(TextColor));
SetCss(css_filename,'#'+idname+' ul ul a','background-color',ColorToHtml(BackGroundColor));
SetCss(css_filename,'#'+idname+' ul ul a','width',width);
SetCss(css_filename,'#'+idname+' ul ul a','padding','3px 3px 3px 17px');
SetCss(css_filename,'#'+idname+' ul ul a','text-decoration','none');
SetCss(css_filename,'#'+idname+' ul ul a','border-bottom','1px solid '+ColorToHtml(TextColor));
SetCss(css_filename,'#'+idname+' ul ul a','font-weight','normal');


end;

// si on ne l'a pas déjà fait on fait en sorte que notre css se charge
// pour cela on l'importe dans le head
if GetVarInt(css_filename+GetTitre,0)=0 then
begin
SetVarInt(css_filename+GetTitre,1); // pour ne le faire qu'une seule fois par page
// il existe 2 façons de lier une feuille de style mais en htmlhelp seule la première semble fonctionner...
if Condition('_HTMLHELP_') then
writeln('<<WEB(head:<link rel="stylesheet" type="text/css" href="')>>+css_filename+<<FNT(STRING.-,-,-,-:'" />)>>')
else
writeln('<<WEB(head:<style type="text/css" media="screen">@import url( ')>>+css_filename+<<FNT(STRING.-,-,-,-:' );</style>)>>');
end;
end; // fin du traitement css pour le html

// obtenir le numéro de la 1ere rubrique
ici := GetNumOf(FirstTopic);
// récupérer le numéro de la denière rubrique
nl := GetNumOf(LastTopic);

// ne créer des liens que s'il y en a !
if ici<nl then
begin

// obtenir le niveau de la rubrique
FirstLevel := GetLevelOf(ici);
//
SubList := false;
Indent := '';

// début de la liste
writeln('<<WEB(<div id="')>>+idname+<<FNT(STRING.-,-,-,-:'" style="float:')>>+float+<<FNT(STRING.-,-,-,-:';">)>>');
writeln('<<WEB(ul)>>');

// masque pour le code
fjmp := '<<JMP(%s,%s)>>';


// pour chaque lien à effectuer
for i:=ici to nl do
begin
// déterminer le niveau
ThisLevel := GetLevelOf(i);
// on ignore les popups
if not IsPopup(i) then
begin
// on ignore les rubriques de niveau + 2 et plus
if ThisLevel<FirstLevel+2 then
begin
// gérer le passage à une sous rubrique
if (ThisLevel<>FirstLevel) and (SubList=false) then
begin
write('<<WEB(<ul>)>>');
Indent := ' ';
SubList := true;
end;
// gérer le retour au premier niveau
if (ThisLevel=FirstLevel) and (SubList=true) then
begin
if flagli1 then
begin
write('<<WEB(</li>)>>');
flagli1:=false;
end;
write('<<WEB(</ul>)>>');
SubList := false;
Indent := '';
end;

if flagli and (ThisLevel=FirstLevel) then
begin
write('<<WEB(</li>)>>');
flagli:=false;
end;

if flagli1 and (ThisLevel>FirstLevel) then
begin
write('<<WEB(</li>)>>');
flagli1:=false;
end;


// on récupére le titre de la rubrique cible
Texte := GetTitreOf(i);


// on fabrique le lien
jmp := format(fjmp,[texte,GetNomOf(i)]);
write(Indent+'<<WEB(li)>>'+jmp);


if ThisLevel=FirstLevel then
flagli := true else FlagLi1 := true;
end;
end;
end;


// terminer la liste
writeln('<<WEB(</li>)>>');
writeln('<<WEB(/ul)>>');
writeln('<<WEB(</div>)>>');
end;
end;


end.


end.

Sommaire