diff --git a/system/site/browser.py b/system/site/browser.py
index da43553..6847959 100644
--- a/system/site/browser.py
+++ b/system/site/browser.py
@@ -57,63 +57,78 @@ actions.register('editPortalLink', 'portlet', DialogAction,
dialogName='editPortalLink',
)
-class PortalPage(ConceptView):
- """ A query view linking to pages on other loops sites.
- """
+
+class Base(ConceptView):
@Lazy
def site_macros(self):
return site_macros.macros
+ @Lazy
+ def root(self):
+ return getRoot(self.context)
+
+
+class PortalPage(Base):
+ """ A query view linking to pages on other loops sites.
+ """
+
@property
def macro(self):
return self.site_macros['portal_page']
- @Lazy
- def root(self):
- return getRoot(self.context)
-
@Lazy
def portalLinks(self):
result = []
for c in self.context.getChildren():
- link = adapted(c)
- if ILink.providedBy(link):
- site = traverse(self.root, link.site)
- path = link.path or 'home'
- target = traverse(site, 'views/' + path)
- if canAccess(target, 'title'):
- siteInfo = SiteDetails(target, self.request)
- siteInfo.title = link.title
- if link.description:
- siteInfo.description = link.description
- if link.url:
- siteInfo.url = link.url
- result.append(siteInfo)
+ info = PortalLink(c, self.request).targetInfo
+ if info is not None:
+ result.append(info)
return result
-class SiteDetails(BaseView):
+class LinkInfo(Base):
pass
-# old loops_sites.html view
+class PortalLink(Base):
-class SitesListing(ConceptView):
+ @property
+ def macro(self):
+ return self.site_macros['portal_link']
@Lazy
- def site_macros(self):
- return site_macros.macros
+ def targetInfo(self):
+ link = self.adapted
+ if not ILink.providedBy(link):
+ return None
+ site = traverse(self.root, link.site, None)
+ if site is None:
+ return None
+ path = link.path or 'home'
+ target = traverse(site, 'views/' + path, None)
+ if target is None:
+ return None
+ if not canAccess(target, 'title'):
+ return None
+ info = LinkInfo(target, self.request)
+ info.title = link.title
+ if link.description:
+ info.description = link.description
+ if link.url:
+ info.url = link.url
+ return info
+
+
+# old loops_sites.html view
+
+class SitesListing(Base):
@property
def macro(self):
return self.site_macros['sites_listing']
- @Lazy
- def root(self):
- return getRoot(self.context)
-
@Lazy
def sites(self):
result = []
@@ -121,6 +136,6 @@ class SitesListing(ConceptView):
for p in paths:
s = traverse(self.root, p)
if canAccess(s, 'title'):
- result.append(SiteDetails(s, self.request))
+ result.append(LinkInfo(s, self.request))
return result
diff --git a/system/site/configure.zcml b/system/site/configure.zcml
index 507909b..314af0f 100644
--- a/system/site/configure.zcml
+++ b/system/site/configure.zcml
@@ -23,6 +23,14 @@
factory="loops.system.site.browser.PortalPage"
permission="zope.View" />
+
+
+
+
+
+ Link Target
+
+
+
+
+
+
+
+
loops Sites