Listing 2: bm 01 #!/usr/bin/perl 02 ############################# 03 # bm -- Global Bookmarks CGI 04 # Mike Schilli, 2004 05 # (m@perlmeister.com) 06 ############################# 07 use warnings; 08 use strict; 09 10 my $DB_FILE = "/tmp/bm.sto"; 11 12 use CGI qw(:all *table); 13 use CGI::Carp qw( 14 fatalsToBrowser); 15 use Bookmarks; 16 17 my $bm = Bookmarks->new(); 18 19 $bm = Bookmarks->restore( 20 $DB_FILE) if -f $DB_FILE; 21 22 if(param('t') and param('a') 23 and param('s')) { 24 25 my $f = param('f'); 26 27 # String overrides select 28 $f = param('fnew') 29 if param('fnew'); 30 die "No folder defined" 31 unless length($f); 32 33 $bm->insert(param('t'), 34 param('a'), $f); 35 } 36 37 $bm->delete(param('del')) if 38 param('del'); 39 $bm->move_up(param('mvu')) if 40 param('mvu'); 41 $bm->move_down(param('mvd')) 42 if param('mvd'); 43 44 print header(), 45 start_html( 46 -title => "Bookmarks"); 47 48 print $bm->as_html(\&nav); 49 $bm->save($DB_FILE); 50 51 print start_form(), 52 start_table(), 53 TR(td("Title"), 54 td(textfield( 55 -name => 't', 56 -size => 80))), 57 TR(td("URL"), td(textfield( 58 -name => 'a', 59 -size => 80))), 60 TR(td("Folder"), 61 td(popup_menu( 62 -name => 'f', 63 -values => 64 [$bm->folders()] 65 ))), 66 TR(td("New Folder"), 67 td(textfield( 68 -name => 'fnew', 69 -size => 80))), 70 end_table(), 71 hidden(s => 1), 72 submit(), 73 end_form(), end_html(), 74 ; 75 76 print "Use this in your " . 77 "toolbar: ", pre( 78 "javascript:void(win=" . 79 "window.open('" . 80 url(-path_info => 1) . 81 "?a='+location.href+'&t='". 82 "+document.title))"); 83 84 ############################# 85 sub nav { 86 ############################# 87 my($n) = @_; 88 89 return " [" . 90 a({href => url() . 91 "?mvu=$n"}, "+") . " " . 92 a({href => url() . 93 "?mvd=$n"}, "-") . " " . 94 a({href => url() . 95 "?del=$n"}, "x") . "]"; 96 }