[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