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
This commit is contained in:
helmutm 2008-09-20 08:45:15 +00:00
parent 49102961e5
commit d2f070037e
13 changed files with 218 additions and 20 deletions

View file

@ -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')

View file

@ -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

View file

@ -0,0 +1,40 @@
<!-- $Id$ -->
<configure
xmlns:zope="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="cybertools.composer">
<zope:utility
component="cybertools.composer.layout.browser.default.logo"
provides="cybertools.composer.layout.interfaces.ILayout"
name="logo.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.top_actions"
provides="cybertools.composer.layout.interfaces.ILayout"
name="column2.top_actions" />
<zope:utility
component="cybertools.composer.layout.browser.default.column1"
provides="cybertools.composer.layout.interfaces.ILayout"
name="column1.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.content"
provides="cybertools.composer.layout.interfaces.ILayout"
name="content.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.column2"
provides="cybertools.composer.layout.interfaces.ILayout"
name="column2.default" />
<zope:utility
component="cybertools.composer.layout.browser.default.footer"
provides="cybertools.composer.layout.interfaces.ILayout"
name="footer.default" />
<include package=".liquid" />
</configure>

View file

@ -1,3 +1,66 @@
<div metal:define-macro="footer">
Some footer text.
<body metal:define-macro="body">
<div>
<div>
<tal:sub repeat="view view/layouts/logo">
<metal:sub use-macro="view/renderer" /></tal:sub>
<tal:sub repeat="view view/layouts/top_actions">
<metal:sub use-macro="view/renderer" /></tal:sub>
</div>
</div>
<div>
<tal:sub repeat="view view/layouts/column1">
<metal:sub use-macro="view/renderer" />
</tal:sub>
</div>
<div>
<tal:sub repeat="view view/layouts/content">
<metal:sub use-macro="view/renderer" />
</tal:sub>
</div>
<div>
<tal:sub repeat="view view/layouts/column2">
<metal:sub use-macro="view/renderer" />
</tal:sub>
</div>
<div>
<tal:sub repeat="view view/layouts/footer">
<metal:sub use-macro="view/renderer" />
</tal:sub>
</div>
</body>
<div metal:define-macro="logo">
Logo
</div>
<div metal:define-macro="top_actions">
Top actions
</div>
<div metal:define-macro="column1">
Column 1
</div>
<div metal:define-macro="content">
Content
</div>
<div metal:define-macro="column2">
Column 2
</div>
<div metal:define-macro="footer">
Powered by Zope.
</div>

View file

@ -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'])

View file

@ -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}

View file

@ -0,0 +1,21 @@
<!-- $Id$ -->
<configure
xmlns:zope="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="cybertools.composer">
<browser:resource
name="liquid.css" file="base.css" />
<zope:utility
component="cybertools.composer.layout.browser.liquid.default.css"
provides="cybertools.composer.layout.interfaces.ILayout"
name="css.liquid" />
<zope:utility
component="cybertools.composer.layout.browser.liquid.default.body"
provides="cybertools.composer.layout.interfaces.ILayout"
name="body.liquid" />
</configure>

View file

@ -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)

View file

@ -1,7 +1,8 @@
<metal:css define-macro="css">
<!--<style type="text/css" media="all"
tal:attributes="media view/media"
tal:content="string:@import url(${view/page/resourceBase}${view/context/resourceName});">
<metal:css define-macro="css"
tal:define="layout view/context/template">
<style type="text/css" media="all"
tal:attributes="media layout/media"
tal:content="string:@import url(${view/page/resourceBase}${layout/resource});">
@import url(some.css);
</style>-->
</style>
</metal:css>

View file

@ -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'])

View file

@ -1,8 +1,17 @@
<!-- $Id$ -->
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:zope="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="cybertools.composer">
<zope:utility
factory="cybertools.composer.layout.base.LayoutManager" />
<zope:adapter
for="*"
factory="cybertools.composer.layout.base.LayoutInstance" />
<include package=".browser" />
</configure>

View file

@ -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):

View file

@ -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()