[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