from __future__ import unicode_literals from django import forms from django.contrib.staticfiles.templatetags.staticfiles import static 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(''.join(output)) else: return '' class DocumentPagesCarouselWidget(forms.widgets.Widget): """ Display many small representations of a document pages """ def render(self, name, value, attrs=None): output = [] output.append('') return mark_safe(''.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('%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 = _('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 = 'rel="%s"' % gallery_name else: gallery_template = '' query_string = urlencode(query_dict) preview_view = '%s?%s' % (reverse('document-image', args=[document.pk]), query_string) result.append('
' % (document.pk, page if page else 1)) if title: title_template = 'title="%s"' % strip_tags(title) else: title_template = '' if click_view: result.append('' % (gallery_template, fancybox_class, '%s?%s' % (reverse(click_view, args=click_view_arguments or [document.pk]), query_string), title_template)) if nolazyload: result.append('%s' % (preview_view, alt_text)) else: result.append('%s' % (image_class, preview_view, post_load_class, static('appearance/images/loading.png'), alt_text)) if click_view: result.append('') result.append('
') return mark_safe(''.join(result))