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()
|
||||
|
||||
def getData(self):
|
||||
return self.instance.applyTemplate()
|
||||
return self.instance.applyTemplate(context=self.context, request=self.request)
|
||||
|
||||
@Lazy
|
||||
def instance(self):
|
||||
|
@ -248,7 +248,7 @@ class ConceptView(BaseView):
|
|||
return None
|
||||
|
||||
def getData(self, omit=('title', 'description')):
|
||||
data = self.instance.applyTemplate()
|
||||
data = self.instance.applyTemplate(context=self.context, request=self.request)
|
||||
for k in omit:
|
||||
if k in data:
|
||||
del data[k]
|
||||
|
|
|
@ -50,10 +50,14 @@
|
|||
<tal:row repeat="field fields">
|
||||
<tr tal:define="fieldName field/name;
|
||||
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">
|
||||
<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>
|
||||
</tal:row>
|
||||
</table>
|
||||
|
|
|
@ -693,6 +693,10 @@
|
|||
for="loops.view.NodeTypeSourceList
|
||||
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"
|
||||
for="loops.interfaces.INode"
|
||||
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 zope.cachedescriptors.property import Lazy
|
||||
from zope import component, schema
|
||||
from zope.component import adapts
|
||||
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.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.type import TypeInterfaceSourceList
|
||||
from loops import util
|
||||
|
@ -101,3 +102,30 @@ class DataTableSchemaFactory(SchemaFactory):
|
|||
schema.fields.remove('viewName')
|
||||
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