from django import forms from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from django.core.urlresolvers import reverse from django.utils.safestring import mark_safe from django.template.defaultfilters import capfirst from django.conf import settings from tags.widgets import get_tags_inline_widget from linking.models import SmartLink, SmartLinkCondition class SmartLinkForm(forms.ModelForm): class Meta: model = SmartLink class SmartLinkConditionForm(forms.ModelForm): class Meta: model = SmartLinkCondition exclude = ('smart_link',) class SmartLinkImageWidget(forms.widgets.Widget): def render(self, name, value, attrs=None): output = [] # TODO: convert to navigation app if value['links']: output.append(u'') output.append(u'
') for document in value['group_data']: tags_template = get_tags_inline_widget(document) try: document.get_valid_image() template = u'''
%(document_name)s
%(page_string)s: %(document_pages)d
%(tags_template)s
''' except: template = u'''
%(document_name)s
%(page_string)s: %(document_pages)d
%(tags_template)s
%(string)s
''' output.append(template % { 'url': reverse('document_view_simple', args=[document.pk]), 'img': reverse('document_preview_multipage', args=[document.pk]), 'current': u'border: 5px solid black; padding: 3px;' if value['current_document'] == document else u'', 'view_url': reverse('document_display', args=[document.pk]), 'document_pages': document.documentpage_set.count(), 'page_string': ugettext(u'Pages'), 'details_string': ugettext(u'Select'), 'group_id': value['group'].pk, 'document_name': document, 'static_url': settings.STATIC_URL, 'tags_template': tags_template if tags_template else u'', 'string': _(u'smart links'), }) output.append(u'
') output.append( u'
%s' % ugettext(u'Click on the image for full size view of the first page.')) return mark_safe(u''.join(output)) class SmartLinkInstanceForm(forms.Form): def __init__(self, *args, **kwargs): smart_link_instances = kwargs.pop('smart_link_instances', None) links = kwargs.pop('links', None) current_document = kwargs.pop('current_document', None) super(SmartLinkInstanceForm, self).__init__(*args, **kwargs) for smart_link_instance, data in smart_link_instances.items(): self.fields['preview-%s' % smart_link_instance] = forms.CharField( widget=SmartLinkImageWidget(), label=u'%s (%d)' % (unicode(data['title']), len(data['documents'])), required=False, initial={ 'group': smart_link_instance, 'group_data': data['documents'], 'current_document': current_document, 'links': links } )