/usr/local/CPAN/mobirc/App/Mobirc/Web/C.pm
package App::Mobirc::Web::C;
use strict;
use warnings;
use Exporter 'import';
use App::Mobirc::Web::View;
use Encode;
use Carp ();
our @EXPORT = qw/context server irc_nick render_td redirect/;
sub context () { App::Mobirc->context } ## no critic
sub server () { context->server } ## no critic.
sub irc_nick () { POE::Kernel->alias_resolve('irc_session')->get_heap->{irc}->nick_name } ## no critic
sub render_td {
my ($req, @args) = @_;
Carp::croak "invalid arguments for render_td" unless ref $req eq 'HTTP::Engine::Request';
my $html = sub {
my $out = App::Mobirc::Web::View->show(@args);
($req, $out) = context->run_hook_filter('html_filter', $req, $out);
$out = encode( $req->mobile_agent->encoding, $out);
}->();
HTTP::Engine::Response->new(
status => 200,
content_type => _content_type($req),
body => $html,
);
}
sub _content_type {
my $req = shift;
if ( $req->mobile_agent->is_docomo ) {
# docomo phone cannot apply css without this content_type
'application/xhtml+xml; charset=UTF-8';
}
else {
if ( $req->mobile_agent->can_display_utf8 ) {
'text/html; charset=UTF-8';
}
else {
'text/html; charset=Shift_JIS';
}
}
}
sub redirect {
my $path = shift;
HTTP::Engine::Response->new(
status => 302,
headers => {
Location => $path
},
);
}
1;