work in progress: provide parts for presenting resource lists, starting with grid

This commit is contained in:
Helmut Merz 2011-09-25 18:07:26 +02:00
parent 824c7606ad
commit a7330d47bc
3 changed files with 83 additions and 0 deletions

View file

@ -63,4 +63,14 @@
factory="loops.browser.lobo.standard.ConceptView"
permission="zope.View" />
<!-- parts for displaying resources -->
<zope:adapter
name="lobo_rg3"
for="loops.interfaces.IConcept
loops.browser.skin.Lobo"
provides="zope.interface.Interface"
factory="loops.browser.lobo.standard.ResourceGrid3"
permission="zope.View" />
</configure>

View file

@ -65,6 +65,25 @@
</metal:block>
<!-- resources listing macros -->
<metal:block define-macro="rgrid">
<tal:cell repeat="cell part/getResources">
<div tal:attributes="class cell/cssClass;
style cell/style">
<a tal:attributes="href cell/targetUrl;
title cell/description">
<metal:image use-macro="item/macros/image" />
<div class="legend">
<b tal:content="cell/title" /><br />
<i tal:content="cell/description" />
</div>
</a>
</div>
</tal:cell>
</metal:block>
<!-- basic component macros -->
<metal:image define-macro="image">

View file

@ -30,6 +30,8 @@ from zope.cachedescriptors.property import Lazy
from cybertools.typology.interfaces import IType
from loops.browser.concept import ConceptView as BaseConceptView
from loops.browser.concept import ConceptRelationView as BaseConceptRelationView
from loops.browser.resource import ResourceView as BaseResourceView
from loops.browser.resource import ResourceRelationView as BaseResourceRelationView
from loops.common import adapted, baseObject
@ -209,3 +211,55 @@ class Header2(BasePart):
imageSize = 'medium'
cssClass = ['span-4', 'span-2 last', 'clear']
# layout components for presenting lists of resources
class ResourceRelationView(BaseResourceRelationView):
def __init__(self, relation, request, contextIsSecond=False,
parent=None, idx=0):
BaseResourceRelationView.__init__(self, relation, request, contextIsSecond)
self.parentView = parent
self.idx = idx
@Lazy
def targetUrl(self):
return self.nodeView.getUrlForTarget(self.context)
@Lazy
def cssClass(self):
pattern = self.parentView.gridPattern
if pattern:
return pattern[self.idx % len(pattern)]
@Lazy
def style(self):
return 'height: %s' % self.parentView.height
@Lazy
def img(self):
self.registerDojoLightbox() # also provides access to info popup
url = self.nodeView.getUrlForTarget(self.context)
src = ('%s/mediaasset.html?v=%s' % (url, self.parentView.imageSize))
return dict(src=src, url=url,
cssClass=self.parentView.imageCssClass)
class ResourcesPart(BasePart):
def getResources(self):
result = []
resourceRels = self.context.getResourceRelations()
for idx, r in enumerate(resourceRels):
result.append(ResourceRelationView(r, self.request,
contextIsSecond=True, parent=self, idx=idx))
return result
class ResourceGrid3(ResourcesPart):
macroName = 'rgrid'
imageSize = 'small'
height = 'auto; padding-bottom: 10px'
gridPattern = ['span-2', 'span-2', 'span-2 last']