root/lang/perl/Moxy/trunk/lib/Moxy/Plugin/Filter/Pictogram.pm @ 5041

Revision 5041, 1.9 kB (checked in by tokuhirom, 5 years ago)

いろいろとコアを変更しまくった。

Line 
1package Moxy::Plugin::Filter::Pictogram;
2use strict;
3use warnings;
4use base qw/Moxy::Plugin/;
5use Moxy::Util;
6use Path::Class;
7use HTML::ReplacePictogramMobileJp;
8
9sub register {
10    my ($class, $context) = @_;
11
12    # registering pictogram replacer.
13    for my $carrier (qw/I E V H/) {
14        $context->register_hook( "response_filter_$carrier" => sub {
15            my ($context, $args, ) = @_;
16            return unless (($args->{response}->header('Content-Type')||'') =~ /html/);
17
18            my $charset = Moxy::Util->detect_charset($args->{response}, $args->{content_ref});
19            $charset = ($charset =~ /utf-?8/i) ? 'utf8' : 'sjis';
20
21            ${ $args->{content_ref} } = HTML::ReplacePictogramMobileJp->replace(
22                html     => ${ $args->{content_ref} },
23                carrier  => $carrier,
24                charset  => $charset,
25                callback => sub {
26                    my ( $unicode, $carrier ) = @_;
27
28                    my $pict_html = $class->render_template( $context, 'pict.tmpl' );
29                    return sprintf( $pict_html, $carrier, $unicode, $unicode );
30                }
31            );
32            ${ $args->{content_ref} };
33        });
34    }
35
36    # deliver pictogram
37    $context->register_hook(request_filter => sub {
38        my ($context, $args) = @_;
39
40        if ($args->{request}->uri =~ m{http://pictogram\.moxy/([IEV])/([0-9A-F]{4}).gif}) {
41            my $content = file($class->assets_path($context), 'image', $1, "$2.gif")->slurp;
42
43            my $response = HTTP::Response->new( 200, 'ok' );
44            $response->header( 'Expires' => 'Thu, 15 Apr 2030 20:00:00 GMT' );
45            $response->content_type("image/gif");
46            $response->content($content);
47            $response;
48        }
49    });
50}
51
521;
53__END__
54
55=for stopwords  pictograms
56
57=head1 NAME
58
59Moxy::Plugin::Filter::Pictogram - show pictograms
60
61=head1 SYNOPSIS
62
63  - module: Pictogram
64
65=head1 DESCRIPTION
66
67show pictograms.
68
69=head1 SEE ALSO
70
71L<Moxy>
Note: See TracBrowser for help on using the browser.