[Checkins] SVN: z3ext.skintool/trunk/ - Added z3ext:skin directive
Nikolay Kim
fafhrd at datacom.kz
Thu Nov 20 15:59:33 EST 2008
Log message for revision 93193:
- Added z3ext:skin directive
- API refactored
- Added translations: nl, ru
Changed:
U z3ext.skintool/trunk/CHANGES.txt
U z3ext.skintool/trunk/buildout.cfg
A z3ext.skintool/trunk/scripts/
A z3ext.skintool/trunk/scripts/i18nall.in
A z3ext.skintool/trunk/scripts/i18ncheck.in
U z3ext.skintool/trunk/setup.py
U z3ext.skintool/trunk/src/z3ext/skintool/README.txt
A z3ext.skintool/trunk/src/z3ext/skintool/configlet.pt
A z3ext.skintool/trunk/src/z3ext/skintool/configlet.py
U z3ext.skintool/trunk/src/z3ext/skintool/configure.zcml
A z3ext.skintool/trunk/src/z3ext/skintool/generations/
A z3ext.skintool/trunk/src/z3ext/skintool/generations/__init__.py
A z3ext.skintool/trunk/src/z3ext/skintool/generations/install.py
U z3ext.skintool/trunk/src/z3ext/skintool/interfaces.py
A z3ext.skintool/trunk/src/z3ext/skintool/locales/
A z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/
A z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/
A z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.mo
A z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.po
A z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/
A z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/
A z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.mo
A z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.po
A z3ext.skintool/trunk/src/z3ext/skintool/locales/z3ext.skintool.pot
U z3ext.skintool/trunk/src/z3ext/skintool/meta.zcml
U z3ext.skintool/trunk/src/z3ext/skintool/tool.py
U z3ext.skintool/trunk/src/z3ext/skintool/vocabulary.py
U z3ext.skintool/trunk/src/z3ext/skintool/zcml.py
-=-
Modified: z3ext.skintool/trunk/CHANGES.txt
===================================================================
--- z3ext.skintool/trunk/CHANGES.txt 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/CHANGES.txt 2008-11-20 20:59:33 UTC (rev 93193)
@@ -2,6 +2,16 @@
CHANGES
=======
+1.1.0 (2008-11-??)
+------------------
+
+- Added z3ext:skin directive
+
+- API refactored
+
+- Added translations: nl, ru
+
+
1.0.2 (2008-08-07)
------------------
Modified: z3ext.skintool/trunk/buildout.cfg
===================================================================
--- z3ext.skintool/trunk/buildout.cfg 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/buildout.cfg 2008-11-20 20:59:33 UTC (rev 93193)
@@ -1,20 +1,53 @@
[buildout]
develop = .
-parts = test coverage-test coverage-report
+parts = test coverage-test coverage-report i18n i18nall i18ncheck i18ndude
[test]
recipe = zc.recipe.testrunner
eggs = z3ext.skintool [test]
-
[coverage-test]
recipe = zc.recipe.testrunner
eggs = z3ext.skintool [test]
defaults = ['--coverage', '../../coverage']
-
[coverage-report]
recipe = zc.recipe.egg
eggs = z3c.coverage
scripts = coverage=coverage-report
arguments = ('coverage', 'coverage/report')
+
+[i18n]
+recipe = z3c.recipe.i18n:i18n
+packages = z3ext.skintool
+domain = z3ext.skintool
+output = ${buildout:directory}/src/z3ext/skintool/locales
+eggs = z3ext.skintool [test]
+zcml =
+ <configure xmlns:zcml="http://namespaces.zope.org/zcml"
+ xmlns:browser="http://namespaces.zope.org/browser">
+ <include package="zope.component" file="meta.zcml" />
+ <include package="zope.app.component" file="meta.zcml" />
+ <include package="zope.app.security" file="meta.zcml" />
+ <include package="zope.app.security" />
+ <include package="zope.app.zcmlfiles" />
+
+ <include package="z3c.autoinclude" file="meta.zcml" />
+ <include package="z3ext.skintool" file="meta.zcml" />
+ <include package="z3ext.skintool" />
+ </configure>
+
+[i18nall]
+recipe = buildout_script
+template_dir = ${buildout:directory}/scripts/
+template = i18nall.in
+
+[i18ncheck]
+recipe = buildout_script
+template_dir = ${buildout:directory}/scripts/
+template = i18ncheck.in
+
+[i18ndude]
+unzip = true
+recipe = zc.recipe.egg
+eggs = i18ndude
Added: z3ext.skintool/trunk/scripts/i18nall.in
===================================================================
--- z3ext.skintool/trunk/scripts/i18nall.in (rev 0)
+++ z3ext.skintool/trunk/scripts/i18nall.in 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+update_egg()
+{
+ echo "Start update $@"
+
+ bin/i18nextract && \
+ bin/i18nmergeall && \
+ msgfmt ${1}/locales/nl/LC_MESSAGES/${2}.po -o ${1}/locales/nl/LC_MESSAGES/${2}.mo --no-hash && \
+ msgfmt ${1}/locales/ru/LC_MESSAGES/${2}.po -o ${1}/locales/ru/LC_MESSAGES/${2}.mo --no-hash
+}
+
+update_egg src/z3ext/skintool z3ext.skintool;
Property changes on: z3ext.skintool/trunk/scripts/i18nall.in
___________________________________________________________________
Added: svn:executable
+ *
Added: z3ext.skintool/trunk/scripts/i18ncheck.in
===================================================================
--- z3ext.skintool/trunk/scripts/i18ncheck.in (rev 0)
+++ z3ext.skintool/trunk/scripts/i18ncheck.in 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Startup or shutdown buildbot
+
+bin/i18ndude find-untranslated ./ | grep z3ext.skintool | less
Property changes on: z3ext.skintool/trunk/scripts/i18ncheck.in
___________________________________________________________________
Added: svn:executable
+ *
Modified: z3ext.skintool/trunk/setup.py
===================================================================
--- z3ext.skintool/trunk/setup.py 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/setup.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -21,7 +21,7 @@
def read(*rnames):
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-version = '1.0.3dev'
+version = '1.1.0dev'
setup(name='z3ext.skintool',
@@ -57,12 +57,13 @@
'zope.proxy',
'zope.component',
'zope.interface',
- 'zope.i18nmessageid',
- 'zope.lifecycleevent',
'zope.security',
'zope.configuration',
+ 'zope.lifecycleevent',
'zope.app.component',
'zope.app.publication',
+ 'zope.i18nmessageid',
+ 'zope.i18n',
'z3c.autoinclude',
'z3ext.controlpanel',
],
Modified: z3ext.skintool/trunk/src/z3ext/skintool/README.txt
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/README.txt 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/README.txt 2008-11-20 20:59:33 UTC (rev 93193)
@@ -17,18 +17,31 @@
>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()
-Now let's define layer
+Now let's define layer and skin
>>> from zope import interface
+ >>> class IMySkin(interface.Interface):
+ ... pass
>>> class IMyLayer(interface.Interface):
... pass
-Before we can use IMyLayer we should register it in local registry
+Before we can use IMySkin and IMyLayer we should register it in local registry
- >>> zcml.layerDirective(IMyLayer, u'mylayer', u'My layer', '', ())
+ >>> zcml.skinDirective(IMySkin, u'myskin', u'My skin', '', ())
+ >>> zcml.layerDirective(IMyLayer, u'mylayer', u'My layer', '')
-Now layer should be listed in vocabulary.
+Now skin and layer should be listed in vocabulary.
+ >>> from z3ext.skintool.vocabulary import SkinsVocabulary
+ >>> voc = SkinsVocabulary()(site)
+ >>> term = voc.getTerm(IMySkin)
+ >>> term.value == u'myskin'
+ True
+ >>> term.title == 'My skin'
+ True
+ >>> term.token == u'myskin'
+ True
+
>>> from z3ext.skintool.vocabulary import LayersVocabulary
>>> voc = LayersVocabulary()(site)
>>> term = voc.getTerm(IMyLayer)
@@ -49,6 +62,9 @@
>>> threadServiceSubscriber(site, BeforeTraverseEvent(site, request))
+ >>> IMySkin.providedBy(request)
+ False
+
>>> IMyLayer.providedBy(request)
False
@@ -60,18 +76,21 @@
Let's configure skin tool
>>> tool = component.getUtility(interfaces.ISkinTool)
- >>> tool.user_layers = [u'mylayer']
+ >>> tool.skin = u'myskin'
+ >>> tool.layers = [u'mylayer']
>>> skinToolModified()
-
+
Let's try again
>>> threadServiceSubscriber(site, BeforeTraverseEvent(site, request))
+ >>> IMySkin.providedBy(request)
+ True
>>> IMyLayer.providedBy(request)
True
Change layers config
- >>> tool.user_layers = []
+ >>> tool.layers = []
>>> skinToolModified()
>>> threadServiceSubscriber(site, BeforeTraverseEvent(site, request))
@@ -79,17 +98,17 @@
False
-Some layers can depends on other layers
+Skin can depends on other layers
- >>> class IMyLayer2(interface.Interface):
+ >>> class IMySkin2(interface.Interface):
... pass
- >>> zcml.layerDirective(IMyLayer2, u'mylayer2', u'My layer2', '', (IMyLayer,))
- >>> tool.user_layers = [u'mylayer2']
+ >>> zcml.skinDirective(IMySkin2, u'myskin2', u'My skin2', '', (IMyLayer,))
+ >>> tool.skin = u'myskin2'
>>> skinToolModified()
>>> threadServiceSubscriber(site, BeforeTraverseEvent(site, request))
- >>> IMyLayer2.providedBy(request)
+ >>> IMySkin2.providedBy(request)
True
>>> IMyLayer.providedBy(request)
True
@@ -102,7 +121,7 @@
We have to register utility IDefaultLayer
>>> component.provideUtility(IDefaultLayer, interfaces.IDefaultLayer, 'default')
- >>> tool.user_layers = [u'mylayer']
+ >>> tool.layers = [u'mylayer']
>>> skinToolModified()
>>> threadServiceSubscriber(site, BeforeTraverseEvent(site, request))
@@ -149,18 +168,18 @@
>>> context = xmlconfig.string("""
... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
... xmlns="http://namespaces.zope.org/zope" i18n_domain="z3ext">
- ... <z3ext:layer
- ... name="mylayer4"
- ... layer="z3ext.skintool.README.IMyLayer2"
- ... title="My zcml layer4"
+ ... <z3ext:skin
+ ... name="myskin4"
+ ... layer="z3ext.skintool.README.IMySkin2"
+ ... title="My zcml skin4"
... require="z3ext.skintool.README.IMyLayer" />
... </configure>""", context)
- >>> tool.user_layers = [u'mylayer2']
+ >>> tool.skin = u'myskin4'
>>> skinToolModified()
>>> threadServiceSubscriber(site, BeforeTraverseEvent(site, request))
- >>> IMyLayer2.providedBy(request)
+ >>> IMySkin2.providedBy(request)
True
>>> IMyLayer.providedBy(request)
True
Added: z3ext.skintool/trunk/src/z3ext/skintool/configlet.pt
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/configlet.pt (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/configlet.pt 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,36 @@
+<tal:block i18n:domain="z3ext.skintool">
+ <h1 tal:content="context/__title__"></h1>
+ <div class="z-page-description" tal:content="context/__description__"></div>
+
+ <form action="index.html" method="post">
+ <div class="z-frame">
+ <h3 i18n:translate="">Skin</h3>
+ <div class="z-page-description" i18n:translate="">Please select portal skin.</div>
+ <div class="z-listing"
+ tal:repeat="item view/listSkins">
+ <input type="radio" name="skin"
+ tal:attributes="value item/name; checked item/selected" />
+ <tal:block content="item/title"/>
+ <p tal:content="item/description" />
+ </div>
+ </div>
+
+ <div class="z-frame">
+ <h3 i18n:translate="">Layers</h3>
+ <div class="z-page-description" i18n:translate="">Please select layers.</div>
+ <div class="z-listing"
+ tal:repeat="item view/listLayers">
+ <input type="checkbox" name="layers:list"
+ tal:attributes="value item/name; checked item/selected" />
+ <tal:block content="item/title"/>
+ <p tal:content="item/description" />
+ </div>
+ </div>
+
+ <div class="z-form-controls">
+ <hr />
+ <input type="submit" name="form.buttons.save" value="Save"
+ class="z-form-button" i18n:attributes="value" />
+ </div>
+ </form>
+</tal:block>
Added: z3ext.skintool/trunk/src/z3ext/skintool/configlet.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/configlet.py (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/configlet.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,71 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id: 2007-12-12 12:27:02Z fafhrd $
+"""
+from zope import event
+from zope.component import getUtility
+from zope.lifecycleevent import ObjectModifiedEvent
+
+from z3ext.skintool import tool
+from z3ext.skintool.interfaces import _, ISkinTool
+from z3ext.statusmessage.interfaces import IStatusMessage
+
+
+class SkintoolEditForm(object):
+
+ def listSkins(self):
+ skins = []
+ for skin, name, title, description, require \
+ in tool.skins_registry.values():
+ skins.append((title, name,
+ {'name': name,
+ 'title': title,
+ 'selected': self.tool.skin == name,
+ 'description': description}))
+ skins.sort()
+
+ skins.insert(0, ('', '',
+ {'name': '__no__',
+ 'title': _(u'No skin'),
+ 'selected': self.tool.skin == None,
+ 'description': u''}))
+ return [info for t, n, info in skins]
+
+ def listLayers(self):
+ layers = []
+ for layer, name, title, description in tool.layers_registry.values():
+ layers.append((title, name,
+ {'name': name,
+ 'title': title,
+ 'selected': name in self.tool.layers,
+ 'description': description}))
+ layers.sort()
+
+ return [info for t, n, info in layers]
+
+ def update(self):
+ self.tool = getUtility(ISkinTool)
+
+ if 'form.buttons.save' in self.request:
+ skin = self.request.get('skin', '__no__')
+ if skin == '__no__':
+ self.tool.skin = None
+ else:
+ self.tool.skin = skin
+
+ self.tool.layers = self.request.get('layers', [])
+ event.notify(ObjectModifiedEvent(self.tool))
+ IStatusMessage(self.request).add(_(u'Changes has been saved.'))
Modified: z3ext.skintool/trunk/src/z3ext/skintool/configure.zcml
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/configure.zcml 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/configure.zcml 2008-11-20 20:59:33 UTC (rev 93193)
@@ -1,7 +1,8 @@
<configure
xmlns="http://namespaces.zope.org/zope"
+ xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:z3ext="http://namespaces.zope.org/z3ext"
- i18n_domain="z3ext">
+ i18n_domain="z3ext.skintool">
<includeDependencies package="z3ext.skintool" />
@@ -12,7 +13,11 @@
<subscriber handler=".tool.skinToolModified" />
<utility
- name="z3ext skin layers"
+ name="z3ext skins"
+ factory=".vocabulary.SkinsVocabulary" />
+
+ <utility
+ name="z3ext layers"
factory=".vocabulary.LayersVocabulary" />
<z3ext:configlet
@@ -22,4 +27,20 @@
class=".tool.SkinTool"
schema=".interfaces.ISkinTool" />
+ <z3ext:pagelet
+ name="index.html"
+ for=".interfaces.ISkinTool"
+ template="configlet.pt"
+ class=".configlet.SkintoolEditForm"
+ permission="z3ext.Configure" />
+
+ <!-- translations -->
+ <i18n:registerTranslations directory="locales"/>
+
+ <!-- generations -->
+ <utility
+ name="z3ext.skintool"
+ provides="zope.app.generations.interfaces.ISchemaManager"
+ component=".generations.schemaManager" />
+
</configure>
Added: z3ext.skintool/trunk/src/z3ext/skintool/generations/__init__.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/generations/__init__.py (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/generations/__init__.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id: __init__.py 3799 2008-11-14 07:46:44Z fafhrd91 $
+"""
+from zope.app.generations.generations import SchemaManager
+
+schemaManager = SchemaManager(
+ minimum_generation=0,
+ generation=0,
+ package_name='z3ext.skintool.generations')
Added: z3ext.skintool/trunk/src/z3ext/skintool/generations/install.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/generations/install.py (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/generations/install.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,57 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id: install.py 3814 2008-11-14 10:40:03Z fafhrd91 $
+"""
+from zope import component
+from zope.app.component.interfaces import ISite
+from zope.app.component.hooks import getSite, setSite
+from zope.app.publication.zopepublication import ZopePublication
+
+from z3ext.skintool import tool
+from z3ext.skintool.interfaces import ISkinTool
+
+
+def evolve(context):
+ root = context.connection.root()[ZopePublication.root_name]
+
+ def findObjectsProviding(root):
+ if ISite.providedBy(root):
+ yield root
+
+ values = getattr(root, 'values', None)
+ if callable(values):
+ for subobj in values():
+ for match in findObjectsProviding(subobj):
+ yield match
+
+ for site in findObjectsProviding(root):
+ setSite(site)
+
+ skintool = component.getUtility(ISkinTool)
+ layers = skintool.data.get('user_layers')
+
+ if layers:
+ skin = None
+ ulayers = []
+ for layer in layers:
+ if layer in tool.skins_byname and skin is None:
+ skin = layer
+
+ if layer in tool.layers_byname:
+ ulayers.append(layer)
+
+ skintool.skin = skin
+ skintool.layers = ulayers
Modified: z3ext.skintool/trunk/src/z3ext/skintool/interfaces.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/interfaces.py 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/interfaces.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -18,7 +18,7 @@
from zope import schema, interface
from zope.i18nmessageid import MessageFactory
-_ = MessageFactory('z3ext')
+_ = MessageFactory('z3ext.skintool')
class ISkinable(interface.Interface):
@@ -42,10 +42,16 @@
class ISkinTool(interface.Interface):
""" skin tool, allow generate skin on the fly """
- user_layers = schema.List(
+ skin = schema.Choice(
+ title = _('Skin'),
+ description = _(u'Select portal skin.'),
+ vocabulary = "z3ext skins",
+ required = False)
+
+ layers = schema.List(
title = _(u'Layers'),
description = _(u'Select skin layers.'),
- value_type = schema.Choice(vocabulary = "z3ext skin layers"),
+ value_type = schema.Choice(vocabulary = "z3ext layers"),
default = [],
required = False)
Added: z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.mo
===================================================================
(Binary files differ)
Property changes on: z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.mo
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.po
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.po (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/locales/nl/LC_MESSAGES/z3ext.skintool.po 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,71 @@
+##############################################################################
+#
+# Copyright (c) 2003-2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+msgid ""
+msgstr ""
+"Project-Id-Version: Development/Unknown\n"
+"POT-Creation-Date: Fri Nov 21 02:52:22 2008\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Zope 3 Developers <zope3-dev at zope.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: zope/app/locales/extract.py\n"
+
+#: src/z3ext/skintool/configlet.pt:20
+msgid "Please select layers."
+msgstr ""
+
+#: src/z3ext/skintool/configlet.pt:32
+msgid "Save"
+msgstr ""
+
+#: src/z3ext/skintool/configlet.pt:8
+msgid "Please select portal skin."
+msgstr ""
+
+#: src/z3ext/skintool/configlet.py:42
+msgid "No skin"
+msgstr ""
+
+#: src/z3ext/skintool/configlet.py:71
+msgid "Changes has been saved."
+msgstr ""
+
+#: src/z3ext/skintool/configure.zcml:23
+msgid "Portal skin"
+msgstr ""
+
+#: src/z3ext/skintool/configure.zcml:23
+msgid "Portal skin configuration."
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:46
+#: src/z3ext/skintool/configlet.pt:7
+msgid "Skin"
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:47
+msgid "Select portal skin."
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:52
+#: src/z3ext/skintool/configlet.pt:19
+msgid "Layers"
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:53
+msgid "Select skin layers."
+msgstr ""
+
Added: z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.mo
===================================================================
(Binary files differ)
Property changes on: z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.mo
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.po
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.po (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/locales/ru/LC_MESSAGES/z3ext.skintool.po 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,71 @@
+##############################################################################
+#
+# Copyright (c) 2003-2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+msgid ""
+msgstr ""
+"Project-Id-Version: Development/Unknown\n"
+"POT-Creation-Date: Fri Nov 21 02:52:22 2008\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Nikolay Kim <fafhrd91 at gmail.com>\n"
+"Language-Team: Zope 3 Developers <zope3-dev at zope.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: zope/app/locales/extract.py\n"
+
+#: src/z3ext/skintool/configlet.pt:20
+msgid "Please select layers."
+msgstr "ÐÑбиÑиÑе Ñлои."
+
+#: src/z3ext/skintool/configlet.pt:32
+msgid "Save"
+msgstr "СоÑ
ÑаниÑÑ"
+
+#: src/z3ext/skintool/configlet.pt:8
+msgid "Please select portal skin."
+msgstr "ÐожалÑйÑÑа вÑбиÑиÑе Ñкин Ð´Ð»Ñ Ð¿Ð¾ÑÑала."
+
+#: src/z3ext/skintool/configlet.py:42
+msgid "No skin"
+msgstr "Ðез Ñкина"
+
+#: src/z3ext/skintool/configlet.py:71
+msgid "Changes has been saved."
+msgstr "ÐÐ·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑ
ÑаненÑ."
+
+#: src/z3ext/skintool/configure.zcml:23
+msgid "Portal skin"
+msgstr "ÐÑоÑмление поÑÑала"
+
+#: src/z3ext/skintool/configure.zcml:23
+msgid "Portal skin configuration."
+msgstr "ÐонÑигÑÑаÑÐ¸Ñ Ð¾ÑоÑÐ¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑала."
+
+#: src/z3ext/skintool/interfaces.py:46
+#: src/z3ext/skintool/configlet.pt:7
+msgid "Skin"
+msgstr "ÐÑоÑмление"
+
+#: src/z3ext/skintool/interfaces.py:47
+msgid "Select portal skin."
+msgstr "ÐÑбиÑиÑе оÑоÑмление поÑÑала"
+
+#: src/z3ext/skintool/interfaces.py:52
+#: src/z3ext/skintool/configlet.pt:19
+msgid "Layers"
+msgstr "Слои"
+
+#: src/z3ext/skintool/interfaces.py:53
+msgid "Select skin layers."
+msgstr "ÐÑбиÑиÑе Ñлои."
+
Added: z3ext.skintool/trunk/src/z3ext/skintool/locales/z3ext.skintool.pot
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/locales/z3ext.skintool.pot (rev 0)
+++ z3ext.skintool/trunk/src/z3ext/skintool/locales/z3ext.skintool.pot 2008-11-20 20:59:33 UTC (rev 93193)
@@ -0,0 +1,71 @@
+##############################################################################
+#
+# Copyright (c) 2003-2004 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+msgid ""
+msgstr ""
+"Project-Id-Version: Development/Unknown\n"
+"POT-Creation-Date: Fri Nov 21 03:00:39 2008\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: Zope 3 Developers <zope3-dev at zope.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: zope/app/locales/extract.py\n"
+
+#: src/z3ext/skintool/configlet.pt:20
+msgid "Please select layers."
+msgstr ""
+
+#: src/z3ext/skintool/configlet.pt:32
+msgid "Save"
+msgstr ""
+
+#: src/z3ext/skintool/configlet.pt:8
+msgid "Please select portal skin."
+msgstr ""
+
+#: src/z3ext/skintool/configlet.py:42
+msgid "No skin"
+msgstr ""
+
+#: src/z3ext/skintool/configlet.py:71
+msgid "Changes has been saved."
+msgstr ""
+
+#: src/z3ext/skintool/configure.zcml:23
+msgid "Portal skin"
+msgstr ""
+
+#: src/z3ext/skintool/configure.zcml:23
+msgid "Portal skin configuration."
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:46
+#: src/z3ext/skintool/configlet.pt:7
+msgid "Skin"
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:47
+msgid "Select portal skin."
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:52
+#: src/z3ext/skintool/configlet.pt:19
+msgid "Layers"
+msgstr ""
+
+#: src/z3ext/skintool/interfaces.py:53
+msgid "Select skin layers."
+msgstr ""
+
Modified: z3ext.skintool/trunk/src/z3ext/skintool/meta.zcml
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/meta.zcml 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/meta.zcml 2008-11-20 20:59:33 UTC (rev 93193)
@@ -5,6 +5,11 @@
<meta:directives namespace="http://namespaces.zope.org/z3ext">
<meta:directive
+ name="skin"
+ schema=".zcml.ISkinDirective"
+ handler=".zcml.skinDirectiveHandler" />
+
+ <meta:directive
name="layer"
schema=".zcml.ILayerDirective"
handler=".zcml.layerDirectiveHandler" />
Modified: z3ext.skintool/trunk/src/z3ext/skintool/tool.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/tool.py 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/tool.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -25,6 +25,8 @@
from interfaces import IDefaultLayer, IDefaultLayers, ISkinTool
+skins_byname = {}
+skins_registry = {}
layers_byname = {}
layers_registry = {}
@@ -32,15 +34,38 @@
class SkinTool(object):
interface.implements(ISkinTool)
+ skin = None
+ layers = []
+
def generate(self):
- layers = tuple(self.user_layers)
+ bases = []
- bases = self._get_default()
+ # first add default layers
+ for name, adapter in getAdapters((getSite(),), IDefaultLayers):
+ for layer in adapter.layers:
+ if layer not in bases:
+ bases.append(layer)
- for name in layers:
+ for name, layer in getUtilitiesFor(IDefaultLayer):
+ if layer not in bases:
+ bases.append(layer)
+
+ # second add skin
+ if self.skin:
+ skin = skins_byname.get(self.skin)
+ if skin:
+ bases.append(skin)
+ info = skins_registry.get(skin)
+ if info:
+ for layer in info[4]:
+ if layer not in bases:
+ bases.append(layer)
+
+ #third add layers
+ for name in self.layers:
layer = layers_byname.get(name)
- if layer is not None:
- self._get_layers(layer, bases)
+ if layer and layer not in bases:
+ bases.append(layer)
# get base skin
adapters = getSiteManager().adapters
@@ -53,30 +78,7 @@
bases.reverse()
return bases
- def _get_default(self):
- layers = []
- for name, adapter in getAdapters((getSite(),), IDefaultLayers):
- for layer in adapter.layers:
- self._get_layers(layer, layers)
- for name, layer in getUtilitiesFor(IDefaultLayer):
- self._get_layers(layer, layers)
-
- return layers
-
- def _get_layers(self, layer, layers):
- if layer in layers:
- return
-
- info = layers_registry.get(layer)
-
- if info is not None:
- for l in info[4]:
- self._get_layers(l, layers)
-
- layers.append(layer)
-
-
@component.adapter(ISkinTool, IObjectModifiedEvent)
def skinToolModified(*args):
try:
Modified: z3ext.skintool/trunk/src/z3ext/skintool/vocabulary.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/vocabulary.py 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/vocabulary.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -19,7 +19,7 @@
from zope.schema.interfaces import IVocabularyFactory
from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
-from tool import layers_registry
+from z3ext.skintool import tool
class Vocabulary(SimpleVocabulary):
@@ -31,14 +31,27 @@
return self.by_value[self.by_value.keys()[0]]
+class SkinsVocabulary(object):
+ interface.implements(IVocabularyFactory)
+
+ def __call__(self, context):
+ terms = []
+ for layer, info in tool.skins_registry.items():
+ terms.append((info[2], info[1]))
+
+ terms.sort()
+ return Vocabulary(
+ [SimpleTerm(name,name,title) for title, name in terms])
+
+
class LayersVocabulary(object):
interface.implements(IVocabularyFactory)
def __call__(self, context):
terms = []
- for layer, info in layers_registry.items():
+ for layer, info in tool.layers_registry.items():
terms.append((info[2], info[1]))
terms.sort()
- return Vocabulary([SimpleTerm(name,name,title)
- for title, name in terms])
+ return Vocabulary(
+ [SimpleTerm(name,name,title) for title, name in terms])
Modified: z3ext.skintool/trunk/src/z3ext/skintool/zcml.py
===================================================================
--- z3ext.skintool/trunk/src/z3ext/skintool/zcml.py 2008-11-20 19:41:25 UTC (rev 93192)
+++ z3ext.skintool/trunk/src/z3ext/skintool/zcml.py 2008-11-20 20:59:33 UTC (rev 93193)
@@ -18,14 +18,14 @@
from zope import schema, interface, component
from zope.configuration.fields import Tokens, GlobalInterface, PythonIdentifier
-from z3ext.skintool.tool import layers_byname, layers_registry
+from z3ext.skintool import tool
-class ILayerDirective(interface.Interface):
+class ISkinDirective(interface.Interface):
layer = GlobalInterface(
- title = u'Layer',
- description = u'Skin layer.',
+ title = u'Skin',
+ description = u'Skin interface.',
required = True)
name = PythonIdentifier(
@@ -45,22 +45,58 @@
require = Tokens(
title = u'Require',
- description = u'Interface of other layers that are '\
+ description = u'Interface of layers that are '\
u'required by this layer.',
required = False,
value_type = GlobalInterface())
-def layerDirectiveHandler(_context, layer, name, title,
- description='', require=[]):
+class ILayerDirective(interface.Interface):
+
+ layer = GlobalInterface(
+ title = u'Layer',
+ description = u'Skin layer.',
+ required = True)
+
+ name = PythonIdentifier(
+ title = u'Name',
+ description = u'Content name.',
+ required = True)
+
+ title = schema.TextLine(
+ title = u'Title',
+ description = u'Content title.',
+ required = True)
+
+ description = schema.TextLine(
+ title = u'Description',
+ description = u'Content description.',
+ required = False)
+
+
+def skinDirectiveHandler(_context, layer, name, title, description='', require=[]):
_context.action(
+ discriminator = ('z3ext.skintool-skin', layer, name),
+ callable = skinDirective,
+ args = (layer, name, title, description, require))
+
+
+def skinDirective(layer, name, title, description, require):
+ sitemanager = component.getGlobalSiteManager()
+
+ tool.skins_byname[name] = layer
+ tool.skins_registry[layer] = (layer, name, title, description, require)
+
+
+def layerDirectiveHandler(_context, layer, name, title, description=''):
+ _context.action(
discriminator = ('z3ext.skintool-layer', layer, name),
callable = layerDirective,
- args = (layer, name, title, description, require))
+ args = (layer, name, title, description))
-def layerDirective(layer, name, title, description, require):
+def layerDirective(layer, name, title, description):
sitemanager = component.getGlobalSiteManager()
- layers_byname[name] = layer
- layers_registry[layer] = (layer, name, title, description, require)
+ tool.layers_byname[name] = layer
+ tool.layers_registry[layer] = (layer, name, title, description)
More information about the Checkins
mailing list