だいたい463日前に更新最終更新日時: 2009-05-31 (日) 05:23:19 463日前
CSS Minify!! で使用しているmod_perlハンドラのソースコードです。
Project::Handler::Base をベースクラスにして、Project::Handler::Tools::CssMinify?で実際のハンドラを実装しています。
Project::Handler::Base †
package Project::Handler::Base; use utf8; use warnings; use strict; use base qw(Class::Data::Inheritable); use Apache::Constants qw( :common :response); use Apache::Request; use Encode; use Template; use Template::Provider::Encoding; use Template::Stash::ForceUTF8; use constant 'TEMPLATE_DIR' => '/path/to/project/view'; use constant 'TEMPLATE_CACHE_DIR' => '/path/to/project/var/tt_cache'; __PACKAGE__->mk_classdata('template_file'); __PACKAGE__->mk_classdata('output_content'); __PACKAGE__->mk_classdata('content_type'); sub handler ($$) { my ($class, $r) = @_; my $req = Apache::Request->new($r); $class->do_task($req); $class->do_output($r); } ## must be override. sub do_task { return; } sub do_output { my ($class, $r) = @_; my $output_content = $class->output_content; die "No output content." unless $output_content; Encode::_utf8_on($output_content) unless Encode::is_utf8($output_content); $r->content_type( $class->content_type || 'text/html; charset=utf-8' ); $r->header_out('Pragma' => 'no-cache'); $r->header_out('Cache-Control' => 'private'); $r->send_http_header; $r->print($output_content); return OK; } sub create_content { my ($class, $vars) = @_; my $template_filepath = TEMPLATE_DIR.'/'.$class->template_file; my %config = ( ABSOLUTE => 1, RELATIVE => 1, INCLUDE_PATH=> TEMPLATE_DIR.'/includes', PRE_PROCESS => TEMPLATE_DIR.'/includes/commons.inc', COMPILE_EXT => '.ttc', COMPILE_DIR => TEMPLATE_CACHE_DIR, FILTERS => { }, VARIABLES => { }, TRIM => 1, ); my $tt = Template->new({ LOAD_TEMPLATES => [ Template::Provider::Encoding->new(\%config) ], STASH => Template::Stash::ForceUTF8->new, %config, }); $tt->process($template_filepath, $vars, \my $output) or die $tt->error; return $output; } 1;
Project::Handler::Tools::CssMinify? †
package Project::Handler::Tools::CssMinify; use utf8; use strict; use warnings; use base qw(AlinkTech::Handler::Base); use Apache::Constants qw( :common :response); use FileHandle; use HTML::FillInForm::ForceUTF8; use Encode; use CSS::Minifier::XS; use File::Copy; use Data::Dumper; sub do_task { my ($class, $req) = @_; $class->template_file('tools/css_minify/index.html'); my $fif = HTML::FillInForm::ForceUTF8->new; my $content; if($req->method eq 'GET') { $content = $class->create_content; $content = $fif->fill( scalarref => \$content, fdat => { 'generate_type' => 'perl_css_minifier_xs' }, ); ## POST. } elsif ($req->method eq 'POST') { my ($css_minified_data, $normal_css_filesize, $minified_css_filesize ); if( $req->param('generate_type') eq 'java_css_compressor' ) { ($css_minified_data, $normal_css_filesize, $minified_css_filesize) = $class->minify_css_by_java($req->param('css_data')); } else { ($css_minified_data, $normal_css_filesize, $minified_css_filesize) = $class->minify_css_by_perl_css_minifier_xs($req->param('css_data')); } $content = $class->create_content({ 'normal_css_filesize' => $normal_css_filesize, 'minified_css_filesize' => $minified_css_filesize, 'minified' => 1, }); $content = $fif->fill( scalarref => \$content, fdat => { 'css_data' => $req->param('css_data'), 'normal_css_filesize' => $normal_css_filesize, 'minified_css_filesize' => $minified_css_filesize, 'css_minify_data' => $css_minified_data, 'generate_type' => $req->param('generate_type'), } ); } $class->output_content($content); } sub minify_css_by_perl_css_minifier_xs { my ($class, $raw_css_data) = @_; my $css_minified_data = CSS::Minifier::XS::minify($raw_css_data); my $tmp_file = $class->save_css_tmp_file($raw_css_data); my $minified_tmp_file = $tmp_file; $minified_tmp_file =~ s/\.css$/\.min\.css/; my $fh = FileHandle->new($minified_tmp_file,'w'); $fh->print($css_minified_data); $fh->close(); my @res = ($css_minified_data, -s $tmp_file, -s $minified_tmp_file); unlink($tmp_file); unlink($minified_tmp_file); return @res; } sub minify_css_by_java { my ($class, $raw_css_data) = @_; my $tmp_file = $class->save_css_tmp_file($raw_css_data); my $minified_tmp_file = $tmp_file; $minified_tmp_file =~ s/\.css$/\.min\.css/; my $exec_cmd = join(' ','java','-jar',PROJECT_DIR.'/bin/css_minify/CssCompressor-1.0/CssCompressor.jar','--charset=utf-8', $tmp_file); #warn $exec_cmd; my $css_minified_data = `$exec_cmd`; my $fh = FileHandle->new($minified_tmp_file,'w'); $fh->print($css_minified_data); $fh->close(); my @res = ($css_minified_data, -s $tmp_file, -s $minified_tmp_file); unlink($tmp_file); unlink($minified_tmp_file); return @res; } sub save_css_tmp_file { my ($class, $raw_css_data) = @_; my $tmp_file = TMP_DIR.'/'.time().'.css'; my $fh = FileHandle->new($tmp_file,'w'); $fh->print($raw_css_data); $fh->close; return $tmp_file; } 1;
- 関連ページ
- Perl/サンプルコード155日前
ツールボックス
メニュー
最新の20件
最新の20件
2010-09-05
2010-09-01
2010-07-31
2010-07-27
2010-07-26
2010-04-23
2010-04-07
2010-04-04
2010-04-03
2010-03-31
2010-03-20
2010-03-19
2010-03-02
2010-02-28

