from __future__ import absolute_import from django import forms from django.conf import settings from django.core.urlresolvers import reverse from django.utils.html import strip_tags from django.utils.http import urlencode from django.utils.safestring import mark_safe from django.utils.translation import ugettext from django.utils.translation import ugettext_lazy as _ from converter.literals import (DEFAULT_PAGE_NUMBER, DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL) from .settings import DISPLAY_SIZE, THUMBNAIL_SIZE class DocumentPageImageWidget(forms.widgets.Widget): def render(self, name, value, attrs=None): final_attrs = self.build_attrs(attrs) zoom = final_attrs.get('zoom', 100) rotation = final_attrs.get('rotation', 0) if value: output = [] output.append('
') output.append(document_html_widget(value.document, page=value.page_number, zoom=zoom, rotation=rotation, image_class='lazy-load-interactive', nolazyload=False, size=DISPLAY_SIZE)) output.append('
') return mark_safe(u''.join(output)) else: return u'' class DocumentPagesCarouselWidget(forms.widgets.Widget): """ Display many small representations of a document pages """ def render(self, name, value, attrs=None): output = [] output.append(u'') return mark_safe(u''.join(output)) def document_thumbnail(document, **kwargs): return document_html_widget(document, click_view='documents:document_display', **kwargs) def document_link(document): return mark_safe(u'%s' % (document.get_absolute_url(), document)) def document_html_widget(document, click_view=None, click_view_arguments=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', version=None, image_class='lazy-load', title=None, size=THUMBNAIL_SIZE, nolazyload=False, post_load_class=None): result = [] alt_text = _(u'Document page image') if not version: try: version = document.latest_version.pk except AttributeError: version = None query_dict = { 'page': page, 'zoom': zoom, 'rotation': rotation, 'version': version, 'size': size, } if gallery_name: gallery_template = u'rel="%s"' % gallery_name else: gallery_template = u'' query_string = urlencode(query_dict) preview_view = u'%s?%s' % (reverse('document-image', args=[document.pk]), query_string) result.append(u'
' % (document.pk, page if page else 1)) if title: title_template = u'title="%s"' % strip_tags(title) else: title_template = u'' if click_view: result.append(u'' % (gallery_template, fancybox_class, u'%s?%s' % (reverse(click_view, args=click_view_arguments or [document.pk]), query_string), title_template)) if nolazyload: result.append(u'%s' % (preview_view, alt_text)) else: result.append(u'%s' % (image_class, preview_view, post_load_class, settings.STATIC_URL, alt_text)) if click_view: result.append(u'') result.append(u'
') return mark_safe(u''.join(result))