new "preview doc" field

This commit is contained in:
Frédéric Péters 2011-09-28 09:41:52 +02:00
parent e6d621cbf2
commit b29d06061b
9 changed files with 87 additions and 0 deletions

View File

@ -29,6 +29,7 @@ from themis.fields.interfaces import IRelatedDoc
from themis.fields.interfaces import IRelatedDocs
from themis.fields.interfaces import IMailId
from themis.fields.interfaces import IMailRefId
from themis.fields.interfaces import IPreviewDoc
from themis.fields.interfaces import IDocHistoLine, IDocHistoLines
@ -395,3 +396,5 @@ class DocHistoLines(Field):
if attr in kw: del kw[attr]
super(DocHistoLines, self).__init__(**kw)
class PreviewDoc(Field):
implements(IPreviewDoc, IFromUnicode)

View File

@ -17,6 +17,7 @@ from themis.fields import RelatedDocs
from themis.fields import MailId
from themis.fields import MailRefId
from themis.fields import DocHistoLines
from themis.fields import PreviewDoc
from plone.schemaeditor.fields import FieldFactory
@interface.implementer(editor_ifaces.IFieldEditFormSchema)
@ -56,3 +57,6 @@ MailRefIdFactory = FieldFactory(MailRefId, u'Mail Reference')
MailIdFactory = FieldFactory(MailId, u'Mail Number')
DocHistoLinesFactory = FieldFactory(DocHistoLines, u'Historic Lines')
PreviewDocFactory = FieldFactory(PreviewDoc, u'Preview Doc')

View File

@ -97,4 +97,9 @@
component=".editors.DocHistoLinesFactory"
/>
<utility
name="themis.fields.PreviewDoc"
component=".editors.PreviewDocFactory"
/>
</configure>

View File

@ -26,6 +26,7 @@ if HAVE_SUPERMODEL:
from themis.fields import MailId
from themis.fields import MailRefId
from themis.fields import DocHistoLines
from themis.fields import PreviewDoc
class CommissionHandler_(BaseHandler):
pass
@ -122,3 +123,7 @@ if HAVE_SUPERMODEL:
DocHistoLinesHandler = DocHistoLinesHandler_(DocHistoLines)
class PreviewDocHandler_(BaseHandler):
pass
PreviewDocHandler = PreviewDocHandler_(PreviewDoc)

View File

@ -99,4 +99,9 @@
name="themis.fields.DocHistoLines"
/>
<utility
component=".handlers.PreviewDocHandler"
name="themis.fields.PreviewDoc"
/>
</configure>

View File

@ -152,3 +152,16 @@ class IDocHistoLines(IList):
class IDocHistoLineWidget(IWidget):
pass
class IPreviewDoc(IField):
default = schema.Text(
description=IField['default'].description,
required=False)
missing_value = schema.Text(
title=IField['missing_value'].title,
description=IField['missing_value'].description,
required=False)
class IPreviewDocWidget(IWidget):
pass

View File

@ -0,0 +1,11 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
tal:omit-tag="">
<object tal:condition="view/href"
tal:attributes="href view/href"
type="application/pdf" width="200px" height="100px">
<p>Pas de lecteur PDF intégré, vous pouvez ouvrir le fichier
en suivant ce lien : <a tal:attributes="href view/href"
tal:content="view/filename">plop.pdf</a>.</p>
</object>
</html>

View File

@ -28,6 +28,7 @@ from themis.fields.interfaces import IRelatedDoc
from themis.fields.interfaces import IRelatedDocs
from themis.fields.interfaces import IMailId, IMailIdWidget
from themis.fields.interfaces import IMailRefId, IMailRefIdWidget
from themis.fields.interfaces import IPreviewDoc, IPreviewDocWidget
from themis.fields.interfaces import IRelatedDocWidget, IRelatedDocsWidget
from themis.fields.interfaces import IDocHistoLineWidget, IDocHistoLine
@ -339,3 +340,29 @@ class DocHistoLineConverter(BaseDataConverter):
print 'XXX, to field value'
return value
@adapter(IPreviewDoc, IFormLayer)
@implementer(IFieldWidget)
def PreviewDocFieldWidget(field, request):
"""IFieldWidget factory for PreviewDoc"""
return FieldWidget(field, PreviewDocWidget(request))
class PreviewDocWidget(Widget):
implements(IPreviewDocWidget)
def href(self):
if not hasattr(self.context, 'fichier'):
return None
if self.context.fichier:
return self.form.widgets['fichier'].download_url
return None
def filename(self):
if not hasattr(self.context, 'fichier'):
return ''
if self.context.fichier:
if self.form.widgets['fichier'].filename_encoded:
return self.form.widgets['fichier'].filename_encoded
return 'unknown.pdf'
return ''

View File

@ -91,4 +91,18 @@
layer="z3c.form.interfaces.IFormLayer"
template="dochistoline_input.pt"/>
<adapter factory=".widgets.PreviewDocFieldWidget"/>
<z3c:widgetTemplate
mode="display"
widget=".widgets.IPreviewDocWidget"
layer="z3c.form.interfaces.IFormLayer"
template="previewdoc_display.pt"/>
<z3c:widgetTemplate
mode="input"
widget=".widgets.IPreviewDocWidget"
layer="z3c.form.interfaces.IFormLayer"
template="previewdoc_display.pt"/>
</configure>