User Tools

Site Tools


cern:index

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
cern:index [2018/05/02 11:45] iwncern:index [2023/10/04 16:10] iwn
Line 1: Line 1:
-Include this file in each directory of your website to display plots in a nice and searchable way ([[cern:website|full instructions]]). Made by Giovanni.+Include this file in each directory of your website to display plots in a nice and searchable way ([[cern:website|full instructions]]). Made by Giovanni. (Replace the location of your website's icon ''favicon.ico''.)
  
 <file bash index.php> <file bash index.php>
 +<?php
 +preg_match("|^(\w+)\.|",$_SERVER["SERVER_NAME"],$usr); // get username from hostname $USER.web.cern.ch
 +$pwd = preg_replace("|^((\w)\w+)|","/eos/user/$2/$1/www/",$usr[1]); // get base path
 +$pwd = $pwd.preg_replace("|^\/(?:$usr[1]\/)?([^\?]*)(?:\?.*)?$|","$1",$_SERVER["REQUEST_URI"]); // get subdirectory
 +//$pwd = $pwd.preg_replace("|(?<=\/)\?.*|","",$_SERVER["REQUEST_URI"]); // remove question mark
 +$pwdshort = preg_replace("(.*www\/)","$usr[1]/",$pwd);
 +if(!chdir($pwd)) { // try to go to directory
 +  $msg = "Could not find ".$_SERVER["REQUEST_URI"]."...";
 +  $msg .= "Could not find $pwd...";
 +  print_r($_SERVER);
 +  echo $msg; throw new Exception($msg);
 +}
 +?>
 <html> <html>
 <head> <head>
-<title><?php echo getcwd(); ?></title>+<title><?php echo $pwdshort; ?></title
 +<link rel="SHORTCUT ICON" type="image/x-icon" href="https://ineuteli.web.cern.ch/ineuteli/favicon.ico"/>
 <style type='text/css'> <style type='text/css'>
-body {+  body {
     font-family: "Candara", sans-serif;     font-family: "Candara", sans-serif;
     font-size: 9pt;     font-size: 9pt;
     line-height: 10.5pt;     line-height: 10.5pt;
-+  
-div.pic h3 {  +  div.pic h3 { 
-    font-size: 11pt;+    font-size: 9pt;
     margin: 0.5em 1em 0.2em 1em;     margin: 0.5em 1em 0.2em 1em;
-+  
-div.pic p {+  div.pic p {
     font-size: 11pt;     font-size: 11pt;
     margin: 0.2em 1em 0.1em 1em;     margin: 0.2em 1em 0.1em 1em;
-+  
-div.pic {+  div.pic {
     display: block;     display: block;
     float: left;     float: left;
Line 27: Line 41:
     text-align: center;     text-align: center;
     margin: 2px 10px 10px 2px;     margin: 2px 10px 10px 2px;
-    -moz-box-shadow: 7px 5px 5px rgb(80,80,80);    /* Firefox 3.5 */ +    -moz-box-shadow: 6px 4px 4px rgb(80,80,90);    /* Firefox 3.5 */ 
-    -webkit-box-shadow: 7px 5px 5px rgb(80,80,80); /* Chrome, Safari */ +    -webkit-box-shadow: 6px 4px 4px rgb(80,80,90); /* Chrome, Safari */ 
-    box-shadow: 7px 5px 5px rgb(80,80,80);         /* New browsers */  +    box-shadow: 6px 4px 4px rgb(80,80,90);         /* New browsers */  
     width: 320px;     width: 320px;
-+    min-height: 330px; 
-a { text-decoration: none; color: rgb(80,0,0); } +    max-height: 360px; 
-a:hover { text-decoration: underline; color: rgb(255,80,80); } +  
-div.dirlinks h2 {  margin-bottom: 4pt; margin-left: -24pt; color: rgb(80,0,0);  +  h1 { color: rgb(40,40,80);
-div.dirlinks {  margin: 0 24pt; }  +  h2 { padding-top: 5pt; } 
-div.dirlinks a {+  h2 a { color: rgb(20,20,100); }  
 +  h3 a { color: rgb(40,40,120);
 +  a { text-decoration: none; color: rgb(50,50,150); } 
 +  a:hover { text-decoration: underline; color: rgb(80,80,250); } 
 +  div.dirlinks h2 { padding-top: 0pt; margin-bottom: 4pt; margin-left: -15pt; color: rgb(20,20,80); } 
 +  div.dirlinks { margin: 0 15pt; }  
 +  div.dirlinks a {
     font-size: 11pt; font-weight: bold;     font-size: 11pt; font-weight: bold;
     padding: 0 0.5em;      padding: 0 0.5em; 
-}+  } 
 +  pre { 
 +    font-family: monospace; 
 +    max-width:1000px; 
 +    white-space: pre-wrap;     /* css-3 */ 
 +    white-space: -moz-pre-wrap !important; /* Mozilla */ 
 +    white-space: -pre-wrap;    /* Opera 4-6 */ 
 +    white-space: -o-pre-wrap;  /* Opera 7 */ 
 +    word-wrap:   break-word;   /* Internet Explorer 5.5+ */ 
 +  }
 </style> </style>
 </head> </head>
 <body> <body>
-<h1><?php echo getcwd(); ?></h1>+<h1><?php echo $pwd;?></h1> 
 +<!-- <h1><?php echo getcwd();?></h1> -->
 <?php <?php
 $has_subs = false; $has_subs = false;
-foreach (glob("*") as $filename) { +foreach(glob("*") as $filename){ 
-    if (is_dir($filename) && !preg_match("/^\..*|.*private.*/", $filename)) { +    if(is_dir($filename) && !preg_match("/^\..*|.*private.*/", $filename)){ 
-        $has_subs = true; +      $has_subs = true; 
-        break;+      break;
     }     }
 } }
-if ($has_subs) {+if($has_subs){
     print "<div class=\"dirlinks\">\n";     print "<div class=\"dirlinks\">\n";
     print "<h2>Directories</h2>\n";     print "<h2>Directories</h2>\n";
     print "<a href=\"../\">[parent]</a> ";     print "<a href=\"../\">[parent]</a> ";
-    foreach (glob("*") as $filename) { +    foreach(glob("*") as $filename){ 
-        if (is_dir($filename) && ($_SERVER['PHP_AUTH_USER'] == 'gpetrucc' || !preg_match("/^\..*|.*private.*/", $filename))) { +      if(is_dir($filename) && ($_SERVER['PHP_AUTH_USER'] == 'gpetrucc' || !preg_match("/^\..*|.*private.*/", $filename))){ 
-            print " <a href=\"$filename\">[$filename]</a>"; +          print " <a href=\"$filename\">[$filename]</a>"; 
-        }+      }
     }     }
 +    print "</div>";
 +}else{
 +    print "<div class=\"dirlinks\">\n";
 +    print "<h2><a href=\"../\">[parent]</a></h2>";
     print "</div>";     print "</div>";
 } }
  
-foreach (array("00_README.txt", "README.txt", "readme.txt") as $readme) { +foreach(array("00_README.txt", "README.txt", "readme.txt") as $readme){ 
-    if (file_exists($readme)) { +    if(file_exists($readme)){ 
-        print "<pre class='readme'>\n"; readfile($readme); print "</pre>";+        #print "<pre class='readme'>\n"; readfile($readme); print "</pre>"; 
 +        $readmeblock = file_get_contents($readme); 
 +        #$readmeblock = preg_replace("|\[\[([^\|\]]*)\|([^\|\]]*)\]\]|","<a href=\"$1\">$2</a>",$readmeblock); 
 +        $readmeblock = preg_replace("|\[\[((?:(?!\]\])[^\|])*)\|([^\|\]]*)\]\]|","<a href=\"$1\">$2</a>",$readmeblock); 
 +        $readmeblock = preg_replace("|\[\[([^\|\]]*)\]\]|","<a href=\"$1\">$1</a>",$readmeblock); 
 +        print "<pre class='readme'>\n"; print $readmeblock; print "</pre>";
     }     }
 } }
Line 72: Line 111:
  
 <h2><a name="plots">Plots</a></h2> <h2><a name="plots">Plots</a></h2>
-<p><form>Filter: <input type="text" name="match" size="30" value="<?php if (isset($_GET['match'])) print htmlspecialchars($_GET['match']);  ?>" /><input type="Submit" value="Go" /><input type="checkbox"  name="regexp" <?php if ($_GET['regexp']) print "checked=\"checked\""?> >RegExp</input></form></p>+<p><form>Filter: <input type="text" name="match" size="30" value="<?php if(isset($_GET['match'])) print htmlspecialchars($_GET['match']); ?>" /><input type="Submit" value="Go" /><input type="checkbox"  name="regexp" <?php if($_GET['regexp']) print "checked=\"checked\""?> >RegExp</input></form></p>
 <div> <div>
 <?php <?php
 +
 +function matches($filename,$keywords,$regex) { // match filename to filter
 +  if(isset($_GET['match'])){
 +    foreach($keywords as $keyword){
 +      if($regex){
 +        if(!preg_match('/.*'.$keyword.'.*/', $filename))
 +          return false;
 +      }else{
 +        if(!fnmatch('*'.$keyword.'*', $filename))
 +          return false;
 +      }
 +    }
 +  }
 +  return true;
 +}
 +
 +function is_animated($filename) { // check if gif is animated
 +  // https://www.php.net/manual/en/function.imagecreatefromgif.php#104473
 +  if(!($fh = @fopen($filename,'rb')))
 +    return false;
 +  $count = 0;
 +  while(!feof($fh) && $count < 2) {
 +    $chunk = fread($fh, 1024 * 100); //read 100kb at a time
 +    $count += preg_match_all('#\x00\x21\xF9\x04.{4}\x00(\x2C|\x21)#s', $chunk, $matches);
 +  }
 +  fclose($fh);
 +  return $count > 1;
 +}
 +
 $displayed = array(); $displayed = array();
-if ($_GET['noplots']) {+if($_GET['noplots']){
     print "Plots will not be displayed.\n";     print "Plots will not be displayed.\n";
-} else { +}else{ 
-    $other_exts = array('.pdf', '.cxx', '.eps', '.root', '.txt', '.dir', '.info'); +     
-    $filenames = glob("*.png"); sort($filenames); +    // Get images to be diplayed 
-    foreach ($filenames as $filename) { +    $disp_filenames = array(); // images to be displayed 
-        if (isset($_GET['match'])) { +    $png_filenames = glob("*.png"); 
-             if (isset($_GET['regexp']) && $_GET['regexp']) { +    $keywords = explode(" ",$_GET['match']); 
-                if (!preg_match('/.*'.$_GET['match'].'.*/', $filename)) continue+    $regex = isset($_GET['regexp']) && $_GET['regexp']
-             } else +    foreach(glob("*.gif") as $filename){ // get animated GIFs 
-                if (!fnmatch('*'.$_GET['match'].'*', $filename)) continue+        if(!matches($filename,$keywords,$regex)) continue; 
-             }+        //$png_filename = str_replace('.gif','.png',$filename); 
 +        $png_filename = preg_replace("~\.gif$~",'.png',$filename); 
 +        if(is_animated($filename))
 +          if(in_array($png_filename,$png_filenames)) // remove PNG 
 +            $png_filenames = array_diff($png_filenames,array($png_filename)); 
 +        }else if(in_array($png_filename,$png_filenames)){ // give preference to PNG 
 +          continue;
         }         }
 +        array_push($disp_filenames,$filename);
 +    }
 +    foreach($png_filenames as $filename){ // get PNGs
 +        if(!matches($filename,$keywords,$regex)) continue;
 +        array_push($disp_filenames,$filename);
 +    }
 +    foreach(glob("*.jpg") as $filename){ // get JPGs
 +        if(!matches($filename,$keywords,$regex)) continue;
 +        $png_filename = preg_replace("~\.jpg$~",'.png',$filename);
 +        $gif_filename = preg_replace("~\.jpg$~",'.gif',$filename);
 +        if(!in_array($png_filename,$disp_filenames) and
 +           !in_array($gif_filename,$disp_filenames)){ // give preference to PNG or animated GIF
 +          array_push($disp_filenames,$filename);
 +        }
 +    }
 +    
 +    // Display, and include other extensions
 +    $other_exts = array('.pdf','.jpg','.png','.gif','.jpeg','.jpg','.eps','.root','.C','.cc','.cpp','.cxx','.txt','.tex','.log','.dir','.info','.psd');
 +    natsort($disp_filenames); // natural sorting (for numbers)
 +    foreach($disp_filenames as $filename){ // get PNGs
         array_push($displayed, $filename);         array_push($displayed, $filename);
-        $brfname = str_replace("_","_&shy;",$filename);+        $brfname = str_replace("_","_<wbr>",$filename); //&shy;
         print "<div class='pic'>\n";         print "<div class='pic'>\n";
         print "<h3><a href=\"$filename\">$brfname</a></h3>";         print "<h3><a href=\"$filename\">$brfname</a></h3>";
-        print "<a href=\"$filename\"><img src=\"$filename\" style=\"border: none; width: 300px; \"></a>";+        print "<a href=\"$filename\"><img src=\"$filename\" style=\"border: none; max-width: 300px; max-height: 320px; \"></a>";
         $others = array();         $others = array();
-        foreach ($other_exts as $ex) { +        foreach($other_exts as $ex){ 
-            $other_filename = str_replace('.png', $ex, $filename); +            //$other_filename = str_replace('.png', $ex, $filename); 
-            if (file_exists($other_filename)) { +            $other_filename = preg_replace("~\.(png|gif)$~",$ex,$filename); 
-                array_push($others, "<a class=\"file\" href=\"$other_filename\">[" . $ex . "]</a>"); +            if(strcmp($other_filename,$filename)==0) continue; 
-                if ($ex != '.txt') array_push($displayed, $other_filename); +            if(!file_exists($other_filename)) continue; 
-            }+            array_push($others, "<a class=\"file\" href=\"$other_filename\">[" . $ex . "]</a>"); 
 +            if($ex != '.txt') array_push($displayed, $other_filename);
         }         }
-        if ($others) print "<p>Also as ".implode(', ',$others)."</p>";+        if($others) print "<p>Also as ".implode(', ',$others)."</p>";
         print "</div>";         print "</div>";
     }     }
Line 108: Line 203:
 ?> ?>
 </div> </div>
 +
 <div style="display: block; clear:both;"> <div style="display: block; clear:both;">
 <h2><a name="files">Other files</a></h2> <h2><a name="files">Other files</a></h2>
 <ul> <ul>
-<? +<?php 
-foreach (glob("*") as $filename) { +foreach(glob("*") as $filename){ 
-    if ($_GET['noplots'] || !in_array($filename, $displayed)) { +    if($_GET['noplots'] || !in_array($filename, $displayed)){ 
-        if (isset($_GET['match'])) { +        if(isset($_GET['match'])){ 
-             if (isset($_GET['regexp']) && $_GET['regexp']) { +          if(isset($_GET['regexp']) && $_GET['regexp']){ 
-                if (!preg_match('/.*'.$_GET['match'].'.*/', $filename)) continue; +            if(!preg_match('/.*'.$_GET['match'].'.*/', $filename)) continue; 
-             } else { +          }else{ 
-                if (!fnmatch('*'.$_GET['match'].'*', $filename)) continue; +            if(!fnmatch('*'.$_GET['match'].'*', $filename)) continue; 
-             }+          }
         }         }
-        if (is_dir($filename)) { +        if(is_dir($filename)){ 
-            print "<li>[DIR] <a href=\"$filename\">$filename</a></li>"; +          print "<li>[DIR] <b><a href=\"$filename\">$filename</a></b></li>"; 
-        } else { +        }else{ 
-            print "<li><a href=\"$filename\">$filename</a></li>";+          print "<li><a href=\"$filename\">$filename</a></li>";
         }         }
     }     }
Line 131: Line 227:
 </ul> </ul>
 </div> </div>
 +<br>
 </body> </body>
 </html> </html>
 </file> </file>
cern/index.txt · Last modified: 2023/10/04 16:10 by iwn