[Checkins] SVN: z3c.widget/sandbox/src/z3c/widget/ added widget namespace and autocomplete widget, not finished yet

Bernd Dorn bernd.dorn at fhv.at
Sun Jul 9 08:35:12 EDT 2006


Log message for revision 69057:
  added widget namespace and autocomplete widget, not finished yet

Changed:
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/README.txt
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/__init__.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/configure.zcml
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/README.txt
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/__init__.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/browser.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/configure.zcml
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/content.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/countries.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/interfaces.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/tests.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/z3c.widget.autocomplete.demo-configure.zcml
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/ftesting.zcml
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/ftests.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/interfaces.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/suggestions.pt
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/tests.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/widget.py
  A   z3c.widget/sandbox/src/z3c/widget/autocomplete/z3c.widget.autocomplete-configure.zcml
  A   z3c.widget/sandbox/src/z3c/widget/namespace/
  A   z3c.widget/sandbox/src/z3c/widget/namespace/README.txt
  A   z3c.widget/sandbox/src/z3c/widget/namespace/__init__.py
  A   z3c.widget/sandbox/src/z3c/widget/namespace/browser.py
  A   z3c.widget/sandbox/src/z3c/widget/namespace/configure.zcml
  A   z3c.widget/sandbox/src/z3c/widget/namespace/namespace.py
  A   z3c.widget/sandbox/src/z3c/widget/namespace/tests.py
  A   z3c.widget/sandbox/src/z3c/widget/namespace/z3c.widget.namespace-configure.zcml

-=-
Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/README.txt
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/README.txt	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/README.txt	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,70 @@
+======================
+ Autocomplete Widgets
+======================
+
+Autocomplete widgets are an alternative to normal select widgets.
+
+  >>> from z3c.widget.autocomplete.widget import AutoCompleteWidget
+
+Let us create a vocabulary.
+
+  >>> from zope.schema.vocabulary import SimpleVocabulary
+  >>> from zope.publisher.browser import TestRequest
+  >>> from zope import schema, component, interface
+  >>> items = ((u'value1',1,u'Title1'),
+  ...          (u'value2',2,u'Title2'),
+  ...          (u'value3',3,u'Title3'))
+  >>> terms = map(lambda i: SimpleVocabulary.createTerm(*i),items)
+  >>> voc = SimpleVocabulary(terms)
+  >>> [term.title for term in voc]
+  [u'Title1', u'Title2', u'Title3']
+  >>> field = schema.Choice(__name__='foo',
+  ...     missing_value=None,
+  ...     vocabulary=voc)
+  >>> request = TestRequest()
+   >>> widget =  AutoCompleteWidget(field, request)
+  >>> widget
+  <z3c.widget.autocomplete.widget.AutoCompleteWidget object at ...>
+  >>> print widget()
+  <input class="textType" id="field.foo" name="field.foo" type="text" value=""  />
+  <div id="field.foo.target" class="autoComplete"></div>
+  <script type="text/javascript">
+  new Ajax.Autocompleter('field.foo','field.foo.target',
+  'http://127.0.0.1/++widget++field.foo/suggestions'
+  ,options={
+  paramName: 'value'
+  });
+  </script>
+
+Let's add some input. Note that the input must match the title of the
+vocabulary term.
+
+  >>> request.form['field.foo']=u'Title1'
+  >>> widget.getInputValue()
+  u'value1'
+
+If we have no matching title a ConversionError is raised.
+
+  >>> request.form['field.foo']=u'Unknown'
+  >>> widget.getInputValue()
+  Traceback (most recent call last):
+  ...
+  ConversionError: ('Invalid value', u'Unknown')
+
+Also the form value is the title of the term with the given value.
+
+  >>> widget._toFormValue('value1')
+  u'Title1'
+
+  >>> suggestions = widget.getSuggestions('Title')
+  >>> [title for title in suggestions]
+  [u'Title1', u'Title2', u'Title3']
+  >>> suggestions = widget.getSuggestions('Title1')
+  >>> [title for title in suggestions]
+  [u'Title1']
+  >>> suggestions = widget.getSuggestions('ABC')
+  >>> [title for title in suggestions]
+  []
+  >>> suggestions = widget.getSuggestions('title')
+  >>> [title for title in suggestions]
+  [u'Title1', u'Title2', u'Title3']


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/__init__.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/__init__.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/__init__.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1 @@
+# package


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/configure.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/configure.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/configure.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:browser="http://namespaces.zope.org/browser"
+           i18n_domain="zope">
+
+ <class class=".widget.AutoCompleteWidget">
+  <allow interface=".interfaces.IAutoCompleteWidget"/>
+ </class>
+
+ 
+ <browser:page
+  for=".interfaces.IAutoCompleteWidget"
+  name="suggestions"
+  template="suggestions.pt"
+  permission="zope.Public"
+  />
+</configure>
\ No newline at end of file


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/README.txt
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/README.txt	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/README.txt	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,62 @@
+=======================
+AutoCompleteWidget Demo
+=======================
+
+This demo packe provides a simple content class which uses the
+z3c autocomplete widget.
+
+    >>> from zope.testbrowser.testing import Browser
+    >>> browser = Browser()
+    >>> browser.handleErrors = False
+    >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+    >>> browser.open('http://localhost/@@contents.html')
+
+It can be added by clicking on the "Autocomplete Widget Demo" link in the
+add menu. And giving it a name.
+
+    >>> link = browser.getLink('Autocomplete Widget Demo')
+    >>> link.click()
+    >>> nameCtrl = browser.getControl(name='new_value')
+    >>> nameCtrl.value = 'mydemo'
+    >>> applyCtrl = browser.getControl('Apply')
+    >>> applyCtrl.click()
+    >>> link = browser.getLink('mydemo')
+    >>> link.click()
+    >>> browser.url
+    'http://localhost/mydemo/@@edit.html'
+
+Let us test the widget rendering by direct access.
+
+    >>> browser.open('http://localhost/mydemo/@@edit.html/++widget++country')
+    >>> print browser.contents
+    <input class="textType" ...
+    </script>
+
+The suggestions are proveded by its own view.    
+
+    >>> browser.open('http://localhost/mydemo/@@edit.html/++widget++country/suggestions')
+    >>> print browser.contents
+
+    >>> browser.open('http://localhost/mydemo/@@edit.html/++widget++country/suggestions?value=a')
+    >>> print browser.contents
+    <BLANKLINE>
+     <ul>
+      <li>United Arab Emirates</li>
+      <li>Andorra</li>
+      <li>Antigua and Barbuda</li>
+      <li>Afghanistan</li>
+      <li>Anguilla</li>
+      <li>Armenia</li>
+      <li>Albania</li>
+      <li>Angola</li>
+      <li>Netherlands Antilles</li>
+      <li>Antarctica</li>
+      <li>American Samoa</li>
+      <li>Argentina</li>
+      <li>Australia</li>
+      <li>Austria</li>
+      <li>Aruba</li>
+      <li>Azerbaijan</li>
+     </ul>
+    <BLANKLINE>
+    <BLANKLINE>


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/__init__.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/__init__.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/__init__.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1 @@
+# package


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/browser.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/browser.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/browser.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,8 @@
+from zope.formlib import form
+from interfaces import IDemoContent
+from z3c.widget.autocomplete.widget import AutoCompleteWidget
+
+class DemoEditForm(form.EditForm):
+    
+    form_fields = form.Fields(IDemoContent)
+    form_fields['country'].custom_widget=AutoCompleteWidget


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/browser.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/configure.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/configure.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/configure.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:browser="http://namespaces.zope.org/browser"
+           i18n_domain="zope">
+
+ <utility
+  provides="zope.schema.interfaces.IVocabularyFactory"
+  component=".countries.territoryVocabularyFactory"
+  name="autocomplete.demo.countries"
+  />
+
+
+ <class class=".content.DemoContent">
+  <require permission="zope.View"
+           interface=".interfaces.IDemoContent"/>
+  <require permission="zope.ManageContent"
+           set_schema=".interfaces.IDemoContent"/>
+ </class>
+
+ <browser:addMenuItem
+  title="Autocomplete Widget Demo"
+  class=".content.DemoContent"
+  permission="zope.ManageContent"
+  />
+
+ <browser:page
+  for=".interfaces.IDemoContent"
+  name="edit.html"
+  class=".browser.DemoEditForm"
+  menu="zmi_views" title="Edit"
+  permission="zope.ManageContent"/>
+
+
+ 
+ </configure>
\ No newline at end of file


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/content.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/content.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/content.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,11 @@
+from persistent import Persistent
+from zope.interface import implements
+from zope.app.container.contained import Contained
+from zope.schema.fieldproperty import FieldProperty
+from interfaces import IDemoContent
+
+class DemoContent(Persistent,Contained):
+
+    implements(IDemoContent)
+    country = FieldProperty(IDemoContent['country'])
+    


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/content.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/countries.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/countries.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/countries.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,85 @@
+from zope.i18n.locales import locales,LOCALEDIR
+from zope.interface import implements
+from zope.i18n.interfaces import ITranslationDomain,INegotiator
+from zope.i18nmessageid.message import MessageFactory
+from zope.schema.vocabulary import SimpleVocabulary,SimpleTerm
+from zope.i18n import interpolate
+
+
+class DisplayNameTranslationDomain(object):
+
+    """base class for displayname based translation domains"""
+    
+    implements(ITranslationDomain)
+    
+    def translate(self, msgid, mapping=None, context=None,
+                  target_language=None, default=None):
+        '''See interface ITranslationDomain'''
+        # Find out what the target language should be
+        if target_language is None and context is not None:
+            # Let's negotiate the language to translate to. :)
+            negotiator = getUtility(INegotiator)
+            target_language = negotiator.getLanguage(LANGS, context)
+        # Find a translation; if nothing is found, use the default
+        # value
+        if default is None:
+            default = msgid
+        displayNames = locales.getLocale(target_language).displayNames
+        text = getattr(displayNames,
+                       self.displayNameAttr).get(msgid,None)
+        if text is None:
+            text = default
+        return interpolate(text, mapping)
+
+class TerritoryTranslationDomain(DisplayNameTranslationDomain):
+
+    """a translation domain which translates territory codes
+
+    >>> d = TerritoryTranslationDomain()
+    >>> d.translate('DE',target_language='de')
+    u'Deutschland'
+    >>> d.translate('DE',target_language='en')
+    u'Germany'
+    """
+    domain='z3c.i18n.iso.territories'
+    displayNameAttr = 'territories'
+
+territoryTranslationDomain = TerritoryTranslationDomain()
+
+_territories = MessageFactory(TerritoryTranslationDomain.domain)
+
+class TerritoryVocabularyFactory(object):
+
+    """a territory vocabulary factory
+
+    The factory has a class attribute with messages from the
+    iso.territory domain as titles
+
+    >>> fac = TerritoryVocabularyFactory()
+    >>> voc = fac(None) 
+    >>> voc
+    <zope.schema.vocabulary.SimpleVocabulary object at ...>
+
+    >>> 'DE' in voc
+    True
+    >>> term = voc.getTerm('DE')
+    >>> term.title.default
+    u'Germany'
+
+    """
+
+    def __init__(self):
+        self.terms = []
+        # excluding fallback etc
+        for key,value in [(key,value) for key,value in
+            locales.getLocale('en').displayNames.territories.items()
+                          if key.upper()==key and len(key)==2]:
+            term = SimpleTerm(key,title=_territories(key,value))
+            self.terms.append(term)
+        self.vocab = SimpleVocabulary(self.terms)
+    
+
+    def __call__(self,context):
+        return self.vocab
+        
+territoryVocabularyFactory = TerritoryVocabularyFactory()


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/countries.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/interfaces.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/interfaces.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/interfaces.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,8 @@
+from zope import interface, schema
+
+class IDemoContent(interface.Interface):
+
+    country = schema.Choice(title=u'Country',
+                            vocabulary='autocomplete.demo.countries')
+    
+    


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/tests.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/tests.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/tests.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,24 @@
+import doctest
+import unittest
+from zope.testing.doctestunit import DocTestSuite
+from zope.app.testing import setup
+from zope import component
+
+def setUp(test):
+    setup.placefulSetUp(True)
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+def test_suite():
+    
+    return unittest.TestSuite(
+        (
+        DocTestSuite('z3c.widget.autocomplete.demo.countries',
+                     setUp=setUp,tearDown=tearDown,
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/z3c.widget.autocomplete.demo-configure.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/z3c.widget.autocomplete.demo-configure.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/z3c.widget.autocomplete.demo-configure.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1 @@
+<include package="z3c.widget.autocomplete.demo" />
\ No newline at end of file


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/demo/z3c.widget.autocomplete.demo-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/ftesting.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/ftesting.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/ftesting.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,36 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:browser="http://namespaces.zope.org/browser"
+           i18n_domain="zope">
+  <include package="zope.app" />
+  <include package="zope.app.server" />
+  <include package="zope.app.authentication" />
+  <include package="zope.app.securitypolicy" file="meta.zcml" />
+  <securityPolicy
+    component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
+  <include package="zope.app.securitypolicy" />
+  <include package="zc.resourcelibrary" file="meta.zcml"/>
+  <include package="zc.resourcelibrary" />
+  <include package="zope.formlib" />
+  <include package="z3c.javascript.prototype"/>
+  <include package="z3c.javascript.scriptaculous"/>
+  <include package="z3c.widget.namespace" />
+  <include package="z3c.widget.autocomplete" />
+  <include package="z3c.widget.autocomplete.demo" />
+  <role id="zope.Anonymous" title="Everybody"
+        description="All users have this role implicitly" />
+  <role id="zope.Manager" title="Site Manager" />
+  <role id="zope.Member" title="Site Member" />
+  <grantAll role="zope.Manager" />
+
+  <principal
+   id="zope.manager"
+   title="Administrator"
+   login="mgr"
+   password="mgrpw" />
+  
+  <grant
+   role="zope.Manager"
+   principal="zope.manager"
+   />
+
+</configure>
\ No newline at end of file


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/ftests.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/ftests.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/ftests.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,13 @@
+from zope.app.testing import functional
+
+functional.defineLayer('TestLayer', 'ftesting.zcml')
+
+def test_suite():
+    suite = functional.FunctionalDocFileSuite(
+        'demo/README.txt',
+        )
+    suite.layer = TestLayer
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/ftests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/interfaces.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/interfaces.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/interfaces.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,11 @@
+from zope import interface
+
+class IAutoCompleteWidget(interface.Interface):
+
+    def getSuggestions(value):
+
+        """returns a list of suggestions for a given value"""
+
+    def __call__():
+
+        """renders the widget"""


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/interfaces.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/suggestions.pt
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/suggestions.pt	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/suggestions.pt	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,6 @@
+<metal:block tal:define="value request/form/value | nothing">
+ <ul tal:condition="value">
+  <li tal:repeat="title python:list(context.getSuggestions(value))"
+      tal:content="title"/>
+ </ul>
+</metal:block>


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/suggestions.pt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/tests.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/tests.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/tests.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,28 @@
+import doctest
+import unittest
+from zope.testing.doctestunit import DocFileSuite
+from zope.app.testing import setup
+from zope import component
+from zope.app.form.interfaces import IInputWidget, IDisplayWidget
+from zope.schema.interfaces import ITextLine
+from zope.app.form.browser import TextWidget
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+def setUp(test):
+    setup.placefulSetUp(True)
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+def test_suite():
+    
+    return unittest.TestSuite(
+        (
+        DocFileSuite('README.txt',
+                     setUp=setUp,tearDown=tearDown,
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/widget.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/widget.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/widget.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,56 @@
+from zope.app.form.browser.widget import SimpleInputWidget
+from zope.app.form.browser.itemswidgets import TranslationHook
+from zope.app.form.interfaces import ConversionError
+from interfaces import IAutoCompleteWidget
+from zope import interface
+
+template = """%(widget_html)s
+<div id="%(id)s.target" class="autoComplete"></div>
+<script type="text/javascript">
+new Ajax.Autocompleter('%(id)s','%(id)s.target',
+'%(formUrl)s/++widget++%(id)s/suggestions'
+,options={
+paramName: 'value'
+});
+</script>
+"""
+
+class AutoCompleteWidget(SimpleInputWidget,TranslationHook):
+
+    interface.implements(IAutoCompleteWidget)
+
+    def __init__(self, context, request):
+        super(AutoCompleteWidget, self).__init__(context, request)
+
+    def __call__(self):
+        from zc import resourcelibrary
+        resourcelibrary.need('z3c.javascript.scriptaculous')
+        widget_html = super(AutoCompleteWidget, self).__call__()
+        
+        return template % {"widget_html": widget_html,
+                           "id": self.name,
+                           "formUrl": self.request.getURL()
+                           }
+
+    def _toFieldValue(self, input):
+        value = super(AutoCompleteWidget,self)._toFieldValue(input)
+        if value == self.context.missing_value:
+            return value
+        for term in self.context.vocabulary:
+            if self.translate(term.title) == value:
+                return term.value
+        raise ConversionError("Invalid value", value)
+        
+    def _toFormValue(self, value):
+        """Converts a field value to a string used as an HTML form value.
+        """
+        if value == self.context.missing_value:
+            return self._missing
+        title = self.context.vocabulary.getTerm(value).title
+        return self.translate(title)
+    
+    def getSuggestions(self,value):
+        for term in self.context.vocabulary:
+            if self.translate(term.title).lower().startswith(value.lower()):
+                yield term.title
+


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/widget.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/autocomplete/z3c.widget.autocomplete-configure.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/autocomplete/z3c.widget.autocomplete-configure.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/autocomplete/z3c.widget.autocomplete-configure.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1 @@
+<include package="z3c.widget.autocomplete"/>
\ No newline at end of file


Property changes on: z3c.widget/sandbox/src/z3c/widget/autocomplete/z3c.widget.autocomplete-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/README.txt
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/README.txt	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/README.txt	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,28 @@
+====================
+The Widget Namespace
+====================
+
+The widget namespace provides a way to traverse to the widgets of a
+formlib form.
+
+  >>> from z3c.widget.namespace.namespace import WidgetHandler
+
+Let us define a form to test this behaviour.
+
+  >>> from zope.formlib import form
+  >>> from zope import interface, schema
+  >>> class IMyContent(interface.Interface):
+  ...     title = schema.TextLine(title=u'Title')
+  >>> class MyContent(object):
+  ...     interface.implements(IMyContent)
+  ...     title=None
+  >>> content = MyContent()
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+  >>> class MyForm(form.EditForm):
+  ...     form_fields = form.Fields(IMyContent)
+  >>> view = MyForm(content,request)
+  >>> handler = WidgetHandler(view,request)
+  >>> handler.traverse('title',None)
+  <zope.app.form.browser.textwidgets.TextWidget object at ...>
+


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/__init__.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/__init__.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/__init__.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1 @@
+# package


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/browser.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/browser.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/browser.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,12 @@
+from zope.publisher.browser import BrowserView
+from zope.security.proxy import removeSecurityProxy
+class WidgetView(BrowserView):
+
+    def __init__(self,context,request):
+        self.context = context
+        self.request = request
+
+    def __call__(self):
+        self.request.response.setHeader('Content-Type','text/html')
+        return removeSecurityProxy(self.context)()
+    


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/browser.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/configure.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/configure.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/configure.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,24 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser">
+
+ <adapter
+  name="widget"
+  provides="zope.traversing.interfaces.ITraversable" for="*"
+  factory=".namespace.WidgetHandler"
+  />
+ 
+ <view
+  name="widget"
+  type="zope.interface.Interface"
+  provides="zope.traversing.interfaces.ITraversable" for="*"
+  factory=".namespace.WidgetHandler"
+  />
+
+ <browser:page
+  for="zope.app.form.browser.interfaces.IWidget"
+  name="index.html"
+  permission="zope.Public"
+  class=".browser.WidgetView"/>
+ 
+</configure>
\ No newline at end of file


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/namespace.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/namespace.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/namespace.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,18 @@
+from zope.traversing.namespace import SimpleHandler
+from zope import component
+from zope.formlib import interfaces
+from zope.security.proxy import removeSecurityProxy
+
+class WidgetHandler(SimpleHandler):
+
+    def __init__(self, context, request=None):
+        self.context = context
+        self.request = request
+
+    def traverse(self, name, ignored):
+        name = name.split('.')[-1]
+        removeSecurityProxy(self.context).update()
+        widget = removeSecurityProxy(self.context).widgets[name]
+        widget.__form__=self.context
+        return widget
+


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/namespace.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/tests.py
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/tests.py	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/tests.py	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1,32 @@
+import doctest
+import unittest
+from zope.testing.doctestunit import DocFileSuite
+from zope.app.testing import setup
+from zope import component
+from zope.app.form.interfaces import IInputWidget, IDisplayWidget
+from zope.schema.interfaces import ITextLine
+from zope.app.form.browser import TextWidget
+from zope.publisher.interfaces.browser import IBrowserRequest
+
+def setUp(test):
+    setup.placefulSetUp()
+    #factory, adapts=None, provides=None, name=''
+    component.provideAdapter(TextWidget,(ITextLine,IBrowserRequest),
+                             IInputWidget)
+    
+
+def tearDown(test):
+    setup.placefulTearDown()
+
+def test_suite():
+    
+    return unittest.TestSuite(
+        (
+        DocFileSuite('README.txt',
+                     setUp=setUp,tearDown=tearDown,
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/tests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: z3c.widget/sandbox/src/z3c/widget/namespace/z3c.widget.namespace-configure.zcml
===================================================================
--- z3c.widget/sandbox/src/z3c/widget/namespace/z3c.widget.namespace-configure.zcml	2006-07-09 09:37:27 UTC (rev 69056)
+++ z3c.widget/sandbox/src/z3c/widget/namespace/z3c.widget.namespace-configure.zcml	2006-07-09 12:35:11 UTC (rev 69057)
@@ -0,0 +1 @@
+<include package="z3c.widget.namespace"/>


Property changes on: z3c.widget/sandbox/src/z3c/widget/namespace/z3c.widget.namespace-configure.zcml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list