diff options
author | flop25 <flop25@piwigo.org> | 2013-01-14 23:15:34 +0000 |
---|---|---|
committer | flop25 <flop25@piwigo.org> | 2013-01-14 23:15:34 +0000 |
commit | a6f55ac0381a81c6abf79bb2ed8617b6d50ed2aa (patch) | |
tree | 491cf9c9b254fde48fd4ce97e1819bbc61833a29 | |
parent | 0b702326567d90e796caac72c7d7a5449037b1b6 (diff) |
bug:2820 & bug:2684
add $conf['maxRequests']
perf enhanced : declare once {combine_script}
add one loading gif, fixed at the bottom right of the page
display an icon for picture loading, and an error icon if ajax failed : might need to be integrated in sprite.png
ToDo picture page/clean up unused loader gif/sleep above all.
git-svn-id: http://piwigo.org/svn/trunk@20161 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | include/category_cats.inc.php | 1 | ||||
-rw-r--r-- | include/category_default.inc.php | 1 | ||||
-rw-r--r-- | include/config_default.inc.php | 3 | ||||
-rw-r--r-- | themes/default/icon/errors_small.png | bin | 0 -> 1270 bytes | |||
-rw-r--r-- | themes/default/icon/img_small.png | bin | 0 -> 1164 bytes | |||
-rw-r--r-- | themes/default/images/ajax_loader.gif | bin | 0 -> 10819 bytes | |||
-rw-r--r-- | themes/default/template/index.tpl | 3 | ||||
-rw-r--r-- | themes/default/template/mainpage_categories.tpl | 45 | ||||
-rw-r--r-- | themes/default/template/thumbnails.tpl | 42 | ||||
-rw-r--r-- | themes/default/themeconf.inc.php | 1 |
10 files changed, 88 insertions, 8 deletions
diff --git a/include/category_cats.inc.php b/include/category_cats.inc.php index cb25bc41e..6f93dea91 100644 --- a/include/category_cats.inc.php +++ b/include/category_cats.inc.php @@ -387,6 +387,7 @@ if (count($categories) > 0) $derivative_params = trigger_event('get_index_album_derivative_params', ImageStdParams::get_by_type(IMG_THUMB) ); $tpl_thumbnails_var_selection = trigger_event('loc_end_index_category_thumbnails', $tpl_thumbnails_var_selection); $template->assign( array( + 'maxRequests' =>$conf['maxRequests'], 'category_thumbnails' => $tpl_thumbnails_var_selection, 'derivative_params' => $derivative_params, ) ); diff --git a/include/category_default.inc.php b/include/category_default.inc.php index b1d2106b8..cab756bbc 100644 --- a/include/category_default.inc.php +++ b/include/category_default.inc.php @@ -153,6 +153,7 @@ foreach ($pictures as $row) $template->assign( array( 'derivative_params' => trigger_event('get_index_derivative_params', ImageStdParams::get_by_type( pwg_get_session_var('index_deriv', IMG_THUMB) ) ), + 'maxRequests' =>$conf['maxRequests'], 'SHOW_THUMBNAIL_CAPTION' =>$conf['show_thumbnail_caption'], ) ); $tpl_thumbnails_var = trigger_event('loc_end_index_thumbnails', $tpl_thumbnails_var, $pictures); diff --git a/include/config_default.inc.php b/include/config_default.inc.php index 661af80fe..1478b12a5 100644 --- a/include/config_default.inc.php +++ b/include/config_default.inc.php @@ -769,4 +769,7 @@ $conf['chmod_value']= substr_compare(PHP_SAPI, 'apa', 0, 3)==0 ? 0777 : 0755; // 'small', 'medium' or 'large' $conf['derivative_default_size'] = 'medium'; + +//Maximum Ajax requests at once, for thumbnails on-the-fly generation +$conf['maxRequests']=3; ?>
\ No newline at end of file diff --git a/themes/default/icon/errors_small.png b/themes/default/icon/errors_small.png Binary files differnew file mode 100644 index 000000000..724cc659c --- /dev/null +++ b/themes/default/icon/errors_small.png diff --git a/themes/default/icon/img_small.png b/themes/default/icon/img_small.png Binary files differnew file mode 100644 index 000000000..dbfcc9a00 --- /dev/null +++ b/themes/default/icon/img_small.png diff --git a/themes/default/images/ajax_loader.gif b/themes/default/images/ajax_loader.gif Binary files differnew file mode 100644 index 000000000..d84f65378 --- /dev/null +++ b/themes/default/images/ajax_loader.gif diff --git a/themes/default/template/index.tpl b/themes/default/template/index.tpl index aa92a215f..e6874567e 100644 --- a/themes/default/template/index.tpl +++ b/themes/default/template/index.tpl @@ -171,8 +171,9 @@ jQuery("#derivativeSwitchBox").on("mouseleave", function() { {/if} {if !empty($THUMBNAILS)} +<div class="loader" style="display: none; position: fixed; right: 0;bottom: 0;"><img src="{$ROOT_URL}{$themeconf.img_dir}/ajax_loader.gif"></div> <ul class="thumbnails" id="thumbnails"> -{$THUMBNAILS} + {$THUMBNAILS} </ul> {/if} {if !empty($thumb_navbar)} diff --git a/themes/default/template/mainpage_categories.tpl b/themes/default/template/mainpage_categories.tpl index 81bb82d75..8657b921b 100644 --- a/themes/default/template/mainpage_categories.tpl +++ b/themes/default/template/mainpage_categories.tpl @@ -7,18 +7,55 @@ height: {$derivative_params->max_height()+5}px; } {/html_style}{/strip} +<div class="loader" style="display: none; position: fixed; right: 0;bottom: 0;"><img src="{$ROOT_URL}{$themeconf.img_dir}/ajax_loader.gif"></div> <ul class="thumbnailCategories"> {foreach from=$category_thumbnails item=cat name=cat_loop} {assign var=derivative value=$pwg->derivative($derivative_params, $cat.representative.src_image)} -{if !$derivative->is_cached()} +{if !$derivative->is_cached() and !$js_loaded} {combine_script id='jquery.ajaxmanager' path='themes/default/js/plugins/jquery.ajaxmanager.js' load='footer'} -{combine_script id='thumbnails.loader' path='themes/default/js/thumbnails.loader.js' require='jquery.ajaxmanager' load='footer'} +{*combine_script id='thumbnails.loader' path='themes/default/js/thumbnails.loader.js' require='jquery.ajaxmanager' load='footer'*} +{footer_script}{literal} +var thumbnails_queue = jQuery.manageAjax.create('queued', { + queue: true, + cacheResponse: false, + maxRequests: {/literal}{$maxRequests}{literal}, + preventDoubleRequests: false +}); + +function add_thumbnail_to_queue(img, loop) { + thumbnails_queue.add({ + type: 'GET', + url: img.data('src'), + data: { ajaxload: 'true' }, + dataType: 'json', + beforeSend: function(){jQuery('.loader').show()}, + success: function(result) { + img.attr('src', result.url); + jQuery('.loader').hide(); + }, + error: function() { + if (loop < 3) + add_thumbnail_to_queue(img, ++loop); // Retry 3 times + img.attr('src', {/literal}"{$ROOT_URL}{$themeconf.icon_dir}/errors_small.png"{literal}); + jQuery('.loader').hide(); + } + }); +} + +function pwg_ajax_thumbnails_loader() { + jQuery('img[data-src]').each(function() { + add_thumbnail_to_queue(jQuery(this), 0); + }); +} +jQuery(document).ready(pwg_ajax_thumbnails_loader); +{/literal}{/footer_script} +{assign var=js_loaded value=true} {/if} - <li class="{if $smarty.foreach.cat_loop.index is odd}odd{else}even{/if}"> + <li class="{if $smarty.foreach.cat_loop.index is odd}odd{else}even{/if}"> <div class="thumbnailCategory"> <div class="illustration"> <a href="{$cat.URL}"> - <img {if $derivative->is_cached()}src="{$derivative->get_url()}"{else}src="{$ROOT_URL}{$themeconf.img_dir}/ajax-loader-small.gif" data-src="{$derivative->get_url()}"{/if} alt="{$cat.TN_ALT}" title="{$cat.NAME|@replace:'"':' '|@strip_tags:false} - {'display this album'|@translate}"> + <img {if $derivative->is_cached()}src="{$derivative->get_url()}"{else}src="{$ROOT_URL}{$themeconf.icon_dir}/img_small.png" data-src="{$derivative->get_url()}"{/if} alt="{$cat.TN_ALT}" title="{$cat.NAME|@replace:'"':' '|@strip_tags:false} - {'display this album'|@translate}"> </a> </div> <div class="description"> diff --git a/themes/default/template/thumbnails.tpl b/themes/default/template/thumbnails.tpl index 9121aed60..efb9fba65 100644 --- a/themes/default/template/thumbnails.tpl +++ b/themes/default/template/thumbnails.tpl @@ -23,15 +23,51 @@ {/html_style} {foreach from=$thumbnails item=thumbnail} {assign var=derivative value=$pwg->derivative($derivative_params, $thumbnail.src_image)} -{if !$derivative->is_cached()} +{if !$derivative->is_cached() and !$js_loaded} {combine_script id='jquery.ajaxmanager' path='themes/default/js/plugins/jquery.ajaxmanager.js' load='footer'} -{combine_script id='thumbnails.loader' path='themes/default/js/thumbnails.loader.js' require='jquery.ajaxmanager' load='footer'} +{*combine_script id='thumbnails.loader' path='themes/default/js/thumbnails.loader.js' require='jquery.ajaxmanager' load='footer'*} +{footer_script}{literal} +var thumbnails_queue = jQuery.manageAjax.create('queued', { + queue: true, + cacheResponse: false, + maxRequests: {/literal}{$maxRequests}{literal}, + preventDoubleRequests: false +}); + +function add_thumbnail_to_queue(img, loop) { + thumbnails_queue.add({ + type: 'GET', + url: img.data('src'), + data: { ajaxload: 'true' }, + dataType: 'json', + beforeSend: function(){jQuery('.loader').show()}, + success: function(result) { + img.attr('src', result.url); + jQuery('.loader').hide(); + }, + error: function() { + if (loop < 3) + add_thumbnail_to_queue(img, ++loop); // Retry 3 times + img.attr('src', {/literal}"{$ROOT_URL}{$themeconf.icon_dir}/errors_small.png"{literal}); + jQuery('.loader').hide(); + } + }); +} + +function pwg_ajax_thumbnails_loader() { + jQuery('img[data-src]').each(function() { + add_thumbnail_to_queue(jQuery(this), 0); + }); +} +jQuery(document).ready(pwg_ajax_thumbnails_loader); +{/literal}{/footer_script} +{assign var=js_loaded value=true} {/if} <li> <span class="wrap1"> <span class="wrap2"> <a href="{$thumbnail.URL}"> - <img class="thumbnail" {if $derivative->is_cached()}src="{$derivative->get_url()}"{else}src="{$ROOT_URL}{$themeconf.img_dir}/ajax-loader-small.gif" data-src="{$derivative->get_url()}"{/if} alt="{$thumbnail.TN_ALT}" title="{$thumbnail.TN_TITLE}"> + <img class="thumbnail" {if $derivative->is_cached()}src="{$derivative->get_url()}"{else}src="{$ROOT_URL}{$themeconf.icon_dir}/img_small.png" data-src="{$derivative->get_url()}"{/if} alt="{$thumbnail.TN_ALT}" title="{$thumbnail.TN_TITLE}"> </a> </span> {if $SHOW_THUMBNAIL_CAPTION } diff --git a/themes/default/themeconf.inc.php b/themes/default/themeconf.inc.php index 3bd69eddd..7d759f14e 100644 --- a/themes/default/themeconf.inc.php +++ b/themes/default/themeconf.inc.php @@ -3,6 +3,7 @@ $themeconf = array( 'name' => 'default', 'icon_dir' => 'themes/default/icon', 'img_dir' => 'themes/default/images', + 'loading_img' => 'themes/default/images/359_s.png', 'mime_icon_dir' => 'themes/default/icon/mimetypes/', 'local_head' => 'local_head.tpl', ); |