diff --git a/composer/layout/README.txt b/composer/layout/README.txt
index 9d0ae06..db4308e 100644
--- a/composer/layout/README.txt
+++ b/composer/layout/README.txt
@@ -28,12 +28,27 @@ manager.
The layouts themselves are also specified as utilities.
- >>> #from cybertools.composer.layout.browser.liquid.default import css
- >>> #component.provideUtility(css, ILayout, name='css')
+ >>> from cybertools.composer.layout.browser.liquid.default import css
+ >>> component.provideUtility(css, ILayout, name='css.liquid')
>>> from cybertools.composer.layout.browser.liquid.default import body
>>> component.provideUtility(body, ILayout, name='body.liquid')
+ >>> from cybertools.composer.layout.browser.default import logo
+ >>> component.provideUtility(logo, ILayout, name='logo.default')
+
+ >>> from cybertools.composer.layout.browser.default import top_actions
+ >>> component.provideUtility(top_actions, ILayout, name='top_actions.default')
+
+ >>> from cybertools.composer.layout.browser.default import column1
+ >>> component.provideUtility(column1, ILayout, name='column1.default')
+
+ >>> from cybertools.composer.layout.browser.default import content
+ >>> component.provideUtility(content, ILayout, name='content.default')
+
+ >>> from cybertools.composer.layout.browser.default import column2
+ >>> component.provideUtility(column2, ILayout, name='column2.default')
+
>>> from cybertools.composer.layout.browser.default import footer
>>> component.provideUtility(footer, ILayout, name='footer.default')
diff --git a/composer/layout/base.py b/composer/layout/base.py
index 75deaba..3523d49 100644
--- a/composer/layout/base.py
+++ b/composer/layout/base.py
@@ -49,7 +49,7 @@ class LayoutManager(object):
def getLayouts(self, key, instance):
region = self.regions.get(key)
- return instance.getLayouts(region)
+ return sorted(instance.getLayouts(region), key=lambda x: x.order)
class Layout(Template):
@@ -59,6 +59,7 @@ class Layout(Template):
title = description = u''
category = 'default'
renderer = None
+ order = 0
def __init__(self, name, regionName, **kw):
self.name = name
diff --git a/composer/layout/browser/configure.zcml b/composer/layout/browser/configure.zcml
new file mode 100644
index 0000000..d0897de
--- /dev/null
+++ b/composer/layout/browser/configure.zcml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/composer/layout/browser/default.pt b/composer/layout/browser/default.pt
index 5497492..b926118 100644
--- a/composer/layout/browser/default.pt
+++ b/composer/layout/browser/default.pt
@@ -1,3 +1,66 @@
-
- Some footer text.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Logo
+
+
+
+
+ Top actions
+
+
+
+
+ Column 1
+
+
+
+
+ Content
+
+
+
+
+ Column 2
+
+
+
+
+ Powered by Zope.
diff --git a/composer/layout/browser/default.py b/composer/layout/browser/default.py
index 974a664..e75f73b 100644
--- a/composer/layout/browser/default.py
+++ b/composer/layout/browser/default.py
@@ -30,5 +30,18 @@ from cybertools.composer.layout.base import Layout
defaultRenderers = ViewPageTemplateFile('default.pt').macros
-footer = Layout('footer.default', 'body.footer',
- renderer=defaultRenderers['footer'])
+logo = Layout('logo.default', 'body.logo', renderer=defaultRenderers['logo'])
+
+top_actions = Layout('top_actions.default', 'body.top_actions',
+ renderer=defaultRenderers['top_actions'])
+
+column1 = Layout('column1.default', 'body.column1',
+ renderer=defaultRenderers['column1'])
+
+content = Layout('content.default', 'body.content',
+ renderer=defaultRenderers['content'])
+
+column2 = Layout('column2.default', 'body.column2',
+ renderer=defaultRenderers['column2'])
+
+footer = Layout('footer.default', 'body.footer', renderer=defaultRenderers['footer'])
diff --git a/composer/layout/browser/liquid/base.css b/composer/layout/browser/liquid/base.css
new file mode 100644
index 0000000..0d89884
--- /dev/null
+++ b/composer/layout/browser/liquid/base.css
@@ -0,0 +1,31 @@
+/*
+ $Id$
+
+ based on http://www.tjkdesign.com/articles/liquid/4.asp
+
+*/
+
+body {
+ min-width:640px;
+ margin: 0;
+ padding: 0;
+ font: 9pt Verdana, Tahoma, Arial, Helvetica, sans-serif;
+ background-color: white;
+ color: #000040;
+}
+
+#global,#menu,#sub-section,#footer {
+ overflow: hidden;
+ display: inline-block;
+}
+
+#content {
+ display: inline-block;
+}
+
+#global,#footer {width:100%}
+#menu,#content,#sub-section {float:left}
+#menu {width:20%}
+#content {width:62%}
+#sub-section {width:17%}
+#footer {clear:left; float:left}
diff --git a/composer/layout/browser/liquid/configure.zcml b/composer/layout/browser/liquid/configure.zcml
new file mode 100644
index 0000000..fa0f012
--- /dev/null
+++ b/composer/layout/browser/liquid/configure.zcml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/composer/layout/browser/liquid/default.py b/composer/layout/browser/liquid/default.py
index 598caa4..a04fe34 100644
--- a/composer/layout/browser/liquid/default.py
+++ b/composer/layout/browser/liquid/default.py
@@ -27,11 +27,16 @@ from zope.cachedescriptors.property import Lazy
from zope import component
from zope.interface import implements
+from cybertools.browser.liquid import Liquid
from cybertools.composer.layout.base import Layout
-
+from cybertools.composer.layout.browser.standard import standardRenderers
defaultRenderers = ViewPageTemplateFile('default.pt').macros
-body = Layout('body.liquid', 'page.body',
- renderer=defaultRenderers['body'])
+
+css = Layout('css.liquid', 'page.css', renderer=standardRenderers['css'],
+ media='all', resource='liquid.css', skin=Liquid)
+
+body = Layout('body.liquid', 'page.body', renderer=defaultRenderers['body'],
+ skin=Liquid)
diff --git a/composer/layout/browser/standard.pt b/composer/layout/browser/standard.pt
index 10dedf3..a0e90d3 100644
--- a/composer/layout/browser/standard.pt
+++ b/composer/layout/browser/standard.pt
@@ -1,7 +1,8 @@
-
-
+
diff --git a/composer/layout/browser/standard.py b/composer/layout/browser/standard.py
index cc44315..4c0aee4 100644
--- a/composer/layout/browser/standard.py
+++ b/composer/layout/browser/standard.py
@@ -29,6 +29,3 @@ from cybertools.composer.layout.base import Layout
standardRenderers = ViewPageTemplateFile('standard.pt').macros
-
-footer = Layout('footer.default', 'body.footer',
- renderer=standardRenderers['footer'])
diff --git a/composer/layout/configure.zcml b/composer/layout/configure.zcml
index 4e47e39..888c055 100644
--- a/composer/layout/configure.zcml
+++ b/composer/layout/configure.zcml
@@ -1,8 +1,17 @@
+
+
+
+
+
+
diff --git a/composer/layout/interfaces.py b/composer/layout/interfaces.py
index 7e50f63..8c14fd0 100644
--- a/composer/layout/interfaces.py
+++ b/composer/layout/interfaces.py
@@ -77,6 +77,7 @@ class ILayout(ITemplate):
required=True,)
renderer = Attribute(u'An object responsible for rendering the layout.')
+ order = Attribute(u'A number that may be used as a sorting key.')
class ILayoutComponent(IComponent):
diff --git a/composer/layout/region.py b/composer/layout/region.py
index 3c85055..12a1ff8 100644
--- a/composer/layout/region.py
+++ b/composer/layout/region.py
@@ -25,6 +25,7 @@ $Id$
from zope.interface import implements
from cybertools.composer.layout.interfaces import IRegion
+from cybertools.util.jeep import Jeep
class Region(object):
@@ -35,4 +36,4 @@ class Region(object):
def __init__(self, name):
self.name = name
- self.layouts = []
+ self.layouts = Jeep()