r13792 - in Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField: . browser examples skins/DataGridWidget
"Gauthier Bastien" <[email protected]> Wed, 07 Sep 2011 15:26:46 +0000
| Newsgroups | gmane.comp.web.zope.plone.archetypes.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: gbastien Date: Wed Sep 7 15:26:45 2011 New Revision: 13792 Added: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/AutocompleteColumn.py Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/__init__.py Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/configure.zcml Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/jsonsearchview.py Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_autocomplete_cell.pt Modified: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/__init__.py Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/configure.zcml Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/examples/DataGridDemoType.py Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_help_cell.pt Log: Added autocomplete JQueryUi column Added: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/AutocompleteColumn.py ============================================================================== --- (empty file) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/AutocompleteColumn.py Wed Sep 7 15:26:45 2011 @@ -0,0 +1,53 @@ +""" + + Autocomplete column definition for DataGridField + + Copyright 2011 CommunesPlone.org + + +""" + +from __future__ import nested_scopes +__author__ = "CommunesPlone.org <[email protected]>" +__docformat__ = 'epytext' + + +from AccessControl import ClassSecurityInfo +from App.class_init import InitializeClass +from Products.DataGridField.Column import Column + + +class AutocompleteColumn(Column): + """ Defines an autocomplete column in DataGridField """ + + security = ClassSecurityInfo() + + def __init__(self, title, json_view_params={}, json_view_name="jsonsearchview"): + """ Create an AutocompleteColumn + @param json_view_params parameters. The default jsonsearchview will use + these parameters to query the portal_catalog + @param json_view_name view name. If the default view name returning the result + by querying the portal_catalog does not the job, create your own view + """ + Column.__init__(self, title) + self.json_view_params = json_view_params + self.json_view_name = json_view_name + + security.declarePublic('getMacro') + def getMacro(self): + """ Return macro used to render this column in view/edit """ + return "datagrid_autocomplete_cell" + + security.declarePublic('javascript') + def javascript(self): + return """ +<script type="text/javascript">jQuery(function(){ + // Autocomplete + jq(".DemoField2_autocomplete").autocomplete({ + source: "@@""" + self.json_view_name + "?json_view_params=" + str(self.json_view_params) + """" }); + }); +</script> +""" + +# Initializes class security +InitializeClass(AutocompleteColumn) Modified: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/__init__.py ============================================================================== --- Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/__init__.py (original) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/__init__.py Wed Sep 7 15:26:45 2011 @@ -29,6 +29,7 @@ from Products.DataGridField.DataGridField import FixedRow from Products.DataGridField.Column import Column from Products.DataGridField.SelectColumn import SelectColumn +from Products.DataGridField.AutocompleteColumn import AutocompleteColumn from Products.DataGridField.RadioColumn import RadioColumn from Products.DataGridField.FixedColumn import FixedColumn from Products.DataGridField.LinkColumn import LinkColumn Added: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/__init__.py ============================================================================== --- (empty file) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/__init__.py Wed Sep 7 15:26:45 2011 @@ -0,0 +1 @@ +#Im a python package Added: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/configure.zcml ============================================================================== --- (empty file) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/configure.zcml Wed Sep 7 15:26:45 2011 @@ -0,0 +1,16 @@ +<configure + xmlns="http://namespaces.zope.org/zope" + xmlns:browser="http://namespaces.zope.org/browser" + xmlns:plone="http://namespaces.plone.org/plone" + i18n_domain="urban"> + + <browser:page + for="*" + name="jsonsearchview" + class=".jsonsearchview.JSONSearchView" + permission="zope2.View" + attribute="getData" + /> + +</configure> + Added: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/jsonsearchview.py ============================================================================== --- (empty file) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/browser/jsonsearchview.py Wed Sep 7 15:26:45 2011 @@ -0,0 +1,28 @@ +import json +import logging +from Acquisition import aq_inner +from Products.Five import BrowserView +from Products.CMFCore.utils import getToolByName + +logger = logging.getLogger('Products.DataGridField: jsonsearchview') + +class JSONSearchView(BrowserView): + """ + """ + def getData(self, term): + """ + """ + context = aq_inner(self.context) + json_view_params = context.REQUEST.get('json_view_params', None) + try: + #transform the passed args into a real dict + json_view_params = eval(json_view_params) + except: + logger.error("The parameters passed to the jsonsearchview could not be evaluated to a dict : '%s'" % json_view_params) + return '' + #activate wildcard search + term = '*%s*' % term + portal_catalog = getToolByName(context, 'portal_catalog') + res = portal_catalog(json_view_params, SearchableText=term) + res = [brain.Title for brain in res] + return json.dumps(res) Modified: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/configure.zcml ============================================================================== --- Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/configure.zcml (original) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/configure.zcml Wed Sep 7 15:26:45 2011 @@ -7,6 +7,8 @@ <i18n:registerTranslations directory="locales" /> + <include package=".browser" /> + <genericsetup:registerProfile name="default" title="DataGridField" Modified: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/examples/DataGridDemoType.py ============================================================================== --- Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/examples/DataGridDemoType.py (original) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/examples/DataGridDemoType.py Wed Sep 7 15:26:45 2011 @@ -13,6 +13,7 @@ from Products.DataGridField import DataGridField, DataGridWidget from Products.DataGridField.Column import Column from Products.DataGridField.SelectColumn import SelectColumn +from Products.DataGridField.AutocompleteColumn import AutocompleteColumn from Products.DataGridField.RadioColumn import RadioColumn from Products.DataGridField.CheckboxColumn import CheckboxColumn from Products.DataGridField.FixedColumn import FixedColumn @@ -78,7 +79,7 @@ DataGridField('DemoField2', searchable=True, # One unit tests checks whether text search works - columns=("column1", "column2", "select_sample"), + columns=("column1", "column2", "select_sample", "autocomplete"), widget = DataGridWidget( description="Set default values for created rows. Choose SelectColumn value from the default dictionary", description_msgid='DataGridDemoType_help_DemoField2', @@ -86,7 +87,8 @@ columns={ 'column1' : Column(_(u"Toholampi city rox")), 'column2' : Column(_(u"My friendly name"), default=_(u"Some default text")), - 'select_sample' : SelectColumn(_(u"Friendly name"), vocabulary="getSampleVocabulary", default="sample2") + 'select_sample' : SelectColumn(_(u"Friendly name"), vocabulary="getSampleVocabulary", default="sample2"), + 'autocomplete' : AutocompleteColumn(_(u"Autocomplete"), json_view_params={'portal_type': 'Document', 'review_state': 'published'}, json_view_name="jsonsearchview") }, ), ), Added: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_autocomplete_cell.pt ============================================================================== --- (empty file) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_autocomplete_cell.pt Wed Sep 7 15:26:45 2011 @@ -0,0 +1,49 @@ +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:tal="http://xml.zope.org/namespaces/tal" + xmlns:metal="http://xml.zope.org/namespaces/metal" + xmlns:i18n="http://xml.zope.org/namespaces/i18n" + i18n:domain="plone"> + + +<!-- View/edit free text columns + + --> + +<body> + <!-- VIEW --> + <metal:view_cell_macro define-macro="view_cell"> + <div tal:content="cell_value" /> + </metal:view_cell_macro> + + <!-- EDIT --> + <metal:edit_cell_macro define-macro="edit_cell"> + <input style="width: 100%" name="myfield.name:records" + tal:attributes="name string:${fieldName}.${column}:records; + class string:${fieldName}_autocomplete; + id string:${column}_${fieldId}; + value cell_value; + onchange eventHandler; + " + type="text" /> + </metal:edit_cell_macro> + + <!-- EMPTY EDIT --> + <metal:edit_empty_cell_macro define-macro="edit_empty_cell"> + <tal:javascript_autocomplete replace="structure python: column_definition.javascript()"> + Here come the adapted javascript + </tal:javascript_autocomplete> + <input style="width: 100%" name="myfield.name:records" + tal:attributes="name string:${fieldName}.${column}:records; + id string:${column}_${fieldId}; + value python: column_definition.getDefault(here); + onchange eventHandler; + " + type="text" /> + </metal:edit_empty_cell_macro> + + + +</body> + +</html> + Modified: Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_help_cell.pt ============================================================================== --- Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_help_cell.pt (original) +++ Products.DataGridField/branches/cp-autocompletecolumn/Products/DataGridField/skins/DataGridWidget/datagrid_help_cell.pt Wed Sep 7 15:26:45 2011 @@ -21,9 +21,7 @@ <input style="width: 100%" name="myfield.name:records" onkeypress="handleKeyPress(event);" tal:attributes="name string:${fieldName}.${column}:records; - value cell_value; - tabindex tabindex/next; - " + value cell_value;" type="text" /> </metal:edit_cell_macro> @@ -32,9 +30,7 @@ <input style="width: 100%" name="myfield.name:records" onkeypress="handleKeyPress(event);" tal:attributes=" - name string:${fieldName}.${column}:records; - tabindex tabindex/next; - " + name string:${fieldName}.${column}:records;" type="text" /> <tal:popup tal:define="startup_url python:'/'.join(here.getPhysicalPath()); ------------------------------------------------------------------------------ Using storage to extend the benefits of virtualization and iSCSI Virtualization increases hardware utilization and delivers a new level of agility. Learn what those decisions are and how to modernize your storage and backup environments for virtualization. http://www.accelacomm.com/jaw/sfnl/114/51434361/