ClientJS: Unterstützung für Browser-Redirects ("$js->redirect_to")
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 13 Mar 2013 14:31:11 +0000 (15:31 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 13 Mar 2013 16:56:53 +0000 (17:56 +0100)
SL/ClientJS.pm
js/client_js.js
scripts/generate_client_js_actions.tpl

index 1218e4c..d58905e 100644 (file)
@@ -95,6 +95,9 @@ my %supported_methods = (
   'jstree:select_node'   => 2,  # $.jstree._reference($(<TARGET>)).<FUNCTION>(<ARGS>, true)
   'jstree:deselect_node' => 2,
   'jstree:deselect_all'  => 1,
+
+  # ## other stuff ##
+  redirect_to            => 1,  # window.location.href = <TARGET>
 );
 
 sub AUTOLOAD {
@@ -401,6 +404,14 @@ client will then show the message in the 'error' flash.
 The messages of multiple calls of C<error> on the same C<$self> will
 be merged.
 
+=item C<redirect_to $url>
+
+Redirects the browser window to the new URL by setting the JavaScript
+property C<window.location.href>. Note that
+L<SL::Controller::Base/redirect_to> is AJAX aware and uses this
+function if the current request is an AJAX request as determined by
+L<SL::Request/is_ajax>.
+
 =back
 
 =head2 JQUERY FUNCTIONS
index b961f65..11ef823 100644 (file)
@@ -109,6 +109,9 @@ function eval_json_result(data) {
       else if (action[0] == 'jstree:deselect_node') $.jstree._reference($(action[1])).deselect_node(action[2]);
       else if (action[0] == 'jstree:deselect_all')  $.jstree._reference($(action[1])).deselect_all();
 
+      // ## other stuff ##
+      else if (action[0] == 'redirect_to')          window.location.href = action[1];
+
       else                                          console.log('Unknown action: ' + action[0]);
 
     });
@@ -116,6 +119,12 @@ function eval_json_result(data) {
   // console.log("current_content_type " + $('#current_content_type').val() + ' ID ' + $('#current_content_id').val());
 }
 
+function submit_ajax_form(url, form_selector, additional_data) {
+  var separator = /\?/.test(url) ? '&' : '?';
+  $.post(url + separator + $(form_selector).serialize(), additional_data, eval_json_result);
+  return true;
+}
+
 // Local Variables:
 // mode: js
 // End:
index 7fa7baf..55206ea 100644 (file)
@@ -32,6 +32,12 @@ function eval_json_result(data) {
   // console.log("current_content_type " + $('#current_content_type').val() + ' ID ' + $('#current_content_id').val());
 }
 
+function submit_ajax_form(url, form_selector, additional_data) {
+  var separator = /\?/.test(url) ? '&' : '?';
+  $.post(url + separator + $(form_selector).serialize(), additional_data, eval_json_result);
+  return true;
+}
+
 // Local Variables:
 // mode: js
 // End: