Metadata-Version: 1.0
Name: dolmen.widget.image
Version: 1.0b1
Summary: Image widget (with thumbnails) for `zeam.form`
Home-page: UNKNOWN
Author: Souheil Chelfouh
Author-email: trollfot@gmail.com
License: GPL
Description: ===================
        dolmen.widget.image
        ===================
        
        `dolmen.widget.image` is a thin layer above `dolmen.widget.file`
        providing a widget suitable to fields implementing IImageField. It
        adds, thanks to `dolmen.thumbnailer` a preview of the uploaded image
        in both input and display mode.
        
        Example
        =======
        
        We are going to develop here a small example, to demonstrate the use
        of `dolmen.widget.image`. First, we instanciate our test model and add
        an image field to the object::
        
          >>> class Mammoth(object):
          ...     pass
        
          >>> import dolmen.file
          >>> import grokcore.component as grok
          >>> from zope.interface import Interface, alsoProvides
          >>> from zope.schema.fieldproperty import FieldProperty
        
          >>> class IMammothId(Interface):
          ...   """Even mammoths need an ID card"""
          ...   picture = dolmen.file.ImageField(title=u'Luggages')
        
          >>> manfred = Mammoth()
          >>> manfred.picture = None
          >>> alsoProvides(manfred, IMammothId)
        
        The picture is now set on our Mammoth. We create a form to try and
        edit the picture field::
        
          >>> from zeam.form.ztk import Form, Fields
        
          >>> class EditMammoth(Form):
          ...    grok.name('edit')
          ...    grok.context(IMammothId)
          ...    ignoreContent = False
          ...    fields = Fields(IMammothId)
        
          >>> grok.testing.grok_component('edit', EditMammoth)
          True
        
        We persist our Mammoth to get a located mammoth with an URL::
        
          >>> from zope.component.hooks import getSite
          >>> root = getSite()
          >>> root['manfred'] = manfred
          >>> manfred = root['manfred']
        
        We can call the edit form on our persisted object::
        
          >>> from zope.component import getMultiAdapter
          >>> from zope.publisher.browser import TestRequest
          
          >>> request = TestRequest()
        
          >>> form = getMultiAdapter((manfred, request), name='edit')
          >>> form.updateWidgets()
          >>> print form.fieldWidgets.get('form.field.picture').render()
          <div id="form-field-picture">
              <input type="file" id="form-field-picture-input"
                       name="form.field.picture" />
          </div>
        
        Now, let's try with a fake value::
             
          >>> manfred.picture = "some fake image"
          >>> form = getMultiAdapter((manfred, request), name='edit')
          >>> form.updateWidgets() 
        
          >>> print form.fieldWidgets.get('form.field.picture').render()
          <div id="form-field-picture">
            <div>
              <div class="widget-image-preview">
                <img src="http://127.0.0.1/manfred/++thumbnail++picture.preview"
                     title="Download" />
              </div>
              <p class="file-info">
                <a class="filename"
                   href="http://127.0.0.1/manfred/++download++picture">Download</a>
              </p>
            </div>
            <div>
              <input type="radio" value="keep" checked="checked"
                     class="noborder" name="form.field.picture.action"
                     onclick="document.getElementById('form-field-picture-input').disabled=true"
                     id="form-field-picture-action" />
              <label for="form-field-picture-action">Keep existing file</label>
              <br />
              <input type="radio" value="delete" class="noborder"
                     name="form.field.picture.action"
                     onclick="document.getElementById('form-field-picture-input').disabled=true"
                     id="form-field-picture-delete" />
              <label for="form-field-picture-delete">Delete existing file</label>
              <br />
              <input type="radio" value="replace" class="noborder"
                     name="form.field.picture.action"
                     onclick="document.getElementById('form-field-picture-input').disabled=false"
                     id="form-field-picture-replace" />
                  <label for="form-field-picture-replace">Replace with new file</label>
            </div>
            <div>
              <input type="file" id="form-field-picture-input"
                     name="form.field.picture" />
              <script type="text/javascript">document.getElementById('form-field-picture-input').disabled=true;</script>
            </div>
          </div>
        
        
        With non persistent objects (which don't resolve to an URL), no
        preview is displayed. If we can't resolve to an URL, we can't serve
        the thumbnail or download the data::
        
          >>> judith = Mammoth()
          >>> judith.picture = "Fake image data"
          >>> alsoProvides(judith, IMammothId)
        
          >>> form = getMultiAdapter((judith, request), name='edit')
          >>> form.updateWidgets() 
          >>> print form.fieldWidgets.get('form.field.picture').render()
          <div id="form-field-picture">
            <div>
              <input type="radio" value="keep" checked="checked"
                     class="noborder" name="form.field.picture.action"
                     onclick="document.getElementById('form-field-picture-input').disabled=true"
                     id="form-field-picture-action" />
              <label for="form-field-picture-action">Keep existing file</label>
              <br />
              <input type="radio" value="delete" class="noborder"
                     name="form.field.picture.action"
                     onclick="document.getElementById('form-field-picture-input').disabled=true"
                     id="form-field-picture-delete" />
              <label for="form-field-picture-delete">Delete existing file</label>
              <br />
              <input type="radio" value="replace" class="noborder"
                     name="form.field.picture.action"
                     onclick="document.getElementById('form-field-picture-input').disabled=false"
                     id="form-field-picture-replace" />
                  <label for="form-field-picture-replace">Replace with new file</label>
            </div>
            <div>
              <input type="file" id="form-field-picture-input"
                     name="form.field.picture" />
              <script type="text/javascript">document.getElementById('form-field-picture-input').disabled=true;</script>
            </div>
          </div>
        
        
        Changelog
        =========
        
        1.0b1 (2010-07-05)
        ------------------
        
        * The package now uses the latest improvements in the field
          registration process, in both ``zeam.form`` and
          ``dolmen.widget.file``.
        
        
        1.0a2 (2010-06-25)
        ------------------
        
        * Updated the field registration to work with the latest zeam.form.ztk
          improvement : registration by entry points.
        
        
        1.0a1 (2010-05-14)
        ------------------
        
        * Major change : the widget is now meant to be used in `zeam.form`.
          Dolmen is no longer using `z3c.form`.
        
        * The HTML code of the widget has been improved.
        
        
        0.2 (2010-03-01)
        ----------------
        
        * Updated the code to use ``dolmen.widget.file 0.2`` and ``dolmen.file
          0.5.1``.
        
        * Updated the template to use the ``zope.size.ISized`` adapter to
          display the file size.
        
        * Updated the tests to get rid of the unneeded zope.app packages.
        
        
        0.1 (2009-10-22)
        ----------------
        
        * Initial release
        
Keywords: Grok Zeam Zope3 Dolmen Widget Image
Platform: Any
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Zope3
Classifier: Intended Audience :: Other Audience
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
