File Coverage

blib/lib/Moxy/Plugin/DisplayWidth.pm
Criterion Covered Total %
statement 26 27 96.3
branch 5 6 83.3
condition 2 5 40.0
subroutine 5 5 100.0
pod 0 1 0.0
total 38 44 86.3


line stmt bran cond sub pod time code
1             package Moxy::Plugin::DisplayWidth;
2 12     12   62803 use strict;
  12         72  
  12         480  
3 12     12   67 use warnings;
  12         26  
  12         471  
4 12     12   66 use base qw/Moxy::Plugin/;
  12         19  
  12         3365  
5              
6             # HTML全体の横幅をUAの画面サイズに合わせる
7             sub response_filter :Hook {
8 3     3 0 19040 my ($class, $context, $args) = @_;
9 3         7 my $attr = $args->{mobile_attribute};
10              
11             # スマートフォンの場合はnon_mobileになるが、X-Display-Sizeヘッダーが定義されていれば
12             # それをdisplay sizeとして採用する
13 3         5 my $width;
14 3 100       15 if ($attr->is_non_mobile) {
15 1         33 $width = $attr->request->get('X-Display-Size');
16 1 50 33     17 return if !$width || $width !~ /^\d+\*\d+$/;
17 0         0 $width =~ s/\*.+//;
18             }
19             # HTTP::MobileAttribute::Plugin::Display は AirHPhone に対応していない。
20             # が、ディスプレイ幅の指定がないと利用に耐えないので、現行機種のほとんどが 320px であることが下記 URL より確認できるので
21             # http://www.willcom-inc.com/ja/lineup/spec/voice/index.html
22             # 320px 固定にしておく。だれか Willcom が大好きでたまらないような人があらわれたら対応してください。
23             else {
24 2 100       34 $width = $attr->is_airh_phone ? 320 : $attr->display->width;
25             }
26 2   50     126 $width ||= 320; # なんかうまくとれなかったときのデフォルトのサイズは 320 とする。とくに理由はない。
27              
28 2         9 my $header = qq!
!;
29              
30 2         8 my $content = $args->{response}->content;
31 2         35 $content =~ s!(]*>)!$1$header!i;
32 2         23 $content =~ s!()!"$1"!ie;
  2         6  
33 2         8 $args->{response}->content($content);
34 12     12   1112 }
  12         1446  
  12         122  
35              
36             1;
37             __END__