diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 73126ba2ec..52eefbd701 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -1,5 +1,6 @@ from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse +from django.conf import settings from navigation.api import register_links, register_menu, \ register_model_list_columns, register_multi_item_links @@ -124,11 +125,13 @@ def document_exists(document): except Exception, exc: return exc - register_model_list_columns(Document, [ {'name':_(u'thumbnail'), 'attribute': - lambda x: '' % (reverse('document_preview', args=[x.id]), - reverse('document_thumbnail', args=[x.id])) + lambda x: '' % { + 'url': reverse('document_preview', args=[x.pk]), + 'thumbnail': reverse('document_thumbnail', args=[x.pk]), + 'media_url': settings.MEDIA_URL + } }, {'name':_(u'metadata'), 'attribute': lambda x: x.get_metadata_string() diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 4f52de5fcc..60092b633a 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -7,6 +7,7 @@ from django.core.urlresolvers import reverse from django.utils.safestring import mark_safe from django.forms.formsets import formset_factory from django.template.defaultfilters import capfirst +from django.conf import settings from documents.staging import StagingFile @@ -36,11 +37,20 @@ class DocumentPageImageWidget(forms.widgets.Widget): rotation = final_attrs.get('rotation', 0) if value: output = [] - output.append('
' % { + output.append(''' +
+
+ + +
+
''' % { 'img': reverse('document_display', args=[value.document.id]), 'page': value.page_number, 'zoom': zoom, 'rotation': rotation, + 'media_url': settings.MEDIA_URL }) return mark_safe(u''.join(output)) else: @@ -106,9 +116,14 @@ class ImageWidget(forms.widgets.Widget): output.append( u'''
%(page_string)s %(page)s
+
- + + +
%(details_string)s
@@ -119,6 +134,7 @@ class ImageWidget(forms.widgets.Widget): 'view_url': reverse('document_display', args=[page.document.pk]), 'page_string': ugettext(u'Page'), 'details_string': ugettext(u'Details'), + 'media_url': settings.MEDIA_URL, }) output.append(u'
') @@ -354,7 +370,10 @@ class MetaDataImageWidget(forms.widgets.Widget):
%(page_string)s: %(document_pages)d
- + +
@@ -369,7 +388,8 @@ class MetaDataImageWidget(forms.widgets.Widget): 'page_string': ugettext(u'Pages'), 'details_string': ugettext(u'Select'), 'group_id': value['group'].pk, - 'document_name': document + 'document_name': document, + 'media_url': settings.MEDIA_URL }) output.append(u'
') output.append( diff --git a/apps/main/templates/base.html b/apps/main/templates/base.html index 3ea5025add..3491c2cda7 100644 --- a/apps/main/templates/base.html +++ b/apps/main/templates/base.html @@ -31,6 +31,7 @@ {% endblock %} {% block web_theme_javascript %} + @@ -85,6 +86,11 @@ location.replace(this.href); return false; }); + $('img.lazy-load').jail({ + event: 'load', + placeholder : '{{ MEDIA_URL }}/images/ajax-loader.gif' + //effect: 'fadeIn' + }); }); {% block javascript %}{% endblock %} diff --git a/site_media/images/ajax-loader.gif b/site_media/images/ajax-loader.gif new file mode 100644 index 0000000000..3288d1035d Binary files /dev/null and b/site_media/images/ajax-loader.gif differ diff --git a/site_media/images/blank.gif b/site_media/images/blank.gif new file mode 100644 index 0000000000..42927c19f3 Binary files /dev/null and b/site_media/images/blank.gif differ diff --git a/site_media/packages/JqueryAsynchImageLoader-0.8.min.js b/site_media/packages/JqueryAsynchImageLoader-0.8.min.js new file mode 100644 index 0000000000..b08943a785 --- /dev/null +++ b/site_media/packages/JqueryAsynchImageLoader-0.8.min.js @@ -0,0 +1,9 @@ +/* +* JqueryAsynchImageLoader (JAIL) : plugin for jQuery +* +* Developed by +* Sebastiano Armeli-Battana (@sebarmeli) - http://www.sebastianoarmelibattana.com +* Dual licensed under the MIT or GPL Version 3 licenses. +* @version 0.8.1 +*/ +(function(a){var b=a(window);a.fn.asynchImageLoader=a.fn.jail=function(d){d=a.extend({timeout:10,effect:false,speed:400,selector:null,offset:0,event:"load+scroll",callback:jQuery.noop,placeholder:false},d);var c=this;this.data("triggerEl",(d.selector)?a(d.selector):b);if(d.placeholder!==false){c.each(function(){a(this).attr("src",d.placeholder);});}if(/^load/.test(d.event)){a.asynchImageLoader.later.call(this,d);}else{a.asynchImageLoader.onEvent.call(this,d,c);}return this;};a.asynchImageLoader={_purgeStack:function(c){var d=0;while(true){if(d===c.length){break;}else{if(c[d].getAttribute("data-href")){d++;}else{c.splice(d,1);}}}},_loadOnEvent:function(g){var f=a(this),d=g.data.options,c=g.data.images;a.asynchImageLoader._loadImage(d,f);f.unbind(d.event,a.asynchImageLoader._loadOnEvent);d.callback.call(this,d);a.asynchImageLoader._purgeStack(c);},_bufferedEventListener:function(g){var c=g.data.images,d=g.data.options,f=c.data("triggerEl");clearTimeout(c.data("poller"));c.data("poller",setTimeout(function(){c.each(function e(){a.asynchImageLoader._loadImageIfVisible(d,this,f);});a.asynchImageLoader._purgeStack(c);d.callback.call(this,d,c);},d.timeout));return false;},onEvent:function(d,c){c=c||this;if(d.event==="scroll"||d.selector){var e=c.data("triggerEl");if(c.length>0){e.bind(d.event,{images:c,options:d},a.asynchImageLoader._bufferedEventListener);if(d.event==="scroll"||!d.selector){b.resize({images:c,options:d},a.asynchImageLoader._bufferedEventListener);}}else{var f=(d.selector)?a(d.selector):b;f.unbind(d.event,a.asynchImageLoader._bufferedEventListener);}}else{c.bind(d.event,{options:d,images:c},a.asynchImageLoader._loadOnEvent);}},later:function(d){var c=this;if(d.event==="load"){c.each(function(){a.asynchImageLoader._loadImageIfVisible(d,this,c.data("triggerEl"));});}a.asynchImageLoader._purgeStack(c);setTimeout(function(){if(d.event==="load"){c.each(function(){a.asynchImageLoader._loadImage(d,a(this));});}else{c.each(function(){a.asynchImageLoader._loadImageIfVisible(d,this,c.data("triggerEl"));});}a.asynchImageLoader._purgeStack(c);if(d.event==="load+scroll"){d.event="scroll";a.asynchImageLoader.onEvent(d,c);}},d.timeout);},_loadImageIfVisible:function(d,g,f){var e=a(g),c=(d.event==="scroll"?f:b);if(a.asynchImageLoader._isInTheScreen(c,e,d.offset)){a.asynchImageLoader._loadImage(d,e);}},_isInTheScreen:function(j,c,h){var f=j[0]===window,n=j.offset()||{top:0,left:0},g=n.top+(f?j.scrollTop():0),i=n.left+(f?j.scrollLeft():0),e=i+j.width(),k=g+j.height(),m=c.offset(),l=c.width(),d=c.height();return(g-h)<=(m.top+d)&&(k+h)>=m.top&&(i-h)<=(m.left+l)&&(e+h)>=m.left;},_loadImage:function(c,d){d.hide();d.attr("src",d.attr("data-href"));d.removeAttr("data-href");if(c.effect){if(c.speed){d[c.effect](c.speed);}else{d[c.effect]();}}else{d.show();}}};}(jQuery)); \ No newline at end of file