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('
' % (preview_view, alt_text))
else:
result.append('
' % (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))