From e693ef60cd8f79e11ae4de3ba2f7494a72fc35c2 Mon Sep 17 00:00:00 2001 From: rvelices Date: Tue, 17 Jan 2012 06:09:32 +0000 Subject: [PATCH] feature 2548 multisize - ability to choose displayed size on index page -added some logs on i.php (configurable) to measure the perf git-svn-id: http://piwigo.org/svn/trunk@12908 68402e56-0260-453c-a942-63ccdbb3a9ee --- i.php | 63 +++++++++++++++++++++++-- include/category_default.inc.php | 49 +++++++------------ include/config_default.inc.php | 5 +- include/derivative.inc.php | 12 ++--- include/derivative_params.inc.php | 10 ++++ include/template.class.php | 7 ++- index.php | 32 ++++++++++++- themes/default/iconset.css | 1 + themes/default/s26/outline_005e89.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_808060.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_808080.png | Bin 2477 -> 2556 bytes themes/default/s26/outline_ff3363.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_ff7700.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_ffff80.png | Bin 1952 -> 2042 bytes themes/default/s26/outline_ffffff.png | Bin 2169 -> 2247 bytes themes/default/template/index.tpl | 33 +++++++++++++ themes/default/template/thumbnails.tpl | 21 +++++++-- themes/default/theme.css | 5 +- 18 files changed, 183 insertions(+), 55 deletions(-) diff --git a/i.php b/i.php index fb2dbc93a..1911d77ab 100644 --- a/i.php +++ b/i.php @@ -28,6 +28,13 @@ include(PHPWG_ROOT_PATH . 'include/config_default.inc.php'); defined('PWG_LOCAL_DIR') or define('PWG_LOCAL_DIR', 'local/'); defined('PWG_DERIVATIVE_DIR') or define('PWG_DERIVATIVE_DIR', $conf['data_location'].'i/'); +function get_moment() +{ + $t1 = explode( ' ', microtime() ); + $t2 = explode( '.', $t1[0] ); + $t2 = $t1[1].'.'.$t2[1]; + return $t2; +} function trigger_action() {} function get_extension( $filename ) { @@ -63,6 +70,31 @@ function mkgetdir($dir) // end fast bootstrap +function ilog() +{ + global $conf, $ilogfh; + if (!$conf['enable_i_log']) return; + if(!$ilogfh) + { + $dir=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/'; + if (!mkgetdir($dir) or ! ($ilogfh=fopen($dir.'i.log', 'a')) ) + return; + } + fwrite($ilogfh, date("c") ); + foreach( func_get_args() as $arg) + { + fwrite($ilogfh, ' ' ); + if (is_array($arg)) + { + fwrite($ilogfh, implode(' ', $arg) ); + } + else + { + fwrite($ilogfh, $arg); + } + } + fwrite($ilogfh, "\n"); +} function ierror($msg, $code) { @@ -92,6 +124,12 @@ function ierror($msg, $code) exit; } +function time_step( &$step ) +{ + $tmp = $step; + $step = get_moment(); + return intval(1000*($step - $tmp)); +} function parse_request() { @@ -159,12 +197,11 @@ function parse_request() } } array_shift($deriv); - $page['coi'] = ''; if (count($deriv) && $deriv[0][0]=='c' && $deriv[0][1]=='i') { $page['coi'] = substr(array_shift($deriv), 2); - preg_match('#^[a-z]{4}$#', $page['coi']) or ierror('Invalid center of interest', 400); + preg_match('#^[a-zA-Z]{4}$#', $page['coi']) or ierror('Invalid center of interest', 400); } if ($page['derivative_type'] == IMG_CUSTOM) @@ -187,7 +224,8 @@ function parse_request() } } - if ($req[0]!='g' && $req[0]!='u') + if (!is_file(PHPWG_ROOT_PATH.$req.$ext) and + is_file(PHPWG_ROOT_PATH.'../'.$req.$ext) ) $req = '../'.$req; $page['src_location'] = $req.$ext; @@ -225,6 +263,12 @@ function send_derivative($expires) $page=array(); +$begin = $step = get_moment(); +$timing=array(); +foreach( explode(',','load,rotate,crop,scale,sharpen,watermark,save,send') as $k ) +{ + $timing[$k] = ''; +} include_once( PHPWG_ROOT_PATH .'/include/derivative_params.inc.php'); include_once( PHPWG_ROOT_PATH .'/include/derivative_std_params.inc.php'); @@ -287,6 +331,7 @@ ignore_user_abort(true); set_time_limit(0); $image = new pwg_image($page['src_path']); +$timing['load'] = time_step($step); $changes = 0; @@ -299,6 +344,7 @@ if ($crop_rect) { $changes++; $image->crop( $crop_rect->width(), $crop_rect->height(), $crop_rect->l, $crop_rect->t); + $timing['crop'] = time_step($step); } if ($scaled_size) @@ -306,11 +352,13 @@ if ($scaled_size) $changes++; $image->resize( $scaled_size[0], $scaled_size[1] ); $d_size = $scaled_size; + $timing['scale'] = time_step($step); } if ($params->sharpen) { $changes += $image->sharpen( $params->sharpen ); + $timing['sharpen'] = time_step($step); } if ($params->use_watermark) @@ -345,6 +393,7 @@ if ($params->use_watermark) } } $wm_image->destroy(); + $timing['watermark'] = time_step($step); } // no change required - redirect to source @@ -357,6 +406,14 @@ if (!$changes) $image->set_compression_quality( $params->quality ); $image->write( $page['derivative_path'] ); $image->destroy(); +$timing['save'] = time_step($step); send_derivative($expires); +$timing['send'] = time_step($step); + +ilog('perf', + basename($page['src_path']), $o_size, $o_size[0]*$o_size[1], + basename($page['derivative_path']), $d_size, $d_size[0]*$d_size[1], + time_step($begin), + $timing); ?> \ No newline at end of file diff --git a/include/category_default.inc.php b/include/category_default.inc.php index 8d2cd050b..18a4cb4bf 100644 --- a/include/category_default.inc.php +++ b/include/category_default.inc.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -104,38 +104,21 @@ foreach ($pictures as $row) array('start') ); - if (isset($nb_comments_of) ) + if (isset($nb_comments_of)) { - $row['nb_comments'] = (int)@$nb_comments_of[$row['id']]; + $row['NB_COMMENTS'] = $row['nb_comments'] = (int)@$nb_comments_of[$row['id']]; } $name = get_picture_title($row); - $tpl_var = array( - 'ID' => $row['id'], + $tpl_var = array_merge( $row, array( 'TN_SRC' => DerivativeImage::thumb_url($row), 'TN_ALT' => htmlspecialchars(strip_tags($name)), 'TN_TITLE' => get_thumbnail_title($row), 'URL' => $url, + 'src_image' => new SrcImage($row), + ) ); - // Extra fields for usage in extra themes - 'FILE_PATH' => $row['path'], - 'FILE_POSTED' => $row['date_available'], - 'FILE_CREATED' => $row['date_creation'], - 'FILE_DESC' => $row['comment'], - 'FILE_AUTHOR' => $row['author'], - 'FILE_HIT' => $row['hit'], - 'FILE_SIZE' => $row['filesize'], - 'FILE_WIDTH' => $row['width'], - 'FILE_HEIGHT' => $row['height'], - 'FILE_METADATE' => $row['date_metadata_update'], - 'FILE_HAS_HD' => $row['has_high'], - 'FILE_HD_WIDTH' => $row['high_width'], - 'FILE_HD_HEIGHT' => $row['high_height'], - 'FILE_HD_FILESIZE' => $row['high_filesize'], - 'FILE_RATING_SCORE' => $row['rating_score'], - ); - if ($conf['index_new_icon']) { $tpl_var['icon_ts'] = get_icon($row['date_available']); @@ -145,7 +128,7 @@ foreach ($pictures as $row) { $tpl_var['NB_HITS'] = $row['hit']; } - + switch ($page['section']) { case 'best_rated' : @@ -162,22 +145,22 @@ foreach ($pictures as $row) break; } } - + $tpl_var['NAME'] = $name; - - if (isset($row['nb_comments'])) - { - $tpl_var['NB_COMMENTS'] = $row['nb_comments']; - } - $tpl_thumbnails_var[] = $tpl_var; } -$template->assign('SHOW_THUMBNAIL_CAPTION', $conf['show_thumbnail_caption']); +$derivative_params = ImageStdParams::get_by_type( pwg_get_session_var('index_deriv', IMG_THUMB) ); + +$template->assign( array( + 'derivative_params' =>$derivative_params, + 'SHOW_THUMBNAIL_CAPTION' =>$conf['show_thumbnail_caption'], + ) ); $tpl_thumbnails_var = trigger_event('loc_end_index_thumbnails', $tpl_thumbnails_var, $pictures); $template->assign('thumbnails', $tpl_thumbnails_var); $template->assign_var_from_handle('THUMBNAILS', 'index_thumbnails'); - +unset($pictures, $selection, $tpl_thumbnails_var); +$template->clear_assign( array('thumbnails') ); pwg_debug('end include/category_default.inc.php'); ?> \ No newline at end of file diff --git a/include/config_default.inc.php b/include/config_default.inc.php index c1329b96f..dad6e9b20 100644 --- a/include/config_default.inc.php +++ b/include/config_default.inc.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -467,6 +467,9 @@ $conf['template_combine_files'] = true; // gives an empty value '' to deactivate $conf['show_php_errors'] = E_ALL; +// enable log for i derivative script +$conf['enable_i_log'] = false; + // +-----------------------------------------------------------------------+ // | authentication | // +-----------------------------------------------------------------------+ diff --git a/include/derivative.inc.php b/include/derivative.inc.php index d15e7eff3..1f5152dd3 100644 --- a/include/derivative.inc.php +++ b/include/derivative.inc.php @@ -100,8 +100,6 @@ final class DerivativeImage public $src_image; - private $requested_type; - private $flags = 0; private $params; private $rel_path, $rel_url; @@ -111,12 +109,10 @@ final class DerivativeImage $this->src_image = $src_image; if (is_string($type)) { - $this->requested_type = $type; $this->params = ImageStdParams::get_by_type($type); } else { - $this->requested_type = IMG_CUSTOM; $this->params = $type; } @@ -125,14 +121,12 @@ final class DerivativeImage static function thumb_url($infos) { - $src_image = new SrcImage($infos); - self::build($src_image, ImageStdParams::get_by_type(IMG_THUMB), $rel_path, $rel_url); - return get_root_url().$rel_url; + return self::url(IMG_THUMB, $infos); } static function url($type, $infos) { - $src_image = new SrcImage($infos); + $src_image = is_object($infos) ? $infos : new SrcImage($infos); $params = is_string($type) ? ImageStdParams::get_by_type($type) : $type; self::build($src_image, $params, $rel_path, $rel_url); return get_root_url().$rel_url; @@ -257,7 +251,7 @@ final class DerivativeImage $size = $this->get_size(); if ($size) { - return 'width="'.$size[0].'" height="'.$size[1].'"'; + return 'width='.$size[0].' height='.$size[1]; } } diff --git a/include/derivative_params.inc.php b/include/derivative_params.inc.php index 569c4ace1..30497639f 100644 --- a/include/derivative_params.inc.php +++ b/include/derivative_params.inc.php @@ -315,6 +315,16 @@ final class DerivativeParams return $scale_size != null ? $scale_size : $in_size; } + function max_width() + { + return $this->sizing->ideal_size[0]; + } + + function max_height() + { + return $this->sizing->ideal_size[1]; + } + function is_identity($in_size) { if ($in_size[0] > $this->sizing->ideal_size[0] or diff --git a/include/template.class.php b/include/template.class.php index b6d1aa4ba..7bcab1150 100644 --- a/include/template.class.php +++ b/include/template.class.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -842,6 +842,11 @@ class PwgTemplateAdapter $args = func_get_args(); return call_user_func_array('sprintf', $args ); } + + function derivative_url($type, $img) + { + return DerivativeImage::url($type, $img); + } } diff --git a/index.php b/index.php index ffabff88b..0af394c66 100644 --- a/index.php +++ b/index.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2012 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ @@ -60,6 +60,14 @@ if (isset($_GET['image_order'])) ) ); } +if (isset($_GET['display'])) +{ + $page['meta_robots']['noindex']=1; + if (array_key_exists($_GET['display'], ImageStdParams::get_defined_type_map())) + { + pwg_set_session_var('index_deriv', $_GET['display']); + } +} //-------------------------------------------------------------- initialization $page['navigation_bar'] = array(); @@ -252,6 +260,28 @@ if ( $conf['index_sort_order_input'] } } +if ( count($page['items']) > 0 ) +{ + $url = add_url_params( + duplicate_index_url(), + array('display' => '') + ); + $selected_type = pwg_get_session_var('index_deriv', IMG_THUMB); + $type_map = ImageStdParams::get_defined_type_map(); + unset($type_map[IMG_XXLARGE], $type_map[IMG_XLARGE]); + foreach($type_map as $params) + { + $template->append( + 'image_derivatives', + array( + 'DISPLAY' => l10n($params->type), + 'URL' => $url.$params->type, + 'SELECTED' => ($params->type == $selected_type ? true:false), + ) + ); + } +} + // category comment if ($page['start']==0 and !isset($page['chronology_field']) and !empty($page['comment']) ) { diff --git a/themes/default/iconset.css b/themes/default/iconset.css index 976f2ce0f..9a7bd464a 100644 --- a/themes/default/iconset.css +++ b/themes/default/iconset.css @@ -37,6 +37,7 @@ .pwg-icon-close {background-position: 0 -52px} .pwg-icon-category-edit {background-position: -26px -52px} .pwg-icon-sort {background-position: -52px -52px} +.pwg-icon-sizes {background-position: -78px -52px} .pwg-icon-category-view-normal {background-position: -156px -52px} .pwg-icon-category-view-flat {background-position: -182px -52px} diff --git a/themes/default/s26/outline_005e89.png b/themes/default/s26/outline_005e89.png index 0e411a1520c35dae45e06d7cb1c7e88d68cf0d6a..ee114abe98edb58cf0bf3b6a474fde584f71c350 100644 GIT binary patch delta 1939 zcmV;E2W!I~P}NN7iHk^zq|3Q~>$A`gK!mrpCCBTZ&fnP<&~46T7oyQ2>!@9q>{| zB-`@;h$VRBDS4I{Oe_xqA}^rGVlyZ|y?{iPkOod*qBtK|3{{ClQu!gA_zT>^y3e!e z#Lob7lZfsWw62MP#)*GTlY!g_Qft5}4D5^eV=SD!nXiC!e+7ve3>8jf%uv3}df-;s zC_F*bbPJGILw}?sOLcQSmkP4u$ZiQ@K3G{z_k0M5P5zvf6Hyb-K#-%C-6?Jj#NWMc zA)J`RBZw6e5UbEZfyGmEWO170Jsk}Z1?2f4)j?Dz;bdYfKMx%QX#|y- zLI(ebbi-X1rvZdTF3pcwb8ZC@4W~&sfN064Qi&UCAYd^^zv-a0Bqm)4u4c*- zo-lx*gMT*r4b(4PZXn!)_*$w&9G4b&0nq_8=+uS6A}Da!a>#)@fL;i_mFhYpUe+Bs z4V(Ls?R%Ye)+-9pC+l?(H9H=xcX>`bj~LJC+#`zTnD423>^$P!_bLdRBkp|f+{-J7 z2A9WA@l--6?1F0_xziBt@gzs!YvfW7_qO0uGJp9`JpDTUSP%{%e{!Lm84VEPThQsV zL2)CH>he2IZu7B$uJ5~?pL&xQl{Ryg=?a7(tJw{)sSk_aN*G*m0$I&&ND4~)&sFbL zklOnInshaZ?+R#@%4FdPlG-5~r;|%gb5#S;rb(5nCoTOhKv+OeivZN>J8>R+2NDA@ zh<_84ryAinabEBoWJy7RPB`)EW^#@24XLa%&w!3|m>vqqpL;|*TsJjan)FX6_bQT5V=)Fhu z47N#*3)Ugwg-1Nc^aiCvSKg0O2Y}GUw;OLNpgmJPSZTz+SD#7D(&wMWXj~ROKoNBP)fgW za>@yZ)Kt2aUOm5XO2%o-GT2R3i4o+_$}X!c%L*fooT70W^J&e*o!Eiib(J&_drqWo znReylnZNIJvT9(cZodG1%gLfQ{C_=-`|X5RM>8)V|32-`ubXe`35a(j$`4Iy??7qj zP3i{N^3^->Wb=0a1--)orw<@)(x&1Vpf%|=h%4&cHuu`fLGsdeWw=PzWnNoLI8P6a zF~3QMTCYH5Udutxn|r^Cy_WO<>6s_E0@=Kljm4W!aU<0+%81ilg37#>H-BEGGE~hc zt5etMO1v_!bu-GeGWlUd?WSGg7!!|;Dfxg~LEAw1W|FR>*I5^4Y6EbcNPh#e>2Dpo z=kGv%_5QYaY-9KeR1A^Di)JrVXnV78Rc6~X#!Rk-1Z%W>1+pv1ZjBP&A3;lgEg3(8 z&Nm`8e02Xmzw=zUY_J3tHGk3Vh&LdlRmTZBMcNVl;3bAyn0Ca0(>x4^ zXc5Qu5M}orA!(G_tF>T5zKj-6YtYd?#slGIOXxKBya9E%D+LvJkb-JQ6uT{00H}Dlpz8xbsyF69Sf#gGjpFd_qCQh!jOx8m6d0xTF= zPnDI>?BO03rtv@^UjzCQ=@rD49$1*-fk4f-43Y#7mgaG>lCiZYM*`c_*&pritl$N8 zASS|Gr?oq)><_nt;t1lTvIlW~*Bc_r0=JflDkUZ4GbW_}7!TJbo~pqPlnK&$j>-m?dN zEnj|uyi=7sK7S2*Jf$cg8IID|m-(8B%U6;=EcpCa7JZ6B3xC)7H$h3e)!U#cD=^xV!tjcs@@0000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+ ZQe|Oed2z{QJPZH;002ovPDHLkV1m($pjiL_ delta 1848 zcmV-82gmsO515k6X$9M69{|72M}w>Xzwh(?F3pW1gx-gD0U-Q)tZ z0{$yG$WwkLnNwJy6EXZt-{o@%IrDe(h|DUC4qgT1$BAt59DkFDfg^*0E&$#EPjy7H zEdNC;!7C5Rv&3Lxc@PkJ0Yw&@LHX?kB(j9maRL*?`M_eRN+goXFX6;5a1-l3j;0fj z4&(+A-79FG69bJCe@%mdTn|!fz$^^xMf@=qPTtH{K)SwyL=A=tCo*OzFS8!FSr!U! z5H;Ndf|w6xR@1#-0%DWDN99D+#4`}&=w)?^O9Sz{*Cm7# zleh=5LIPqHR#0H^)ErryCV5YLLqq|2-bi&2)k!#+*vikt3WC&w%xVEtrve&PNETrQ zsVf!`lvNEhg{UAH6{H(6nPaoaB+KY>=IjMj9Nc^3^nV#wwn7~eI#4aZo9iFPJ4eS4 zK+Zh}1(Wi3jC1w6>=!iqb@bUp7bR%Q%H(2AVTJBeV^1t@SV4gGL#5HuWcpZP?m;%q zfu%q54l>2DiQms1zte319dvBLSYdUIBYrO!0kXEgq})uo)I7O_ME!K zeb4q1MXHZ-DJw*+ofI_i;3OfxR^J?SWk6^I)IutqaFSfB z;t({#k*|sNj8oMCx{?*wva4J;p%16;pfE_zaPMIl`%|0R^^eN+cLOqIa(_#0Wq)i} zN`G*2$_cyFRBkJ4_58sp8K*wW;A*N$^dNs!d{|{!W*D*O6pd4#PirP#i4ExLR!JSP zgEV9Qrm;>qHzl@as|2OPeD^na2z6vvP%%U^&Xx!e}_dXKLWP=}tkVU&{;6Qd_F# zgVm|?X=z{jwQfY|Rwm!IsNJwh9DU-kHYIOxD`*=CFFNVkdL4CQrq%%0j(_wWkad4+ z+dba{`Puu&;<1h47N{5^ix-Vvy3qDy!TkILWc^wzBv_;A7RZhuJ2gspe+5nXvt;}V zI$ns>@X`H0{(?A=ZP>u7O=O$%#&%qoCgtJ5FQQ9HL1a z+e4JqH-w~7YLC`}HTg1HJb%qWTl*Mygc~iP)41jhsLfp|sKA31R2!oBt*?b>S6zAQ zE|R3$Edj3fS2cU6csQY38-P?#%#N^1Z?+oKn~*bo0hwS#2EwGEK$qfK3j!<{Sx=Rf z(Cpz}7N&7WARhzz5a|=dl^$4_;*LPgw+xa550>U}vXZe~QT7D3u79)N+uvEi3+g~j zgt2yOH&)qh?h1-Mh?B||#Q9xMh$s`>Tso?hl#tJuko!l!xz_Pi4K|>>1MSpkYKti4 z97B{V2Y`GgMBF*7h;{^WJCHpQUY|N!CRS1Gz$5fYiPxyaQFdK9t)Tb~wCePrVH*!X zH}ly;(BB(SF350JoPV5Ddro3*$z+95Rt-(?SJ}pCl5FUVLxvP249&}s2 z{04cZDrfxtzR>F}MFB~3lx`p9b0#idN&d0m`+r%iT@;$Q&VL9>dRu)A8nOcOg90V# zBb0}riSpY$6pwSN?9W3GFlc-XN_;(dxVaoqfdV~qqXK&7uraJtkdE@B(6ADOo&{me m?vKK~f*vK7>&GmAaQp@3j5w8WI!I~P}NN7iHk^zq|3Q~>$A`gK!mrpCCBTZ&fnP<&~46T7oyQ2>!@9q>{| zB-`@;h$VRBDS4I{Oe_xqA}^rGVlyZ|y?{iPkOod*qBtK|3{{ClQu!gA_zT>^y3e!e z#Lob7lZfsWw62MP#)*GTlY!g_Qft5}4D5^eV=SD!nXiC!e+7ve3>8jf%uv3}df-;s zC_F*bbPJGILw}?sOLcQSmkP4u$ZiQ@K3G{z_k0M5P5zvf6Hyb-K#-%C-6?Jj#NWMc zA)J`RBZw6e5UbEZfyGmEWO170Jsk}Z1?2f4)j?Dz;bdYfKMx%QX#|y- zLI(ebbi-X1rvZdTF3pcwb8ZC@4W~&sfN064Qi&UCAYd^^zv-a0Bqm)4u4c*- zo-lx*gMT*r4b(4PZXn!)_*$w&9G4b&0nq_8=+uS6A}Da!a>#)@fL;i_mFhYpUe+Bs z4V(Ls?R%Ye)+-9pC+l?(H9H=xcX>`bj~LJC+#`zTnD423>^$P!_bLdRBkp|f+{-J7 z2A9WA@l--6?1F0_xziBt@gzs!YvfW7_qO0uGJp9`JpDTUSP%{%e{!Lm84VEPThQsV zL2)CH>he2IZu7B$uJ5~?pL&xQl{Ryg=?a7(tJw{)sSk_aN*G*m0$I&&ND4~)&sFbL zklOnInshaZ?+R#@%4FdPlG-5~r;|%gb5#S;rb(5nCoTOhKv+OeivZN>J8>R+2NDA@ zh<_84ryAinabEBoWJy7RPB`)EW^#@24XLa%&w!3|m>vqqpL;|*TsJjan)FX6_bQT5V=)Fhu z47N#*3)Ugwg-1Nc^aiCvSKg0O2Y}GUw;OLNpgmJPSZTz+SD#7D(&wMWXj~ROKoNBP)fgW za>@yZ)Kt2aUOm5XO2%o-GT2R3i4o+_$}X!c%L*fooT70W^J&e*o!Eiib(J&_drqWo znReylnZNIJvT9(cZodG1%gLfQ{C_=-`|X5RM>8)V|32-`ubXe`35a(j$`4Iy??7qj zP3i{N^3^->Wb=0a1--)orw<@)(x&1Vpf%|=h%4&cHuu`fLGsdeWw=PzWnNoLI8P6a zF~3QMTCYH5Udutxn|r^Cy_WO<>6s_E0@=Kljm4W!aU<0+%81ilg37#>H-BEGGE~hc zt5etMO1v_!bu-GeGWlUd?WSGg7!!|;Dfxg~LEAw1W|FR>*I5^4Y6EbcNPh#e>2Dpo z=kGv%_5QYaY-9KeR1A^Di)JrVXnV78Rc6~X#!Rk-1Z%W>1+pv1ZjBP&A3;lgEg3(8 z&Nm`8e02Xmzw=zUY_J3tHGk3Vh&LdlRmTZBMcNVl;3bAyn0Ca0(>x4^ zXc5Qu5M}orA!(G_tF>T5zKj-6YtYd?#slGIOXxKBya9E%D+LvJkb-JQ6uT{00H}Dlpz8xbsyF69Sf#gGjpFd_qCQh!jOx8m6d0xTF= zPnDI>?BO03rtv@^UjzCQ=@rD49$1*-fk4f-43Y#7mgaG>lCiZYM*`c_*&pritl$N8 zASS|Gr?oq)><_nt;t1lTvIlW~*Bc_r0=JflDkUZ4GbW_}7!TJbo~pqPlnK&$j>-m?dN zEnj|uyi=7sK7S2*Jf$cg8IID|m-(8B%U6;=EcpCa7JZ6B3xC)7H$h3e)!U#cD=^xV!tjcs@@0000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+ ZQe|Oed2z{QJPZH;002ovPDHLkV1m($pjiL_ delta 1848 zcmV-82gmsO515k6X$9M69{|72M}w>Xzwh(?F3pW1gx-gD0U-Q)tZ z0{$yG$WwkLnNwJy6EXZt-{o@%IrDe(h|DUC4qgT1$BAt59DkFDfg^*0E&$#EPjy7H zEdNC;!7C5Rv&3Lxc@PkJ0Yw&@LHX?kB(j9maRL*?`M_eRN+goXFX6;5a1-l3j;0fj z4&(+A-79FG69bJCe@%mdTn|!fz$^^xMf@=qPTtH{K)SwyL=A=tCo*OzFS8!FSr!U! z5H;Ndf|w6xR@1#-0%DWDN99D+#4`}&=w)?^O9Sz{*Cm7# zleh=5LIPqHR#0H^)ErryCV5YLLqq|2-bi&2)k!#+*vikt3WC&w%xVEtrve&PNETrQ zsVf!`lvNEhg{UAH6{H(6nPaoaB+KY>=IjMj9Nc^3^nV#wwn7~eI#4aZo9iFPJ4eS4 zK+Zh}1(Wi3jC1w6>=!iqb@bUp7bR%Q%H(2AVTJBeV^1t@SV4gGL#5HuWcpZP?m;%q zfu%q54l>2DiQms1zte319dvBLSYdUIBYrO!0kXEgq})uo)I7O_ME!K zeb4q1MXHZ-DJw*+ofI_i;3OfxR^J?SWk6^I)IutqaFSfB z;t({#k*|sNj8oMCx{?*wva4J;p%16;pfE_zaPMIl`%|0R^^eN+cLOqIa(_#0Wq)i} zN`G*2$_cyFRBkJ4_58sp8K*wW;A*N$^dNs!d{|{!W*D*O6pd4#PirP#i4ExLR!JSP zgEV9Qrm;>qHzl@as|2OPeD^na2z6vvP%%U^&Xx!e}_dXKLWP=}tkVU&{;6Qd_F# zgVm|?X=z{jwQfY|Rwm!IsNJwh9DU-kHYIOxD`*=CFFNVkdL4CQrq%%0j(_wWkad4+ z+dba{`Puu&;<1h47N{5^ix-Vvy3qDy!TkILWc^wzBv_;A7RZhuJ2gspe+5nXvt;}V zI$ns>@X`H0{(?A=ZP>u7O=O$%#&%qoCgtJ5FQQ9HL1a z+e4JqH-w~7YLC`}HTg1HJb%qWTl*Mygc~iP)41jhsLfp|sKA31R2!oBt*?b>S6zAQ zE|R3$Edj3fS2cU6csQY38-P?#%#N^1Z?+oKn~*bo0hwS#2EwGEK$qfK3j!<{Sx=Rf z(Cpz}7N&7WARhzz5a|=dl^$4_;*LPgw+xa550>U}vXZe~QT7D3u79)N+uvEi3+g~j zgt2yOH&)qh?h1-Mh?B||#Q9xMh$s`>Tso?hl#tJuko!l!xz_Pi4K|>>1MSpkYKti4 z97B{V2Y`GgMBF*7h;{^WJCHpQUY|N!CRS1Gz$5fYiPxyaQFdK9t)Tb~wCePrVH*!X zH}ly;(BB(SF350JoPV5Ddro3*$z+95Rt-(?SJ}pCl5FUVLxvP249&}s2 z{04cZDrfxtzR>F}MFB~3lx`p9b0#idN&d0m`+r%iT@;$Q&VL9>dRu)A8nOcOg90V# zBb0}riSpY$6pwSN?9W3GFlc-XN_;(dxVaoqfdV~qqXK&7uraJtkdE@B(6ADOo&{me m?vKK~f*vK7>&GmAaQp@3j5w8WIoCX>&vf>$V}A%z8%k>XaW_AI3nDyi z2t@BEHh}QsZ;fj)qk7NcG#>zP``p1AbaRC0}wQTdRhacMu0MfoQJS!5M0rm4k!L zA;z_WX1GnWVD=h(6bBXBCK#;W#vYUqe(DNTgWD7{{O|u3Pr_SfSx)@`*#rR(HsN7l z851T)alJ4C1VB=#^uzb-8U(k~*FTaSpnihN+#5Q^JAV=&>Gwe!L`8%8)*QzG1R_?G z=`4wZ9U#rb@j(Sf0JUz^ffRszK?0N{RE8BsCvWjVx&}Eo$V*-ZK;AIh50KTjL9Hb8 zQ&|r{UB%$*vpE3SVm~WD8blxs9B1M%%5J@l!|v2&!l#m0Xel zQX3(&jGJkO#ef>APf%GJ3lQ;n=9+K5DbdK;omBua6X#ZdsLwOYf>@c4)yL@EDl^Qc z0Lu0ndJAm)Q%tcoF8N)49bW`B!#K}%&S2bD4a$-1IJ3B4gO2b)tD-m$)m|TTOcWOf zkbjS%aLae)K?hV4^7EhzDhZhQ__i_(roxBp(W_%?aq|HA9)HRaf)`e^X93Eqf3L4* zAK4F@>(i`h@~!CyAu$g^L`QX18yX?(%WtV?Z~R#R&|8K&UOUxOrvNH|>J&ik+nCkql(jbst)e&ZMd!#V*T3*KS0G+Bq!Sz9} z21$!orFF#GL=GQjpQ%Ah5>>_r^%r%GHXOoa6xa`s12t%7V1!ImxhM`~u@pp@;SaNM zpbye33Db!xmj`h#-OvVHp=3t3S%1?zDhbnh5X=n(m~MHjJ$8V6!;e>25~AHCR4*n8 zL+o3KPOKz264iK!okA0rzx6 z)^JxXZb>Df#;$5Eu1*0|0MTuLI>!KX)9@e)paRHleSTS?j1PR*_+T!LH-BC&4GOwb zd*E+O7yQoMu>1MdCN6G;TNl*X8^#7JZEJ+&)7Zx-;WKfbJbhhm4?{zK7mdFcOai3; zlbcl>O~h!E^%d5cG`=c4>`~mw8U#n9dlikhvrAFjs6q2SAbuU1FU=q*EZX1+Gg|=^ z2T=QX(YH1XF+&px(FxEk1%Jq@3+uWwQ7Zs*wi|EPpytq^{Eq)QG@CWZQ|!pj{&6Tx zDnRGgg#9Z3vuQSJkf&Uj3lR>aSpd+R%bfW%%QVQ=#P-m<^DOc~*3rAn<*NlyY0%a# zEkRLpGha0{Ql|hafW9N>ekDMsx_)>So z+2=6VYy_4kW$5vy?=f+lWXH&Gf8Pl!Hdj^+K$0RpjWhHuw_ilboG9(3l0m>2Z+)C03Iq+q=^FX@7Ecj{`wpuLH>U+GlMOR@_Qw`wI0Z#llc6B@=JaG5gddY# zHzOi&QCzoKK^rsz4Um12nAOxo0CaJ&6za!fHHc#e99m?LE^#+J`v9`9PwxfIErFr{ z`eR$^TqbTgKvKAi0w^~~U`jj?-u7T=zS*Brz*_+Fh1qOoBY&?uFMue3*i;o0PejbN z|Go^McKEWq0_gZ-7nm39V|?+z(mPJEpa7~<02M%W3ZVUA`!zEOjVRaLLGvaYU3Y?w@LNGH$!?{Q6=JhjZAZ8i}qge{js0(R( z2;~eK`8~%7qj@@fI0B0SP2^C=X*7AU+QM*N8k+Jv(|--)?cq@;XzK74e{ZXTkwuAW zG(cDa5R6+A@&M}J3tTjR`M?B!)`*@nMI##B?W1eKVH~WCHGUbT(Xn&{%MFZ3dplBcTbyG7-0BR=!RA**{qyW0*6bmi^2xMu7tuvPgN&yIB{;s`f z@ONBQ>|F+sUXa8@Z@!KQkYt+BT|o2a(~1NK>^NHUY#mzN=xk7$Dz}P_?`d2B?NcE&!;`B7o`~cK!iRyPkhH z$}?r00000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy07*qoM6N<$ Ef?_3d8~^|S delta 2410 zcmV-w36=Kz6Ri`FTz@=CL_t(|+U=cEn=b)G?$m%+f%2XH zb`iD^xA*w{hqT=d;gTfe@8~k}Pd?wn{axMPA*`#%|2ho&h<{&n_OGK0>FVy(>*L*g z{uV?$R~JO@#q3y6)gP?u|Ga!5DG6D!1pqAFas1cw{A?G1%8U$A~=L2N< zEf&zn7Ghj0=mocF7R+9QkK&-By##~xYwSU7!f#!HYH%;b4FCJD#gp)sS>C69K(>v5 z+cM#1U>Or8M{%t%0t6r_RQmA!x(31R^!1Nq2h={GGJo$44dWdNNcw%y22s(Vwl&8x zfI!4*vYh4MU`vF;f z8`Mlf`zY%H)Km;UKbr%{7W-KNX^21?IL^eOd%EK_2*04LIVsy=&3CwC6Z)L4>6HVj}#asrs5LDpU+ zKOopm99&vtk%C)iG0DXFDoA!fu=^lelON12u74wdkm!Tt&yoWO@~d-2D36~)3LvOk zBPr#Q1V}A}j4s?rF)RjZq&`7i(pW&m=NT)$`MN|Sdv|65Vmi*PfT+(ix&*O%K2{&2 z&sLdXHU%i#Yv?7g{!cNqv~h>u>96C9phgzX^EzuR+@l(lv$NyO;`17`gb$h(#d)Nj z^?yOjL~(I|dp^36nmI+jIrShUo`VokQJqzWM#%Ezm(;T-{!9RLN>j(NT|IRbpaN7^ z0jg^zAiRDNu`;0hnHYs^Jq_~at8j!qVt*e%dLimWKqDFR-mE#ahbeipXuf(0oEhzv zHAqjB_49DeX%VAETe$0uy#Yh}2Mkb(DxeDBkdvjl+aJyJo&yMfzQ^fWt6q?dy_U>} z*!%%u8kUv|2R#O6?|>l*5IYRBrwcH=Z5-u;tbicj&c!S^(~%%+&DntL9)}4K#D5^c zHbhBof#{pRmXAA2gP@rHfiRn!BZaQl@&?cQYf$hcA+H8WgIA?-#9Bwr`I&?O4Ptyy zdr((z!XZpX;r!I<&_R`p;y@-#L4+A^%OngRRJn5y_s|Wk!4>Ms=)6qA@Hq(P0s>5L zxvxEY0-Bsjh<1}uz1T_Bq$vm0cz;Cl^LX%LK+c0|HlVY@Y-=WAQay-??@w_1BY*;$ zg{$hnWhSAngPKO_DnJD&)&keEE(~a=Kp6$70NJh2j}^-Jz}NzgJqXS{)pbJi(xA-a zx&P6)KY%>@!Z7>!XcHGV!mSB)^bO+yD{U);OVA$|bR*295iG_;F~yV+J8% z(FRYLc@>~IK-brUzO`nE5t&FtE1;VS$f^tT>Znm80CT1rKdwQSLxb`w{_Ds*tU;b+ zNA~F-i^`+|T0bZ39|4#x^M9ZQdD4Zsh_Il{1VAUJIrC+vX^^dm?U6aPY}0KFsVJ`&KXuHXJll#RleOhA~12d1Cw)W3J_YkJ!E zr&&q|hXJzpVdf*!J7wthruUdQZfD2r;r6@}cH3-`@yPH&pk4L&NPlP9T;W_m==4`2 zbZ6T~I=6;2>C;T4u})h88lT_B&uX-cbpG`odV#$qu`wVJvu5~m9jG`8X6-?vZ-{w7 zZ)-f%hJbn#bS$x&ytBO{o$n@B_c##rbvr=5$3AP5u;NBK+efJ1B{nv3-wVo)Om6LI z5PnQ{-OLt&OJchjD1Ta`5okcZsXG{2?s$nU0KpK^LA3amYNGWy#MW%XraAAY0NKZ< zw}R#?L81Wtv5j;t6E_`@6z-w`AjH=JR4$%7DJJti!m?EDj?%YRsnu0iGvfNUlUE;HBmjW7V}$ee8A;P5JNdLjtH%#aM{9<7tt*N}mD z(mR#%Uli_?LOK$$0pw2%~_U9MV!O#p#R&9Hgq z@<1toAb+0UwFeFU##Obv(*WrSNetBH>kSgU0bR6yNM_BO&8y20#i3J7mhKKHK#zpktbr>) zkDY_`5WB*JiMcoqKmmF%S=tX0janrKdZDT-uRkQ%5mm4HN6~!$As5jX1w_l(R zs*eGZ0|#rEP|N%fph}iL>Vw+L+rFi#$_)Y4J3jhEB diff --git a/themes/default/s26/outline_ff3363.png b/themes/default/s26/outline_ff3363.png index 9a5aef891bfe81d2594e08aa826918181f15970a..bb2224f39e337f83db575d5814edca057e0a7f28 100644 GIT binary patch delta 1939 zcmV;E2W!I~P}NN7iHk^zq|3Q~>$A`gK!mrpCCBTZ&fnP<&~46T7oyQ2>!@9q>{| zB-`@;h$VRBDS4I{Oe_xqA}^rGVlyZ|y?{iPkOod*qBtK|3{{ClQu!gA_zT>^y3e!e z#Lob7lZfsWw62MP#)*GTlY!g_Qft5}4D5^eV=SD!nXiC!e+7ve3>8jf%uv3}df-;s zC_F*bbPJGILw}?sOLcQSmkP4u$ZiQ@K3G{z_k0M5P5zvf6Hyb-K#-%C-6?Jj#NWMc zA)J`RBZw6e5UbEZfyGmEWO170Jsk}Z1?2f4)j?Dz;bdYfKMx%QX#|y- zLI(ebbi-X1rvZdTF3pcwb8ZC@4W~&sfN064Qi&UCAYd^^zv-a0Bqm)4u4c*- zo-lx*gMT*r4b(4PZXn!)_*$w&9G4b&0nq_8=+uS6A}Da!a>#)@fL;i_mFhYpUe+Bs z4V(Ls?R%Ye)+-9pC+l?(H9H=xcX>`bj~LJC+#`zTnD423>^$P!_bLdRBkp|f+{-J7 z2A9WA@l--6?1F0_xziBt@gzs!YvfW7_qO0uGJp9`JpDTUSP%{%e{!Lm84VEPThQsV zL2)CH>he2IZu7B$uJ5~?pL&xQl{Ryg=?a7(tJw{)sSk_aN*G*m0$I&&ND4~)&sFbL zklOnInshaZ?+R#@%4FdPlG-5~r;|%gb5#S;rb(5nCoTOhKv+OeivZN>J8>R+2NDA@ zh<_84ryAinabEBoWJy7RPB`)EW^#@24XLa%&w!3|m>vqqpL;|*TsJjan)FX6_bQT5V=)Fhu z47N#*3)Ugwg-1Nc^aiCvSKg0O2Y}GUw;OLNpgmJPSZTz+SD#7D(&wMWXj~ROKoNBP)fgW za>@yZ)Kt2aUOm5XO2%o-GT2R3i4o+_$}X!c%L*fooT70W^J&e*o!Eiib(J&_drqWo znReylnZNIJvT9(cZodG1%gLfQ{C_=-`|X5RM>8)V|32-`ubXe`35a(j$`4Iy??7qj zP3i{N^3^->Wb=0a1--)orw<@)(x&1Vpf%|=h%4&cHuu`fLGsdeWw=PzWnNoLI8P6a zF~3QMTCYH5Udutxn|r^Cy_WO<>6s_E0@=Kljm4W!aU<0+%81ilg37#>H-BEGGE~hc zt5etMO1v_!bu-GeGWlUd?WSGg7!!|;Dfxg~LEAw1W|FR>*I5^4Y6EbcNPh#e>2Dpo z=kGv%_5QYaY-9KeR1A^Di)JrVXnV78Rc6~X#!Rk-1Z%W>1+pv1ZjBP&A3;lgEg3(8 z&Nm`8e02Xmzw=zUY_J3tHGk3Vh&LdlRmTZBMcNVl;3bAyn0Ca0(>x4^ zXc5Qu5M}orA!(G_tF>T5zKj-6YtYd?#slGIOXxKBya9E%D+LvJkb-JQ6uT{00H}Dlpz8xbsyF69Sf#gGjpFd_qCQh!jOx8m6d0xTF= zPnDI>?BO03rtv@^UjzCQ=@rD49$1*-fk4f-43Y#7mgaG>lCiZYM*`c_*&pritl$N8 zASS|Gr?oq)><_nt;t1lTvIlW~*Bc_r0=JflDkUZ4GbW_}7!TJbo~pqPlnK&$j>-m?dN zEnj|uyi=7sK7S2*Jf$cg8IID|m-(8B%U6;=EcpCa7JZ6B3xC)7H$h3e)!U#cD=^xV!tjcs@@0000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+ ZQe|Oed2z{QJPZH;002ovPDHLkV1m($pjiL_ delta 1848 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 ZQe|Oed2z{QJPZH;002ovPDHLkV1m($pjiL_ delta 1848 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 ZQe|Oed2z{QJPZH;002ovPDHLkV1m($pjiL_ delta 1848 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 delta 2127 zcmV-V2(b6Z5&001B#}uVe;`RjK~#9!>|KqT+$sn?zW+<#w!1S?;2;>y#JSmiZFiPU z;*lSLAfkNP7al;j8vUQIZvq4Z0q!uXVKG8|o7X3N77+4Jt%eR`UfLOgo<4H|k(qBa zUoAm=qbTCT&mG>kdf$)=n#nJilVlFv`gPQh#KZpH=I2Lf@st|GfAN6;`uB*2O$z~ zB*(0Q{PIR~2&Q~;b16VHm!qEdhC2Y&At+xa6wIhxI@lkYf}83y?B9u&i3?e{zTq(0Ur;fIPG90;0ZT zp*rLM;>>`*fWon-AwUulN(9i$hyavBc!2`(r^wRgEO{p5wF1+NJV5T!gy!#>c+VYl z|H8hfU>Q!>W@gJkyb2S(0}!!t8>fDZb?C{H6mY;R^QGnS?~T&RL1k zzj$PPr!tDkf8R!I*sz@t*B!`D0$75{1q3Q`;5-6JKl(1$NDdoWKs;pto*TB^To({h zIwYQw0EEKgWAwEOaX^r>k#S!VfI#!oh+sez5R%4Dsd5mIov#RH;<`z#wC$u9L;;~N zKycE!k*NDb`Ma> z4IlQlC&oja*k&N~!-aJ8`%iWsyIc9^dJQL8IUSnFAVEJwy=92x**)n^)Iyk>3PavfrT zAl`dH4P2)b1aB?|L{&$d1Tz|kY37a`K_h^Nf6iURAqesJ%{HtASy6@X(PGzC%T6-Z zgIZIi)WOJbUGFLMIiz){s`aWX5n;>1*?tV1xj4M5`o zR(s>xQ|PWkU~vL?a;o0VfrU^;JcX!M$}J0Hd8c`v0$*6eh{Qf0d=!wkux0^WWVV^7 ze=rgcX`8=Z`+YztNX`C@Qw0N_!jqSK0Nn`CHfg!|`yp&1A723oVnbW(!SfMuE1X>J z23GiwafohBVY^n~DZE`7eXYoa3g1);2a~1TiAB;BT7Uybk?hw0` zfmzBq4sq`=i3rmuc|g~Co@vSuhe)i=DHq4pSsh}Tyj)@HeE{8@LrjAWtNi5Ue;z>J z1_*ZmG*kb13z{WXCI@I_L%6PdSeff9SSdcDQKSwMt^!08nxh4v@KaA85jkVF15>OT z54Cf%!25{nki93lR|L)XUtIvG?q`SCY||p>svoKOkY&ZUq+?vvMPx|8v+7nT9 zw+Ik#!V1xDQJN_*{@|S^(wlxkf3m(a0nsL`jo7yzX%X~Wbd~C$VeB$M&IV~&n-wa8 zrq%0j!dj8@o3NI5!%OI;qF{kMpp1>_qA?e?^t$?Y&M(EwxtAjfQ5e+!PNNxvf? zYh{J|UZUq9ehSdgi^qt^`!PV%@5&}-ec9@hmwNy`fF3~i0kkj`EMsOKO`oG&1<2f$ zyMSUwQ$b4bO|v?)!0d1~iE@fVPHQ2%;}@Wh0+~!H!U+bYm;^*9O+19-%mJB0nL?@N zlcr|9G<1a01~j@vX)eX}e^2|ANWqgv2wr=8p5iop@+r2+85A%>vFrn~6ehbi<$6HQ z30iOgSydsLa;?aLDhnJnf^`-XqgeY~>5*ioDXm{p5TOhLDtzbUM2gs$j0olE#Y)Wu zd4m?()NziIGHhd}UY4BO9tvo72+avWrFXXxLo%|kMgbuY2&7CQe+8)UW~&tijST{I zkE;weKq*C^zGyZg9+1Ddk2(MdCjkw)K2fbL&__A(s&=S2rJ)o`QAZ@@ozsXzJ_@Lu z1>}#ZALTkBhIOzXJMya(b;N8-QLmGaYo=yOgB*$iDt7=BGYY%pyuwy)|Ge9#fc}@6 z({3xDPc|bN1SF1Fe^v)s9|u@(2uQh;aO3*B0cypmK7;#ZB-^9Xw*drkxH9zV)F>Mu zs!uG0+CdmNYx919>g+IOkT}Kp-hhh55P6)qcNESotsEdVYI8tT; {/if} + +{if !empty($image_derivatives)} +
  • {strip} +  {'Photo Sizes'|@translate} + + + {footer_script}{literal} +function toggleImageDerivativesBox() +{ + var elt = document.getElementById("derivativeSwitchBox"), + ePos = document.getElementById("derivativeChooseLink"); + if (elt.style.display==="none") + { + elt.style.position = "absolute"; + elt.style.left = (ePos.offsetLeft) + "px"; + elt.style.top = (ePos.offsetTop + ePos.offsetHeight) + "px"; + elt.style.display=""; + } + else + elt.style.display="none"; +} + {/literal}{/footer_script} + {/strip}
  • +{/if} + {if isset($favorite)}
  •  {'delete all photos from your favorites'|@translate} diff --git a/themes/default/template/thumbnails.tpl b/themes/default/template/thumbnails.tpl index 75033a436..fec76214e 100644 --- a/themes/default/template/thumbnails.tpl +++ b/themes/default/template/thumbnails.tpl @@ -1,10 +1,25 @@ -{if !empty($thumbnails)} -{strip}{foreach from=$thumbnails item=thumbnail} +{if !empty($thumbnails)}{strip} +{html_head} + +{/html_head} +{foreach from=$thumbnails item=thumbnail}
  • - {$thumbnail.TN_ALT} + {$thumbnail.TN_ALT} {if $SHOW_THUMBNAIL_CAPTION } diff --git a/themes/default/theme.css b/themes/default/theme.css index 2b43be418..b8f919c43 100644 --- a/themes/default/theme.css +++ b/themes/default/theme.css @@ -685,13 +685,10 @@ IMG.ui-datepicker-trigger { } /* Set some sizes according to your maximum thumbnail width and height */ -.thumbnails SPAN, -.thumbnails .wrap2 A, -.thumbnails LABEL, .thumbnailCategory DIV.illustration { width: 140px; /* max thumbnail width + 2px */ } -.thumbnails .wrap2, + .content .thumbnailCategory .description { height: 140px; /* max thumbnail height + 2px */ }