diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt index 82c5ba6192f7b41ac76cdc8aad6487a50ef387ee..21beeb8b84fd73b0da868ceab3dce9a8cbc41c85 100644 --- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt +++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt @@ -56,7 +56,7 @@ <!-- Initialize --> <tr> <td>waitForElementPresent</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td></td> </tr> @@ -64,7 +64,7 @@ <tr> <td>type</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td>123</td> </tr> @@ -84,14 +84,14 @@ <tr> <td>waitForElementPresent</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td></td> </tr> <tr> <td>verifyValue</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td>123</td> </tr> diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.xml b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ef90a3d1cc1fe280edec5928492662d66350ee7 --- /dev/null +++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.xml @@ -0,0 +1,58 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>expand</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>testSaveAndLoadMultiline</string> </value> + </item> + <item> + <key> <string>output_encoding</string> </key> + <value> <string>utf-8</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <unicode></unicode> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.zpt new file mode 100644 index 0000000000000000000000000000000000000000..fd84469294fd72e48708299ed1b315bf087be004 --- /dev/null +++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.zpt @@ -0,0 +1,115 @@ +<html xmlns:tal="http://xml.zope.org/namespaces/tal" + xmlns:metal="http://xml.zope.org/namespaces/metal"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>Test Gadget Field</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">Test Gadget Field</td></tr> +</thead><tbody> +<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" /> + + <tr> + <td>open</td> + <td>${base_url}/bar_module/ListBoxZuite_reset</td> + <td></td> +</tr> + +<tr> + <td>assertTextPresent</td> + <td>Reset Successfully.</td> + <td></td> +</tr> + +<tr> + <td>open</td> + <td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>Created Successfully.</td> + <td></td> +</tr> + +<tr> + <td>open</td> + <td>${base_url}/bar_module/Zuite_waitForActivities</td> + <td></td> +</tr> +<tr> + <td>assertTextPresent</td> + <td>Done.</td> + <td></td> +</tr> + +<tr> + <td>open</td> + <td>${base_url}/bar_module/0/Bar_viewGadgetField</td> + <td></td> +</tr> + + + +<!-- Initialize --> +<tr> + <td>waitForElementPresent</td> + <td>//textarea[@title='field_my_description']</td> + <td></td> +</tr> + + + +<tr> + <td>type</td> + <td>//textarea[@title='field_my_description']</td> + <td>123 +456</td> +</tr> + + + +<tr> + <td>clickAndWait</td> + <td>//button[@title='Save']</td> + <td></td> +</tr> +<tr> + <td>verifyPortalStatusMessage</td> + <td>Data updated.</td> + <td></td> +</tr> + + +<tr> + <td>waitForElementPresent</td> + <td>//textarea[@title='field_my_description']</td> + <td></td> +</tr> + + +<tr> + <td>verifyValue</td> + <td>//textarea[@title='field_my_description']</td> + <td>123 +456</td> +</tr> + + <tr> + <td>open</td> + <td>${base_url}/bar_module/0/Bar_representDescription</td> + <td></td> +</tr> + +<tr> + <td>assertTextPresent</td> + <td>'123\n456'</td> + <td></td> +</tr> + + +</tbody></table> +</body> +</html> \ No newline at end of file diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt index 330ddd2996f11ac4794747af1f61ad3fdf54daee..f3bc1b7f99d7d92c8bcbb7891f734981e6cc0d63 100644 --- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt +++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt @@ -117,7 +117,7 @@ <tr> <td>waitForElementPresent</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td></td> </tr> @@ -129,7 +129,7 @@ <tr> <td>type</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td>relationFieldTest</td> </tr> @@ -149,7 +149,7 @@ <tr> <td>waitForElementPresent</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td></td> </tr> @@ -161,14 +161,14 @@ <tr> <td>verifyValue</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td>relationFieldTest</td> </tr> <tr> <td>type</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td>relationFieldTestSuite</td> </tr> @@ -199,7 +199,7 @@ <tr> <td>waitForElementPresent</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td></td> </tr> @@ -211,7 +211,7 @@ <tr> <td>verifyValue</td> - <td>//input[@title='field_my_description']</td> + <td>//textarea[@title='field_my_description']</td> <td>relationFieldTestSuite</td> </tr> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.py b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.py new file mode 100644 index 0000000000000000000000000000000000000000..4c9da44c80e0928cb2f58f6da09bc9a594d0a970 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.py @@ -0,0 +1 @@ +return '%r' % context.getDescription() diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.xml new file mode 100644 index 0000000000000000000000000000000000000000..69915b804e6decc83599919a09c9069237399d24 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.xml @@ -0,0 +1,62 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="PythonScript" module="Products.PythonScripts.PythonScript"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>Script_magic</string> </key> + <value> <int>3</int> </value> + </item> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_container</string> </key> + <value> <string>container</string> </value> + </item> + <item> + <key> <string>name_context</string> </key> + <value> <string>context</string> </value> + </item> + <item> + <key> <string>name_m_self</string> </key> + <value> <string>script</string> </value> + </item> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_params</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>Bar_representDescription</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml index 095983a60e0b4ce5dab6d60b5952172e2cafe7f1..c29459a6e7171745dd8bb5f030086616102fd4e3 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml @@ -67,7 +67,10 @@ <item> <key> <string>hidden</string> </key> <value> - <list/> + <list> + <string>textarea_validator</string> + <string>stringfield_validator</string> + </list> </value> </item> <item> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml index 568ae37ec3b4f14225f54bd083cdb07797ece3fc..5f01704a3e61b53e2dcab2adff57828095072484 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml @@ -10,8 +10,9 @@ <key> <string>delegated_list</string> </key> <value> <list> - <string>title</string> <string>gadget_url</string> + <string>title</string> + <string>validator_field_id</string> </list> </value> </item> @@ -71,6 +72,10 @@ <key> <string>target</string> </key> <value> <string></string> </value> </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> </dictionary> </value> </item> @@ -86,6 +91,10 @@ <key> <string>form_id</string> </key> <value> <string>Base_viewFieldLibrary</string> </value> </item> + <item> + <key> <string>gadget_url</string> </key> + <value> <string></string> </value> + </item> <item> <key> <string>target</string> </key> <value> <string>Click to edit the target</string> </value> @@ -94,6 +103,10 @@ <key> <string>title</string> </key> <value> <string>Description</string> </value> </item> + <item> + <key> <string>validator_field_id</string> </key> + <value> <string>textarea_validator</string> </value> + </item> </dictionary> </value> </item> @@ -108,7 +121,7 @@ <dictionary> <item> <key> <string>_text</string> </key> - <value> <string>python: field.restrictedTraverse(\'gadget_stringfield.html\').absolute_url()</string> </value> + <value> <string>python: field.restrictedTraverse(\'gadget_textareafield.html\').absolute_url()</string> </value> </item> </dictionary> </pickle> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml index 8f7886bffc81609d7fdeba88d32d23067bc6c0b8..f4421c09a8eb65dca741e3d892f8e49d4ca20e7d 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml @@ -188,6 +188,10 @@ <key> <string>title</string> </key> <value> <string>File</string> </value> </item> + <item> + <key> <string>validator_field_id</string> </key> + <value> <string>stringfield_validator</string> </value> + </item> </dictionary> </value> </item> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml index 5a10cd9b43b00ac64908fa40963f142507d820a5..7fd70039618a3000b92b527cd3cbd8b03ef7b008 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml @@ -184,6 +184,18 @@ <key> <string>js_sandbox</string> </key> <value> <string></string> </value> </item> + <item> + <key> <string>max_length</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>max_linelength</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>max_lines</string> </key> + <value> <string></string> </value> + </item> <item> <key> <string>required</string> </key> <value> <int>0</int> </value> @@ -192,6 +204,18 @@ <key> <string>title</string> </key> <value> <string>Language</string> </value> </item> + <item> + <key> <string>unicode</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>validator_field_id</string> </key> + <value> <string>stringfield_validator</string> </value> + </item> + <item> + <key> <string>whitespace_preserve</string> </key> + <value> <int>0</int> </value> + </item> </dictionary> </value> </item> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml index 0bc6b7b6fef65811fd53749b425242f7ff9e44a5..20133e3800777d1b80b00c4eb9803fb2259b3d1f 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml @@ -136,6 +136,10 @@ <key> <string>css_class</string> </key> <value> <string></string> </value> </item> + <item> + <key> <string>data_url</string> </key> + <value> <int>0</int> </value> + </item> <item> <key> <string>default</string> </key> <value> <string></string> </value> @@ -160,6 +164,10 @@ <key> <string>enabled</string> </key> <value> <int>1</int> </value> </item> + <item> + <key> <string>external_validator</string> </key> + <value> <string></string> </value> + </item> <item> <key> <string>extra</string> </key> <value> <string></string> </value> @@ -180,6 +188,10 @@ <key> <string>title</string> </key> <value> <string>Right</string> </value> </item> + <item> + <key> <string>validator_field_id</string> </key> + <value> <string>stringfield_validator</string> </value> + </item> </dictionary> </value> </item> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/stringfield_validator.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/stringfield_validator.xml new file mode 100644 index 0000000000000000000000000000000000000000..d6b5bb1db1472ba139b45383c296c124f69acf19 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/stringfield_validator.xml @@ -0,0 +1,78 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>delegated_list</string> </key> + <value> + <list/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>stringfield_validator</string> </value> + </item> + <item> + <key> <string>message_values</string> </key> + <value> + <dictionary> + <item> + <key> <string>external_validator_failed</string> </key> + <value> <string>The input failed the external validator.</string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>overrides</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>tales</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>values</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string>my_view_mode_title</string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string>Base_viewFieldLibrary</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/textarea_validator.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/textarea_validator.xml new file mode 100644 index 0000000000000000000000000000000000000000..c0aa03df1bbf016d3d7a88bde617e07d0b67c543 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/textarea_validator.xml @@ -0,0 +1,78 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ProxyField" module="Products.ERP5Form.ProxyField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>delegated_list</string> </key> + <value> + <list/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>textarea_validator</string> </value> + </item> + <item> + <key> <string>message_values</string> </key> + <value> + <dictionary> + <item> + <key> <string>external_validator_failed</string> </key> + <value> <string>The input failed the external validator.</string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>overrides</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>tales</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>values</string> </key> + <value> + <dictionary> + <item> + <key> <string>field_id</string> </key> + <value> <string>my_view_mode_description</string> </value> + </item> + <item> + <key> <string>form_id</string> </key> + <value> <string>Base_viewFieldLibrary</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html index 09e890dce78cd39ce4fa1e6b860a22c1b246847f..b4294d35b60125361cdde975d4b74ae875d57e75 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html @@ -10,7 +10,5 @@ <script src="gadget_create_manual_dataurl.js" type="text/javascript"></script> </head> - <body> - <input type='text'/> - </body> + <body><input type='text'/></body> </html> \ No newline at end of file diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js index ea5b96d0976382d5760f712866138200302f1c6e..5e971a0850a6c073e6b5842aca155ef2cfc44ce4 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js @@ -4,29 +4,19 @@ "use strict"; rJS(window) - .ready(function (g) { - g.props = {}; - }) - .ready(function (g) { - return g.getElement() - .push(function (element) { - g.props.element = element; - }); - }) .declareMethod('render', function (options) { var gadget = this; - gadget.props.key = options.key || ""; - gadget.props.element.querySelector('input').value = options.value; - gadget.props.element.querySelector('input').title = options.key; + gadget.element.querySelector('input').key = options.key || ""; + gadget.element.querySelector('input').value = options.value; + gadget.element.querySelector('input').title = options.key; }) .declareMethod('getContent', function () { - var input = this.props.element.querySelector('input'), + var input = this.element.querySelector('input'), form_gadget = this, result = {}; if (input.value) { - result[form_gadget.props.key] = "data:text/plain;base64," - + btoa(input.value); + result[input.key] = "data:text/plain;base64," + btoa(input.value); } return result; }); diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html index 2663d2017774d9fdf0d0028131368e1c886cc8f1..57c3a10abef6266ee257a5b7d5ae534c977669cc 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html @@ -12,7 +12,5 @@ <script src="gadget_stringfield.js" type="text/javascript"></script> </head> - <body> - <input type='text'/> - </body> + <body><input type='text'/></body> </html> \ No newline at end of file diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js index 1c58b710256b9818bd1c9581a66eef020b55d29f..c474544f6c5c1b3ac5b6b4a94aff99649539ae11 100644 --- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js @@ -4,26 +4,18 @@ "use strict"; rJS(window) - .ready(function (g) { - g.props = {}; - }) - .ready(function (g) { - return g.getElement() - .push(function (element) { - g.props.element = element; - }); - }) .declareMethod('render', function (options) { - this.props.key = options.key || ""; - this.props.element.querySelector('input').value = options.value || ""; - this.props.element.querySelector('input').title = options.key; + this.element.firstChild.value = options.value || ""; + this.element.firstChild.title = options.key; + this.element.firstChild.setAttribute('data-name', + options.key || ""); }) .declareMethod('getContent', function () { - var input = this.props.element.querySelector('input'), + var input = this.element.firstChild, form_gadget = this, result = {}; - result[form_gadget.props.key] = input.value; + result[input.getAttribute('data-name')] = input.value; return result; }); diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.html b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.html new file mode 100644 index 0000000000000000000000000000000000000000..553ffba545e8e492cb4027845d1fb85ffd904261 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.html @@ -0,0 +1,16 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>ERP5 Textareafield</title> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + <!-- custom script --> + <script src="gadget_textareafield.js" type="text/javascript"></script> + + </head> + <body><textarea></textarea></body> +</html> \ No newline at end of file diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.xml new file mode 100644 index 0000000000000000000000000000000000000000..406aa649544e05ab6718a685a382ca092ad1da86 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Cacheable__manager_id</string> </key> + <value> <string>http_cache</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>gadget_textareafield.html</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.js b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.js new file mode 100644 index 0000000000000000000000000000000000000000..c474544f6c5c1b3ac5b6b4a94aff99649539ae11 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.js @@ -0,0 +1,22 @@ +/*global window, rJS*/ +/*jslint nomen: true, maxlen:80, indent:2*/ +(function (rJS) { + "use strict"; + + rJS(window) + .declareMethod('render', function (options) { + this.element.firstChild.value = options.value || ""; + this.element.firstChild.title = options.key; + this.element.firstChild.setAttribute('data-name', + options.key || ""); + }) + + .declareMethod('getContent', function () { + var input = this.element.firstChild, + form_gadget = this, + result = {}; + result[input.getAttribute('data-name')] = input.value; + return result; + }); + +}(rJS)); \ No newline at end of file diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.xml new file mode 100644 index 0000000000000000000000000000000000000000..fce38274fac55bfd831ac5f6d6476038a8103b05 --- /dev/null +++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.xml @@ -0,0 +1,32 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="File" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Cacheable__manager_id</string> </key> + <value> <string>http_cache</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>gadget_textareafield.js</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>application/javascript</string> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/product/ERP5Form/GadgetField.py b/product/ERP5Form/GadgetField.py index 9167ad6243a92f50984fc134ea268e8b4281d9be..ae755ac4597cdb2c60c1f107e35a0735f0db5d71 100644 --- a/product/ERP5Form/GadgetField.py +++ b/product/ERP5Form/GadgetField.py @@ -28,7 +28,7 @@ class GadgetWidget(Widget.Widget): required=0) def render(self, field, key, value, REQUEST, render_prefix=None): - return self.render_view(field, value, REQUEST, render_prefix, key) + return self.render_view(field, value, REQUEST, render_prefix, key) def render_view(self, field, value, REQUEST=None, render_prefix=None, key=None): kw = { @@ -56,7 +56,10 @@ class GadgetWidget(Widget.Widget): class GadgetFieldValidator(Validator.Validator): - property_names = Validator.Validator.property_names + ['data_url'] + property_names = Validator.Validator.property_names + [ + 'data_url', + 'validator_field_id' + ] data_url = fields.CheckBoxField('data_url', title='Data Url', @@ -64,8 +67,38 @@ class GadgetFieldValidator(Validator.Validator): "Checked if gadget return data url."), default=0) + validator_field_id = fields.StringField( + 'validator_field_id', + title='Field ID', + description= "Field used to validate REQUEST form data.", + default="", + display_width=40, + required=0 + ) + + message_names = Validator.Validator.message_names + ['no_validator'] + + no_validator = 'Does not support this operation.' + + def getValidatorField(self, field): + """Get an external validator field located in the same form. + """ + field_id = field.id + validator_field_id = field.get_value('validator_field_id') + if validator_field_id: + if field.aq_parent.has_field(validator_field_id, + include_disabled=1): + return field.aq_parent.get_field(validator_field_id, + include_disabled=1) + return None + def validate(self, field, key, REQUEST): - value = REQUEST.get(key, None) + validator_field = self.getValidatorField(field) + if validator_field is None: + # not editable if no validator + self.raise_error('no_validator', field) + else: + value = validator_field._validate_helper(key, REQUEST) if value is not None: if field.get_value('data_url'): value=value.split(",")[1]