Metadata-Version: 1.0
Name: menhir.contenttype.folder
Version: 0.4
Summary: Dolmen contenttype extension : folder
Home-page: http://www.dolmen-project.org/
Author: Souheil Chelfouh
Author-email: souheil@chelfouh.com
License: GPL
Download-URL: http://pypi.python.org/pypi/menhir.contenttype.folder
Description: 
        
        ``menhir.contenttype.folder`` provides a folderish content for
        `Dolmen` based `Grok` applications. This folderish type has several
        ways to display itself, allowing the editor to chose wether it should
        display a summary of the content or a structured and pagined rendering.
        
        Schema
        ======
        
        A `Folder` does not have a particular schema. It uses only the
        `IDescriptiveSchema` from ``dolmen.app.content``, exposing only the
        `title` and `description` attributes::
        
            >>> from dolmen.content import schema
            >>> from menhir.contenttype.folder import Folder
            >>> print schema.bind().get(Folder)
            [<InterfaceClass dolmen.app.content.interfaces.IDescriptiveSchema>]
        
        The instanciation provides a fully functionnal folderish object::
        
            >>> from zope.container.interfaces import IContainer
            >>> folder = Folder(title=u"Some title")
            >>> IContainer.providedBy(folder)
            True
        
        The `Folder` class inherits from the ``grokcore.content``
        OrderedContainer: the keys of container are orderable (read mutable)::
        
            >>> from grokcore.content import OrderedContainer
            >>> isinstance(folder, OrderedContainer)
            True
        
        
        Test in-situ
        ============
        
        Setup the environment
        
            >>> from zope.component.hooks import getSite
            >>> root = getSite()
        
        Create a Folder.
        
            >>> from menhir.contenttype.folder import Folder
            >>> root[u'folder'] = Folder()
            >>> folder = root.get(u'folder')
        
        Create a dummy content type, so that we can put dummy content in the folder.
        
            >>> import dolmen.content as content
            >>> class Dummy(content.Content):
            ...     content.name("Dummy")
            ...     # content.icon("dummy.png")
        
        Fill the folder with some dummies.
        
            >>> folder[u'books'] = Dummy(title=u"Books")
            >>> folder[u'films'] = Dummy(title=u"Films")
            >>> folder[u'music'] = Dummy(title=u"Music")
        
            >>> folder[u'subfolder'] = Folder(title=u"SubFolder")
            >>> folder[u'subfolder'][u'subfolder2'] = Folder(title=u'SubFolder Two')
            >>> folder[u'subfolder'][u'bogus'] = Dummy(title=u'Bogus') 
            >>> folder[u'subfolder'][u'subfolder2'][u'hocus'] = Dummy(title=u"hocus")
        
        Verify the contents are correct.
        
            >>> dict([x for x in folder.items()])
            {u'films': <menhir.contenttype.folder.Dummy object at ...>,
             u'books': <menhir.contenttype.folder.Dummy object at ...>,
             u'music': <menhir.contenttype.folder.Dummy object at ...>,
             u'subfolder': <menhir.contenttype.folder.folder.Folder object at ...>}
        
        Let's take a look at it from the browser's point-of-view.
        
            >>> from zope.publisher.browser import TestRequest
            >>> from zope.component import getMultiAdapter
            >>> request = TestRequest()
        
            >>> view = getMultiAdapter((folder, request), name=folder.selected_view)
            >>> view.__class__.__name__
            'FolderListing'
        
            >>> view.update()
            >>> print view.render()
            <div class="folder-listing">
              <h1>Content of the folder</h1>
              <div><table class="listing sortable">
              <thead>
                <tr>
                  <th>Title</th>
                  <th>Modification date</th>
                </tr>
              </thead>
              <tbody>
                <tr class="even">
                  <td><a href="http://127.0.0.1/folder/books">books</a></td>
                  <td></td>
                </tr>
                <tr class="odd">
                  <td><a href="http://127.0.0.1/folder/films">films</a></td>
                  <td></td>
                </tr>
                <tr class="even">
                  <td><a href="http://127.0.0.1/folder/music">music</a></td>
                  <td></td>
                </tr>
                <tr class="odd">
                  <td><img src="http://127.0.0.1/@@/menhir-contenttype-folder-folder-IFolder-icon.png" alt="Folder" width="16" height="16" border="0" /> <a href="http://127.0.0.1/folder/subfolder">SubFolder</a></td>
                  <td></td>
                </tr>
              </tbody>
            </table></div>
            </div>
        
        We should have a look at the default view (index) as well.
        
            >>> view = getMultiAdapter((folder, request), name='index')
            >>> view.__class__.__name__
            'SelectedView'
        
            >>> view.update()
            >>> print view.render()
            <div class="folder-listing">
              <h1>Content of the folder</h1>
              <div><table class="listing sortable">
              <thead>
                <tr>
                  <th>Title</th>
                  <th>Modification date</th>
                </tr>
              </thead>
              <tbody>
                <tr class="even">
                  <td><a href="http://127.0.0.1/folder/books">books</a></td>
                  <td></td>
                </tr>
                <tr class="odd">
                  <td><a href="http://127.0.0.1/folder/films">films</a></td>
                  <td></td>
                </tr>
                <tr class="even">
                  <td><a href="http://127.0.0.1/folder/music">music</a></td>
                  <td></td>
                </tr>
                <tr class="odd">
                  <td><img src="http://127.0.0.1/@@/menhir-contenttype-folder-folder-IFolder-icon.png" alt="Folder" width="16" height="16" border="0" /> <a href="http://127.0.0.1/folder/subfolder">SubFolder</a></td>
                  <td></td>
                </tr>
              </tbody>
            </table></div>
            </div>
        
        Lastly, let's change the folder layout to the full rendering view
        provided in this package.
        
            >>> folder.selected_view = u'compositeview'
            >>> view = getMultiAdapter((folder, request), name=folder.selected_view)
            >>> view.__class__.__name__
            'CompositeView'
        
            >>> view.update()
            >>> print view.content()
            <div class="composite-view">
              <h1></h1>
              <div class="composite-body sequence-block">
                <div><form action="http://127.0.0.1" method="post"
                  enctype="multipart/form-data">
              <h1>books</h1>
            </form>
            </div>
              </div>
              <div class="composite-body sequence-block">
                <div><form action="http://127.0.0.1" method="post"
                  enctype="multipart/form-data">
              <h1>films</h1>
            </form>
            </div>
              </div>
              <div class="composite-body sequence-block">
                <div><form action="http://127.0.0.1" method="post"
                  enctype="multipart/form-data">
              <h1>music</h1>
            </form>
            </div>
              </div>
              <div class="composite-body sequence-block">
                <div><div class="folder-listing">
              <h1>Content of the folder</h1>
              <div><table class="listing sortable">
              <thead>
                <tr>
                  <th>Title</th>
                  <th>Modification date</th>
                </tr>
              </thead>
              <tbody>
                <tr class="even">
                  <td><img src="http://127.0.0.1/@@/menhir-contenttype-folder-folder-IFolder-icon.png" alt="Folder" width="16" height="16" border="0" /> <a href="http://127.0.0.1/folder/subfolder/subfolder2">SubFolder Two</a></td>
                  <td></td>
                </tr>
                <tr class="odd">
                  <td><a href="http://127.0.0.1/folder/subfolder/bogus">bogus</a></td>
                  <td></td>
                </tr>
              </tbody>
            </table></div>
            <BLANKLINE>
            </div>
            </div>
              </div>
            </div>
        
        Changelog
        =========
        
        0.4 (2011-02-14)
        ----------------
        
        * The schema no longer includes `IViewSelector`. This prevents the
          field from showing up in the auto-generated forms.
        
        * `IFolder` now inherits from ``zope.container`` `IContainer`.
        
        * Consolidated the "composite view" using a normalized way to get the
          default view name. We now test if the view exists and if it's a
          valid `IPage`.
        
        
        0.3 (2011-02-14)
        ----------------
        
        * Updated for the latest changes in ``dolmen.content``,
          ``dolmen.app.content`` and ``dolmen.app.container``.
        
        * Cleaned up dependencies.
        
        
        0.2 (2010-07-27)
        ----------------
        
        * Corrected packaging (missing icon)
        
        
        0.1 (2010-07-19)
        ----------------
        
        * Initial release
        
Keywords: Grok Zope3 CMS Dolmen
Platform: Any
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Other Audience
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
