No changes between revisions
| /Server/GenIndex/Common.php |
|---|
| 0,0 → 1,313 |
| <?php |
| define('WEBSVNSCRIPT', '/WebSVN/listing.php', true); // Cesta k WebSVN skriptu |
| function Error($str) |
| // Ukončení běhu při chybhě |
| { |
| echo '<b>Ups...<b>'.$str; |
| exit; |
| } |
| function WrapString($String, $Wrap=0) |
| // Provede odstranění nadbytečných bílých znaků |
| // a volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet znaků |
| { |
| // Odstaň bílé znaky |
| $String = preg_replace('/\s+/su', ' ', $String); |
| // Volitelné nalámání |
| if ($Wrap!=0) |
| $String = wordwrap($String, $Wrap); |
| return $String; |
| } |
| function CheckWebPath($Path) |
| // Zadaná cesta se chápe jako cesta uvnitř webu (vzhledem k document root). |
| // Případné relativní části (/../..) převede na absolutní a zkontroluje |
| // výsledek, zda nevybočuje mimo web. |
| // Na začátku nechá lomítko, na konci ho odstraní. |
| // Pokud je výsledná cesta neplatná, vrátí prázdný řetězec. Kontroluje, zda |
| // zadaný adresář existuje. |
| { |
| // Převeď cestu na opravdovou, odstraň relativní odkazy |
| $Path = realpath($_SERVER['DOCUMENT_ROOT'].$Path); |
| // Zkontroluj, zda jsme nevybočili z webu |
| if ( 0 == strncmp($Path, $_SERVER['DOCUMENT_ROOT'], strlen($_SERVER['DOCUMENT_ROOT']) ) ) |
| { |
| // Shoda - odstraň DOCUMENT_ROOT část cesty |
| return substr( $Path, strlen($_SERVER['DOCUMENT_ROOT']) ); |
| } |
| else |
| { |
| // Vybočili jsme z webu |
| return ''; |
| } |
| } |
| function GetSection($Path) |
| // Vrátí první část cesty (to je to, co nazýváme sekce) |
| { |
| // Ignoruj lomítko na začátku |
| $Path = ltrim($Path, '/'); |
| // Vykousni první slovo až po lomítko |
| $Section = substr($Path, 0, strpos($Path.'/', '/')); |
| // Ošetři root |
| if ($Section=='') |
| $Section = "(root)"; |
| // Vrať výsledek |
| return $Section; |
| } |
| function LangFile($FileName, $Lang) |
| // Dostává cestu k souboru a jazyk. Zkusí ověřit existenci souboru s doplněným |
| // zadaným jazykem, dále zkusí angličtinu a nakonec zkusí nemodifikovaný název. |
| // Vrací jméno souboru s tou variantou, kterou našel. |
| { |
| // Najdi příponu (poslední tečka) |
| $Pos = strrpos($FileName, '.'); |
| if ($Pos === false) |
| return ''; |
| if ($Pos < strrchr($FileName, '/')) |
| return ''; |
| // Zkus doplnit zadaný jazyk |
| $File = substr($FileName, 0, $Pos+1).$Lang.substr($FileName, $Pos); |
| if (is_file($File)) |
| return $File; |
| // Zkus doplnit en |
| $File = substr($FileName, 0, $Pos+1).'en'.substr($FileName, $Pos); |
| if (is_file($File)) |
| return $File; |
| // Zkus soubor tak jak je |
| if (is_file($FileName)) |
| return $FileName; |
| // Nic nevyšlo |
| return ''; |
| } |
| function CreateFileLink($FileName, $Title='') |
| // Vstupem je cesta k souboru v rámci webu (od DOCUMENT_ROOT) |
| // a volitelně title (zobrazí se při najetí myši na odkaz). |
| // Vrací řetězec s odkazem |
| { |
| $FileName = htmlspecialchars($FileName); |
| $Link = '<a href="http://'.$_SERVER['SERVER_NAME'].$FileName.'"'; |
| if ($Title != '') |
| $Link .= "\n".' title="'.$Title.'"'; |
| $Link .= '>'; |
| if (basename($FileName)=='') |
| $Link .= '(root)'; |
| else |
| $Link .= basename($FileName); |
| $Link .= '</a>'; |
| return $Link; |
| } |
| function CreateFilesLink($Path, $Glue, $Title='') |
| // Sestaví odkazy na všechny soubory zadaného jména slepené lepidlem |
| // Volitelně lze zadat title (zobrazí se při najetí myši na odkaz). |
| // Cesta se chápe v rámci webu (od DOCUMENT_ROOT). |
| // Vrací řetězec s odkazy |
| { |
| // Při lepení odřádkujeme aby byl generovaný kód strukturovaný |
| $Glue = ' '.$Glue."\n"; |
| // Pro každou položku |
| $Line = ''; |
| $Ofset = strlen($_SERVER['DOCUMENT_ROOT']); |
| foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path, 0) as $DirName) |
| { |
| // Sestav odkaz |
| if (is_file($DirName)) |
| $Line .= $Glue.CreateFileLink(substr($DirName, $Ofset), $Title); |
| } |
| // Vrať výsledek ale bez lepidla na začátku |
| return substr($Line, strlen($Glue)); |
| } |
| function CreateScriptLink($Params, $DirName='', $Title='') |
| // Vytvoř odkaz na skript s parametry skriptu. Parametry jsou předány jako |
| // pole s jmény položek a hodnotami. Volitelná položka $DirName se přidá k cestě |
| // v položce $Params. Pokud je zadaná cesta prázdná nebo / zobrazí se slovo root |
| { |
| // Připoj volitelné jméno adresáře |
| if ($DirName!='') |
| $Params['path'] = $Params['path'].'/'.$DirName; |
| // Odvoď jméno z názvu adresáře |
| $DirName = basename($Params['path']); |
| if ($DirName == '') |
| { |
| $DirName = '(root)'; |
| $Params['path'] = '/'; |
| } |
| // Zpracuj pole parametrů |
| $ParamsLine = ''; |
| $LocalGlue = ''; |
| foreach($Params as $Key => $Value) |
| { |
| $ParamsLine .= $LocalGlue.$Key.'='.urlencode($Value); |
| $LocalGlue = '&'; |
| } |
| unset($LocalGlue); |
| // Sestav odkaz |
| $Link = '<a href="'.$_SERVER['SCRIPT_NAME'].'?'.$ParamsLine.'"'; |
| if ($Title!='') |
| $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; |
| $Link .= ">$DirName</a>"; |
| return $Link; |
| } |
| function CreateScriptLinkPath($Params, $Title) |
| // Vstupem je cesta (začínající /) od DOCUMENT_ROOT |
| // Výsledkem je řádka odkazů na jednotlivé adresáře cesty |
| // Odkazy jsou odkazy na skript s parametrem cesty a jazyka |
| // Vstupem je pole parametrů ze kterých použijeme parametr 'path', |
| // ostatní jen umístíme do odkazů. |
| { |
| // Rozděl cestu na kousky |
| $Parts = explode('/', $Params['path']); |
| if ($Parts[0]=='') |
| array_shift($Parts); // vyhoď případnou prázdnou položku |
| // Začínáme od rootu |
| $TempPath = ''; |
| // Odkaz na root (je vždy) |
| $Params['path'] = $TempPath; |
| $Link = CreateScriptLink($Params, '', $Title); |
| // Je něco víc než root? |
| if (isset($Parts[0]) && $Parts[0]!='') |
| { |
| // Odkaz na všechny další adresáře cesty |
| foreach($Parts as $Key => $Value) |
| { |
| // Přidej adresář |
| $TempPath .= '/'.$Value; |
| // Vyrob odkaz |
| $Link .= " /\n"; |
| $Params['path'] = $TempPath; |
| $Link .= CreateScriptLink($Params, '', $Title); |
| } |
| } |
| // Vrať výsledek |
| return $Link; |
| } |
| function CreateSVNLink($Path, $Lang, $Title) |
| // Vytvoří odkaz do WebSVN podle cesty a jazyka |
| { |
| $Path = htmlspecialchars($Path); |
| $Link = '<a href="http://'; |
| $Link .= $_SERVER['SERVER_NAME']; |
| $Link .= WEBSVNSCRIPT; |
| $Link .= '?repname=MLAB&path='; |
| $Link .= $Path; |
| $Link .= '/'; |
| if ($Lang=='cs') |
| $Link .= '&langchoice=Česky'; |
| else |
| $Link .= '&langchoice=English'; |
| $Link .= '"'; |
| if ($Title!='') |
| $Link .= "\n".' title="'.htmlspecialchars($Title).'"'; |
| $Link .= '>WebSVN</a>'; |
| return $Link; |
| } |
| function CreatePicturesLink($Path, $Glue, $Alt='', $NoPicture) |
| // Najde na uvedené cestě obrázky, které mají v názvu Small |
| // a sestaví na ně odkaz. Pokud není žádný obrázek, vytvoří odkaz na obrázek |
| // v parametru $NoPicture. |
| { |
| // Najdi všechny soubory |
| $Files = array(); |
| foreach (glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*') as $File) |
| { |
| if (is_file($File)) |
| { |
| // Jen jméno souboru |
| $File = substr($File, 1+strlen($_SERVER['DOCUMENT_ROOT'].$Path)); |
| // TOHLE ASI RADĚJI PŘEZ REGEX |
| // Odděl příponu |
| $DotPos = strrpos($File, '.'); |
| $Extension = substr($File, $DotPos+1); |
| $BaseName = substr($File, 0, $DotPos); |
| // Vezmi obrázky, které mají ve jméně Small |
| if( (strtolower($Extension)=='jpg' or strtolower($Extension)=='png') |
| and strpos($BaseName, 'Small')>0 ) |
| { |
| $Files[] = $Path.'/'.$File; |
| } |
| } |
| } |
| // V adresáři nejsou žádné vhodné obrázky |
| if (count($Files) == 0) |
| { |
| // Není na co udělat odkaz |
| if ($NoPicture=='') |
| return ''; |
| // Přidej odkaz nikam |
| $Files[] = $NoPicture; |
| } |
| // Udělej odkazy na pole souborů |
| $Alt = htmlspecialchars($Alt); |
| $Line = ''; |
| $FirstGlue = TRUE; |
| foreach($Files as $File) |
| { |
| $File = htmlspecialchars($File); |
| if(!$FirstGlue) |
| $Line .= ' '.$Glue."\n"; |
| $FirstGlue = FALSE; |
| $Line .= '<a href="'.$File.'">'."\n"; |
| $Line .= '<img src="'.$File.'"'."\n"; |
| $Line .= ' width="150"'."\n"; |
| $Line .= ' alt="'.$Alt.'">'."\n"; |
| $Line .= '</a>'."\n"; |
| } |
| return $Line; |
| } |
| ?> |
| /Server/GenIndex/DirMetadata.php |
|---|
| 0,0 → 1,141 |
| <?php |
| // DirMetadata |
| // ----------- |
| // |
| // Modul zpracování popisného souboru pro popis obsahu adresáře/projektu |
| // |
| // (c)miho www.mlab.cz 2007, free software |
| // |
| // Formát souboru DIRINFO viz komentáře v souboru DIRINFO |
| // |
| //require_once('Common.php'); // Společné funkce |
| // Objekt pro zpracování informace o adresáři |
| class DirMetadata |
| { |
| public $DirData; // Sem se načtou data o adresáři v podobě klíč=>hodnota |
| private $Valid; // Zde je příznak platnosti |
| function LoadDirInfo($FileName, $Lang) |
| // Funkce načte informacime ze souboru $FileName do vlastní paměti |
| // Cesta je od DOCUMENT_ROOT. |
| // Funkce bere v potaz zadaný jazyk, pokud není pro daný jazyk |
| // informace dostupná, použije se infromace bez udaného jazyka. |
| // Pokud není k dispozici soubor, vrací false. |
| // Soubor může být prázdný a není to chyba. |
| { |
| // Zruš předchozí informaci |
| $this->Valid = FALSE; |
| $this->DirData = array(); |
| // Jméno popisného souboru na cestě |
| $FileName = $_SERVER['DOCUMENT_ROOT'].$FileName; |
| // Ověř existenci popisného souboru |
| if (!is_file($FileName)) |
| return FALSE; |
| // Načti popisný soubor |
| $File = @file($FileName); |
| if ($File===FALSE) |
| return FALSE; |
| // Vyhoď komentáře (po řádcích) |
| foreach($File as $Key => $Line) |
| if (substr(ltrim($Line), 0, 2) == '//') |
| unset($File[$Key]); |
| // Sestav z pole jeden retězec |
| $File = implode($File); |
| // Vyhledej v souboru informace |
| $PatternKey = '\[(?P<Key>[a-z,A-Z,0-9,\-\_\.]+)\]'; |
| $PatternKeyNext = '(?=\[(?:[a-z,A-Z,0-9,\-\_\.]+)\])'; |
| $PatternValue = '(?P<Value>.*?)'; |
| $Pattern = '/'.$PatternKey.'\s*'.$PatternValue.'\s*'.$PatternKeyNext.'/su'; |
| preg_match_all($Pattern, $File, $Temp); |
| // Sestav pole dat |
| $Data = array(); |
| foreach($Temp['Key'] as $Key => $KeyName) |
| { |
| $Data[$KeyName] = trim(htmlspecialchars($Temp['Value'][$Key], ENT_NOQUOTES)); |
| //echo '{'.$KeyName.'->'.$Data[$KeyName].'<-}'."\n"; |
| } |
| unset($Temp); |
| // Aplikuj jazyk |
| // Priorita je "uvedený jazyk"/"bez jazyka" |
| foreach($Data as $Key => $Value) // projdi vše |
| { |
| $Temp = explode('.', $Key, 2); // základní část klíče |
| if (isset($Temp[1])) // existuje přípona |
| { |
| if ($Temp[1] == $Lang) // přípona |
| $Data[$Temp[0]] = $Value; // zkopíruj jazykovou hodnotu |
| unset($Data[$Key]); // klíč s příponou vyhoď |
| } |
| } |
| // Uschovej si získaná data |
| $this->Valid = TRUE; |
| $this->DirData = $Data; |
| // Soubor byl nalezen a načten |
| return TRUE; |
| } |
| function GetVariable($Key) |
| // Vrací řetězec s informaci podle klíče |
| // Když data nejsou, vrací prázdný řetězec |
| // Klíčem je jméno informace ze souboru DIRINFO bez jazykové přípony |
| { |
| // Test na přítomnost informace |
| if (isset($this->DirData[$Key])) |
| return $this->DirData[$Key]; |
| else |
| return ''; |
| } |
| function GetString($VarName, $Wrap=0) |
| // Vrátí parametr jako jeden řetězec s redukovanými bílými znaky |
| // Volitelně vloží odřádkování do delších řetězců |
| { |
| $Temp = $this->GetVariable($VarName); |
| $Temp = preg_replace('/\s+/su', ' ', $Temp); |
| if ($Wrap!=0) |
| wordwrap($Temp, $Wrap); |
| return $Temp; |
| } |
| // function GetList |
| function GetValid() |
| // Vrátí TRUE pokud je načtená informace o adresáři |
| { |
| return $this->Valid; |
| } |
| } |
| /* |
| function WrapString($String, $Wrap=0) |
| // Volitleně (pokud je $Wrap nenulové) provede zálámání na zadaný počet |
| // znaků a odstranění nadbytečných mezer |
| { |
| if ($Wrap!=0) |
| { |
| // Proveď zalámání hodnoty |
| preg_replace('/\s+/su', ' ', $Temp); |
| $String = wordwrap($String, $Wrap); |
| } |
| return $String; |
| } |
| */ |
| ?> |
| /Server/GenIndex/GenIndex.php |
|---|
| 0,0 → 1,264 |
| <?php |
| error_reporting(E_ALL); // nastavení varování při ladění |
| require_once('Common.php'); // Společné funkce |
| require_once('TemplateEngine.php'); // Stroj pro práci s templejty |
| require_once('DirMetadata.php'); // Modul pro načítání informace o adresářích |
| define('DIRINFO', 'DirInfo.txt', true); // Jméno souboru s informacemi o adresáři |
| define('PRJINFO', 'PrjInfo.txt', true); // Jméno souboru s informacemi o projektu |
| define('WRAP', 70, true); // Lámání řetězcových hodnot |
| define('TEMPLATEPATH', 'Templates', true); // relativní cesta k templejtům |
| $TemplateFile = 'Modules.ihtml'; // přípona jazyka se doplní sama |
| // Stavová informace |
| // ----------------- |
| // |
| // Tento skript používá pro přenesení stavu ke kliemtovi a zpět dvě stavové |
| // proměnné prostřednictvím odkazu. Jsou to: |
| // |
| // lang - zde je kód jazyka, neplatný či chybějící kód se mapuje na angličtinu |
| // |
| // path - zde se uvádí cesta vůči DOCUMENT_ROOT webu, neplatná cesta se mapuje |
| // na cestu k root adresáři webu |
| // |
| // Vyzvedni si parametry z URL |
| // --------------------------- |
| // Parametr cesty z položky path |
| // Načteme, ověříme a pokud je něco špatně vracíme root |
| $Path = ''; |
| if (isset($_GET['path'])) |
| $Path = CheckWebPath($_GET['path']); |
| if ($Path == '') |
| $Path = '/'; |
| $Params['path'] = $Path; |
| // Parametr jazyka z položky lang |
| // Pozor, tento parametr se nekontroluje a musí se ošetřit až při použití |
| // Předpokládá se, že neplatný jazyk se bude chovat jako angličtina |
| $Lang = 'en'; |
| if (isset($_GET['lang'])) |
| $Lang = substr($_GET['lang'], 0, 2); |
| $Params['lang'] = $Lang; |
| // Proveď zpracování templejtu nahrazovacím strojem |
| // ------------------------------------------------ |
| // Založ objekt templejtu |
| $Template = new TemplateEngine(); |
| // Načti templejt do objektu |
| $error = $Template->LoadTemplate(TEMPLATEPATH.'/'.$TemplateFile, $Params['lang']); |
| if ($error!='') |
| Error($error); |
| // Generuj dynamický obsah do proměnných |
| PowerFunction($Template, $Params); |
| // Odešli výsledek klientovi |
| echo $Template->GetPage(); |
| function PowerFunction($Template, $Params) |
| // Tato funkce vykonává maso (generuje dynamický obsah stránky do podoby pole |
| // proměnných. Toto pole se následně použije na modifikaci templejtu . |
| { |
| // Lokálně používané prametry pěkně při ruce |
| $Path = $Params['path']; |
| $Lang = $Params['lang']; |
| // Zjisti informace o sekci (z prvního adresáře cesty) |
| $SectionDirInfo = new DirMetadata(); |
| $SectionDirInfo->LoadDirInfo('/'.GetSection($Path).'/'.DIRINFO, $Lang); |
| // Pokud cesta sahá do sekce, která nemá popis spadneme do rootu |
| if(!$SectionDirInfo->GetValid()) |
| { |
| $Params['path'] = '/'; |
| $Path = $Params['path']; |
| } |
| // Zjisti informace o aktuálním adresáři |
| $ThisDirInfo = new DirMetadata(); |
| $ThisDirInfo->LoadDirInfo($Path.'/'.DIRINFO, $Lang); |
| // HTML hlavička - doplň sekci |
| $Template->SetVariable('InfoSection', GetSection($Path)); |
| // Zkopíruj informace z DIRINFO (z adresáře sekce a pak z aktuálního adresáře) |
| // do proměnných templejtu |
| foreach($SectionDirInfo->DirData as $Key => $Value) |
| { |
| $Template->SetVariable($Key, $Value, WRAP); |
| } |
| foreach($ThisDirInfo->DirData as $Key => $Value) |
| { |
| $Template->SetVariable($Key, $Value, WRAP); |
| } |
| // Klikací řádka s cestou |
| $Template->SetVariable('InfoPath', |
| CreateScriptLinkPath($Params, $Template->GetString('InfoPathTitle'))); |
| // Procházej adresář |
| // ----------------- |
| // Odstraň lomítko u prázdné cesty aby se nezdvojovalo |
| if ($Params['path']=='/') |
| $Params['path'] = ''; |
| // Objekt pro načítání informací o adresářích a projektech |
| $DirInfo = new DirMetadata(); |
| // Abych nešahal pořád do objektu, použiju proměnnou |
| $Glue = $Template->GetVariable('InfoGlue'); |
| // Sem se střádá mezivýsledek |
| // Zvlášť adresáře a projekty aby byly oddělené ve výsledku |
| $LinesDir = ''; // Adresáře |
| $LinesPrj = ''; // Projekty |
| // Procházení adresářem |
| $Dir = glob($_SERVER['DOCUMENT_ROOT'].$Path.'/*', GLOB_ONLYDIR); |
| // Vezmi jen jméno adresáře a vytvoř asociativní pole s klíči |
| foreach ($Dir as $Key => $DirName) |
| { |
| $DirName = basename($DirName); |
| $NewDir[$DirName] = $DirName; |
| } |
| $Dir = $NewDir; |
| unset($NewDir); |
| // Setřídění adresářů podle preferovaného třídění ze [SortPreferences] |
| $NewDir = array(); |
| $Sort = $ThisDirInfo->GetVariable('SortPreferences'); // vzorové třídění |
| if ($Sort!='') |
| { |
| $Sort = explode("\n", $Sort); |
| // Najdi a přendej nalezené položky |
| foreach ($Sort as $Value) |
| { |
| $Value = trim($Value); |
| if (isset($Dir[$Value])) |
| { |
| // Zařaď do nového pole |
| $NewDir[] = $Value; |
| // Vyhoď ze starého |
| unset($Dir[$Value]); |
| } |
| } |
| // Přendej zbylé položky |
| foreach ($Dir as $Value) |
| { |
| $NewDir[] = $Value; |
| } |
| $Dir = $NewDir; |
| unset($NewDir); |
| } |
| // Zpracování položek |
| foreach ($Dir as $DirName) |
| { |
| // Načti informace o (každém) adresáři |
| $DirInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.DIRINFO, $Lang); |
| // Pokud to není adresář, tak načti informace o projektu |
| if (!$DirInfoValid) |
| { |
| $ProjectInfoValid = $DirInfo->LoadDirInfo($Path.'/'.$DirName.'/'.PRJINFO, $Lang) |
| or |
| // Heuristika pro projekty, které ještě nemají popis |
| $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/DOC') |
| or |
| $ProjectInfoValid = is_dir($_SERVER['DOCUMENT_ROOT'].$Path.'/'.$DirName.'/SCH'); |
| } |
| // Zkontroluj, zda jsme v platné sekci |
| // if ($Path!='' || $Valid) |
| if ($DirInfoValid || $ProjectInfoValid) |
| { |
| // Připrav si proměnné |
| unset($Variables); |
| foreach($DirInfo->DirData as $Key => $Value) |
| { |
| $Variables[$Key] = $DirInfo->GetString($Key, WRAP); |
| } |
| $Variables['InfoName'] = |
| $DirInfoValid ? CreateScriptLink($Params, $DirName, $DirInfo->GetString('InfoLongDescription')) |
| : $DirName; |
| $Variables['InfoPicture'] = CreatePicturesLink($Params['path'].'/'.$DirName, $Glue, 'Žluťoučký kůň', TEMPLATEPATH.'/'.$Template->GetVariable('InfoNoPicture')); |
| $Variables['InfoDescripion'] = $DirInfo->GetString('InfoShortDescription', WRAP); |
| $Variables['InfoWebSVN'] = CreateSVNLink($Params['path'].'/'.$DirName, $Params['lang'], $Template->GetString('InfoSVNTitle')); |
| $Variables['InfoHTML'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/HTML/*.[hH][tT][mM][lL]', $Glue); |
| $Variables['InfoPDF'] = CreateFilesLink($Params['path'].'/'.$DirName.'/DOC/*.[pP][dD][fF]', $Glue); |
| $Variables['InfoSCH'] = CreateFilesLink($Params['path'].'/'.$DirName.'/SCH/*.[pP][dD][fF]', $Glue); |
| // Poukni proměnné do vzoru a střádej si výsledek |
| if ($DirInfoValid) |
| $LinesDir .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| else |
| $LinesPrj .= $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| } |
| } |
| // Slož k sobě obě části (adresář / separátor / projekt) |
| if ($LinesDir!='' and $LinesPrj!='') |
| $Lines = $LinesDir.$Template->GetString('InfoSeparator').$LinesPrj; |
| else |
| $Lines = $LinesDir.$LinesPrj; |
| // Teď sestavené položky ulož do proměnné "InfoLine" objektu |
| $Template->SetVariable('InfoLine', $Lines); |
| } |
| /* |
| //Načtení adresáře |
| if ((Is_Dir($path.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1)) && (substr($soubor1,0,1) <> ".") && (substr($soubor1,0,1) <> "!")) { |
| //Nastavení suffixu u obrázků |
| $img = $soubor1."_Small.jpg"; |
| //Pokud existuje náhled obrázku, zobraz ho |
| if (file_exists($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$img)) { |
| echo "<td><A HREF=\"image.php?pth=".$HTTP_GET_VARS["file"]."/".$soubor1."&fname=".$soubor1."\" TARGET=\"_blank\"><img src=\"thumb.php?pth=".$HTTP_GET_VARS["file"]."/".$soubor1."&fname=".$soubor1."\" border=\"0\"></a></td>\n"; |
| } else { echo "<td><img src=\"thumb.php?pth=".$HTTP_GET_VARS["file"]."/".$soubor1."&fname=".$soubor1."\"></td>\n"; } |
| //Pokud existuje HTML dokumentace k modulu vytvoř na ni odkaz |
| if (file_exists($path.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1."/DOC/HTML/".$soubor1.".".$lang.".html")) { |
| echo "<td><a href=\"".$www.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1."/DOC/HTML/".$soubor1.".".$lang.".html\">".$soubor1."</a></td>\n"; |
| } else { echo "<td>".$soubor."<b>".$soubor1."</b></td>\n"; } |
| //Pokud existuje PDF dokumentace k modulu zobraz odkaz |
| if (file_exists($path.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1."/DOC/".$soubor1.".".$lang.".pdf")) { |
| echo "<td><a href=\"".$www.$folder."/".$HTTP_GET_VARS["file"]."/".$soubor1."/DOC/".$soubor1.".".$lang.".pdf\">PDF</a></td>\n"; |
| } else { echo "\n<td>-</td>\n"; } |
| //WebSVN odkaz |
| echo "<td><a href=\"http://www.mlab.cz/WebSVN/listing.php?repname=MLAB&path=/Modules/".$HTTP_GET_VARS["file"]."/".$soubor1."/\">WebSVN</a></td>\n"; |
| //Pokud existuje stručné info, zobraz ho |
| if (file_exists($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$info1)) { |
| $fp = FOpen ($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$info1, "r"); |
| $data = FRead ($fp, FileSize ($path.$folder.'/'.$HTTP_GET_VARS["file"]."/".$soubor1."/".$info1)); |
| FClose ($fp); |
| echo "<td>".wordwrap($data, 50, "<br>")."</td>\n"; |
| } else { echo "\n<td><i>No description available</i></td>\n"; } |
| echo "</tr>\n\n"; |
| } |
| $PathEncoded = URLEncode($Path.'/'.$FileName); |
| $htmllink = "<a href='".$_SERVER['SCRIPT_NAME']."?lang=$Lang&path=$PathEncoded'>$FileName</a>"; |
| */ |
| ?> |
| /Server/GenIndex/TemplateEngine.php |
|---|
| 0,0 → 1,277 |
| <?php |
| // Template Engine |
| // --------------- |
| // |
| // Tento modul zpracovává tmplejty a strká do nich dynamicky geenrované |
| // informace a vytváří tak dynamické HTML stránky s oddělenou logikou |
| // programu a vzhledu. |
| // |
| // Více viz popis činnosti v konentáři na začátku templejtu |
| // |
| // (c)miho www.mlab.cz 2007, free software |
| // |
| // Typické použití objektu je toto: |
| // |
| // - Založ objekt templejtu (new) |
| // - $Template = new TemplateEngine(); |
| // |
| // - Načti templejt ze souboru do objektu (ošetři chybu!) |
| // - $error = $Template->LoadTemplate($TemplateFile); |
| // |
| // - Tady se provádí generování masa, je možné použít proměnné, |
| // - modifikovat proměnné a nechat provéstsubstituce v proměnných |
| // - do řetězců. |
| // |
| // $Template->SetVariable('InfoTitle','Generovaný seznam'); |
| // - první parametr je jméno proměnné, druhý je jeho nový obsah |
| // |
| // $Line = $Template->SetVariable('InfoLine') |
| // - vrací obsah proměnné nebo prázdný řetězec |
| // |
| // - Připrav si proměnné, které se budou strkat do vzorového řetězce |
| // $Variables[InfoName] = 'nějaká informace pro proměnnou InfoName'; |
| // $Variables[InfoPicture] = 'jiná informace pro proměnnou InfoPicture'; |
| // - aplikuj (nahraď) proměnné na vzorový řetězec z propměnné 'InfoLine' |
| // $Line = $Template->Substitute($Variables, $Template->GetVariable('InfoLine')); |
| // |
| // - Nakonec se naaplikují proměnné do nataženého templejtu a výsledek |
| // - se pošle klientovi |
| // echo $Template->GetPage(); |
| // |
| // Objekt pro zpracování templejtu |
| class TemplateEngine |
| { |
| private $Page; // Sem se načte templejt a zde se provádí substituce |
| private $Info; // Sem se načtou z templejtu proměnné |
| function ListInfo() |
| // Vypíše nalezené proměnné a jejich hodnoty |
| // Pouze pro ladění |
| { |
| echo "[ ListInfo:\n"; |
| print_r($this->Info); |
| echo ']'; |
| } |
| function LoadTemplate($TemplateFileName, $Lang) |
| // Načte templejt ze souboru, při chybě vrací chybový řetězec |
| // Snaží se rozumně využít informaci o jazyku k otevření správné verze |
| // templejtu. Cesta se zadává bez jazykové části ale s příponou. |
| { |
| // Vlož zadaný jazyk do názvu souboru |
| $TemplateFileName = LangFile($TemplateFileName, $Lang); |
| // Načti template ze souboru (po řádcích do pole) |
| $this->Page = @file($TemplateFileName); |
| if ($this->Page=='') |
| return 'Unable Open Template File'; |
| // Sestav z pole jeden retězec |
| $this->Page = implode($this->Page); |
| // Definice regulárních výrazů pro hledání |
| // --------------------------------------- |
| // Definice vzoru pro hledání komentáře ve tvaru <!-- --> |
| // Komentář je nepojmenované pole |
| // Před a za koentářem mohou být bílé znaky |
| // Uvnitř komentáře nesmí být znak > |
| $PatternComment = '(?:\s*<!--[^>]*--\s*>\s*)'; |
| // (?: nepojemnované pole |
| // \s* volitelné bílé znaky před |
| // <!-- začátek komentáře |
| // [^>]* vniřek komentáře (neobsahuje >) |
| // --\s*> konec komentáře |
| // \s* volitelné bílé znaky za komentářem |
| // ) tady končí komentář |
| // Definice vzoru pro hledání proměnných ve tvaru $InfoXXX |
| $PatternVar ='\$(?P<VarName>Info[a-z,A-Z,0-9,\-\_]+)'; |
| // \$ na začátku $ |
| // (?P<VarName> pojmenované pole VarName je (jméno proměnné bez dolaru) |
| // Info[a-z,A-Z,0-9,\-\_]+ proměnná začíná Info a pak jsou písmena, |
| // ) číslice, mínus a podtržítko |
| // Definice vzoru pro hledání hodnot proměnných ve tvaru = " Hodnota " |
| // Definice hodnot je ve tvaru $InfoXXX="YYY" a mohou být víceřádkové |
| // ( a mohou obsahovat uvnitř další substituce uvozené $, které program |
| // zpracovává ale ne tady) |
| $PatternValue = '\s*=\s*"(?P<VarValue>[^"]*)"'; |
| // \s*=\s* rovná se volitelnými bílými znaky okolo |
| // " hodnota v uvozovkách |
| // (?P<VarValue> parametr s názvem VarValue |
| // [^"]* hodnota nesmí obsahovat uvozovky |
| // ) vracíme hodnotu bez uvozovek |
| // " konec uvozovek |
| // Zparacování vzoru |
| // ----------------- |
| // Najdi na začátku stránky komentář a vykousni ho |
| $pattern = '/^' .$PatternComment. '+/su'; |
| $this->Page = preg_replace($pattern, '', $this->Page); |
| // / oddělovač |
| // ^ od začátku řetězce (jen komentáře na začátku souboru) |
| // $PatternComment komentář (<!-- -->) s bílými znaky okolo |
| // + alespoň jeden komentář |
| // /su modifikátor, . zastupuje i odřádkování, utf8 |
| // Najdi v templejtu substutuční proměnné a vytvoř v poli $Info |
| // prázdné položky pro každou použitou proměnnou. Dělá se to proto, |
| // aby se na konci nepoužité proměnné nahradily prázdným řetězcem. |
| $pattern = '/' .$PatternVar. '/su'; |
| preg_match_all($pattern, $this->Page, $temp); |
| // / oddělovač |
| // .$PatternVar. proměnná ( $InfoXXX ) - parametr VarName |
| // /su modifikátor zajistí, že . zastupuje i odřádkování, utf8 |
| foreach($temp['VarName'] as $key => $value) |
| $this->Info[$value] = ''; |
| unset($temp); |
| // Vytáhni proměnné a jejich hodnoty do pole $Info |
| $pattern = '/' .$PatternVar.$PatternValue. '/su'; |
| // / oddělovač |
| // .$PatternVar. proměnná ( $InfoXXX ) - parametr VarName |
| // .$PatternValue. přiřazení ( = " Hodnota " ) - parametr VarValue |
| // /su modifikátor, . zastupuje i odřádkování, UTF8 |
| preg_match_all($pattern, $this->Page, $temp); |
| foreach($temp['VarName'] as $key => $value) |
| $this->Info[$value] = $temp['VarValue'][$key]; |
| unset($temp); |
| // Vykousej zpracované definice proměnných (a komentáře před nimi) |
| $pattern = '/' .$PatternComment.'?'.$PatternVar.$PatternValue. '/su'; |
| // / oddělovač |
| // .$PatternComment.'?' volitelný komentář před definicí |
| // .$PatternVar. proměnná ( $InfoXXX ) |
| // .$PatternValue. přiřazení ( = " Hodnota " ) |
| // /su modifikátor, . zastupuje i odřádkování, UTF8 |
| $this->Page = preg_replace($pattern, '', $this->Page); |
| } |
| function Indent($StringData, $Indent) |
| // Všechna odřádkování v řetězci $StringData odsadí o hodnotu $Indent pokud je |
| // $Indent číslo nebo o déllku řetězce $Indent pokud je to řetězec |
| { |
| // Velikost odsazení (vyrob číslo) |
| if (is_string($Indent)) |
| $Num = mb_strlen($Indent,'utf-8'); |
| else |
| $Num = 0+$Indent; |
| // Odsazení |
| return $StringData = $Indent.str_replace("\n", "\n".str_repeat(' ', $Num), $StringData); |
| } |
| /* |
| function Substitute($Variables, $String) |
| // Nahradí proměnné v řetězci $String obsahem proměnných z pole $Variables |
| // a vrátí výsledný řetězec |
| { |
| if (is_array($Variables)) |
| { |
| foreach($Variables as $Key => $Value) |
| { |
| // Hledací vzor (hledáme proměnnou s názvem v $Key) |
| $Pattern = '\$'.$Key.'(?=[^a-z,A-Z,0-9,\-\_])'; |
| // \$$Key hledáme $JmenoProměnné |
| // (?= následuje něco, co nemůže být jménem |
| // [^a-z,A-Z,0-9,\-\_] a nezajímá nás |
| // ) |
| // Vkládáme více řádek? |
| $IsMultiline = !(strpos($Value, "\n") === FALSE); |
| if (!$IsMultiline) |
| { |
| // Vkládáme jednoduchý řetězec |
| $String = preg_replace('/'.$Pattern.'/su', $Value, $String); |
| // /su víceřádkové v UTF8 |
| } |
| else |
| { |
| // Vkládáme řetezec s odřádkováním - je třeba odsazovat |
| $String = preg_replace('/(.*)'.$Pattern.'/ue', |
| "\$this->Indent(\$Value, '\\1')", |
| $String); |
| // (.*) hledáme cokoli před vzorem -> první parametr |
| // .$Pattern. proměnná |
| // /ue UTF8, náhrada je php skriptem |
| } |
| } |
| } |
| return $String; |
| } |
| */ |
| function Substitute($Variables, $String) |
| // Nahradí proměnné v řetězci $String obsahem proměnných z pole $Variables |
| // a vrátí výsledný řetězec |
| { |
| // Hledací vzor |
| $Pattern = '/(.*?)\$(Info[a-z,A-Z,0-9,\-\_]+)(?=[^a-z,A-Z,0-9,\-\_])/ue'; |
| // Náhrada s kusem php kódu (nezapomeň, že preg_replace s přepínačem /e vrací oescapované řetězce) |
| $String = preg_replace($Pattern, |
| 'isset($Variables[\'\2\']) |
| ? $this->Indent($Variables[\'\2\'], stripslashes(\'\1\')) |
| : stripslashes(\'\1\') |
| ', |
| $String); |
| return $String; |
| } |
| function SetVariable($VarName, $VarValue, $Wrap=0) |
| // Nastaví hodnotu proměnné |
| // Volitelně provede zálámání na zadaný počet znaků a odstranění nadbytečných mezer |
| { |
| // Volitelné zalámání a odstranění bílých znaků |
| if ($Wrap!=0) |
| $VarValue = WrapString($VarValue, $Wrap); |
| // Uložení do proměnných |
| $this->Info[$VarName] = $VarValue; |
| } |
| function GetVariable($VarName) |
| // Vrátí hodnotu proměnné tak, jak je, včetně mezer a odřádkování |
| { |
| if (isset($this->Info[$VarName])) |
| return $this->Info[$VarName]; |
| else |
| return ''; |
| } |
| function GetString($VarName) |
| // Vrátí parametr jako jeden řetězec s redukovanými bílými znaky |
| // Tedy bez odřádkování a nadbytečných mezer |
| { |
| return WrapString($this->GetVariable($VarName), 0); |
| } |
| function GetPage() |
| // Provede substituce ve stránce a vrátí ji jako řetězec |
| // Substituce bere z proměnné $Info |
| { |
| // Proveď ve stránce substituce proměnných a vrať výsledek |
| return $this->Substitute($this->Info, $this->Page); |
| } |
| } |
| ?> |
| /Server/GenIndex/Templates/DirInfo.txt |
|---|
| 0,0 → 1,57 |
| // |
| // Toto je popisný soubor pro popis obsahu adresáře (příklad) |
| // |
| // Syntaxe je tato: |
| // |
| // - Všechny řádky začínající znaky // jsou komentáře |
| // |
| // - Soubor je v kódování UTF8 |
| // |
| // - Informace je uvozena značkou [Key] |
| // [Key] je klíč, který říká co je to za informaci |
| // [Key.en] je klíč s informací pro jazyk en |
| // Informace v jazyce má přednost před informací bez jazyka |
| // |
| // - Pokud klíč začíná Info (například [InfoShortDescription] ) tak se tato |
| // informace vloží do místa v templejtu označeném jako $InfoShortDescription |
| // |
| // - Konec souboru je uvozen značkou [End] |
| // |
| // - Informace je prostý text (nepoužívejte HTML značky) |
| // |
| // - Na pořadí položek v souboru nezáleží |
| // |
| // Zavedené klíče, příklad: |
| // |
| // [InfoShortDescription.cs] |
| // Krátký popis (nadpis) v češtině |
| // |
| // [InfoShortDescription.en] |
| // Short description (title) in English |
| // |
| // [InfoShortDescription] |
| // Short descriptpion for other languages |
| // |
| // [InfoLongDescription.en] |
| // A longer description (one paragraph, 2-4 lines max). The whole sentences |
| // with period et the end. |
| // |
| // [InfoLongDescription.cs] |
| // Delší popis na jeden odstavec, tak do 2-4 řádek. V celých větách a tečkou |
| // na konci |
| // |
| // [SortPreferences] |
| // Seznam adresářů pro třídění |
| // |
| [InfoShortDescription.en] |
| [InfoShortDescription.cs] |
| [InfoLongDescription.en] |
| [InfoLongDescription.cs] |
| [SortPreferences] |
| [End] |
| /Server/GenIndex/Templates/Modules.cs.ihtml |
|---|
| 0,0 → 1,178 |
| <!-- Templejt pro tvorbu indexu --> |
| <!-- |
| Templejt |
| ======== |
| Tento templejt je zpracováván substitučním strojem, který funguje tak, že |
| provede tyto úkony: |
| - načte templejt (do své paměti) |
| - vyhodí tento komentář (všechny komentáře před první platnou řádkou) |
| - najde v něm všechny proměnné ve tvaru $InfoXXX a zapamatuje si je |
| - najde v něm všechna nastavení proměnných ve tvaru $InfoXXX = "YYY" a zapamatuje si je |
| - vyhodí z templejtu definice proměnných a případný komentář bezprostředně před definicí |
| Poté je možné programem upravit obsah proměnných (typicky se generují |
| data na základě jiných proměnných a dat z disku na webu). Všechny proměnné |
| jsou programu dostupné v podobě pole, kde klíčem je jméno proměnné (bez |
| dolaru) a hodnotou je řetězec (i prázdý). Program může proměnné modifikovat |
| a definovat další (které se nepoužijí nejsou-li v právě použitém templejtu |
| použity). |
| - provede substituci proměnných jejich obsahem |
| - výsledný řetězec - html stránku - předá klientovi |
| Proměnné |
| ======== |
| Proměnné jsou definovány pouze v templejtu. Co není v templejtu |
| označeno jako proměnná nenahradí se skutečným obsahem. Aby mohl být |
| templejt přehledný je dovoleno používat víceřádkové obsahy proměnných. |
| Definice hodnot je ve tvaru $InfoXXX = "YYY", kde |
| $InfoXXX je jméno proměnné (XXX jsou písmena, číslice, - a _ ) |
| YYY je hodnota proměnné (je v uvozovkách, uvnitř použijte apostrofy) |
| Hodnota proměnné může být na více řádků a může obsahovat odakazy na proměnné, |
| které se nahradí hodnotou těchto proměnných. |
| Definice hodnot proměnných bez jejich použití v templejtu se používá například |
| při definici jazykově závislých řetězců pro program (program je jazykově |
| nezávislý). |
| Substituce |
| ========== |
| Úvodní komentáře na začátku templejtu budou odstraněny. |
| Všechny výskyty proměnných v templejtu budou nahrazeny hodnotou proměnných. |
| Hodnota proměnné může být prázdná, definovaná v templejtu nebo vypočítaná |
| programem. Proměnné mouhou být v templejtu i vícekrát (nahradí se všude). |
| Všechny definice hodnot proměnných se z templejtu odstraní. Nezáleží na místě |
| definice v templejtu. Vícenásobné uvedení hodnoty si (asi) zapamatuje poslední |
| uvedenou hodnotu. |
| --> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="../../Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
| <link rel="StyleSheet" href="../../Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="../../Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="../../Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="cs"> |
| <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== HLAVICKA ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "Popis není k dispozici" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <h1 class="Small"> $InfoPath </h1> |
| $InfoPathTitle = "Klikací cesta zpět" |
| <table> |
| <tr> |
| <th>Název</th> |
| <th>Náhled</th> |
| <th>Popis</th> |
| <th>WebSVN</th> |
| <th>HTML</th> |
| <th>PDF</th> |
| </tr> |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <tr> |
| <td> $InfoName</td> |
| <td> $InfoPicture</td> |
| <td> <p><i> $InfoDescripion</i></p> |
| <p class='Small'> $InfoLongDescription</p></td> |
| <td> $InfoWebSVN</td> |
| <td> $InfoHTML</td> |
| <td> $InfoPDF</td> |
| </tr> |
| " |
| <!-- Formát elementu pro oddělení adresářů a projektů --> |
| $InfoSeparator = |
| " |
| <tr> |
| <td colspan='6'> <hr> </td> |
| </tr>" |
| <!-- Lepidlo pro spojování více odkazů najednou v jedné položce --> |
| $InfoGlue = "<br>" |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoPicture = "NoPicture.jpg" |
| $InfoNoInfo = "--" |
| $InfoSVNTitle = "Přístup ke všem souborům" |
| </table> |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
| <!-- ============== PATIČKA ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/GenIndex/Templates/Modules.en.ihtml |
|---|
| 0,0 → 1,108 |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| <title> $InfoHeadTitle $InfoSection </title> |
| <meta name="keywords" content="$InfoKeyWords"> |
| <meta name="description" content="$InfoDescription"> |
| <!-- AUTOINCLUDE START "Page/Head.en.ihtml" DO NOT REMOVE --> |
| <link rel="StyleSheet" href="../../Web/CSS/MLAB.css" type="text/css" title="MLAB Basic Style"> |
| <link rel="StyleSheet" href="../../Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
| <link rel="shortcut icon" type="image/x-icon" href="../../Web/PIC/MLAB.ico"> |
| <script type="text/javascript" src="../../Web/JS/MLAB_Menu.js"></script> |
| <!-- AUTOINCLUDE END --> |
| </head> |
| <body lang="en"> |
| <!-- AUTOINCLUDE START "Page/Header.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== HEADER ============== --> |
| <div class="Header"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawHeader(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the header </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- AUTOINCLUDE START "Page/Menu.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== MENU ============== --> |
| <div class="Menu"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawMenu(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the menu </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| <!-- ============== TEXT ============== --> |
| <div class="Text"> |
| $InfoNoText = "No Description Available" |
| <p class="Title"> |
| $InfoShortDescription |
| </p> |
| <p class="Subtitle"> |
| $InfoLongDescription |
| </p> |
| <!-- Klikací řádka s cestou --> |
| <table> |
| <tr> |
| <td> <h1 class='Small'>$InfoPath</h1> </td> |
| </tr> |
| </table> |
| $InfoPathTitle = "The Easy Way Back ..." |
| <!-- Řádky indexu se vkládají sem --> |
| $InfoLine |
| <!-- Formát vkládané řádky --> |
| $InfoLine = |
| " |
| <hr> |
| <h2 class='Small'>$InfoName</h2> |
| <p> |
| $InfoPicture |
| $InfoDescripion<br> |
| $InfoWebSVN |
| $InfoHTML |
| $InfoPDF |
| </p> |
| " |
| <!-- Lepidlo pro spojování více odkazů najednou v jedné položce --> |
| $InfoGlue = " " |
| <!-- Co se dává do položek, které nemají obsah --> |
| $InfoNoInfo = "--" |
| $InfoSVNTitle = "Accsess to All Files" |
| </div> |
| <!-- AUTOINCLUDE START "Page/Footer.en.ihtml" DO NOT REMOVE --> |
| <!-- ============== FOOTER ============== --> |
| <div class="Footer"> |
| <script type="text/javascript"> |
| <!-- |
| SetRelativePath("../../"); |
| DrawFooter(); |
| // --> |
| </script> |
| <noscript> |
| <p><b> JavaScript is required for including of the footer </b></p> |
| </noscript> |
| </div> |
| <!-- AUTOINCLUDE END --> |
| </body> |
| </html> |
| /Server/GenIndex/Templates/NoPicture.jpg |
|---|
| Cannot display: file marked as a binary type. |
| svn:mime-type = application/octet-stream |
| Property changes: |
| Added: svn:mime-type |
| +application/octet-stream |
| \ No newline at end of property |