[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