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/\"/"/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/\"/"/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/\"/"/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 |
|
|
|