<?xml version="1.0" encoding="UTF-8" ?>
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Project><name>collective.slideshowfolder</name>
<shortdesc>Somtimes useful extensions to Products.slideshowfolder</shortdesc>
<description>.. -*-doctest-*-

==========================
collective.slideshowfolder
==========================

Somtimes useful extensions to Products.slideshowfolder

SlideshowImage
==============

The SlideshowImage content type uses a reference to an existing normal
image somewhere else in the site to act as a kind of link or alias.
This allows for the creation of a folder as a slideshowfolder that
displays images that are actually stored elsewhere.

Start with a couple of normal folders and a normal image.

    &gt;&gt;&gt; portal.images
    &lt;ATFolder at /plone/images&gt;
    &gt;&gt;&gt; portal.images.contentValues()
    [&lt;ATImage at /plone/images/foo-image-title&gt;]
    &gt;&gt;&gt; foo_image = portal.images['foo-image-title']

    &gt;&gt;&gt; folder.contentValues()
    [&lt;ATFolder at /plone/Members/test_user_1_/slideshow&gt;]
    &gt;&gt;&gt; folder.slideshow.contentValues()
    [&lt;ATImage at
      /plone/Members/test_user_1_/slideshow/bar-image-title&gt;]

Open a browser and login as a user who can add SlideshowImages.

    &gt;&gt;&gt; from Products.Five import testbrowser
    &gt;&gt;&gt; from Products.PloneTestCase import ptc
    &gt;&gt;&gt; portal.error_log._ignored_exceptions = ()
    &gt;&gt;&gt; member_browser = testbrowser.Browser()
    &gt;&gt;&gt; member_browser.handleErrors = False
    &gt;&gt;&gt; member_browser.open(portal.absolute_url())
    &gt;&gt;&gt; member_browser.getLink('Log in').click()
    &gt;&gt;&gt; member_browser.getControl(
    ...     'Login Name').value = ptc.default_user
    &gt;&gt;&gt; member_browser.getControl(
    ...     'Password').value = ptc.default_password
    &gt;&gt;&gt; member_browser.getControl('Log in').click()
    &gt;&gt;&gt; member_browser.open(folder.slideshow.absolute_url())

Add a SlideshowImage.  Set the "Image Reference" field to the real image
in the images folder.

    &gt;&gt;&gt; member_browser.getLink(
    ...     url='createObject?type_name=SlideshowImage').click()
    &gt;&gt;&gt; member_browser.getControl(
    ...     'Image Reference').value = foo_image.UID()

Since all values are taken from the referenced image, none of the
normal image fields are editable.

    &gt;&gt;&gt; member_browser.getControl('Title')
    Traceback (most recent call last):
    LookupError: label 'Title'

    &gt;&gt;&gt; member_browser.getControl('Description')
    Traceback (most recent call last):
    LookupError: label 'Description'

    &gt;&gt;&gt; member_browser.getControl(name='image_file')
    Traceback (most recent call last):
    LookupError: name 'image_file'

    &gt;&gt;&gt; member_browser.getControl('Creators')
    Traceback (most recent call last):
    LookupError: label 'Creators'

Save the new SlideshowImage.

    &gt;&gt;&gt; member_browser.getControl('Save').click()

The values for the fields are pulled in from the referenced image.

    &gt;&gt;&gt; print member_browser.contents
    &lt;...
    ...Changes saved...
    ...Foo Image Title...
    ...portal_owner...
    ...Foo Image description...
    &gt;&gt;&gt; member_browser.getLink('Click to view full-size image')
    &lt;Link text='Foo Image Title[IMG] [IMG]
    Click to view full-size image...'
    url='http://nohost/plone/Members/test_user_1_/slideshow/foo-image-title/image_view_fullscreen'&gt;
    &gt;&gt;&gt; member_browser.open(
    ...     folder.slideshow['foo-image-title'].absolute_url())
    &gt;&gt;&gt; print member_browser.contents
    GIF...

The catalog also reflects the data from the referenced image.

    &gt;&gt;&gt; len(portal.portal_catalog(
    ...     Type='Slideshow Image',
    ...     Description='Foo Image description'))
    1

The catalogged and indexed values for the fields are also updated
when the original image is edited.

Open a browser and log in as the image's creator.

    &gt;&gt;&gt; owner_browser = testbrowser.Browser()
    &gt;&gt;&gt; owner_browser.handleErrors = False
    &gt;&gt;&gt; owner_browser.open(portal.absolute_url())
    &gt;&gt;&gt; owner_browser.getLink('Log in').click()
    &gt;&gt;&gt; owner_browser.getControl(
    ...     'Login Name').value = ptc.portal_owner
    &gt;&gt;&gt; owner_browser.getControl(
    ...     'Password').value = ptc.default_password
    &gt;&gt;&gt; owner_browser.getControl('Log in').click()

Change the image metadata.

    &gt;&gt;&gt; owner_browser.open(foo_image.absolute_url()+'/edit')
    &gt;&gt;&gt; owner_browser.getControl(
    ...     'Description').value = 'Foo Image edited'
    &gt;&gt;&gt; owner_browser.getControl('Save').click()

The catalog now reflects the changes for the SlideshowImage that
references the image.

    &gt;&gt;&gt; len(portal.portal_catalog(
    ...     Type='Slideshow Image',
    ...     Description='Foo Image description'))
    0

    &gt;&gt;&gt; len(portal.portal_catalog(
    ...     Type='Slideshow Image',
    ...     Description='Foo Image edited'))
    1

Slideshow Folders
=================

SlideshowImages is in a folder using the slideshowfolder view behave
just like regular images.

Make the folder into a slideshowfolder.

    &gt;&gt;&gt; member_browser.open(folder.slideshow.absolute_url())
    &gt;&gt;&gt; member_browser.getLink('Make slideshow').click()
    &gt;&gt;&gt; print member_browser.contents
    &lt;...
    ...This folder is now designated a slideshow...

Check that the SlideshowImage is included in the slideshow by
inspecting the JavaScript.  The collective.slideshowfolder package
also extends the caption to include the image's creator for credit.

    &gt;&gt;&gt; member_browser.open(
    ...     folder.slideshow.absolute_url()+'/slideshow_settings.js')
    &gt;&gt;&gt; print member_browser.contents
    registerPloneFunction...
    ...http://nohost/plone/Members/test_user_1_/slideshow/bar-image-title/image_large...
    ...Photo: Foo Full Name...
    ...Bar Image description...
    ...http://nohost/plone/Members/test_user_1_/slideshow/foo-image-title/image_large...
    ...Photo: portal_owner...
    ...Foo Image edited...


.. -*-doctest-*-

Slideshow Portlets
==================

The collective.slideshowfolder package also provides a portlet that
renders a Slideshow 2 in a portlet based on the contents of the first
folder or collection specified in the "slideshow" refrence for the
context.

Turn the a folder into a slideshowfolder.

    &gt;&gt;&gt; slideshowfolder = self.folder.slideshow
    &gt;&gt;&gt; self.loginAsPortalOwner()
    &gt;&gt;&gt; portal.portal_workflow.doActionFor(
    ...     slideshowfolder, 'publish')
    &gt;&gt;&gt; slideshowfolder.unrestrictedTraverse(
    ...     '@@folder_slideshow_view').makeSlideshow()

Open a browser and login as a user who can add SlideshowImages.

    &gt;&gt;&gt; from Products.Five import testbrowser
    &gt;&gt;&gt; browser = testbrowser.Browser()
    &gt;&gt;&gt; browser.handleErrors = False

Go to an area of the site without a slideshow.

    &gt;&gt;&gt; context = portal.news.aggregator
    &gt;&gt;&gt; browser.open(context.absolute_url())
    &gt;&gt;&gt; 'portletSlideshow' in browser.contents
    False

Add a slideshowfolder reference for the context.

    &gt;&gt;&gt; context.addReference(slideshowfolder,
    ...                      relationship="slideshow")
    &lt;Reference sid:... tid:... rel:slideshow&gt;

Now the slideshow portlet will be rendered.

    &gt;&gt;&gt; browser.open(context.absolute_url())
    &gt;&gt;&gt; print browser.contents
    &lt;...
    ...mootools...
    ...portletSlideshow...
    ...id="myShow"...
    ...registerPloneFunction...
    ...http://nohost/plone/Members/test_user_1_/slideshow/bar-image-title/image_large...

Changelog
=========

0.4 - 2008-12-03
----------------

* Fix the portlet JavaScript
* Make the portlet fully editable
* More sensible height and width defaults for portlet 

0.3 - 2008-12-02
----------------

* Support for a slideshow portlet based on a reference to a slideshow
  folder

0.2 - 2008-11-13
----------------

* Add the image creator as a credit in the caption

0.1 - 2008-11-12
----------------

* Initial release</description>
<homepage rdf:resource="http://pypi.python.org/pypi/collective.slideshowfolder" />
<maintainer><foaf:Person><foaf:name>Ross Patterson</foaf:name>
<foaf:mbox_sha1sum>b51d9c661f066d5875649f8019b2a7007e169030</foaf:mbox_sha1sum></foaf:Person></maintainer>
<release><Version><revision>0.4</revision></Version></release>
</Project></rdf:RDF>