==================
dolmen.widget.file
==================

`dolmen.widget.file` is a package that walks hand-in-hand with
`dolmen.file`. It provides a useable and pluggable way to render the
`dolmen.file.FileField` in a `z3c.form.Form`, using Grok (through
`megrok.z3cform.base`)

Example
=======

We are going to develop here a small example, to demonstrate the use
of `dolmen.widget.file`. First, we need to create a model content with
a file field::

  >>> import dolmen.file
  >>> import grokcore.component as grok
  >>> from zope.interface import Interface
  >>> from zope.schema.fieldproperty import FieldProperty


  >>> class ITravelMount(Interface):
  ...   luggage = dolmen.file.FileField(title=u'Luggages')


  >>> class Mammoth(grok.Context):
  ...   grok.implements(ITravelMount)
  ...   luggage = FieldProperty(ITravelMount['luggage'])


We now have a travel mammoth on which we can add a luggage. Now, we
need a form to edit the animal::

  >>> from megrok.z3cform.base import EditForm
  >>> class EditMammoth(EditForm):
  ...    grok.name('edit')
  ...    grok.context(ITravelMount)

  >>> grok.testing.grok_component('edit', EditMammoth)
  True

Let's instanciate a Mammoth and try to call the form on it::

  >>> from zope.component import getMultiAdapter
  >>> from zope.publisher.browser import TestRequest

  >>> manfred = Mammoth()
  >>> request = TestRequest()

  >>> form = getMultiAdapter((manfred, request), name='edit')
  >>> form.updateWidgets() 
  >>> print form.widgets['luggage'].render() 
  <span id="form-widgets-luggage"
        class="file-widget required filefield-field">
  <BLANKLINE>
  <BLANKLINE>
  <BLANKLINE>
      <input type="file" id="form-widgets-luggage-input"
             name="form.widgets.luggage" />
  <BLANKLINE>
  <BLANKLINE>
  </span>
  <BLANKLINE>

Now, let's try with a value::
     
  >>> manfred.luggage = "A nice data"
  >>> form = getMultiAdapter((manfred, request), name='edit')
  >>> form.updateWidgets() 
  >>> print form.widgets['luggage'].render() 
  <span id="form-widgets-luggage"
      class="file-widget required filefield-field">
  <BLANKLINE>
    <div style="padding-top: 1em;">
    <input type="radio" value="nochange" checked="checked"
         class="noborder"
         name="form.widgets.luggage.nochange"
             onclick="document.getElementById('form-widgets-luggage-input').disabled=true"
             id="form-widgets-luggage-nochange" />
    <label for="form-widgets-luggage-nochange">Keep existing file</label>
      <br />
  <BLANKLINE>
      <label for="form-widgets-luggage-delete">Delete existing file</label>
    <br />
    <input type="radio" value="" class="noborder"
           name="form.widgets.luggage.nochange"
           onclick="document.getElementById('form-widgets-luggage-input').disabled=false"
           id="form-widgets-luggage-replace" />
        <label for="form-widgets-luggage-replace">Replace with new file</label>
  </div>
    <div style="padding-left: 1.5em; padding-top: 0.5em;">
    <input type="file" id="form-widgets-luggage-input"
             name="form.widgets.luggage" />
    <script type="text/javascript">document.getElementById('form-widgets-luggage-input').disabled=true;</script>
    </div>
  </span>
  <BLANKLINE>
