← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-client-web/save-prompt-action into lp:openobject-client-web

 

vda(Open ERP) has proposed merging lp:~openerp-dev/openobject-client-web/save-prompt-action into lp:openobject-client-web.

Requested reviews:
  OpenERP SA's Web Client R&D (openerp-dev-web)

-- 
https://code.launchpad.net/~openerp-dev/openobject-client-web/save-prompt-action/+merge/38309
Your team OpenERP SA's Web Client R&D is requested to review the proposed merge of lp:~openerp-dev/openobject-client-web/save-prompt-action into lp:openobject-client-web.
=== modified file 'addons/openerp/controllers/templates/form.mako'
--- addons/openerp/controllers/templates/form.mako	2010-10-12 13:56:00 +0000
+++ addons/openerp/controllers/templates/form.mako	2010-10-13 09:56:46 +0000
@@ -48,7 +48,7 @@
     %>
     <li class="${kind}" title="${desc}">
         % if kind in form.screen.view_mode:
-            <a href="#" onclick="switchView('${kind}'); return false;"
+            <a href="#" onclick="validate_action('${kind}',switchView); return false;"
                class="${cls}">${kind}</a>
         % else:
             <a href="#" class="inactive">${kind}</a>

=== modified file 'addons/openerp/static/javascript/form.js'
--- addons/openerp/static/javascript/form.js	2010-10-13 07:15:26 +0000
+++ addons/openerp/static/javascript/form.js	2010-10-13 09:56:46 +0000
@@ -125,8 +125,10 @@
             openobject.dom.get('_terp_id').value = ids[0];
         }
     }
-    var get_action = validate_action('switch', args);
-    submit_form(get_action);
+    submit_form(get_form_action('switch', {
+        '_terp_source': src,
+        '_terp_source_view_type': view_type
+    }));
 }
 
 function switch_O2M(view_type, src){
@@ -250,14 +252,6 @@
     jQuery.fancybox(error, {scrolling: 'no'});
 }
 
-function o2m_pager_action(action, src){
-    var source = src ? (typeof(src) == "string" ? src : src.name) : null;
-    var args = {
-        _terp_source: source
-    }
-    var get_action = validate_action(action, args)
-    submit_form(get_action);
-}
 
 function submit_form(action, src, target){
 
@@ -302,9 +296,11 @@
     $form.submit();
 }
 
-function pager_action(action, src){
-    var get_action = validate_action(action ? action : 'find', {})
-    return src ? new ListView(src).go(action) : submit_form(get_action);
+function pager_action(src){
+    var $src = jQuery(src);
+    var action = $src.attr('action');
+    var relation = $src.attr('relation');
+    return relation ? new ListView(relation).go(action) : submit_form(action ? action : 'find');
 }
 
 function buttonClicked(name, btype, model, id, sure, target, context){
@@ -927,9 +923,17 @@
     window.open(openobject.http.getURL(act, params));
 }
 
-function do_action(action_id, field, relation, src, data, context_menu){
-
+function do_action(src){
+    var $src = jQuery(src);
+    var action_id = $src.attr('action_id');
+    var field = '_terp_id';
+    
+    var relation = $src.attr('relation');
+    var data = $src.attr('data');
     var params = {};
+    
+    var domain = $src.attr('domain');
+    var context = $src.attr('context');
 
     if (openobject.dom.get('_terp_list')) {
         var list = new ListView('_terp_list');
@@ -942,13 +946,11 @@
         params['_terp_selection'] = '[' + ids.join(',') + ']';
     }
 
-    var id = openobject.dom.get(field).value;
-    var domain = getNodeAttribute(src, 'domain');
-    var context = getNodeAttribute(src, 'context');
-    var context_menu = context_menu ? true: null;
+    var id = jQuery('#'+field).val();
+    var source = jQuery('#'+field).attr('id');
 
     var req = eval_domain_context_request({
-        'source': openobject.dom.get(field).id,
+        'source': source,
         'active_id': id,
         'active_ids': params['_terp_selection'],
         'domain': domain,
@@ -964,8 +966,7 @@
             '_terp_context': obj.context,
             '_terp_id': id,
             '_terp_model': relation,
-            'datas': data,
-            'context_menu': context_menu
+            'datas': data
         });
 
         window.open(openobject.http.getURL(act, params));
@@ -1228,21 +1229,36 @@
 }
 
 
-var is_form_changed = false;
 function validateForm(){
-    is_form_changed = false;
     jQuery('#view_form table tr td:first').find('input:not([type=hidden]), select').change(function(){
-        is_form_changed = true;
+        jQuery('#view_form').data('is_form_changed', true);
     });
 }
 
-function validate_action(action, args){
-    var args = args;
-    
-    if (is_form_changed) {
-        if (confirm('The record has been modified \n Do you want to save it ?')) {
-            args['_terp_save_current_id'] = 1;
+function validate_action() {
+    var $form = jQuery('#view_form');
+    var is_form_changed = $form.data('is_form_changed');
+    if ((is_form_changed && confirm('The record has been modified \n Do you want to save it ?'))) {
+        if (!validate_required($form.get(0))) {
+            return false;
         }
-    }
-    return get_form_action(action, args)
-}
+        
+        $form.ajaxSubmit({
+            error: function(xhr, status, error){
+                return displayErrorOverlay(xhr);
+            },
+            async: false,
+            success: function(data, status, xhr){
+                if (arguments.length) {
+                    $form.find('#_terp_id').val(jQuery(xhr.responseText).find('#_terp_id').val());
+                }
+                $form.data('is_form_changed', null);
+            }
+        });
+    }
+    if (arguments.length) {
+        var params = arguments[0];
+        var action = arguments[1];
+        return action(params);
+    }
+}
\ No newline at end of file

=== modified file 'addons/openerp/static/javascript/openerp/openerp.base.js'
--- addons/openerp/static/javascript/openerp/openerp.base.js	2010-10-13 09:08:49 +0000
+++ addons/openerp/static/javascript/openerp/openerp.base.js	2010-10-13 09:56:46 +0000
@@ -104,6 +104,10 @@
     var waitBox;
     var $app = jQuery('#appContent');
     if ($app.length) {
+        jQuery('body').delegate('a[href]:not([target="_blank"]):not([href^="#"]):not([href^="javascript"]):not([rel=external])', 'click', function(){
+            validate_action();
+        });
+        
         waitBox = new openerp.ui.WaitBox();
         // open un-targeted links in #appContent via xhr. Links with @target are considered
         // external links. Ignore hash-links.

=== modified file 'addons/openerp/widgets/form/templates/one2many.mako'
--- addons/openerp/widgets/form/templates/one2many.mako	2010-09-27 06:34:49 +0000
+++ addons/openerp/widgets/form/templates/one2many.mako	2010-10-13 09:56:46 +0000
@@ -25,9 +25,9 @@
                     <td width="65%" style="text-align: left" align="left">
                         <div class="pager">
                             <p id="_${name}_link_span" class="paging">
-                                <a class="prev nav" title="${_('Previous record...')}" href="javascript: void(0)" onclick="o2m_pager_action('previous', '${name}'); return false;"></a>
+                                <a class="prev nav" title="${_('Previous record...')}" href="javascript: void(0)" onclick="submit_form('previous', '${name}');"></a>
                                 ${pager_info}
-                                <a class="next nav" title="${_('Next record...')}" href="javascript: void(0)" onclick="o2m_pager_action('next', '${name}'); return false;"></a>
+                                <a class="next nav" title="${_('Next record...')}" href="javascript: void(0)" onclick="submit_form('next', '${name}');"></a>
                             </p>
                         </div>
                     </td>

=== modified file 'addons/openerp/widgets/templates/pager.mako'
--- addons/openerp/widgets/templates/pager.mako	2010-07-23 06:15:03 +0000
+++ addons/openerp/widgets/templates/pager.mako	2010-10-13 09:56:46 +0000
@@ -4,12 +4,12 @@
 <div class="pager">
     <p id="_${name+str(pager_id)}_link_span" class="paging">
         % if prev:
-        <a href="#first" onclick="pager_action('first', '${name}'); return false;">
+        <a href="#first" action="first" relation="${name}" onclick="validate_action(this, pager_action); return false;">
         % endif
         <span class="first nav">${_("<< First")}</span>
         % if prev:
         </a>
-        <a href="#previous" onclick="pager_action('previous', '${name}'); return false;">
+        <a href="#previous" action="previous" relation="${name}" onclick="validate_action(this, pager_action); return false;">
         % endif
         <span class="prev nav">${_("< Previous")}</span>
         % if prev:
@@ -17,12 +17,12 @@
         % endif
         <span onclick="jQuery('[id=_${name+str(pager_id)}_link_span]').hide(); jQuery('[id=_${name+str(pager_id)}_limit_span]').show();">${page_info}</span>
         % if next:
-        <a href="#next" onclick="pager_action('next', '${name}'); return false;">
+        <a href="#next" action="next" relation="${name}" onclick="validate_action(this, pager_action); return false;">
         % endif
         <span class="next nav">${_("Next >")}</span>
         % if next:
         </a>
-        <a href="#last" onclick="pager_action('last', '${name}'); return false;">
+        <a href="#last" action="last" relation="${name}" onclick="validate_action(this, pager_action); return false;">
         % endif
         <span class="last nav">${_("Last >>")}</span>
         % if next:

=== modified file 'addons/openerp/widgets/templates/sidebar.mako'
--- addons/openerp/widgets/templates/sidebar.mako	2010-10-05 13:19:16 +0000
+++ addons/openerp/widgets/templates/sidebar.mako	2010-10-13 09:56:46 +0000
@@ -1,7 +1,7 @@
 <%def name="sidebox_action_item(item, model, submenu)">
     % if submenu != 1:
-    	<li data="${item}" onclick="do_action(${item['id']}, '_terp_id', '${model}', this, getNodeAttribute(this, 'data'));">
-    	   <a href="javascript: void(0)" onclick="return false">${item['name']}</a>
+    	<li data="${item}" action_id="${item['id']}" relation="${model}" onclick="validate_action(this, do_action)">
+           <a href="javascript: void(0)" onclick="return false">${item['name']}</a>
         </li>
     % else:
         <li data="${item}">


Follow ups