provide embedding of JavaScript, esp. Dojo
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3023 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
4fe222a015
commit
e2e8370cf4
6 changed files with 127 additions and 12 deletions
|
@ -1,24 +1,42 @@
|
||||||
<!-- $Id$ -->
|
<!-- $Id$ -->
|
||||||
|
|
||||||
<configure
|
<configure
|
||||||
xmlns="http://namespaces.zope.org/browser"
|
xmlns:browser="http://namespaces.zope.org/browser"
|
||||||
xmlns:zope="http://namespaces.zope.org/zope"
|
xmlns:zope="http://namespaces.zope.org/zope">
|
||||||
i18n_domain="zope">
|
|
||||||
|
|
||||||
<resourceDirectory name="ajax.dojo" directory="dojo" />
|
<!-- resources -->
|
||||||
|
|
||||||
<page
|
<browser:resourceDirectory name="ajax.dojo" directory="dojo" />
|
||||||
|
|
||||||
|
<!-- layouts -->
|
||||||
|
|
||||||
|
<zope:utility
|
||||||
|
component="cybertools.ajax.dojo.layout.dojo"
|
||||||
|
provides="cybertools.composer.layout.interfaces.ILayout"
|
||||||
|
name="js.dojo" />
|
||||||
|
|
||||||
|
<zope:utility
|
||||||
|
component="cybertools.ajax.dojo.layout.dojoRequire"
|
||||||
|
provides="cybertools.composer.layout.interfaces.ILayout"
|
||||||
|
name="js.dojo.require" />
|
||||||
|
|
||||||
|
<zope:adapter
|
||||||
|
for="*"
|
||||||
|
name="dojo"
|
||||||
|
factory="cybertools.ajax.dojo.layout.DojoLayoutInstance" />
|
||||||
|
|
||||||
|
<!-- views -->
|
||||||
|
|
||||||
|
<browser:page
|
||||||
for="*"
|
for="*"
|
||||||
name="ajax.dojo"
|
name="ajax.dojo"
|
||||||
template="macros.pt"
|
template="macros.pt"
|
||||||
permission="zope.Public"
|
permission="zope.Public" />
|
||||||
/>
|
|
||||||
|
|
||||||
<page
|
<browser:page
|
||||||
for="*"
|
for="*"
|
||||||
name="ajax.inner.html"
|
name="ajax.inner.html"
|
||||||
template="../innerHtml.pt"
|
template="../innerHtml.pt"
|
||||||
permission="zope.ManageContent"
|
permission="zope.ManageContent" />
|
||||||
/>
|
|
||||||
|
|
||||||
</configure>
|
</configure>
|
||||||
|
|
53
ajax/dojo/layout.py
Normal file
53
ajax/dojo/layout.py
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2008 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
|
||||||
|
#
|
||||||
|
"""
|
||||||
|
Embed Dojo using the cybertools.composer.layout procedure.
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
"""
|
||||||
|
|
||||||
|
from cStringIO import StringIO
|
||||||
|
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||||
|
from zope.cachedescriptors.property import Lazy
|
||||||
|
|
||||||
|
from cybertools.browser.renderer import RendererFactory
|
||||||
|
from cybertools.composer.layout.base import Layout, LayoutInstance
|
||||||
|
|
||||||
|
dojoRenderers = RendererFactory(ViewPageTemplateFile('macros.pt'))
|
||||||
|
|
||||||
|
|
||||||
|
dojo = Layout('js.dojo', 'page.js', renderer=dojoRenderers.dojo,
|
||||||
|
instanceName='dojo', order=0)
|
||||||
|
|
||||||
|
dojoRequire = Layout('js.dojo.require', 'page.js',
|
||||||
|
renderer=dojoRenderers.dojo_require,
|
||||||
|
instanceName='dojo', order=50)
|
||||||
|
|
||||||
|
|
||||||
|
class DojoLayoutInstance(LayoutInstance):
|
||||||
|
|
||||||
|
djConfig = "parseOnLoad: true, usePlainJson: true, locale: 'de'"
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def content(self):
|
||||||
|
djInfo = self.view.request.annotations.get('ajax.dojo', {})
|
||||||
|
packages = djInfo.get('requirements', set())
|
||||||
|
out = StringIO()
|
||||||
|
for p in packages:
|
||||||
|
out.write('dojo.require(%s); ' % p)
|
||||||
|
return out.getvalue()
|
|
@ -1,8 +1,24 @@
|
||||||
<metal:def define-macro="main">
|
<!-- $Id$ -->
|
||||||
|
|
||||||
|
<metal:def define-macro="main">
|
||||||
<script type="text/javascript" src="ajax.dojo/dojo.js"
|
<script type="text/javascript" src="ajax.dojo/dojo.js"
|
||||||
tal:attributes="src context/++resource++ajax.dojo/dojo/dojo.js;
|
tal:attributes="src context/++resource++ajax.dojo/dojo/dojo.js;
|
||||||
djConfig macro/djConfig|nothing">
|
djConfig macro/djConfig|nothing">
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</metal:def>
|
</metal:def>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:js define-macro="dojo">
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="/@@/ajax.dojo/dojo/dojo.js"
|
||||||
|
tal:attributes="djConfig view/context/djConfig|nothing">
|
||||||
|
</script>
|
||||||
|
</metal:js>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:js define-macro="dojo_require"
|
||||||
|
tal:define="layout view/context/template">
|
||||||
|
<script type="text/javascript" language="JavaScript"
|
||||||
|
tal:content="view/context/content">
|
||||||
|
</script>
|
||||||
|
</metal:js>
|
||||||
|
|
|
@ -206,6 +206,7 @@ class ICategory(Interface):
|
||||||
shops = Attribute(u'The shops providing this category.')
|
shops = Attribute(u'The shops providing this category.')
|
||||||
accessories = Attribute(u'Accessories for this category.')
|
accessories = Attribute(u'Accessories for this category.')
|
||||||
|
|
||||||
|
|
||||||
# customers
|
# customers
|
||||||
|
|
||||||
class ICustomer(Interface):
|
class ICustomer(Interface):
|
||||||
|
|
|
@ -70,6 +70,13 @@ class Layout(Template):
|
||||||
self.regionName = regionName
|
self.regionName = regionName
|
||||||
for k, v in kw.items():
|
for k, v in kw.items():
|
||||||
setattr(self, k, v)
|
setattr(self, k, v)
|
||||||
|
#self.register()
|
||||||
|
|
||||||
|
def register(self):
|
||||||
|
existing = component.queryUtility(ILayout, name=self.name)
|
||||||
|
if existing:
|
||||||
|
raise ValueError('Layout %s has already been registered.' % self.name)
|
||||||
|
component.provideUtility(self, provides=ILayout, name=self.name)
|
||||||
|
|
||||||
|
|
||||||
class LayoutInstance(object):
|
class LayoutInstance(object):
|
||||||
|
|
|
@ -14,6 +14,10 @@
|
||||||
<metal:css use-macro="view/renderer" />
|
<metal:css use-macro="view/renderer" />
|
||||||
</tal:css>
|
</tal:css>
|
||||||
|
|
||||||
|
<tal:js repeat="view view/layouts/js">
|
||||||
|
<metal:js use-macro="view/renderer" />
|
||||||
|
</tal:js>
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico"
|
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico"
|
||||||
tal:attributes="href string:${view/page/resourceBase}${layout/favicon}" />
|
tal:attributes="href string:${view/page/resourceBase}${layout/favicon}" />
|
||||||
|
|
||||||
|
@ -37,6 +41,22 @@
|
||||||
</metal:css>
|
</metal:css>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:js define-macro="js"
|
||||||
|
tal:define="layout view/context/template">
|
||||||
|
<script type="text/javascript"
|
||||||
|
tal:attributes="src string:${view/page/resourceBase}${layout/resource});">
|
||||||
|
</script>
|
||||||
|
</metal:js>
|
||||||
|
|
||||||
|
|
||||||
|
<metal:js define-macro="js-execute"
|
||||||
|
tal:define="layout view/context/template">
|
||||||
|
<script type="text/javascript" language="JavaScript"
|
||||||
|
tal:content="layout/content">
|
||||||
|
</script>
|
||||||
|
</metal:js>
|
||||||
|
|
||||||
|
|
||||||
<metal:image define-macro="image"
|
<metal:image define-macro="image"
|
||||||
tal:define="layout view/context/template">
|
tal:define="layout view/context/template">
|
||||||
<img tal:attributes="src string:${view/page/resourceBase}${layout/src};
|
<img tal:attributes="src string:${view/page/resourceBase}${layout/src};
|
||||||
|
|
Loading…
Add table
Reference in a new issue