extend composer.schema for usage for standard form rendering

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2060 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-09-19 15:46:03 +00:00
parent 2d56418344
commit a4dfb9b209
3 changed files with 136 additions and 1 deletions

View file

@ -23,6 +23,7 @@ $Id$
""" """
from zope import component from zope import component
from zope.app.pagetemplate import ViewPageTemplateFile
from zope.app.session.interfaces import ISession from zope.app.session.interfaces import ISession
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
@ -30,10 +31,18 @@ from cybertools.composer.interfaces import IInstance
from cybertools.composer.schema.interfaces import IClientFactory from cybertools.composer.schema.interfaces import IClientFactory
schema_macros = ViewPageTemplateFile('schema_macros.pt')
schema_edit_macros = schema_macros # default: no editing
packageId = 'cybertools.composer.schema' packageId = 'cybertools.composer.schema'
class BaseView(object): class BaseView(object):
""" Base class for views that have schema objects as their context.
Do not use this base class for views on typical content objects
that are not schemas!
"""
clientName = None clientName = None

View file

@ -0,0 +1,123 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"
i18n:domain="loops">
<body>
<metal:fields define-macro="fields">
<tal:define define="manageMode manageMode|view/manageMode|nothing;
fields view/fields;
data view/data">
<table class="listing" style="width: auto">
<tal:fields repeat="field fields">
<tal:field define="name field/name;
typeInfo field/getFieldTypeInfo;
errors state/fieldInstances/?name/errors|python: [];">
<metal:field use-macro="python: view.schemaMacros[typeInfo.fieldMacro]" />
</tal:field>
</tal:fields>
</table>
<tal:add condition="manageMode">
<metal:add use-macro="view/schemaEditMacros/add_buttons" />
</tal:add>
</tal:define>
</metal:fields>
<metal:field define-macro="field">
<tbody tal:omit-tag="not:errors"
class="error"
style="padding: 4px; margin-bottom: 4px;">
<tal:errors repeat="error errors">
<tr>
<td colspan="2" style="padding: 4px"
i18n:translate=""
tal:content="error/description">???</td>
</tr>
</tal:errors>
<tr>
<tal:field>
<td style="padding: 4px; border-top: none"
tal:attributes="title field/description">
<b tal:content="field/title">...</b>
<span tal:condition="field/required">*</span>
</td>
<td class="field" style="border-top: none">
<metal:input use-macro="python:
view.schemaMacros[typeInfo.inputMacro]" />
</td>
</tal:field>
</tr>
<tr style="border-bottom: 1px solid #dddddd"
tal:condition="manageMode">
<td style="border-top: none">
<metal:move use-macro="view/editMacros/move_icons" />
</td>
<td style="border-top: none">
<metal:edit use-macro="view/schemaEditMacros/edit_buttons" />
</td>
</tr>
</tbody>
</metal:field>
<metal:textline define-macro="input_textline">
<input type="text" name="field" style="width: 300px"
tal:define="width field/width|python:300"
tal:attributes="name name;
style python: 'width: %ipx' % (width or 300);
value data/?name|field/defaultValue|string:" />
</metal:textline>
<metal:textarea define-macro="input_textarea">
<textarea name="field" rows="3" style="width: 300px"
tal:define="width field/width|python:300;
height field/height|python:3"
tal:attributes="name name;
rows python: height or 3;
style python: 'width: %ipx' % (width or 300)"
tal:content="data/?name|field/defaultValue|string:">
</textarea>
</metal:textarea>
<metal:dropdown define-macro="input_dropdown">
<select name="field" style="width: 100px"
tal:define="width field/width|python:100"
tal:attributes="name name;
style python: 'width: %ipx' % (width or 100);">
<option tal:repeat="item field/getVocabularyItems"
tal:content="item/title"
tal:attributes="value item/token;
selected python:
item['token'] == data.get(name, field.defaultValue)">Mrs</option>
</select>
</metal:dropdown>
<metal:spacer define-macro="field_spacer">
<tr>
<td colspan="2" style="border-top:none; font-size: 50%">&nbsp;</td>
</tr>
<tr>
<td colspan="2"
style="border-top: 1px solid #bbbbbb; padding: 8px 4px;
margin-top: 10px;">
<div><b tal:content="field/title"></b></div>
<div tal:content="structure field/description"></div>
</td>
</tr>
<tr style="border-bottom: 1px solid #dddddd"
tal:condition="manageMode">
<td style="border-top: none">
<metal:move use-macro="view/schemaEditMacros/move_icons" />
</td>
<td style="border-top: none">
<metal:edit use-macro="view/schemaEditMacros/edit_buttons" />
</td>
</tr>
</metal:spacer>
</body>
</html>

View file

@ -40,6 +40,7 @@ class Field(Component):
required = False required = False
standardFieldName = None standardFieldName = None
vocabulary = None vocabulary = None
defaultValue = None
renderFactory = None renderFactory = None
def __init__(self, name, title=None, fieldType='textline', **kw): def __init__(self, name, title=None, fieldType='textline', **kw):
@ -63,7 +64,9 @@ class Field(Component):
voc = (self.vocabulary or '') voc = (self.vocabulary or '')
if isinstance(voc, basestring): if isinstance(voc, basestring):
voc = voc.splitlines() voc = voc.splitlines()
return [dict(token=v, title=v) for v in voc if v.strip()] return [dict(token=t, title=t) for t in voc if t.strip()]
else:
return [dict(token=t.token, title=t.title) for t in voc]
def getFieldTypeInfo(self): def getFieldTypeInfo(self):
return fieldTypes.getTerm(self.fieldType) return fieldTypes.getTerm(self.fieldType)