clean-up of editing javascript calls, xedit links; starting to provide specialized add views for adding more than on object with one form
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1173 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
3a5281b047
commit
17a9a55b07
12 changed files with 224 additions and 48 deletions
12
README.txt
12
README.txt
|
@ -463,6 +463,18 @@ Node Views
|
||||||
... print item.url, view.selected(item)
|
... print item.url, view.selected(item)
|
||||||
http://127.0.0.1/loops/views/m1/m11 True
|
http://127.0.0.1/loops/views/m1/m11 True
|
||||||
|
|
||||||
|
There is an openEditWindow() method that returns a JavaScript call for
|
||||||
|
opening a new browser window for editing; but only if the view is
|
||||||
|
editable:
|
||||||
|
|
||||||
|
>>> page.openEditWindow()
|
||||||
|
''
|
||||||
|
>>> page.editable = True
|
||||||
|
>>> page.openEditWindow()
|
||||||
|
"openEditWindow('http://127.0.0.1/loops/views/m1/m11/@@edit.html')"
|
||||||
|
>>> page.openEditWindow('configure.html')
|
||||||
|
"openEditWindow('http://127.0.0.1/loops/views/m1/m11/@@configure.html')"
|
||||||
|
|
||||||
A Node and its Target
|
A Node and its Target
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
|
73
browser/add.pt
Normal file
73
browser/add.pt
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
<html metal:use-macro="context/@@standard_macros/page"
|
||||||
|
i18n:domain="zope">
|
||||||
|
<body>
|
||||||
|
<div metal:fill-slot="body">
|
||||||
|
|
||||||
|
<div metal:define-macro="addform">
|
||||||
|
|
||||||
|
<form action="." tal:attributes="action request/URL"
|
||||||
|
method="post" enctype="multipart/form-data">
|
||||||
|
|
||||||
|
<div metal:define-macro="formbody">
|
||||||
|
|
||||||
|
<h3 tal:condition="view/label"
|
||||||
|
tal:content="view/label"
|
||||||
|
metal:define-slot="heading"
|
||||||
|
i18n:translate=""
|
||||||
|
>Edit something</h3>
|
||||||
|
|
||||||
|
<p tal:define="status view/update"
|
||||||
|
tal:condition="status"
|
||||||
|
tal:content="status"
|
||||||
|
i18n:translate=""/>
|
||||||
|
|
||||||
|
<p tal:condition="view/errors" i18n:translate="">
|
||||||
|
There are <strong tal:content="python:len(view.errors)"
|
||||||
|
i18n:name="num_errors">6</strong> input errors.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div metal:define-slot="extra_info" tal:replace="nothing">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" metal:define-slot="extra_top" tal:replace="nothing">
|
||||||
|
<div class="label">Extra top</div>
|
||||||
|
<div class="label"><input type="text" style="width:100%" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div metal:use-macro="context/@@form_macros/widget_rows" />
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
<div class="row"
|
||||||
|
metal:define-slot="extra_bottom" tal:replace="nothing">
|
||||||
|
<div class="label">Extra bottom</div>
|
||||||
|
<div class="field"><input type="text" style="width:100%" /></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<br/><br/>
|
||||||
|
<div class="row">
|
||||||
|
<div class="controls"><hr />
|
||||||
|
<span tal:condition="context/nameAllowed|nothing" tal:omit-tag="">
|
||||||
|
<b i18n:translate="">Object Name</b>
|
||||||
|
<input type='text' name='add_input_name'
|
||||||
|
tal:attributes="value context/contentName" />
|
||||||
|
</span>
|
||||||
|
<input type='submit' value='Add' name='UPDATE_SUBMIT'
|
||||||
|
i18n:attributes='value add-button' />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" metal:define-slot="extra_buttons" tal:replace="nothing">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="separator"></div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -32,6 +32,7 @@ from zope.interface import implements
|
||||||
from zope.app.publisher.browser import applySkin
|
from zope.app.publisher.browser import applySkin
|
||||||
from zope.publisher.interfaces.browser import ISkin
|
from zope.publisher.interfaces.browser import ISkin
|
||||||
from zope.schema.vocabulary import SimpleTerm
|
from zope.schema.vocabulary import SimpleTerm
|
||||||
|
from zope.security import canAccess, canWrite
|
||||||
from zope.security.proxy import removeSecurityProxy
|
from zope.security.proxy import removeSecurityProxy
|
||||||
|
|
||||||
from cybertools.typology.interfaces import IType
|
from cybertools.typology.interfaces import IType
|
||||||
|
@ -62,12 +63,6 @@ class BaseView(object):
|
||||||
def getController(self): return self._controller
|
def getController(self): return self._controller
|
||||||
controller = property(getController, setController)
|
controller = property(getController, setController)
|
||||||
|
|
||||||
#@Lazy
|
|
||||||
#def resourceBase(self):
|
|
||||||
# skinSetter = self.skin and ('/++skin++' + self.skin.__name__) or ''
|
|
||||||
# # TODO: put '/@@' etc after path to site instead of directly after URL0
|
|
||||||
# return self.request.URL[0] + skinSetter + '/@@/'
|
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def modified(self):
|
def modified(self):
|
||||||
""" get date/time of last modification
|
""" get date/time of last modification
|
||||||
|
@ -119,6 +114,19 @@ class BaseView(object):
|
||||||
def uniqueId(self):
|
def uniqueId(self):
|
||||||
return zapi.getUtility(IIntIds).getId(self.context)
|
return zapi.getUtility(IIntIds).getId(self.context)
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def editable(self):
|
||||||
|
return canWrite(self.context, 'title')
|
||||||
|
|
||||||
|
def openEditWindow(self, viewName='edit.html'):
|
||||||
|
if self.editable:
|
||||||
|
return "openEditWindow('%s/@@%s')" % (self.url, viewName)
|
||||||
|
return ''
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def xeditable(self):
|
||||||
|
return getattr(self.context, 'contentType', '').startswith('text/')
|
||||||
|
|
||||||
|
|
||||||
class LoopsTerms(object):
|
class LoopsTerms(object):
|
||||||
""" Provide the ITerms interface, e.g. for usage in selection
|
""" Provide the ITerms interface, e.g. for usage in selection
|
||||||
|
@ -138,7 +146,10 @@ class LoopsTerms(object):
|
||||||
return self.context.getLoopsRoot()
|
return self.context.getLoopsRoot()
|
||||||
|
|
||||||
def getTerm(self, value):
|
def getTerm(self, value):
|
||||||
return BaseView(value, self.request)
|
#return BaseView(value, self.request)
|
||||||
|
title = value.title or zapi.getName(value)
|
||||||
|
token = self.loopsRoot.getLoopsUri(value)
|
||||||
|
return SimpleTerm(value, token, title)
|
||||||
|
|
||||||
def getValue(self, token):
|
def getValue(self, token):
|
||||||
return self.loopsRoot.loopsTraverse(token)
|
return self.loopsRoot.loopsTraverse(token)
|
||||||
|
|
|
@ -52,8 +52,6 @@ class ConceptEditForm(EditForm):
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def typeInterface(self):
|
def typeInterface(self):
|
||||||
print IType(self.context)
|
|
||||||
print IType(self.context).typeInterface
|
|
||||||
return IType(self.context).typeInterface
|
return IType(self.context).typeInterface
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
<metal:body define-macro="conceptlisting">
|
<metal:body define-macro="conceptlisting">
|
||||||
<div>
|
<div>
|
||||||
<h3><span i18n:translate="">Concept</span>:
|
<h3 tal:attributes="class string:content-$level;
|
||||||
<span tal:content="item/title">Title</span></h3>
|
ondblclick item/openEditWindow">
|
||||||
|
<span i18n:translate="">Concept</span>:
|
||||||
|
<span tal:content="item/title">Title</span>
|
||||||
|
</h3>
|
||||||
<metal:listing define-macro="conceptlisting2">
|
<metal:listing define-macro="conceptlisting2">
|
||||||
<div>
|
<div tal:attributes="class string:content-$level;
|
||||||
|
ondblclick python: item.openEditWindow('configure.html')">
|
||||||
<h4>Parents</h4>
|
<h4>Parents</h4>
|
||||||
<div tal:repeat="related item/parents">
|
<div tal:repeat="related item/parents">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
|
@ -11,7 +15,8 @@
|
||||||
tal:content="related/title">Resource Title</a>
|
tal:content="related/title">Resource Title</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div tal:attributes="class string:content-$level;
|
||||||
|
ondblclick python: item.openEditWindow('configure.html')">
|
||||||
<h4>Children</h4>
|
<h4>Children</h4>
|
||||||
<div tal:repeat="related item/children">
|
<div tal:repeat="related item/children">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
|
@ -19,7 +24,8 @@
|
||||||
tal:content="related/title">Resource Title</a>
|
tal:content="related/title">Resource Title</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div tal:attributes="class string:content-$level;
|
||||||
|
ondblclick python: item.openEditWindow('resources.html')">
|
||||||
<h4>Resources</h4>
|
<h4>Resources</h4>
|
||||||
<div tal:repeat="related item/resources">
|
<div tal:repeat="related item/resources">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
<resource name="node.css" file="node.css" />
|
<resource name="node.css" file="node.css" />
|
||||||
<resource name="node.js" file="node.js" />
|
<resource name="node.js" file="node.js" />
|
||||||
<resource name="edit.gif" file="edit.gif" />
|
|
||||||
|
|
||||||
<!-- macros -->
|
<!-- macros -->
|
||||||
|
|
||||||
|
@ -368,7 +367,7 @@
|
||||||
name="AddLoopsNode.html"
|
name="AddLoopsNode.html"
|
||||||
content_factory="loops.view.Node"
|
content_factory="loops.view.Node"
|
||||||
schema="loops.interfaces.INode"
|
schema="loops.interfaces.INode"
|
||||||
fields="title description nodeType body"
|
fields="title description nodeType viewer body"
|
||||||
permission="zope.ManageContent">
|
permission="zope.ManageContent">
|
||||||
|
|
||||||
<widget field="description" height="2" />
|
<widget field="description" height="2" />
|
||||||
|
@ -399,10 +398,30 @@
|
||||||
|
|
||||||
</editform>
|
</editform>
|
||||||
|
|
||||||
|
<addform
|
||||||
|
label="Add Node with Document"
|
||||||
|
name="AddLoopsNodeDocument.html"
|
||||||
|
content_factory="loops.view.Node"
|
||||||
|
schema="loops.interfaces.IDocument"
|
||||||
|
fields="title contentType data"
|
||||||
|
template="add.pt"
|
||||||
|
permission="zope.ManageContent">
|
||||||
|
</addform>
|
||||||
|
|
||||||
|
<view
|
||||||
|
for="loops.interfaces.INode"
|
||||||
|
name="+"
|
||||||
|
menu="zmi_actions" title="Add"
|
||||||
|
class="loops.browser.node.NodeAdding"
|
||||||
|
permission="zope.ManageContent"
|
||||||
|
allowed_attributes="addingInfo isSingleMenuItem hasCustomAddView">
|
||||||
|
<page name="index.html" template="selectAdd.pt" />
|
||||||
|
<page name="action.html" attribute="action" />
|
||||||
|
</view>
|
||||||
|
|
||||||
<containerViews
|
<containerViews
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
index="zope.ManageContent"
|
index="zope.ManageContent"
|
||||||
add="zope.ManageContent"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<page
|
<page
|
||||||
|
@ -410,8 +429,8 @@
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
template="node_target.pt"
|
template="node_target.pt"
|
||||||
class="loops.browser.node.ConfigureView"
|
class="loops.browser.node.ConfigureView"
|
||||||
permission="zope.ManageContent">
|
permission="zope.ManageContent"
|
||||||
</page>
|
/>
|
||||||
|
|
||||||
<menuItem
|
<menuItem
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
|
|
BIN
browser/edit.gif
BIN
browser/edit.gif
Binary file not shown.
Before Width: | Height: | Size: 879 B |
|
@ -26,6 +26,7 @@ from zope.cachedescriptors.property import Lazy
|
||||||
from zope.app import zapi
|
from zope.app import zapi
|
||||||
from zope.app.catalog.interfaces import ICatalog
|
from zope.app.catalog.interfaces import ICatalog
|
||||||
from zope.app.container.browser.contents import JustContents
|
from zope.app.container.browser.contents import JustContents
|
||||||
|
from zope.app.container.browser.adding import ContentAdding
|
||||||
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
|
from zope.app.event.objectevent import ObjectCreatedEvent, ObjectModifiedEvent
|
||||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||||
from zope.app.intid.interfaces import IIntIds
|
from zope.app.intid.interfaces import IIntIds
|
||||||
|
@ -271,3 +272,14 @@ class ConfigureView(NodeView):
|
||||||
continue
|
continue
|
||||||
yield BaseView(o, request)
|
yield BaseView(o, request)
|
||||||
|
|
||||||
|
|
||||||
|
class NodeAdding(ContentAdding):
|
||||||
|
|
||||||
|
def addingInfo(self):
|
||||||
|
info = super(NodeAdding, self).addingInfo()
|
||||||
|
info.append({'title': 'Document',
|
||||||
|
'action': 'AddLoopsNodeDocument.html',
|
||||||
|
'selected': '',
|
||||||
|
'has_custom_add_view': True,
|
||||||
|
'description': 'This creates a node with an associated document'})
|
||||||
|
return info
|
||||||
|
|
|
@ -14,19 +14,17 @@
|
||||||
<metal:body define-macro="textbody">
|
<metal:body define-macro="textbody">
|
||||||
<tal:body define="body item/body">
|
<tal:body define="body item/body">
|
||||||
<div class="content-1"
|
<div class="content-1"
|
||||||
tal:define="onclick string:openEditWindow('${item/url}/@@edit.html')"
|
|
||||||
tal:condition="body"
|
tal:condition="body"
|
||||||
tal:attributes="class string:content-$level;
|
tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.editable and onclick or ''"
|
ondblclick item/openEditWindow"
|
||||||
tal:content="structure body">
|
tal:content="structure body">
|
||||||
The body
|
The body
|
||||||
</div>
|
</div>
|
||||||
<div class="content-1"
|
<div class="content-1"
|
||||||
tal:define="target item/target;
|
tal:define="target item/target"
|
||||||
onclick string:openEditWindow('${item/url}/@@configure.html')"
|
|
||||||
tal:condition="target"
|
tal:condition="target"
|
||||||
tal:attributes="class string:content-$level;
|
tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.editable and onclick or ''"
|
ondblclick python: item.openEditWindow('configure.html')"
|
||||||
tal:content="structure item/renderTarget">
|
tal:content="structure item/renderTarget">
|
||||||
The body
|
The body
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,9 +35,8 @@
|
||||||
<metal:body define-macro="conceptbody">
|
<metal:body define-macro="conceptbody">
|
||||||
<tal:body define="body item/body;">
|
<tal:body define="body item/body;">
|
||||||
<div class="content-1"
|
<div class="content-1"
|
||||||
tal:define="onclick string:openEditWindow('${item/url}/@@configure.html')"
|
|
||||||
tal:attributes="class string:content-$level;
|
tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.editable and onclick or ''">
|
ondblclick python: item.openEditWindow('configure.html')">
|
||||||
<span tal:content="structure body">Node Body</span>
|
<span tal:content="structure body">Node Body</span>
|
||||||
</div>
|
</div>
|
||||||
<tal:concepts define="item item/target">
|
<tal:concepts define="item item/target">
|
||||||
|
@ -52,9 +49,8 @@
|
||||||
<metal:body define-macro="filebody">
|
<metal:body define-macro="filebody">
|
||||||
<tal:body define="body item/body">
|
<tal:body define="body item/body">
|
||||||
<div class="content-1"
|
<div class="content-1"
|
||||||
tal:define="onclick string:openEditWindow('${item/url}/@@edit.html')"
|
|
||||||
tal:attributes="class string:content-$level;
|
tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.editable and onclick or ''">
|
ondblclick python: item.openEditWindow('edit_target.html')">
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${item/url}/.target/view"
|
tal:attributes="href string:${item/url}/.target/view"
|
||||||
tal:content="structure body">The body</a>
|
tal:content="structure body">The body</a>
|
||||||
|
@ -66,17 +62,15 @@
|
||||||
<metal:body define-macro="imagebody">
|
<metal:body define-macro="imagebody">
|
||||||
<tal:body define="body item/body">
|
<tal:body define="body item/body">
|
||||||
<div class="content-1" style="margin-top: 12px"
|
<div class="content-1" style="margin-top: 12px"
|
||||||
tal:define="onclick string:openEditWindow('${item/url}/@@edit_target.html')"
|
|
||||||
tal:attributes="class string:content-$level;
|
tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.editable and onclick or ''">
|
ondblclick python: item.openEditWindow('edit_target.html')">
|
||||||
<img src="target"
|
<img src="target"
|
||||||
tal:attributes="src string:${item/url}/.target/view" />
|
tal:attributes="src string:${item/url}/.target/view" />
|
||||||
</div>
|
</div>
|
||||||
<div class="content-1"
|
<div class="content-1"
|
||||||
tal:condition="body"
|
tal:condition="body"
|
||||||
tal:define="onclick string:openEditWindow('${item/url}/@@edit.html')"
|
|
||||||
tal:attributes="class string:content-$level;
|
tal:attributes="class string:content-$level;
|
||||||
ondblclick python: item.editable and onclick or ''"
|
ondblclick item/openEditWindow"
|
||||||
tal:content="structure body">
|
tal:content="structure body">
|
||||||
The body
|
The body
|
||||||
</div>
|
</div>
|
||||||
|
@ -86,9 +80,8 @@
|
||||||
|
|
||||||
<metal:body define-macro="listpages">
|
<metal:body define-macro="listpages">
|
||||||
<div class="content-1"
|
<div class="content-1"
|
||||||
tal:define="onclick string:openEditWindow('${view/url}/@@edit.html')"
|
|
||||||
tal:content="structure view/body"
|
tal:content="structure view/body"
|
||||||
tal:attributes="ondblclick python: view.editable and onclick or ''">
|
tal:attributes="ondblclick view/openEditWindow">
|
||||||
Listing
|
Listing
|
||||||
</div><br />
|
</div><br />
|
||||||
<div tal:repeat="item view/pageItems">
|
<div tal:repeat="item view/pageItems">
|
||||||
|
@ -124,9 +117,7 @@
|
||||||
<a target="zmi"
|
<a target="zmi"
|
||||||
tal:define="url string:${item/url}/@@edit.html'"
|
tal:define="url string:${item/url}/@@edit.html'"
|
||||||
tal:attributes="href url;
|
tal:attributes="href url;
|
||||||
onclick string:
|
onclick item/openEditWindow;">
|
||||||
zmi=window.open('$url', 'zmi');;
|
|
||||||
zmi.focus();; return false;;">
|
|
||||||
<img src="edit.gif"
|
<img src="edit.gif"
|
||||||
tal:attributes="src context/++resource++edit.gif" border="0" />
|
tal:attributes="src context/++resource++edit.gif" border="0" />
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -16,12 +16,10 @@
|
||||||
<a href="#"
|
<a href="#"
|
||||||
tal:attributes="href string:${target/url}/@@configure.html"
|
tal:attributes="href string:${target/url}/@@configure.html"
|
||||||
tal:content="target/title">Document xy</a>
|
tal:content="target/title">Document xy</a>
|
||||||
<a href="#" title="External Editor"
|
<tal:xedit define="xeditObjectUrl target/url"
|
||||||
tal:condition="python:
|
condition="target/xeditable">
|
||||||
getattr(target.context, 'contentType','').startswith('text')"
|
<metal:xedit use-macro="views/xedit_macros/editLink" />
|
||||||
tal:attributes="href string:${target/context/@@absolute_url}/external_edit"
|
</tal:xedit>
|
||||||
><img src="edit.gif" alt="External Editor"
|
|
||||||
tal:attributes="src context/++resource++edit.gif" /></a>
|
|
||||||
</tal:target>
|
</tal:target>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,9 @@
|
||||||
|
|
||||||
<h1>
|
<h1>
|
||||||
<span tal:content="context/title">Concept Title</span>
|
<span tal:content="context/title">Concept Title</span>
|
||||||
<a href="#"
|
<tal:xedit condition="view/xeditable">
|
||||||
tal:condition="python: context.contentType.startswith('text')"
|
<metal:xedit use-macro="views/xedit_macros/editLink" />
|
||||||
tal:attributes="href string:${context/@@absolute_url}/external_edit"
|
</tal:xedit>
|
||||||
><img src="edit.gif"
|
|
||||||
tal:attributes="src context/++resource++edit.gif" border="0" /></a>
|
|
||||||
</h1><br />
|
</h1><br />
|
||||||
|
|
||||||
<div tal:define="items view/concepts;
|
<div tal:define="items view/concepts;
|
||||||
|
|
58
browser/selectAdd.pt
Normal file
58
browser/selectAdd.pt
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<html metal:use-macro="context/@@standard_macros/addingdialog"
|
||||||
|
i18n:domain="zope">
|
||||||
|
<body>
|
||||||
|
<div metal:fill-slot="body">
|
||||||
|
|
||||||
|
<form method="post" action="action.html">
|
||||||
|
<table class="TypeListing" cellpadding="3">
|
||||||
|
|
||||||
|
<tal:block define="title view/title | nothing">
|
||||||
|
<caption tal:condition="title" tal:content="title"
|
||||||
|
i18n:translate="">Inserted title</caption>
|
||||||
|
<caption tal:condition="not:title"
|
||||||
|
i18n:translate="">Add Content</caption>
|
||||||
|
</tal:block>
|
||||||
|
|
||||||
|
<tbody tal:define="infos view/addingInfo">
|
||||||
|
|
||||||
|
<tr tal:repeat="info infos">
|
||||||
|
|
||||||
|
<td class="Selector">
|
||||||
|
<input type="radio" name="type_name"
|
||||||
|
tal:attributes="value info/action;
|
||||||
|
id info/action;
|
||||||
|
checked python:len(infos)==1" />
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td class="TypeName">
|
||||||
|
<label style="font-weight: bold;"
|
||||||
|
tal:attributes="for info/action">
|
||||||
|
<span tal:replace="info/title" i18n:translate="">Folder</span>
|
||||||
|
</label>
|
||||||
|
<div class="TypeDescription" tal:content="info/description"
|
||||||
|
i18n:translate="">
|
||||||
|
Folders are generic containers for content, including other
|
||||||
|
folders.
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><br /></td>
|
||||||
|
<td><input type="text" name="id"
|
||||||
|
tal:condition="view/nameAllowed"
|
||||||
|
tal:attributes="value request/id | nothing" />
|
||||||
|
<input type="submit" name="add" value=" Add "
|
||||||
|
i18n:attributes="value add-button" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Add table
Reference in a new issue