diff --git a/browser/lobo/README.txt b/browser/lobo/README.txt
new file mode 100644
index 0000000..e665e71
--- /dev/null
+++ b/browser/lobo/README.txt
@@ -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()
+
diff --git a/browser/lobo/configure.zcml b/browser/lobo/configure.zcml
index 41db419..e89dca6 100644
--- a/browser/lobo/configure.zcml
+++ b/browser/lobo/configure.zcml
@@ -8,11 +8,19 @@
+
+
diff --git a/browser/lobo/standard.pt b/browser/lobo/standard.pt
index a2e4765..26374ea 100644
--- a/browser/lobo/standard.pt
+++ b/browser/lobo/standard.pt
@@ -1,7 +1,7 @@
-
+
diff --git a/browser/lobo/standard.py b/browser/lobo/standard.py
index eee4254..80ad21f 100644
--- a/browser/lobo/standard.py
+++ b/browser/lobo/standard.py
@@ -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
+
diff --git a/browser/lobo/tests.py b/browser/lobo/tests.py
new file mode 100755
index 0000000..c0a4e80
--- /dev/null
+++ b/browser/lobo/tests.py
@@ -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')