diff --git a/browser/common.py b/browser/common.py index dd97b8e..26ebba6 100644 --- a/browser/common.py +++ b/browser/common.py @@ -218,8 +218,6 @@ class BaseView(GenericView, I18NView): @Lazy def modifiedRaw(self): - """ get date/time of last modification - """ d = getattr(self.adapted, 'modified', None) if not d: dc = IZopeDublinCore(self.context) @@ -234,7 +232,7 @@ class BaseView(GenericView, I18NView): return d and d.strftime('%Y-%m-%d %H:%M') or '' @Lazy - def creators(self): + def creatorsRaw(self): # TODO: use an IAuthorInfo (or similar) adapter creators = getattr(self.adapted, 'authors', None) or [] if not creators: @@ -246,7 +244,15 @@ class BaseView(GenericView, I18NView): creators.append(principal.title) except PrincipalLookupError: creators.append(c) - return ', '.join(creators) + return creators + + @Lazy + def creators(self): + return ', '.join(self.creatorsRaw) + + @Lazy + def lastCreator(self): + return self.creatorsRaw and self.creatorsRaw[-1] or u'' @Lazy def loopsRoot(self): diff --git a/browser/concept.py b/browser/concept.py index 3a4a197..3e62bcd 100644 --- a/browser/concept.py +++ b/browser/concept.py @@ -121,9 +121,15 @@ class BaseRelationView(BaseView): self.other = relation.second self.context = getVersion(self.context, request) self.predicate = relation.predicate + self.predicates = [self.predicate] # allow for more than one relation self.relation = relation + self.relations = [relation] self.request = request + @Lazy + def hash(self): + return '%s:%s' % (id(self.relation.first), id(self.relation.second)) + @Lazy def adapted(self): return adapted(self.context, self.languageInfo) @@ -172,7 +178,7 @@ class BaseRelationView(BaseView): @Lazy def predicateTitle(self): - return self.predicate.title + return ', ' .join(p.title for p in self.predicates) @Lazy def predicateUrl(self): @@ -263,7 +269,7 @@ class ConceptView(BaseView): instance.view = self return instance - def getChildren(self, topLevelOnly=True, sort=True): + def getChildren(self, topLevelOnly=True, sort=True, noDuplicates=True): cm = self.loopsRoot.getConceptManager() hasType = cm.getTypePredicate() params = self.params @@ -349,6 +355,17 @@ class ConceptView(BaseView): from loops.browser.resource import ResourceRelationView yield ResourceRelationView(r, self.request, contextIsSecond=True) + def unique(self, rels): + result = Jeep() + for r in rels: + existing = result.get(r.hash) + if existing is not None: + existing.relations.append(r) + existing.predicates.append(r.predicate) + else: + result[r.hash] = r + return result.values() + @Lazy def view(self): context = self.context diff --git a/browser/concept_macros.pt b/browser/concept_macros.pt index 5b6a3c0..783cb84 100644 --- a/browser/concept_macros.pt +++ b/browser/concept_macros.pt @@ -91,7 +91,7 @@

Children

@@ -107,7 +107,8 @@ @@ -120,8 +121,9 @@ Type - Type - Type + 2011-01-10 + + Author 2 MB 2007-03-30 - John + + Author