From 97c22f2dae52ee112180fdf7f07d570f66160934 Mon Sep 17 00:00:00 2001 From: Ivan Tyagov <ivan@nexedi.com> Date: Fri, 3 Dec 2010 13:52:04 +0000 Subject: [PATCH] Enable instant switching to new pad (i.e. without page refresh). git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@41091 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../Base_viewKnowledgePadMacroLibrary.xml | 19 ++++-- .../ERP5Site_viewHomeAreaRenderer.xml | 1 + .../KnowledgePad_generateAjaxCall.xml | 4 +- .../KnowledgePag_getPadAsJSON.xml | 41 +++++++++--- .../erp5_knowledge_pad/ajax-loader.gif.xml | 63 +++++++++++++++++++ .../erp5_knowledge_box.css.xml | 20 +++++- .../erp5_knowledge_box.js.xml | 17 ++--- bt5/erp5_knowledge_pad/bt/revision | 2 +- 8 files changed, 138 insertions(+), 29 deletions(-) create mode 100644 bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ajax-loader.gif.xml diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml index c155ea8a63..993dc13b2b 100644 --- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml @@ -186,16 +186,16 @@ <li tal:attributes="id dom_id;\n class python: test(is_active, \'tab tab_selected\', \'tab\')">\n \n - <a tal:attributes="href string:\n + <!-- \n + <a tal:attributes="href string:\n ERP5Site_toggleActiveKnowledgePad?knowledge_pad_url=${knowledge_pad_relative_url}&mode=${mode}">\n <span tal:attributes="id pad_title_dom_id;"\n tal:content="knowledge_pad/getTitle"/>\n - </a>\n + </a>-->\n \n -\n -<!-- <span tal:attributes="id pad_title_dom_id;\n + <span tal:attributes="id pad_title_dom_id;\n onclick string:loadPadFromServer(\'${knowledge_pad_relative_url}\', \'${dom_id}\', \'${mode}\')" \n - tal:content="knowledge_pad/getTitle"/>-->\n + tal:content="knowledge_pad/getTitle"/>\n \n <div class="pad-actions"\n tal:attributes="style python: test(is_active, \'display:block\', \'display:none\')">\n @@ -292,7 +292,14 @@ </div>\n </div>\n </tal:block>\n - +\n +<tal:block metal:define-macro="loading_message">\n + <div id="loading-wrapper" style="display:none;">\n + <img src="ajax-loader.gif" title="Loading" alt="Loading"/>\n + <p i18n:translate="" i18n:domain="ui"> Please wait until your changes are being applied. </p>\n + </div>\n +\n +</tal:block> ]]></unicode> </value> </item> diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml index 77750e0370..6a46373395 100644 --- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml @@ -64,6 +64,7 @@ <div id="pad-navigation-wrapper">\n <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/navigation"/>\n </div>\n + <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/loading_message"/>\n <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/knowledge_pad_security_check"/> \n <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/disable_server_integration"/>\n <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/disable_server_integration"/> \n diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_generateAjaxCall.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_generateAjaxCall.xml index 96510d03ae..448d0d405f 100644 --- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_generateAjaxCall.xml +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePad_generateAjaxCall.xml @@ -60,7 +60,7 @@ # asynchronous request and server can set it in context.REQUEST\n from Products.ERP5Type.JSONEncoder import encodeInJson\n current_web_section_url = \'\'\n -current_web_section = context.REQUEST.get(\'current_web_section\', None)\n +current_web_section = context.REQUEST.get(\'current_web_section\', context.getWebSiteValue())\n if current_web_section is not None:\n current_web_section_url = current_web_section.getRelativeUrl()\n if params is None:\n @@ -132,8 +132,8 @@ return s\n <string>Products.ERP5Type.JSONEncoder</string> <string>encodeInJson</string> <string>current_web_section_url</string> - <string>None</string> <string>current_web_section</string> + <string>None</string> <string>isinstance</string> <string>str</string> <string>box_relative_url</string> diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePag_getPadAsJSON.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePag_getPadAsJSON.xml index 3ed5970640..c727376e5d 100644 --- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePag_getPadAsJSON.xml +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/KnowledgePag_getPadAsJSON.xml @@ -51,10 +51,8 @@ <item> <key> <string>_body</string> </key> <value> <string>"""\n - Render an entire PAD plus navigation (XXX)\n - Used to in AJAX calls for instan PAD switching.\n - XXX: rather than return HTML we should return JSON as some parts like JS needs to be evaluated explicitly by\n - browser.\n + Render an entire Pad and needed JavaScript code.\n + Used to make instant Pad switching.\n """\n pad = context.restrictedTraverse(pad_relative_url)\n \n @@ -64,14 +62,26 @@ body = pad.KnowledgePad_viewDashboardWidget(real_context=context)\n # toggle new active pad \n context.ERP5Site_toggleActiveKnowledgePad(pad_relative_url, mode, redirect=False)\n \n -# XXX: generate all JS updater code\n -javascript = \'\'\'updater(\'http://localhost/km/ERP5Site_viewRssGadget\', \'knowledge_pad_module/65/2\', \'visual_2\', \'web_site_module/km_test_web_site\', \'0\', {});\n -updater(\'http://localhost/km/ERP5Site_viewRssGadget\', \'knowledge_pad_module/64/3\', \'visual_3\', \'\', \'0\', {}); \'\'\'\n -\n +# generate needed JavaScript code\n +javascript_list = []\n +for box in pad.objectValues():\n + gadget = box.getSpecialiseValue()\n + gadget_type = gadget.getRenderType()\n + if box.getValidationState() in [\'visible\', \'invisible\'] \\\n + and gadget_type==\'asynchronous\':\n + edit_form_id=gadget.getEditFormId()\n + view_form_id=gadget.getViewFormId()\n + base_url = \'%s/%s\' %(context.absolute_url(), view_form_id) \n + box_dom_id = box.getRelativeUrl().replace(\'/\', \'_\')\n + view_form_dom_id = \'%s_content\' %box_dom_id;\n + javascript_code = pad.KnowledgePad_generateAjaxCall(base_url, box, \\\n + view_form_dom_id, ignore_security_check=1)\n + javascript_list.append(javascript_code)\n +javascript = \'\'.join(javascript_list)\n # return JSON\n result = {\'body\': body,\n - \'javascript\': javascript }\n -return \'%s\' % result\n + \'javascript\': javascript}\n +return result\n </string> </value> </item> <item> @@ -115,6 +125,17 @@ return \'%s\' % result\n <string>pad</string> <string>body</string> <string>False</string> + <string>javascript_list</string> + <string>_getiter_</string> + <string>box</string> + <string>gadget</string> + <string>gadget_type</string> + <string>edit_form_id</string> + <string>view_form_id</string> + <string>base_url</string> + <string>box_dom_id</string> + <string>view_form_dom_id</string> + <string>javascript_code</string> <string>javascript</string> <string>result</string> </tuple> diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ajax-loader.gif.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ajax-loader.gif.xml new file mode 100644 index 0000000000..7eed1108d4 --- /dev/null +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ajax-loader.gif.xml @@ -0,0 +1,63 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Image" module="OFS.Image"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Cacheable__manager_id</string> </key> + <value> <string>http_cache</string> </value> + </item> + <item> + <key> <string>_EtagSupport__etag</string> </key> + <value> <string>ts91383226.96</string> </value> + </item> + <item> + <key> <string>__name__</string> </key> + <value> <string>ajax-loader.gif</string> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>image/gif</string> </value> + </item> + <item> + <key> <string>data</string> </key> + <value> <string encoding="base64">R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH+GkNyZWF0ZWQgd2l0aCBhamF4 +bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAADMwi63P4wyklr +E2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQACgABACwAAAAA +EAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUk +KhIAIfkEAAoAAgAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9 +HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkEAAoAAwAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYum +CYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkEAAoABAAsAAAAABAAEAAAAzII +unInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQACgAF +ACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJ +ibufbSlKAAAh+QQACgAGACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFG +xTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAAKAAcALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdce +CAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==</string> </value> + </item> + <item> + <key> <string>height</string> </key> + <value> <int>16</int> </value> + </item> + <item> + <key> <string>precondition</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>size</string> </key> + <value> <int>673</int> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>ajax-loader.gif</string> </value> + </item> + <item> + <key> <string>width</string> </key> + <value> <int>16</int> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.css.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.css.xml index 2a0e24504c..91509b7577 100644 --- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.css.xml +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.css.xml @@ -12,7 +12,7 @@ </item> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts91368675.54</string> </value> + <value> <string>ts91384188.54</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -40,6 +40,22 @@ margin-top: 0.5em;\n }\n \n +#loading-wrapper{ \n + position:absolute; \n + width:250px; \n + top:80px; \n + left:50%; \n + margin-left:-150px; \n + text-align:center; \n + padding:7px 0 0 0; \n + background-color: #FFF; \n + z-index:1000;\n +} \n +#loading-wrapper p{\n + font-weight: bold;\n + font-size: 90%;\n +}\n +\n /* 3 columng gadget layout */\n div.portal-column {\n float: left;\n @@ -497,7 +513,7 @@ div.gadget-rss-reader .body {\n </item> <item> <key> <string>size</string> </key> - <value> <int>8253</int> </value> + <value> <int>8519</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml index 1103405bf8..09bba48483 100644 --- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml +++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml @@ -12,7 +12,7 @@ </item> <item> <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts91368480.41</string> </value> + <value> <string>ts91383963.02</string> </value> </item> <item> <key> <string>__name__</string> </key> @@ -272,14 +272,15 @@ function showRenamePadPopup(knowledge_pad_relative_url, knowledge_pad_title_dom_ getElement("new_knowledge_pad_title").value = getElement(knowledge_pad_title_dom_id).innerHTML;\n // show rename dialog\n toggleElementById(\'rename_tab_dialog\');\n - // set focus on new Pad title after toggle effect is over \n - setTimeout("MochiKit.DOM.getElement(\'new_knowledge_pad_title\').focus()", 500 );\n + // set focus on new Pad title after toggle effect is over \n + setTimeout("MochiKit.DOM.getElement(\'new_knowledge_pad_title\').focus()", 500 );\n }\n \n function loadPadFromServer(pad_relative_url, selected_pad_dom_id, mode){\n /* Load Pad from server */\n // XXX: show some animation ?\n - \n + getElement("loading-wrapper").style.display="block";\n + \n d = MochiKit.Async.loadJSONDoc(\'KnowledgePag_getPadAsJSON\', \n {\'pad_relative_url\':pad_relative_url,\n \'mode\':mode});\n @@ -291,7 +292,6 @@ function loadPadFromServer(pad_relative_url, selected_pad_dom_id, mode){\n old_selected_pad = getFirstElementByTagAndClassName("li", "tab_selected", pads_container);\n old_selected_pad.setAttribute("class", "tab");\n pad_actions = getFirstElementByTagAndClassName("div", "pad-actions", old_selected_pad);\n -\n pad_actions.style.display="none";\n \n // set new selected pad class \n @@ -314,9 +314,10 @@ function loadPadFromServer(pad_relative_url, selected_pad_dom_id, mode){\n body_element.innerHTML = body;\n // init new Pad\n initialize();\n - // execute JS code\n + // execute JS code provided by server\n eval(javascript);\n - \n + // give some timeout as we can be sometimes two fast loading a tab\n + setTimeout("getElement(\'loading-wrapper\').style.display=\'none\';", 250 );\n }\n }\n \n @@ -500,7 +501,7 @@ MochiKit.DOM.addLoadEvent(initialize);\n </item> <item> <key> <string>size</string> </key> - <value> <int>18522</int> </value> + <value> <int>18734</int> </value> </item> <item> <key> <string>title</string> </key> diff --git a/bt5/erp5_knowledge_pad/bt/revision b/bt5/erp5_knowledge_pad/bt/revision index a557316495..0905ea78ab 100644 --- a/bt5/erp5_knowledge_pad/bt/revision +++ b/bt5/erp5_knowledge_pad/bt/revision @@ -1 +1 @@ -641 \ No newline at end of file +642 \ No newline at end of file -- 2.30.9