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