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_ROTATION, DEFAULT_ZOOM_LEVEL from .settings import setting_display_size, setting_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, zoom=zoom, rotation=rotation, image_class='lazy-load', nolazyload=False, size=setting_display_size.value) ) 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.latest_version.pages.first(), click_view='documents:document_display', **kwargs ) def document_link(document): return mark_safe('%s' % ( document.get_absolute_url(), document) ) def document_html_widget(document_page, click_view=None, click_view_arguments=None, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', image_class='lazy-load', title=None, size=setting_thumbnail_size.value, nolazyload=False, post_load_class=None, disable_title_link=False): result = [] alt_text = _('Document page image') if not document_page: return mark_safe( '' ) document = document_page.document query_dict = { 'zoom': zoom, 'rotation': rotation, 'size': size, } if gallery_name: gallery_template = 'rel="%s"' % gallery_name else: gallery_template = '' query_string = urlencode(query_dict) preview_view = '%s?%s' % ( reverse('rest_api:documentpage-image', args=(document_page.pk,)), query_string ) result.append( '
' % ( document.pk, document_page.page_number if document_page.page_number else 1 ) ) if title: if not disable_title_link: preview_click_link = document.get_absolute_url() title_template = 'data-caption="{title}"'.format( title=strip_tags(title), url=preview_click_link or '#' ) else: title_template = 'data-caption="{title}"'.format( title=strip_tags(title), ) else: title_template = '' if click_view: result.append( ''.format( gallery_template=gallery_template, fancybox_class=fancybox_class, image_data='%s?%s' % ( reverse( click_view, args=click_view_arguments or [document.pk] ), query_string ), title_template=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))