[Checkins] SVN: z3c.website/trunk/src/z3c/website/ Added initial implementation for z3c.website

Roger Ineichen roger at projekt01.ch
Mon May 21 00:12:57 EDT 2007


Log message for revision 75850:
  Added initial implementation for z3c.website

Changed:
  A   z3c.website/trunk/src/z3c/website/SETUP.cfg
  A   z3c.website/trunk/src/z3c/website/__init__.py
  A   z3c.website/trunk/src/z3c/website/breadcrumb/
  A   z3c.website/trunk/src/z3c/website/breadcrumb/__init__.py
  A   z3c.website/trunk/src/z3c/website/breadcrumb/configure.zcml
  A   z3c.website/trunk/src/z3c/website/browser/
  A   z3c.website/trunk/src/z3c/website/browser/__init__.py
  A   z3c.website/trunk/src/z3c/website/browser/configure.zcml
  A   z3c.website/trunk/src/z3c/website/browser/member.py
  A   z3c.website/trunk/src/z3c/website/browser/member.zcml
  A   z3c.website/trunk/src/z3c/website/browser/member_edit.pt
  A   z3c.website/trunk/src/z3c/website/browser/members.pt
  A   z3c.website/trunk/src/z3c/website/browser/page.py
  A   z3c.website/trunk/src/z3c/website/browser/page.zcml
  A   z3c.website/trunk/src/z3c/website/browser/page_add.pt
  A   z3c.website/trunk/src/z3c/website/browser/page_edit.pt
  A   z3c.website/trunk/src/z3c/website/browser/page_edit_meta.pt
  A   z3c.website/trunk/src/z3c/website/browser/page_index.pt
  A   z3c.website/trunk/src/z3c/website/browser/pages.pt
  A   z3c.website/trunk/src/z3c/website/browser/site.py
  A   z3c.website/trunk/src/z3c/website/browser/site.zcml
  A   z3c.website/trunk/src/z3c/website/browser/site_add.pt
  A   z3c.website/trunk/src/z3c/website/browser/site_index.pt
  A   z3c.website/trunk/src/z3c/website/browser/sites.pt
  A   z3c.website/trunk/src/z3c/website/configure.zcml
  A   z3c.website/trunk/src/z3c/website/doc/
  A   z3c.website/trunk/src/z3c/website/doc/icons/
  A   z3c.website/trunk/src/z3c/website/doc/icons/Cash.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Chat.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/CheckMark.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Copy.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Cut.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Doc.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Down.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Download.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Edit.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Exclamation.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Folder.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Hand.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Heart.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Home.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Info.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Key.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Left.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Magnifier.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Mail.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Minus.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/MusicalNote.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Paint.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Paste.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Plus.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Print.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/QuestionMark.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/README.txt
  A   z3c.website/trunk/src/z3c/website/doc/icons/Recycle.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Redo.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Redo2.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Restart.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Right.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Save.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Shotdown.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Sound.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Standby.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Star.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Text.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Tools.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Trash.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Undo.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Up.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/User.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Users.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/Web.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/ZoomIn.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/ZoomOut.png
  A   z3c.website/trunk/src/z3c/website/doc/icons/navigation.png
  A   z3c.website/trunk/src/z3c/website/doc/mockup.png
  A   z3c.website/trunk/src/z3c/website/doc/z3cLogo.png
  A   z3c.website/trunk/src/z3c/website/form.py
  A   z3c.website/trunk/src/z3c/website/i18n.py
  A   z3c.website/trunk/src/z3c/website/interfaces.py
  A   z3c.website/trunk/src/z3c/website/layer.py
  A   z3c.website/trunk/src/z3c/website/layer.zcml
  A   z3c.website/trunk/src/z3c/website/page.py
  A   z3c.website/trunk/src/z3c/website/page.zcml
  A   z3c.website/trunk/src/z3c/website/sample.py
  A   z3c.website/trunk/src/z3c/website/sample.zcml
  A   z3c.website/trunk/src/z3c/website/security.zcml
  A   z3c.website/trunk/src/z3c/website/session.py
  A   z3c.website/trunk/src/z3c/website/session.zcml
  A   z3c.website/trunk/src/z3c/website/site.py
  A   z3c.website/trunk/src/z3c/website/site.zcml
  A   z3c.website/trunk/src/z3c/website/skin/
  A   z3c.website/trunk/src/z3c/website/skin/__init__.py
  A   z3c.website/trunk/src/z3c/website/skin/configure.zcml
  A   z3c.website/trunk/src/z3c/website/skin/demo.css
  A   z3c.website/trunk/src/z3c/website/skin/demo.js
  A   z3c.website/trunk/src/z3c/website/skin/favicon.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/contact.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/contact.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/download.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/download.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/email.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/email.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/home.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/home.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/info.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/info.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/portfolio.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/portfolio.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/samples.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/samples.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/tutorials.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/tutorials.png
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/users.gif
  A   z3c.website/trunk/src/z3c/website/skin/fisheye/users.png
  A   z3c.website/trunk/src/z3c/website/skin/form.pt
  A   z3c.website/trunk/src/z3c/website/skin/img/
  A   z3c.website/trunk/src/z3c/website/skin/img/adding.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/adding.png
  A   z3c.website/trunk/src/z3c/website/skin/img/background.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/beta.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/beta.png
  A   z3c.website/trunk/src/z3c/website/skin/img/btnSearch.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/btnSearch.png
  A   z3c.website/trunk/src/z3c/website/skin/img/buttonBG.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/content.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/content.png
  A   z3c.website/trunk/src/z3c/website/skin/img/edit.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/edit.png
  A   z3c.website/trunk/src/z3c/website/skin/img/logo.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/navigation.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/navigation.png
  A   z3c.website/trunk/src/z3c/website/skin/img/search.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/search.png
  A   z3c.website/trunk/src/z3c/website/skin/img/user.gif
  A   z3c.website/trunk/src/z3c/website/skin/img/user.png
  A   z3c.website/trunk/src/z3c/website/skin/img/userIcon.png
  A   z3c.website/trunk/src/z3c/website/skin/interface.js
  A   z3c.website/trunk/src/z3c/website/skin/jquery.js
  A   z3c.website/trunk/src/z3c/website/skin/template.pt
  A   z3c.website/trunk/src/z3c/website/skin/widget.pt
  A   z3c.website/trunk/src/z3c/website/tool/
  A   z3c.website/trunk/src/z3c/website/tool/__init__.py
  A   z3c.website/trunk/src/z3c/website/tool/adding.pt
  A   z3c.website/trunk/src/z3c/website/tool/adding.py
  A   z3c.website/trunk/src/z3c/website/tool/configure.zcml
  A   z3c.website/trunk/src/z3c/website/tool/content.pt
  A   z3c.website/trunk/src/z3c/website/tool/content.py
  A   z3c.website/trunk/src/z3c/website/tool/edit.pt
  A   z3c.website/trunk/src/z3c/website/tool/edit.py
  A   z3c.website/trunk/src/z3c/website/tool/search.pt
  A   z3c.website/trunk/src/z3c/website/tool/search.py
  A   z3c.website/trunk/src/z3c/website/z3c.website-configure.zcml

-=-
Added: z3c.website/trunk/src/z3c/website/SETUP.cfg
===================================================================
--- z3c.website/trunk/src/z3c/website/SETUP.cfg	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/SETUP.cfg	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,3 @@
+<data-files zopeskel/etc/package-includes>
+  z3c.website-*.zcml
+</data-files>

Added: z3c.website/trunk/src/z3c/website/__init__.py
===================================================================
--- z3c.website/trunk/src/z3c/website/__init__.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/__init__.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,16 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""

Added: z3c.website/trunk/src/z3c/website/breadcrumb/__init__.py
===================================================================
--- z3c.website/trunk/src/z3c/website/breadcrumb/__init__.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/breadcrumb/__init__.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,16 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""

Added: z3c.website/trunk/src/z3c/website/breadcrumb/configure.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/breadcrumb/configure.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/breadcrumb/configure.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,7 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.website">
+
+
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/browser/__init__.py
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/__init__.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/__init__.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,17 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"

Added: z3c.website/trunk/src/z3c/website/browser/configure.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/configure.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/configure.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,9 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.website">
+
+  <include file="site.zcml" />
+  <include file="member.zcml" />
+  <include file="page.zcml" />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/browser/member.py
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/member.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/member.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,232 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+from email.MIMEText import MIMEText
+
+import transaction
+import zope.interface
+import zope.component
+import zope.event
+import zope.lifecycleevent
+from zope.formlib import form
+from zope.publisher.browser import BrowserPage
+from zope.publisher.browser import TestRequest
+
+from zope.app import zapi
+from zope.app import security
+from zope.app.component import hooks
+from zope.app.form.browser import TextAreaWidget
+from zope.app.pagetemplate import ViewPageTemplateFile
+from zope.app.securitypolicy.interfaces import IPrincipalRoleManager
+from zope.app.security.interfaces import IUnauthenticatedPrincipal
+from zope.app.security.interfaces import IAuthentication
+from zope.app.security import settings
+
+from zc.table import column
+from zc.table import table
+from z3c.authentication.simple.interfaces import IMember
+from z3c.authentication.simple.member import Member
+from z3c.pagelet import browser
+
+from z3c.website.i18n import MessageFactory as _
+from z3c.website import interfaces
+
+
+class AddMemberForm(form.AddFormBase):
+
+    label = _('Add Member')
+    prefix = 'memberform'
+    template = ViewPageTemplateFile('member_edit.pt')
+    actions = form.AddFormBase.actions.copy()
+
+    form_fields = form.Fields(IMember).select(
+        'login', 'password', 'title', 'description')
+
+    def create(self, data):
+        # Create the admin principal
+        login = data['login']
+        password = data['password']
+        title = data['title']
+        description = data['description']
+        return Member(login, password, title, description)
+
+    def add(self, member):
+        auth = zope.component.getUtility(IAuthentication, context=self.context)
+        auth['members'].add(member)
+        self._finished_add = True
+        return member
+
+    def handle_cancel(self, action, data, errors=None):
+        self.request.response.redirect(self.request.URL)
+
+    actions.append(
+        form.Action(_('Cancel'), success=handle_cancel, failure=handle_cancel))
+
+    def nextURL(self):
+        return self.request.URL
+
+
+class EditMemberForm(form.EditFormBase):
+
+    label = _('Edit Member')
+    prefix = 'memberform'
+    template = ViewPageTemplateFile('member_edit.pt')
+    actions = form.Actions()
+
+    form_fields = form.Fields(IMember).select(
+        'login', 'password', 'title', 'description')
+
+    @form.action(_("Apply"))
+    def handle_edit_action(self, action, data):
+        if form.applyChanges(self.context, self.form_fields, data,
+                             self.adapters):
+            zope.event.notify(
+                zope.lifecycleevent.ObjectModifiedEvent(self.context))
+            self.status = _('Member updated.')
+
+    def handle_cancel(self, action, data, errors=None):
+        self.request.response.redirect(self.request.URL)
+
+    actions.append(
+        form.Action(_('Cancel'), success=handle_cancel, failure=handle_cancel))
+
+
+class RadioButtonColumn(column.Column):
+
+    def renderCell(self, item, formatter):
+        name = zapi.getName(item['member'])
+        widget = (u'<input type="radio" '
+                  u'name="selectedItem" value="%s" %s />')
+        selected=''
+        if 'selectedItem' in formatter.request and \
+               formatter.request['selectedItem'] == name:
+            selected='checked="checked"'
+        return widget %(name, selected)
+
+
+class GetTextColumn(column.Column):
+
+    def __init__(self, title=None, name=None, getText=None):
+        super(GetTextColumn, self).__init__(title, name)
+        self.getText = getText
+
+    def renderCell(self, item, formatter):
+        return self.getText(item)
+
+
+def getDescription(item):
+    p = item['member']
+    return p.description
+
+
+def getTitle(item):
+    p = item['member']
+    return p.title
+
+
+def getLogin(item):
+    p = item['member']
+    return p.login
+
+
+
+class MemberManagement(browser.BrowserPagelet):
+    """Management of members."""
+
+    status = None
+
+    label = _('Manage Members')
+    prefix = 'form'
+    tableActions = form.Actions()
+    subForm = u''
+
+    # Only the first columns
+    columns = (
+        RadioButtonColumn(_('Sel')),
+        GetTextColumn(_('Login'), 'lastName', getLogin),
+        GetTextColumn(_('Title'), 'email', getTitle),
+        GetTextColumn(_('Description'), 'phone', getDescription),
+        )
+
+    @property
+    def members(self):
+        auth = zope.component.getUtility(IAuthentication)
+        for name, member in auth['members'].items():
+            yield {'member': member,
+                   'id': name}
+
+    @property
+    def selectedItem(self):
+        if not self.request.get('selectedItem'):
+            return None
+        auth = zope.component.getUtility(IAuthentication)
+        return auth['members'][self.request['selectedItem']]
+
+    def getEditForm(self):
+        if self.subForm:
+            return self.subForm.render()
+
+    def table(self):
+        # 3. Create the table formatter
+        formatter = table.AlternatingRowFormatter(
+            self.context, self.request, self.members, columns=self.columns,
+            prefix='members.')
+        formatter.widths = [25, 150, 150, 200, 200]
+        formatter.cssClasses['table'] = 'sorted'
+        return formatter()
+
+    def update(self):
+        if self.selectedItem:
+            self.subForm = EditMemberForm(
+                self.selectedItem, self.request)
+        else:
+            self.subForm = AddMemberForm(self.context, self.request)
+        self.subForm.update()
+        if self.subForm.status is not None:
+            self.status = self.subForm.status
+
+        errors, action = form.handleSubmit(
+            self.tableActions, {}, lambda a, d: True)
+        if action is not None:
+            action.success({})
+
+    @form.action(_('Delete Member'), tableActions)
+    def deleteMember(self, action, data):
+        if not self.selectedItem:
+            self.status = _('No member selected.')
+            return
+
+        pid = self.request['selectedItem']
+        auth = zope.component.getUtility(IAuthentication)
+        del auth['members'][self.request['selectedItem']]
+
+        # clenaup group settings for removed members
+        for group in auth['groups'].values():
+            if pid in group.principals:
+                principals = list(group.principals)
+                principals.remove(pid)
+                group.setPrincipals(principals, check=False)
+        self.status = _('Member has been deleted.')
+
+    @form.action(_('Edit Member'), tableActions)
+    def editMember(self, action, data):
+        if self.selectedItem:
+            self.subForm = EditMemberForm(self.selectedItem, self.request)
+            self.subForm.resetForm()
+        else:
+            self.status = _('No member selected for editing.')

Added: z3c.website/trunk/src/z3c/website/browser/member.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/member.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/member.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,20 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.website">
+
+  <z3c:pagelet
+      name="members.html"
+      for="z3c.website.interfaces.IWebSite"
+      class=".member.MemberManagement"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="members.pt"
+      for=".member.MemberManagement"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/browser/member_edit.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/member_edit.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/member_edit.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,21 @@
+<fieldset>
+<legend tal:content="view/label">Add Member</legend>
+    <tal:block define="widget nocall:view/widgets/login">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/password">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/title">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/description">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <div id="actionsView">
+      <span class="actionButtons">
+      <input tal:repeat="action view/actions"
+           tal:replace="structure action/render" />
+      </span>
+    </div>
+</fieldset>

Added: z3c.website/trunk/src/z3c/website/browser/members.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/members.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/members.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,27 @@
+<form action="." metal:define-macro="master"
+      tal:attributes="action request/URL" method="post"
+      class="edit-form" enctype="multipart/form-data">
+  <div class="message"
+         tal:condition="view/status"
+         tal:content="view/status"
+         i18n:translate="">
+    object changed.
+  </div>
+  <table>
+    <tr>
+      <td valign="top" width="600" style="padding-right:10px;">
+        <tal:block replace="structure view/table" />
+        <div id="actionsView">
+          <span class="actionButtons">
+          <input tal:repeat="action view/tableActions"
+               tal:replace="structure action/render"
+               />
+          </span>
+        </div>
+      </td>
+      <td valign="top" width="340">
+	        <tal:block replace="structure view/getEditForm" />
+      </td>
+    </tr>
+  </table>
+</form>

Added: z3c.website/trunk/src/z3c/website/browser/page.py
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/page.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/page.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,208 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.interface
+import zope.component
+from zope.component.interfaces import IFactory
+from zope.dublincore.interfaces import IZopeDublinCore
+from zope.traversing.browser import absoluteURL
+from zope.traversing import api
+from zope.app.renderer.rest import ReStructuredTextToHTMLRenderer
+from zc.table import column
+from zc.table import table
+
+from z3c.configurator import configurator
+from z3c.pagelet import browser
+from z3c.form import form
+from z3c.form import field
+from z3c.form import widget
+from z3c.template.interfaces import ILayoutTemplate
+
+from z3c.website.i18n import MessageFactory as _
+from z3c.website import interfaces
+from z3c.website import page
+
+#from jquery.resteditor.browser import RESTEditorFieldWidget
+
+
+class CheckboxColumn(column.Column):
+
+    def renderCell(self, item, formatter):
+        widget = (u'<input type="checkbox" '
+                  u'name="selected:list" value="%s">')
+        return widget %api.getName(item)
+
+
+def getCreatedDate(item, formatter):
+    formatter = formatter.request.locale.dates.getFormatter('date', 'short')
+    return formatter.format(IZopeDublinCore(item).created)
+
+
+def getModifiedDate(item, formatter):
+    formatter = formatter.request.locale.dates.getFormatter('date', 'short')
+    return formatter.format(IZopeDublinCore(item).modified)
+
+
+def link(view='index.html'):
+    def anchor(value, item, formatter):
+        url = absoluteURL(item, formatter.request) + '/' + view
+        return u'<a href="%s">%s</a>' %(url, value)
+    return anchor
+
+
+class Overview(browser.BrowserPagelet):
+
+    columns = (
+        CheckboxColumn(_('Sel')),
+        column.GetterColumn(
+            _('Id'), lambda item, f: api.getName(item), link('index.html')),
+        column.GetterColumn(
+        _('Title'), lambda item, f: item.title, link('edit.html')),
+        column.GetterColumn(_('Created On'), getCreatedDate),
+        column.GetterColumn(_('Modified On'), getModifiedDate),
+        )
+
+    status = None
+
+    def items(self):
+        return [obj
+                for obj in self.context.values()
+                if interfaces.IPage.providedBy(obj)]
+
+    def table(self):
+        formatter = table.AlternatingRowFormatter(
+            self.context, self.request, self.items(), columns=self.columns)
+        formatter.widths=[25, 50, 300, 100, 100]
+        formatter.cssClasses['table'] = 'sorted'
+        return formatter()
+
+    def update(self):
+        if 'ADD' in self.request:
+            self.request.response.redirect('addPage.html')
+        if 'DELETE' in self.request:
+            if self.request.get('confirm_delete') != 'yes':
+                self.status = _('You did not confirm the deletion correctly.')
+                return
+            if 'selected' in self.request:
+                for id in self.request['selected']:
+                    del self.context[id]
+                self.status = _('Pages were successfully deleted.')
+            else:
+                self.status = _('No pages were selected.')
+
+
+class PageAddForm(form.AddForm):
+
+    label = _('Add Page')
+    factory = page.Page
+    contentName = None
+    data = None
+
+    fields = field.Fields(
+        zope.schema.TextLine(
+            __name__='__name__',
+            title=_(u"Name"),
+            required=True))
+
+    fields += field.Fields(interfaces.IPage).select('title', 'description',
+        'keyword')
+
+    def create(self, data):
+        self.data = data
+        # get form data
+        self.contentName = data.get('__name__', u'')
+
+        # Create site
+        obj = self.factory()
+        obj.title = data.get('title', u'')
+        obj.description = data.get('description', u'')
+        obj.keyword = data.get('keyword', u'')
+        return obj
+
+    def add(self, obj):
+        
+        # Add the site
+        if self.context.get(self.contentName) is not None:
+            self.status = _('Page with that name already exist.')
+            self._finished_add = False
+            return None
+        self.context[self.contentName] = obj
+
+        # Configure the new obj
+        configurator.configure(obj, self.data)
+
+        self._finished_add = True
+        return obj
+
+    def nextURL(self):
+        obj = self.context[self.contentName]
+        return absoluteURL(obj, self.request) + '/edit.html'
+
+    def __call__(self):
+        self.update()
+        layout = zope.component.getMultiAdapter((self, self.request),
+            ILayoutTemplate)
+        return layout(self)
+
+
+class MetaEditPagelet(form.EditForm):
+    """Content edit page."""
+
+    fields = field.Fields(interfaces.IContent).select('title', 
+        'description', 'keyword')
+
+
+class ContentEditPagelet(form.EditForm):
+    """Content edit page."""
+
+    fields = field.Fields(interfaces.IContent).select('body')
+
+#    fields['body'].widgetFactory = RESTEditorFieldWidget
+
+    def __call__(self):
+        self.update()
+        layout = zope.component.getMultiAdapter((self, self.request),
+            ILayoutTemplate)
+        return layout(self)
+
+
+class IndexPage(browser.BrowserPagelet):
+    """Default index view for all IPage objects."""
+
+    @ property
+    def title(self):
+        return self.context.title
+
+    @ property
+    def description(self):
+        return self.context.description
+
+    @ property
+    def keyword(self):
+        return self.context.keyword
+
+    @ property
+    def body(self):
+        body = self.context.body
+        if body:
+            factory = zope.component.getUtility(IFactory, 'zope.source.rest')
+            source = factory(body)
+            renderer = ReStructuredTextToHTMLRenderer(source, self.request)
+            return renderer.render()
+        else:
+            return u''
\ No newline at end of file

Added: z3c.website/trunk/src/z3c/website/browser/page.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/page.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/page.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,77 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.website">
+
+  <z3c:pagelet
+      name="index.html"
+      for="z3c.website.interfaces.IContent"
+      class=".page.IndexPage"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <z3c:template
+      template="page_index.pt"
+      for=".page.IndexPage"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <z3c:pagelet
+      name="pages.html"
+      for="z3c.website.interfaces.IPage"
+      class=".page.Overview"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="pages.pt"
+      for=".page.Overview"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <z3c:pagelet
+      name="addZ3CPage.html"
+      for="z3c.website.interfaces.IContent"
+      class=".page.PageAddForm"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="page_add.pt"
+      for=".page.PageAddForm"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <z3c:pagelet
+      name="edit.html"
+      for="z3c.website.interfaces.IContent"
+      class=".page.ContentEditPagelet"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="page_edit.pt"
+      for=".page.ContentEditPagelet"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <z3c:pagelet
+      name="meta.html"
+      for="z3c.website.interfaces.IContent"
+      class=".page.MetaEditPagelet"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="page_edit_meta.pt"
+      for=".page.MetaEditPagelet"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/browser/page_add.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/page_add.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/page_add.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1 @@
+<div metal:use-macro="macro:form" />

Added: z3c.website/trunk/src/z3c/website/browser/page_edit.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/page_edit.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/page_edit.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1 @@
+<div metal:use-macro="macro:form" />

Added: z3c.website/trunk/src/z3c/website/browser/page_edit_meta.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/page_edit_meta.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/page_edit_meta.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1 @@
+<div metal:use-macro="macro:form" />

Added: z3c.website/trunk/src/z3c/website/browser/page_index.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/page_index.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/page_index.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,4 @@
+<div class="title"
+     tal:content="structure view/title">Title</div>
+<div class="body"
+     tal:content="structure view/body">Body</div>

Added: z3c.website/trunk/src/z3c/website/browser/pages.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/pages.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/pages.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,39 @@
+<i18n:block domain="z3c.website">
+<div class="message"
+     tal:condition="view/status"
+     tal:content="view/status"
+     i18n:translate="">
+  Something happened.
+</div>
+
+<form action="" method="post"
+      tal:attributes="action request/URL">
+
+  <tal:block
+      condition="view/items"
+      replace="structure view/table" />
+
+  <div
+      tal:condition="not: view/items"
+      i18n:translate="">
+    There are no items.
+  </div>
+
+  <div id="actionsView">
+    <span class="actionButtons">
+      <input type="submit" class="button" name="ADD" value="Add"
+             i18n:attributes="value" />
+      <tal:block condition="view/items">
+        <input type="submit" class="button" name="DELETE" value="Delete"
+               i18n:attributes="value" />
+        <input type="text" id="confirm_delete" name="confirm_delete"
+               size="5" />
+        <label for="confirm_delete" i18n:translate="">
+          (Type "yes" to delete.)
+        </label>
+    </tal:block>
+    </span>
+  </div>
+
+</form>
+</i18n:block>

Added: z3c.website/trunk/src/z3c/website/browser/site.py
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/site.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/site.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,154 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.interface
+import zope.component
+from zope.dublincore.interfaces import IZopeDublinCore
+from zope.traversing.browser import absoluteURL
+from zope.traversing import api
+from zc.table import column
+from zc.table import table
+
+from z3c.authentication.simple.interfaces import IMember
+from z3c.configurator import configurator
+from z3c.form import form
+from z3c.form import field
+from z3c.form import widget
+from z3c.pagelet import browser
+from z3c.template.interfaces import ILayoutTemplate
+
+from z3c.website.i18n import MessageFactory as _
+from z3c.website import interfaces
+from z3c.website import site
+
+
+class CheckboxColumn(column.Column):
+
+    def renderCell(self, item, formatter):
+        widget = (u'<input type="checkbox" '
+                  u'name="selected:list" value="%s">')
+        return widget %api.getName(item)
+
+
+def getCreatedDate(item, formatter):
+    formatter = formatter.request.locale.dates.getFormatter('date', 'short')
+    return formatter.format(IZopeDublinCore(item).created)
+
+
+def getModifiedDate(item, formatter):
+    formatter = formatter.request.locale.dates.getFormatter('date', 'short')
+    return formatter.format(IZopeDublinCore(item).modified)
+
+
+def link(view='index.html'):
+    def anchor(value, item, formatter):
+        url = absoluteURL(item, formatter.request) + '/' + view
+        return u'<a href="%s">%s</a>' %(url, value)
+    return anchor
+
+
+class Overview(browser.BrowserPagelet):
+
+    columns = (
+        CheckboxColumn(_('Sel')),
+        column.GetterColumn(
+            _('Id'), lambda item, f: api.getName(item), link('index.html')),
+        column.GetterColumn(
+        _('Title'), lambda item, f: item.title, link('edit.html')),
+        column.GetterColumn(_('Created On'), getCreatedDate),
+        column.GetterColumn(_('Modified On'), getModifiedDate),
+        )
+
+    status = None
+
+    def sites(self):
+        return [obj
+                for obj in self.context.values()
+                if interfaces.IWebSite.providedBy(obj)]
+
+    def table(self):
+        formatter = table.AlternatingRowFormatter(
+            self.context, self.request, self.sites(), columns=self.columns)
+        formatter.widths=[25, 50, 300, 100, 100]
+        formatter.cssClasses['table'] = 'sorted'
+        return formatter()
+
+    def update(self):
+        if 'ADD' in self.request:
+            self.request.response.redirect('addZ3CWebSite.html')
+        if 'DELETE' in self.request:
+            if self.request.get('confirm_delete') != 'yes':
+                self.status = _('You did not confirm the deletion correctly.')
+                return
+            if 'selected' in self.request:
+                for id in self.request['selected']:
+                    del self.context[id]
+                self.status = _('Sites were successfully deleted.')
+            else:
+                self.status = _('No sites were selected.')
+
+
+class SiteAddPagelet(form.AddForm):
+
+    label = _('Add WebSite')
+    contentName = None
+    data = None
+
+    fields = field.Fields(
+        zope.schema.TextLine(
+            __name__='__name__',
+            title=_(u"Name"),
+            required=True))
+
+    fields += field.Fields(interfaces.IWebSite).select('title')
+    fields += field.Fields(IMember, prefix="member").select('member.title', 
+        'member.description', 'member.login', 'member.password')
+
+    def create(self, data):
+        self.data = data
+        # get form data
+        title = data.get('title', u'')
+        self.contentName = data.get('__name__', u'')
+
+        # Create site
+        return site.WebSite(title)
+
+    def add(self, obj):
+        data = self.data
+        # Add the site
+        if self.context.get(self.contentName) is not None:
+            self.status = _('Site with name already exist.')
+            self._finished_add = False
+            return None
+        self.context[self.contentName] = obj
+
+        # Configure the new site
+        configurator.configure(obj, data)
+
+        self._finished_add = True
+        return obj
+
+    def nextURL(self):
+        return self.request.URL[-1]
+
+# TODO: get rid of them and implement base classes in z3c.form.pagelet.py
+    def __call__(self):
+        self.update()
+        layout = zope.component.getMultiAdapter((self, self.request),
+            ILayoutTemplate)
+        return layout(self)

Added: z3c.website/trunk/src/z3c/website/browser/site.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/site.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/site.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,35 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.website">
+
+  <z3c:pagelet
+      name="index.html"
+      for="zope.app.folder.interfaces.IFolder"
+      class=".site.Overview"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="sites.pt"
+      for=".site.Overview"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <z3c:pagelet
+      name="addZ3CWebSite.html"
+      for="zope.app.folder.interfaces.IFolder"
+      class=".site.SiteAddPagelet"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageSite"
+      />
+
+  <z3c:template
+      template="site_add.pt"
+      for=".site.SiteAddPagelet"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/browser/site_add.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/site_add.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/site_add.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,37 @@
+<div metal:use-macro="macro:form-header" />
+<div metal:use-macro="macro:form">
+  <div metal:fill-slot="viewspace">
+    <fieldset>
+    <legend i18n:translate="">Site</legend>
+    <tal:block define="widget nocall:view/widgets/__name__">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/title">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    </fieldset>
+    <fieldset>
+    <legend i18n:translate="">Admin</legend>
+    <tal:block define="widget nocall:view/widgets/member.login">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/member.password">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/member.title">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    <tal:block define="widget nocall:view/widgets/member.description">
+      <div metal:use-macro="macro:widget-row" />
+    </tal:block>
+    </fieldset>
+  </div>
+  <metal:block fill-slot="actions">
+  <div id="actionsView">
+    <span class="actionButtons">
+      <input tal:repeat="action view/actions"
+           tal:replace="structure action/render" />
+      </span>
+  </div>
+  </metal:block>
+</div>

Added: z3c.website/trunk/src/z3c/website/browser/site_index.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/site_index.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/site_index.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1 @@
+<div>Site index page</div>

Added: z3c.website/trunk/src/z3c/website/browser/sites.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/browser/sites.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/browser/sites.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,39 @@
+<i18n:block domain="jsa.key">
+<div class="message"
+     tal:condition="view/status"
+     tal:content="view/status"
+     i18n:translate="">
+  Something happened.
+</div>
+
+<form action="" method="post"
+      tal:attributes="action request/URL">
+
+  <tal:block
+      condition="view/sites"
+      replace="structure view/table" />
+
+  <div
+      tal:condition="not: view/sites"
+      i18n:translate="">
+    There are no sites.
+  </div>
+
+  <div id="actionsView">
+    <span class="actionButtons">
+      <input type="submit" class="button" name="ADD" value="Add"
+             i18n:attributes="value" />
+      <tal:block condition="view/sites">
+        <input type="submit" class="button" name="DELETE" value="Delete"
+               i18n:attributes="value" />
+        <input type="text" id="confirm_delete" name="confirm_delete"
+               size="5" />
+        <label for="confirm_delete" i18n:translate="">
+          (Type "yes" to delete.)
+        </label>
+    </tal:block>
+    </span>
+  </div>
+
+</form>
+</i18n:block>

Added: z3c.website/trunk/src/z3c/website/configure.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/configure.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/configure.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,22 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.website">
+
+  <interface
+      interface="z3c.website.layer.IWebSiteBrowserLayer"
+      type="zope.publisher.interfaces.browser.IBrowserSkinType"
+      />
+
+  <include file="security.zcml" />
+  <include file="sample.zcml" />
+  <include file="session.zcml" />
+  <include file="site.zcml" />
+  <include file="layer.zcml" />
+  <include file="page.zcml" />
+
+  <include package=".browser" />
+  <include package=".skin" />
+  <include package=".tool" />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/doc/icons/Cash.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Cash.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Chat.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Chat.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/CheckMark.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/CheckMark.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Copy.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Copy.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Cut.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Cut.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Doc.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Doc.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Down.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Down.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Download.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Download.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Edit.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Edit.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Exclamation.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Exclamation.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Folder.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Folder.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Hand.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Hand.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Heart.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Heart.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Home.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Home.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Info.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Info.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Key.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Key.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Left.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Left.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Magnifier.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Magnifier.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Mail.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Mail.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Minus.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Minus.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/MusicalNote.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/MusicalNote.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Paint.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Paint.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Paste.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Paste.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Plus.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Plus.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Print.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Print.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/QuestionMark.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/QuestionMark.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/README.txt
===================================================================
--- z3c.website/trunk/src/z3c/website/doc/icons/README.txt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/doc/icons/README.txt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,26 @@
+======
+README
+======
+
+This icons are free distributed from MouseRunner.com
+See http://mouserunner.com/Spheres_ColoCons1_Free_Icons.html
+
+License
+-------
+
+Thanks for downloading ColoCons. While I want you to enjoy these icons for 
+free, I ask that you please abide by the terms that they are licensed under.
+Enjoy and come back to MouseRunner.com for all free content and resources.
+
+
+The graphics contained in these files are licensed under the Creative Commons 
+Attribution-ShareAlike 2.5 License
+
+Furthermore,
+You may not claim the works as your own. You must provide a link back to 
+www.MouseRunner.com when using on a website, for commercial purposes, and for 
+applications.
+
+Visit the address below to learn more about the Creative Commons license.
+http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode
+

Added: z3c.website/trunk/src/z3c/website/doc/icons/Recycle.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Recycle.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Redo.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Redo.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Redo2.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Redo2.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Restart.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Restart.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Right.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Right.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Save.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Save.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Shotdown.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Shotdown.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Sound.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Sound.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Standby.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Standby.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Star.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Star.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Text.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Text.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Tools.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Tools.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Trash.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Trash.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Undo.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Undo.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Up.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Up.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/User.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/User.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Users.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Users.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/Web.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/Web.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/ZoomIn.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/ZoomIn.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/ZoomOut.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/ZoomOut.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/icons/navigation.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/icons/navigation.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/mockup.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/mockup.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/doc/z3cLogo.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/doc/z3cLogo.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/form.py
===================================================================
--- z3c.website/trunk/src/z3c/website/form.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/form.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,29 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+
+from z3c.form import form
+from z3c.website import session
+
+
+class SampleEditForm(form.EditForm):
+    """Sample edit form supporting storing content object in a session."""
+
+    def getContentFactory(self):
+        return session.SessionData
+
+    def getContent(self):
+        return session.getSessionData(self)
\ No newline at end of file

Added: z3c.website/trunk/src/z3c/website/i18n.py
===================================================================
--- z3c.website/trunk/src/z3c/website/i18n.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/i18n.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,20 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+
+import zope.i18nmessageid
+
+MessageFactory = zope.i18nmessageid.MessageFactory('z3c.website')

Added: z3c.website/trunk/src/z3c/website/interfaces.py
===================================================================
--- z3c.website/trunk/src/z3c/website/interfaces.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/interfaces.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,130 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "ReStructuredText"
+
+import zope.interface
+import zope.schema
+from zope.annotation.interfaces import IAttributeAnnotatable
+from zope.app.container.interfaces import IContainer
+from zope.app.container.constraints import containers
+from zope.app.container.constraints import contains
+from zope.app.component.interfaces import IPossibleSite
+from zope.app.file.interfaces import IFile as ZIFile
+from zope.app.file.interfaces import IImage as ZIImage
+from zope.app.session.interfaces import ISession
+from z3c.resource.interfaces import IResourceTraversable
+from z3c.resource.interfaces import IResourceItem
+from z3c.website.i18n import MessageFactory as _
+
+
+class IContent(IResourceTraversable):
+    """Page interface."""
+
+    title = zope.schema.TextLine(
+        title=_(u'Title'),
+        description=_(u'Title of the html page.'),
+        default=u'',
+        missing_value=u'',
+        required=False)
+
+    description = zope.schema.Text(
+        title=_(u'Description'),
+        description=_(u'Description of the content.'),
+        default=u'',
+        missing_value=u'',
+        required=False)
+
+    keyword = zope.schema.Text(
+        title=_(u'Keyword'),
+        description=_(u'Keyword of the content.'),
+        default=u'',
+        missing_value=u'',
+        required=False)
+
+    body = zope.schema.Text(
+        title=_(u'Body'),
+        description=_(u'Body is the main part of the page.'),
+        default=u'',
+        missing_value=u'',
+        required=False)
+
+
+class IWebSite(IContent, IPossibleSite):
+    """JQuery demo site."""
+
+    containers('zope.app.filder.interfaces.IFolder')
+    contains('z3c.website.interfaces.IPage', 
+             'z3c.website.interfaces.ISamples')
+
+    title = zope.schema.TextLine(
+        title=_(u'Title'),
+        description=_(u'The title of the site.'),
+        default=u"Zope3 and JQuery",
+        required=True)
+
+
+class IPage(IContainer, IContent):
+    """Page interface."""
+
+    containers('z3c.website.interfaces.IWebSite', 
+               'z3c.website.interfaces.IPage')
+    contains('z3c.website.interfaces.IPage')
+
+
+class ISamples(IPage):
+    """Container for samples"""
+
+    containers(IWebSite)
+    contains('z3c.website.interfaces.ISample')
+
+    title = zope.schema.TextLine(
+        title=_("Title"),
+        description=_("The application title."),
+        required=True)
+
+
+class ISample(IContent):
+    """Base class for Z3C sample objects."""
+
+    containers(ISamples)
+
+
+class ISessionData(zope.interface.Interface):
+    """Simple data object which offers a field called content."""
+
+    content = zope.schema.Text(
+        title=u'Content',
+        description=u'The content field',
+        default=u'')
+
+
+class IDemoSession(ISession):
+    """Simply session which knows how to set and get a object."""
+
+    def setObject(key, obj):
+        """Add a object to the session."""
+
+    def getObject(key, default=None):
+        """Get a object from the session."""
+
+
+class IFile(IResourceItem, ZIFile):
+    """File resource item."""
+
+
+class IImage(IResourceItem, ZIImage):
+    """Image resource item."""

Added: z3c.website/trunk/src/z3c/website/layer.py
===================================================================
--- z3c.website/trunk/src/z3c/website/layer.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/layer.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,37 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+from z3c.layer import pagelet
+from z3c.form.interfaces import IFormLayer
+from z3c.formui.interfaces import IDivFormLayer
+from zope.viewlet.interfaces import IViewletManager
+
+import z3c.website.layer
+
+
+class IWebSiteBrowserLayer(IFormLayer, IDivFormLayer, 
+    pagelet.IPageletBrowserLayer):
+    """The z3c ``WebSite`` browser layer."""
+
+
+class ICSS(IViewletManager):
+    """CSS viewlet manager."""
+
+
+class IJavaScript(IViewletManager):
+    """JavaScript viewlet manager."""

Added: z3c.website/trunk/src/z3c/website/layer.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/layer.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/layer.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,22 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain="z3c.website">
+
+  <viewletManager
+      name="ICSS"
+      provides="z3c.website.layer.ICSS"
+      class="z3c.viewlet.manager.WeightOrderedViewletManager"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <viewletManager
+      name="IJavaScript"
+      provides="z3c.website.layer.IJavaScript"
+      class="z3c.viewlet.manager.WeightOrderedViewletManager"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/page.py
===================================================================
--- z3c.website/trunk/src/z3c/website/page.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/page.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,51 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+import zope.interface
+import zope.event
+import zope.lifecycleevent
+from zope.schema.fieldproperty import FieldProperty
+from zope.app.container import btree
+from z3c.configurator import configurator
+from z3c.resource.interfaces import IResource
+
+from z3c.website import interfaces
+
+
+class Page(btree.BTreeContainer):
+    """Page object."""
+
+    zope.interface.implements(interfaces.IPage)
+
+    title = FieldProperty(interfaces.IPage['title'])
+    description = FieldProperty(interfaces.IPage['description'])
+    keyword = FieldProperty(interfaces.IPage['keyword'])
+    body = FieldProperty(interfaces.IPage['body'])
+
+    def __repr__(self):
+        return '<%s %r>' % (self.__class__.__name__, self.__name__)
+
+
+class PageConfigurator(configurator.ConfigurationPluginBase):
+    """Configure the page."""
+    zope.component.adapts(interfaces.IPage)
+
+    def __call__(self, data):
+        # setup resource container
+        IResource(self.context)

Added: z3c.website/trunk/src/z3c/website/page.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/page.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/page.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,21 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.website">
+
+  <class class=".page.Page">
+    <require
+        permission="zope.Public"
+        interface=".interfaces.IPage"
+        />
+    <require
+        permission="z3c.website.ManageContent"
+        set_schema=".interfaces.IPage"
+        />
+  </class>
+
+  <adapter
+      factory=".page.PageConfigurator"
+      name="PageConfigurator"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/sample.py
===================================================================
--- z3c.website/trunk/src/z3c/website/sample.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/sample.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,39 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.interface
+import zope.component
+from zope.app import folder
+from zope.schema.fieldproperty import FieldProperty
+from zope.app.container import btree
+
+from z3c.website import interfaces
+
+
+class Samples(btree.BTreeContainer):
+    """Samples container."""
+
+    zope.interface.implements(interfaces.ISamples)
+
+    title = FieldProperty(interfaces.ISamples['title'])
+    description = FieldProperty(interfaces.ISamples['description'])
+    keyword = FieldProperty(interfaces.ISamples['keyword'])
+    body = FieldProperty(interfaces.ISamples['body'])
+
+    def __repr__(self):
+        return '<%s %r>' % (self.__class__.__name__, self.__name__)

Added: z3c.website/trunk/src/z3c/website/sample.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/sample.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/sample.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,16 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.website">
+
+  <class class=".sample.Samples">
+    <require
+        permission="zope.Public"
+        interface=".interfaces.ISamples"
+        />
+    <require
+        permission="z3c.website.ManageContent"
+        set_schema=".interfaces.ISamples"
+        />
+  </class>
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/security.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/security.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/security.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,70 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope">
+
+  <!-- permissions -->
+  <permission
+      id="z3c.website.ManageContent"
+      title="Manage Content"
+      description="Allows to edit content."
+      />
+
+  <permission
+      id="z3c.website.ViewSite"
+      title="View Site"
+      description="View site."
+      />
+
+  <permission
+      id="z3c.website.ManageSite"
+      title="Manage Site"
+      description="Allows to edit site components."
+      />
+
+  <permission
+      id="z3c.website.ManageUsers"
+      title="Manage Users"
+      description="Allows to manage all users."
+      />
+
+
+  <!-- Administrator role -->
+  <role
+      id="z3c.website.Administrator"
+      title="WebSite Administrator"
+      description="Administrators can manage the site and tests"
+      />
+
+  <grant
+      permission="z3c.website.ManageContent"
+      role="z3c.website.Administrator"
+      />
+
+  <grant
+      permission="z3c.website.ViewSite"
+      role="z3c.website.Administrator"
+      />
+
+  <grant
+      permission="z3c.website.ManageSite"
+      role="z3c.website.Administrator"
+      />
+
+  <grant
+      permission="z3c.website.ManageUsers"
+      role="z3c.website.Administrator"
+      />
+
+
+  <!-- Member role -->
+  <role
+      id="z3c.website.Member"
+      title="WebSite Member"
+      description="Member can edit content"
+      />
+
+  <grant
+      permission="z3c.website.ManageContent"
+      role="z3c.website.Member"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/session.py
===================================================================
--- z3c.website/trunk/src/z3c/website/session.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/session.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,84 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.interface
+from zope.schema.fieldproperty import FieldProperty
+from zope.publisher.interfaces import IRequest
+import zope.security.management
+import zope.security.interfaces
+from zope.app.session import session
+
+from z3c.website import interfaces
+
+SESSION_KEY = 'z3c.website.interfaces.IDemoSession'
+
+
+def getRequest():
+    try:
+        i = zope.security.management.getInteraction() # raises NoInteraction
+    except zope.security.interfaces.NoInteraction:
+        return
+
+    for p in i.participations:
+        if IRequest.providedBy(p):
+            return p
+
+
+class SessionData(object):
+    """None persistent sample content object for storing in a session."""
+
+    zope.interface.implements(interfaces.ISessionData)
+
+    content = FieldProperty(interfaces.ISessionData['content'])
+
+
+class DemoSession(session.Session):
+    """Simply session which knows how to set and get a object."""
+
+    zope.interface.implements(interfaces.IDemoSession)
+
+    def setObject(self, key, obj):
+        """Add a object to the session."""
+        spd = self.__getitem__(SESSION_KEY)
+        spd[key] = obj
+
+    def getObject(self, key, default=None):
+        spd = self.__getitem__(SESSION_KEY)
+        return spd.get(key, default)
+
+
+def getSessionData(form):
+    """Kows how to setup a object for a form and store it in a session.
+    
+    The form must provide a class under the attribute contentFactory.
+    """
+    key = form.__class__.__name__
+    request = getRequest()
+    if request is None:
+        raise KeyError("Bad setup, there is no interaction for form %s" % key)
+    session = interfaces.IDemoSession(request)
+    obj = session.getObject(key)
+    if obj is None:
+        factory = form.getContentFactory()
+        if hasattr(factory, '__call__'):
+            obj = factory()
+        else:
+            # we get a dict
+            obj = factory
+        session.setObject(key, obj)
+    return obj

Added: z3c.website/trunk/src/z3c/website/session.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/session.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/session.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,24 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.website">
+
+  <adapter
+      for="zope.publisher.interfaces.IRequest"
+      provides=".interfaces.IDemoSession"
+      factory=".session.DemoSession"
+      permission="zope.Public"
+      />
+
+  <class class=".session.SessionData">
+    <require
+        permission="zope.Public"
+        interface=".interfaces.ISessionData"
+        />
+    <require
+        permission="zope.Public"
+        set_schema=".interfaces.ISessionData"
+        />
+  </class>
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/site.py
===================================================================
--- z3c.website/trunk/src/z3c/website/site.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/site.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,166 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 69382 2006-08-09 13:26:53Z rogerineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+import zope.interface
+import zope.event
+import zope.lifecycleevent
+from zope.schema.fieldproperty import FieldProperty
+from zope.app.authentication.session import SessionCredentialsPlugin
+from zope.app import folder
+from zope.app.component import site
+from zope.app.security.interfaces import IAuthentication
+from zope.app.securitypolicy.interfaces import IPrincipalRoleManager
+
+from z3c.authentication.simple.authentication import SimpleAuthentication
+from z3c.authentication.simple.group import Group
+from z3c.authentication.simple.group import GroupContainer
+from z3c.authentication.simple.member import Member
+from z3c.authentication.simple.member import MemberContainer
+
+from z3c.authentication.simple.interfaces import IAuthenticatedPrincipal
+from z3c.authentication.simple.interfaces import IFoundPrincipal
+from z3c.authentication.simple.principal import PrincipalBase
+from z3c.authentication.simple import member
+from z3c.configurator import configurator
+from z3c.resource.interfaces import IResource
+
+from z3c.website import interfaces
+from z3c.website import sample
+
+
+class WebSite(folder.Folder):
+    """Website."""
+
+    zope.interface.implements(interfaces.IWebSite)
+
+    title = FieldProperty(interfaces.IWebSite['title'])
+    description = FieldProperty(interfaces.IWebSite['description'])
+    keyword = FieldProperty(interfaces.IWebSite['keyword'])
+    body = FieldProperty(interfaces.IWebSite['body'])
+
+    def __init__(self, title=None):
+        super(WebSite, self).__init__()
+        if title is not None:
+            self.title = title
+        self.setSiteManager(site.LocalSiteManager(self))
+
+    def __repr__(self):
+        return '<%s %r>' % (self.__class__.__name__, self.__name__)
+
+
+class SiteConfigurator(configurator.ConfigurationPluginBase):
+    """Configure the XPO site."""
+    zope.component.adapts(interfaces.IWebSite)
+
+    def __call__(self, data):
+        # get parameters
+    
+        # Add the pluggable authentication utility
+        sm = zope.component.getSiteManager(self.context)
+        auth = SimpleAuthentication()
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(auth))
+        sm['default']['auth'] = auth
+        sm.registerUtility(auth, IAuthentication)
+
+        # setup credentials plugin
+        cred = SessionCredentialsPlugin()
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(cred))
+        auth[u'credentials'] = cred
+        auth.credentialsPlugins += (u'credentials',)
+
+        prm = IPrincipalRoleManager(self.context)
+
+        # setup 'members' member container
+        members = MemberContainer()
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(members))
+        auth[u'members'] = members
+        auth.authenticatorPlugins += (u'members',)
+
+        # setup 'groups' group container
+        groups = GroupContainer(u'groups.')
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(groups))
+        auth[u'groups'] = groups
+        auth.authenticatorPlugins += (u'groups',)
+
+        # setup 'Members' group
+        grp =  Group(u'Members', u'Members')
+        groups.addGroup('Members', grp) 
+        prm.assignRoleToPrincipal('z3c.website.Member', 'groups.Members')
+
+        # setup 'Administrators' group
+        grp =  Group(u'Administrators', u'Administrators')
+        groups.addGroup('Administrators', grp) 
+        prm.assignRoleToPrincipal('z3c.website.Administrator', 
+            'groups.Administrators')
+
+        # Add a Admin to the administrators group
+        login = data['member.login']
+        admin = Member(login, data['member.password'], data['member.title'], 
+            data['member.description'])
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(admin))
+        auth['members'].add(admin)
+
+        adminGroup = groups['groups.Administrators']
+        adminGroup.setPrincipals(
+            adminGroup.principals + (admin.__name__,), check=False)
+
+        # setup info top level folder
+        info = page.Page()
+        info.title = u'Info'
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(info))
+        self.context['info'] = info
+        # create resource folder
+        resource = IResource(info)
+        configurator.configure(info, data)
+
+        # setup tutorials top level folder
+        tutorials = page.Page()
+        tutorials.title = u'Tutorials'
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(tutorials))
+        self.context['tutorials'] = tutorials
+        # create resource folder
+        resource = IResource(tutorials)
+        configurator.configure(tutorials, data)
+
+        # setup contact top level folder
+        download = page.Page()
+        download.title = u'Download'
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(download))
+        self.context['download'] = download
+        # create resource folder
+        resource = IResource(download)
+        configurator.configure(download, data)
+
+        # setup contact top level folder
+        contact = page.Page()
+        contact.title = u'Contact'
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(contact))
+        self.context['contact'] = contact
+        # create resource folder
+        resource = IResource(contact)
+        configurator.configure(contact, data)
+
+        # setup samples folder
+        samples = sample.Samples()
+        samples.title = u'Samples'
+        zope.event.notify(zope.lifecycleevent.ObjectCreatedEvent(samples))
+        self.context['samples'] = samples
+        # create resource folder
+        resource = IResource(samples)
+        configurator.configure(samples, data)

Added: z3c.website/trunk/src/z3c/website/site.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/site.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/site.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,36 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    i18n_domain="z3c.website">
+
+  <class class=".site.WebSite">
+    <allow
+        attributes="getSiteManager"
+        />
+    <require
+        permission="z3c.website.ManageSite"
+        attributes="setSiteManager"
+        />
+    <require
+        permission="zope.Public"
+        interface="zope.app.container.interfaces.IContained"
+        />
+    <require
+        permission="z3c.website.ViewSite"
+        interface="zope.app.container.interfaces.IContainer"
+        />
+    <require
+        permission="zope.Public"
+        interface=".interfaces.IContent"
+        />
+    <require
+        permission="z3c.website.ManageSite"
+        set_schema=".interfaces.IWebSite"
+        />
+  </class>
+
+  <adapter
+      factory=".site.SiteConfigurator"
+      name="SiteConfigurator"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/skin/__init__.py
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/__init__.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/__init__.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,40 @@
+##############################################################################
+#
+# Copyright (c) 2007 Projekt01 GmbH and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Resource License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: __init__.py 40 2007-02-21 09:18:28Z roger.ineichen $
+"""
+__docformat__ = "reStructuredText"
+
+from zope.app.component import hooks
+from zope.publisher.browser import BrowserPage
+from zope.traversing.browser import absoluteURL
+from zope.viewlet.interfaces import IViewletManager
+
+import z3c.layer.pagelet
+import z3c.website.layer
+
+
+class IWebSiteBrowserSkin(z3c.layer.pagelet.IPageletBrowserLayer, 
+    z3c.website.layer.IWebSiteBrowserLayer):
+    """The ``Z3CWebSite`` browser skin."""
+
+
+class IToolManager(IViewletManager):
+    """Manager for tool viewlets."""
+
+
+class SiteURL(BrowserPage):
+
+    def __call__(self):
+        return absoluteURL(hooks.getSite(), self.request)

Added: z3c.website/trunk/src/z3c/website/skin/configure.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/configure.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/configure.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,87 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.website">
+
+  <zope:interface
+      interface="z3c.website.skin.IWebSiteBrowserSkin"
+      type="zope.publisher.interfaces.browser.IBrowserSkinType"
+      name="Z3CWebSite"
+      />
+
+
+  <!-- Help Stuff -->
+  <page
+      name="siteURL"
+      for="*"
+      class=".SiteURL"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <!-- resource -->
+  <zrt-resource
+      name="demo.css"
+      file="demo.css"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <zrt-resource
+      name="jquery.js"
+      file="jquery.js"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <zrt-resource
+      name="interface.js"
+      file="interface.js"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <zrt-resource
+      name="demo.js"
+      file="demo.js"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <resource
+      name="favicon.png"
+      file="favicon.png"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <resourceDirectory
+      name="img"
+      directory="img"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+  <resourceDirectory
+      name="fisheye"
+      directory="fisheye"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      />
+
+
+  <!-- main template -->
+  <z3c:layout
+      for="*"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      template="template.pt"
+      />
+
+
+  <!-- viewlets -->
+
+  <viewlet
+      name="Search"
+      for="*"
+      class="z3c.formui.browser.DivFormCSSViewlet"
+      manager="z3c.website.layer.ICSS"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      weight="10"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/skin/demo.css
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/demo.css	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/demo.css	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,323 @@
+/* zrt-replace: "../img" tal"string:${context/++resource++img}" */
+/* zrt-replace: "../fisheye" tal"string:${context/++resource++fisheye}" */
+
+body {
+    font-family: Verdana, sans-serif;
+    font-size: 80%;
+    background-color: #B2B2B2;
+    background-repeat: repeat-y;
+    background-position: center;
+    background-image: url(../img/background.gif);
+    margin: 0px;
+    padding: 0px;
+}
+
+/* [ html ]---------------------------------------------------------------- */
+
+form {
+    margin: 0px;
+    padding: 0px;
+}
+
+fieldset {
+    padding: 10px;
+}
+
+img {
+    border: none;
+}
+
+a:link {
+    color: #3257C2;
+    text-decoration: none;
+}
+
+a:visited {
+    color: #3257C2;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #214285;
+}
+
+
+/* [ layout ]---------------------------------------------------------------- */
+
+div#layoutWrapper {
+    font-size: 80%;
+    text-align: center;
+}
+
+div#layoutContainer {
+    width: 941px;
+    text-align: left;
+    margin-left: auto; 
+    margin-right: auto;
+    padding: 0px;
+}
+
+
+/* [ header ]-------------------------------------------------------------- */
+
+div#headerContainer {
+    width: 941px;
+    height: 150px;
+    text-align: left;
+    position: relative;
+    margin: 0px;
+    padding: 0px;
+    /*background: #3E3C37 url(../img/topBG.gif) repeat-x top left;*/
+    background-color: #E1E1E1;
+}
+
+#topLine {
+    height: 5px;
+    background-color: #3257C2;
+}
+
+img#betaLogo {
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    padding: 5px 0px 0px 0px;
+}
+
+img#logo {
+    position: absolute;
+    top: 40px;
+    left: 10px;
+    padding: 0px 0px 20px 10px;
+}
+
+div#user {
+    top: 10px;
+    right: 10px;
+    position: absolute;
+    color: white;
+    padding: 0px 10px 0px 0px;
+}
+
+div#user a {
+    font-size: 80%;
+}
+
+
+/*---[ fisheye menu ]--------------------------------------------------------*/
+
+/* dock - top */
+.dock {
+    position: absolute;
+    top: 90px;
+    left: 700px;
+	height: 50px;
+	text-align: center;
+}
+.dock-container {
+	position: absolute;
+	height: 50px;
+	padding-left: 20px;
+}
+a.dock-item {
+	display: block;
+	width: 40px;
+	color: #000;
+	position: absolute;
+	top: 0px;
+	text-align: center;
+	text-decoration: none;
+	font: bold 12px Arial, Helvetica, sans-serif;
+}
+.dock-item img {
+	border: none; 
+	margin: 5px 10px 0px; 
+	width: 100%; 
+}
+.dock-item span {
+	display: none; 
+	padding-left: 20px;
+}
+
+
+/*---[ main ]-----------------------------------------------------------------*/
+
+div#mainContainer {
+    padding: 10px 0px 10px 0px;
+}
+
+/*---[ navigation ]-----------------------------------------------------------*/
+
+#naviContainer {
+	width: 200px;
+	float: left;
+	padding-top: 25px;
+}
+
+#naviContainer a {
+    color: #000000;
+}
+
+div.naviBox {
+    padding: 5px;
+    margin: 0px;
+    background-color: #F2F2F2;
+/*    background: url("./img/naviBG.jpg") repeat-y left top;*/
+}
+
+div.naviBox .naviBoxHeader {
+    height: 40px;
+    line-height: 40px;
+    color: #3257C2;
+	font-weight: bold;
+    vertical-align: top;
+}
+
+div.naviBox .naviBoxHeader img {
+    vertical-align: middle;
+    padding: 5px 10px 5px 0px;
+}
+
+
+div.naviBox .naviBoxBody {
+    color: #000000;
+}
+
+div.boxSpacer {
+    height: 10px;
+}
+
+div.naviBox #searchForm input {
+    vertical-align: middle;
+}
+
+/*---[ content ]-------------------------------------------------------------*/
+#contentContainer {
+	float: left;
+	width: 720px;
+    margin: 0;
+    padding: 5px;
+}
+
+#content {
+    padding: 15px 0px 0px 10px;
+}
+
+#content div.title {
+    font-size: 175%;
+    color: #3257C2;
+    padding: 0px 0px 0px 0px;
+}
+
+#content div.body {
+    padding-top: 10px;
+}
+
+
+/*---[ table ]---------------------------------------------------------------*/
+/* Styles for tables that act as lists of objects. */
+
+table.list {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.list tr {
+    border-bottom: 1px solid #ffffff;
+}
+
+table.list tr.even {
+    background-color: #E6E1D9;
+}
+
+table.list tr.even td.sorted-on {
+    background-color: #D5CCBD;
+}
+
+table.list tr.odd {
+    background-color: #F2F0EC;
+}
+
+table.list tr.odd td.sorted-on {
+    background-color: #DFD9CE;
+}
+
+table.list tr.selected {
+    background-color: #BCAE98;
+}
+
+table.list tr.selected td.sorted-on {
+    background-color: #AE9E84;
+}
+
+table.list th {
+    background-color: #E6E1D9;
+    border-color: #ffffff;
+    border-bottom-width: 1px;
+    border-bottom-style: solid;
+    padding: 3px 4px;
+    text-align: left;
+}
+
+table.list th.sorted-on {
+    background-color: #D5CCBD;
+}
+
+table.list td {
+    vertical-align: top;
+    padding: 3px 4px;
+}
+
+table.list .centered {
+    text-align: center;
+}
+
+table.list .right {
+    text-align: right;
+}
+
+/*---[ tool ]----------------------------------------------------------------*/
+
+#btnSearch {
+    border: none;
+}
+
+
+.button{
+  cursor: pointer;
+  border: outset 1px #ccc;
+  background: #999999;
+  color: #666666;
+  font-weight: bold;
+  padding: 1px 2px;
+  background: url(../img/buttonBG.gif) repeat-x left top;
+}
+
+.clear {
+    height: 1px;
+    clear: both;
+    margin: 0px;
+    padding: 0px;
+}
+
+
+/*---[ footer ]--------------------------------------------------------------*/
+
+#footerContainer {
+    padding-top: 20px;
+	text-align: center;
+}
+
+#footerContainer .footer {
+    width: 900px;
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 10px;
+	color: #999999;
+    padding-top: 20px;
+}
+
+#footerContainer a {
+	color: #999999;
+}
+

Added: z3c.website/trunk/src/z3c/website/skin/demo.js
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/demo.js	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/demo.js	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,12 @@
+$(document).ready(function() {
+    $('#dock').Fisheye(
+        {maxWidth: 60,
+         items: 'a',
+         itemsText: 'span',
+         container: '.dock-container',
+         itemWidth: 53,
+         proximity: 90,
+         halign : 'center'}
+    )
+    //$("textarea.restEditorWidget").resteditor();
+});

Added: z3c.website/trunk/src/z3c/website/skin/favicon.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/favicon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/contact.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/contact.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/contact.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/contact.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/download.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/download.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/download.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/download.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/email.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/email.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/email.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/email.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/home.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/home.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/home.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/home.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/info.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/info.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/info.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/info.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/portfolio.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/portfolio.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/portfolio.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/portfolio.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/samples.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/samples.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/samples.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/samples.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/tutorials.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/tutorials.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/tutorials.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/tutorials.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/users.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/users.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/fisheye/users.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/fisheye/users.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/form.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/form.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/form.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,46 @@
+<form action="." method="post" enctype="multipart/form-data"
+      metal:define-macro="form"
+			tal:attributes="action request/URL"
+      class="edit-form" >
+  <div id="viewspace" metal:define-slot="viewspace">
+    <h1  i18n:translate=""
+       tal:condition="view/label"
+       tal:content="view/label"
+       metal:define-slot="heading"
+       >Do something</h1>
+    <metal:block define-macro="header">
+    <div class="form-status"
+       tal:define="status view/status"
+       tal:condition="status">
+      <div class="summary"
+           i18n:translate=""
+           tal:content="view/status">
+        Form status summary
+      </div>
+      <ul class="errors" tal:condition="view/errors">
+        <li tal:repeat="error view/error_views">
+          <span tal:replace="structure error">Error Type</span>
+        </li>
+      </ul>
+    </div>
+    </metal:block>
+    <div metal:define-slot="extra_info" tal:replace="nothing">
+    </div>
+    <div metal:define-slot="main">
+    </div>
+    <metal:block define-slot="above_buttons">
+    </metal:block>
+  </div>
+  <metal:block define-macro="form_action_views">
+  <div id="actionsView"
+       metal:define-macro="form_actions">
+    <span class="actionButtons"
+        tal:condition="view/availableActions"
+        metal:define-slot="bottom_buttons">
+    <input tal:repeat="action view/actions"
+           tal:replace="structure action/render"
+           />
+    </span>
+  </div>
+  </metal:block>
+</form>

Added: z3c.website/trunk/src/z3c/website/skin/img/adding.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/adding.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/adding.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/adding.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/background.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/background.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/beta.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/beta.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/beta.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/beta.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/btnSearch.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/btnSearch.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/btnSearch.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/btnSearch.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/buttonBG.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/buttonBG.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/content.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/content.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/content.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/content.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/edit.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/edit.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/edit.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/edit.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/logo.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/logo.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/navigation.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/navigation.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/navigation.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/navigation.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/search.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/search.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/search.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/search.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/user.gif
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/user.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/user.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/user.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/img/userIcon.png
===================================================================
(Binary files differ)


Property changes on: z3c.website/trunk/src/z3c/website/skin/img/userIcon.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: z3c.website/trunk/src/z3c/website/skin/interface.js
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/interface.js	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/interface.js	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,8 @@
+/*
+ * Interface elements for jQuery - http://interface.eyecon.ro
+ *
+ * Copyright (c) 2006 Stefan Petre
+ * Dual licensed under the MIT (MIT-LICENSE.txt) 
+ * and GPL (GPL-LICENSE.txt) licenses.
+ */
+ eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('6.15={3o:d(e){7 x=0;7 y=0;7 1Q=1A;7 A=e.L;8(6(e).H(\'Q\')==\'U\'){1E=A.1a;2y=A.O;A.1a=\'1F\';A.Q=\'1Y\';A.O=\'2e\';1Q=26}7 4=e;2P(4){x+=4.3B+(4.1I&&!6.3p.41?F(4.1I.2X)||0:0);y+=4.3x+(4.1I&&!6.3p.41?F(4.1I.2Z)||0:0);4=4.4e}4=e;2P(4&&4.4a&&4.4a.39()!=\'V\'){x-=4.1D||0;y-=4.1s||0;4=4.2x}8(1Q){A.Q=\'U\';A.O=2y;A.1a=1E}q{x:x,y:y}},4E:d(4){7 x=0,y=0;2P(4){x+=4.3B||0;y+=4.3x||0;4=4.4e}q{x:x,y:y}},35:d(e){7 w=6.H(e,\'1T\');7 h=6.H(e,\'36\');7 1e=0;7 1o=0;7 A=e.L;8(6(e).H(\'Q\')!=\'U\'){1e=e.1z;1o=e.2s}u{1E=A.1a;2y=A.O;A.1a=\'1F\';A.Q=\'1Y\';A.O=\'2e\';1e=e.1z;1o=e.2s;A.Q=\'U\';A.O=2y;A.1a=1E}q{w:w,h:h,1e:1e,1o:1o}},4P:d(4){q{1e:4.1z||0,1o:4.2s||0}},58:d(e){7 h,w,22;8(e){w=e.2a;h=e.29}u{22=D.Y;w=2z.3c||2N.3c||(22&&22.2a)||D.V.2a;h=2z.31||2N.31||(22&&22.29)||D.V.29}q{w:w,h:h}},3P:d(e){7 t,l,w,h,1J,1R;8(e&&e.2E.39()!=\'V\'){t=e.1s;l=e.1D;w=e.3j;h=e.3e;1J=0;1R=0}u{8(D.Y&&D.Y.1s){t=D.Y.1s;l=D.Y.1D;w=D.Y.3j;h=D.Y.3e}u 8(D.V){t=D.V.1s;l=D.V.1D;w=D.V.3j;h=D.V.3e}1J=2N.3c||D.Y.2a||D.V.2a||0;1R=2N.31||D.Y.29||D.V.29||0}q{t:t,l:l,w:w,h:h,1J:1J,1R:1R}},3L:d(e,1U){7 4=6(e);7 t=4.H(\'2j\')||\'\';7 r=4.H(\'2k\')||\'\';7 b=4.H(\'2n\')||\'\';7 l=4.H(\'2l\')||\'\';8(1U)q{t:F(t)||0,r:F(r)||0,b:F(b)||0,l:F(l)};u q{t:t,r:r,b:b,l:l}},56:d(e,1U){7 4=6(e);7 t=4.H(\'3w\')||\'\';7 r=4.H(\'3u\')||\'\';7 b=4.H(\'3s\')||\'\';7 l=4.H(\'3t\')||\'\';8(1U)q{t:F(t)||0,r:F(r)||0,b:F(b)||0,l:F(l)};u q{t:t,r:r,b:b,l:l}},4Z:d(e,1U){7 4=6(e);7 t=4.H(\'2Z\')||\'\';7 r=4.H(\'3G\')||\'\';7 b=4.H(\'3y\')||\'\';7 l=4.H(\'2X\')||\'\';8(1U)q{t:F(t)||0,r:F(r)||0,b:F(b)||0,l:F(l)||0};u q{t:t,r:r,b:b,l:l}},3T:d(2i){7 x=2i.53||(2i.52+(D.Y.1D||D.V.1D))||0;7 y=2i.51||(2i.54+(D.Y.1s||D.V.1s))||0;q{x:x,y:y}},3h:d(12,3g){3g(12);12=12.3F;2P(12){6.15.3h(12,3g);12=12.5a}},59:d(12){6.15.3h(12,d(4){S(7 1j 1q 4){8(2R 4[1j]===\'d\'){4[1j]=20}}})},57:d(4,27){7 1b=$.15.3P();7 3l=$.15.35(4);8(!27||27==\'4Y\')$(4).H({X:1b.t+((1i.3S(1b.h,1b.1R)-1b.t-3l.1o)/2)+\'K\'});8(!27||27==\'4Q\')$(4).H({N:1b.l+((1i.3S(1b.w,1b.1J)-1b.l-3l.1e)/2)+\'K\'})},4O:d(4,3U){7 3V=$(\'3q[@2u*="2w"]\',4||D),2w;3V.1V(d(){2w=k.2u;k.2u=3U;k.L.4M="4N:4R.4S.4W(2u=\'"+2w+"\')"})}};[].4i||(4V.4U.4i=d(v,n){n=(n==20)?0:n;7 m=k.1m;S(7 i=n;i<m;i++)8(k[i]==v)q i;q-1});6.3A=d(e){8(/^4T$|^4L$|^5b$|^5c$|^5t$|^5s$|^5r$|^5q$|^5u$|^V$|^5v$|^5z$|^5y$|^5x$|^5w$|^5p$|^5o$/i.2q(e.2E))q 1A;u q 26};6.E.5h=d(e,1p){7 c=e.3F;7 1d=c.L;1d.O=1p.O;1d.2j=1p.18.t;1d.2l=1p.18.l;1d.2n=1p.18.b;1d.2k=1p.18.r;1d.X=1p.X+\'K\';1d.N=1p.N+\'K\';e.2x.4f(c,e);e.2x.5g(e)};6.E.5f=d(e){8(!6.3A(e))q 1A;7 t=6(e);7 A=e.L;7 1Q=1A;7 J={};J.O=t.H(\'O\');8(t.H(\'Q\')==\'U\'){1E=t.H(\'1a\');A.1a=\'1F\';A.Q=\'\';1Q=26}J.32=6.15.35(e);J.18=6.15.3L(e);7 2Y=e.1I?e.1I.4g:t.H(\'5d\');J.X=F(t.H(\'X\'))||0;J.N=F(t.H(\'N\'))||0;7 3J=\'5e\'+F(1i.5i()*4p);7 1x=D.5j(/^3q$|^5n$|^5m$|^5l$|^5k$|^5A$|^2V$|^4u$|^4y$|^4z$|^4x$|^4v$|^4s$|^4H$/i.2q(e.2E)?\'4J\':e.2E);6.1j(1x,\'4F\',3J);1x.3X=\'4B\';7 R=1x.L;7 X=0;7 N=0;8(J.O==\'33\'||J.O==\'2e\'){X=J.X;N=J.N}R.Q=\'U\';R.X=X+\'K\';R.N=N+\'K\';R.O=J.O!=\'33\'&&J.O!=\'2e\'?\'33\':J.O;R.2K=\'1F\';R.36=J.32.1o+\'K\';R.1T=J.32.1e+\'K\';R.2j=J.18.t;R.2k=J.18.r;R.2n=J.18.b;R.2l=J.18.l;8(6.3p.4G){R.4g=2Y}u{R.4D=2Y}e.2x.4f(1x,e);A.2j=\'1M\';A.2k=\'1M\';A.2n=\'1M\';A.2l=\'1M\';A.O=\'2e\';A.4C=\'U\';A.X=\'1M\';A.N=\'1M\';8(1Q){A.Q=\'U\';A.1a=1E}1x.4A(e);R.Q=\'1Y\';q{J:J,4I:6(1x)}};6.E.2f={4K:[0,B,B],4r:[3E,B,B],4w:[4l,4l,4t],4X:[0,0,0],60:[0,0,B],6P:[3H,42,42],6O:[0,B,B],6N:[0,0,1L],6L:[0,1L,1L],6M:[3b,3b,3b],6Q:[0,6R,0],6W:[6V,6U,4k],6S:[1L,0,1L],6T:[6K,4k,47],6J:[B,3I,0],6B:[6A,50,6z],6x:[1L,0,0],6Y:[6C,6D,6I],6H:[6G,0,2U],6E:[B,0,B],6F:[B,6X,0],7a:[0,1v,0],7j:[75,0,7i],7f:[3E,3v,3I],7e:[7h,7l,3v],7g:[3r,B,B],7c:[4c,7d,4c],72:[2U,2U,2U],71:[B,70,74],76:[B,B,3r],7b:[0,B,0],79:[B,0,B],77:[1v,0,0],78:[0,0,1v],6Z:[1v,1v,0],73:[B,3H,0],7k:[B,2I,6y],6v:[1v,0,1v],5V:[B,0,0],5U:[2I,2I,2I],5T:[B,B,B],5R:[B,B,0]};6.E.1w=d(16,3z){8(6.E.2f[16])q{r:6.E.2f[16][0],g:6.E.2f[16][1],b:6.E.2f[16][2]};u 8(M=/^1N\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)$/.2A(16))q{r:F(M[1]),g:F(M[2]),b:F(M[3])};u 8(M=/1N\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)$/.2A(16))q{r:Z(M[1])*2.55,g:Z(M[2])*2.55,b:Z(M[3])*2.55};u 8(M=/^#([a-1H-1B-9])([a-1H-1B-9])([a-1H-1B-9])$/.2A(16))q{r:F("1C"+M[1]+M[1]),g:F("1C"+M[2]+M[2]),b:F("1C"+M[3]+M[3])};u 8(M=/^#([a-1H-1B-9]{2})([a-1H-1B-9]{2})([a-1H-1B-9]{2})$/.2A(16))q{r:F("1C"+M[1]),g:F("1C"+M[2]),b:F("1C"+M[3])};u q 3z==26?1A:{r:B,g:B,b:B}};6.E.4n={3y:1,2X:1,3G:1,2Z:1,5S:1,5B:1,36:1,N:1,5W:1,5X:1,2n:1,2l:1,2k:1,2j:1,62:1,2T:1,61:1,6w:1,1f:1,5Y:1,5Z:1,3s:1,3t:1,3u:1,3w:1,38:1,5Q:1,X:1,1T:1,2O:1};6.E.49={5P:1,5G:1,5H:1,5F:1,5E:1,16:1,5C:1};6.E.25=[\'5D\',\'5I\',\'5J\',\'5O\'];6.E.3k={\'3d\':[\'24\',\'3W\'],\'2B\':[\'24\',\'3f\'],\'2D\':[\'2D\',\'\'],\'2C\':[\'2C\',\'\']};6.3Q.4b({5N:d(1h,1G,P,2v){q k.2d(d(){7 2t=6.1G(1G,P,2v);7 e=28 6.4m(k,2t,1h)})},37:d(1G,2v){q k.2d(d(){7 2t=6.1G(1G,2v);7 e=28 6.37(k,2t)})},5M:d(14){q k.1V(d(){8(k.1n)6.3m(k,14)})},5K:d(14){q k.1V(d(){8(k.1n)6.3m(k,14);8(k.2d&&k.2d[\'E\'])k.2d.E=[]})}});6.4b({37:d(C,o){7 z=k,4o;z.14=d(){8(6.43(o.2M))o.2M.3Z(C)};z.2h=3O(d(){z.14()},o.1k);C.1n=z},P:{4q:d(p,n,4j,4d,1k){q((-1i.5L(p*1i.63)/2)+0.5)*4d+4j}},4m:d(C,o,1h){7 z=k,4o;7 y=C.L;7 44=6.H(C,"2K");7 1O=6.H(C,"Q");7 G={};z.2L=(28 46()).48();o.P=o.P&&6.P[o.P]?o.P:\'4q\';z.2Q=d(I,W){8(6.E.4n[I]){8(W==\'2H\'||W==\'2G\'||W==\'3N\'){8(!C.1r)C.1r={};7 r=Z(6.1y(C,I));C.1r[I]=r&&r>-4p?r:(Z(6.H(C,I))||0);W=W==\'3N\'?(1O==\'U\'?\'2H\':\'2G\'):W;o[W]=26;G[I]=W==\'2H\'?[0,C.1r[I]]:[C.1r[I],0];8(I!=\'1f\')y[I]=G[I][0]+(I!=\'2O\'&&I!=\'34\'?\'K\':\'\');u 6.1j(y,"1f",G[I][0])}u{G[I]=[Z(6.1y(C,I)),Z(W)||0]}}u 8(6.E.49[I])G[I]=[6.E.1w(6.1y(C,I)),6.E.1w(W)];u 8(/^2D$|2C$|24$|2B$|3d$/i.2q(I)){7 m=W.1t(/\\s+/g,\' \').1t(/1N\\s*\\(\\s*/g,\'1N(\').1t(/\\s*,\\s*/g,\',\').1t(/\\s*\\)/g,\')\').64(/([^\\s]+)/g);6n(I){2b\'2D\':2b\'2C\':2b\'3d\':2b\'2B\':m[3]=m[3]||m[1]||m[0];m[2]=m[2]||m[0];m[1]=m[1]||m[0];S(7 i=0;i<6.E.25.1m;i++){7 1l=6.E.3k[I][0]+6.E.25[i]+6.E.3k[I][1];G[1l]=I==\'2B\'?[6.E.1w(6.1y(C,1l)),6.E.1w(m[i])]:[Z(6.1y(C,1l)),Z(m[i])]}3R;2b\'24\':S(7 i=0;i<m.1m;i++){7 3n=Z(m[i]);7 2r=!6m(3n)?\'3W\':(!/6l|U|1F|6j|6k|6o|6p|6u|6t|6s|6q/i.2q(m[i])?\'3f\':1A);8(2r){S(7 j=0;j<6.E.25.1m;j++){1l=\'24\'+6.E.25[j]+2r;G[1l]=2r==\'3f\'?[6.E.1w(6.1y(C,1l)),6.E.1w(m[i])]:[Z(6.1y(C,1l)),3n]}}u{y[\'6r\']=m[i]}}3R}}u{y[I]=W}q 1A};S(p 1q 1h){8(p==\'L\'){7 1c=6.30(1h[p]);S(1P 1q 1c){k.2Q(1P,1c[1P])}}u 8(p==\'3X\'){8(D.2S)S(7 i=0;i<D.2S.1m;i++){7 1K=D.2S[i].1K||D.2S[i].6i||20;8(1K){S(7 j=0;j<1K.1m;j++){8(1K[j].6h==\'.\'+1h[p]){7 1X=28 69(\'\\.\'+1h[p]+\' {\');7 1g=1K[j].L.68;7 1c=6.30(1g.1t(1X,\'\').1t(/}/g,\'\'));S(1P 1q 1c){k.2Q(1P,1c[1P])}}}}}}u{k.2Q(p,1h[p])}}y.Q=1O==\'U\'?\'1Y\':1O;y.2K=\'1F\';z.14=d(){7 t=(28 46()).48();8(t>o.1k+z.2L){4h(z.2h);z.2h=20;S(p 1q G){8(p=="1f")6.1j(y,"1f",G[p][1]);u 8(2R G[p][1]==\'2V\')y[p]=\'1N(\'+G[p][1].r+\',\'+G[p][1].g+\',\'+G[p][1].b+\')\';u y[p]=G[p][1]+(p!=\'2O\'&&p!=\'34\'?\'K\':\'\')}8(o.2G||o.2H)S(7 p 1q C.1r)8(p=="1f")6.1j(y,p,C.1r[p]);u y[p]="";y.Q=o.2G?\'U\':(1O!=\'U\'?1O:\'1Y\');y.2K=44;C.1n=20;8(6.43(o.2M))o.2M.3Z(C)}u{7 n=t-k.2L;7 2c=n/o.1k;S(p 1q G){8(2R G[p][1]==\'2V\'){y[p]=\'1N(\'+F(6.P[o.P](2c,n,G[p][0].r,(G[p][1].r-G[p][0].r),o.1k))+\',\'+F(6.P[o.P](2c,n,G[p][0].g,(G[p][1].g-G[p][0].g),o.1k))+\',\'+F(6.P[o.P](2c,n,G[p][0].b,(G[p][1].b-G[p][0].b),o.1k))+\')\'}u{7 2W=6.P[o.P](2c,n,G[p][0],(G[p][1]-G[p][0]),o.1k);8(p=="1f")6.1j(y,"1f",2W);u y[p]=2W+(p!=\'2O\'&&p!=\'34\'?\'K\':\'\')}}}};z.2h=3O(d(){z.14()},13);C.1n=z},3m:d(C,14){8(14)C.1n.2L-=67;u{2z.4h(C.1n.2h);C.1n=20;6.65(C,"E")}}});6.30=d(1g){7 1c={};8(2R 1g==\'66\'){1g=1g.39().40(\';\');S(7 i=0;i<1g.1m;i++){1X=1g[i].40(\':\');8(1X.1m==2){1c[6.45(1X[0].1t(/\\-(\\w)/g,d(m,c){q c.6a()}))]=6.45(1X[1])}}}q 1c};6.1u={3K:d(o){q k.1V(d(){7 4=k;4.f={10:6(o.10,k),23:6(o.23,k),21:6.15.3o(k),T:o.T,2p:o.2p,1Z:o.1Z,3Y:o.3Y,17:o.17,2T:o.2T};6.1u.2J(4,0);6(2z).2F(\'6b\',d(){4.f.21=6.15.3o(4);6.1u.2J(4,0);6.1u.3i(4)});6.1u.3i(4);4.f.10.2F(\'6g\',d(){6(4.f.2p,k).1S(0).L.Q=\'1Y\'}).2F(\'6f\',d(){6(4.f.2p,k).1S(0).L.Q=\'U\'});6(D).2F(\'6e\',d(e){7 2g=6.15.3T(e);7 19=0;8(4.f.17&&4.f.17==\'3M\')7 2o=2g.x-4.f.21.x-(4.1z-4.f.T*4.f.10.1W())/2-4.f.T/2;u 8(4.f.17&&4.f.17==\'38\')7 2o=2g.x-4.f.21.x-4.1z+4.f.T*4.f.10.1W();u 7 2o=2g.x-4.f.21.x;7 3D=1i.3C(2g.y-4.f.21.y-4.2s/2,2);4.f.10.1V(d(2m){11=1i.6c(1i.3C(2o-2m*4.f.T,2)+3D);11-=4.f.T/2;11=11<0?0:11;11=11>4.f.1Z?4.f.1Z:11;11=4.f.1Z-11;3a=4.f.2T*11/4.f.1Z;k.L.1T=4.f.T+3a+\'K\';k.L.N=4.f.T*2m+19+\'K\';19+=3a});6.1u.2J(4,19)})})},2J:d(4,19){8(4.f.17)8(4.f.17==\'3M\')4.f.23.1S(0).L.N=(4.1z-4.f.T*4.f.10.1W())/2-19/2+\'K\';u 8(4.f.17==\'N\')4.f.23.1S(0).L.N=-19/4.f.10.1W()+\'K\';u 8(4.f.17==\'38\')4.f.23.1S(0).L.N=(4.1z-4.f.T*4.f.10.1W())-19/2+\'K\';4.f.23.1S(0).L.1T=4.f.T*4.f.10.1W()+19+\'K\'},3i:d(4){4.f.10.1V(d(2m){k.L.1T=4.f.T+\'K\';k.L.N=4.f.T*2m+\'K\'})}};6.3Q.6d=6.1u.3K;',62,456,'||||el||jQuery|var|if|||||function||fisheyeCfg|||||this||||options||return||||else||||||es|255|elem|document|fx|parseInt|props|css|tp|oldStyle|px|style|result|left|position|easing|display|wrs|for|itemWidth|none|body|vp|top|documentElement|parseFloat|items|distance|nodeEl||step|iUtil|color|halign|margins|toAdd|visibility|clientScroll|newStyles|cs|wb|opacity|styles|prop|Math|attr|duration|nmp|length|animationHandler|hb|old|in|orig|scrollTop|replace|iFisheye|128|parseColor|wr|curCSS|offsetWidth|false|F0|0x|scrollLeft|oldVisibility|hidden|speed|fA|currentStyle|iw|cssRules|139|0px|rgb|oldDisplay|np|restoreStyle|ih|get|width|toInteger|each|size|rule|block|proximity|null|pos|de|container|border|cssSides|true|axis|new|clientHeight|clientWidth|case|pr|queue|absolute|namedColors|pointer|timer|event|marginTop|marginRight|marginLeft|nr|marginBottom|posx|itemsText|test|sideEnd|offsetHeight|opt|src|callback|png|parentNode|oldPosition|window|exec|borderColor|padding|margin|nodeName|bind|hide|show|192|positionContainer|overflow|startTime|complete|self|zIndex|while|getValues|typeof|styleSheets|maxWidth|211|object|pValue|borderLeftWidth|oldFloat|borderTopWidth|parseStyle|innerHeight|sizes|relative|fontWeight|getSize|height|pause|right|toLowerCase|extraWidth|169|innerWidth|borderWidth|scrollHeight|Color|func|traverseDOM|positionItems|scrollWidth|cssSidesEnd|windowSize|stopAnim|floatVal|getPosition|browser|img|224|paddingBottom|paddingLeft|paddingRight|230|paddingTop|offsetTop|borderBottomWidth|notColor|fxCheckTag|offsetLeft|pow|posy|240|firstChild|borderRightWidth|165|140|wid|build|getMargins|center|toggle|setInterval|getScroll|fn|break|max|getPointer|emptyGIF|images|Width|className|valign|apply|split|opera||isFunction|oldOverflow|trim|Date||getTime|colorCssProps|tagName|extend|144|delta|offsetParent|insertBefore|styleFloat|clearInterval|indexOf|firstNum|107|245|fxe|cssProps|values|10000|linear|azure|dl|220|iframe|ul|beige|table|button|form|appendChild|fxWrapper|listStyle|cssFloat|getPositionLite|id|msie|ol|wrapper|div|aqua|td|filter|progid|fixPNG|getSizeLite|horizontally|DXImageTransform|Microsoft|tr|prototype|Array|AlphaImageLoader|black|vertically|getBorder||pageY|clientX|pageX|clientY||getPadding|centerEl|getClient|purgeEvents|nextSibling|tbody|caption|float|w_|buildWrapper|removeChild|destroyWrapper|random|createElement|select|hr|input|br|meta|optgroup|colgroup|col|tfoot|thead|th|header|option|frameset|frame|script|textarea|fontSize|outlineColor|Top|borderTopColor|borderRightColor|borderBottomColor|borderLeftColor|Right|Bottom|stopAll|cos|stop|animate|Left|backgroundColor|textIndent|yellow|bottom|white|silver|red|letterSpacing|lineHeight|outlineOffset|outlineWidth|blue|minHeight|maxHeight|PI|match|dequeue|string|100000000|cssText|RegExp|toUpperCase|resize|sqrt|Fisheye|mousemove|mouseout|mouseover|selectorText|rules|dotted|dashed|transparent|isNaN|switch|solid|double|outset|borderStyle|inset|ridge|groove|purple|minWidth|darkred|203|204|153|darkorchid|233|150|fuchsia|gold|148|darkviolet|122|darkorange|85|darkcyan|darkgrey|darkblue|cyan|brown|darkgreen|100|darkmagenta|darkolivegreen|183|189|darkkhaki|215|darksalmon|olive|182|lightpink|lightgrey|orange|193||lightyellow|maroon|navy|magenta|green|lime|lightgreen|238|lightblue|khaki|lightcyan|173|130|indigo|pink|216'.split('|'),0,{}))

Added: z3c.website/trunk/src/z3c/website/skin/jquery.js
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/jquery.js	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/jquery.js	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,12 @@
+/*
+ * jQuery 1.1.2 - New Wave Javascript
+ *
+ * Copyright (c) 2007 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2007-02-27 17:18:47 -0500 (Tue, 27 Feb 2007) $
+ * $Rev: 1460 $
+ */
+
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7(1D 1u.6=="R"){1u.R=1u.R;v 6=q(a,c){7(1u==l)u 1q 6(a,c);a=a||12;7(6.1p(a))u 1q 6(12)[6.D.27?"27":"2P"](a);7(1D a=="20"){v m=/^[^<]*(<(.|\\s)+>)[^>]*$/.2M(a);7(m)a=6.41([m[1]]);I u 1q 6(c).2p(a)}u l.6p(a.1l==2A&&a||(a.3W||a.H&&a!=1u&&!a.1W&&a[0]!=R&&a[0].1W)&&6.3N(a)||[a])};7(1D $!="R")6.30$=$;v $=6;6.D=6.8n={3W:"1.1.2",8K:q(){u l.H},H:0,2b:q(1P){u 1P==R?6.3N(l):l[1P]},2j:q(a){v K=6(a);K.6n=l;u K},6p:q(a){l.H=0;[].1m.15(l,a);u l},J:q(D,1A){u 6.J(l,D,1A)},2g:q(1b){v 4W=-1;l.J(q(i){7(l==1b)4W=i});u 4W},1G:q(23,O,B){v 1b=23;7(23.1l==3t)7(O==R)u l.H&&6[B||"1G"](l[0],23)||R;I{1b={};1b[23]=O}u l.J(q(2g){P(v G 1B 1b)6.1G(B?l.1o:l,G,6.G(l,1b[G],B,2g,G))})},1n:q(23,O){u l.1G(23,O,"3g")},2I:q(e){7(1D e=="20")u l.3u().3s(12.8q(e));v t="";6.J(e||l,q(){6.J(l.3b,q(){7(l.1W!=8)t+=l.1W!=1?l.6u:6.D.2I([l])})});u t},2H:q(){v a=6.41(1v);u l.J(q(){v b=a[0].3j(U);l.Y.2T(b,l);1Y(b.1a)b=b.1a;b.4A(l)})},3s:q(){u l.3d(1v,U,1,q(a){l.4A(a)})},5j:q(){u l.3d(1v,U,-1,q(a){l.2T(a,l.1a)})},5k:q(){u l.3d(1v,11,1,q(a){l.Y.2T(a,l)})},5u:q(){u l.3d(1v,11,-1,q(a){l.Y.2T(a,l.2c)})},4f:q(){u l.6n||6([])},2p:q(t){u l.2j(6.2Y(l,q(a){u 6.2p(t,a)}),t)},4Y:q(4M){u l.2j(6.2Y(l,q(a){v a=a.3j(4M!=R?4M:U);a.$1E=14;u a}))},1C:q(t){u l.2j(6.1p(t)&&6.2n(l,q(2u,2g){u t.15(2u,[2g])})||6.3z(t,l))},2e:q(t){u l.2j(t.1l==3t&&6.3z(t,l,U)||6.2n(l,q(a){u(t.1l==2A||t.3W)?6.3y(a,t)<0:a!=t}))},1K:q(t){u l.2j(6.2m(l.2b(),t.1l==3t?6(t).2b():t.H!=R&&(!t.1e||t.1e=="8s")?t:[t]))},4k:q(1s){u 1s?6.1C(1s,l).r.H>0:11},19:q(19){u 19==R?(l.H?l[0].O:14):l.1G("O",19)},4T:q(19){u 19==R?(l.H?l[0].2G:14):l.3u().3s(19)},3d:q(1A,1N,3Y,D){v 4Y=l.H>1;v a=6.41(1A);7(3Y<0)a.8t();u l.J(q(){v 1b=l;7(1N&&6.1e(l,"1N")&&6.1e(a[0],"3m"))1b=l.5K("1X")[0]||l.4A(12.56("1X"));6.J(a,q(){D.15(1b,[4Y?l.3j(U):l])})})}};6.1w=6.D.1w=q(){v 1T=1v[0],a=1;7(1v.H==1){1T=l;a=0}v G;1Y(G=1v[a++])P(v i 1B G)1T[i]=G[i];u 1T};6.1w({8u:q(){7(6.30$)$=6.30$;u 6},1p:q(D){u!!D&&1D D!="20"&&!D.1e&&1D D[0]=="R"&&/q/i.1j(D+"")},4C:q(C){u C.60&&C.5J&&!C.5J.63},1e:q(C,W){u C.1e&&C.1e.3K()==W.3K()},J:q(1b,D,1A){7(1b.H==R)P(v i 1B 1b)D.15(1b[i],1A||[i,1b[i]]);I P(v i=0,6q=1b.H;i<6q;i++)7(D.15(1b[i],1A||[i,1b[i]])===11)3M;u 1b},G:q(C,O,B,2g,G){7(6.1p(O))O=O.3n(C,[2g]);v 5G=/z-?2g|8x-?8y|1c|58|8z-?26/i;u O&&O.1l==3J&&B=="3g"&&!5G.1j(G)?O+"4R":O},18:{1K:q(C,c){6.J(c.3o(/\\s+/),q(i,N){7(!6.18.2Q(C.18,N))C.18+=(C.18?" ":"")+N})},2d:q(C,c){C.18=c?6.2n(C.18.3o(/\\s+/),q(N){u!6.18.2Q(c,N)}).6r(" "):""},2Q:q(t,c){t=t.18||t;c=c.1S(/([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:])/g,"\\\\$1");u t&&1q 4u("(^|\\\\s)"+c+"(\\\\s|$)").1j(t)}},4c:q(e,o,f){P(v i 1B o){e.1o["1L"+i]=e.1o[i];e.1o[i]=o[i]}f.15(e,[]);P(v i 1B o)e.1o[i]=e.1o["1L"+i]},1n:q(e,p){7(p=="26"||p=="3Q"){v 1L={},44,3I,d=["8A","8B","8C","8D"];6.J(d,q(){1L["8E"+l]=0;1L["8F"+l+"8G"]=0});6.4c(e,1L,q(){7(6.1n(e,"1h")!="1V"){44=e.8H;3I=e.8I}I{e=6(e.3j(U)).2p(":4i").5m("2W").4f().1n({4m:"1F",3k:"7H",1h:"2z",8L:"0",6w:"0"}).5A(e.Y)[0];v 3i=6.1n(e.Y,"3k");7(3i==""||3i=="4a")e.Y.1o.3k="6x";44=e.6y;3I=e.6z;7(3i==""||3i=="4a")e.Y.1o.3k="4a";e.Y.36(e)}});u p=="26"?44:3I}u 6.3g(e,p)},3g:q(C,G,53){v K;7(G=="1c"&&6.V.1g)u 6.1G(C.1o,"1c");7(G=="4g"||G=="2s")G=6.V.1g?"3X":"2s";7(!53&&C.1o[G])K=C.1o[G];I 7(12.42&&12.42.4V){7(G=="2s"||G=="3X")G="4g";G=G.1S(/([A-Z])/g,"-$1").4l();v N=12.42.4V(C,14);7(N)K=N.54(G);I 7(G=="1h")K="1V";I 6.4c(C,{1h:"2z"},q(){v c=12.42.4V(l,"");K=c&&c.54(G)||""})}I 7(C.4e){v 55=G.1S(/\\-(\\w)/g,q(m,c){u c.3K()});K=C.4e[G]||C.4e[55]}u K},41:q(a){v r=[];6.J(a,q(i,1z){7(!1z)u;7(1z.1l==3J)1z=1z.6C();7(1D 1z=="20"){v s=6.32(1z),22=12.56("22"),2h=[];v 2H=!s.17("<1t")&&[1,"<40>","</40>"]||(!s.17("<6D")||!s.17("<1X")||!s.17("<6E"))&&[1,"<1N>","</1N>"]||!s.17("<3m")&&[2,"<1N><1X>","</1X></1N>"]||(!s.17("<6F")||!s.17("<6G"))&&[3,"<1N><1X><3m>","</3m></1X></1N>"]||[0,"",""];22.2G=2H[1]+s+2H[2];1Y(2H[0]--)22=22.1a;7(6.V.1g){7(!s.17("<1N")&&s.17("<1X")<0)2h=22.1a&&22.1a.3b;I 7(2H[1]=="<1N>"&&s.17("<1X")<0)2h=22.3b;P(v n=2h.H-1;n>=0;--n)7(6.1e(2h[n],"1X")&&!2h[n].3b.H)2h[n].Y.36(2h[n])}1z=22.3b}7(1z.H===0&&!6.1e(1z,"3w"))u;7(1z[0]==R||6.1e(1z,"3w"))r.1m(1z);I r=6.2m(r,1z)});u r},1G:q(C,W,O){v 2l=6.4C(C)?{}:{"P":"6J","6L":"18","4g":6.V.1g?"3X":"2s",2s:6.V.1g?"3X":"2s",2G:"2G",18:"18",O:"O",2U:"2U",2W:"2W",88:"6N",2R:"2R"};7(W=="1c"&&6.V.1g&&O!=R){C.58=1;u C.1C=C.1C.1S(/4h\\([^\\)]*\\)/6O,"")+(O==1?"":"4h(1c="+O*6c+")")}I 7(W=="1c"&&6.V.1g)u C.1C?4S(C.1C.6P(/4h\\(1c=(.*)\\)/)[1])/6c:1;7(W=="1c"&&6.V.3h&&O==1)O=0.6R;7(2l[W]){7(O!=R)C[2l[W]]=O;u C[2l[W]]}I 7(O==R&&6.V.1g&&6.1e(C,"3w")&&(W=="80"||W=="7Z"))u C.6T(W).6u;I 7(C.60){7(O!=R)C.6V(W,O);7(6.V.1g&&/5E|3f/.1j(W)&&!6.4C(C))u C.33(W,2);u C.33(W)}I{W=W.1S(/-([a-z])/6W,q(z,b){u b.3K()});7(O!=R)C[W]=O;u C[W]}},32:q(t){u t.1S(/^\\s+|\\s+$/g,"")},3N:q(a){v r=[];7(a.1l!=2A)P(v i=0,2L=a.H;i<2L;i++)r.1m(a[i]);I r=a.3O(0);u r},3y:q(b,a){P(v i=0,2L=a.H;i<2L;i++)7(a[i]==b)u i;u-1},2m:q(2r,3P){v r=[].3O.3n(2r,0);P(v i=0,5c=3P.H;i<5c;i++)7(6.3y(3P[i],r)==-1)2r.1m(3P[i]);u 2r},2n:q(1O,D,4j){7(1D D=="20")D=1q 4v("a","i","u "+D);v 1f=[];P(v i=0,2u=1O.H;i<2u;i++)7(!4j&&D(1O[i],i)||4j&&!D(1O[i],i))1f.1m(1O[i]);u 1f},2Y:q(1O,D){7(1D D=="20")D=1q 4v("a","u "+D);v 1f=[],r=[];P(v i=0,2u=1O.H;i<2u;i++){v 19=D(1O[i],i);7(19!==14&&19!=R){7(19.1l!=2A)19=[19];1f=1f.6Z(19)}}v r=1f.H?[1f[0]]:[];5g:P(v i=1,5f=1f.H;i<5f;i++){P(v j=0;j<i;j++)7(1f[i]==r[j])5F 5g;r.1m(1f[i])}u r}});1q q(){v b=7K.71.4l();6.V={2F:/5D/.1j(b),3e:/3e/.1j(b),1g:/1g/.1j(b)&&!/3e/.1j(b),3h:/3h/.1j(b)&&!/(72|5D)/.1j(b)};6.7G=!6.V.1g||12.74=="75"};6.J({5v:"a.Y",4y:"6.4y(a)",76:"6.29(a,2,\'2c\')",7C:"6.29(a,2,\'5t\')",78:"6.2w(a.Y.1a,a)",79:"6.2w(a.1a)"},q(i,n){6.D[i]=q(a){v K=6.2Y(l,n);7(a&&1D a=="20")K=6.3z(a,K);u l.2j(K)}});6.J({5A:"3s",7b:"5j",2T:"5k",7d:"5u"},q(i,n){6.D[i]=q(){v a=1v;u l.J(q(){P(v j=0,2L=a.H;j<2L;j++)6(a[j])[n](l)})}});6.J({5m:q(23){6.1G(l,23,"");l.7f(23)},7g:q(c){6.18.1K(l,c)},7h:q(c){6.18.2d(l,c)},7j:q(c){6.18[6.18.2Q(l,c)?"2d":"1K"](l,c)},2d:q(a){7(!a||6.1C(a,[l]).r.H)l.Y.36(l)},3u:q(){1Y(l.1a)l.36(l.1a)}},q(i,n){6.D[i]=q(){u l.J(n,1v)}});6.J(["5r","5o","5q","5w"],q(i,n){6.D[n]=q(1P,D){u l.1C(":"+n+"("+1P+")",D)}});6.J(["26","3Q"],q(i,n){6.D[n]=q(h){u h==R?(l.H?6.1n(l[0],n):14):l.1n(n,h.1l==3t?h:h+"4R")}});6.1w({1s:{"":"m[2]==\'*\'||6.1e(a,m[2])","#":"a.33(\'2D\')==m[2]",":":{5o:"i<m[3]-0",5q:"i>m[3]-0",29:"m[3]-0==i",5r:"m[3]-0==i",2r:"i==0",2X:"i==r.H-1",5S:"i%2==0",5T:"i%2","29-3r":"6.29(a.Y.1a,m[3],\'2c\',a)==a","2r-3r":"6.29(a.Y.1a,1,\'2c\')==a","2X-3r":"6.29(a.Y.7m,1,\'5t\')==a","7o-3r":"6.2w(a.Y.1a).H==1",5v:"a.1a",3u:"!a.1a",5w:"6.D.2I.15([a]).17(m[3])>=0",38:\'a.B!="1F"&&6.1n(a,"1h")!="1V"&&6.1n(a,"4m")!="1F"\',1F:\'a.B=="1F"||6.1n(a,"1h")=="1V"||6.1n(a,"4m")=="1F"\',7u:"!a.2U",2U:"a.2U",2W:"a.2W",2R:"a.2R||6.1G(a,\'2R\')",2I:"a.B==\'2I\'",4i:"a.B==\'4i\'",5y:"a.B==\'5y\'",4F:"a.B==\'4F\'",5z:"a.B==\'5z\'",4Q:"a.B==\'4Q\'",5a:"a.B==\'5a\'",5B:"a.B==\'5B\'",3x:\'a.B=="3x"||6.1e(a,"3x")\',5C:"/5C|40|7z|3x/i.1j(a.1e)"},".":"6.18.2Q(a,m[2])","@":{"=":"z==m[4]","!=":"z!=m[4]","^=":"z&&!z.17(m[4])","$=":"z&&z.2S(z.H - m[4].H,m[4].H)==m[4]","*=":"z&&z.17(m[4])>=0","":"z",4t:q(m){u["",m[1],m[3],m[2],m[5]]},5Q:"z=a[m[3]];7(!z||/5E|3f/.1j(m[3]))z=6.1G(a,m[3]);"},"[":"6.2p(m[2],a).H"},5N:[/^\\[ *(@)([a-2o-3C-]*) *([!*$^=]*) *(\'?"?)(.*?)\\4 *\\]/i,/^(\\[)\\s*(.*?(\\[.*?\\])?[^[]*?)\\s*\\]/,/^(:)([a-2o-3C-]*)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/i,/^([:.#]*)([a-2o-3C*-]*)/i],1R:[/^(\\/?\\.\\.)/,"a.Y",/^(>|\\/)/,"6.2w(a.1a)",/^(\\+)/,"6.29(a,2,\'2c\')",/^(~)/,q(a){v s=6.2w(a.Y.1a);u s.3O(6.3y(a,s)+1)}],3z:q(1s,1O,2e){v 1L,N=[];1Y(1s&&1s!=1L){1L=1s;v f=6.1C(1s,1O,2e);1s=f.t.1S(/^\\s*,\\s*/,"");N=2e?1O=f.r:6.2m(N,f.r)}u N},2p:q(t,1y){7(1D t!="20")u[t];7(1y&&!1y.1W)1y=14;1y=1y||12;7(!t.17("//")){1y=1y.4G;t=t.2S(2,t.H)}I 7(!t.17("/")){1y=1y.4G;t=t.2S(1,t.H);7(t.17("/")>=1)t=t.2S(t.17("/"),t.H)}v K=[1y],2a=[],2X=14;1Y(t&&2X!=t){v r=[];2X=t;t=6.32(t).1S(/^\\/\\//i,"");v 3B=11;v 1H=/^[\\/>]\\s*([a-2o-9*-]+)/i;v m=1H.2M(t);7(m){6.J(K,q(){P(v c=l.1a;c;c=c.2c)7(c.1W==1&&(6.1e(c,m[1])||m[1]=="*"))r.1m(c)});K=r;t=t.1S(1H,"");7(t.17(" ")==0)5F;3B=U}I{P(v i=0;i<6.1R.H;i+=2){v 1H=6.1R[i];v m=1H.2M(t);7(m){r=K=6.2Y(K,6.1p(6.1R[i+1])?6.1R[i+1]:q(a){u 3l(6.1R[i+1])});t=6.32(t.1S(1H,""));3B=U;3M}}}7(t&&!3B){7(!t.17(",")){7(K[0]==1y)K.4K();6.2m(2a,K);r=K=[1y];t=" "+t.2S(1,t.H)}I{v 31=/^([a-2o-3C-]+)(#)([a-2o-9\\\\*30-]*)/i;v m=31.2M(t);7(m){m=[0,m[2],m[3],m[1]]}I{31=/^([#.]?)([a-2o-9\\\\*30-]*)/i;m=31.2M(t)}7(m[1]=="#"&&K[K.H-1].4X){v 2i=K[K.H-1].4X(m[2]);7(6.V.1g&&2i&&2i.2D!=m[2])2i=6(\'[@2D="\'+m[2]+\'"]\',K[K.H-1])[0];K=r=2i&&(!m[3]||6.1e(2i,m[3]))?[2i]:[]}I{7(m[1]==".")v 4q=1q 4u("(^|\\\\s)"+m[2]+"(\\\\s|$)");6.J(K,q(){v 3E=m[1]!=""||m[0]==""?"*":m[2];7(6.1e(l,"7I")&&3E=="*")3E="3c";6.2m(r,m[1]!=""&&K.H!=1?6.4w(l,[],m[1],m[2],4q):l.5K(3E))});7(m[1]=="."&&K.H==1)r=6.2n(r,q(e){u 4q.1j(e.18)});7(m[1]=="#"&&K.H==1){v 5L=r;r=[];6.J(5L,q(){7(l.33("2D")==m[2]){r=[l];u 11}})}K=r}t=t.1S(31,"")}}7(t){v 19=6.1C(t,r);K=r=19.r;t=6.32(19.t)}}7(K&&K[0]==1y)K.4K();6.2m(2a,K);u 2a},1C:q(t,r,2e){1Y(t&&/^[a-z[({<*:.#]/i.1j(t)){v p=6.5N,m;6.J(p,q(i,1H){m=1H.2M(t);7(m){t=t.7L(m[0].H);7(6.1s[m[1]].4t)m=6.1s[m[1]].4t(m);u 11}});7(m[1]==":"&&m[2]=="2e")r=6.1C(m[3],r,U).r;I 7(m[1]=="."){v 1H=1q 4u("(^|\\\\s)"+m[2]+"(\\\\s|$)");r=6.2n(r,q(e){u 1H.1j(e.18||"")},2e)}I{v f=6.1s[m[1]];7(1D f!="20")f=6.1s[m[1]][m[2]];3l("f = q(a,i){"+(6.1s[m[1]].5Q||"")+"u "+f+"}");r=6.2n(r,f,2e)}}u{r:r,t:t}},4w:q(o,r,1R,W,1H){P(v s=o.1a;s;s=s.2c)7(s.1W==1){v 1K=U;7(1R==".")1K=s.18&&1H.1j(s.18);I 7(1R=="#")1K=s.33("2D")==W;7(1K)r.1m(s);7(1R=="#"&&r.H)3M;7(s.1a)6.4w(s,r,1R,W,1H)}u r},4y:q(C){v 4z=[];v N=C.Y;1Y(N&&N!=12){4z.1m(N);N=N.Y}u 4z},29:q(N,1f,3Y,C){1f=1f||1;v 1P=0;P(;N;N=N[3Y]){7(N.1W==1)1P++;7(1P==1f||1f=="5S"&&1P%2==0&&1P>1&&N==C||1f=="5T"&&1P%2==1&&N==C)u N}},2w:q(n,C){v r=[];P(;n;n=n.2c){7(n.1W==1&&(!C||n!=C))r.1m(n)}u r}});6.F={1K:q(S,B,1k,E){7(6.V.1g&&S.45!=R)S=1u;7(E)1k.E=E;7(!1k.2y)1k.2y=l.2y++;7(!S.$1E)S.$1E={};v 34=S.$1E[B];7(!34){34=S.$1E[B]={};7(S["35"+B])34[0]=S["35"+B]}34[1k.2y]=1k;S["35"+B]=l.5Y;7(!l.1i[B])l.1i[B]=[];l.1i[B].1m(S)},2y:1,1i:{},2d:q(S,B,1k){7(S.$1E){v i,j,k;7(B&&B.B){1k=B.1k;B=B.B}7(B&&S.$1E[B])7(1k)5V S.$1E[B][1k.2y];I P(i 1B S.$1E[B])5V S.$1E[B][i];I P(j 1B S.$1E)l.2d(S,j);P(k 1B S.$1E[B])7(k){k=U;3M}7(!k)S["35"+B]=14}},1Q:q(B,E,S){E=6.3N(E||[]);7(!S)6.J(l.1i[B]||[],q(){6.F.1Q(B,E,l)});I{v 1k=S["35"+B],19,D=6.1p(S[B]);7(1k){E.61(l.2l({B:B,1T:S}));7((19=1k.15(S,E))!==11)l.4E=U}7(D&&19!==11)S[B]();l.4E=11}},5Y:q(F){7(1D 6=="R"||6.F.4E)u;F=6.F.2l(F||1u.F||{});v 3R;v c=l.$1E[F.B];v 1A=[].3O.3n(1v,1);1A.61(F);P(v j 1B c){1A[0].1k=c[j];1A[0].E=c[j].E;7(c[j].15(l,1A)===11){F.2q();F.2E();3R=11}}7(6.V.1g)F.1T=F.2q=F.2E=F.1k=F.E=14;u 3R},2l:q(F){7(!F.1T&&F.62)F.1T=F.62;7(F.64==R&&F.66!=R){v e=12.4G,b=12.63;F.64=F.66+(e.67||b.67);F.7W=F.7X+(e.6b||b.6b)}7(6.V.2F&&F.1T.1W==3){v 2V=F;F=6.1w({},2V);F.1T=2V.1T.Y;F.2q=q(){u 2V.2q()};F.2E=q(){u 2V.2E()}}7(!F.2q)F.2q=q(){l.3R=11};7(!F.2E)F.2E=q(){l.7Y=U};u F}};6.D.1w({3T:q(B,E,D){u l.J(q(){6.F.1K(l,B,D||E,E)})},6s:q(B,E,D){u l.J(q(){6.F.1K(l,B,q(F){6(l).6f(F);u(D||E).15(l,1v)},E)})},6f:q(B,D){u l.J(q(){6.F.2d(l,B,D)})},1Q:q(B,E){u l.J(q(){6.F.1Q(B,E,l)})},3V:q(){v a=1v;u l.6i(q(e){l.4L=l.4L==0?1:0;e.2q();u a[l.4L].15(l,[e])||11})},81:q(f,g){q 4N(e){v p=(e.B=="3Z"?e.82:e.83)||e.84;1Y(p&&p!=l)2B{p=p.Y}2J(e){p=l};7(p==l)u 11;u(e.B=="3Z"?f:g).15(l,[e])}u l.3Z(4N).6j(4N)},27:q(f){7(6.3U)f.15(12,[6]);I{6.3a.1m(q(){u f.15(l,[6])})}u l}});6.1w({3U:11,3a:[],27:q(){7(!6.3U){6.3U=U;7(6.3a){6.J(6.3a,q(){l.15(12)});6.3a=14}7(6.V.3h||6.V.3e)12.85("6m",6.27,11)}}});1q q(){6.J(("86,87,2P,89,8b,51,6i,8c,"+"8d,8e,8f,3Z,6j,8h,40,"+"4Q,8i,8j,8k,2x").3o(","),q(i,o){6.D[o]=q(f){u f?l.3T(o,f):l.1Q(o)}});7(6.V.3h||6.V.3e)12.8l("6m",6.27,11);I 7(6.V.1g){12.8m("<8o"+"8p 2D=6o 8r=U "+"3f=//:><\\/2f>");v 2f=12.4X("6o");7(2f)2f.37=q(){7(l.3D!="1Z")u;l.Y.36(l);6.27()};2f=14}I 7(6.V.2F)6.4Z=45(q(){7(12.3D=="8v"||12.3D=="1Z"){4o(6.4Z);6.4Z=14;6.27()}},10);6.F.1K(1u,"2P",6.27)};7(6.V.1g)6(1u).6s("51",q(){v 1i=6.F.1i;P(v B 1B 1i){v 49=1i[B],i=49.H;7(i&&B!=\'51\')6v 6.F.2d(49[i-1],B);1Y(--i)}});6.D.1w({6A:q(T,21,L){l.2P(T,21,L,1)},2P:q(T,21,L,1U){7(6.1p(T))u l.3T("2P",T);L=L||q(){};v B="5e";7(21)7(6.1p(21)){L=21;21=14}I{21=6.3c(21);B="65"}v 4d=l;6.3v({T:T,B:B,E:21,1U:1U,1Z:q(2K,16){7(16=="2O"||!1U&&16=="5M")4d.1G("2G",2K.3G).4U().J(L,[2K.3G,16,2K]);I L.15(4d,[2K.3G,16,2K])}});u l},6B:q(){u 6.3c(l)},4U:q(){u l.2p("2f").J(q(){7(l.3f)6.59(l.3f);I 6.50(l.2I||l.6H||l.2G||"")}).4f()}});7(!1u.3p)3p=q(){u 1q 6I("6K.6M")};6.J("5n,5R,5P,5W,5O,5I".3o(","),q(i,o){6.D[o]=q(f){u l.3T(o,f)}});6.1w({2b:q(T,E,L,B,1U){7(6.1p(E)){L=E;E=14}u 6.3v({T:T,E:E,2O:L,4s:B,1U:1U})},6Q:q(T,E,L,B){u 6.2b(T,E,L,B,1)},59:q(T,L){u 6.2b(T,14,L,"2f")},6S:q(T,E,L){u 6.2b(T,E,L,"6l")},6U:q(T,E,L,B){7(6.1p(E)){L=E;E={}}u 6.3v({B:"65",T:T,E:E,2O:L,4s:B})},6X:q(28){6.3q.28=28},6Y:q(5d){6.1w(6.3q,5d)},3q:{1i:U,B:"5e",28:0,5s:"70/x-73-3w-77",5i:U,48:U,E:14},3S:{},3v:q(s){s=6.1w({},6.3q,s);7(s.E){7(s.5i&&1D s.E!="20")s.E=6.3c(s.E);7(s.B.4l()=="2b"){s.T+=((s.T.17("?")>-1)?"&":"?")+s.E;s.E=14}}7(s.1i&&!6.4D++)6.F.1Q("5n");v 4x=11;v M=1q 3p();M.7i(s.B,s.T,s.48);7(s.E)M.3A("7k-7l",s.5s);7(s.1U)M.3A("7n-4J-7p",6.3S[s.T]||"7r, 7s 7v 7w 4n:4n:4n 7y");M.3A("X-7A-7B","3p");7(M.7D)M.3A("7E","7F");7(s.5H)s.5H(M);7(s.1i)6.F.1Q("5I",[M,s]);v 37=q(4r){7(M&&(M.3D==4||4r=="28")){4x=U;7(3H){4o(3H);3H=14}v 16;2B{16=6.5Z(M)&&4r!="28"?s.1U&&6.68(M,s.T)?"5M":"2O":"2x";7(16!="2x"){v 3F;2B{3F=M.4O("6a-4J")}2J(e){}7(s.1U&&3F)6.3S[s.T]=3F;v E=6.6h(M,s.4s);7(s.2O)s.2O(E,16);7(s.1i)6.F.1Q("5O",[M,s])}I 6.3L(s,M,16)}2J(e){16="2x";6.3L(s,M,16,e)}7(s.1i)6.F.1Q("5P",[M,s]);7(s.1i&&!--6.4D)6.F.1Q("5R");7(s.1Z)s.1Z(M,16);7(s.48)M=14}};v 3H=45(37,13);7(s.28>0)57(q(){7(M){M.7M();7(!4x)37("28")}},s.28);2B{M.7O(s.E)}2J(e){6.3L(s,M,14,e)}7(!s.48)37();u M},3L:q(s,M,16,e){7(s.2x)s.2x(M,16,e);7(s.1i)6.F.1Q("5W",[M,s,e])},4D:0,5Z:q(r){2B{u!r.16&&7T.7U=="4F:"||(r.16>=5X&&r.16<7V)||r.16==6d||6.V.2F&&r.16==R}2J(e){}u 11},68:q(M,T){2B{v 6e=M.4O("6a-4J");u M.16==6d||6e==6.3S[T]||6.V.2F&&M.16==R}2J(e){}u 11},6h:q(r,B){v 4P=r.4O("8a-B");v E=!B&&4P&&4P.17("M")>=0;E=B=="M"||E?r.8g:r.3G;7(B=="2f")6.50(E);7(B=="6l")3l("E = "+E);7(B=="4T")6("<22>").4T(E).4U();u E},3c:q(a){v s=[];7(a.1l==2A||a.3W)6.J(a,q(){s.1m(2N(l.W)+"="+2N(l.O))});I P(v j 1B a)7(a[j]&&a[j].1l==2A)6.J(a[j],q(){s.1m(2N(j)+"="+2N(l))});I s.1m(2N(j)+"="+2N(a[j]));u s.6r("&")},50:q(E){7(1u.52)1u.52(E);I 7(6.V.2F)1u.57(E,0);I 3l.3n(1u,E)}});6.D.1w({1M:q(Q,L){v 1F=l.1C(":1F");Q?1F.25({26:"1M",3Q:"1M",1c:"1M"},Q,L):1F.J(q(){l.1o.1h=l.2C?l.2C:"";7(6.1n(l,"1h")=="1V")l.1o.1h="2z"});u l},1I:q(Q,L){v 38=l.1C(":38");Q?38.25({26:"1I",3Q:"1I",1c:"1I"},Q,L):38.J(q(){l.2C=l.2C||6.1n(l,"1h");7(l.2C=="1V")l.2C="2z";l.1o.1h="1V"});u l},5h:6.D.3V,3V:q(D,4H){v 1A=1v;u 6.1p(D)&&6.1p(4H)?l.5h(D,4H):l.J(q(){6(l)[6(l).4k(":1F")?"1M":"1I"].15(6(l),1A)})},7a:q(Q,L){u l.25({26:"1M"},Q,L)},7c:q(Q,L){u l.25({26:"1I"},Q,L)},7e:q(Q,L){u l.J(q(){v 5l=6(l).4k(":1F")?"1M":"1I";6(l).25({26:5l},Q,L)})},7q:q(Q,L){u l.25({1c:"1M"},Q,L)},7t:q(Q,L){u l.25({1c:"1I"},Q,L)},7x:q(Q,43,L){u l.25({1c:43},Q,L)},25:q(G,Q,1r,L){u l.1J(q(){l.2t=6.1w({},G);v 1t=6.Q(Q,1r,L);P(v p 1B G){v e=1q 6.39(l,1t,p);7(G[p].1l==3J)e.2v(e.N(),G[p]);I e[G[p]](G)}})},1J:q(B,D){7(!D){D=B;B="39"}u l.J(q(){7(!l.1J)l.1J={};7(!l.1J[B])l.1J[B]=[];l.1J[B].1m(D);7(l.1J[B].H==1)D.15(l)})}});6.1w({Q:q(Q,1r,D){v 1t=Q&&Q.1l==7J?Q:{1Z:D||!D&&1r||6.1p(Q)&&Q,24:Q,1r:D&&1r||1r&&1r.1l!=4v&&1r};1t.24=(1t.24&&1t.24.1l==3J?1t.24:{7P:7Q,7R:5X}[1t.24])||7S;1t.1L=1t.1Z;1t.1Z=q(){6.69(l,"39");7(6.1p(1t.1L))1t.1L.15(l)};u 1t},1r:{},1J:{},69:q(C,B){B=B||"39";7(C.1J&&C.1J[B]){C.1J[B].4K();v f=C.1J[B][0];7(f)f.15(C)}},39:q(C,1d,G){v z=l;v y=C.1o;v 4B=6.1n(C,"1h");y.5U="1F";z.a=q(){7(1d.47)1d.47.15(C,[z.2k]);7(G=="1c")6.1G(y,"1c",z.2k);I 7(6k(z.2k))y[G]=6k(z.2k)+"4R";y.1h="2z"};z.6t=q(){u 4S(6.1n(C,G))};z.N=q(){v r=4S(6.3g(C,G));u r&&r>-8w?r:z.6t()};z.2v=q(4b,43){z.4I=(1q 5p()).5x();z.2k=4b;z.a();z.4p=45(q(){z.47(4b,43)},13)};z.1M=q(){7(!C.1x)C.1x={};C.1x[G]=l.N();1d.1M=U;z.2v(0,C.1x[G]);7(G!="1c")y[G]="5b"};z.1I=q(){7(!C.1x)C.1x={};C.1x[G]=l.N();1d.1I=U;z.2v(C.1x[G],0)};z.3V=q(){7(!C.1x)C.1x={};C.1x[G]=l.N();7(4B=="1V"){1d.1M=U;7(G!="1c")y[G]="5b";z.2v(0,C.1x[G])}I{1d.1I=U;z.2v(C.1x[G],0)}};z.47=q(2Z,46){v t=(1q 5p()).5x();7(t>1d.24+z.4I){4o(z.4p);z.4p=14;z.2k=46;z.a();7(C.2t)C.2t[G]=U;v 2a=U;P(v i 1B C.2t)7(C.2t[i]!==U)2a=11;7(2a){y.5U="";y.1h=4B;7(6.1n(C,"1h")=="1V")y.1h="2z";7(1d.1I)y.1h="1V";7(1d.1I||1d.1M)P(v p 1B C.2t)7(p=="1c")6.1G(y,p,C.1x[p]);I y[p]=""}7(2a&&6.1p(1d.1Z))1d.1Z.15(C)}I{v n=t-l.4I;v p=n/1d.24;z.2k=1d.1r&&6.1r[1d.1r]?6.1r[1d.1r](p,n,2Z,(46-2Z),1d.24):((-6g.7N(p*6g.8J)/2)+0.5)*(46-2Z)+2Z;z.a()}}}})}',62,544,'||||||jQuery|if||||||||||||||this|||||function||||return|var||||||type|elem|fn|data|event|prop|length|else|each|ret|callback|xml|cur|value|for|speed|undefined|element|url|true|browser|name||parentNode|||false|document||null|apply|status|indexOf|className|val|firstChild|obj|opacity|options|nodeName|result|msie|display|global|test|handler|constructor|push|css|style|isFunction|new|easing|expr|opt|window|arguments|extend|orig|context|arg|args|in|filter|typeof|events|hidden|attr|re|hide|queue|add|old|show|table|elems|num|trigger|token|replace|target|ifModified|none|nodeType|tbody|while|complete|string|params|div|key|duration|animate|height|ready|timeout|nth|done|get|nextSibling|remove|not|script|index|tb|oid|pushStack|now|fix|merge|grep|z0|find|preventDefault|first|cssFloat|curAnim|el|custom|sibling|error|guid|block|Array|try|oldblock|id|stopPropagation|safari|innerHTML|wrap|text|catch|res|al|exec|encodeURIComponent|success|load|has|selected|substr|insertBefore|disabled|originalEvent|checked|last|map|firstNum|_|re2|trim|getAttribute|handlers|on|removeChild|onreadystatechange|visible|fx|readyList|childNodes|param|domManip|opera|src|curCSS|mozilla|parPos|cloneNode|position|eval|tr|call|split|XMLHttpRequest|ajaxSettings|child|append|String|empty|ajax|form|button|inArray|multiFilter|setRequestHeader|foundToken|9_|readyState|tag|modRes|responseText|ival|oWidth|Number|toUpperCase|handleError|break|makeArray|slice|second|width|returnValue|lastModified|bind|isReady|toggle|jquery|styleFloat|dir|mouseover|select|clean|defaultView|to|oHeight|setInterval|lastNum|step|async|els|static|from|swap|self|currentStyle|end|float|alpha|radio|inv|is|toLowerCase|visibility|00|clearInterval|timer|rec|isTimeout|dataType|_resort|RegExp|Function|getAll|requestDone|parents|matched|appendChild|oldDisplay|isXMLDoc|active|triggered|file|documentElement|fn2|startTime|Modified|shift|lastToggle|deep|handleHover|getResponseHeader|ct|submit|px|parseFloat|html|evalScripts|getComputedStyle|pos|getElementById|clone|safariTimer|globalEval|unload|execScript|force|getPropertyValue|newProp|createElement|setTimeout|zoom|getScript|image|1px|sl|settings|GET|rl|check|_toggle|processData|prepend|before|state|removeAttr|ajaxStart|lt|Date|gt|eq|contentType|previousSibling|after|parent|contains|getTime|checkbox|password|appendTo|reset|input|webkit|href|continue|exclude|beforeSend|ajaxSend|ownerDocument|getElementsByTagName|tmp|notmodified|parse|ajaxSuccess|ajaxComplete|_prefix|ajaxStop|even|odd|overflow|delete|ajaxError|200|handle|httpSuccess|tagName|unshift|srcElement|body|pageX|POST|clientX|scrollLeft|httpNotModified|dequeue|Last|scrollTop|100|304|xmlRes|unbind|Math|httpData|click|mouseout|parseInt|json|DOMContentLoaded|prevObject|__ie_init|setArray|ol|join|one|max|nodeValue|do|left|relative|clientHeight|clientWidth|loadIfModified|serialize|toString|thead|tfoot|td|th|textContent|ActiveXObject|htmlFor|Microsoft|class|XMLHTTP|readOnly|gi|match|getIfModified|9999|getJSON|getAttributeNode|post|setAttribute|ig|ajaxTimeout|ajaxSetup|concat|application|userAgent|compatible|www|compatMode|CSS1Compat|next|urlencoded|siblings|children|slideDown|prependTo|slideUp|insertAfter|slideToggle|removeAttribute|addClass|removeClass|open|toggleClass|Content|Type|lastChild|If|only|Since|fadeIn|Thu|01|fadeOut|enabled|Jan|1970|fadeTo|GMT|textarea|Requested|With|prev|overrideMimeType|Connection|close|boxModel|absolute|object|Object|navigator|substring|abort|cos|send|slow|600|fast|400|location|protocol|300|pageY|clientY|cancelBubble|method|action|hover|fromElement|toElement|relatedTarget|removeEventListener|blur|focus|readonly|resize|content|scroll|dblclick|mousedown|mouseup|mousemove|responseXML|change|keydown|keypress|keyup|addEventListener|write|prototype|scr|ipt|createTextNode|defer|FORM|reverse|noConflict|loaded|10000|font|weight|line|Top|Bottom|Right|Left|padding|border|Width|offsetHeight|offsetWidth|PI|size|right'.split('|'),0,{}))

Added: z3c.website/trunk/src/z3c/website/skin/template.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/template.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/template.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      i18n:domain="z3c.website">
+<head>
+<title>z3c.org</title>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta http-equiv="cache-control" content="no-cache" />
+<meta http-equiv="pragma" content="no-cache" />
+<script type="text/javascript"
+         tal:define="contextURL string:'${request/URL/-1}/';
+                     viewURL string:'${request/URL}/'"
+         tal:content="string:
+  var contextURL=${contextURL};
+  var viewURL=${viewURL}">
+</script>
+<script type="text/javascript"
+        tal:replace="structure provider:IJavaScript"> </script>
+<script type="text/javascript" src="jquery.js"
+        tal:attributes="src context/++resource++jquery.js"> </script>
+<script type="text/javascript" src="interface.js"
+        tal:attributes="src context/++resource++interface.js"> </script>
+<script type="text/javascript" src="demo.js"
+        tal:attributes="src context/++resource++demo.js"> </script>
+<link type="text/css" tal:replace="structure provider:ICSS" />
+<link type="text/css" rel="stylesheet" href="demo.css" media="all"
+      tal:attributes="href context/++resource++demo.css" />
+<link rel="icon" type="image/png"
+      tal:attributes="href context/++resource++favicon.png" />
+</head>
+<body tal:define="siteURL context/@@siteURL">
+<div id="layoutWrapper">
+  <div id="layoutContainer">
+    <div id="headerContainer">
+      <div id="topLine">
+      </div>
+      <img id="betaLogo" src="beta.gif" width="83" height="83" alt="logo"
+             tal:attributes="src context/++resource++img/beta.gif" />
+      <a href="#"
+		   tal:attributes="href string:${siteURL}/index.html">
+      <img id="logo" src="logo.gif" width="251" height="103" alt="logo"
+             tal:attributes="src context/++resource++img/logo.gif" />
+      </a>
+      <div class="dock" id="dock">
+        <div class="dock-container">
+          <a class="dock-item" href="#"
+		     tal:attributes="href string:${siteURL}/index.html"
+          ><img src="info.gif" alt="info"
+	            tal:attributes="src context/++resource++fisheye/info.gif" />
+          <span>Info</span>
+          </a>
+          <a class="dock-item" href="#"
+		     tal:attributes="href string:${siteURL}/samples/index.html"
+          ><img src="samples.gif" alt="samples"
+	            tal:attributes="src context/++resource++fisheye/samples.gif" />
+          <span>Samples</span>
+          </a>
+          <a class="dock-item" href="#"
+		     tal:attributes="href string:${siteURL}/tutorials/index.html"
+          ><img src="tutorials.gif" alt="tutorials"
+	            tal:attributes="src context/++resource++fisheye/tutorials.gif" />
+          <span>Tutorials</span>
+          </a>
+          <a class="dock-item" href="#"
+		     tal:attributes="href string:${siteURL}/download/index.html"
+          ><img src="download.gif" alt="download"
+	            tal:attributes="src context/++resource++fisheye/download.gif" />
+          <span>Download</span>
+          </a>
+          <a class="dock-item" href="#"
+		     tal:attributes="href string:${siteURL}/contact/index.html"
+          ><img src="contact.gif" alt="contact"
+	            tal:attributes="src context/++resource++fisheye/contact.gif" />
+          <span>Contact</span>
+          </a>
+        </div>
+      </div>
+    </div>
+    <div id="mainContainer">
+      <div id="contentContainer">
+        <div id="content">
+          <tal:block replace="structure provider:pagelet">
+            content
+          </tal:block>
+        </div>
+      </div>
+      <div id="naviContainer">
+        <tal:block content="structure provider:IToolManager">
+          navigation
+        </tal:block>
+      </div>
+      <div id="footerContainer">
+        <div class="footer">
+          &copy; copyright 2007 by the Zope community and it's members. --- 
+		  <a href="http://www.zope.org" target="_blank">offizial Zope.org Website</a> --- 
+		  <a href="http://www.MouseRunner.com" target="_blank">icons from www.mouserunner.com</a>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+</body>
+</html>

Added: z3c.website/trunk/src/z3c/website/skin/widget.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/skin/widget.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/skin/widget.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,34 @@
+<metal:block define-macro="widget_rows">
+<div class="row" tal:repeat="widget view/widgets">
+  <metal:block define-macro="widget_row" tal:define="hint widget/hint">
+  <!-- label -->
+  <div class="label">
+    <label tal:condition="python:hint"
+                tal:attributes="for widget/name">
+      <span i18n:translate=""
+                tal:content="widget/label">label</span
+         >
+      <span class="required" tal:condition="widget/required">*</span>
+    </label>
+  </div>
+  <!-- widget -->
+  <div class="form-fields-help"
+           i18n:translate=""
+           tal:content="hint"
+           tal:condition="hint"
+           tal:attributes="id string:field-help-for-${widget/name}"
+           onclick="this.style.visibility='hidden';"
+           style="visibility: hidden; position: absolute;"
+           >
+    Title of this content object.
+  </div>
+  <div class="widget" tal:content="structure widget">
+    <input type="text" size="24" />
+  </div>
+  <div class="error"
+           tal:condition="widget/error">
+    <span tal:replace="structure widget/error">error</span>
+  </div>
+  </metal:block>
+</div>
+</metal:block>

Added: z3c.website/trunk/src/z3c/website/tool/__init__.py
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/__init__.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/__init__.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# Copyright (c) 2007 Projekt01 GmbH and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Resource License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: app.py 44 2007-02-21 09:43:39Z roger.ineichen $
+"""
+__docformat__ = "reStructuredText"
+
+from zope.viewlet.interfaces import IViewletManager
+
+
+class IToolManager(IViewletManager):
+    """Manager for tool viewlets."""

Added: z3c.website/trunk/src/z3c/website/tool/adding.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/adding.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/adding.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,18 @@
+<div class="naviBoxContainer">
+  <div class="naviBox">
+    <div class="naviBoxHeader">
+      <img src="adding.gif" alt="adding" height="32" width="32"
+	            tal:attributes="src context/++resource++img/adding.gif" />
+      <tal:block i18n:translate="">Adding</tal:block>
+    </div>
+    <div class="naviBoxBody">
+    <div tal:repeat="sample view/samples">
+	<a href=""
+	   tal:attributes="href sample/url"
+	   tal:content="sample/title">title</a>
+	</div>
+    </div>
+  </div>
+  <div class="boxSpacer">
+  </div>
+</div>

Added: z3c.website/trunk/src/z3c/website/tool/adding.py
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/adding.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/adding.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,45 @@
+##############################################################################
+#
+# Copyright (c) 2007 Projekt01 GmbH and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Resource License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: app.py 44 2007-02-21 09:43:39Z roger.ineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.traversing.browser import absoluteURL
+from zope.app.component import hooks
+from zope.viewlet import viewlet
+
+import z3c.website.layer
+
+
+class AddingTool(viewlet.ViewletBase):
+    """Adding tool."""
+
+    viewNames = {'REST Editor':'addRestEditor.html.html'}
+
+    def samples(self):
+        res = []
+        append = res.append
+        try:
+            baseURL = absoluteURL(self.context, self.request)
+            for title, name in self.viewNames.items():
+                info = {}
+                info['url'] = baseURL+'/'+name
+                info['title'] = title
+                append(info)
+        except KeyError:
+            # site does not exist right now
+            pass
+        return res

Added: z3c.website/trunk/src/z3c/website/tool/configure.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/configure.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/configure.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,58 @@
+<configure
+    xmlns:zope="http://namespaces.zope.org/zope"
+    xmlns="http://namespaces.zope.org/browser"
+    i18n_domain="z3c.website">
+
+  <viewletManager
+      name="IToolManager"
+      provides="z3c.website.tool.IToolManager"
+      class="z3c.viewlet.manager.WeightOrderedViewletManager"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <viewlet
+      name="Content"
+      for="*"
+      class=".content.Content"
+      manager="z3c.website.tool.IToolManager"
+      template="content.pt"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="zope.Public"
+      weight="1"
+      />
+
+  <viewlet
+      name="Search"
+      for="*"
+      class=".search.SearchTool"
+      manager="z3c.website.tool.IToolManager"
+      template="search.pt"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageContent"
+      weight="2"
+      />
+
+  <viewlet
+      name="Adding"
+      for="*"
+      class=".adding.AddingTool"
+      manager="z3c.website.tool.IToolManager"
+      template="adding.pt"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageContent"
+      weight="3"
+      />
+
+  <viewlet
+      name="Edit"
+      for="*"
+      class=".edit.EditTool"
+      manager="z3c.website.tool.IToolManager"
+      template="edit.pt"
+      layer="z3c.website.layer.IWebSiteBrowserLayer"
+      permission="z3c.website.ManageContent"
+      weight="4"
+      />
+
+</configure>

Added: z3c.website/trunk/src/z3c/website/tool/content.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/content.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/content.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,18 @@
+<div class="naviBoxContainer">
+  <div class="naviBox">
+    <div class="naviBoxHeader">
+      <img src="content.gif" alt="navigation" height="32" width="32"
+	            tal:attributes="src context/++resource++img/content.gif" />
+      <tal:block i18n:translate="">Content</tal:block>
+    </div>
+    <div class="naviBoxBody">
+    <div tal:repeat="sample view/samples">
+	<a href=""
+	   tal:attributes="href sample/url"
+	   tal:content="sample/title">title</a>
+	</div>
+    </div>
+  </div>
+  <div class="boxSpacer">
+  </div>
+</div>

Added: z3c.website/trunk/src/z3c/website/tool/content.py
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/content.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/content.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,47 @@
+##############################################################################
+#
+# Copyright (c) 2007 Projekt01 GmbH and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Resource License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: app.py 44 2007-02-21 09:43:39Z roger.ineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.traversing.browser import absoluteURL
+from zope.app.component import hooks
+from zope.viewlet import viewlet
+
+import z3c.website.layer
+
+
+class Content(viewlet.ViewletBase):
+    """Content tool."""
+
+    sampleViewNames = ['table.html']
+
+    def samples(self):
+        res = []
+        append = res.append
+        try:
+            site = hooks.getSite()
+            samples = site['samples']
+            baseURL = absoluteURL(samples, self.request)
+            for name in self.sampleViewNames:
+                info = {}
+                info['url'] = baseURL+'/'+name
+                info['title'] = u'undefined'
+                append(info)
+        except KeyError:
+            # site does not exist right now
+            pass
+        return res

Added: z3c.website/trunk/src/z3c/website/tool/edit.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/edit.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/edit.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,18 @@
+<div class="naviBoxContainer">
+  <div class="naviBox">
+    <div class="naviBoxHeader">
+      <img src="edit.gif" alt="edit" height="32" width="32"
+	            tal:attributes="src context/++resource++img/edit.gif" />
+      <tal:block i18n:translate="">Manage</tal:block>
+    </div>
+    <div class="naviBoxBody">
+    <div tal:repeat="sample view/samples">
+	<a href=""
+	   tal:attributes="href sample/url"
+	   tal:content="sample/title">title</a>
+	</div>
+    </div>
+  </div>
+  <div class="boxSpacer">
+  </div>
+</div>

Added: z3c.website/trunk/src/z3c/website/tool/edit.py
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/edit.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/edit.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,47 @@
+##############################################################################
+#
+# Copyright (c) 2007 Projekt01 GmbH and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Resource License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: app.py 44 2007-02-21 09:43:39Z roger.ineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.traversing.browser import absoluteURL
+from zope.app.component import hooks
+from zope.viewlet import viewlet
+
+import z3c.website.layer
+
+
+class EditTool(viewlet.ViewletBase):
+    """Edit tool."""
+
+    viewNames = {'View':'index.html',
+                 'Edit':'edit.html',
+                 'Meta':'meta.html'}
+
+    def samples(self):
+        res = []
+        append = res.append
+        try:
+            baseURL = absoluteURL(self.context, self.request)
+            for title, name in self.viewNames.items():
+                info = {}
+                info['url'] = baseURL+'/'+name
+                info['title'] = title
+                append(info)
+        except KeyError:
+            # site does not exist right now
+            pass
+        return res

Added: z3c.website/trunk/src/z3c/website/tool/search.pt
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/search.pt	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/search.pt	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,20 @@
+<div class="naviBoxContainer">
+  <div class="naviBox">
+    <div class="naviBoxHeader">
+      <img src="search.gif" alt="search" height="32" width="32"
+	            tal:attributes="src context/++resource++img/search.gif" />
+      <tal:block i18n:translate="">Search</tal:block>
+    </div>
+    <div class="naviBoxBody">
+     <form action="#">
+	 <div id="searchForm">
+	 <input type="text" id="liveSearch" />
+	 <input type="image" id="btnSearch" src="" alt="Search button" 
+	        tal:attributes="src context/++resource++img/btnSearch.gif" />
+	 </div>
+	 </form>
+    </div>
+  </div>
+  <div class="boxSpacer">
+  </div>
+</div>

Added: z3c.website/trunk/src/z3c/website/tool/search.py
===================================================================
--- z3c.website/trunk/src/z3c/website/tool/search.py	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/tool/search.py	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1,28 @@
+##############################################################################
+#
+# Copyright (c) 2007 Projekt01 GmbH and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Resource License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id: app.py 44 2007-02-21 09:43:39Z roger.ineichen $
+"""
+__docformat__ = "reStructuredText"
+
+import zope.component
+from zope.traversing.browser import absoluteURL
+from zope.app.component import hooks
+from zope.viewlet import viewlet
+
+import z3c.website.layer
+
+
+class SearchTool(viewlet.ViewletBase):
+    """Search tool."""

Added: z3c.website/trunk/src/z3c/website/z3c.website-configure.zcml
===================================================================
--- z3c.website/trunk/src/z3c/website/z3c.website-configure.zcml	                        (rev 0)
+++ z3c.website/trunk/src/z3c/website/z3c.website-configure.zcml	2007-05-21 04:12:57 UTC (rev 75850)
@@ -0,0 +1 @@
+<include package="z3c.website" />



More information about the Checkins mailing list