unfinished historic lines field

This commit is contained in:
Frédéric Péters 2011-09-28 08:27:23 +02:00
parent b2dd9d9cb4
commit e6d621cbf2
10 changed files with 155 additions and 3 deletions

View File

@ -30,6 +30,8 @@ from themis.fields.interfaces import IRelatedDocs
from themis.fields.interfaces import IMailId
from themis.fields.interfaces import IMailRefId
from themis.fields.interfaces import IDocHistoLine, IDocHistoLines
from themis.fields.vocabs import SubjectsSource
from themis.fields.vocabs import LegislativeSessionsSource
@ -372,3 +374,24 @@ class MailId(TextLine):
class MailRefId(TextLine):
implements(IMailRefId, IFromUnicode)
class DocHistoLine(Field):
implements(IDocHistoLine, IFromUnicode)
date = None
comment = None
class DocHistoLines(Field):
implements(IDocHistoLines, IList)
_type = list
def __init__(self, **kw):
self.required = False
self.value_type = DocHistoLine()
self.unique = True
self.min_length = None
self.max_length = None
for attr in ('min_length', 'max_length', 'unique', 'value_type'):
if attr in kw: del kw[attr]
super(DocHistoLines, self).__init__(**kw)

View File

@ -0,0 +1,13 @@
<div lang="en"
xml:lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone.app.textfield"
tal:attributes="id view/id">
<tal:define define="fieldName view/name">
TODO
</tal:define>
</div>

View File

@ -0,0 +1,34 @@
<div lang="en"
xml:lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="plone.app.textfield"
tal:attributes="id view/id">
<tal:define define="fieldName view/name">
<div class="histoline">
<div class="fieldDate">
<label>Date</label>
<input type="text" tal:condition="view/value"
tal:attributes="id string:${fieldName}_date;
name string:${fieldName}.date;
value view/value/date"/>
<input type="text" tal:condition="not:view/value"
tal:attributes="id string:${fieldName}_date;
name string:${fieldName}.date;"/>
</div>
<div class="fieldComment">
<label>Comment</label>
<input type="text" tal:condition="view/value"
tal:attributes="id string:${fieldName}_comment;
name string:${fieldName}.comment;
value view/value/comment"/>
<input type="text" tal:condition="not:view/value"
tal:attributes="id string:${fieldName}_comment;
name string:${fieldName}.comment;"/>
</div>
</div>
</tal:define>
</div>

View File

@ -16,6 +16,7 @@ from themis.fields import RelatedDoc
from themis.fields import RelatedDocs
from themis.fields import MailId
from themis.fields import MailRefId
from themis.fields import DocHistoLines
from plone.schemaeditor.fields import FieldFactory
@interface.implementer(editor_ifaces.IFieldEditFormSchema)
@ -53,3 +54,5 @@ RelatedDocsFactory = FieldFactory(RelatedDocs, u'Related Documents')
MailRefIdFactory = FieldFactory(MailRefId, u'Mail Reference')
MailIdFactory = FieldFactory(MailId, u'Mail Number')
DocHistoLinesFactory = FieldFactory(DocHistoLines, u'Historic Lines')

View File

@ -92,4 +92,9 @@
component=".editors.MailRefIdFactory"
/>
<utility
name="themis.fields.DocHistoLines"
component=".editors.DocHistoLinesFactory"
/>
</configure>

View File

@ -25,6 +25,7 @@ if HAVE_SUPERMODEL:
from themis.fields import RelatedDocs
from themis.fields import MailId
from themis.fields import MailRefId
from themis.fields import DocHistoLines
class CommissionHandler_(BaseHandler):
pass
@ -116,3 +117,8 @@ if HAVE_SUPERMODEL:
MailRefIdHandler = MailRefIdHandler_(MailRefId)
class DocHistoLinesHandler_(BaseHandler):
pass
DocHistoLinesHandler = DocHistoLinesHandler_(DocHistoLines)

View File

@ -94,4 +94,9 @@
name="themis.fields.MailRefId"
/>
<utility
component=".handlers.DocHistoLinesHandler"
name="themis.fields.DocHistoLines"
/>
</configure>

View File

@ -2,7 +2,7 @@ from zope.interface import Interface
from zope.schema.interfaces import IChoice, IField, IList, IDate
from zope import schema
from z3c.form.interfaces import IOrderedSelectWidget, ITextWidget
from z3c.form.interfaces import IWidget, IOrderedSelectWidget, ITextWidget
from z3c.relationfield.interfaces import IRelation, IRelationList
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
@ -142,3 +142,13 @@ class IRelatedDocWidget(IAutocompleteWidget):
class IRelatedDocsWidget(IAutocompleteWidget):
pass
class IDocHistoLine(IField):
date = schema.Date(title=u'Date', required=True)
comment = schema.TextLine(title=u'Commentaire', required=True)
class IDocHistoLines(IList):
pass
class IDocHistoLineWidget(IWidget):
pass

View File

@ -5,12 +5,13 @@ from zope.component import adapts, adapter
from Products.CMFCore.utils import getToolByName
from z3c.form.interfaces import IFormLayer, IFieldWidget
from z3c.form.widget import FieldWidget
from z3c.form.interfaces import IFormLayer, IFieldWidget, NOVALUE
from z3c.form.widget import Widget, FieldWidget
from collective.z3cform.datetimewidget import DateWidget
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from z3c.form.converter import BaseDataConverter
from themis.fields.interfaces import ICommission, ICommissions
from zope.schema.interfaces import IDate, IContextSourceBinder, ISource
@ -28,6 +29,7 @@ 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 IRelatedDocWidget, IRelatedDocsWidget
from themis.fields.interfaces import IDocHistoLineWidget, IDocHistoLine
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget, AutocompleteMultiSelectionWidget
@ -301,3 +303,39 @@ def MailRefIdFieldWidget(field, request):
return FieldWidget(field, MailRefIdWidget(request))
class DocHistoLineWidget(Widget):
implements(IDocHistoLineWidget)
def extract(self, default=NOVALUE):
from themis.fields import DocHistoLine
if not (self.name + '.comment') in self.request.form:
return NOVALUE
dochistoline = DocHistoLine()
has_value = None
for attr in ('comment', ):
setattr(dochistoline, attr, self.request.get(self.name + '.' + attr))
has_value = has_value or getattr(dochistoline, attr)
if not has_value:
return NOVALUE
return dochistoline
@adapter(IDocHistoLine, IFormLayer)
@implementer(IFieldWidget)
def DocHistoLineFieldWidget(field, request):
return FieldWidget(field, DocHistoLineWidget(request))
class DocHistoLineConverter(BaseDataConverter):
adapts(IDocHistoLine, IDocHistoLineWidget)
def toWidgetValue(self, value):
print 'XXX, histoline converter, to widget value!'
from themis.fields import DocHistoLine
if value is None:
return DocHistoLine()
return value
def toFieldValue(self, value):
print 'XXX, to field value'
return value

View File

@ -76,4 +76,19 @@
template="mail_ref_id_display.pt"
/>
<adapter factory=".widgets.DocHistoLineFieldWidget"/>
<adapter factory=".widgets.DocHistoLineConverter"/>
<z3c:widgetTemplate
mode="display"
widget=".widgets.IDocHistoLineWidget"
layer="z3c.form.interfaces.IFormLayer"
template="dochistoline_display.pt"/>
<z3c:widgetTemplate
mode="input"
widget=".widgets.IDocHistoLineWidget"
layer="z3c.form.interfaces.IFormLayer"
template="dochistoline_input.pt"/>
</configure>