[Jifty-commit] r3397 - in jifty/branches/fragcont: lib/Jifty/Plugin/SinglePage share/web/static/js share/web/templates/__jifty/webservices

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Fri Jun 8 02:44:41 EDT 2007


Author: clkao
Date: Fri Jun  8 02:44:41 2007
New Revision: 3397

Modified:
   jifty/branches/fragcont/lib/Jifty/Plugin/SinglePage/Dispatcher.pm
   jifty/branches/fragcont/lib/Jifty/Web.pm
   jifty/branches/fragcont/share/web/static/js/jifty.js
   jifty/branches/fragcont/share/web/templates/__jifty/webservices/xml

Log:
Support redirect to external url in webservices.

Modified: jifty/branches/fragcont/lib/Jifty/Plugin/SinglePage/Dispatcher.pm
==============================================================================
--- jifty/branches/fragcont/lib/Jifty/Plugin/SinglePage/Dispatcher.pm	(original)
+++ jifty/branches/fragcont/lib/Jifty/Plugin/SinglePage/Dispatcher.pm	Fri Jun  8 02:44:41 2007
@@ -9,7 +9,7 @@
 
     # XXX: shouldn't have multiple redirect
     # Simply ignore Redirect from webservice if we are not in SPA
-    set '_webservice_redirect' => \@actions
+    set '_webservice_redirect' => [map { $_->arguments->{url} } @actions]
         if Jifty->find_plugin('Jifty::Plugin::SinglePage');
 
 };
@@ -18,12 +18,17 @@
     my $actions = get '_webservice_redirect';
     Jifty->web->request->remove_state_variable('region-__page');
     for my $act (@$actions) {
-        Jifty->web->request->add_fragment(
-            name      => '__page',
-            path      => $act->arguments->{url},
-            arguments => {},
-            wrapper   => 0
-        );
+	if ($act =~ m{^https?://}) {
+	    set '_webservice_external_redirect' => $act;
+	}
+	else {
+	    Jifty->web->request->add_fragment(
+                name      => '__page',
+                path      => $act,
+                arguments => {},
+                wrapper   => 0
+            );
+	}
     }
     show $1;
 };

Modified: jifty/branches/fragcont/lib/Jifty/Web.pm
==============================================================================
--- jifty/branches/fragcont/lib/Jifty/Web.pm	(original)
+++ jifty/branches/fragcont/lib/Jifty/Web.pm	Fri Jun  8 02:44:41 2007
@@ -698,8 +698,6 @@
     my $self = shift;
     my ($page) = @_;
 
-
-
     # It's an experimental feature to support redirect within a
     # region.  It's currently enabled only for SPA.  We should make
     # sure we understand what existing code is call this kind of replace.
@@ -713,6 +711,10 @@
         return;
     }
 
+    if (my $redir = Jifty->web->request->argument('_webservice_redirect')) {
+	push @$redir, $page;
+	return;
+    }
     # $page can't lead with // or it assumes it's a URI scheme.
     $page =~ s{^/+}{/};
 

Modified: jifty/branches/fragcont/share/web/static/js/jifty.js
==============================================================================
--- jifty/branches/fragcont/share/web/static/js/jifty.js	(original)
+++ jifty/branches/fragcont/share/web/static/js/jifty.js	Fri Jun  8 02:44:41 2007
@@ -827,6 +827,14 @@
                 }
             }
         }
+        for (var redirect = response.firstChild;
+             redirect != null;
+             redirect = redirect.nextSibling) {
+            if (redirect.nodeName == 'redirect') {
+                alert(redirect.getAttribute("url"));
+                document.location = redirect.getAttribute("url");
+            }
+        }
     };
     var onFailure = function(transport, object) {
         hide_wait_message_now();

Modified: jifty/branches/fragcont/share/web/templates/__jifty/webservices/xml
==============================================================================
--- jifty/branches/fragcont/share/web/templates/__jifty/webservices/xml	(original)
+++ jifty/branches/fragcont/share/web/templates/__jifty/webservices/xml	Fri Jun  8 02:44:41 2007
@@ -106,6 +106,11 @@
     $writer->endTag();
 }
 
+if (my $ext = Jifty->web->request->argument('_webservice_external_redirect')) {
+    $writer->startTag("redirect", url => $ext);
+    $writer->endTag();
+}
+
 $writer->endTag();
 $r->content_type('text/xml; charset=utf-8');
 Jifty->web->out($output);


More information about the Jifty-commit mailing list