[Checkins] SVN: CMF_Extras/trunk/CMFCollector/ Usability improvements:

Tres Seaver tseaver at palladion.com
Fri Jun 29 16:54:19 EDT 2007


Log message for revision 77249:
  Usability improvements:
  
  - Added marker interfaces to collector and issue objects.
  
  - Added RSS syndication link, which creates a feed using the
    current search criteria.
  
  - Cleaned up UI, moving search form to the top of the page and
    simplifying (add a property, 'show_all_criteria', with a true
    value to see all critera again).
  
  - Removed funky green bars from UI.
  
  

Changed:
  U   CMF_Extras/trunk/CMFCollector/CHANGES.txt
  A   CMF_Extras/trunk/CMFCollector/configure.zcml
  A   CMF_Extras/trunk/CMFCollector/interfaces.py
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_add_issue_form.pt
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_contents.pt
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_edit_form.pt
  A   CMF_Extras/trunk/CMFCollector/skins/collector/collector_feed_icon.png
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_contents.pt
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_edit_form.pt
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_followup_form.pt
  U   CMF_Extras/trunk/CMFCollector/skins/collector/collector_macros.pt
  A   CMF_Extras/trunk/CMFCollector/skins/collector/issues_as_rss.pt
  A   CMF_Extras/trunk/CMFCollector/skins/collector/query_rss.py
  A   CMF_Extras/trunk/CMFCollector/skins/collector/rssScrubForm.py
  D   CMF_Extras/trunk/CMFCollector/tests/test_all.py

-=-
Modified: CMF_Extras/trunk/CMFCollector/CHANGES.txt
===================================================================
--- CMF_Extras/trunk/CMFCollector/CHANGES.txt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/CHANGES.txt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -4,6 +4,15 @@
 
     Features
 
+      - Added marker interfaces to collector and issue objects.
+
+      - Added RSS syndication link, which creates a feed using the
+        current search criteria.
+
+      - Cleaned up UI, moving search form to the top of the page and
+        simplifying (add a property, 'show_all_criteria', with a true
+        value to see all critera again).
+
       - Added a GenericSetup extension profile for installing the
         collector types, skin, and workflow.
 
@@ -15,6 +24,8 @@
 
     Bug fixes
 
+      - Removed funky green bars from UI.
+
       - Ripped out the misfeature of having the ISSUE_TRANSCRIPT subobject
         catalog itself separately from the issue.
 

Added: CMF_Extras/trunk/CMFCollector/configure.zcml
===================================================================
--- CMF_Extras/trunk/CMFCollector/configure.zcml	                        (rev 0)
+++ CMF_Extras/trunk/CMFCollector/configure.zcml	2007-06-29 20:54:19 UTC (rev 77249)
@@ -0,0 +1,17 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser"
+    xmlns:five="http://namespaces.zope.org/five"
+    >
+
+  <five:implements
+      class=".Collector.Collector"
+      interface=".interfaces.ICollector"
+      />
+
+  <five:implements
+      class=".CollectorIssue.CollectorIssue"
+      interface=".interfaces.ICollectorIssue"
+      />
+
+</configure>

Added: CMF_Extras/trunk/CMFCollector/interfaces.py
===================================================================
--- CMF_Extras/trunk/CMFCollector/interfaces.py	                        (rev 0)
+++ CMF_Extras/trunk/CMFCollector/interfaces.py	2007-06-29 20:54:19 UTC (rev 77249)
@@ -0,0 +1,13 @@
+""" Collector interfaces
+
+$Id$
+"""
+from zope.interface import Interface
+
+class ICollector(Interface):
+    """ Marker interface for collectors.
+    """
+
+class ICollectorIssue(Interface):
+    """ Marker interface for collector issues.
+    """


Property changes on: CMF_Extras/trunk/CMFCollector/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_add_issue_form.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_add_issue_form.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_add_issue_form.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -34,7 +34,7 @@
 
       <table class="FormLayout">
 
-        <tr bgcolor="#ccffcc">
+        <tr bgcolor="#cccccc">
           <td colspan="5" align="center">
             <font size="+1"> <strong> Submit A New Issue </strong> </font>
           </td>

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_contents.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_contents.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_contents.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -50,8 +50,170 @@
                  next batch/next|nothing;
                  last_batch python: max(int(here.length()) - BATCHSIZE, 1)">
 
+    <form action="RETURNHERE" method="get"
+          tal:attributes="action python: here.absolute_url()
+                                         + '/collector_contents'"
+          tal:define="uniquevals python:
+                                 here.get_internal_catalog().uniqueValuesFor;
+                      ordered nocall: here/collector_ordered_traits">
+      <input type="hidden" name="searching" value="yep">
+
+        <table tal:define="complex context/show_all_criteria | nothing;
+                           columns python: complex and 7 or 3;
+                          ">
+          <tr>
+            <td align="center">
+              <input type="Submit" value="Search">
+            </td>
+            <td colspan="7"
+                tal:attributes="colspan columns">
+              <input type="text" name="SearchableText" size="40"
+                     value="TEXT"
+                     tal:attributes="value request/SearchableText|nothing">
+              <span
+                metal:use-macro="context/collector_macros/macros/rss_link" />
+            </td>
+          </tr>
+          <tr>
+            <td />
+            <th align="center"> Status </th>
+            <th align="center"
+                tal:condition="complex"> Requester</th>
+            <th align="center"> Assigned </th>
+            <th align="center"
+                tal:condition="complex"> Security Related </th>
+            <th align="center"
+                tal:condition="complex"> Topic </th>
+            <th align="center"
+                tal:condition="complex"> Classification </th>
+            <th align="center"> Importance </th>
+          </tr>
+          <tr valign="top">
+            <td />
+            <td align="center">
+              <select name="status:list:ignore_empty" multiple size="SIZE"
+                    tal:define="values here/collector_issue_trim_states"
+                    tal:attributes="size python: min(max(len(values), 3), 5)">
+                <option value=""
+                        tal:repeat="status values"
+                        tal:attributes="value status;
+                                        selected python: status
+                                               in request.get('status', [])"
+                        tal:content="status">
+                </option>
+             </select>
+            </td>
+            <td align="center"
+                tal:condition="complex">
+              <select name="Creator:list:ignore_empty" multiple size="SIZE"
+                      tal:define="values python: uniquevals('Creator')"
+                      tal:attributes="size python: min(max(len(values), 3), 
+                                                       5)">
+                <option value=""
+                        tal:repeat="creator values"
+                        tal:attributes="
+                            value creator;
+                            selected python: creator
+                                             in request.get('Creator', [])"
+                        tal:content="creator">
+                </option>
+              </select>
+            </td>
+            <td align="center">
+              <select name="supporters:list:ignore_empty" multiple size="SIZE"
+                      tal:define="values python:
+                                         ordered(uniquevals('assigned_to'),
+                                                 here.supporters)"
+                      tal:attributes="size python: min(max(len(values), 3),
+                                                       5)">
+                <option value=""
+                        tal:repeat="supporter values"
+                        tal:attributes="
+                            value supporter;
+                            selected python: supporter 
+                                     in request.get('supporters', [])"
+                        tal:content="supporter">
+                </option>
+              </select>
+            </td>
+            <td align="center"
+                tal:condition="complex">
+              <select name="security_related:list:ignore_empty" size="3" multiple
+                      tal:define="was python: request.get('security_related',
+                                                          [])">
+                <option value="No"
+                        tal:attributes="selected python: 'No' in was">
+                  No </option>
+                <option value="Yes"
+                        tal:attributes="selected python: 'Yes' in was">
+                  Yes </option>
+              </select>
+            </td>
+
+            <td align="center"
+                tal:condition="complex">
+              <select name="topics:list:ignore_empty" multiple size="SIZE"
+                    tal:define="values python: ordered(uniquevals('topic'),
+                                                       here.topics)"
+                    tal:attributes="size python: min(max(len(values), 3), 5)">
+                <option value=""
+                        tal:repeat="topic values"
+                        tal:attributes="
+                            value topic;
+                            selected python: topic
+                                             in request.get('topics', [])"
+                        tal:content="topic">
+                </option>
+             </select>
+            </td>
+            <td align="center"
+                tal:condition="complex">
+              <select name="classifications:list:ignore_empty" multiple size="SIZE"
+                      tal:define="values python: 
+                                         ordered(uniquevals('classification'),
+                                                 here.classifications)"
+                      tal:attributes="size python: min(max(len(values), 3),
+                                                       5)">
+                <option value=""
+                        tal:repeat="classification values"
+                        tal:attributes="
+                           value classification;
+                           selected python: classification
+                                            in request.get('classifications',
+                                                           [])"
+                        tal:content="classification">
+                </option>
+              </select>
+            </td>
+            <td align="center">
+              <select name="importances:list:ignore_empty" multiple size="SIZE"
+                      tal:define="values python: 
+                                         ordered(uniquevals('importance'),
+                                                 here.importances)"
+                      tal:attributes="size python: min(max(len(values), 3), 
+                                                       5)">
+                <option value=""
+                        tal:repeat="importance values"
+                        tal:attributes="
+                            value importance;
+                            selected python: importance
+                                             in request.get('importances',
+                                                            [])"
+                        tal:content="importance">
+                </option>
+             </select>
+          </td>
+          <td>
+            <input type="reset" value="Reset" />
+          </td>
+
+        </tr>
+      </table>
+
+    </form>
+
     <table class="FormLayout" cellspacing="0" border="0">
-      <tr bgcolor="#ccffcc">
+      <tr bgcolor="#cccccc">
         <td colspan="3">
           <div metal:use-macro="here/collector_macros/macros/issue_batch_nav">
             ISSUE-BATCH NAVIGATION
@@ -191,7 +353,7 @@
 
       </tbody>
 
-      <tr bgcolor="#ccffcc"
+      <tr bgcolor="#cccccc"
           tal:condition="batch">
         <td colspan="3">
           <div metal:use-macro="here/collector_macros/macros/issue_batch_nav">
@@ -201,160 +363,6 @@
       </tr>
     </table>
 
-    <form action="RETURNHERE" method="get"
-          tal:attributes="action python: here.absolute_url()
-                                         + '/collector_contents'"
-          tal:define="uniquevals python:
-                                 here.get_internal_catalog().uniqueValuesFor;
-                      ordered nocall: here/collector_ordered_traits">
-      <input type="hidden" name="searching" value="yep">
-
-        <table>
-          <tr>
-            <td align="center">
-              <input type="Submit" value="Search">
-            </td>
-            <td>
-              <input type="reset" value="Reset">
-            </td>
-          </tr>
-          <tr>
-            <td COLSPAN="4">
-              <strong>Any text:</strong>
-              <input type="text" name="SearchableText" size="40"
-                     value="TEXT"
-                     tal:attributes="value request/SearchableText|nothing">
-            </td>
-          </tr>
-          <tr>
-            <th align="center"> Status </th>
-            <th align="center"> Requester</th>
-            <th align="center"> Assigned </th>
-            <th align="center"> Security Related </th>
-          </tr>
-          <tr>
-            <td align="center">
-              <select name="status:list:ignore_empty" multiple size="SIZE"
-                    tal:define="values here/collector_issue_trim_states"
-                    tal:attributes="size python: min(max(len(values), 3), 5)">
-                <option value=""
-                        tal:repeat="status values"
-                        tal:attributes="value status;
-                                        selected python: status
-                                               in request.get('status', [])"
-                        tal:content="status">
-                </option>
-             </select>
-            </td>
-            <td align="center">
-              <select name="Creator:list:ignore_empty" multiple size="SIZE"
-                      tal:define="values python: uniquevals('Creator')"
-                      tal:attributes="size python: min(max(len(values), 3), 
-                                                       5)">
-                <option value=""
-                        tal:repeat="creator values"
-                        tal:attributes="
-                            value creator;
-                            selected python: creator
-                                             in request.get('Creator', [])"
-                        tal:content="creator">
-                </option>
-              </select>
-            </td>
-            <td align="center">
-              <select name="supporters:list:ignore_empty" multiple size="SIZE"
-                      tal:define="values python:
-                                         ordered(uniquevals('assigned_to'),
-                                                 here.supporters)"
-                      tal:attributes="size python: min(max(len(values), 3),
-                                                       5)">
-                <option value=""
-                        tal:repeat="supporter values"
-                        tal:attributes="
-                            value supporter;
-                            selected python: supporter 
-                                     in request.get('supporters', [])"
-                        tal:content="supporter">
-                </option>
-              </select>
-            </td>
-            <td align="center">
-              <select name="security_related:list:ignore_empty" size="3" multiple
-                      tal:define="was python: request.get('security_related',
-                                                          [])">
-                <option value="No"
-                        tal:attributes="selected python: 'No' in was">
-                  No </option>
-                <option value="Yes"
-                        tal:attributes="selected python: 'Yes' in was">
-                  Yes </option>
-              </select>
-            </td>
-
-          </tr>
-          <tr>
-            <th align="center"> Topic </th>
-            <th align="center"> Classification </th>
-            <th align="center"> Importance </th>
-          </tr>
-          <tr>
-            <td align="center">
-              <select name="topics:list:ignore_empty" multiple size="SIZE"
-                    tal:define="values python: ordered(uniquevals('topic'),
-                                                       here.topics)"
-                    tal:attributes="size python: min(max(len(values), 3), 5)">
-                <option value=""
-                        tal:repeat="topic values"
-                        tal:attributes="
-                            value topic;
-                            selected python: topic
-                                             in request.get('topics', [])"
-                        tal:content="topic">
-                </option>
-             </select>
-            </td>
-            <td align="center">
-              <select name="classifications:list:ignore_empty" multiple size="SIZE"
-                      tal:define="values python: 
-                                         ordered(uniquevals('classification'),
-                                                 here.classifications)"
-                      tal:attributes="size python: min(max(len(values), 3),
-                                                       5)">
-                <option value=""
-                        tal:repeat="classification values"
-                        tal:attributes="
-                           value classification;
-                           selected python: classification
-                                            in request.get('classifications',
-                                                           [])"
-                        tal:content="classification">
-                </option>
-              </select>
-            </td>
-            <td align="center">
-              <select name="importances:list:ignore_empty" multiple size="SIZE"
-                      tal:define="values python: 
-                                         ordered(uniquevals('importance'),
-                                                 here.importances)"
-                      tal:attributes="size python: min(max(len(values), 3), 
-                                                       5)">
-                <option value=""
-                        tal:repeat="importance values"
-                        tal:attributes="
-                            value importance;
-                            selected python: importance
-                                             in request.get('importances',
-                                                            [])"
-                        tal:content="importance">
-                </option>
-             </select>
-          </td>
-
-        </tr>
-      </table>
-
-</form>
-
 </div>
 </div>
 </body>

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_edit_form.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_edit_form.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_edit_form.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -27,7 +27,7 @@
 <form action="collector_edit" method="post">
 <table class="FormLayout" width="100%">
  
- <tr bgcolor="#ccffcc">
+ <tr bgcolor="#cccccc">
   <td align="center" colspan="4">
     <font size="+1"> <strong> Configure Collector </strong> </font>
   </td>

Added: CMF_Extras/trunk/CMFCollector/skins/collector/collector_feed_icon.png
===================================================================
(Binary files differ)


Property changes on: CMF_Extras/trunk/CMFCollector/skins/collector/collector_feed_icon.png
___________________________________________________________________
Name: svn:mime-type
   + image/png

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_contents.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_contents.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_contents.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -28,7 +28,7 @@
     <table tal:define="entries here/action_number;
                        ending python: (entries == 1 and 'y') or 'ies'">
 
-      <tr bgcolor="#ccffcc">
+      <tr bgcolor="#cccccc">
         <td colspan="2" align="center">
           <font size="+1">
             <strong>

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_edit_form.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_edit_form.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_edit_form.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -33,7 +33,7 @@
 
   <table width="100%">
 
-    <tr bgcolor="ccffcc">
+    <tr bgcolor="cccccc">
       <td>
         <font size="+1">
           <strong>

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_followup_form.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_followup_form.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_issue_followup_form.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -44,7 +44,7 @@
     <table tal:define="actions_pairs here/valid_actions_pairs"
       border="0" cellspacing="0">
 
-      <tr bgcolor="#ccffcc">
+      <tr bgcolor="#cccccc">
         <td NOWRAP colspan="DEPENDS"
             tal:attributes="colspan python: (here.no_submitter_email() and 1)
                                             or 3">

Modified: CMF_Extras/trunk/CMFCollector/skins/collector/collector_macros.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/collector_macros.pt	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/collector_macros.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -343,5 +343,16 @@
 
     </div>  <!-- End macro: add_artifacts_excerpt -->
 
+    <span metal:define-macro="rss_link"
+          tal:define="make_query nocall: modules/ZTUtils/make_query;
+                      qs python:make_query(context.rssScrubForm(request.form));
+                     ">
+     <a href="#"
+        tal:attributes="href string:${context/absolute_url}/query_rss?${qs}"
+     ><img alt="RSS" title="RSS" border="0"
+           tal:attributes="src string:${portal_url}/collector_feed_icon.png"
+           /></a>
+    </span>
+
   </body>
 </html>

Added: CMF_Extras/trunk/CMFCollector/skins/collector/issues_as_rss.pt
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/issues_as_rss.pt	                        (rev 0)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/issues_as_rss.pt	2007-06-29 20:54:19 UTC (rev 77249)
@@ -0,0 +1,49 @@
+<?xml version="1.0"?>
+<rdf:RDF
+    xmlns:tal="http://xml.zope.org/namespaces/tal"
+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+    xmlns:dc="http://purl.org/dc/elements/1.1/"
+    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+    xmlns="http://purl.org/rss/1.0/">
+  <channel rdf:about="URL"
+      tal:define="channel options/collector"
+      tal:attributes="rdf:about channel/url">
+    <title tal:content="channel/title">TITLE</title>
+    <link tal:content="channel/url">URL</link>
+    <description
+        tal:content="channel/description">DESCRIPTION</description>
+    <image rdf:resource="logo.png" />
+    <sy:updatePeriod
+        tal:content="channel/period">PERIOD</sy:updatePeriod>
+    <sy:updateFrequency
+        tal:content="channel/frequency">N</sy:updateFrequency>
+    <sy:updateBase
+        tal:content="channel/base">YYYY-MM-DDTHH:MM:SSZ</sy:updateBase>
+    <items>
+      <rdf:Seq>
+        <rdf:li resource="URL"
+            tal:repeat="item options/issues"
+            tal:attributes="resource item/url" />
+      </rdf:Seq>
+    </items>
+  </channel>
+  <item rdf:about="URL"
+        tal:repeat="item options/issues"
+        tal:attributes="rdf:about item/url">
+    <dc:date tal:content="item/date">YYYY-MM-DDTHH:MM:SSZ</dc:date>
+    <title tal:content="item/title">TITLE</title>
+    <link tal:content="item/url">URL</link>
+    <description
+        tal:condition="item/description"
+        tal:content="item/description">DESCRIPTION</description>
+    <dc:subject
+        tal:repeat="subject item/subjects"
+        tal:content="subject">SUBJECT</dc:subject>
+    <dc:creator
+        tal:repeat="creator item/creators"
+        tal:content="creator">CREATOR</dc:creator>
+    <dc:contributor
+        tal:repeat="contributor item/contributors"
+        tal:content="contributor">CONTRIBUTOR</dc:contributor>
+  </item>
+</rdf:RDF>


Property changes on: CMF_Extras/trunk/CMFCollector/skins/collector/issues_as_rss.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: CMF_Extras/trunk/CMFCollector/skins/collector/query_rss.py
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/query_rss.py	                        (rev 0)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/query_rss.py	2007-06-29 20:54:19 UTC (rev 77249)
@@ -0,0 +1,47 @@
+##Script (Python) "query_rss"
+##Title: Return a given query as RSS
+##parameters=REQUEST
+
+REQUEST.RESPONSE.setHeader('Content-Type', 'application/rss+xml')
+
+kw = REQUEST.form
+
+options = {}
+
+options['collector'] = {'url': context.absolute_url(),
+                        'title': context.Title(),
+                        'description': context.Description(),
+                        'base': context.ZopeTime().HTML4(),
+                        'frequency': 1,
+                        'period': 'minute',
+                       }
+
+
+query = kw.copy()
+query['portal_type'] = 'Collector Issue'
+
+if 'sort_on' in query:
+    del query['sort_on']
+
+catalog = context.get_internal_catalog()
+found = catalog.search(query, 'modified', True)
+
+items = []
+for item in found:
+    items.append({'url': item.getURL(),
+                  'title': '%s [%0d]' % (item.Title, item.action_number),
+                  'description': item.Description,
+                  'subjects': ('status:%s' % item.status,
+                               'importance:%s' % item.importance,
+                               'topic:%s' % item.topic,
+                               'classification:%s' % item.classification,
+                              ),
+                  'creators': (item.submitter_id,),
+                  'contributors': item.assigned_to,
+                  'date': item.modified.HTML4(),
+                 })
+
+options['issues'] = tuple(items)
+
+#options = toUnicode( options, ptool.getProperty('default_charset', None) )
+return context.issues_as_rss(**options)


Property changes on: CMF_Extras/trunk/CMFCollector/skins/collector/query_rss.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: CMF_Extras/trunk/CMFCollector/skins/collector/rssScrubForm.py
===================================================================
--- CMF_Extras/trunk/CMFCollector/skins/collector/rssScrubForm.py	                        (rev 0)
+++ CMF_Extras/trunk/CMFCollector/skins/collector/rssScrubForm.py	2007-06-29 20:54:19 UTC (rev 77249)
@@ -0,0 +1,19 @@
+##Script (Python) "rssScrubForm"
+##title=Scrub form of useless variables
+##parameters=form
+result = form.copy()
+if '-C' in result:
+    del result['-C']
+
+if 'searching' in result:
+    del result['searching']
+
+empty = []
+for k, v in result.items():
+    if not v:
+        empty.append(k)
+
+for k in empty:
+    del result[k]
+
+return result


Property changes on: CMF_Extras/trunk/CMFCollector/skins/collector/rssScrubForm.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Deleted: CMF_Extras/trunk/CMFCollector/tests/test_all.py
===================================================================
--- CMF_Extras/trunk/CMFCollector/tests/test_all.py	2007-06-29 17:59:24 UTC (rev 77248)
+++ CMF_Extras/trunk/CMFCollector/tests/test_all.py	2007-06-29 20:54:19 UTC (rev 77249)
@@ -1,39 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 Zope Corporation and Contributors. All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-""" CMFCollector tests.
-
-$Id$
-"""
-
-from unittest import main
-import Testing
-import Zope2
-Zope2.startup()
-
-from Products.CMFCore.tests.base.utils import build_test_suite
-
-
-def suite():
-    return build_test_suite( 'Products.CMFCollector.tests'
-                           , [ 'test_CollectorSubset'
-                             ,
-                             ]
-                           )
-
-def test_suite():
-    # Just to silence the top-level test.py
-    return None
-
-if __name__ == '__main__':
-    main(defaultTest='suite')
-



More information about the Checkins mailing list