unfinished historic lines field
This commit is contained in:
parent
b2dd9d9cb4
commit
e6d621cbf2
|
@ -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)
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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')
|
||||
|
|
|
@ -92,4 +92,9 @@
|
|||
component=".editors.MailRefIdFactory"
|
||||
/>
|
||||
|
||||
<utility
|
||||
name="themis.fields.DocHistoLines"
|
||||
component=".editors.DocHistoLinesFactory"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -94,4 +94,9 @@
|
|||
name="themis.fields.MailRefId"
|
||||
/>
|
||||
|
||||
<utility
|
||||
component=".handlers.DocHistoLinesHandler"
|
||||
name="themis.fields.DocHistoLines"
|
||||
/>
|
||||
|
||||
</configure>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
Reference in New Issue