]> git.p6c8.net - devedit.git/commitdiff
- Allow to filter directory listing using DOS-style wildcards (maybe it still
authorpcanterino <>
Sun, 26 Dec 2004 12:13:57 +0000 (12:13 +0000)
committerpcanterino <>
Sun, 26 Dec 2004 12:13:57 +0000 (12:13 +0000)
  needs work for being more usable)
- Fixed a typo in File::Access

modules/Command.pm
modules/File/Access.pm
modules/Tool.pm
templates/dirlist.htm
templates/dirlist_dir.htm
templates/dirlist_up.htm

index 6c02aa154837acb6ccb77af2f665dd98b3b0adef..fb0997cd2c7b9053550adf16eed5e3a83b1fe1e8 100644 (file)
@@ -6,7 +6,7 @@ package Command;
 # Execute Dev-Editor's commands
 #
 # Author:        Patrick Canterino <patrick@patshaping.de>
-# Last modified: 2004-12-21
+# Last modified: 2004-12-26
 #
 
 use strict;
@@ -20,7 +20,9 @@ use File::Path;
 use POSIX qw(strftime);
 use Tool;
 
-use CGI qw(header);
+use CGI qw(header
+           escape);
+
 use HTML::Entities;
 use Output;
 use Template;
@@ -110,6 +112,9 @@ sub exec_show($$)
 
   my $dirlist = "";
 
+  my $filter1 = $data->{'cgi'}->param('filter') || '*';        # The real wildcard
+  my $filter2 = ($filter1 && $filter1 ne '*') ? $filter1 : ''; # Wildcard for output
+
   # Create the link to the upper directory
   # (only if we are not in the root directory)
 
@@ -130,6 +135,8 @@ sub exec_show($$)
 
   foreach my $dir(@$dirs)
   {
+   next unless(dos_wildcard_match($filter1,$dir));
+
    my $phys_path = $physical."/".$dir;
    my $virt_path = encode_entities($virtual.$dir."/");
 
@@ -153,6 +160,8 @@ sub exec_show($$)
 
   foreach my $file(@$files)
   {
+   next unless(dos_wildcard_match($filter1,$file));
+
    my $phys_path = $physical."/".$file;
    my $virt_path = encode_entities($virtual.$file);
 
@@ -193,7 +202,11 @@ sub exec_show($$)
   $tpl->fillin("SCRIPT",$script);
   $tpl->fillin("URL",encode_entities(equal_url($config->{'httproot'},$virtual)));
 
+  $tpl->fillin("FILTER",encode_entities($filter2));
+  $tpl->fillin("FILTER_URL",escape($filter2));
+
   $tpl->parse_if_block("dir_writeable",$dir_writeable);
+  $tpl->parse_if_block("filter",$filter2);
  }
  else
  {
index 31377d9f55438ead8802f2cdffbe34dcc856a6b4..8958e62fd0d137927d873553d92f3d2495d6ccaf 100644 (file)
@@ -3,8 +3,8 @@ package File::Access;
 #
 # Dev-Editor - Module File::Access
 #
-# Some simple routines for doing things with files
-# with only one command
+# Some simple routines for doing things with files by
+# using only one command
 #
 # Author:        Patrick Canterino <patrick@patshaping.de>
 # Last modified: 2004-12-17
index 6a615daf9d20208c8dcc9ad6e4b189f47ee49ef3..e261f3e0de97ee0de179004d9aaafc2fba66f9bb 100644 (file)
@@ -6,7 +6,7 @@ package Tool;
 # Some shared sub routines
 #
 # Author:        Patrick Canterino <patrick@patshaping.de>
-# Last modified: 2004-12-16
+# Last modified: 2004-12-25
 #
 
 use strict;
@@ -28,6 +28,7 @@ use base qw(Exporter);
 @EXPORT = qw(check_path
              clean_path
              devedit_reload
+             dos_wildcard_match
              equal_url
              file_name
              mode_string
@@ -159,6 +160,30 @@ sub devedit_reload(;$)
  return \$header;
 }
 
+# dos_wildcard_match()
+#
+# Check if a string matches against a DOS-style wildcard
+#
+# Params: 1. Pattern
+#         2. String
+#
+# Return: Status code (Boolean)
+
+sub dos_wildcard_match($$)
+{
+ my ($pattern,$string) = @_;
+
+ # The following part is stolen from File::DosGlob
+
+ # escape regex metachars but not glob chars
+ $pattern =~ s:([].+^\-\${}[|]):\\$1:g;
+ # and convert DOS-style wildcards to regex
+ $pattern =~ s/\*/.*/g;
+ $pattern =~ s/\?/.?/g;
+
+ return ($string =~ m|^$pattern$|is);
+}
+
 # equal_url()
 #
 # Create URL equal to a file or directory
index 2db1617f13b0772f434c3d8787b76fd02d85681f..8a8c9ee60747e163d1bfa620c64c08cec6ccb742 100644 (file)
 
 <table border="0" width="100%">
 <tr>
+<td>
+<table border="0">
+<tr>
 <form action="{SCRIPT}">
 <input type="hidden" name="command" value="show">
-<td>Go to directory/file: <input type="text" name="file" value="{DIR}"> <input type="submit" value="Go!"></td>
+<td>Go to directory/file:</td>
+<td><input type="text" name="file" value="{DIR}"></td>
+<td><input type="submit" value="Go!"></td>
 </form>
-<td align="right"><a href="{SCRIPT}?command=about" target="_blank"><i>About Dev-Editor</i></a></td>
+</tr>
+<tr>
+<form action="{SCRIPT}">
+<input type="hidden" name="command" value="show">
+<input type="hidden" name="file" value="{DIR}">
+<td>Filter:</td>
+<td><input type="text" name="filter" value="{FILTER}"></td>
+<td><input type="submit" value="Filter!"></td>
+</form>
+</tr>
+</table>
+</td>
+<td align="right" valign="top"><a href="{SCRIPT}?command=about" target="_blank"><i>About Dev-Editor</i></a></td>
 </tr>
 </table>
 </body>
index cfac797724595725e22218ead8ac98cca35afd28..2162e2e93638e6744ae7cde2d70bf4535cd588cd 100644 (file)
@@ -1,6 +1,6 @@
 <tr>
 <td align="right" style="white-space:nowrap">[SUBDIR]</td>
 <td style="padding-left:15pt;white-space:nowrap;">{DATE}</td>
-<td style="padding-left:15pt;white-space:nowrap;">{IF readable}<a href="{SCRIPT}?command=show&amp;file={DIR}">{DIR_NAME}/</a>{ELSE}<span style="color:#C0C0C0" title="Not accessible">{DIR_NAME}/</span>{ENDIF}</td>
+<td style="padding-left:15pt;white-space:nowrap;">{IF readable}<a href="{SCRIPT}?command=show&amp;file={DIR}{IF filter}&amp;filter={FILTER_URL}{ENDIF}">{DIR_NAME}/</a>{ELSE}<span style="color:#C0C0C0" title="Not accessible">{DIR_NAME}/</span>{ENDIF}</td>
 <td style="padding-left:15pt;white-space:nowrap;">({IF dir_writeable}<a href="{SCRIPT}?command=rename&amp;file={DIR}">Rename</a> | <a href="{SCRIPT}?command=remove&amp;file={DIR}">Delete</a> | {ENDIF}{IF users}<a href="{SCRIPT}?command=chprop&amp;file={DIR}">Chmod/Chgrp</a> | {ENDIF}<a href="{URL}" target="_blank">View in Browser</a>)</td>
 </tr>
index 5f375e5615a14d45c7b7f5bee578a4ff488c6c0f..0384c0d9ff4d718a7263cde532b3512ef9694149 100644 (file)
@@ -1,5 +1,5 @@
 <tr>
 <td align="right" style="white-space:nowrap">[SUBDIR]</td>
 <td style="padding-left:15pt;white-space:nowrap;">{DATE}</td>
-<td colspan="2" style="padding-left:15pt;white-space:nowrap"><a href="{SCRIPT}?command=show&amp;file={UPPER_DIR}">../</a></td>
+<td colspan="2" style="padding-left:15pt;white-space:nowrap"><a href="{SCRIPT}?command=show&amp;file={UPPER_DIR}{IF filter}&amp;filter={FILTER_URL}{ENDIF}">../</a></td>
 </tr>

patrick-canterino.de