Line # Revision Author
1 3 ahitrov@rambler.ru package Contenido::Image;
2
3 # ----------------------------------------------------------------------------
4 #
5 # ����� ��� ������������ �������� � ������
6 #
7 # ----------------------------------------------------------------------------
8
9 use Contenido::Globals;
10 use strict;
11
12 $Contenido::Image::VERSION = '0.5';
13 $Contenido::Image::DEBUG = 0;
14
15 sub new {
16 my $class = shift; $class = ref($class) || $class;
17 my %args = ref $_[0] ? %{$_[0]} : @_;
18
19 my $valid_dump;
20 $valid_dump = 1 if ( exists($args{img}) and (ref($args{img}) eq 'HASH') and $args{img}->{filename} );
21 $log->warning("$class->new(): �������� img �� ���������") if $Contenido::Image::DEBUG and !$valid_dump;
22 return unless $valid_dump;
23
24 return bless {
25 key => $args{key} || undef,
26 attr => $args{attr} || '',
27 name => $args{img}->{filename} || '',
28 w => $args{img}->{width} || undef,
29 h => $args{img}->{height} || undef,
30 alt => $args{img}->{alt} || '',
31 title => $args{img}->{title} || undef,
32 source => $args{img}->{source} || undef,
33 mname => $args{img}->{mini}->{filename} || '',
34 mw => $args{img}->{mini}->{width} || undef,
35 mh => $args{img}->{mini}->{height} || undef,
36 mini => $args{img}->{mini} || undef,
37 copyright => $args{img}->{copyright} || undef,
38 }, $class;
39 }
40
41 sub get_mini {
42 my $self = shift;
43 my $size = shift;
44 return $size ? $self->{mini}{$size} : $self->{mini};
45 }
46
47 # ----------------------------------------------------------------------------
48 # ����� �������� � ���� HTML-���� <img>...
49 # ������:
50 # print $pic and $pic->as_html(path => '/imgs/', mini => 1);
51 # defaults:
52 # path => '/images/',
53 # ----------------------------------------------------------------------------
54 sub as_html {
55 my $self = shift;
56 my %args = ref $_[0] ? %{$_[0]} : @_;
57
58 $args{path} ||= '';
59
60 if (exists $args{alt}) {
61 $args{alt} =~ s/\"/&quot;/g;
62 $self->{alt} = $args{alt};
63 }
64
65 my ($name, $w, $h);
66
67 if ( $args{mini} ) {
68 if ( length $args{mini} > 1 ) {
69 $name = $self->{mini}{$args{mini}}{filename};
70 $w = $self->{mini}{$args{mini}}{width};
71 $h = $self->{mini}{$args{mini}}{height};
72 } else {
73 $name = $self->{mname};
74 $w = $self->{mw};
75 $h = $self->{mh};
76 }
77 } else {
78 $name = $self->{name};
79 $w = $self->{w};
80 $h = $self->{h};
81 }
82
83 my @out = (
84 '<img ',
85 'src="'.$args{path}.$name.'"',
86 ' alt="'.$self->{alt}.'"',
87 ' title="'.$self->{alt}.'"',
88 ' width="'.$w.'"',
89 ' height="'.$h.'"',
90 ( $args{misc} ? $args{misc} : '' ),
91 '>'
92 );
93
94 return join '', @out;
95 }
96
97 # ----------------------------------------------------------------------------
98 # ����� �������� � ���� ����� <a>...
99 # ������:
100 # print $pic and $pic->as_href(href => 'http://r0.ru/');
101 # ----------------------------------------------------------------------------
102 sub as_href {
103 my $self = shift;
104 my %args = ref $_[0] ? %{$_[0]} : @_;
105
106 $args{title} =~ s/\"/&quot;/g;
107
108 my @out = (
109 '<a',
110 ' href="'.$args{href}.'"',
111 ' title="'.$args{title}.'"',
112 ( $args{a_misc} ? $args{a_misc} : '' ),
113 '>',
114 $self->as_html(%args),
115 '</a>',
116 );
117
118 return join '', @out;
119 }
120
121 # ----------------------------------------------------------------------------
122 # ����� �������� � ���� ���������� ��������� <a><img></a>...
123 # ������:
124 # print $pic and $pic->as_thumbnail(base => '/my_popup.html');
125 # defaults:
126 # base => '/popup.html',
127 # mini => 1,
128 # ----------------------------------------------------------------------------
129 sub as_thumbnail {
130 my $self = shift;
131 my %args = ref $_[0] ? %{$_[0]} : @_;
132
133 $args{base} ||= '/popup.html';
134 $args{mini} = 1 unless defined $args{mini};
135 $args{alt} =~ s/\"/&quot;/g;
136
137 # ���� ������ �� ������, �� ������� ��������� �� ���� ������� ������...
138 $args{href} ||= join '', (
139 $args{base}.
140 '?iname='. $args{path}.$self->{name},
141 '&width='. $self->{w},
142 '&height='. $self->{h},
143 '&alt='. $self->{alt},
144 '" onclick="openWin(this, \'image',
145 $self->{key}.'\', ',
146 $self->{w}.', ',
147 $self->{h}.', 0); return false" style="text-decoration:none',
148 );
149
150 return $self->as_href(%args);
151 }
152
153
154 sub AUTOLOAD {
155 my $dest = $Contenido::Image::AUTOLOAD =~ /::DESTROY$/ ? 1 : 0;
156 my ($attr) = $Contenido::Image::AUTOLOAD =~ /^.*::([^:]+)$/;
157 my $self = $dest ? {} : shift;
158 $log->error((ref $self)."->$attr: ����� �� ������") unless $dest or exists $self->{$attr};
159 $self->{$attr} = $_[0] if @_;
160 $self->{$attr};
161 }
162
163 1;
164