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
+
@@ -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