[Checkins] SVN: z3c.formdemo/trunk/src/z3c/formdemo/ Added a new demo demonstrating groups.

Stephan Richter srichter at cosmos.phy.tufts.edu
Wed Jun 27 16:49:03 EDT 2007


Log message for revision 77158:
  Added a new demo demonstrating groups.
  

Changed:
  U   z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt
  U   z3c.formdemo/trunk/src/z3c/formdemo/configure.zcml
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/__init__.py
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/browser.py
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/configure.zcml
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/interfaces.py
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.css
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.py
  A   z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/results.pt

-=-
Modified: z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt	2007-06-27 20:48:14 UTC (rev 77157)
+++ z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt	2007-06-27 20:49:02 UTC (rev 77158)
@@ -9,6 +9,11 @@
   <div>
     <a href="../++skin++Z3CFormDemo/widgets.html">All widgets</a>
   </div>
+  <div>
+    <a href="../++skin++Z3CFormDemo/questionnaireResults.html">
+      Questionnaire
+    </a>
+  </div>
 
   <h4>Table based layout</h4>
   <div>
@@ -17,6 +22,11 @@
   <div>
     <a href="../++skin++Z3CTableFormDemo/widgets.html">All widgets</a>
   </div>
+  <div>
+    <a href="../++skin++Z3CTableFormDemo/questionnaireResults.html">
+      Questionnaire
+    </a>
+  </div>
 
   <h4>Advanced Demos</h4>
   <div>

Modified: z3c.formdemo/trunk/src/z3c/formdemo/configure.zcml
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/configure.zcml	2007-06-27 20:48:14 UTC (rev 77157)
+++ z3c.formdemo/trunk/src/z3c/formdemo/configure.zcml	2007-06-27 20:49:02 UTC (rev 77158)
@@ -16,6 +16,7 @@
   <include package=".message" />
   <include package=".sqlmessage" />
   <include package=".widgets" />
+  <include package=".questionnaire" />
   <include package=".calculator" />
   <include package=".wizard" />
   <include package=".spreadsheet" />

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/__init__.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/__init__.py	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/__init__.py	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1 @@
+# Make a package.


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/browser.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/browser.py	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/browser.py	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1,133 @@
+##############################################################################
+#
+# 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$
+"""
+__docformat__ = "reStructuredText"
+import zope.interface
+from zope.traversing.browser import absoluteURL
+from zope.viewlet.viewlet import CSSViewlet
+from z3c.pagelet import browser
+from z3c.form import button, field, form, group, widget
+from zc.table import column
+
+from z3c.formdemo.browser import formatter
+from z3c.formdemo.questionnaire import interfaces, questionnaire
+from z3c.formui import layout
+
+QuestionnaireCSSViewlet = CSSViewlet('questionnaire.css')
+
+class IQuestionnaireGroup(zope.interface.Interface):
+    """Questionnaire Group"""
+
+class IQuestionnairePage(zope.interface.Interface):
+    """Questionnaire Page"""
+
+
+class DevelopmentExperienceGroup(group.Group):
+    zope.interface.implements(IQuestionnaireGroup)
+    label = u'Development Experience'
+    fields = field.Fields(interfaces.IQuestionnaire).select(
+        'zope2', 'plone', 'zope3', 'five')
+
+
+class ContributorExperienceGroup(group.Group):
+    zope.interface.implements(IQuestionnaireGroup)
+    label = u'Contributor Experience'
+    fields = field.Fields(interfaces.IQuestionnaire).select(
+        'contributor', 'years', 'zopeId')
+
+
+class QuestionnaireAddForm(layout.AddFormLayoutSupport,
+                          group.GroupForm, form.AddForm):
+    zope.interface.implements(IQuestionnairePage)
+
+    label = u'Zope Developer Questionnaire'
+    fields = field.Fields(interfaces.IQuestionnaire).select('name', 'age')
+    groups = (DevelopmentExperienceGroup, ContributorExperienceGroup)
+
+    def create(self, data):
+        return questionnaire.Questionnaire(**data)
+
+    def add(self, object):
+        count = 0
+        while 'questionnaire-%i' %count in self.context:
+            count += 1;
+        self._name = 'questionnaire-%i' %count
+        self.context[self._name] = object
+        return object
+
+    def nextURL(self):
+        url = absoluteURL(self.context, self.request)
+        return url + '/questionnaireResults.html'
+
+SubmitLabel = button.StaticButtonActionAttribute(
+    u'Submit Questionnaire', button=form.AddForm.buttons['add'],
+    form=QuestionnaireAddForm)
+
+
+def getDescriptionAsLabel(value):
+    return value.field.description
+
+QuestionLabel = widget.ComputedWidgetAttribute(
+    getDescriptionAsLabel, view=IQuestionnaireGroup)
+
+
+class DataColumn(column.SortingColumn):
+
+    def __init__(self, field):
+        super(DataColumn, self).__init__(field.title, field.__name__)
+
+    def renderCell(self, item, formatter):
+        return item.widgets[self.name].render()
+
+    def getSortKey(self, item, formatter):
+        return item.widgets[self.name].value
+
+
+class QuestionnaireRow(form.DisplayForm):
+    fields = field.Fields(interfaces.IQuestionnaire)
+
+
+class QuestionnaireResults(browser.BrowserPagelet):
+    zope.interface.implements(IQuestionnairePage)
+
+    rowFields = field.Fields(interfaces.IQuestionnaire)
+
+    def getContent(self):
+        return [obj for obj in self.context.values()
+                if interfaces.IQuestionnaire.providedBy(obj)]
+
+    def update(self):
+        super(QuestionnaireResults, self).update()
+
+        rows = []
+        for questionnaire in self.getContent():
+            row = QuestionnaireRow(questionnaire, self.request)
+            row.update()
+            rows.append(row)
+
+        columns = [DataColumn(field.field)
+                   for field in self.rowFields.values()]
+
+        self.table = formatter.ListFormatter(
+            self.context, self.request, rows,
+            prefix = 'formdemo.questionnaire.', columns=columns,
+            sort_on=[('name', False)])
+        self.table.widths = (160, 45, 65, 55, 65, 50, 70, 55, 100)
+        for col in ('age', 'zope2', 'plone', 'zope3', 'five',
+                    'contributor', 'years', 'zopeId'):
+            self.table.columnCSS[col] = 'right'
+        self.table.sortKey = 'formdemo.questionnaire.sort-on'
+


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/browser.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/configure.zcml
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/configure.zcml	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/configure.zcml	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1,70 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser"
+    xmlns:z3c="http://namespaces.zope.org/z3c"
+    i18n_domain="z3c.formdemo">
+
+  <!-- Content Declarations -->
+
+  <class class=".questionnaire.Questionnaire">
+    <allow
+        interface=".interfaces.IQuestionnaire"
+        />
+    <require
+        permission="zope.Public"
+        set_schema=".interfaces.IQuestionnaire"
+        />
+  </class>
+
+  <!-- Resources -->
+
+  <browser:zrt-resource
+      name="questionnaire.css"
+      file="questionnaire.css"
+      layer="z3c.formdemo.layer.IDemoBrowserLayer"
+      />
+
+  <browser:viewlet
+      name="questionnaire.css"
+      view=".browser.IQuestionnairePage"
+      manager="z3c.formdemo.skin.ICSS"
+      class=".browser.QuestionnaireCSSViewlet"
+      permission="zope.Public"
+      layer="z3c.formdemo.layer.IDemoBrowserLayer"
+      />
+
+  <!-- Filling out Questionnaire -->
+
+  <adapter
+      factory=".browser.SubmitLabel"
+      name="title" />
+
+  <adapter
+      factory=".browser.QuestionLabel"
+      name="label" />
+
+  <z3c:pagelet
+      name="addQuestionnaire.html"
+      for="zope.app.folder.interfaces.IFolder"
+      class=".browser.QuestionnaireAddForm"
+      layer="z3c.formdemo.layer.IDemoBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <!-- Questionnaire Results -->
+
+  <z3c:pagelet
+      name="questionnaireResults.html"
+      for="zope.app.folder.interfaces.IFolder"
+      class=".browser.QuestionnaireResults"
+      layer="z3c.formdemo.layer.IDemoBrowserLayer"
+      permission="zope.Public"
+      />
+
+  <z3c:template
+      template="results.pt"
+      for=".browser.QuestionnaireResults"
+      layer="z3c.formdemo.layer.IDemoBrowserLayer"
+      />
+
+</configure>


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/interfaces.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/interfaces.py	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/interfaces.py	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1,70 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+"""Questionnaire Interfaces
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+import zope.interface
+import zope.schema
+
+class IQuestionnaire(zope.interface.Interface):
+    """A questionaire about Zope users."""
+
+    name = zope.schema.TextLine(
+        title=u'Name',
+        description=u'Name of the person.',
+        required=True)
+
+    age = zope.schema.Int(
+        title=u'Age',
+        description=u'The age of the person.',
+        required=True)
+
+    zope2 = zope.schema.Bool(
+        title=u'Zope 2',
+        description=u'Have you ever developed with Zope 2?',
+        required=True)
+
+    plone = zope.schema.Bool(
+        title=u'Plone',
+        description=u'Have you ever developed with Plone?',
+        required=True)
+
+    zope3 = zope.schema.Bool(
+        title=u'Zope 3',
+        description=u'Have you ever developed with Zope 3?',
+        required=True)
+
+    five = zope.schema.Bool(
+        title=u'Five',
+        description=u'Have you ever developed with Five?',
+        required=True)
+
+    contributor = zope.schema.Bool(
+        title=u'Contrib.',
+        description=u'Are you a Zope contributor?',
+        required=True)
+
+    years = zope.schema.Int(
+        title=u'Years',
+        description=u'How many years have you contributed?',
+        default=0,
+        required=False)
+
+    zopeId = zope.schema.TextLine(
+        title=u'Zope Id',
+        description=u'What is your Zope Id?',
+        required=False)
+


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.css
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.css	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.css	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1,110 @@
+body {
+  background: #629C9D;
+  padding: 20px;
+  color: #5E4A32;
+}
+
+h1 {
+  border-bottom: 2px solid #C89C6B;
+  margin-bottom: 5px;
+  font-weight: bold;
+  color: #5E4A32;
+}
+
+div#content {
+  background: #ECD7C2;
+  border: 2px solid #C89C6B;
+  padding: 10px 20px;
+  width: 700px;
+  -moz-border-radius: 15px;
+}
+
+fieldset {
+  margin-top: 15px;
+  border: 1px solid #C89C6B;
+  padding: 10px 15px 5px 15px;
+  -moz-border-radius: 7px;
+}
+
+fieldset legend {
+  color: #5E4A32;
+  font-variant: small-caps;
+  font-weight: bold;
+  font-size: 110%;
+  border: 1px solid #C89C6B;
+  padding: 2px 4px;
+  -moz-border-radius: 3px;
+}
+
+a, a:link, a:visited, a:hover {
+  color: #D36938;
+}
+
+div.required-info {
+  margin-bottom: 10px;
+}
+
+div.error {
+  display: inline;
+}
+
+span.option span.label {
+  margin-right: 50px;
+}
+
+input[type=text] {
+  padding: 1px 2px;
+  background: #FFFFA0;
+}
+
+input#form-widgets-age {
+  width: 3em;
+  text-align: right;
+}
+
+input#form-widgets-years {
+  width: 2em;
+  text-align: right;
+}
+
+input#form-widgets-zopeId {
+  width: 10em;
+}
+
+input[type=submit] {
+  background: #E6B95C;
+  border: 1px solid #DB9649;
+  color: #5E4A32;
+  text-shadow: 1px 1px white;
+}
+
+table {
+  margin-top: 15px;
+  margin-bottom: 15px;
+}
+
+table th {
+  background: #5E4A32;
+  color: white;
+  padding: 3px 2px;
+}
+
+table th a:link {
+  color: white;
+}
+
+table th a:hover {
+  color: white;
+}
+
+table th a:visited {
+  color: white;
+}
+
+table tr.even {
+  background: #D3C0AE;
+}
+
+table td.right {
+  text-align: right;
+}


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.css
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.py	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.py	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1,43 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+"""Questionnaire Implementation
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+import persistent
+import zope.interface
+from zope.location import location
+from zope.schema.fieldproperty import FieldProperty
+from z3c.formdemo.questionnaire import interfaces
+
+class Questionnaire(location.Location, persistent.Persistent):
+    zope.interface.implements(interfaces.IQuestionnaire)
+
+    name = FieldProperty(interfaces.IQuestionnaire['name'])
+    age = FieldProperty(interfaces.IQuestionnaire['age'])
+    zope2 = FieldProperty(interfaces.IQuestionnaire['zope2'])
+    plone = FieldProperty(interfaces.IQuestionnaire['plone'])
+    zope3 = FieldProperty(interfaces.IQuestionnaire['zope3'])
+    five = FieldProperty(interfaces.IQuestionnaire['five'])
+    contributor = FieldProperty(interfaces.IQuestionnaire['contributor'])
+    years = FieldProperty(interfaces.IQuestionnaire['years'])
+    zopeId = FieldProperty(interfaces.IQuestionnaire['zopeId'])
+
+    def __init__(self, **kw):
+        for name, value in kw.items():
+            setattr(self, name, value)
+
+    def __repr__(self):
+        return '<%s from %r>' %(self.__class__.__name__, self.name)


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/questionnaire.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/results.pt
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/results.pt	                        (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/results.pt	2007-06-27 20:49:02 UTC (rev 77158)
@@ -0,0 +1,7 @@
+<h1>Zope Developer Questionnaire Results</h1>
+
+<div tal:replace="structure view/table" />
+
+<div class="actions">
+  <a href="addQuestionnaire.html">[Fill out Questionnaire]</a>
+</div>


Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/results.pt
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list