[Zope3-checkins] SVN: Zope3/branches/roger-bostonskin2/ Boston skin --> work in progress

Roger Ineichen roger at projekt01.ch
Thu Oct 27 21:37:28 EDT 2005


Log message for revision 39683:
  Boston skin --> work in progress
  
  TODO: reimplement menu/menu-item
  Right now the menu implementation can't be used for 
  register submenus on menu items where get registred in 
  the view or page directive. Because the view or page directive
  don't register a menu where we can use for register submenus.
  
  The submenu implementation can only be used if we register
  menu and submenu out of the box in one complex directive.

Changed:
  _U  Zope3/branches/roger-bostonskin2/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/README.txt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/SETUP.cfg
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_description.png
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_layout.png
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_layout_v2.png
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/boston.js
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/configure.zcml
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/ftests.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/favicon.png
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/zopelogo.gif
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/skin.css
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/standardmacros.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/template.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget.css
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget_macros.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/configure.zcml
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/viewlet.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/views.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/interfaces.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo.zcml
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/configure.zcml
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/css.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/divmenu.js
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/javascript.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/macros.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/template.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.css
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarArrow.gif
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarArrowOver.gif
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarGrip.gif
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar_layout.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/topmenu.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/viewlet.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/views.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/interfaces.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar.zcml
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/__init__.py
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/javascript.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/viewlet.pt
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/xmltree.css
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree.zcml
  A   Zope3/branches/roger-bostonskin2/src/zope/app/boston/zope.app.boston-configure.zcml

-=-

Property changes on: Zope3/branches/roger-bostonskin2
___________________________________________________________________
Name: svn:ignore
   - overrides_ftesting.zcml
principals.zcml
overrides.zcml
zope.conf
Data.fs
Data.fs.*
build
dist
coverage
z3.log
zeo.log
test-db
zdsock
setup.bat
start.bat
test.bat
_trial_temp

   + overrides_ftesting.zcml
principals.zcml
overrides.zcml
zope.conf
Data.fs
Data.fs.*
build
dist
coverage
z3.log
zeo.log
test-db
zdsock
setup.bat
start.bat
test.bat
_trial_temp
access.log


Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/README.txt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/README.txt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/README.txt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,40 @@
+===================
+The Boston ZMI Skin
+===================
+
+The Boston skin is a new UI for the Zope Management Interface called ZMI.
+Feel free to write comments, ideas and wishes to the zope3-dev mailinglist. 
+
+
+Requirements
+-------------
+
+  - Offer a concept for registering aditional javascripts
+
+  - Offer a concept for registering additional CSS style sheets
+
+  - Offer a concept for registering own boxes under the navigation
+  
+  - Works in newer browser on each plattform, especially linux, windows, mac
+
+  - Works in newest version of the following browsers: IE, firefox (gecko),
+    Safari (KHTML/KJS)
+
+
+Dont's
+------
+
+  - Must not work on older browsers, new technologies are fine but only if 
+    they support the plattform and browsers described above.
+
+  - Must not support accessibility requirments. Please let me know, if 
+    somebody needs this. If so, we can implement a seperate ZMI skin for 
+    supporting fully accessibility support.
+
+
+Miscellaneous
+-------------
+
+  Different ideas of the Boston skin where born on the IRC with Stephan
+  Richter.  It's usual to name a skin like the town where the skin was
+  born. We decide to name it Boston because Stephan lives there.


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/SETUP.cfg
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/SETUP.cfg	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/SETUP.cfg	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,5 @@
+# Tell zpkg how to install the ZCML slugs.
+
+<data-files zopeskel/etc/package-includes>
+  zope.app.boston-*.zcml
+</data-files>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/SETUP.cfg
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,69 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston ZMI
+
+$Id$
+"""
+
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.viewlet import viewlet
+from zope.viewlet.interfaces import IViewletManager
+
+
+class boston(IBrowserRequest):
+    """The `boston` layer."""
+
+class Boston(boston, IDefaultBrowserLayer):
+    """The `Boston` skin.
+
+    It is available via `++skin++zope.app.boston.Boston`
+    or via `++skin++Boston`.
+    """
+
+
+class IHead(IViewletManager):
+    """Head viewlet manager."""
+
+
+class ICSS(IViewletManager):
+    """CSS viewlet manager."""
+
+
+class IJavaScript(IViewletManager):
+    """JavaScript viewlet manager."""
+
+
+class IToolBar(IViewletManager):
+    """Toolbar viewlet manager."""
+
+
+class IToolBarTopMenu(IViewletManager):
+    """Toolbar viewlet manager."""
+
+
+class ILeft(IViewletManager):
+    """Left viewlet manager."""
+
+
+BostonSkinCSSViewlet = viewlet.CSSViewlet('skin.css', 'all')
+
+BostonWidgetCSSViewlet = viewlet.CSSViewlet('widget.css', 'all')
+
+BostonXMLTreeCSSViewlet = viewlet.CSSViewlet('xmltree.css', 'all')
+
+ToolBarCSSViewlet = viewlet.CSSViewlet('toolbar.css', 'all')
+
+
+BostonJavascriptViewlet = viewlet.JavaScriptViewlet('boston.js')


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_description.png
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_description.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_layout.png
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_layout.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_layout_v2.png
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/boston_layout_v2.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin
+
+$Id$
+"""


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/boston.js
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/boston.js	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/boston.js	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,66 @@
+//----------------------------------------------------------------------------
+// Copyright (c) 2005 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.
+//----------------------------------------------------------------------------
+
+//----------------------------------------------------------------------------
+// popup window with settings 
+//----------------------------------------------------------------------------
+function popup(page, name, settings) {
+  win = window.open(page, name, settings);
+  win.focus();
+}
+
+//----------------------------------------------------------------------------
+// guess browser version, feel free to enhance it if needed.
+//----------------------------------------------------------------------------
+var ie = document.all != null;
+var moz = !ie && document.getElementById != null && document.layers == null;
+
+//----------------------------------------------------------------------------
+// change the status (color) of the matrix table used in grant.html
+//----------------------------------------------------------------------------
+function changeMatrix(e) {
+  var ele = e? e: window.event;
+  var id = ele.getAttribute('id');
+  var name = ele.getAttribute('name');
+  if (moz) {
+    var label = ele.parentNode;
+    var center = label.parentNode;
+    var td = center.parentNode;
+  }
+  else {
+    var label = ele.parentElement;
+    var center = label.parentElement;
+    var td = center.parentElement;
+  }
+  resetMatrixCSS(name);
+  if (td.className != "default") {
+    td.className = "changed";
+  }
+}
+
+function resetMatrixCSS(name) {
+  var inputFields = document.getElementsByTagName('input');
+  for (var i = 0; i < inputFields.length; i++) {
+    var field = inputFields[i];
+    if (field.getAttribute('name') == name) {
+      if (moz) {
+        td = field.parentNode.parentNode.parentNode;
+      }
+      else {
+        td = field.parentElement.parentElement.parentElement;
+      }
+      if (td.className != "default") {
+        td.className = "";
+      }
+    }
+  }
+}

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/configure.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/configure.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/configure.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,91 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser">
+
+  <resource 
+      name="boston.js"
+      file="boston.js"
+      layer="zope.app.boston.boston"
+      />
+
+  <resource 
+      name="skin.css"
+      file="skin.css"
+      layer="zope.app.boston.boston"
+      />
+
+  <resource 
+      name="widget.css"
+      file="widget.css"
+      layer="zope.app.boston.boston"
+      />
+
+  <viewlet
+      name="boston.js"
+      for="*"
+      manager="zope.app.boston.IJavaScript"
+      permission="zope.Public"
+      class="..BostonJavascriptViewlet"
+      layer="zope.app.boston.boston"
+      weight="1"
+      />
+
+  <viewlet
+      name="skin.css"
+      for="*"
+      manager="zope.app.boston.ICSS"
+      permission="zope.Public"
+      class="..BostonSkinCSSViewlet"
+      layer="zope.app.boston.boston"
+      weight="0"
+      />
+
+  <viewlet
+      name="widget.css"
+      for="*"
+      manager="zope.app.boston.ICSS"
+      permission="zope.Public"
+      class="..BostonWidgetCSSViewlet"
+      layer="zope.app.boston.boston"
+      weight="1"
+      />
+
+  <!-- layout img -->
+  <resource
+      name="favicon.png"
+      file="img/favicon.png"
+      layer="zope.app.boston.boston"
+      />
+
+  <resource 
+      name="logo.gif"
+      file="img/zopelogo.gif"
+      layer="zope.app.boston.boston"
+      />
+
+  <page
+      for="*"
+      name="standard_macros"
+      permission="zope.View"
+      class=".standardmacros.StandardMacros"
+      allowed_interface="zope.interface.common.mapping.IItemMapping"
+      layer="zope.app.boston.boston" 
+      />
+
+  <page 
+      for="*"
+      name="skin_macros"
+      permission="zope.View"
+      template="template.pt"
+      layer="zope.app.boston.boston"
+      />
+
+  <page
+      for="*"
+      name="widget_macros"
+      permission="zope.Public"
+      template="widget_macros.pt"
+      layer="zope.app.boston.boston"
+      />
+
+</configure>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/ftests.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/ftests.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/ftests.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,100 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin ftests
+
+$Id$
+"""
+
+import unittest
+from xml.dom import minidom
+from zope.app.testing.functional import BrowserTestCase
+
+class TestBostonSkin(BrowserTestCase):
+
+
+    def test_addFolder(self):
+        response = self.publish("/++skin++Boston/+/action.html", 
+                                basic='mgr:mgrpw', 
+                                form={'type_name':u'zope.app.content.Folder', 
+                                      'id':u'folder'})
+        self.assertEqual(response.getStatus(), 302)
+
+        response = self.publish("/++skin++Boston/folder/+/action.html", 
+                                basic='mgr:mgrpw', 
+                                form={'type_name':u'zope.app.content.Folder', 
+                                      'id':u'subfolder'})
+        self.assertEqual(response.getStatus(), 302)
+
+    def test_addSiteManager(self):
+        response = self.publish("/++skin++Boston/+/action.html", 
+                                basic='mgr:mgrpw', 
+                                form={'type_name':u'zope.app.content.Folder', 
+                                      'id':u'folder'})
+        self.assertEqual(response.getStatus(), 302)
+
+        response = self.publish("/++skin++Boston/folder/+/action.html", 
+                                basic='mgr:mgrpw', 
+                                form={'type_name':u'zope.app.content.Folder', 
+                                      'id':u'subsite'})
+        self.assertEqual(response.getStatus(), 302)
+
+        response = self.publish(
+            "/++skin++Boston/folder/subsite/addSiteManager.html", 
+            basic='mgr:mgrpw')
+        self.assertEqual(response.getStatus(), 302)
+
+    def test_css_pagelets(self):
+        response = self.publish('/++skin++Boston/', basic='mgr:mgrpw')
+        self.assertEqual(response.getStatus(), 200)
+        self.assert_(response.getBody().find('@import url(http://localhost/++skin++Boston/@@/skin.css)') != -1)
+        self.assert_(response.getBody().find('@import url(http://localhost/++skin++Boston/@@/widget.css)') != -1)
+
+    def test_javascrip_pagelets(self):
+        response = self.publish('/++skin++Boston/', basic='mgr:mgrpw')
+        self.assertEqual(response.getStatus(), 200)
+        self.assert_(response.getBody().find('src="http://localhost/++skin++Boston/@@/toggle.js') != -1)
+
+    def test_left_boxes(self):
+        # Add a folder
+        response = self.publish("/++skin++Boston/+/action.html",
+                                basic='mgr:mgrpw', 
+                                form={'type_name':u'zope.app.content.Folder', 
+                                      'id':u'folder'})
+        self.assertEqual(response.getStatus(), 302)
+        
+        response = self.publish('/++skin++Boston/', basic='mgr:mgrpw')
+        self.assertEqual(response.getStatus(), 200)
+
+        # test zmitree cookie box
+        self.assert_(response.getBody().find('id="zmicookietreebox"') != -1)
+
+        # test add box
+        self.assert_(response.getBody().find('id="addbox"') != -1)
+
+        # test tooltip box. Ah I found one in the role permission view
+        response = self.publish('/++skin++Boston/++etc++site/@@AllRolePermissions.html',
+                                basic='mgr:mgrpw')
+        self.assertEqual(response.getStatus(), 200)
+        self.assert_(response.getBody().find('id="tooltipbox"') != -1)
+
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(TestBostonSkin))
+    return suite
+
+if __name__=='__main__':
+    unittest.main(defaultTest='test_suite')
+


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/ftests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/favicon.png
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/favicon.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/zopelogo.gif
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/img/zopelogo.gif
___________________________________________________________________
Name: svn:mime-type
   + image/gif

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/skin.css
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/skin.css	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/skin.css	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,534 @@
+/*
+** Boston style sheet for CSS2-capable browsers.
+**
+*/
+
+
+/* Basic Elements 
+*/
+html {
+	height: 100%;
+}
+body {
+	height: 100%;
+	font: 75% Verdana, Helvetica, Arial, sans-serif;
+	color: #181818;
+	background: #F9F9F9;
+	margin: 0;
+	padding: 0;
+}
+
+a {
+    text-decoration: none;
+    color: BLACK;
+    background-color: transparent;
+}
+a:hover {
+    text-decoration: underline;
+}
+
+img {
+	border: none;
+}
+
+p {
+    margin: 0.5em 0em 1em 0em;
+    line-height: 1.5em;
+}
+
+p a {
+    text-decoration: underline;
+}
+
+p a:visited {
+    color: Purple;
+    background-color: transparent;
+}
+
+p a:active {
+    color: Red;
+    background-color: transparent;
+}
+
+p img {
+    border: 0;
+    margin: 0;
+}
+
+
+hr {
+    clear: both;
+    height: 1px;
+    color: #006600;
+    background-color: transparent;
+}
+
+
+h1, h2, h3, h4, h5, h6 {
+    color: Black;
+    clear: left;
+    font: 100% bold Verdana, Helvetica, Arial, sans-serif;
+    margin: 0;
+    padding-top: 0.5em;
+}
+
+h1 {
+    font-size: 140%;
+}
+
+h2 {
+    font-size: 120%;
+}
+
+h3 {
+    font-weight: bold;
+    font-size: 100%;
+}
+
+h4 {
+    color: #777777;
+    font-size: 100%;
+    font-weight: bold;
+}
+
+h5 {
+    font-size: 100%;
+}
+
+h6 {
+    font-size: 80%;
+}
+
+
+ol {
+    line-height: 1.5em;
+    margin-left: 2em;
+    padding:0;
+}
+
+ol a {
+    text-decoration: underline;
+}
+
+dl {
+}
+
+dt {
+    font-weight: bold;    
+}
+
+dd {
+    line-height: 1.5em;
+    margin-bottom: 1em;
+}
+
+
+fieldset {
+    border: 1px solid #A0A0A0;
+    margin: 2em 0em 1em 0em;
+    padding: 1em 0em;
+}
+
+legend {
+    background: transparent;
+    padding: 0.5em;
+}
+
+
+form {
+    border: none;
+    margin: 0;
+    padding: 0;
+}
+
+textarea {
+    color: Black;
+    width: 100%;
+    border: 1px solid #9B9B9B;
+    padding: 0.1em;
+}
+
+input {
+    font: normal 100% Verdana, Helvetica, Arial, sans-serif;
+    color: Black;
+    border: 1px solid #9B9B9B;
+    vertical-align: middle;
+    margin-bottom: 1px; /* IE bug fix */
+    padding: 0.1em;
+}
+
+input.noborder {
+    border: 0;
+}
+
+select {
+    font: normal 100% Verdana, Helvetica, Arial, sans-serif;
+    vertical-align: top;
+}
+
+abbr, acronym, .explain {
+    border-bottom: 1px dotted Black;
+    color: Black;
+    background-color: transparent;
+    cursor: help;
+}
+
+q {
+    font-family: Times, "Times New Roman", serif;
+    font-style: italic;
+    font-size: 120%;
+}
+
+blockquote {
+    font-family: Times, "Times New Roman", serif;
+    font-style: italic;
+    font-size: 120%;
+}
+
+code {
+    font-size: 120%;
+    color: Black;
+    background-color: #CCCCCC;
+}
+
+pre {
+    font-size: 120%;
+    padding: 1em;
+    border: 1px solid #A0A0A0;
+    color: Black;
+    background-color: #CCCCCC;
+}
+
+table {
+    border-collapse: collapse;
+    font-size: 100%;
+}
+
+.netscape4 {
+    display: none;
+}
+
+
+/* layout styles
+*/
+#layout {
+    width: 100%;
+	height: 79px;
+    font-size: 100%;
+}
+
+#layout td {
+    vertical-align: top;
+}
+
+#layout tr.menu {
+    width: 100%;
+}
+
+#layout tr.head{
+	background-color: #2475BB;
+}
+
+#layout td.logo {
+    height: 55px;
+    width: 250px;
+}
+
+#layout td.logo img {
+    padding-top: 7px;
+    padding-left: 7px;
+}
+
+.actions {
+    height: 20px;
+	float: left;
+    padding: 4px 0px 0px 0px;
+}
+
+.actions span {
+    white-space: nowrap;
+}
+
+.actions a {
+	color: #666666;
+    margin: 1px 6px 3px 6px;
+}
+
+.actions a:hover {
+	color: black;
+    text-decoration: none;
+	background-color: #D9DAF2;
+	border: 1px solid #2475BB;
+    padding: 1px 5px 3px 5px;
+    margin: 0px;
+}
+
+#userdetails {
+	color: #898074;
+	float: right;
+	padding: 4px 5px 0px 5px;
+}
+
+#breadcrumbs {
+	color: #CCCCCC;
+    font: 100% Verdana, Helvetica, Arial, sans-serif;
+	margin: 30px 0px 0px 15px;
+}
+
+#breadcrumbs a {
+    color: #CCCCCC;
+}
+
+
+/* navigation area 
+*/
+#navigation {
+    width: 200px;
+    vertical-align: top;
+    padding: 0px;
+    margin: 0px;
+}
+
+
+/* slot boxes
+*/
+#slotbox {
+    width: 200px;
+    padding: 20px 5px 0px 5px;
+}
+
+.slotbox {
+	border: 2px solid #2475BB;
+    margin-bottom: 10px;
+    padding: 0px;
+}
+
+.slotbox div.header {
+    widht: 100%;
+	height: 22px;
+	color: white;
+	font-weight: bold;
+	background-color: #2475BB;
+	padding: 0px 0px 0px 5px;
+	margin: 0px 0px 0px 0px;
+}
+
+.slotbox div.header img.icon {
+	float: right;
+	position: relative;
+	padding: 2px;
+}
+
+.slotbox div.title {
+    height: 17px;
+    white-space: nowrap;
+	padding: 3px 0px 0px 0px;
+}
+
+.slotbox div.body {
+	margin: 0px 0px 0px 0px;
+}
+
+.slotbox div.body div {
+    color: #777777;
+	padding: 2px 0px 5px 5px;
+	margin: 0px;
+}
+
+.slotbox div.body div.tip {
+    color: #B30000;
+	padding: 2px 0px 5px 5px;
+}
+
+.slotbox div.treebody {
+	margin: 5px 5px 5px 5px;
+}
+
+.slotbox div.body div.even {
+    background: #EBEBE2;
+	padding: 4px;
+}
+
+.slotbox div.body div.odd {
+	padding: 4px;
+}
+
+.slotbox div.body a:hover {
+    text-decoration: underline;
+}
+
+
+/* content area
+*/
+#contextmenu {
+    margin: 0px 0px 0px 0px;
+    padding: 18px 0px 0px 0px;
+}
+
+#contextmenu div {
+    font: 100% Verdana, Helvetica, Arial, sans-serif;
+    background-color: #EBE9DF;
+    border: 1px solid #C1BBAC;
+    padding: 5px 0px 5px 5px;
+    margin: 2px 0px 10px 0px;
+}
+
+#contextmenu div span {
+    white-space: nowrap;
+}
+
+#contextmenu div a {
+	color: #666666;
+    font-weight: normal;
+    padding: 2px 6px 2px 6px;
+}
+
+#contextmenu div a:hover {
+	color: black;
+	text-decoration: none;
+	background-color: #CECEFF;
+	border: 1px solid #2475BB;
+    padding: 2px 5px 2px 5px;
+}
+
+#contextmenu div a.selected {
+	color: black;
+	text-decoration: none;
+	background-color: #D9DAF2;
+	border: 1px solid #2475BB;
+    padding: 2px 5px 2px 5px;
+}
+
+#content {
+    width: 100%;
+    margin: 0px;
+    padding: 0px 10px 0px 10px;
+}
+
+
+/* standard fields
+*/
+div.row div.field {
+    clear: left;
+}
+
+div.row div.label {
+    font-weight: bold;
+	margin: 0;
+}
+
+div.row span.error {
+    background: #A51212;
+    color: white;
+	margin: 0;
+}
+
+
+/* widget row layout
+*/
+#widgets {
+    width: 100%;
+    margin: 0px 0px 10px 0px;
+}
+
+#widgets td {
+    height: 25px;
+    vertical-align: top;
+}
+
+#widgets td.labels {
+    width: 100px;
+    text-align: right;
+    background: #DAD8CF;
+    padding: 7px 5px 5px 0px;
+}
+
+#widgets td.fields {
+    background: #EBEBE2;
+    padding: 7px 5px 5px 20px;
+}
+
+#widgets div.error {
+    color: #A51212;
+}
+
+
+/* footer area 
+*/
+#footer {
+    float: left;
+    clear: both;
+}
+
+
+/* table layout
+*/
+table.listing {
+    width: 100%;
+    margin: 0px 0px 10px 0px;
+}
+
+table.listing th {
+    height: 18px;
+    background: #EBE9DF;
+    color: black;
+    font-weight: normal;
+    text-align: left;
+    white-space: nowrap;
+    padding: 2px 0px 2px 0px;
+    margin: 0px 0px 0px 0px;
+}
+
+table.listing td.top {
+    text-align: right ! important;
+    padding: 0px 0px 0px 0px;
+}
+
+table.listing tr.odd {
+    background: #F3F3EE;
+}
+
+table.listing tr.even {
+    border: 0px;
+    background: transparent;
+}
+
+table.listing td {
+    text-align: left;
+    padding: 2px 0px 2px 0px;
+}
+
+table.listing img {
+    vertical-align: middle;
+}
+
+table.listing input {
+    padding: 3px 5px 0px 5px;
+}
+
+
+/* messages and errors
+*/
+div.message {
+    height: 18px;
+    color: Black;
+    font: 100% Verdana, Helvetica, Arial, sans-serif;
+    background: #D9DAF2;
+    border: 1px solid #2475BB;
+    padding: 3px 6px 10px 6px;
+    margin-right: 10px;
+}
+
+div.message a {
+    color: Black;
+    text-decoration: underline;
+}
+
+div.page_error {  
+    font: 100% Verdana, Helvetica, Arial, sans-serif;
+    background: #F29F9F;
+    border: 1px solid #A51212; 
+    padding: 2px 5px; 
+    margin: 0px 0px 10px 0px; 
+    vertical-align: middle; 
+}


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/skin.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/standardmacros.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/standardmacros.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/standardmacros.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin
+
+$Id$
+"""
+
+from zope.app.basicskin.standardmacros import StandardMacros as BaseMacros
+
+class StandardMacros(BaseMacros):
+    macro_pages = ('skin_macros', 'view_macros', 'dialog_macros'
+                  , 'navigation_macros')


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/standardmacros.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/template.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/template.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/template.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,121 @@
+<metal:block define-macro="page"><metal:block define-slot="doctype"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></metal:block>
+
+<html xmlns="http://www.w3.org/1999/xhtml" 
+      xml:lang="en" lang="en" 
+      i18n:domain="zope">
+<head> 
+  <title metal:define-slot="title"
+         tal:content="string:Zope 3: ${context/zope:title_or_name}">
+    Zope 3: title
+  </title>
+
+  <!-- head viewlets -->
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<tal:block replace="structure provider:zope.app.boston.IHead" />
+  <metal:block define-slot="headers"></metal:block>
+
+  <!-- css viewlets -->
+  <tal:block replace="structure provider:zope.app.boston.ICSS" />
+  <metal:block define-slot="style_slot"></metal:block>
+
+  <!-- javascripts viewlets -->
+  <tal:block replace="structure provider:zope.app.boston.IJavaScript" />
+  <metal:block define-slot="ecmascript_slot"></metal:block>
+
+  <link rel="icon" type="image/png" 
+        tal:attributes="href context/++resource++favicon.png" />
+</head>
+
+<body tal:attributes="onload body_onload | nothing"
+			tal:define="global rooturl request/getApplicationURL;
+                  global thisbaseurl request/URL/-1">
+
+  <table id="layout">
+    <tr class="menu">
+      <td colspan="2">
+        <!-- toolbar region (zmi_action) -->
+        <tal:block replace="structure provider:zope.app.boston.IToolBar" />
+        <div id="userdetails">
+          <metal:block define-macro="logged_user">
+            <span tal:omit-tag="" i18n:translate="">User:</span>
+            <tal:block replace="request/principal/title">User</tal:block>
+          </metal:block>
+          <a href="" 
+             tal:attributes="href string:@@logout.html?nextURL=${request/URL}"
+             tal:condition="python: hasattr(view.request.principal, 'getLogin')"
+             i18n:translate="">[Logout]</a>
+          <a href="" 
+             tal:attributes="href string:@@login.html?nextURL=${request/URL}"
+             tal:condition="python: not hasattr(view.request.principal, 
+                                                'getLogin')"
+             i18n:translate="">[Login]</a>
+        </div>
+      </td>
+    </tr>
+    <tr class="head">
+      <td class="logo">
+        <img width="107" height="38"
+             tal:attributes="src context/++resource++logo.gif" />
+      </td>
+      <td>
+        <div id="breadcrumbs" metal:define-macro="breadcrumbs">
+          <span tal:omit-tag="" i18n:translate="">Location:&nbsp;</span>
+          <tal:block repeat="breadcrumb context/@@absolute_url/breadcrumbs">
+            <a href=""
+               tal:condition="repeat/breadcrumb/start"
+               tal:attributes="href 
+                    string:${breadcrumb/url}/@@SelectedManagementView.html"
+               i18n:translate="">[top]</a>
+            <a href=""
+               tal:condition="not:repeat/breadcrumb/start"
+               tal:content="string:${breadcrumb/name}"
+               tal:attributes="href 
+                    string:${breadcrumb/url}/@@SelectedManagementView.html"
+               >breadcrumb item</a>
+            / 
+          </tal:block>
+        </div>
+      </td>
+    </tr>
+    <tr>
+      <td id="navigation">
+        <div id="slotbox">
+        	<tal:block replace="structure provider:zope.app.boston.ILeft" />
+        </div>
+      </td>
+      <td id="content">
+        <!-- context menu (zmi_views) just visible in view template -->
+<!--
+        <div id="contextmenu" tal:condition="python: macroname == 'view'">
+          <tal:block replace="structure provider:zope.app.boston.IContextMenu" />
+        </div>
+-->
+        <!-- content area -->
+        <div metal:define-slot="message" id="message" />
+        <div id="body" metal:define-slot="body">
+          <table class="listing">
+            <thead>
+              <th>Test</th>
+              <th>Another</th>
+            </thead>
+            <tbody>
+              <tr>
+                <td>content</td>
+                <td>thingy</td>
+              </tr>
+              <tr class="even">
+                <td>more</td>
+                <td>data</td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div id="footer" metal:define-macro="footer" />
+        <div id="logger" />
+      </td>
+    </tr>
+  </table>
+
+</body>
+</html>
+</metal:block>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/template.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget.css
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget.css	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget.css	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,9 @@
+/*colorize the matrix table used in grant.html*/
+table.matrix td.default {
+    background: #82BA78;
+}
+
+
+table.matrix td.changed {
+    background: #D96868;
+}


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget_macros.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget_macros.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget_macros.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,34 @@
+<html>
+  <body>
+    <metal:block define-macro="widget_rows">
+
+      <table id="widgets" border="0" cellspacing="0" cellpadding="0">
+        <div class="row" tal:repeat="widget view/widgets">
+          <metal:block define-macro="widget_row">
+            <tr>
+              <td class="labels">
+                <div class="label">
+                  <label for="field.name" title="The widget's hint"
+                       tal:attributes="for widget/name; title widget/hint"
+                       tal:content="widget/label">The Label</label>
+                </div>
+              </td>
+              <td class="fields">
+                <div class="field" tal:content="structure widget">
+                  <input type="text" style="width:100%" />
+                </div>
+                <div class="error" 
+                     tal:define="error widget/error"
+                     tal:condition="error" 
+                     tal:content="structure error">
+                  The Error
+                </div>
+              </td>
+            </tr>
+          </metal:block>
+        </div>
+      </table>
+
+    </metal:block>
+  </body>
+</html>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/browser/widget_macros.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/configure.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/configure.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/configure.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,69 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    xmlns:help="http://namespaces.zope.org/help"
+    xmlns:zcml="http://namespaces.zope.org/zcml"
+    i18n_domain="zope">
+
+  <layer 
+      name="boston"
+      interface="zope.app.boston.boston"
+      />  
+
+  <skin 
+      name="Boston"
+      interface="zope.app.boston.Boston"
+      />
+
+  <viewletManager
+      name="zope.app.boston.IHead"
+      provides="zope.app.boston.IHead"
+      layer="zope.app.boston.boston"
+      permission="zope.Public"
+      />
+
+  <viewletManager
+      name="zope.app.boston.ICSS"
+      provides="zope.app.boston.ICSS"
+      layer="zope.app.boston.boston"
+      permission="zope.Public"
+      />
+
+  <viewletManager
+      name="zope.app.boston.IJavaScript"
+      provides="zope.app.boston.IJavaScript"
+      layer="zope.app.boston.boston"
+      permission="zope.Public"
+      />
+
+  <viewletManager
+      name="zope.app.boston.IToolBar"
+      provides="zope.app.boston.IToolBar"
+      class=".viewlets.toolbar.browser.views.ToolBarViewletManager"
+      template="viewlets/toolbar/browser/macros.pt"
+      layer="zope.app.boston.boston"
+      permission="zope.Public"
+      />
+
+  <viewletManager
+      name="zope.app.boston.ILeft"
+      provides="zope.app.boston.ILeft"
+      layer="zope.app.boston.boston"
+      permission="zope.Public"
+      />
+
+
+  <include package=".viewlets" />
+  <include package=".browser" />
+
+
+  <configure zcml:condition="have onlinehelp">
+    <help:register
+        id="boston"
+        title="Boston Skin (experimental)"
+        doc_path="README.txt"
+        class="zope.app.onlinehelp.onlinehelptopic.RESTOnlineHelpTopic"
+        />
+  </configure>
+    
+</configure>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin viewlets
+
+$Id$
+"""


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,18 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin
+
+$Id$
+"""
+    


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin
+
+$Id$
+"""


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/viewlet.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/viewlet.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/viewlet.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,43 @@
+<div metal:define-macro="addinginfo" class="slotbox" id="addinginfo"
+		tal:define="global addingInfo view/addingInfo">
+
+	<div class="header"> 
+		<div class="title" i18n:translate="">Add</div>
+	</div>
+
+	<div class="body" tal:condition="addingInfo">
+		<span tal:repeat="info addingInfo" tal:omit-tag="">
+			<div class="even"
+						tal:define="namesRequired view/nameAllowed;
+												oddrow repeat/info/odd;
+												has_custom_add_view python:'has_custom_add_view' in info"
+					 tal:attributes="class python:oddrow and 'content even' or 'content odd'">
+				<a href="#"
+						tal:define="baseurl python:request.getURL(1)"
+						tal:condition="python: not info['action'].startswith('../')
+														and namesRequired and not has_custom_add_view"
+						tal:attributes="href string:${baseurl}/@@contents.html?type_name=${info/action};
+														class info/selected"
+						tal:content="info/title" i18n:translate="">Folder
+				</a>
+						
+				<a href="#"
+						tal:define="baseurl python:request.getURL(1)"
+						tal:condition="python: not info['action'].startswith('../') 
+											 and (has_custom_add_view or not namesRequired)"
+						tal:attributes="href string:${baseurl}/@@+/action.html?type_name=${info/action};
+														class info/selected"
+						tal:content="info/title" i18n:translate="">Folder
+				</a>
+		
+				<a href="#"
+						tal:define="baseurl python:request.getURL(1)"
+						tal:condition="python: info['action'].startswith('../')"
+						tal:attributes="href python: info['action'][3:];
+														class info/selected"
+						tal:content="info/title" i18n:translate="">Folder
+				</a>
+			</div>
+		</span>
+	</div>
+</div>
\ No newline at end of file


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/viewlet.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/views.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/views.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/views.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,52 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin
+
+$Id$
+"""
+
+from zope.interface import implements
+
+from zope.app.container.interfaces import IAdding
+from zope.app.zapi import queryMultiAdapter
+
+from zope.app.i18n import ZopeMessageFactory as _
+from zope.app.boston.viewlets.addinginfo.interfaces import IAddingInfoViewlet
+
+
+
+class AddingInfoViewlet(object):
+    """I18n info viewlet."""
+
+    implements(IAddingInfoViewlet)
+
+    def getTitle(self):
+        """Get title of viewlet"""
+        return _("Adding info")
+
+    def addingInfo(self):
+        """Get adding info from IAdding view."""
+        addingView = queryMultiAdapter((self.context, self.request), name='+')
+        if addingView is not None:
+            return addingView.addingInfo()
+        else:
+            return {}
+
+    def nameAllowed(self):
+        """Return whether names can be input by the user."""
+        addingView = queryMultiAdapter((self.context, self.request), name='+')
+        if addingView is not None:
+            return addingView.nameAllowed()
+        else:
+            return False


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/browser/views.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/interfaces.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/interfaces.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/interfaces.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,38 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin
+
+$Id$
+"""
+
+__docformat__ = "reStructuredText"
+
+from zope.viewlet.interfaces import IViewlet
+
+
+
+class IAddingInfoViewlet(IViewlet):
+    """Adding info API for the adapted context."""
+
+    def getTitle():
+        """Get the view title."""
+
+    def addingInfo():
+        """Get adding info from IAdding view. Returns menu data.
+
+        This is sorted by title.
+        """
+
+    def nameAllowed(self):
+        """Return whether names can be input by the user."""
\ No newline at end of file


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,17 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain="zope">
+
+  <viewlet
+      name="addinginfo"
+      for="zope.app.container.interfaces.IWriteContainer"
+      manager="zope.app.boston.ILeft"
+      permission="zope.ManageContent"
+      class=".addinginfo.browser.views.AddingInfoViewlet"
+      template="addinginfo/browser/viewlet.pt"
+      layer="zope.app.boston.boston"
+      weight="3"
+      />
+
+</configure>
\ No newline at end of file


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/addinginfo.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/configure.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/configure.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/configure.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,38 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+
+
+  <include file="xmltree.zcml" />
+  <include file="toolbar.zcml" />
+  <include file="addinginfo.zcml" />
+
+
+  <!-- IHead slot pagelets -->
+  <!--<include file="head.zcml" />-->
+
+  <!-- IJavaScript slot pagelets -->
+<!--
+  <include file="toggle.zcml" />
+-->
+
+  <!-- IToolBar slot pagelets -->
+<!--
+  <include file="toolbar.zcml" />
+  <include file="zmiactions.zcml" />
+  <include file="helpaction.zcml" />
+-->
+
+  <!-- ILeft slot pagelets -->
+<!--
+  <include file="zmicookietreebox.zcml" />
+  <include file="addbox.zcml" />
+  <include file="tooltipbox.zcml" />
+-->
+
+  <!-- IContent slot pagelets -->
+<!--
+  <include file="contextmenu.zcml" />
+-->
+
+</configure>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin Toolbar
+
+$Id$
+"""


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Skintools toolbar views
+
+$Id$
+"""


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/css.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/css.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/css.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,4 @@
+<style type="text/css" media="all" 
+       tal:content="string: @import url(${context/++resource++toolbar.css});">
+  @import url(toolbar.css);
+</style>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/css.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/divmenu.js
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/divmenu.js	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/divmenu.js	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,427 @@
+//----------------------------------------------------------------------------
+// DivMenu renders a nested list of <div> tags to a menu bar. See README.html 
+// for a static sample.
+// We move this javascript to zope.app.skintools.javascripts.divmenu later
+//----------------------------------------------------------------------------
+
+var menus = new Array(); // we put each menu in this Array
+
+function DivMenu(id) {
+    this.type = "horizontal";
+    this.menuPosTop = 0;
+    this.menuPosLeft = 0;
+    this.subPosTop = 0;
+    this.subPosLeft = 0;
+    this.arrow = null;
+    this.arrowOver = null;
+    this.id = id;
+    menus[self.id] = this;
+    this.tree = new Array();
+    this.visible = new Array();
+
+    // Browser detection
+    this.browser = {
+        "ie": Boolean(document.body.currentStyle),
+        "ie5": (navigator.appVersion.indexOf("MSIE 5.5") != -1 || navigator.appVersion.indexOf("MSIE 5.0") != -1)
+    };
+    if (!this.browser.ie) {
+        this.browser.ie5 = false;
+    }
+}
+
+/* Initialize the menu */
+DivMenu.prototype.init = function() {
+    document.onmousedown = this.click;
+    if (this.browser.ie && this.browser.ie5) {
+        this.fixWrap();
+    }
+    this.fixSections();
+    this.parse(document.getElementById(this.id).childNodes, this.tree, this.id);
+}
+
+/* Search for menugroup elements and set width for them */
+DivMenu.prototype.fixSections = function() {
+    var arr = document.getElementById(this.id).getElementsByTagName("div");
+    var menugroups = new Array();
+    var widths = new Array();
+
+    for (var i = 0; i < arr.length; i++) {
+        if (arr[i].className == "menugroup") {
+            menugroups.push(arr[i]);
+        }
+    }
+    for (var i = 0; i < menugroups.length; i++) {
+        widths.push(this.getMaxWidth(menugroups[i].childNodes));
+    }
+    for (var i = 0; i < menugroups.length; i++) {
+        menugroups[i].style.width = (widths[i]) + "px";
+    }
+    if (menus[self.id].browser.ie) {
+        for (var i = 0; i < menugroups.length; i++) {
+            this.setMaxWidth(menugroups[i].childNodes, widths[i]);
+        }
+    }
+
+}
+
+DivMenu.prototype.fixWrap = function() {
+    var elements = document.getElementById(this.id).getElementsByTagName("a");
+    for (var i = 0; i < elements.length; i++) {
+        if (/submenu/.test(elements[i].className)) {
+            elements[i].innerHTML = '<div nowrap="nowrap">'+elements[i].innerHTML+'</div>';
+        }
+    }
+}
+
+/* Search for highest width */
+DivMenu.prototype.getMaxWidth = function(nodes) {
+    var maxWidth = 0;
+    for (var i = 0; i < nodes.length; i++) {
+        if (nodes[i].nodeType != 1 || nodes[i].className == "menugroup") {
+            continue;
+        }
+        if (nodes[i].offsetWidth > maxWidth) maxWidth = nodes[i].offsetWidth;
+    }
+    return maxWidth;
+}
+
+/* Set width for submenu elements */
+DivMenu.prototype.setMaxWidth = function(nodes, maxWidth) {
+    for (var i = 0; i < nodes.length; i++) {
+        if (nodes[i].nodeType == 1 && /submenu/.test(nodes[i].className) && nodes[i].currentStyle) {
+            if (this.browser.ie5) {
+                nodes[i].style.width = (maxWidth) + "px";
+            } else {
+                nodes[i].style.width = (maxWidth - parseInt(nodes[i].currentStyle.paddingLeft) - parseInt(nodes[i].currentStyle.paddingRight)) + "px";
+            }
+        }
+    }
+}
+
+/* Parse menu structure, create events and position elements */
+DivMenu.prototype.parse = function(nodes, tree, id) {
+    for (var i = 0; i < nodes.length; i++) {
+        if (nodes[i].nodeType != 1) { continue };
+        switch (nodes[i].className) {
+            case "topmenu":
+                nodes[i].id = id + "-" + tree.length;
+                tree.push(new Array());
+                nodes[i].onmouseover = this.topmenuOverShowsChilds;
+                nodes[i].onclick = this.topmenuClick;
+                break;
+            case "submenu":
+                nodes[i].id = id + "-" + tree.length;
+                tree.push(new Array());
+                nodes[i].onmouseover = this.submenuOver;
+                nodes[i].onmouseout = this.submenuOut;
+                nodes[i].onclick = this.submenuClick;
+                break;
+            case "menugroup":
+                nodes[i].id = id + "-" + (tree.length - 1) + "-menugroup";
+                var parentDiv = document.getElementById(id + "-" + (tree.length - 1));
+                var childDiv = document.getElementById(nodes[i].id);
+                var el = new DivMenuGroup(parentDiv.id);
+                if (el.level == 1) {
+                    if (this.type == "horizontal") {
+                        childDiv.style.top = (parentDiv.offsetTop + parentDiv.offsetHeight + this.menuPosTop-3) + "px";
+                        if (this.browser.ie5) {
+                            childDiv.style.left = (2+this.menuPosLeft) + "px";
+                        } else {
+                            childDiv.style.left = (2+parentDiv.offsetLeft + this.menuPosLeft) + "px";
+                        }
+                    } else if (this.type == "vertical") {
+                        childDiv.style.top = (parentDiv.offsetTop + this.menuPosTop) + "px";
+                        if (this.browser.ie5) {
+                            childDiv.style.left = (2+parentDiv.offsetWidth + this.menuPosLeft) + "px";
+                        } else {
+                            childDiv.style.left = (2+parentDiv.offsetLeft + parentDiv.offsetWidth + this.menuPosLeft) + "px";
+                        }
+                    }
+                } else {
+                    childDiv.style.top = (parentDiv.offsetTop + this.subPosTop-3) + "px";
+                    childDiv.style.left = (2+parentDiv.offsetLeft + parentDiv.offsetWidth + this.subPosLeft) + "px";
+                }
+                break;
+            case "menuarrow":
+                nodes[i].id = id + "-" + (tree.length - 1) + "-menuarrow";
+                break;
+        }
+        if (nodes[i].childNodes) {
+            if (nodes[i].className == "menugroup") {
+                this.parse(nodes[i].childNodes, tree[tree.length - 1], id + "-" + (tree.length - 1));
+            } else {
+                this.parse(nodes[i].childNodes, tree, id);
+            }
+        }
+    }
+}
+
+/* Hide all menugroups */
+DivMenu.prototype.hideAll = function() {
+    for (var i = this.visible.length - 1; i >= 0; i--) {
+        this.hide(this.visible[i]);
+    }
+}
+
+/* Hide higher or equal levels */
+DivMenu.prototype.hideHigherOrEqualLevels = function(n) {
+    for (var i = this.visible.length - 1; i >= 0; i--) {
+        var el = new DivMenuGroup(this.visible[i]);
+        if (el.level >= n) {
+            this.hide(el.id);
+        } else {
+            return;
+        }
+    }
+}
+
+/* Hide a menugroup */
+DivMenu.prototype.hide = function(id) {
+    var el = new DivMenuGroup(id);
+    document.getElementById(id).className = (el.level == 1 ? "topmenu" : "submenu");
+    if (el.level > 1 && this.arrowOver) {
+        document.getElementById(id + "-menuarrow").src = this.arrow;
+    }
+    document.getElementById(id + "-menugroup").style.visibility = "hidden";
+    document.getElementById(id + "-menugroup").style.zIndex = -1;
+    if (this.visible.contains(id)) {
+        if (this.visible[this.visible.length - 1] == id) {
+            this.visible.pop();
+        }
+    }
+}
+
+/* Show a menugroup */
+DivMenu.prototype.show = function(id) {
+    var el = new DivMenuGroup(id);
+    document.getElementById(id).className = (el.level == 1 ? "topmenu-active" : "submenu-active");
+    if (el.level > 1 && this.arrowOver) {
+        document.getElementById(id + "-menuarrow").src = this.arrowOver;
+    }
+    document.getElementById(id + "-menugroup").style.visibility = "visible";
+    document.getElementById(id + "-menugroup").style.zIndex = 1;
+    this.visible.push(id);
+}
+
+/* event, document.onmousedown */
+DivMenu.prototype.click = function(e) {
+    var el;
+    if (e) {
+        el = e.target.tagName ? e.target : e.target.parentNode;
+    } else {
+        el = window.event.srcElement;
+        if (el.parentNode && /submenu/.test(el.parentNode.className)) {
+            el = el.parentNode;
+        }
+    }
+    if (!menus[self.id].visible.length) { return };
+    if (!el.onclick) { menus[self.id].hideAll(); }
+}
+
+/* event, topmenu.onmouseover will show children*/
+DivMenu.prototype.topmenuOverShowsChilds = function() {
+    var el = new DivMenuGroup(this.id);
+    menus[self.id].hideHigherOrEqualLevels(el.level);
+    if (el.hasChilds()) {
+        menus[self.id].show(this.id);
+    }
+}
+
+/* event, topmenu.onmouseover */
+DivMenu.prototype.topmenuOver = function() {
+    if (!menus[self.id].visible.length) {
+        return;
+    }
+    if (menus[self.id].visible.contains(this.id)) { return };
+    menus[self.id].hideAll();
+    var el = new DivMenuGroup(this.id);
+    if (el.hasChilds()) {
+        menus[self.id].show(this.id);
+    }
+}
+
+/* event, topmenu.onclick */
+DivMenu.prototype.topmenuClick = function() {
+    this.blur();
+    if (menus[self.id].visible.length) {
+        menus[self.id].hideAll();
+    } else {
+        var el = new DivMenuGroup(this.id);
+        if (el.hasChilds()) {
+            menus[self.id].show(this.id);
+        }
+    }
+}
+
+/* event, submenu.onmouseover */
+DivMenu.prototype.submenuOver = function() {
+    var el = new DivMenuGroup(this.id);
+    menus[self.id].hideHigherOrEqualLevels(el.level);
+    if (el.hasChilds()) {
+        menus[self.id].show(this.id);
+    }
+}
+
+/* event, onmouseout hide all children */
+DivMenu.prototype.mouseOutHideAll = function() {
+    menus[self.id].hideAll();
+}
+
+/* event, submenu.onmouseout */
+DivMenu.prototype.submenuOut = function() {
+    var el = new DivMenuGroup(this.id);
+    if (!el.hasChilds()) {
+        document.getElementById(this.id).className = "submenu";
+    }
+}
+
+/* event, submenu.onclick */
+DivMenu.prototype.submenuClick = function() {
+    this.blur();
+    var el = new DivMenuGroup(this.id);
+    menus[self.id].hideHigherOrEqualLevels(el.level);
+    if (el.hasChilds()) {
+        menus[self.id].show(this.id);
+    }
+}
+
+/* DivMenuGroup */
+function DivMenuGroup(id) {
+    this.id = id;
+    this.level = this.getLevel();
+}
+
+/* Get Level of given id */
+DivMenuGroup.prototype.getLevel = function() {
+    menu = menus[self.id]
+    var s = this.id.substr(menu.id.length);
+    return s.split("-").length - 1;
+}
+
+
+/* Check whether an element has a sub menugroup */
+DivMenuGroup.prototype.hasChilds = function() {
+    return Boolean(document.getElementById(this.id + "-menugroup"));
+}
+
+/* add missing Array function if needed (e.g. ie5) */
+if (!Array.prototype.contains) {
+    Array.prototype.contains = function(s) {
+        for (var i = 0; i < this.length; i++) {
+            if (this[i] == s) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
+if(!Array.prototype.copy) {
+    Array.prototype.copy=function(a){
+        var i = 0;
+        var b = [];
+        for(i;i<this.length;i++)
+            b[i] = (typeof this[i].copy != 'undefined')?
+                this[i].copy():
+                this[i];
+        return b
+    };
+}
+
+if(!Array.prototype.concat) {
+    Array.prototype.concat=function(a){
+        var i = 0;
+        var b = this.copy();
+        for(i;i<a.length;i++) {
+            b[b.length]=a[i];
+        }
+        return b
+    };
+}
+    
+if(!Array.prototype.pop) {
+    Array.prototype.pop=function(){
+      var response = this[this.length - 1]
+      this.length--
+      return response
+    };
+}
+
+if(!Array.prototype.push) {
+    Array.prototype.push=function(){
+        var i = 0;
+        var b = this.length;
+        var a = arguments;
+        for(i;i<a.length;i++) {
+            this[b+i] = a[i];
+        }
+        return this.length
+    };
+}
+
+if(!Array.prototype.shift) {
+    Array.prototype.shift=function(){
+        var i = 0;
+        var b = this[0];
+        for(i;i<this.length-1;i++) {
+            this[i] = this[i+1];
+        }
+        this.length--;
+        return b
+    };
+}
+
+if(!Array.prototype.slice) {
+    Array.prototype.slice=function(a,c){
+        var i = 0;
+        var b;
+        var d = [];
+        if(!c) {
+            c=this.length;
+        }
+        if(c<0) {
+            c=this.length+c;
+        }
+        if(a<0) {
+            a=this.length-a;
+        }
+        if(c<a){
+            b = a;
+            a = c;
+            c = b
+        }
+        for(i;i<c-a;i++)
+            d[i] = this[a+i];
+        return d
+    };
+}
+
+if(!Array.prototype.splice) {
+    Array.prototype.splice=function(a,c){
+        var i = 0;
+        var e = arguments;
+        var d = this.copy();
+        var f = a;
+        if(!c) {
+            c=this.length-a;
+        }
+        for(i;i<e.length-2;i++) {
+            this[a+i]=e[i+2];
+        }
+        for(a;a<this.length-c;a++) {
+            this[a+e.length-2]=d[a-c];
+        }
+        this.length-=c-e.length+2;
+        return d.slice(f,f+c)
+    };
+}
+
+if(!Array.prototype.unshift) {
+    Array.prototype.unshift=function(a){
+        var b;
+        this.reverse();
+        b = this.push(a);
+        this.reverse();
+        return b
+    };
+}

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/javascript.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/javascript.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/javascript.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,11 @@
+<script type="text/javascript" src="divmenu.js"
+        tal:attributes="src string:${context/++resource++divmenu.js}" ></script>
+
+<script type="text/javascript"
+        tal:attributes="language string:JavaScript"
+        tal:content="structure string:
+	var divMenuArrow = new Image(4, 7);
+	divMenuArrow.src = '${context/++resource++toolbarArrow.gif}';
+	var divMenuArrowOver = new Image(4, 7);
+	divMenuArrowOver.src = '${context/++resource++toolbarArrowOver.gif}';">
+</script>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/javascript.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/macros.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/macros.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/macros.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,58 @@
+<!-- topmenu macro, render first level items with class name 'topmenu' -->
+<metal:block define-macro="topmenu">
+	<a href="" class="topmenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<metal:block use-macro="python:view.macros('submenu')" />
+			</tal:block>
+		</tal:block>
+	</div>
+</metal:block>
+
+<!-- submenu macro, render all except first level items with class name 'item' -->
+<metal:block define-macro="submenu2">
+	<a href="" class="submenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<metal:block use-macro="python:view.macros('submenu')" />
+			</tal:block>
+		</tal:block>
+	</div>
+</metal:block>
+
+<!-- item display macro -->
+<metal:block define-macro="itemdisplay">
+   <img class="itemicon"
+        tal:condition="menuitem/icon"
+        tal:attributes="src menuitem/icon" />
+   &nbsp;
+   <span tal:content="menuitem/title" />
+
+   <img class="submenuhint" src="/++resource++submenuhint.png" 
+        tal:condition="menuitem/submenu"/>
+</metal:block>
+
+<!-- menu item macro -->
+<metal:block define-macro="submenu">
+  <a href=""
+     tal:attributes="href menuitem/action;">
+    <metal:block use-macro="python:view.macros('itemdisplay')" />
+  </a>
+  <ul tal:condition="menuitem/submenu">
+    <li tal:repeat="subitem menuitem/submenu">
+      <tal:block define="menuitem subitem">
+        <metal:block use-macro="python:view.macros('submenu')" />
+      </tal:block>
+    </li>
+  </ul>
+</metal:block>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/macros.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/template.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/template.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/template.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,24 @@
+<div class="ToolBarContainer">
+	<table cellspacing="0" cellpadding="0" id="toolbar" class="ToolBar">
+		<tr>
+			<td><img src="/++resource++toolbarGrip.gif" width="5" height="18"
+								tal:attributes="src string:${context/++resource++toolbarGrip.gif}" /></td>
+			<td tal:repeat="menuitem python:view.menus('zmi_actions')">
+				<metal:block use-macro="python:view.macros('topmenu')" />
+			</td>
+			<!--
+			<td>
+				<tal:block content="python:view.menus('zmi_actions')" />
+			</td>
+			-->
+		</tr>
+	</table>
+</div>
+<script type="text/javascript"
+        tal:attributes="language string:JavaScript"
+        tal:content="structure string:
+  var toolbar = new DivMenu('toolbar');
+  toolbar.divMenuArrow = '${context/++resource++toolbarArrow.gif}';
+  toolbar.divMenuArrowOver = '${context/++resource++toolbarArrowOver.gif}';
+  toolbar.init();">
+</script>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/template.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.css
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.css	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.css	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,87 @@
+div.ToolBarContainer {
+    border-bottom: 1px solid #D8D2BD;
+    padding-top: 1px;
+    padding-bottom: 1px;
+    padding-left: 5px;
+    cursor: default;        
+}
+
+.ToolBar {
+    font-family: tahoma, verdana, arial, sans-serif;
+    font-size: 11px;
+}
+
+.ToolBar hr {
+    height: 1px;
+    color: silver;
+}
+
+.ToolBar .topmenu,
+.ToolBar .topmenu:hover,
+.ToolBar .topmenu-active,
+.ToolBar .topmenu-active:hover {
+    line-height: normal;
+    padding: 5px 6px 4px 6px;
+    margin: 1px; 
+    color: #000000;
+    text-decoration: none;
+    cursor: default;
+    white-space: nowrap;
+    display: block;
+    position: relative;
+}
+.ToolBar .topmenu:hover {
+    margin: 0px;
+    border: 1px solid #8F8F85;
+    background:#EFECDE;
+}
+.ToolBar .topmenu-active,
+.ToolBar .topmenu-active:hover {    
+    margin: 0px;
+    border: 1px solid #8F8F85;    
+    border-bottom:none;
+    background:#C9D5E5;
+}
+
+.ToolBar .submenu,
+.ToolBar .submenu:hover,
+.ToolBar .submenu-active,
+.ToolBar .submenu-active:hover {
+    border:1px solid #FDFDF9;
+    background: #FDFDF9;
+    line-height: normal;
+    padding: 3px 30px 3px 20px;
+    color: black;
+    text-decoration: none;
+    cursor: default;
+    white-space: nowrap;
+    display: block;
+    position: relative;
+}
+.ToolBar .submenu:hover,
+.ToolBar .submenu-active,
+.ToolBar .submenu-active:hover {
+    border:1px solid #316BC6;
+    background: #C9D5E5;
+    color: black;
+}
+
+.ToolBar .menugroup {
+    background: #FCFCF8;
+    border: 1px solid;
+    border-color: #F1EFE2 #716F64 #716F64 #F1EFE2;
+    padding: 2px 1px 1px 2px;
+    position: absolute;
+    visibility: hidden;
+    z-index: -1;       
+}
+.ToolBar .menuarrow {
+    position: absolute;
+    top: 7px;
+    right: 8px;
+    border: 0;
+}
+
+* html .ToolBar td { 
+    position: relative;
+} /* ie 5.0 fix */


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,57 @@
+<metal:block define-macro="toolbar">
+<div class="ToolBarContainer">
+	<table cellspacing="0" cellpadding="0" id="toolbar" class="ToolBar">
+		<tr>
+			<td><img src="/++resource++toolbarGrip.gif" width="5" height="18"
+								tal:attributes="src string:${context/++resource++toolbarGrip.gif}" /></td>
+			<td tal:repeat="menuitem context/@@view_get_menu/zmi_actions">
+<!--				<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-button" /> -->
+			</td>
+		</tr>
+	</table>
+</div>
+<script type="text/javascript"
+        tal:attributes="language string:JavaScript"
+        tal:content="structure string:
+  var toolbar = new DivMenu('toolbar');
+  toolbar.divMenuArrow = '${context/++resource++toolbarArrow.gif}';
+  toolbar.divMenuArrowOver = '${context/++resource++toolbarArrowOver.gif}';
+  toolbar.init();">
+</script>
+</metal:block>
+
+<!-- render first level items with class name 'button' -->
+<!--
+<metal:block define-macro="toolbar-button">
+	<a href="" class="topmenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-item" />
+			</tal:block>
+		</tal:block>
+	</div>
+</metal:block>
+-->
+
+<!-- render all except first level items with class name 'item' -->
+<!--
+<metal:block define-macro="toolbar-item">
+	<a href="" class="submenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-item" />
+			</tal:block>
+		</tal:block>
+	</div>
+</metal:block>
+-->


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarArrow.gif
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarArrow.gif
___________________________________________________________________
Name: svn:mime-type
   + image/gif

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarArrowOver.gif
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarArrowOver.gif
___________________________________________________________________
Name: svn:mime-type
   + image/gif

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarGrip.gif
===================================================================
(Binary files differ)


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbarGrip.gif
___________________________________________________________________
Name: svn:mime-type
   + image/gif

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar_layout.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar_layout.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar_layout.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,25 @@
+<html>
+<body>
+
+
+<metal:block define-macro="menuitem">
+  <a href=""
+     tal:attributes="href menuitem/action;">
+		<img class="itemicon"
+					tal:condition="menuitem/icon"
+					tal:attributes="src menuitem/icon" />&nbsp;
+		<span tal:content="menuitem/title" />
+		<img class="submenuhint" src="/++resource++submenuhint.png" 
+					tal:condition="menuitem/submenu"/>
+  </a>
+  <ul tal:condition="menuitem/submenu">
+    <li tal:repeat="subitem menuitem/submenu">
+      <tal:block define="menuitem subitem">
+        <metal:block use-macro="context/@@menudemo_macros/menuitem" />
+      </tal:block>
+    </li>
+  </ul>
+</metal:block>
+
+</body>
+</html>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/toolbar_layout.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/topmenu.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/topmenu.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/topmenu.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,14 @@
+<!-- topemnu -->
+	<a href="" class="topmenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<!--<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-item" />-->
+			</tal:block>
+		</tal:block>
+	</div>
+<!-- topmenu -->


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/topmenu.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/viewlet.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/viewlet.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/viewlet.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,51 @@
+<!-- topemnu -->
+	<a href="" class="topmenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<!--<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-item" />-->
+			</tal:block>
+		</tal:block>
+	</div>
+<!-- topmenu -->
+
+
+<!-- render first level items with class name 'button' -->
+<!--
+<metal:block define-macro="toolbar-button">
+	<a href="" class="topmenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-item" />
+			</tal:block>
+		</tal:block>
+	</div>
+</metal:block>
+-->
+
+<!-- render all except first level items with class name 'item' -->
+<!--
+<metal:block define-macro="toolbar-item">
+	<a href="" class="submenu"
+		 tal:attributes="href menuitem/action"
+		 tal:content="menuitem/title"
+		 i18n:translate="">
+	</a>
+  <div tal:condition="menuitem/submenu">
+    <tal:block tal:repeat="subitem menuitem/submenu">
+			<tal:block define="menuitem subitem">
+				<metal:block use-macro="pagelet:zope.app.skintools.toolbar.IToolBarLayout/toolbar-item" />
+			</tal:block>
+		</tal:block>
+	</div>
+</metal:block>
+-->


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/viewlet.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/views.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/views.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/views.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,75 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin toolbar
+
+$Id$
+"""
+
+from zope.interface import implements
+
+from zope.app.zapi import queryMultiAdapter
+
+from zope.app.i18n import ZopeMessageFactory as _
+from zope.app.boston.viewlets.toolbar.interfaces import IToolBarViewlet
+from zope.app.publisher.browser.menu import getMenu
+
+
+class ToolBarViewletManager(object):
+    """Toolbar viewlet manager."""
+
+    def macros(self, name):
+        """Use macros in the template as layout components.
+        
+        Macros are the fastest way to render page templates, they ensure that
+        everything get procesed at once in the TAL engine. Aloso offer macros
+        in this implementation different layout parts where we use in different
+        places, even in a iteration do we use layout macros. All this can't  be
+        really done in viewlets itself. Btw, macros are a base concept for
+        apply layout to different page template areas. They are developed for
+        this usecase. Viewlets are used for apply the strucutre. 
+        The combination of macros and viewlets is the best way I can think 
+        about right now. It will offer at least a minimum of overhead and a 
+        maximum of flexibility for complex structure and layout task like 
+        render this nested menu structure.
+        """
+        return self.template.macros[name]
+
+    def render(self):
+        """See zope.contentprovider.interfaces.IContentProvider"""
+        # Now render the view without to use the template
+        return u'\n'.join([viewlet.render() for viewlet in self.viewlets])
+
+
+class ToolBarViewlet(object):
+    """I18n info viewlet."""
+
+    implements(IToolBarViewlet)
+
+#    def __getitem__(self, menuId):
+#        return getMenu(menuId, self.context, self.request)
+
+    def macros(self, name):
+        print ""
+        print "macros name ", name
+        return self.manager.macros(name)
+
+    def menus(self, menuId):
+        print ""
+        print "menus menuId ", menuId
+        menu = getMenu(menuId, self.context, self.request)
+        for submenu in menu:
+            print submenu
+        return menu
+
+


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/browser/views.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/interfaces.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/interfaces.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/interfaces.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,26 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin toolbar
+
+$Id$
+"""
+
+__docformat__ = "reStructuredText"
+
+from zope.viewlet.interfaces import IViewlet
+
+
+
+class IToolBarViewlet(IViewlet):
+    """Toolbar viewlet API."""


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,128 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain="tiks">
+
+  <configure package="zope.app.boston.viewlets.toolbar.browser">
+    <resource 
+        name="divmenu.js"
+        file="divmenu.js"
+        layer="zope.app.boston.boston"
+        />
+
+    <resource 
+        name="toolbar.css"
+        file="toolbar.css"
+        layer="zope.app.boston.boston"
+        />
+
+    <resource
+        name="toolbarGrip.gif"
+        file="toolbarGrip.gif"
+        layer="zope.app.boston.boston"
+        />
+
+    <resource
+        name="toolbarArrow.gif"
+        file="toolbarArrow.gif"
+        layer="zope.app.boston.boston"
+        />
+
+    <resource
+        name="toolbarArrowOver.gif"
+        file="toolbarArrowOver.gif"
+        layer="zope.app.boston.boston"
+        />
+
+    <viewlet
+        for="*"
+        manager="zope.app.boston.IJavaScript"
+        name="toolbar-js"
+        permission="zope.Public"
+        template="javascript.pt"
+        layer="zope.app.boston.boston"
+        />
+
+    <viewlet
+        name="toolbar-css"
+        for="*"
+        manager="zope.app.boston.ICSS"
+        permission="zope.Public"
+        template="css.pt"
+        layer="zope.app.boston.boston"
+        />
+
+    <viewlet
+        name="toolbar"
+        for="*"
+        manager="zope.app.boston.IToolBar"
+        class=".views.ToolBarViewlet"
+        template="template.pt"
+        permission="zope.View"
+        layer="zope.app.boston.boston"
+        weight="1"
+        />
+
+  <menu 
+      id="standalone"
+      title="Standalone" />
+
+  <subMenuItem
+      menu="zmi_actions"
+      submenu="standalone"
+      title="Standalone" 
+      permission="zope.Public"
+      for="zope.interface.Interface"
+      />
+
+  <menuItems 
+      menu="zmi_actions"
+      for="zope.interface.Interface">
+
+    <subMenuItem 
+        submenu="file2"
+        title="File" 
+        permission="zope.Public"
+        />
+
+    <subMenuItem 
+        submenu="edit"
+        title="Edit" 
+        permission="zope.Public"
+        />
+
+    <subMenuItem 
+        submenu="help"
+        title="Help" 
+        permission="zope.Public"
+        />
+
+  </menuItems>
+
+  <menu 
+      id="file2"
+      title="File" />
+
+  <menuItems 
+      menu="file2"
+      for="zope.interface.Interface">
+
+    <menuItem 
+        action="javascript:alert('New')" 
+        title="New" 
+        permission="zope.Public"
+        icon="/@@/filenew.png"
+        />
+
+    <menuItem 
+        action="javascript:alert('Open')" 
+        title="Open" 
+        permission="zope.Public"
+        icon="/@@/fileopen.png"
+        />
+
+  </menuItems>
+
+  </configure>
+
+</configure>
\ No newline at end of file


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/toolbar.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,18 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin viewlet
+
+$Id$
+"""
+    


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/__init__.py
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/__init__.py	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/__init__.py	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,18 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""Boston skin viewlet
+
+$Id$
+"""
+    


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/javascript.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/javascript.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/javascript.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,3 @@
+<script type="text/javascript" src="xmltree.js"
+        tal:attributes="src string:${context/++resource++xmltree.js}" >
+</script>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/javascript.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/viewlet.pt
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/viewlet.pt	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/viewlet.pt	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,26 @@
+<div class="slotbox" id="xmltree">
+	<div class="header"> 
+		<div class="title" i18n:translate="">Navigation</div>
+	</div>
+	<div class="body">
+		<metal:tree>
+			<div class="box" id="navigationTree">
+				<h4 i18n:translate="">Navigation</h4>
+		<div xmlns="http://www.zope.org/zope3xmltree"
+							id="navtreecontents"
+							class="body"
+							onclick="treeclicked(event);"
+							i18n:translate="">Loading...
+				</div>
+			</div>
+		</metal:tree>
+		<script type="text/javascript"
+						tal:attributes="language string:JavaScript"
+						tal:define="rooturl request/getApplicationURL;
+												thisbaseurl request/URL/-1"
+						tal:content="structure string:
+			loadtree('${rooturl}/', '${thisbaseurl}/');;">
+		</script>
+	</div>
+</div>
+


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/viewlet.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/xmltree.css
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/xmltree.css	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/xmltree.css	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,34 @@
+/*  Styles for xmltree
+*/
+
+#navtreecontents a {
+       cursor: pointer;
+       height: 20px;
+}
+
+#navtreecontents loading {
+       display: block;
+       padding-left: 31px;
+       height: 18px;
+}
+
+#navtreecontents expand {
+       background-repeat: no-repeat;
+       padding-left: 14px;
+       display: inline;
+       cursor: pointer;
+                }
+
+#navtreecontents icon {
+       background-repeat: no-repeat;
+       padding-left: 20px;
+       display: inline;
+       cursor: auto;
+                }
+
+#navtreecontents collection {
+       display: block;
+       margin-left: 10px;
+/*     border: red solid 1pt;  */
+       height: auto;
+}
\ No newline at end of file


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree/browser/xmltree.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1,82 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain="zope">
+
+  <configure package="zope.app.rotterdam">
+    <resource 
+        name="xmltree.js" 
+        file="xmltree.js" 
+        layer="zope.app.boston.boston"
+        />
+
+    <resource 
+        name="pl.gif" 
+        file="pl.gif" 
+        layer="zope.app.boston.boston" />
+    
+    <resource 
+        name="mi.gif" 
+        file="mi.gif"
+        layer="zope.app.boston.boston" />
+  </configure>
+
+  <resource 
+      name="xmltree.css"
+      file="xmltree/browser/xmltree.css"
+      layer="zope.app.boston.boston"
+      />
+
+  <viewlet
+      name="xmltree.css"
+      for="*"
+      manager="zope.app.boston.ICSS"
+      permission="zope.Public"
+      class="..BostonXMLTreeCSSViewlet"
+      layer="zope.app.boston.boston"
+      weight="0"
+      />
+
+  <viewlet
+      name="xmltree"
+      for="*"
+      manager="zope.app.boston.IJavaScript"
+      template="xmltree/browser/javascript.pt"
+      permission="zope.View"
+      layer="zope.app.boston.boston"
+      />
+
+  <viewlet
+      name="xmltree"
+      for="*"
+      manager="zope.app.boston.ILeft"
+      template="xmltree/browser/viewlet.pt"
+      permission="zope.View"
+      layer="zope.app.boston.boston"
+      />
+
+  <pages
+      for="zope.app.container.interfaces.IReadContainer"
+      permission="zope.View"
+      class="zope.app.rotterdam.xmlobject.ReadContainerXmlObjectView"
+      layer="zope.app.boston.boston">
+    <page
+        name="children.xml"
+        attribute="children"
+        />
+    <page
+        name="singleBranchTree.xml"
+        attribute="singleBranchTree"
+        />
+  </pages>
+
+  <page
+      name="singleBranchTree.xml" 
+      for="zope.interface.interface.Interface"
+      permission="zope.View"
+      class="zope.app.rotterdam.xmlobject.XmlObjectView"
+      attribute="singleBranchTree"
+      layer="zope.app.boston.boston" 
+      />
+
+</configure>


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/viewlets/xmltree.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Zope3/branches/roger-bostonskin2/src/zope/app/boston/zope.app.boston-configure.zcml
===================================================================
--- Zope3/branches/roger-bostonskin2/src/zope/app/boston/zope.app.boston-configure.zcml	2005-10-28 00:39:15 UTC (rev 39682)
+++ Zope3/branches/roger-bostonskin2/src/zope/app/boston/zope.app.boston-configure.zcml	2005-10-28 01:37:28 UTC (rev 39683)
@@ -0,0 +1 @@
+<include package="zope.app.boston" />


Property changes on: Zope3/branches/roger-bostonskin2/src/zope/app/boston/zope.app.boston-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Zope3-Checkins mailing list