[Checkins] SVN: megrok.z3cform.tabular/trunk/ Initial Import

Christian Klinger cklinger at novareto.de
Thu Sep 17 10:36:30 EDT 2009


Log message for revision 104225:
  Initial Import

Changed:
  A   megrok.z3cform.tabular/trunk/README.txt
  A   megrok.z3cform.tabular/trunk/bootstrap.py
  A   megrok.z3cform.tabular/trunk/buildout.cfg
  A   megrok.z3cform.tabular/trunk/docs/
  A   megrok.z3cform.tabular/trunk/docs/HISTORY.txt
  A   megrok.z3cform.tabular/trunk/setup.py
  A   megrok.z3cform.tabular/trunk/src/
  A   megrok.z3cform.tabular/trunk/src/megrok/
  A   megrok.z3cform.tabular/trunk/src/megrok/__init__.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/__init__.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/__init__.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/components.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/configure.zcml
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/ftesting.zcml
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/__init__.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_deleteTable.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout_templates/
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout_templates/formtablepagewithtemplate.pt
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular.py
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular_templates/
  A   megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular_templates/contentstablewithtemplate.pt
  A   megrok.z3cform.tabular/trunk/versions.cfg

-=-
Added: megrok.z3cform.tabular/trunk/README.txt
===================================================================
--- megrok.z3cform.tabular/trunk/README.txt	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/README.txt	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,4 @@
+Introduction
+============
+
+

Added: megrok.z3cform.tabular/trunk/bootstrap.py
===================================================================
--- megrok.z3cform.tabular/trunk/bootstrap.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/bootstrap.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,84 @@
+##############################################################################
+#
+# Copyright (c) 2006 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.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id$
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+is_jython = sys.platform.startswith('java')
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    def quote (c):
+        return c
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws  = pkg_resources.working_set
+
+if len(sys.argv) > 2 and sys.argv[1] == '--version':
+    VERSION = '==%s' % sys.argv[2]
+    args = sys.argv[3:] + ['bootstrap']
+else:
+    VERSION = ''
+    args = sys.argv[1:] + ['bootstrap']
+
+if is_jython:
+    import subprocess
+
+    assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd',
+           quote(tmpeggs), 'zc.buildout' + VERSION],
+           env=dict(os.environ,
+               PYTHONPATH=
+               ws.find(pkg_resources.Requirement.parse('setuptools')).location
+               ),
+           ).wait() == 0
+
+else:
+    assert os.spawnle(
+        os.P_WAIT, sys.executable, quote (sys.executable),
+        '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout' + VERSION,
+        dict(os.environ,
+            PYTHONPATH=
+            ws.find(pkg_resources.Requirement.parse('setuptools')).location
+            ),
+        ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout' + VERSION)
+import zc.buildout.buildout
+zc.buildout.buildout.main(args)
+shutil.rmtree(tmpeggs)

Added: megrok.z3cform.tabular/trunk/buildout.cfg
===================================================================
--- megrok.z3cform.tabular/trunk/buildout.cfg	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/buildout.cfg	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,25 @@
+[buildout]
+develop = .
+parts = sources test
+extends = versions.cfg
+versions = versions
+newest = false
+
+[versions]
+z3c.pagelet = 1.0.3
+grokcore.view = 1.12.1
+grok = 1.0a4
+
+[sources]
+recipe = infrae.subversion
+urls = 
+   svn://svn.zope.org/repos/main/Sandbox/cklinger/megrok.z3cform.ui/trunk megrok.z3cform.ui
+   svn://svn.zope.org/repos/main/megrok.z3cform.base/trunk megrok.z3cform.base
+as_eggs = True
+
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = 
+    megrok.z3cform.tabular
+defaults = ['--tests-pattern', '^f?tests$', '-v', '-c']

Added: megrok.z3cform.tabular/trunk/docs/HISTORY.txt
===================================================================
--- megrok.z3cform.tabular/trunk/docs/HISTORY.txt	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/docs/HISTORY.txt	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,7 @@
+Changelog
+=========
+
+0.1 (xxxx-xx-xx)
+----------------
+
+* Initial release

Added: megrok.z3cform.tabular/trunk/setup.py
===================================================================
--- megrok.z3cform.tabular/trunk/setup.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/setup.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,38 @@
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+setup(name='megrok.z3cform.tabular',
+      version=version,
+      description="grok add on for createing an Wizard",
+      long_description=open("README.txt").read() + "\n" +
+                       open(os.path.join("docs", "HISTORY.txt")).read(),
+      # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        ],
+      keywords='grok z3c.form megrok.z3cform.wizard',
+      author='Christian Klinger',
+      author_email='cklinger at novareto.de',
+      url='',
+      license='GPL',
+      package_dir={'':'src'},
+      packages=find_packages('src', exclude=['ez_setup']),
+      namespace_packages=['megrok', 'megrok.z3cform'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'grok',
+          'z3c.tabular',
+          'megrok.layout',
+          'megrok.z3cform.base',
+          'megrok.z3cform.ui',
+          'megrok.z3ctable',
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )

Added: megrok.z3cform.tabular/trunk/src/megrok/__init__.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/__init__.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/__init__.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/__init__.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/__init__.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/__init__.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/__init__.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/__init__.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/__init__.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,2 @@
+from components import FormTable, DeleteFormTable
+from components import FormTablePage, DeleteFormTablePage

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/components.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/components.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/components.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,76 @@
+import grokcore.component as grok
+import grokcore.view as view
+import z3c.tabular.table
+from z3c.template.template import getPageTemplate
+from grokcore.view.interfaces import ITemplate as IGrokTemplate
+import megrok.layout
+
+class BaseTable(view.View):
+    grok.baseclass()
+
+    status = None # The Tabular stuff checks if the status is None
+
+    template = None
+
+    def render(self):
+        template = getPageTemplate()
+        return template(self)
+
+    render.base_method = True
+
+    renderFormTable = render
+
+
+
+class FormTable(BaseTable, z3c.tabular.table.FormTable):
+    """ A Form Table Class. You have to define your buttons and stuff yourself
+    """
+
+    def update(self):
+        view.View.update(self)
+        z3c.tabular.table.FormTable.update(self)
+
+
+class DeleteFormTable(BaseTable, z3c.tabular.table.DeleteFormTable):
+    """ This is a table with has logic for deleteing stuff on it
+    """
+
+    def update(self):
+        view.View.update(self)
+        z3c.tabular.table.DeleteFormTable.update(self)
+
+
+class FormTablePage(megrok.layout.Page, z3c.tabular.table.FormTable):
+    """ A Form Table Class which get renderd inside a Layout
+    """
+    grok.baseclass()
+
+    template = None
+
+    def update(self):
+        megrok.layout.Page.update(self)
+        z3c.tabular.table.FormTable.update(self)
+
+    def render(self):
+        template = getPageTemplate()
+        return template(self)
+
+    render.base_method = True    
+    renderFormTable = render
+
+
+class DeleteFormTablePage(megrok.layout.Page, z3c.tabular.table.DeleteFormTable):    
+    grok.baseclass()
+
+    template = None
+
+    def update(self):
+        megrok.layout.Page.update(self)
+        z3c.tabular.table.DeleteFormTable.update(self)
+
+    def render(self):
+        template = getPageTemplate()
+        return template(self)
+
+    render.base_method = True    
+    renderFormTable = render

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/configure.zcml
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/configure.zcml	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/configure.zcml	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,11 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:z3c="http://namespaces.zope.org/z3c">
+
+  <include package="grok"/>
+  <include package="megrok.z3ctable" />
+  <include package="megrok.z3cform.ui"/>
+  <include package="z3c.tabular" />
+
+
+</configure>

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/ftesting.zcml
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/ftesting.zcml	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/ftesting.zcml	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,35 @@
+<configure
+   xmlns="http://namespaces.zope.org/zope"
+   xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="megrok.z3cform.tabular"/>
+  <include package="megrok.z3cform.base" file="meta.zcml"/>
+  <include package="megrok.z3cform.base"/>
+  <include package="megrok.z3cform.base" file="default_form_layer.zcml"/>
+  <grok:grok package="megrok.z3cform.tabular.tests"/>
+
+  <securityPolicy
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+      />
+
+  <unauthenticatedPrincipal
+      id="zope.anybody"
+      title="Unauthenticated User"
+      />
+  <grant
+      permission="zope.View"
+      principal="zope.anybody"
+      />
+
+  <principal
+      id="zope.mgr"
+      title="Manager"
+      login="mgr"
+      password="mgrpw"
+      />
+
+  <role id="zope.Manager" title="Site Manager" />
+  <grantAll role="zope.Manager" />
+  <grant role="zope.Manager" principal="zope.mgr" />
+</configure>
+

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/__init__.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/__init__.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/__init__.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,9 @@
+import os.path
+import megrok.z3cform.tabular
+from zope.app.testing.functional import ZCMLLayer
+
+ftesting_zcml = os.path.join(os.path.dirname(megrok.z3cform.tabular.__file__),
+                             'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer',
+                            allow_teardown=True)
+

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_deleteTable.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_deleteTable.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_deleteTable.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,150 @@
+"""
+Sample data setup
+-----------------
+
+Let's create a sample container which we can use as our iterable context:
+
+  >>> from zope.app.testing.functional import getRootFolder
+  >>> root = getRootFolder()
+  >>> cont = Container()
+
+and set a parent for the cont:
+
+  >>> root['cont'] = cont
+
+Now setup some items:
+
+  >>> cont[u'first'] = Content('First', 1)
+  >>> cont[u'second'] = Content('Second', 2)
+  >>> cont[u'third'] = Content('Third', 3)
+
+  >>> from zope.component import getMultiAdapter
+  >>> from zope.publisher.browser import TestRequest
+  >>> delete_view = getMultiAdapter((cont, TestRequest()), name=u"deletetable") 
+  >>> print delete_view()
+  <form action="http://127.0.0.1" method="post"
+        enctype="multipart/form-data" class="edit-form"
+        name="deleteFormTable" id="deleteFormTable">
+    <div class="viewspace">
+      <div>
+      <div class="tabluarTable">
+        <table class="contents">
+    <thead>
+      <tr>
+        <th>X</th>
+        <th>Name</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr class="even">
+        <td><input type="checkbox" class="checkbox-widget" name="deleteFormTable-checkBox-0-selectedItems-first" value="first"  /></td>
+        <td>first</td>
+      </tr>
+      <tr class="odd">
+        <td><input type="checkbox" class="checkbox-widget" name="deleteFormTable-checkBox-0-selectedItems-second" value="second"  /></td>
+        <td>second</td>
+      </tr>
+      <tr class="even">
+        <td><input type="checkbox" class="checkbox-widget" name="deleteFormTable-checkBox-0-selectedItems-third" value="third"  /></td>
+        <td>third</td>
+      </tr>
+    </tbody>
+  </table>
+      </div>
+      <div class="tabluarForm">
+      </div>
+    </div>
+    </div>
+    <div>
+      <div class="buttons">
+  <input id="deleteFormTable-buttons-delete"
+         name="deleteFormTable.buttons.delete"
+         class="submit-widget button-field" value="Delete"
+         type="submit" />
+      </div>
+    </div>
+  </form>
+
+
+Now call the table with the testbrowser
+---------------------------------------
+
+   >>> from zope.testbrowser.testing import Browser
+   >>> browser = Browser()
+
+   >>> browser.handleErrors = False
+   >>> #browser.addHeader('Authorization', 'Basic user:user')
+   >>> browser.open('http://localhost/cont/deletetable')
+   >>> form = browser.getForm()
+   >>> form.getControl(name='deleteFormTable-checkBox-0-selectedItems-first').value = "first"
+   >>> form.submit('Delete')
+
+   >>> print browser.contents
+   <form...
+       <div class="status">
+            <div class="summary">Data successfully deleted</div>
+       </div>
+   ...
+        <table class="contents">
+    <thead>
+      <tr>
+        <th>X</th>
+        <th>Name</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr class="even">
+        <td><input type="checkbox" class="checkbox-widget" name="deleteFormTable-checkBox-0-selectedItems-second" value="second"  /></td>
+        <td>second</td>
+      </tr>
+      <tr class="odd">
+        <td><input type="checkbox" class="checkbox-widget" name="deleteFormTable-checkBox-0-selectedItems-third" value="third"  /></td>
+        <td>third</td>
+      </tr>
+    </tbody>
+   </table>
+   ...
+
+
+"""
+
+import grokcore.component as grok
+from megrok.z3ctable.ftests import Container, Content
+from megrok.z3cform.tabular import DeleteFormTable
+from megrok.z3cform.base import button 
+from megrok.z3ctable import CheckBoxColumn, NameColumn
+
+class DeleteTable(DeleteFormTable):
+    grok.context(Container)
+
+    status = None
+
+    def executeDelete(self, item):
+        del self.context[item.__name__]
+
+    def render(self):
+        return self.renderFormTable()
+
+class CheckBox(CheckBoxColumn):
+    grok.name('checkBox')
+    grok.adapts(None, None, DeleteTable)
+    weight = 0
+
+    def getItemKey(self, item):
+        return '%s-selectedItems-%s' % (self.id, item.__name__)
+
+
+class Name(NameColumn):
+    grok.name('MyName') 
+    grok.adapts(None, None, DeleteTable)
+    weight = 99 
+
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.z3cform.tabular.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(
+          optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite
+

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,159 @@
+"""
+Sample data setup
+-----------------
+
+Let's create a sample container which we can use as our iterable context:
+
+  >>> from zope.app.testing.functional import getRootFolder
+  >>> root = getRootFolder()
+  >>> cont = Container()
+
+and set a parent for the cont:
+
+  >>> root['my_container1'] = cont
+
+Now setup some items:
+
+  >>> cont[u'first'] = Content('First', 1)
+  >>> cont[u'second'] = Content('Second', 2)
+  >>> cont[u'third'] = Content('Third', 3)
+
+Call the Table with getMultiAdapter
+-----------------------------------
+
+  >>> from zope.component import getMultiAdapter
+  >>> from zope.publisher.browser import TestRequest
+  >>> table_in_layout = getMultiAdapter((cont, TestRequest()), name=u"tableinlayout") 
+  >>> print table_in_layout()
+  <html><form action="http://127.0.0.1" method="post"
+        enctype="multipart/form-data" class="edit-form"
+        name="formTable" id="formTable">
+    <div class="viewspace">
+      <div>
+      <div class="tabluarTable">
+        <table class="contents">
+    <thead>
+      <tr>
+        <th>Name</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr class="even">
+        <td>first</td>
+      </tr>
+      <tr class="odd">
+        <td>second</td>
+      </tr>
+      <tr class="even">
+        <td>third</td>
+      </tr>
+    </tbody>
+  </table>
+      </div>
+      <div class="tabluarForm">
+      </div>
+    </div>
+    </div>
+    <div>
+      <div class="buttons">
+  <input id="formTable-buttons-cancel"
+         name="formTable.buttons.cancel"
+         class="submit-widget button-field" value="Cancel"
+         type="submit" />
+      </div>
+    </div>
+  </form>
+  </html>
+  >>> delete_table_in_layout = getMultiAdapter((cont, TestRequest()), name=u"formtablepagewithtemplate") 
+  >>> print delete_table_in_layout() 
+  <html><div id="content">
+    <form action="http://127.0.0.1" method="post"
+        enctype="multipart/form-data" class="edit-form"
+        name="deleteFormTable" id="deleteFormTable">
+    <div class="viewspace">
+      <div>
+      <div class="tabluarTable">
+        <table class="contents">
+    <thead>
+      <tr>
+        <th>Name</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr class="even">
+        <td>first</td>
+      </tr>
+      <tr class="odd">
+        <td>second</td>
+      </tr>
+      <tr class="even">
+        <td>third</td>
+      </tr>
+    </tbody>
+  </table>
+      </div>
+      <div class="tabluarForm">
+      </div>
+    </div>
+    </div>
+    <div>
+      <div class="buttons">
+  <input id="deleteFormTable-buttons-delete"
+         name="deleteFormTable.buttons.delete"
+         class="submit-widget button-field" value="Delete"
+         type="submit" />
+      </div>
+    </div>
+  </form>
+  </div>
+  </html>
+  
+"""
+
+import grokcore.component as grok
+from megrok.z3ctable.ftests import Container, Content
+from megrok.z3cform.tabular import FormTablePage, DeleteFormTablePage
+from megrok.z3cform.base import button 
+from megrok.z3ctable import CheckBoxColumn, NameColumn
+from zope.component import Interface
+from megrok import layout
+
+class Layout(layout.Layout):
+    grok.context(Interface)
+
+    def render(self):
+        return "<html>%s</html>" %self.view.content()
+
+
+class TableInLayout(FormTablePage):
+    grok.context(Container)
+
+    def render(self):
+        return self.renderFormTable()
+
+
+class Uid(NameColumn):
+    grok.name('uid') 
+    grok.adapts(None, None, FormTablePage)
+    weight = 1
+
+#
+
+class FormTablePageWithTemplate(DeleteFormTablePage):
+    grok.context(Container)
+
+
+class Name(NameColumn):
+    grok.name('Name') 
+    grok.adapts(None, None, FormTablePageWithTemplate)
+    weight = 1
+
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.z3cform.tabular.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(
+          optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite
+

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout_templates/formtablepagewithtemplate.pt
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout_templates/formtablepagewithtemplate.pt	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_formtableinlayout_templates/formtablepagewithtemplate.pt	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,3 @@
+<div id="content">
+  <span tal:replace="structure view/renderFormTable"/>
+</div>

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular.py
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular.py	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular.py	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,68 @@
+"""
+Sample data setup
+-----------------
+
+Let's create a sample container which we can use as our iterable context:
+
+  >>> from zope.app.testing.functional import getRootFolder
+  >>> root = getRootFolder()
+  >>> cont = Container()
+
+and set a parent for the cont:
+
+  >>> root['conti'] = cont
+
+Now setup some items:
+
+  >>> cont[u'first'] = Content('First', 1)
+  >>> cont[u'second'] = Content('Second', 2)
+  >>> cont[u'third'] = Content('Third', 3)
+
+  >>> from zope.component import getMultiAdapter
+  >>> from zope.publisher.browser import TestRequest
+  >>> table_view = getMultiAdapter((cont, TestRequest()), name=u"formtable") 
+  >>> print table_view
+  >>> table_with_template = getMultiAdapter((cont, TestRequest()), name=u"contentstablewithtemplate")
+  >>> print table_with_template
+"""
+
+import grokcore.component as grok
+from megrok.z3ctable.ftests import Container, Content
+from megrok.z3cform.tabular import FormTable
+from megrok.z3cform.base import button 
+from megrok.z3ctable import CheckBoxColumn, NameColumn
+
+class FormTable(FormTable):
+    grok.context(Container)
+
+    status = None
+
+    def render(self):
+        return self.renderFormTable()
+
+class Name(NameColumn):
+    grok.name('checkBox')
+    grok.adapts(None, None, FormTable)
+    weight = 0
+
+#
+
+class ContentsTableWithTemplate(FormTable):
+    grok.context(Container)
+
+    status = None
+
+class MyId(NameColumn):
+    grok.name('myid')
+    grok.adapts(None, None, ContentsTableWithTemplate)
+    weight = 0
+
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.z3cform.tabular.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(
+          optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite
+

Added: megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular_templates/contentstablewithtemplate.pt
===================================================================
--- megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular_templates/contentstablewithtemplate.pt	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/src/megrok/z3cform/tabular/tests/test_tabular_templates/contentstablewithtemplate.pt	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,5 @@
+<html>
+ <body>
+  <span tal:replace="structure view/render"/>
+ </body> 
+</html>

Added: megrok.z3cform.tabular/trunk/versions.cfg
===================================================================
--- megrok.z3cform.tabular/trunk/versions.cfg	                        (rev 0)
+++ megrok.z3cform.tabular/trunk/versions.cfg	2009-09-17 14:36:29 UTC (rev 104225)
@@ -0,0 +1,111 @@
+[versions]
+ClientForm = 0.2.9
+grokcore.component = 1.7
+grokcore.formlib = 1.2
+grokcore.security = 1.2
+grokcore.view = 1.11
+grokcore.viewlet = 1.1
+grokui.admin = 0.4.0
+martian = 0.11
+mechanize = 0.1.7b
+pytz = 2007k
+RestrictedPython = 3.4.2
+simplejson = 1.7.1
+z3c.autoinclude = 0.2.2
+z3c.flashmessage = 1.0
+z3c.recipe.eggbasket = 0.4.3
+z3c.testsetup = 0.4
+zc.catalog = 1.2.0
+ZConfig = 2.5.1
+zc.recipe.testrunner = 1.0.0
+zdaemon = 2.0.2
+ZODB3 = 3.8.3
+zodbcode = 3.4.0
+zope.annotation = 3.4.1
+zope.app.apidoc = 3.4.3
+zope.app.applicationcontrol = 3.4.3
+zope.app.appsetup = 3.4.1
+zope.app.authentication = 3.4.4
+zope.app.basicskin = 3.4.0
+zope.app.broken = 3.4.0
+zope.app.catalog = 3.5.1
+zope.app.component = 3.4.1
+zope.app.container = 3.5.6
+zope.app.content = 3.4.0
+zope.app.debug = 3.4.1
+zope.app.dependable = 3.4.0
+zope.app.error = 3.5.1
+zope.app.exception = 3.4.1
+zope.app.file = 3.4.4
+zope.app.folder = 3.4.0
+zope.app.form = 3.4.1
+zope.app.generations = 3.4.1
+zope.app.http = 3.4.1
+zope.app.i18n = 3.4.4
+zope.app.interface = 3.4.0
+zope.app.intid = 3.4.1
+zope.app.keyreference = 3.4.1
+zope.app.locales = 3.4.5
+zope.app.onlinehelp = 3.4.1
+zope.app.pagetemplate = 3.4.1
+zope.app.preference = 3.4.1
+zope.app.principalannotation = 3.4.0
+zope.app.publication = 3.4.3
+zope.app.publisher = 3.5.1
+zope.app.renderer = 3.4.0
+zope.app.rotterdam = 3.4.1
+zope.app.schema = 3.4.0
+zope.app.security = 3.5.2
+zope.app.securitypolicy = 3.4.6
+zope.app.server = 3.4.2
+zope.app.session = 3.5.1
+zope.app.skins = 3.4.0
+zope.app.testing = 3.4.3
+zope.app.tree = 3.4.0
+zope.app.twisted = 3.4.1
+zope.app.wsgi = 3.4.2
+zope.app.zapi = 3.4.0
+zope.app.zcmlfiles = 3.4.3
+zope.app.zopeappgenerations = 3.4.0
+zope.cachedescriptors = 3.4.1
+zope.component = 3.4.0
+zope.configuration = 3.4.0
+zope.contentprovider = 3.4.0
+zope.contenttype = 3.4.0
+zope.copypastemove = 3.4.0
+zope.datetime = 3.4.0
+zope.deferredimport = 3.4.0
+zope.deprecation = 3.4.0
+zope.dottedname = 3.4.2
+zope.dublincore = 3.4.0
+zope.error = 3.5.1
+zope.event = 3.4.0
+zope.exceptions = 3.4.0
+zope.filerepresentation = 3.4.0
+zope.formlib = 3.4.0
+zope.hookable = 3.4.0
+zope.i18n = 3.4.0
+zope.i18nmessageid = 3.4.3
+zope.index = 3.4.1
+zope.interface = 3.4.1
+zope.lifecycleevent = 3.4.0
+zope.location = 3.4.0
+zope.minmax = 1.1.0
+zope.modulealias = 3.4.0
+zope.pagetemplate = 3.4.0
+zope.proxy = 3.4.2
+zope.publisher = 3.4.9
+zope.schema = 3.4.0
+zope.security = 3.4.1
+zope.securitypolicy = 3.4.1
+zope.server = 3.4.3
+zope.session = 3.4.1
+zope.size = 3.4.0
+zope.structuredtext = 3.4.0
+zope.tal = 3.4.1
+zope.tales = 3.4.0
+zope.testbrowser = 3.4.2
+zope.testing = 3.7.6
+zope.thread = 3.4
+zope.traversing = 3.4.1
+zope.viewlet = 3.4.2



More information about the checkins mailing list