Author: jmorliaguet
Date: Sat Jul  1 15:24:22 2006
New Revision: 3579

Modified:
   cpsskins/branches/paris-sprint-2006/configure.zcml
   cpsskins/branches/paris-sprint-2006/doc/portlets.txt
   cpsskins/branches/paris-sprint-2006/elements/interfaces.py
   cpsskins/branches/paris-sprint-2006/elements/slot.py
   cpsskins/branches/paris-sprint-2006/locations/README.txt
   cpsskins/branches/paris-sprint-2006/locations/sources.py
   cpsskins/branches/paris-sprint-2006/perspectives/configure.zcml
   cpsskins/branches/paris-sprint-2006/perspectives/interfaces.py
   cpsskins/branches/paris-sprint-2006/perspectives/perspective.py
   cpsskins/branches/paris-sprint-2006/setup/README.txt
   cpsskins/branches/paris-sprint-2006/setup/adapters.py
   cpsskins/branches/paris-sprint-2006/setup/interfaces.py
   cpsskins/branches/paris-sprint-2006/setup/utils.py
   cpsskins/branches/paris-sprint-2006/storage/relations.py
   cpsskins/branches/paris-sprint-2006/tests/test_storages.py
   cpsskins/branches/paris-sprint-2006/thememanager.py
   cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css
   cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml
   cpsskins/branches/paris-sprint-2006/ui/screens/common/perspective_selector.pt
   cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py
   
cpsskins/branches/paris-sprint-2006/ui/screens/pagedesigner/layout/layout_mode.css
   cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml
   
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt
   cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/presets_section.pt
   cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/site_manager.css
   cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py

Log:
- saving work

  - added a UI for creating presets

  - cosmetic



Modified: cpsskins/branches/paris-sprint-2006/configure.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/configure.zcml  (original)
+++ cpsskins/branches/paris-sprint-2006/configure.zcml  Sat Jul  1 15:24:22 2006
@@ -97,6 +97,8 @@
 
   <include package=".setup" />
 
+  <include package=".perspectives" />
+
   <include package=".storage" />
 
   <include package=".lib" />

Modified: cpsskins/branches/paris-sprint-2006/doc/portlets.txt
==============================================================================
--- cpsskins/branches/paris-sprint-2006/doc/portlets.txt        (original)
+++ cpsskins/branches/paris-sprint-2006/doc/portlets.txt        Sat Jul  1 
15:24:22 2006
@@ -421,7 +421,7 @@
 
 Finally we clear the storage:
 
-    >>> relations.clear()
+    >>> relations.purge()
 
 
 

Modified: cpsskins/branches/paris-sprint-2006/elements/interfaces.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/elements/interfaces.py  (original)
+++ cpsskins/branches/paris-sprint-2006/elements/interfaces.py  Sat Jul  1 
15:24:22 2006
@@ -37,9 +37,6 @@
 class INode(IElement):
     """A generic tree node"""
 
-    def getSiblings(self):
-        """Return the list of siblings"""
-
 class IInnerNode(INode, IOrderedContainer):
     """An inner node has children"""
 
@@ -183,6 +180,9 @@
         """Return true if the page is the default one.
         """
 
+    def getSiblings():
+        """Return the list of siblings"""
+
     def name():
         """Return the page's name (used when registering the page as a
         utility.)
@@ -226,6 +226,9 @@
         """Set the theme as the default theme.
         """
 
+    def getSiblings():
+        """Return the list of siblings"""
+
     def name():
         """Return the theme's name (used when registering the theme as a
         utility.)

Modified: cpsskins/branches/paris-sprint-2006/elements/slot.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/elements/slot.py        (original)
+++ cpsskins/branches/paris-sprint-2006/elements/slot.py        Sat Jul  1 
15:24:22 2006
@@ -114,8 +114,8 @@
     tmutil = getThemeManager(context)
     perspectives = [(_(u'Do not use perspectives'), u''),
                     (_(u'Always use the current perspective'), u'.')]
-    for name, title in tmutil.listPerspectives():
-        perspectives.append((_(title), name))
+    for name in tmutil.listPerspectives():
+        perspectives.append((name, name))
 
     return SimpleVocabulary.fromItems(perspectives)
 

Modified: cpsskins/branches/paris-sprint-2006/locations/README.txt
==============================================================================
--- cpsskins/branches/paris-sprint-2006/locations/README.txt    (original)
+++ cpsskins/branches/paris-sprint-2006/locations/README.txt    Sat Jul  1 
15:24:22 2006
@@ -318,9 +318,9 @@
 to obtain all the paths we use:
 
     >>> locations.getAllPaths() # doctest: +NORMALIZE_WHITESPACE
-    [(u'', u'f1'), (u'', u'f1', u'f6'), (u'', u'f1', u'f2'),
-     (u'', u'f1', u'f3'), (u'', u'f1', u'f4'),
-     (u'', u'f1', u'f5')]
+    [(u'', u'f1', u'f2', u''), (u'', u'f1', u'f3', u''),
+     (u'', u'f1', u'f6', u''), (u'', u'f1', u''), (u'', u'f1', u'f4', u''),
+     (u'', u'f1', u'f5', u'')]
 
 view names
 ...........

Modified: cpsskins/branches/paris-sprint-2006/locations/sources.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/locations/sources.py    (original)
+++ cpsskins/branches/paris-sprint-2006/locations/sources.py    Sat Jul  1 
15:24:22 2006
@@ -73,7 +73,7 @@
 
         elif root == u'perspectives':
             for perspective in tmutil.listPerspectives():
-                choices[perspective.name] = perspective.title
+                choices[perspective.name] = perspective.name
 
         elif root == u'engines':
             # FIXME

Modified: cpsskins/branches/paris-sprint-2006/perspectives/configure.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/perspectives/configure.zcml     
(original)
+++ cpsskins/branches/paris-sprint-2006/perspectives/configure.zcml     Sat Jul 
 1 15:24:22 2006
@@ -6,7 +6,7 @@
     i18n_domain="cpsskins"
     >
 
-  <class class=".Perspective">
+  <class class=".perspective.Perspective">
 
     <require
         permission="zope.View"

Modified: cpsskins/branches/paris-sprint-2006/perspectives/interfaces.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/perspectives/interfaces.py      
(original)
+++ cpsskins/branches/paris-sprint-2006/perspectives/interfaces.py      Sat Jul 
 1 15:24:22 2006
@@ -17,21 +17,20 @@
 """
 __docformat__ = "reStructuredText"
 
-from zope.schema import DottedName, TextLine
+from zope.schema import TextLine
 
 from cpsskins.elements.interfaces import IElement
 
 class IPerspective(IElement):
     """A perspective."""
 
-    name = DottedName(
+    name = TextLine(
         title=u"Name",
         )
 
-    title = TextLine(
-        title=u"Title",
-        )
-
-    def __str__(self):
+    def __str__():
         """Return the name of the perspective"""
 
+    def __eq__(other):
+        """Return True if this is the same as another perspective"""
+

Modified: cpsskins/branches/paris-sprint-2006/perspectives/perspective.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/perspectives/perspective.py     
(original)
+++ cpsskins/branches/paris-sprint-2006/perspectives/perspective.py     Sat Jul 
 1 15:24:22 2006
@@ -31,12 +31,15 @@
     >>> perspective
     <Perspective: 'cpsskins.perspective'>
 
+    >>> from zope.interface.verify import verifyClass
+    >>> verifyClass(IPerspective, Perspective)
+    True
+
     """
     implements(IPerspective)
 
-    def __init__(self, name=u'', title=u''):
+    def __init__(self, name=u''):
         self.name = name
-        self.title = title
 
     def __repr__(self):
         return "<Perspective: '%s'>" % str(self)

Modified: cpsskins/branches/paris-sprint-2006/setup/README.txt
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/README.txt        (original)
+++ cpsskins/branches/paris-sprint-2006/setup/README.txt        Sat Jul  1 
15:24:22 2006
@@ -410,6 +410,27 @@
     cpsskins://format-style:...
 
 
+Factory name
+------------
+
+The factory name can by obtained from the resource:
+
+    >>> IType(resource).factoryname
+    u'cpsskins.format.style'
+
+or from the resource's URI:
+
+    >>> from cpsskins.setup.utils import getFactoryNameFromURI
+    >>> getFactoryNameFromURI(u'cpsskins://format-style:12345')
+    u'cpsskins.format.style'
+
+or from the resource's type name:
+
+    >>> from cpsskins.setup.utils import getFactoryNameFromTypeName
+    >>> getFactoryNameFromTypeName(u'format-style')
+    u'cpsskins.format.style'
+
+
 Export of resources
 ===================
 

Modified: cpsskins/branches/paris-sprint-2006/setup/adapters.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/adapters.py       (original)
+++ cpsskins/branches/paris-sprint-2006/setup/adapters.py       Sat Jul  1 
15:24:22 2006
@@ -97,6 +97,10 @@
     def getContentName(self):
         return getTypeName(self.getContentType())
 
+    def getFactoryName(self):
+        return u'.'.join(uniq([u'cpsskins', self.elementname, 
self.resourcename,
+                              self.contentname]))
+
     def getType(self):
         return uniq([self.getElementType(), self.getResourceType(),
                      self.getContentType()])
@@ -111,5 +115,7 @@
 
     contentname = property(getContentName)
 
+    factoryname = property(getFactoryName)
+
     name = __str__
 

Modified: cpsskins/branches/paris-sprint-2006/setup/interfaces.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/interfaces.py     (original)
+++ cpsskins/branches/paris-sprint-2006/setup/interfaces.py     Sat Jul  1 
15:24:22 2006
@@ -57,8 +57,10 @@
         """ """
 
     def getType():
-        """Return the element's complete type as a tuple
-        """
+        """Return the element's complete type as a tuple"""
+
+    def getFactoryName():
+        """Return the name of the factory registered for the element"""
 
     def __str__():
         """Return the element's complete type name

Modified: cpsskins/branches/paris-sprint-2006/setup/utils.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/setup/utils.py  (original)
+++ cpsskins/branches/paris-sprint-2006/setup/utils.py  Sat Jul  1 15:24:22 2006
@@ -71,3 +71,15 @@
         return location.split('@')[0]
 
     raise ValueError("Unknown URI scheme in '%s'" % uri)
+
+def getFactoryNameFromTypeName(type_name):
+    """Return the name of the factory from the type name
+    """
+    return u'cpsskins.' + type_name.replace('-', '.')
+
+def getFactoryNameFromURI(uri):
+    """Return the name of the factory from the URI.
+    """
+    type_name = getTypeNameFromURI(uri)
+    return getFactoryNameFromTypeName(type_name)
+

Modified: cpsskins/branches/paris-sprint-2006/storage/relations.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/storage/relations.py    (original)
+++ cpsskins/branches/paris-sprint-2006/storage/relations.py    Sat Jul  1 
15:24:22 2006
@@ -61,12 +61,6 @@
     def search(predicate, first, second, third):
         """ """
 
-    def list():
-        """ """
-
-    def clear():
-        """ """
-
     def getFirsts():
         """ """
 
@@ -232,11 +226,11 @@
     >>> print [repr(storage[r]) for r in res]
     ["<Monadic relation: 'ebony is black'>", "<Monadic relation: 'snow is 
white'>"]
 
-    Finally, we clear the storage:
+    Finally, we purge the storage:
     >>> list(storage.keys())
     [u'some_black', u'some_white']
 
-    >>> storage.clear()
+    >>> storage.purge()
 
     >>> list(storage.keys())
     []
@@ -422,7 +416,7 @@
 
         return [r for r in self if unicode(self.get(r)) in predicate]
 
-    def clear(self):
+    def purge(self):
         """Remove all relations from the storage.
         """
         for k in list(self.keys()):

Modified: cpsskins/branches/paris-sprint-2006/tests/test_storages.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/tests/test_storages.py  (original)
+++ cpsskins/branches/paris-sprint-2006/tests/test_storages.py  Sat Jul  1 
15:24:22 2006
@@ -241,7 +241,7 @@
         self.assertEqual(result, [])
 
     def tearDown(self):
-        self.storage.clear()
+        self.storage.purge()
 
 def test_suite():
     return unittest.TestSuite((

Modified: cpsskins/branches/paris-sprint-2006/thememanager.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/thememanager.py (original)
+++ cpsskins/branches/paris-sprint-2006/thememanager.py Sat Jul  1 15:24:22 2006
@@ -333,10 +333,9 @@
                 resources.list(type=IPerspective, context=self)]
 
     def addPerspective(self, name, title):
-        perspective = Perspective(name=name, title=title)
+        perspective = Perspective(name)
         resources = getUtility(IResourceManager)
-        resources.register(name=name, title=title, resource=perspective,
-                           context=self)
+        resources.register(name=name, resource=perspective, context=self)
 
     ###################################################################
     # Locations

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css 
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/common/authoring.css Sat Jul 
 1 15:24:22 2006
@@ -390,6 +390,8 @@
 .locationChooser {
   padding: 0.3em 0.6em;
   background-color: #eee;
+  border-bottom: 1px solid #999;
+  margin-bottom: 10px;
 }
 
 .locationChooser button {

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml        
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/common/configure.zcml        
Sat Jul  1 15:24:22 2006
@@ -194,6 +194,11 @@
       />
 
       <page
+          name="addPerspective"
+          attribute="addPerspective"
+      />
+
+      <page
           name="setPerspective"
           attribute="setPerspective"
       />

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/common/perspective_selector.pt
==============================================================================
--- 
cpsskins/branches/paris-sprint-2006/ui/screens/common/perspective_selector.pt   
    (original)
+++ 
cpsskins/branches/paris-sprint-2006/ui/screens/common/perspective_selector.pt   
    Sat Jul  1 15:24:22 2006
@@ -6,11 +6,13 @@
                   current context/@@negotiation/getPerspective">
   <select name="perspective">
     <option value="_" i18n:translate="">(no perspective)</option>
-    <option tal:repeat="perspective perspectives"
-            tal:content="perspective/title"
-            tal:attributes="value perspective/name;
-                            selected python:perspective.name == current
-                                     and 'selected' or nothing" />
+    <tal:block repeat="perspective perspectives">
+      <option tal:define="name perspective"
+              tal:content="name"
+              tal:attributes="value name;
+                              selected python: name == current and 'selected'
+                                               or nothing" />
+    </tal:block>
   </select>
   <button type="submit">OK</button>
 </form>

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py      
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/common/views.py      Sat Jul 
 1 15:24:22 2006
@@ -226,6 +226,11 @@
         session_info = self.getSessionInfo()
         return session_info.get('selection', {})
 
+    def addPerspective(self, name=u''):
+        """Create and add a perspective
+        """
+        self.tmutil.addPerspective(name=name, title=name)
+
     def setPerspective(self, perspective=u''):
         """Set the perspective
         """
@@ -363,18 +368,20 @@
         request = self.request
         dest_element = self.tmutil.getElementById(id)
         if IInnerNode.providedBy(dest_element):
-            container = removeSecurityProxy(dest_element)
+            container = dest_element
         else:
             container = getParent(dest_element)
             order = self.getElementOrder(id)
 
+        container = removeSecurityProxy(container)
+
         content = createObject(type_name)
         notify(ObjectCreatedEvent(content))
 
         adding = getMultiAdapter((container, request), INodeAdding)
-
         added = adding.add(content)
         added_id = added.identifier
+
         self.setElementOrder(added_id, int(order))
         return str(added_id)
 

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/pagedesigner/layout/layout_mode.css
==============================================================================
--- 
cpsskins/branches/paris-sprint-2006/ui/screens/pagedesigner/layout/layout_mode.css
  (original)
+++ 
cpsskins/branches/paris-sprint-2006/ui/screens/pagedesigner/layout/layout_mode.css
  Sat Jul  1 15:24:22 2006
@@ -52,6 +52,8 @@
   padding-left: 4px;
   margin-top: 5px;
   margin-bottom: 5px;
+  font-size: 0.9em;
+  font-style: italic;
 }
 
 .pageBlockAddButton img {

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml   
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/configure.zcml   
Sat Jul  1 15:24:22 2006
@@ -33,6 +33,11 @@
     />
 
     <page
+        name="addPreset"
+        attribute="addPreset"
+    />
+
+    <page
         name="removePreset"
         attribute="removePreset"
     />

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt
==============================================================================
--- 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt
   (original)
+++ 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/negotiation_section.pt
   Sat Jul  1 15:24:22 2006
@@ -7,13 +7,11 @@
 
 <form action="@@submitLocation" method="post">
 
-  <table style="width: 100%;" class="items">
+  <table style="width: 100%, border-bottom: 1px solid #ccc" class="items">
     <tr>
       <th style="width: 30%">path</th>
       <th style="width: 30%">scope</th>
-      <th style="width: 30%">data</th>
-      <th></th>
-      <th></th>
+      <th style="width: 40%">data</th>
     </tr>
     <tr tal:repeat="path infos">
       <tal:block define="location python:infos[path];
@@ -29,45 +27,36 @@
         <tal:block condition="edit">
           <tal:block define="widgets nocall:context/@@getLocationWidgets"
                      repeat="widget python: widgets(location_path, section)">
-            <td tal:content="structure widget" />
+            <td style="padding-top: 5px; padding-bottom: 5px; 
background-color: #efc" tal:content="structure widget" />
           </tal:block>
         </tal:block>
-        <td>
-          <a class="button"
-             tal:attributes="href 
string:@@submitLocation?root=$section&location_path=$location_path&action=delete">
-             delete
-          </a>
-        </td>
 
       </tal:block>
     </tr>
   </table>
 
-  <table style="width: 100%; border-top: 1px solid #ccc">
-    <tr>
-      <td tal:condition="not:edited">
-        <a class="button" i18n:translate="" tal:condition="not:add"
-     tal:attributes="href 
string:javascript:CPSSkins.getModelById('negotiation-section').setData({'form': 
{'section': '$section', 'add': true }})">add a location &raquo;</a>
-      </td>
-      <td tal:condition="add">
-        <input type="hidden" name="root" tal:attributes="value section" />
-        <input type="hidden" name="action" value="add" />
-        <input type="text" name="location_path" value="/" />
-        <input style="background-color: #ccf"
-               class="submit" type="submit" value="add" />
-        <a class="button" i18n:translate=""
-           tal:attributes="href 
string:javascript:CPSSkins.getModelById('negotiation-section').setData({'form': 
{'section': '$section'}})">cancel</a>
-      </td>
-      <td tal:condition="edited">
-        <input type="hidden" name="action" value="edit" />
-        <input type="hidden" name="root" tal:attributes="value section" />
-        <input type="hidden" name="location_path" tal:attributes="value 
edited" />
-        <input style="background-color: #ccf" class="submit"
-               type="submit" value="save" />
-        <a class="button" i18n:translate=""
-           tal:attributes="href 
string:javascript:CPSSkins.getModelById('negotiation-section').setData({'form': 
{'section': '$section'}})">cancel</a>
-      </td>
-    </tr>
-  </table>
+  <div style="margin-top: 10px" tal:condition="not:edited">
+    <input type="hidden" name="root" tal:attributes="value section" />
+    <input type="hidden" name="action" value="add" />
+    <input type="text" name="location_path" value="/" />
+    <input class="submit default" type="submit" value="add" />
+  </div>
+
+  <div style="margin-top: 10px; float: right" tal:condition="edited">
+    <a class="button"
+       tal:attributes="href 
string:@@submitLocation?root=$section&location_path=$edited&action=delete">
+       delete
+    </a>
+  </div>
+
+  <div tal:condition="edited" style="margin-top: 10px">
+    <input type="hidden" name="action" value="edit" />
+    <input type="hidden" name="root" tal:attributes="value section" />
+    <input type="hidden" name="location_path" tal:attributes="value edited" />
+    <input class="submit default" type="submit" value="save" />
+    <a class="button" i18n:translate=""
+       tal:attributes="href 
string:javascript:CPSSkins.getModelById('negotiation-section').setData({'form': 
{'section': '$section'}})">cancel</a>
+  </div>
+
 </form>
 </div>

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/presets_section.pt
==============================================================================
--- 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/presets_section.pt   
    (original)
+++ 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/presets_section.pt   
    Sat Jul  1 15:24:22 2006
@@ -1,6 +1,6 @@
 <div class="sections" i18n:domain="cpsskins"
  tal:define="section request/form/section|nothing">
-  <ul style="height: 120px; overflow: auto;" class="items"
+  <ul style="height: 120px; overflow-y: scroll;" class="items"
       tal:define="preset_info context/@@getPresetsInfo;
                   infos preset_info/?section|nothing">
     <li tal:repeat="info infos">
@@ -15,8 +15,14 @@
            tal:condition="not:readonly">[edit]</a>
       </tal:block>
     </li>
-    <li tal:condition="not:infos"><em>no presets</em></li>
+    <li tal:condition="not:section"><em>Select a section</em></li>
+    <li tal:condition="python: section and not infos"><em>no presets</em></li>
   </ul>
-  <div tal:condition="not:section">
-  </div>
+
+  <form action="@@addPreset" method="post">
+    <input type="hidden" name="type_name" tal:attributes="value section" />
+    <input type="text" name="name" value="" />
+    <input class="submit default" type="submit" value="add" />
+  </form>
+
 </div>

Modified: 
cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/site_manager.css
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/site_manager.css 
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/site_manager.css 
Sat Jul  1 15:24:22 2006
@@ -134,14 +134,26 @@
   padding: 0
 }
 
+
+select {
+  border: 1px solid #999;
+}
+
+select, option, input {
+  font-size: 0.8em;
+}
+
 a.button, input.submit, button.submit {
   border: none;
-  padding: 0;
   background-color: #fff;
   color: #009;
-  margin: 0;
+  margin: 0 0.5em;
+  font-size: 1em;
 }
 
-select {
-  border: none;
+input.default, button.default {
+  border-bottom: 1px dotted #99f;
+  color: #009;
+  cursor: pointer;
 }
+

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py 
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/sitemanager/views.py Sat Jul 
 1 15:24:22 2006
@@ -17,7 +17,7 @@
 """
 __docformat__ = "reStructuredText"
 
-from zope.component import getUtility
+from zope.component import getUtility, createObject
 from zope.formlib import form
 
 from cpsskins import minjson as json
@@ -29,6 +29,7 @@
 from cpsskins.setup.io import importSite, exportSite
 from cpsskins.setup.registration import refreshPresets
 from cpsskins.setup.snapshot import Snapshot
+from cpsskins.setup.utils import getFactoryNameFromTypeName
 from cpsskins.utils import getThemeManager
 
 class SiteDesignerView:
@@ -66,6 +67,18 @@
                 })
         return info
 
+    def addPreset(self, name=u'', type_name=u''):
+        if not type_name:
+            raise ValueError("Must specify a type name.")
+        factory_name = getFactoryNameFromTypeName(type_name)
+        # FIXME: not very generic
+        if type_name == u'perspective':
+            resource = createObject(factory_name, name=name)
+        else:
+            resource = createObject(factory_name)
+        resources = getUtility(IResourceManager)
+        resources.register(name=name, resource=resource, context=self.context)
+
     def removePreset(self, uri=u''):
         if not uri:
             raise KeyError("Must specify a preset's URI.")
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to