use data table as basis for vocabularies
This commit is contained in:
parent
e4b4ca2634
commit
0162adea94
4 changed files with 42 additions and 6 deletions
|
@ -137,7 +137,7 @@ class BaseRelationView(BaseView):
|
||||||
return self.getData()
|
return self.getData()
|
||||||
|
|
||||||
def getData(self):
|
def getData(self):
|
||||||
return self.instance.applyTemplate()
|
return self.instance.applyTemplate(context=self.context, request=self.request)
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def instance(self):
|
def instance(self):
|
||||||
|
@ -248,7 +248,7 @@ class ConceptView(BaseView):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def getData(self, omit=('title', 'description')):
|
def getData(self, omit=('title', 'description')):
|
||||||
data = self.instance.applyTemplate()
|
data = self.instance.applyTemplate(context=self.context, request=self.request)
|
||||||
for k in omit:
|
for k in omit:
|
||||||
if k in data:
|
if k in data:
|
||||||
del data[k]
|
del data[k]
|
||||||
|
|
|
@ -50,10 +50,14 @@
|
||||||
<tal:row repeat="field fields">
|
<tal:row repeat="field fields">
|
||||||
<tr tal:define="fieldName field/name;
|
<tr tal:define="fieldName field/name;
|
||||||
value nocall:data/?fieldName;
|
value nocall:data/?fieldName;
|
||||||
renderer field/displayRenderer"
|
fieldInstance python:field.getFieldInstance(
|
||||||
|
context=context, request=request);
|
||||||
|
rendererName field/displayRenderer;
|
||||||
|
renderer python:fieldInstance.getRenderer(rendererName) or
|
||||||
|
view.concept_macros[rendererName]"
|
||||||
tal:condition="nocall:value">
|
tal:condition="nocall:value">
|
||||||
<td><b tal:content="field/title" i18n:translate="" />:</td>
|
<td><b tal:content="field/title" i18n:translate="" />:</td>
|
||||||
<td><span metal:use-macro="view/concept_macros/?renderer" /></td>
|
<td><span metal:use-macro="renderer" /></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tal:row>
|
</tal:row>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -693,6 +693,10 @@
|
||||||
for="loops.view.NodeTypeSourceList
|
for="loops.view.NodeTypeSourceList
|
||||||
zope.publisher.interfaces.browser.IBrowserRequest" />
|
zope.publisher.interfaces.browser.IBrowserRequest" />
|
||||||
|
|
||||||
|
<zope:adapter factory="loops.browser.common.SimpleTerms"
|
||||||
|
for="loops.table.DataTableSourceList
|
||||||
|
zope.publisher.interfaces.browser.IBrowserRequest" />
|
||||||
|
|
||||||
<zope:view factory="loops.browser.node.NodeTraverser"
|
<zope:view factory="loops.browser.node.NodeTraverser"
|
||||||
for="loops.interfaces.INode"
|
for="loops.interfaces.INode"
|
||||||
type="zope.publisher.interfaces.http.IHTTPRequest"
|
type="zope.publisher.interfaces.http.IHTTPRequest"
|
||||||
|
|
32
table.py
32
table.py
|
@ -21,14 +21,15 @@ Data (keyword-based) table definition and implementation.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from BTrees.OOBTree import OOBTree
|
from BTrees.OOBTree import OOBTree
|
||||||
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope import component, schema
|
from zope import component, schema
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope.interface import implements, Interface, Attribute
|
from zope.interface import implements, Interface, Attribute
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.schema.interfaces import IContextSourceBinder, IIterableSource
|
||||||
|
|
||||||
from cybertools.composer.schema.factory import SchemaFactory
|
from cybertools.composer.schema.factory import SchemaFactory
|
||||||
from cybertools.composer.schema.grid.interfaces import KeyTable
|
from cybertools.composer.schema.grid.interfaces import KeyTable
|
||||||
from loops.common import AdapterBase
|
from loops.common import AdapterBase, adapted, baseObject
|
||||||
from loops.interfaces import IConcept, IConceptSchema, ILoopsAdapter
|
from loops.interfaces import IConcept, IConceptSchema, ILoopsAdapter
|
||||||
from loops.type import TypeInterfaceSourceList
|
from loops.type import TypeInterfaceSourceList
|
||||||
from loops import util
|
from loops import util
|
||||||
|
@ -101,3 +102,30 @@ class DataTableSchemaFactory(SchemaFactory):
|
||||||
schema.fields.remove('viewName')
|
schema.fields.remove('viewName')
|
||||||
return schema
|
return schema
|
||||||
|
|
||||||
|
|
||||||
|
class DataTableSourceBinder(object):
|
||||||
|
|
||||||
|
implements(IContextSourceBinder)
|
||||||
|
|
||||||
|
def __init__(self, tableName):
|
||||||
|
self.tableName = tableName
|
||||||
|
|
||||||
|
def __call__(self, context):
|
||||||
|
context = baseObject(context)
|
||||||
|
dt = context.getLoopsRoot().getConceptManager()[self.tableName]
|
||||||
|
return DataTableSourceList(adapted(dt))
|
||||||
|
|
||||||
|
|
||||||
|
class DataTableSourceList(object):
|
||||||
|
|
||||||
|
implements(IIterableSource)
|
||||||
|
|
||||||
|
def __init__(self, context):
|
||||||
|
self.context = context
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
items = [(k, v[0]) for k, v in self.context.data.items()]
|
||||||
|
return iter(sorted(items, key=lambda x: x[1]))
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
return len(self.context.data)
|
||||||
|
|
Loading…
Add table
Reference in a new issue