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:
parent
2d56418344
commit
a4dfb9b209
3 changed files with 136 additions and 1 deletions
|
@ -23,6 +23,7 @@ $Id$
|
|||
"""
|
||||
|
||||
from zope import component
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
from zope.app.session.interfaces import ISession
|
||||
from zope.cachedescriptors.property import Lazy
|
||||
|
||||
|
@ -30,10 +31,18 @@ from cybertools.composer.interfaces import IInstance
|
|||
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'
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
|
123
composer/schema/browser/schema_macros.pt
Executable file
123
composer/schema/browser/schema_macros.pt
Executable 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%"> </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>
|
|
@ -40,6 +40,7 @@ class Field(Component):
|
|||
required = False
|
||||
standardFieldName = None
|
||||
vocabulary = None
|
||||
defaultValue = None
|
||||
renderFactory = None
|
||||
|
||||
def __init__(self, name, title=None, fieldType='textline', **kw):
|
||||
|
@ -63,7 +64,9 @@ class Field(Component):
|
|||
voc = (self.vocabulary or '')
|
||||
if isinstance(voc, basestring):
|
||||
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):
|
||||
return fieldTypes.getTerm(self.fieldType)
|
||||
|
|
Loading…
Add table
Reference in a new issue