summaryrefslogtreecommitdiff
path: root/httemplate/elements/progress-init.html
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2014-12-30 16:04:48 -0800
committerMark Wells <mark@freeside.biz>2014-12-30 16:04:48 -0800
commitf041c3f6e17bdacf8ad6b0da87342ef84e7db404 (patch)
treef80115a8f5dacff6395ee26fd91ded929ac1a613 /httemplate/elements/progress-init.html
parent63e6a91136d87591d57a7f4e006dbfb41906a02c (diff)
import deployment zone census block list, #32625
Diffstat (limited to 'httemplate/elements/progress-init.html')
-rw-r--r--httemplate/elements/progress-init.html55
1 files changed, 46 insertions, 9 deletions
diff --git a/httemplate/elements/progress-init.html b/httemplate/elements/progress-init.html
index cef54b8..5b42aa1 100644
--- a/httemplate/elements/progress-init.html
+++ b/httemplate/elements/progress-init.html
@@ -17,6 +17,9 @@ In misc/something.html:
# redirecting to the URL.
#or { popup_url => $p.'popup_contents.html' }
# which loads that URL into the popup after completion
+ #or { url => $p.'where_to_go.html',
+ error_url => $p.'where_we_just_were.html' }
+ # to redirect somewhere different on error
) %>
</FORM>
<SCRIPT TYPE="text/javascript>process();</SCRIPT>
@@ -45,6 +48,33 @@ sub process_whatever { #class method
return 'this value will be ignored';
}
+Internal notes:
+
+This component creates two JS functions: process(), which starts the
+submission process, and start_job(), which starts the job on the
+server side.
+
+process() does the following:
+- disable the form submit button
+- for all form fields named in "fields", collect their values into an array
+- declare a callback function "myCallback"
+- pass the array and callback to start_job()
+
+start_job() is an xmlhttp standard function that turns the array of values
+into a JSON string, posts it to the location given in $action, receives a
+job number back, and then invokes the callback with the job number as an
+argument. Normally, the post target script will use FS::UI::Web::JSRPC to insert
+a queue job (with the form field values as arguments), and return its
+job number.
+
+myCallback() opens an Overlib popup containing progress-popup.html, with
+the job number, form name, and destination options (url, message, popup_url,
+error_url) as URL parameters. This popup will poll the server for the status
+of the job, display a progress bar, and on completion, either redirect to
+'url' or 'popup_url', display 'message' in the popup window, or (on failure)
+display the job statustext as an error message. If 'error_url' is specified,
+the "Close" button in the popup will then redirect the user to that location.
+
</%doc>
<% include('/elements/xmlhttp.html',
'method' => 'POST',
@@ -108,7 +138,9 @@ function <%$key%>process () {
function <%$key%>myCallback( jobnum ) {
- overlib( OLiframeContent('<%$fsurl%>elements/progress-popup.html?jobnum=' + jobnum + ';<%$url_or_message_link%>;formname=<%$formname%>' , 444, 168, '<% $popup_name %>'), CAPTION, 'Please wait...', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', CLOSECLICK, MIDX, 0, MIDY, 0 );
+ var url = <% $progress_url->as_string |js_string %>;
+ url = url.replace('_JOBNUM_', jobnum);
+ overlib( OLiframeContent(url, 444, 168, '<% $popup_name %>'), CAPTION, 'Please wait...', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', CLOSECLICK, MIDX, 0, MIDY, 0 );
}
@@ -119,18 +151,23 @@ function <%$key%>myCallback( jobnum ) {
my( $formname, $fields, $action, $url_or_message, $key ) = @_;
$key = '' unless defined $key;
-my $url_or_message_link;
+my %dest_info;
if ( ref($url_or_message) ) { #its a message or something
- $url_or_message_link = 'message='. uri_escape( $url_or_message->{'message'} );
- $url_or_message_link .= ';url='. uri_escape( $url_or_message->{'url'} )
- if $url_or_message->{'url'};
- $url_or_message_link = 'popup_url=' .uri_escape( $url_or_message->{'popup_url'} )
- if $url_or_message->{'popup_url'};
-
+ %dest_info = map { $_ => $url_or_message->{$_} }
+ grep { $url_or_message->{$_} }
+ qw( message url popup_url error_url );
} else {
- $url_or_message_link = "url=$url_or_message";
+ # it can also just be a url
+ %dest_info = ( 'url' => $url_or_message );
}
+my $progress_url = URI->new($fsurl.'elements/progress-popup.html');
+$progress_url->query_form(
+ 'jobnum' => '_JOBNUM_',
+ 'formname' => $formname,
+ %dest_info,
+);
+
#stupid safari is caching the "location" of popup iframs, and submitting them
#instead of displaying them. this should prevent that.
my $popup_name = 'popup-'.time. "-$$-". rand() * 2**32;