[Checkins] SVN: grokapps/Webpage/ Adding my example application
that demonstrates the use of layers in Grok
Peter Bengtsson
zope at peterbe.com
Sun May 4 13:02:33 EDT 2008
Log message for revision 86409:
Adding my example application that demonstrates the use of layers in Grok
Changed:
A grokapps/Webpage/
A grokapps/Webpage/buildout.cfg
A grokapps/Webpage/setup.py
A grokapps/Webpage/src/
A grokapps/Webpage/src/webpage/
A grokapps/Webpage/src/webpage/__init__.py
A grokapps/Webpage/src/webpage/app.py
A grokapps/Webpage/src/webpage/app.py.0
A grokapps/Webpage/src/webpage/app_templates/
A grokapps/Webpage/src/webpage/app_templates/about.pt
A grokapps/Webpage/src/webpage/app_templates/headerfooter.pt
A grokapps/Webpage/src/webpage/app_templates/index.pt
A grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt
A grokapps/Webpage/src/webpage/app_templates/mobileindex.pt
A grokapps/Webpage/src/webpage/configure.zcml
A grokapps/Webpage/src/webpage/ftesting.zcml
A grokapps/Webpage/src/webpage/static/
A grokapps/Webpage/src/webpage/static/logo.png
A grokapps/Webpage/src/webpage/static/mobile.css
A grokapps/Webpage/src/webpage/static/screen.css
A grokapps/Webpage/src/webpage/static/style.css
A grokapps/Webpage/src/webpage/testing.py
-=-
Added: grokapps/Webpage/buildout.cfg
===================================================================
--- grokapps/Webpage/buildout.cfg (rev 0)
+++ grokapps/Webpage/buildout.cfg 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,66 @@
+[buildout]
+develop = .
+parts = app data zopectl i18n test
+find-links = http://download.zope.org/distribution/
+eggs-directory = /home/peterbe/buildout-eggs
+newest = false
+extends= http://grok.zope.org/releaseinfo/grok-0.12.cfg
+versions = versions
+
+[app]
+recipe = zc.zope3recipes>=0.5.3:application
+eggs = Webpage
+site.zcml = <include package="webpage" />
+ <include package="zope.app.twisted" />
+
+ <configure i18n_domain="webpage">
+ <unauthenticatedPrincipal id="zope.anybody"
+ title="Unauthenticated User" />
+ <unauthenticatedGroup id="zope.Anybody"
+ title="Unauthenticated Users" />
+ <authenticatedGroup id="zope.Authenticated"
+ title="Authenticated Users" />
+ <everybodyGroup id="zope.Everybody"
+ title="All Users" />
+ <principal id="zope.manager"
+ title="Manager"
+ login="admin"
+ password_manager="Plain Text"
+ password="admin"
+ />
+
+ <!-- Replace the following directive if you don't want
+ public access -->
+ <grant permission="zope.View"
+ principal="zope.Anybody" />
+ <grant permission="zope.app.dublincore.view"
+ principal="zope.Anybody" />
+
+ <role id="zope.Manager" title="Site Manager" />
+ <role id="zope.Member" title="Site Member" />
+ <grantAll role="zope.Manager" />
+ <grant role="zope.Manager"
+ principal="zope.manager" />
+ </configure>
+
+[data]
+recipe = zc.recipe.filestorage
+
+# this section named so that the start/stop script is called bin/zopectl
+[zopectl]
+recipe = zc.zope3recipes:instance
+application = app
+zope.conf = ${data:zconfig}
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = Webpage
+defaults = ['--tests-pattern', '^f?tests$', '-v']
+
+# this section named so that the i18n scripts are called bin/i18n...
+[i18n]
+recipe = lovely.recipe:i18n
+package = webpage
+domain = webpage
+location = src/webpage
+output = locales
Added: grokapps/Webpage/setup.py
===================================================================
--- grokapps/Webpage/setup.py (rev 0)
+++ grokapps/Webpage/setup.py 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,28 @@
+from setuptools import setup, find_packages
+
+version = '0.0'
+
+setup(name='Webpage',
+ version=version,
+ description="",
+ long_description="""\
+""",
+ # Get strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+ classifiers=[],
+ keywords="",
+ author="",
+ author_email="",
+ url="",
+ license="",
+ package_dir={'': 'src'},
+ packages=find_packages('src'),
+ include_package_data=True,
+ zip_safe=False,
+ install_requires=['setuptools',
+ 'grok',
+ # Add extra requirements here
+ ],
+ entry_points="""
+ # Add entry points here
+ """,
+ )
Added: grokapps/Webpage/src/webpage/__init__.py
===================================================================
--- grokapps/Webpage/src/webpage/__init__.py (rev 0)
+++ grokapps/Webpage/src/webpage/__init__.py 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1 @@
+# this directory is a package
Added: grokapps/Webpage/src/webpage/app.py
===================================================================
--- grokapps/Webpage/src/webpage/app.py (rev 0)
+++ grokapps/Webpage/src/webpage/app.py 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,47 @@
+import grok
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+##
+## The application
+##
+
+class Webpage(grok.Application, grok.Container):
+ pass
+
+#
+# Views for this application
+#
+
+class Index(grok.View):
+ pass # see app_templates/index.pt
+
+class About(grok.View):
+ pass
+
+class HeaderFooter(grok.View):
+ pass
+
+
+
+##
+## The mobile layer
+##
+
+
+class MobileLayer(IDefaultBrowserLayer):
+ pass
+
+class MobileSkin(grok.Skin):
+ grok.name('mobile') # optional
+ grok.layer(MobileLayer)
+
+#
+# Views in this layer
+#
+
+class MobileHeaderFooter(grok.View):
+ grok.name('headerfooter') # important
+ grok.layer(MobileLayer)
+
+
+
Added: grokapps/Webpage/src/webpage/app.py.0
===================================================================
--- grokapps/Webpage/src/webpage/app.py.0 (rev 0)
+++ grokapps/Webpage/src/webpage/app.py.0 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,46 @@
+import grok
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+##
+## The application
+##
+
+class Webpage(grok.Application, grok.Container):
+ pass
+
+#
+# Views for this application
+#
+
+class Index(grok.View):
+ pass # see app_templates/index.pt
+
+class About(grok.View):
+ pass
+
+class HeaderFooter(grok.View):
+ pass
+
+
+
+##
+## The mobile layer
+##
+
+
+class MobileLayer(IDefaultBrowserLayer):
+ pass
+
+class MobileSkin(grok.Skin):
+ grok.name('mobile') # optional
+ grok.layer(MobileLayer)
+
+#
+# Views in this layer
+#
+
+class MobileHeaderFooter(grok.View):
+ grok.name('headerfooter') # important
+ grok.layer(MobileLayer)
+
+
Added: grokapps/Webpage/src/webpage/app_templates/about.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/about.pt (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/about.pt 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,9 @@
+<html metal:use-macro="context/@@headerfooter/macros/standard">
+<div metal:fill-slot="content">
+ <h3>About</h3>
+
+ <p>This is an example Grok application that shows the magic of layers
+ and what they can be used for.</p>
+
+</div>
+</html>
Added: grokapps/Webpage/src/webpage/app_templates/headerfooter.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/headerfooter.pt (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/headerfooter.pt 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,41 @@
+<metal:block define-macro="standard"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Web page</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=utf-8" />
+ <link rel="stylesheet" type="text/css"
+ tal:attributes="href static/style.css" />
+ <link rel="stylesheet" type="text/css" media="screen"
+ tal:attributes="href static/screen.css" />
+ <style metal:define-slot="extracss" tal:omit-tag=""></style>
+</head>
+<body>
+<metal:block define-slot="body">
+<div id="header">
+ <metal:block define-slot="header">
+ <h1><span>Web page</span></h1>
+ <hr />
+ </metal:block>
+</div>
+
+<div id="content">
+ <metal:block define-slot="content">
+ walk all over me
+ </metal:block>
+</div>
+
+<div id="footer">
+ <metal:block define-slot="footer">
+ <p>© Grok.
+ <a href="#">Switch to normal web version</a>
+ </p>
+ </metal:block>
+</div>
+
+</metal:block>
+<script metal:define-slot="extrajs" tal:omit-tag=""></script>
+</body>
+</html>
+</metal:block>
\ No newline at end of file
Added: grokapps/Webpage/src/webpage/app_templates/index.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/index.pt (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/index.pt 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,8 @@
+<html metal:use-macro="context/@@headerfooter/macros/standard">
+<div metal:fill-slot="content">
+ <h2>Welcome to Web page</h2>
+
+ <p>This is the front page for the Web page.</p>
+
+</div>
+</html>
Added: grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/mobileheaderfooter.pt 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,42 @@
+<metal:block define-macro="standard"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>Web page (Mobile)</title>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=utf-8" />
+ <link rel="stylesheet" type="text/css"
+ tal:attributes="href static/style.css" />
+ <link rel="stylesheet" type="text/css"
+ tal:attributes="href static/mobile.css" />
+ <style metal:define-slot="extracss" tal:omit-tag=""></style>
+</head>
+<body>
+<metal:block define-slot="body">
+<div id="header">
+ <metal:block define-slot="header">
+ <h2>Web page</h2>
+ <hr />
+ </metal:block>
+</div>
+
+<div id="content">
+ <metal:block define-slot="content">
+ walk all over me
+ </metal:block>
+</div>
+
+<div id="footer">
+ <metal:block define-slot="footer">
+ <p>© Grok.<br />
+ You are currently using the mobile version of this page.
+ <a href="#" tal:attributes="href python:view.url().replace('++skin++mobile/','')">Switch to normal web version</a>
+ </p>
+ </metal:block>
+</div>
+
+</metal:block>
+<script metal:define-slot="extrajs" tal:omit-tag=""></script>
+</body>
+</html>
+</metal:block>
\ No newline at end of file
Added: grokapps/Webpage/src/webpage/app_templates/mobileindex.pt
===================================================================
--- grokapps/Webpage/src/webpage/app_templates/mobileindex.pt (rev 0)
+++ grokapps/Webpage/src/webpage/app_templates/mobileindex.pt 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,8 @@
+<html metal:use-macro="context/@@headerfooter/macros/standard">
+<div metal:fill-slot="content">
+ <h2>Mobile Web page</h2>
+
+ <p>Now with mobile specific front end.</p>
+
+</div>
+</html>
Added: grokapps/Webpage/src/webpage/configure.zcml
===================================================================
--- grokapps/Webpage/src/webpage/configure.zcml (rev 0)
+++ grokapps/Webpage/src/webpage/configure.zcml 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,6 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+ <include package="grok" />
+ <includeDependencies package="." />
+ <grok:grok package="." />
+</configure>
Added: grokapps/Webpage/src/webpage/ftesting.zcml
===================================================================
--- grokapps/Webpage/src/webpage/ftesting.zcml (rev 0)
+++ grokapps/Webpage/src/webpage/ftesting.zcml 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,35 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ i18n_domain="webpage"
+ package="webpage"
+ >
+
+ <include package="grok" />
+ <include package="webpage" />
+
+ <!-- Typical functional testing security setup -->
+ <securityPolicy
+ component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+ />
+
+ <unauthenticatedPrincipal
+ id="zope.anybody"
+ title="Unauthenticated User"
+ />
+ <grant
+ permission="zope.View"
+ principal="zope.anybody"
+ />
+
+ <principal
+ id="zope.mgr"
+ title="Manager"
+ login="mgr"
+ password="mgrpw"
+ />
+
+ <role id="zope.Manager" title="Site Manager" />
+ <grantAll role="zope.Manager" />
+ <grant role="zope.Manager" principal="zope.mgr" />
+
+</configure>
Added: grokapps/Webpage/src/webpage/static/logo.png
===================================================================
(Binary files differ)
Property changes on: grokapps/Webpage/src/webpage/static/logo.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: grokapps/Webpage/src/webpage/static/mobile.css
===================================================================
--- grokapps/Webpage/src/webpage/static/mobile.css (rev 0)
+++ grokapps/Webpage/src/webpage/static/mobile.css 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,2 @@
+#content {
+}
\ No newline at end of file
Added: grokapps/Webpage/src/webpage/static/screen.css
===================================================================
--- grokapps/Webpage/src/webpage/static/screen.css (rev 0)
+++ grokapps/Webpage/src/webpage/static/screen.css 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,16 @@
+#content {
+ padding:10px;
+ background-color:#efefef;
+}
+
+#header h1 {
+ width: 419px;
+ height: 73px;
+ background-image: url(logo.png);
+ }
+#header h1 span {
+ display: block;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ }
\ No newline at end of file
Added: grokapps/Webpage/src/webpage/static/style.css
===================================================================
--- grokapps/Webpage/src/webpage/static/style.css (rev 0)
+++ grokapps/Webpage/src/webpage/static/style.css 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,6 @@
+body {
+ font-family:"Lucida Grande",Geneva,Arial,Verdana,sans-serif;
+}
+h1, h2, h3, h4 {
+ color:#333333;
+}
\ No newline at end of file
Added: grokapps/Webpage/src/webpage/testing.py
===================================================================
--- grokapps/Webpage/src/webpage/testing.py (rev 0)
+++ grokapps/Webpage/src/webpage/testing.py 2008-05-04 17:02:33 UTC (rev 86409)
@@ -0,0 +1,7 @@
+import os.path
+import webpage
+from zope.app.testing.functional import ZCMLLayer
+
+ftesting_zcml = os.path.join(
+ os.path.dirname(webpage.__file__), 'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer')
More information about the Checkins
mailing list