[Erp5-report] r33683 ivan - in /erp5/trunk/bt5/erp5_knowledge_pad: SkinTemplateItem/portal_...

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Mar 12 08:48:59 CET 2010


Author: ivan
Date: Fri Mar 12 08:48:59 2010
New Revision: 33683

URL: http://svn.erp5.org?rev=33683&view=rev
Log:
Make ti possible that 2+ gadgets having same preference fields form work in ERP5 like one HTML form name space without conflicting each other (i.e. if two fields for 'field_my_title' exists they are transmitted as a list of two values, now no longer). Trick is to use unique form field prefixes for every gadget preference form.

Modified:
    erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgeBox_baseEdit.xml
    erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_viewColumnWidget.xml
    erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml
    erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/gadget_preference_form_view.xml
    erp5/trunk/bt5/erp5_knowledge_pad/bt/revision

Modified: erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgeBox_baseEdit.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgeBox_baseEdit.xml?rev=33683&r1=33682&r2=33683&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgeBox_baseEdit.xml [utf8] (original)
+++ erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgeBox_baseEdit.xml [utf8] Fri Mar 12 08:48:59 2010
@@ -53,36 +53,43 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string># XXX: How validation\n
+            <value> <string>"""\n
+  This script edits a Knowledge Box instance used for saving a Gadget preferences.\n
+"""\n
+# XXX: How validation\n
 kw = {}\n
 request = context.REQUEST\n
 form = request.form\n
-fields = filter(lambda x: x.startswith(\'field_\'), form.keys())\n
-box_relative_url = request[\'box_relative_url\']\n
+fields = filter(lambda x: x.startswith(form_fields_main_prefix), form.keys())\n
 box = context.restrictedTraverse(box_relative_url)\n
+\n
 # get interesting for us fields and save\n
+listbox_selection_field_prefix = \'%s_my_listbox_selection_\' %form_fields_main_prefix\n
 for field in fields:\n
-#if it\'s a fied in a lisbox gadget it modifies directly the selection\n
-  if field.startswith(\'field_my_listbox_selection_\'):\n
-    portal_selection = getattr(context,\'portal_selections\')\n
+  #if it\'s a fied in a lisbox gadget it modifies directly the selection\n
+  if field.startswith(listbox_selection_field_prefix):\n
+    portal_selection = getattr(context, \'portal_selections\')\n
     selection_name = context.Base_getListboxGadgetSelectionName(box_relative_url)\n
     selection = portal_selection.getSelectionFor(selection_name)\n
     if selection is not None:\n
       params =  selection.getParams()\n
-      params[field.replace(\'field_my_listbox_selection_\',\'\')] = str(form[field])\n
+      params[field.replace(listbox_selection_field_prefix, \'\')] = str(form[field])\n
       portal_selection.setSelectionParamsFor(selection_name, params)\n
-  kw[field.replace(\'field_my_\', \'\')] = form[field]\n
-box.edit(**kw)\n
-dynamic_field_name_for_cancel_url = \'%s_cancel_url\' %box_relative_url.replace(\'/\', \'_\')\n
-if request.get(dynamic_field_name_for_cancel_url, None) is not None:\n
-  # cancel_url is passed in REQUEST\n
-  redirect_url = request[dynamic_field_name_for_cancel_url]\n
-else:\n
+  kw[field.replace(\'%s_my_\' %form_fields_main_prefix, \'\')] = form[field]\n
+\n
+# determine redirect URL as passed from gadget preference form\n
+redirect_url = kw.pop(\'%s_cancel_url\' %form_fields_main_prefix, None)\n
+if redirect_url is None:\n
   # taking URL1 as the base of the original URL. \n
   # it works for both synchronous and  asynchronous gadgets\n
   redirect_url = request[\'URL1\']\n
+  \n
+# edit\n
+box.edit(**kw)\n
+\n
 request.RESPONSE.redirect(\'%s?portal_status_message=%s\'\n
-                           %(redirect_url, context.Base_translateString(\'Preference updated.\')))\n
+                           %(redirect_url, \n
+                             context.Base_translateString(\'Preference updated.\')))\n
 </string> </value>
         </item>
         <item>
@@ -93,7 +100,7 @@
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>cancel_url=None</string> </value>
+            <value> <string>form_fields_main_prefix, box_relative_url</string> </value>
         </item>
         <item>
             <key> <string>errors</string> </key>
@@ -113,13 +120,14 @@
                   <dictionary>
                     <item>
                         <key> <string>co_argcount</string> </key>
-                        <value> <int>1</int> </value>
+                        <value> <int>2</int> </value>
                     </item>
                     <item>
                         <key> <string>co_varnames</string> </key>
                         <value>
                           <tuple>
-                            <string>cancel_url</string>
+                            <string>form_fields_main_prefix</string>
+                            <string>box_relative_url</string>
                             <string>kw</string>
                             <string>_getattr_</string>
                             <string>context</string>
@@ -127,9 +135,8 @@
                             <string>form</string>
                             <string>filter</string>
                             <string>fields</string>
-                            <string>_getitem_</string>
-                            <string>box_relative_url</string>
                             <string>box</string>
+                            <string>listbox_selection_field_prefix</string>
                             <string>_getiter_</string>
                             <string>field</string>
                             <string>getattr</string>
@@ -139,10 +146,10 @@
                             <string>None</string>
                             <string>params</string>
                             <string>str</string>
+                            <string>_getitem_</string>
                             <string>_write_</string>
+                            <string>redirect_url</string>
                             <string>_apply_</string>
-                            <string>dynamic_field_name_for_cancel_url</string>
-                            <string>redirect_url</string>
                           </tuple>
                         </value>
                     </item>
@@ -154,9 +161,7 @@
         <item>
             <key> <string>func_defaults</string> </key>
             <value>
-              <tuple>
-                <none/>
-              </tuple>
+              <none/>
             </value>
         </item>
         <item>

Modified: erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_viewColumnWidget.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_viewColumnWidget.xml?rev=33683&r1=33682&r2=33683&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_viewColumnWidget.xml [utf8] (original)
+++ erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_viewColumnWidget.xml [utf8] Fri Mar 12 08:48:59 2010
@@ -115,38 +115,42 @@
                       i18n:domain="ui">Server side error.</span>\n
               </tal:block>\n
 \n
-              <tal:block tal:condition="python: edit_form_object is not None">\n
-                <form action="KnowledgeBox_baseEdit"\n
-                      tal:condition="not: is_asynchronous_gadget"\n
-                      tal:define="box_relative_url python: box.getRelativeUrl();">\n
-                  <div>\n
-                    <span tal:replace="structure python: edit_form_object()"/>\n
-                    <input type="hidden" \n
-                           name="box_relative_url" \n
-                           tal:attributes="value box_relative_url"/>\n
-                    <input type="hidden" \n
-                           name="cancel_url" \n
-                           tal:attributes="value cancel_url;\n
-                             name python: \'%s_cancel_url\' \n
-                                         %box_relative_url.replace(\'/\', \'_\')"/> \n
-                    <button type="submit"\n
-                            i18n:translate="" \n
-                            i18n:domain="ui" \n
-                            name="KnowledgeBox_baseEdit:method">Save</button>\n
-                  </div>\n
-                </form>\n
+              <tal:block tal:condition="python: edit_form_object is not None"\n
+                         tal:define="box_relative_url python: box.getRelativeUrl();\n
+                                     form_fields_main_prefix python: \'gadget_preference_%s_field\' %box_relative_url.replace(\'/\', \'_\');">\n
+\n
+                <!-- render edit gadget preferences form -->\n
+                <span tal:replace="structure python: edit_form_object(key_prefix=form_fields_main_prefix)"/>\n
+\n
+                <tal:block tal:condition="not: is_asynchronous_gadget">\n
+\n
+                      <input type="hidden" \n
+                             name="cancel_url" \n
+                             tal:attributes="value cancel_url;\n
+                               name python: \'%s_cancel_url\' %form_fields_main_prefix"/>\n
+                      <button type="submit"\n
+                              i18n:translate="" \n
+                              i18n:domain="ui"\n
+                              tal:attributes="onclick python: \n
+                                \'submitSynchronousGadgetPreferenceForm(\\\'%s\\\',\\\'%s\\\')\' \n
+                                  %(form_fields_main_prefix, box_relative_url)">Save</button>\n
+\n
+                </tal:block>\n
 \n
                 <tal:block tal:condition="is_asynchronous_gadget">\n
-                  <span tal:replace="structure python: edit_form_object()"/>\n
+\n
                   <button type="button" \n
                           i18n:translate="" \n
                           i18n:domain="ui"\n
                           tal:attributes="onclick python: \n
-                                 \'sendPreferencesToServer(\\\'%s\\\', \\\'%s\\\', \\\'%s\\\', \\\'%s\\\')\'\n
-                                                           %(edit_form_dom_id, \n
-                                                             view_form_id, \n
-                                                             box.getRelativeUrl(), \n
-                                                             view_form_dom_id)">Save</button>\n
+                                 \'submitAsynchronousGadgetPreferenceForm(\n
+                                    \\\'%s\\\', \\\'%s\\\', \\\'%s\\\', \\\'%s\\\', \\\'%s\\\')\'\n
+                                    %(edit_form_dom_id, \n
+                                      view_form_id, \n
+                                      box_relative_url, \n
+                                      view_form_dom_id,\n
+                                      form_fields_main_prefix)">Save</button>\n
+\n
                 </tal:block>\n
               </tal:block>\n
             </tal:block>\n

Modified: erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml?rev=33683&r1=33682&r2=33683&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml [utf8] (original)
+++ erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml [utf8] Fri Mar 12 08:48:59 2010
@@ -15,7 +15,7 @@
         </item>
         <item>
             <key> <string>_EtagSupport__etag</string> </key>
-            <value> <string>ts66498134.37</string> </value>
+            <value> <string>ts68379872.09</string> </value>
         </item>
         <item>
             <key> <string>__name__</string> </key>
@@ -157,12 +157,32 @@
       checkForActivitiesOnServer(timeout, return_url);};\n
 };\n
 \n
-\n
-function sendPreferencesToServer(form_dom_id, view_form_url, \n
-                                 box_relative_url, visual_block_dom_id){\n
+function submitSynchronousGadgetPreferenceForm(\n
+                                form_fields_main_prefix, \n
+                                box_relative_url){\n
+  /* this will add respective gadget knowledge box relative url and\n
+     gadget ERP5 preference form field_prefix (so multiple gadgets can \n
+     safely coexist in one HTML page with one HTML form */\n
+  appendChildNodes(document.forms[0], \n
+                   INPUT({\'value\':box_relative_url, \n
+                          \'name\': \'box_relative_url\', \n
+                          \'type\':\'hidden\'}));\n
+  appendChildNodes(document.forms[0], \n
+                   INPUT({\'value\':form_fields_main_prefix, \n
+                          \'name\': \'form_fields_main_prefix\', \n
+                          \'type\':\'hidden\'}));\n
+  clickSaveButton(\'KnowledgeBox_baseEdit\');\n
+};\n
+\n
+function submitAsynchronousGadgetPreferenceForm(\n
+                                 form_dom_id, \n
+                                 view_form_url, \n
+                                 box_relative_url, \n
+                                 visual_block_dom_id, \n
+                                 form_fields_main_prefix){\n
   // iterate over all possible form elements within edit form,\n
   // collect them and send to server\n
-  var request_str = "?box_relative_url=" + box_relative_url+ \'&\';\n
+  var request_str = "?box_relative_url=" + box_relative_url+ "&form_fields_main_prefix=" + form_fields_main_prefix + "&";\n
   var url="KnowledgeBox_baseEdit";\n
   forEach(getElementsByTagAndClassName(\'input\', null, form_dom_id) , function (item) {\n
     if (item.type == "checkbox"){\n
@@ -379,7 +399,7 @@
         </item>
         <item>
             <key> <string>size</string> </key>
-            <value> <long>13542</long> </value>
+            <value> <long>14577</long> </value>
         </item>
         <item>
             <key> <string>title</string> </key>

Modified: erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/gadget_preference_form_view.xml
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/gadget_preference_form_view.xml?rev=33683&r1=33682&r2=33683&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/gadget_preference_form_view.xml [utf8] (original)
+++ erp5/trunk/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/gadget_preference_form_view.xml [utf8] Fri Mar 12 08:48:59 2010
@@ -61,7 +61,7 @@
                          global preferred_html_style_translator_mode     \n
                                       preferred_html_style_developper_mode;\n
                          original_editable_mode python: request.get(\'editable_mode\', 0);\n
-                         dummy python: request.set(\'editable_mode\',1);">\n
+                         dummy python: request.set(\'editable_mode\', 1);">\n
     <!-- Set unconditionally editable_mode to True and return back to original after\n
          form is rendered. -->\n
     <tal:block  metal:use-macro="here/form_render/macros/master" />\n

Modified: erp5/trunk/bt5/erp5_knowledge_pad/bt/revision
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_knowledge_pad/bt/revision?rev=33683&r1=33682&r2=33683&view=diff
==============================================================================
--- erp5/trunk/bt5/erp5_knowledge_pad/bt/revision [utf8] (original)
+++ erp5/trunk/bt5/erp5_knowledge_pad/bt/revision [utf8] Fri Mar 12 08:48:59 2010
@@ -1,1 +1,1 @@
-485
+488




More information about the Erp5-report mailing list