/[Frey]/trunk/lib/Frey/Class/Icon.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Frey/Class/Icon.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1109 - (hide annotations)
Mon Jun 29 16:54:02 2009 UTC (14 years, 10 months ago) by dpavlin
File size: 1780 byte(s)
refactor into role Frey::Class::Icon
1 dpavlin 1109 package Frey::Class::Icon;
2     use Moose::Role;
3    
4     has 'icon_html' => (
5     is => 'rw',
6     # isa => 'HTML', # FIXME
7     default => '<!-- no icon -->',
8     );
9    
10     =head2 add_icon
11    
12     Frey::Foo->add_icon; # /static/icons/Frey/Foo.png
13     Frey::Foo->add_icon('warning'); # /static/icons/Frey/Foo/warning.png
14    
15     =cut
16    
17     sub icon_path {
18     my ($self,$class,$variant) = @_;
19    
20     sub icon_exists {
21     my $class = shift;
22     $class =~ s{::}{/}g;
23     $class .= "/$variant" if $variant;
24     my $icon_path = 'static/icons/' . $class . '.png';
25     return $icon_path if -e $icon_path;
26     return;
27     }
28    
29     my $path = icon_exists( $class );
30     if ( ! $path ) {
31     my $super_class = $class;
32     while ( $super_class =~ s{::[^:]+$}{} && ! $path ) {
33     $path = icon_exists( $super_class ) unless $super_class eq 'Frey'; # don't default on Frey icon
34     }
35     }
36    
37     if ( ! $path ) {
38     $self->TODO( "add icon for $class" . ( $variant ? " variant $variant" : '' ) );
39     return undef;
40     }
41    
42     warn "# $class from $self icon_path $path" if $self->debug;
43     return $path;
44     }
45    
46     our $icon_html;
47     sub icon_html { $icon_html };
48    
49     sub add_icon {
50     my ($self,$variant) = @_;
51    
52     my $class = $self->class if $self->can('class');
53     #$class ||= $self->title;
54     $class ||= ref($self);
55     my $icon_path = $self->icon_path( $class, $variant ) || return;
56    
57     $icon_html .= qq|<link rel="icon" type="image/png" href="/$icon_path">|;
58     warn "# using icon $icon_path for $class $variant ";
59    
60     =for later
61    
62     # FIXME http://en.wikipedia.org/wiki/Favicon suggest just rel="icon" but that doesn't seem to work!
63     my $ico_path = $icon_path;
64     $ico_path =~ s{png$}{ico};
65     if ( ! -e $ico_path ) {
66     system "convert $icon_path $ico_path";
67     warn "# convert $icon_path $ico_path : $@";
68     }
69     $icon_html .= qq|<link rel="shortcut icon" type="image/x-icon" href="/$ico_path">| if -e $ico_path;
70    
71     =cut
72    
73     }
74    
75     1;

  ViewVC Help
Powered by ViewVC 1.1.26