From 44fb2e31426b3a447de084a89d467381383435ba Mon Sep 17 00:00:00 2001 From: helmutm Date: Sun, 28 Mar 2010 16:31:53 +0000 Subject: [PATCH] set up basic/generic view stuff in in 'view' package; move z2-independent stuff to 'view' package git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3790 fd906abe-77d9-0310-91a1-e0d9ade77398 --- view/browser/generic.pt | 13 ++++ view/browser/liquid/__init__.py | 16 +++++ view/browser/liquid/base.css | 32 ++++++++++ view/browser/liquid/body.pt | 57 +++++++++++++++++ view/browser/liquid/configure.zcml | 9 +++ view/browser/liquid/custom.css | 7 +++ view/browser/liquid/presentation.css | 22 +++++++ view/browser/liquid/print.css | 17 ++++++ view/browser/liquid/view_macros.pt | 61 +++++++++++++++++++ view/browser/view.py | 91 ++++++++++++++++++++++++++++ wiki/browser/default.pt | 5 ++ wiki/browser/view.py | 6 ++ z2/README.txt | 10 +++ z2/browser/generic.pt | 14 ----- z2/browser/view.py | 42 +++---------- z2/browser/view_macros.pt | 24 -------- z2/tests.py | 11 +++- 17 files changed, 363 insertions(+), 74 deletions(-) create mode 100644 view/browser/generic.pt create mode 100644 view/browser/liquid/__init__.py create mode 100644 view/browser/liquid/base.css create mode 100644 view/browser/liquid/body.pt create mode 100644 view/browser/liquid/configure.zcml create mode 100644 view/browser/liquid/custom.css create mode 100644 view/browser/liquid/presentation.css create mode 100644 view/browser/liquid/print.css create mode 100644 view/browser/liquid/view_macros.pt create mode 100644 view/browser/view.py delete mode 100644 z2/browser/generic.pt delete mode 100644 z2/browser/view_macros.pt diff --git a/view/browser/generic.pt b/view/browser/generic.pt new file mode 100644 index 0000000..14c0dd9 --- /dev/null +++ b/view/browser/generic.pt @@ -0,0 +1,13 @@ + + + + + +
+ +
+ + + + +
diff --git a/view/browser/liquid/__init__.py b/view/browser/liquid/__init__.py new file mode 100644 index 0000000..cf1a3c0 --- /dev/null +++ b/view/browser/liquid/__init__.py @@ -0,0 +1,16 @@ +""" +$Id$ +""" + +#from zope.publisher.interfaces.browser import IBrowserRequest +from zope.publisher.interfaces.browser import IDefaultBrowserLayer +from zope.app.rotterdam import Rotterdam + + +#class liquid(IBrowserRequest): +# """The `liquid` layer.""" + + +class Liquid(Rotterdam): + """ The Liquid skin """ + diff --git a/view/browser/liquid/base.css b/view/browser/liquid/base.css new file mode 100644 index 0000000..94ad57c --- /dev/null +++ b/view/browser/liquid/base.css @@ -0,0 +1,32 @@ +/* + $Id$ + + based on http://www.tjkdesign.com/articles/liquid/4.asp + +*/ + +body { + min-width:640px; + margin: 0; + padding: 0; + font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif; + font-size: 13px; + 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/view/browser/liquid/body.pt b/view/browser/liquid/body.pt new file mode 100644 index 0000000..4348d89 --- /dev/null +++ b/view/browser/liquid/body.pt @@ -0,0 +1,57 @@ + +
+ +
+
+ +
+ + + +
+
+
+ + + +
+
+
+ + + + + +
+ +
+ + + +
+ + + +
+
\ No newline at end of file diff --git a/view/browser/liquid/configure.zcml b/view/browser/liquid/configure.zcml new file mode 100644 index 0000000..55ae6f7 --- /dev/null +++ b/view/browser/liquid/configure.zcml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/view/browser/liquid/custom.css b/view/browser/liquid/custom.css new file mode 100644 index 0000000..68dcade --- /dev/null +++ b/view/browser/liquid/custom.css @@ -0,0 +1,7 @@ +/* + $Id$ + + Copy this to your custom skin directory and add custom settings. + +*/ + diff --git a/view/browser/liquid/presentation.css b/view/browser/liquid/presentation.css new file mode 100644 index 0000000..8648de0 --- /dev/null +++ b/view/browser/liquid/presentation.css @@ -0,0 +1,22 @@ +/* + $Id$ + +*/ + +.body { + margin: 4em; +} + +.top, #header, #menu, #sub-section, #footer, .object-actions, .button { + display: none; +} + +#content { + width: 100%; + color: #000077; +} + +h1, h2, h3, h4, h5 { + color: #005599; +} + diff --git a/view/browser/liquid/print.css b/view/browser/liquid/print.css new file mode 100644 index 0000000..ca6889d --- /dev/null +++ b/view/browser/liquid/print.css @@ -0,0 +1,17 @@ +/* + $Id$ + +*/ + +body { + font-size: 11px; +} + +.top, #header, #menu, #sub-section, #footer, .object-actions, .button { + display: none; +} + +#content { + width: 100%; + color: Black; +} diff --git a/view/browser/liquid/view_macros.pt b/view/browser/liquid/view_macros.pt new file mode 100644 index 0000000..f95fbf9 --- /dev/null +++ b/view/browser/liquid/view_macros.pt @@ -0,0 +1,61 @@ + + + + + + Powered by Zope 3 + + + + + + +
+
+
+ +
+ + + +
+
+
+ +
+
+
+
+ Content +
+
+
+ + + +
+ +
+ + + +
+ + + + Dummy Content + + diff --git a/view/browser/view.py b/view/browser/view.py new file mode 100644 index 0000000..545a396 --- /dev/null +++ b/view/browser/view.py @@ -0,0 +1,91 @@ +# +# Copyright (c) 2010 Helmut Merz helmutm@cy55.de +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +Base classes for views. + +$Id$ +""" + +import os +from zope.app.pagetemplate import ViewPageTemplateFile +from zope.cachedescriptors.property import Lazy +from zope import component + + +generic_page = ViewPageTemplateFile('generic.pt') +view_macros = ViewPageTemplateFile(os.path.join('liquid', 'view_macros.pt')) + + +class BaseView(object): + + index = generic_page + default_template = view_macros # specify in subclass + resource_prefix = '/@@/' + + def __call__(self): + return self.index(self) + + def update(self): + return True + + def mainMacro(self): + return view_macros.macros['main'] + + #@rcache + def defaultMacros(self): + return self.default_template.macros + + def contentMacro(self): + return self.defaultMacros()[getattr(self, 'content_renderer', 'content')] + + #@rcache + def homeURL(self): + return '/' + + @Lazy + def resources(self): + return {'base.css': '%sbase.css' % self.resource_prefix} + + @Lazy + def actions(self): + return dict(top=[], portlet_left=[], portlet_right=[]) + + +# generic views for use with generic persistent objects with type-based adapters +# (not used at the moment - obsolete?) + +class GenericView(BaseView): + + name = 'index_html' + + @Lazy + def object(self): + return self.context.typeInterface(self.context) + + @Lazy + def objectView(self): + return component.getMultiAdapter((self.object, self.request), name=self.name) + + def __call__(self): + return self.objectView() + + +class GenericAddForm(GenericView): + + name = 'create.html' diff --git a/wiki/browser/default.pt b/wiki/browser/default.pt index f54fc7f..31d2c25 100644 --- a/wiki/browser/default.pt +++ b/wiki/browser/default.pt @@ -59,4 +59,9 @@ + +

Menu

+
+ + diff --git a/wiki/browser/view.py b/wiki/browser/view.py index 23e6284..616e68f 100644 --- a/wiki/browser/view.py +++ b/wiki/browser/view.py @@ -34,6 +34,12 @@ class WikiBaseView(object): default_template = ViewPageTemplateFile('default.pt') + @Lazy + def actions(self): + return dict(top=[], + portlet_left=[self.default_template.macros['navigation']], + portlet_right=[]) + class WikiManagerView(WikiBaseView): diff --git a/z2/README.txt b/z2/README.txt index 51f8a18..23eebf4 100644 --- a/z2/README.txt +++ b/z2/README.txt @@ -8,3 +8,13 @@ Supporting the Zope2 Environment for Zope3/ZTK-based Applications >>> from zope.publisher.browser import TestRequest +Views +===== + + >>> from zope.traversing.adapters import DefaultTraversable + >>> component.provideAdapter(DefaultTraversable, (object,)) + + >>> from cybertools.z2.browser.view import BaseView + >>> view = BaseView(object(), TestRequest()) + + >>> html = view() diff --git a/z2/browser/generic.pt b/z2/browser/generic.pt deleted file mode 100644 index 01755ca..0000000 --- a/z2/browser/generic.pt +++ /dev/null @@ -1,14 +0,0 @@ - - - - - -
- -
- - - - -
diff --git a/z2/browser/view.py b/z2/browser/view.py index baeceae..bbda997 100644 --- a/z2/browser/view.py +++ b/z2/browser/view.py @@ -22,51 +22,23 @@ Base classes for views. $Id$ """ -from zope.app.pagetemplate import ViewPageTemplateFile -from zope.cachedescriptors.property import Lazy -from zope import component from Products.Five import BrowserView -#from Products.Five.browser.pagetemplatefile import PageTemplateFile + +from cybertools.view.browser.view import BaseView, GenericView -generic_page = ViewPageTemplateFile('generic.pt') -view_macros = ViewPageTemplateFile('view_macros.pt') +class BaseView(BrowserView, BaseView): - -class BaseView(BrowserView): - - index = generic_page - default_template = None # specify in subclass - - def __call__(self): - return self.index(self) - - def getMainMacro(self): - return view_macros.macros['main'] - - def getDefaultTemplate(self): - return self.default_template - - def getContentMacro(self): - return self.getDefaultTemplate().macros[self.content_renderer] + resource_prefix = '/++resource++' # generic views for use with generic persistent objects with type-based adapters +# (not used at the moment - obsolete?) -class GenericView(BaseView): - - name = 'index_html' - - @Lazy - def object(self): - return self.context.typeInterface(self.context) - - @Lazy - def objectView(self): - return component.getMultiAdapter((self.object, self.request), name=self.name) +class GenericView(BaseView, GenericView): def __call__(self): - return self.objectView() + return GenericView.__call__(self) class GenericAddForm(GenericView): diff --git a/z2/browser/view_macros.pt b/z2/browser/view_macros.pt deleted file mode 100644 index 839b04e..0000000 --- a/z2/browser/view_macros.pt +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - -
-

Top Bar

-
- -
- Content -
- -
-

Footer

-
- - - - -
diff --git a/z2/tests.py b/z2/tests.py index 78feeeb..414d660 100755 --- a/z2/tests.py +++ b/z2/tests.py @@ -9,15 +9,24 @@ $Id$ import unittest, doctest from zope.testing.doctestunit import DocFileSuite +try: + from Products.Five import BrowserView + ignore = False +except ImportError: + BrowserView = None + ignore = True + class Test(unittest.TestCase): - "Basic tests for the wiki package." + "Basic tests for the z2 package." def testBasicStuff(self): pass def test_suite(): + if ignore: + return unittest.TestSuite(()) flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS return unittest.TestSuite(( unittest.makeSuite(Test),