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