work in progress: more lobo layout views

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3989 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-09-10 07:56:29 +00:00
parent e20e35c4fd
commit 751bc4a7d3
5 changed files with 106 additions and 20 deletions

33
browser/lobo/README.txt Normal file
View file

@ -0,0 +1,33 @@
===============================================================
loops - Linked Objects for Organization and Processing Services
===============================================================
($Id$)
Let's do some basic set up
>>> from zope.app.testing.setup import placefulSetUp, placefulTearDown
>>> site = placefulSetUp(True)
>>> from zope import component, interface
and setup a simple loops site with a concept manager and some concepts
(with all the type machinery, what in real life is done via standard
ZCML setup):
>>> from loops.tests.setup import TestSite
>>> t = TestSite(site)
>>> concepts, resources, views = t.setup()
Using the Lobo Blueprint-based Layout Views
===========================================
>>> from loops.browser.lobo.standard import Grid3, Single1
Fin de partie
=============
>>> placefulTearDown()

View file

@ -8,11 +8,19 @@
<!-- Views for the Lobo skin / grid-based layout -->
<zope:adapter
name="lobo.page.3columns-basic"
name="page.grid.3"
for="loops.interfaces.IConcept
zope.publisher.interfaces.browser.IBrowserRequest"
loops.browser.skin.Lobo"
provides="zope.interface.Interface"
factory="loops.browser.lobo.standard.Basic3Columns"
factory="loops.browser.lobo.standard.Grid3"
permission="zope.View" />
<zope:adapter
name="page.single.1"
for="loops.interfaces.IConcept
loops.browser.skin.Lobo"
provides="zope.interface.Interface"
factory="loops.browser.lobo.standard.Single1"
permission="zope.View" />
</configure>

View file

@ -1,7 +1,7 @@
<html i18n:domain="loops">
<metal:block define-macro="basic-image">
<metal:block define-macro="basic">
<h1 tal:attributes="ondblclick item/openEditWindow"
tal:content="item/title" />

View file

@ -34,33 +34,56 @@ from loops.common import adapted
standard_template = ViewPageTemplateFile('standard.pt')
class Basic3Columns(ConceptView):
class Base(ConceptView):
template = standard_template
templateName = 'lobo.standard'
macroName = 'basic'
imageSize = 'small'
height = 260
gridPattern = ['span-2', 'span-2', 'span-2 last']
@Lazy
def standard_macros(self):
return self.controller.getTemplateMacros('lobo.standard', standard_template)
def macros(self):
return self.controller.getTemplateMacros(self.templateName, self.template)
@property
def macro(self):
return self.standard_macros['basic-image']
return self.macros[self.macroName]
def content(self):
result = []
for idx, c in enumerate(self.context.getChildren([self.defaultPredicate])):
text = c.title
url = self.nodeView.getUrlForTarget(c)
# TODO: use layout settings of c for display
cssClass = 'span-2'
if idx % 3 == 2:
cssClass += ' last'
style = 'height: 260px'
result.append(dict(text=text, url=url, cssClass=cssClass,
style=style, img=self.getImageData(c),
object=adapted(c)))
result.append(self.setupItem(idx, c))
return result
def getImageData(self, concept):
def setupItem(self, idx, obj):
text = obj.title
url = self.nodeView.getUrlForTarget(obj)
# TODO: use layout settings of context and c for display
style = 'height: %ipx' % self.height
return dict(text=text, url=url, cssClass=self.getCssClass(idx, obj),
style=style, img=self.getImageData(idx, obj),
object=adapted(obj))
def getCssClass(self, idx, obj):
pattern = self.gridPattern
return pattern[idx % len(pattern)]
def getImageData(self, idx, concept):
for r in concept.getResources([self.defaultPredicate]):
if r.contentType.startswith('image/'):
src = '%s/mediaasset.html?v=small' % self.nodeView.getUrlForTarget(r)
src = ('%s/mediaasset.html?v=%s' %
(self.nodeView.getUrlForTarget(r), self.imageSize))
return dict(src=src)
class Grid3(Base):
pass
class Single1(Base):
pass

22
browser/lobo/tests.py Executable file
View file

@ -0,0 +1,22 @@
# $Id$
import unittest, doctest
from zope.testing.doctestunit import DocFileSuite
from zope.interface.verify import verifyClass
class Test(unittest.TestCase):
"Basic tests for the browser.lobo sub-package."
def testSomething(self):
pass
def test_suite():
flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
return unittest.TestSuite((
unittest.makeSuite(Test),
DocFileSuite('README.txt', optionflags=flags),
))
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')