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/