Added Go Home functionality, revised the status bar to give request status, and moved the current url to be reported in the window (tab) title.

This commit is contained in:
peteyboy 2024-03-28 16:27:07 +00:00
parent aa985bdddf
commit 745ac8605a

View File

@ -4,9 +4,9 @@
# This program uses telnet instead of nc to make nex requests, because I couldn't get the Perl nc module to work right. # This program uses telnet instead of nc to make nex requests, because I couldn't get the Perl nc module to work right.
#TODO: Some branding (status popup on load?, Connex menu item?), About dialog #TODO: Some branding (status popup on load?, Connex menu item?), About dialog
#TODO: Fill out help Dialog #TODO: Fill out help Dialog, mention vi navigatio and search
#TODO: Fill out About Dialog #TODO: Fill out About Dialog
#Make status dialog actually useful #TODO:Make status dialog actually useful
@ -35,6 +35,13 @@ my $port = $PORT_DEFAULT;
my $pathspec = $PATHSPEC_DEFAULT; my $pathspec = $PATHSPEC_DEFAULT;
my $docname; # = ""; my $docname; # = "";
#new status bar purpose, tracking state
my $S_REQUESTING = "Requesting...";
my $S_READY= " Ready";
my $S_DIDNT= "(page not requested) " . $S_READY;
my $S_NORESPONSE ="(No Response) " . $S_READY;
#for future use, when you think you can deal with doc types #for future use, when you think you can deal with doc types
my $doctype = "txt"; my $doctype = "txt";
my $dot_ext = "."; my $dot_ext = ".";
@ -56,6 +63,7 @@ if (defined $full_url){
die "Need a $SCHEME_NEX url, or start without supplying URL argument.\n"; die "Need a $SCHEME_NEX url, or start without supplying URL argument.\n";
} }
$full_url= $uri->as_string; $full_url= $uri->as_string;
$HOME_URL = $full_url; #TODO make sure you want to do this, mostly go home and other defaults will go here instead o nightfall.city
}else{ }else{
$full_url = $HOME_URL; $full_url = $HOME_URL;
} }
@ -80,6 +88,7 @@ my @menu = (
{ -label => 'Choose Link >', -value => \&goto_link_dialog }, { -label => 'Choose Link >', -value => \&goto_link_dialog },
{ -label => 'Back ^B/<', -value => \&goto_back }, { -label => 'Back ^B/<', -value => \&goto_back },
{ -label => 'Go to Link ^G', -value => \&navigate_link_dialog }, { -label => 'Go to Link ^G', -value => \&navigate_link_dialog },
{ -label => 'Go Home ^M', -value => \&goto_home },
{ -label => 'Page Links ^P', -value => \&page_links_dialog }, { -label => 'Page Links ^P', -value => \&page_links_dialog },
{ -label => 'History ^Y', -value => \&history_status_dialog }, { -label => 'History ^Y', -value => \&history_status_dialog },
{ -label => 'Exit ^Q', -value => \&exit_dialog } { -label => 'Exit ^Q', -value => \&exit_dialog }
@ -141,7 +150,6 @@ sub navigate_link_dialog()
#if not user canceled then navigate #if not user canceled then navigate
if($return){ if($return){
navigate($return); navigate($return);
update_status_bar();
} }
} }
@ -154,8 +162,8 @@ sub goto_link_dialog()
if($return){ if($return){
my $linkcount = scalar @page_links; my $linkcount = scalar @page_links;
if($return <= $linkcount && $return >0){ if($return <= $linkcount && $return >0){
update_status($S_REQUESTING);
goto_link($return); goto_link($return);
update_status_bar();
}else{ }else{
#$browser->focus(); #$browser->focus();
my $return1 = $cui->status("there is no link # " . $return); my $return1 = $cui->status("there is no link # " . $return);
@ -174,14 +182,28 @@ sub goto_back()
my $fetched = fetch_history(); my $fetched = fetch_history();
#if($fetched) { #if($fetched) {
$full_url =$fetched; $full_url =$fetched;
update_status($S_REQUESTING);
load($full_url,0); #don't move back to top load($full_url,0); #don't move back to top
update_status_bar();
history_status_dialog(); history_status_dialog();
#} #}
} }
#let's consider home to be the first item in the history
sub goto_home()
{
if(@history) {
$full_url = $history[0]; #peek at first item
}else{
$full_url=$HOME_URL;
}
update_status($S_REQUESTING);
load($full_url,0); #don't move back to top
history_status_dialog();
}
sub goto_link{ sub goto_link{
my $linknum = shift; my $linknum = shift;
@ -205,23 +227,37 @@ sub navigate{
my $link = shift; my $link = shift;
add_history($full_url); #add last link to history before going forward! add_history($full_url); #add last link to history before going forward!
$full_url = $link; $full_url = $link;
update_status($S_REQUESTING);
load($full_url, 1); #new URL go to top of page load($full_url, 1); #new URL go to top of page
} }
sub update_status_bar sub update_status_bar
{ {
my $status = shift;
my $browser = $win1->getobj("browser"); my $browser = $win1->getobj("browser");
my $statusbar = $win1->getobj("status"); my $statusbar = $win1->getobj("status");
#$full_url = construct_valid_url($SCHEME_NEX, $host, $pathspec, $docname); $statusbar->text($status . " | Press '>' key to enter link #. ctl-x for Menu. '<' to go back.");
$statusbar->text("$full_url" . " | Press '>' key to enter link #. ctl-x for Menu. '<' to go back.");
$statusbar->draw(); $statusbar->draw();
$browser->focus(); $browser->focus();
}
sub update_browser_tab
{
my $browser = $win1->getobj("browser");
$browser->title("$full_url");
$browser->draw();
} }
sub update_status
{
my $status = shift;
update_status_bar($status);
update_browser_tab();
}
sub add_history sub add_history
{ {
@ -367,6 +403,7 @@ $cui->set_binding( \&navigate_link_dialog , "\cG");
$cui->set_binding( \&goto_back , "\cB"); $cui->set_binding( \&goto_back , "\cB");
$cui->set_binding( \&goto_back , "<"); $cui->set_binding( \&goto_back , "<");
$cui->set_binding( \&goto_link_dialog , ">"); $cui->set_binding( \&goto_link_dialog , ">");
$cui->set_binding( \&goto_home , "\cM");
$cui->set_binding( \&page_links_dialog , "\cP"); $cui->set_binding( \&page_links_dialog , "\cP");
$cui->set_binding( \&history_status_dialog , "\cY"); $cui->set_binding( \&history_status_dialog , "\cY");
$cui->set_binding( \&help_dialog , "\cH"); $cui->set_binding( \&help_dialog , "\cH");
@ -442,6 +479,9 @@ sub load
my $top = shift; my $top = shift;
#my $scheme, $host, $path, $query, $frag; #my $scheme, $host, $path, $query, $frag;
my ($scheme, $host, $path, $query, $frag) = uri_split($url); my ($scheme, $host, $path, $query, $frag) = uri_split($url);
#what happens with different scheme? #what happens with different scheme?
if ($scheme eq $SCHEME_NEX){ if ($scheme eq $SCHEME_NEX){
#A lot of trial and error here, connect->print of path was somehow important to get output to complete... #A lot of trial and error here, connect->print of path was somehow important to get output to complete...
@ -476,6 +516,12 @@ sub load
if ($top){ if ($top){
$widget->pos(0); $widget->pos(0);
} }
if ($page_contents eq ''){
update_status($S_NORESPONSE);
}else{
update_status($S_READY);
}
}else{ }else{
#can't load non-nex as of now #can't load non-nex as of now
my $browser = $win1->getobj("browser"); my $browser = $win1->getobj("browser");
@ -484,6 +530,7 @@ sub load
#pop and revert to history for display #pop and revert to history for display
#my $fetched = fetch_history(); #my $fetched = fetch_history();
$full_url = fetch_history(); $full_url = fetch_history();
update_status($S_DIDNT);
} }