ActionBar: check confirm after checks
[kivitendo-erp.git] / js / kivi.ActionBar.js
1 namespace('kivi', function(k){
2   'use strict';
3
4    k.ActionBarAction = function(e) {
5      var data = $(e).data('action');
6
7      if (data.disabled)
8        $(e).addClass('layout-actionbar-action-disabled');
9      // dispatch as needed
10      if (data.submit) {
11        var form   = data.submit[0];
12        var params = data.submit[1];
13        $(e).click(function(event) {
14          var $hidden, key, func, check;
15          if (data.disabled) return;
16          if (data.checks) {
17            for (var i=0; i < data.checks.length; i++) {
18              check = data.checks[i];
19              func = kivi.get_function_by_name(check);
20              if (!func) console.log('Cannot find check function: ' + check);
21              if (!func()) return;
22            }
23          }
24          if (data.confirm && !confirm(data.confirm)) return;
25          for (key in params) {
26            $hidden = $('<input type=hidden>')
27            $hidden.attr('name', key)
28            $hidden.attr('value', params[key])
29            $(form).append($hidden)
30          }
31          $(form).submit()
32        })
33      } else if (data.function) {
34        // TODO: what to do with templated calls
35        $(e).click(function(event) {
36          var func;
37          if (data.disabled) return;
38          if (data.checks) {
39            for (var i=0; i < data.checks.length; i++) {
40              check = data.checks[i];
41              func = kivi.get_function_by_name(check);
42              if (!func) console.log('Cannot find check function: ' + check);
43              if (!func()) return;
44            }
45          }
46          if (data.confirm && !confirm(data.confirm)) return;
47          func = kivi.get_function_by_name(data.function[0]);
48          func.apply(document, data.function.slice(1))
49        });
50      }
51    }
52 });
53
54 $(function(){
55   $('div.layout-actionbar .layout-actionbar-action').each(function(_, e) {
56     kivi.ActionBarAction(e);
57   });
58 });