From d2f070037e5e86c8c1eb01a4ea4f50f4b1903842 Mon Sep 17 00:00:00 2001 From: helmutm Date: Sat, 20 Sep 2008 08:45:15 +0000 Subject: [PATCH] work in progress: layout management - first working page with CSS git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@2894 fd906abe-77d9-0310-91a1-e0d9ade77398 --- composer/layout/README.txt | 19 +++++- composer/layout/base.py | 3 +- composer/layout/browser/configure.zcml | 40 +++++++++++ composer/layout/browser/default.pt | 67 ++++++++++++++++++- composer/layout/browser/default.py | 17 ++++- composer/layout/browser/liquid/base.css | 31 +++++++++ composer/layout/browser/liquid/configure.zcml | 21 ++++++ composer/layout/browser/liquid/default.py | 11 ++- composer/layout/browser/standard.pt | 11 +-- composer/layout/browser/standard.py | 3 - composer/layout/configure.zcml | 11 ++- composer/layout/interfaces.py | 1 + composer/layout/region.py | 3 +- 13 files changed, 218 insertions(+), 20 deletions(-) create mode 100644 composer/layout/browser/configure.zcml create mode 100644 composer/layout/browser/liquid/base.css create mode 100644 composer/layout/browser/liquid/configure.zcml 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()