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, 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')
rotation = final_attrs.get('rotation')
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_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, preview_click_view=None, click_view_querydict=None, click_view_arguments_lazy=None):
result = []
alt_text = _('Document page image')
if not document_page:
return mark_safe(
''
)
document = document_page.document
query_dict = {
'zoom': zoom or DEFAULT_ZOOM_LEVEL,
'rotation': rotation or DEFAULT_ROTATION,
'size': size,
'page': document_page.page_number
}
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:
if not preview_click_view:
preview_click_link = document.get_absolute_url()
else:
preview_click_link = reverse(
preview_click_view, args=(document_page.pk,)
)
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:
if click_view_arguments_lazy:
click_view_arguments = click_view_arguments_lazy()
result.append(
'
'.format(
gallery_template=gallery_template,
fancybox_class=fancybox_class,
image_data='%s?%s' % (
reverse(
click_view, args=click_view_arguments
), urlencode(click_view_querydict or {})
),
title_template=title_template
)
)
if nolazyload:
result.append(
'
' % (
preview_view, alt_text
)
)
else:
result.append(
'
'.format(
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))