[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/ Utility class used for wrapping items for display.

Charlie Clark charlie at begeistert.org
Thu Sep 23 17:59:52 EDT 2010


Log message for revision 116775:
  Utility class used for wrapping items for display.

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder_contents.pt
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py	2010-09-23 20:51:38 UTC (rev 116774)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder.py	2010-09-23 21:59:52 UTC (rev 116775)
@@ -215,6 +215,19 @@
         return self.request.form.get('SearchableText')
 
 
+class ContentProxy(object):
+    """Utility wrapping content item for display purposes"""
+    
+    def __init__(self, context):
+        self.name = context.getId()
+        self.title = context.TitleOrId()
+        self.type = context.Type() or None
+        self.icon = context.icon
+        self.url = context.absolute_url()
+        self.ModificationDate = context.ModificationDate()
+        self.widget = "%s.select" % self.name
+
+
 class ContentsView(BatchViewBase, _EditFormMixin, PageForm):
     """Folder contents view"""
 
@@ -304,10 +317,20 @@
     def content_fields(self):
         """Create content field objects only for batched items"""
         f = IFolderItem['select']
+        contents = []
+        b_start = self._getBatchStart()
+        key, reverse = self._get_sorting()
         fields = form.FormFields()
-        for item in self._getBatchObj():
+        for idx, item in enumerate(self._getBatchObj()):
             field = form.FormField(f, 'select', item.id)
             fields += form.FormFields(field)
+            content = ContentProxy(item)
+            if key == 'position':
+                content.position =  b_start + idx + 1
+            else:
+                content.position = '...'
+            contents.append(content)
+        self.listBatchItems = contents
         return fields
 
     @memoize
@@ -333,8 +356,6 @@
     def setUpWidgets(self, ignore_request=False):
         """Create widgets for the folder contents."""
         super(ContentsView, self).setUpWidgets(ignore_request)
-        data = {}
-        self.content_fields()
         self.widgets = form.setUpWidgets(
                 self.content_fields(), self.prefix, self.context,
                 self.request, ignore_request=ignore_request)
@@ -384,28 +405,6 @@
         items = self.contents
         return sort(items, ((key, 'cmp', reverse and 'desc' or 'asc'),))
 
-    @memoize
-    def listBatchItems(self):
-        """Return the widgets for the form in the interface field order"""
-        batch_obj = self._getBatchObj()
-        b_start = self._getBatchStart()
-        key, reverse = self._get_sorting()
-        fields = []
-
-        for idx, item in enumerate(batch_obj):
-            field = {'ModificationDate':item.ModificationDate()}
-            field['select'] = self.widgets['%s.select' % item.getId()]
-            field['name'] = item.getId()
-            field['url'] = item.absolute_url()
-            field['title'] = item.TitleOrId()
-            field['icon'] = item.icon
-            field['position'] = (key == 'position') \
-                                and str(b_start + idx + 1) \
-                                or '...'
-            field['type'] = item.Type() or None
-            fields.append(field.copy())
-        return fields
-
     def _get_ids(self, data):
         """Identify objects that have been selected"""
         ids = [k[:-7] for k, v in data.items()

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder_contents.pt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder_contents.pt	2010-09-23 20:51:38 UTC (rev 116774)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/folder_contents.pt	2010-09-23 21:59:52 UTC (rev 116775)
@@ -39,7 +39,7 @@
      </tr>
    <tr tal:repeat="item view/listBatchItems"
       tal:attributes="class python: (repeat['item'].even() and 'row-hilite') or None">
-     <td tal:content="structure item/select">Checkbox</td>
+     <td tal:content="structure python:view.widgets[item.widget]()">Checkbox</td>
      <td><a href="" tal:attributes="href item/url"
          tal:condition="item/icon"
       ><img src="" alt="" border="0"

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py	2010-09-23 20:51:38 UTC (rev 116774)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/content/tests/test_folder.py	2010-09-23 21:59:52 UTC (rev 116775)
@@ -77,7 +77,8 @@
 
     def test_list_batch_items(self):
         view = ContentsView(self.folder, TestRequest())
-        self.assertEquals(view.listBatchItems(), [])
+        view.content_fields()
+        self.assertEquals(view.listBatchItems, [])
 
     def test_is_orderable(self):
         view = ContentsView(self.folder, TestRequest())



More information about the checkins mailing list