From a2cc1ee9a38471205fd1f17a2ce96d6b5fd9271c Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 22 Nov 2012 09:16:49 +0100 Subject: [PATCH] move 'parts' logic to ConceptView class so that parts can be used in standard (non-Lobo) views --- browser/common.py | 1 + browser/concept.py | 34 +++++++++++++++++++++++++++----- browser/concept_macros.pt | 7 +++++++ browser/lobo/standard.py | 41 +++++++++------------------------------ 4 files changed, 46 insertions(+), 37 deletions(-) diff --git a/browser/common.py b/browser/common.py index fec9cbc..078e471 100644 --- a/browser/common.py +++ b/browser/common.py @@ -131,6 +131,7 @@ class BaseView(GenericView, I18NView): actions = {} portlet_actions = [] + parts = () icon = None modeName = 'view' isToplevel = False diff --git a/browser/concept.py b/browser/concept.py index 0aa03e3..10ea867 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2011 Helmut Merz helmutm@cy55.de +# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -200,16 +200,22 @@ class BaseRelationView(BaseView): class ConceptView(BaseView): template = concept_macros + templateName = 'concept.standard' + macroName = 'conceptdata' + partPrefix = 'part_' + defaultParts = ('title', 'fields', + 'children', 'resources', 'workitems', 'comments',) def childViewFactory(self, *args, **kw): return ConceptRelationView(*args, **kw) @Lazy - def macro(self): - return self.template.macros['conceptdata'] + def macros(self): + return self.controller.getTemplateMacros(self.templateName, self.template) - #def __init__(self, context, request): - # super(ConceptView, self).__init__(context, request) + @property + def macro(self): + return self.macros[self.macroName] def setupController(self): cont = self.controller @@ -222,6 +228,24 @@ class ConceptView(BaseView): subMacro=concept_macros.macros['parents'], priority=20, info=self) + def getParts(self): + parts = (self.params.get('parts') or []) # deprecated! + if not parts: + parts = (self.options('parts') or self.typeOptions('parts') or + self.defaultParts) + return self.getPartViews(parts) + + def getPartViews(self, parts): + result = [] + for p in parts: + viewName = self.partPrefix + p + view = component.queryMultiAdapter((self.adapted, self.request), + name=viewName) + if view is not None: + view.parent = self + result.append(view) + return result + @Lazy def adapted(self): return adapted(self.context, self.languageInfo) diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt index 30a0114..e3c11e0 100644 --- a/browser/concept_macros.pt +++ b/browser/concept_macros.pt @@ -1,6 +1,13 @@ + + + + + + +
diff --git a/browser/lobo/standard.py b/browser/lobo/standard.py index c29484a..5c4fbff 100644 --- a/browser/lobo/standard.py +++ b/browser/lobo/standard.py @@ -41,18 +41,12 @@ class Base(BaseConceptView): templateName = 'lobo.standard' macroName = None - @Lazy - def macros(self): - return self.controller.getTemplateMacros(self.templateName, self.template) - - @property - def macro(self): - return self.macros[self.macroName] - - @Lazy - def params(self): - ann = self.request.annotations.get('loops.view', {}) - return parse_qs(ann.get('params') or '') + #@Lazy + # better implementation in BaseView: + # splits comma-separated list of values automatically + #def params(self): + # ann = self.request.annotations.get('loops.view', {}) + # return parse_qs(ann.get('params') or '') class ConceptView(BaseConceptView): @@ -152,25 +146,8 @@ class ConceptView(BaseConceptView): class Layout(Base, ConceptView): macroName = 'layout' - - def getParts(self): - parts = (self.params.get('parts') or [''])[0].split(',') # obsolete - if not parts or not parts[0]: - parts = (self.options('parts') or - self.typeOptions('parts') or - ['h1', 'g3']) - return self.getPartViews(parts) - - def getPartViews(self, parts): - result = [] - for p in parts: - viewName = 'lobo_' + p - view = component.queryMultiAdapter((self.adapted, self.request), - name=viewName) - if view is not None: - view.parent = self - result.append(view) - return result + partPrefix = 'lobo_' + defaultParts = ('h1', 'g3',) class BasePart(Base): @@ -192,7 +169,7 @@ class BasePart(Base): return preds def getChildren(self): - subtypeNames = (self.params.get('subtypes') or [''])[0].split(',') + subtypeNames = (self.params.get('subtypes') or []) subtypes = [self.conceptManager[st] for st in subtypeNames if st] result = [] childRels = self.context.getChildRelations(self.childPredicates)