ActionBar: calling conventions geƤndert, +check/disabled/confirm
[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;
15          if (data.disabled) return;
16          if (data.confirm && !confirm(data.confirm)) return;
17          if (data.checks) {
18            for (var check in data.check) {
19              func = kivi.get_function_by_name(check);
20              if (!func()) return;
21            }
22          }
23          for (key in params) {
24            $hidden = $('<input type=hidden>')
25            $hidden.attr('name', key)
26            $hidden.attr('value', params[key])
27            $(form).append($hidden)
28          }
29          $(form).submit()
30        })
31      } else if (data.function) {
32        // TODO: what to do with templated calls
33        console.log(data.function)
34        $(e).click(function(event) {
35          var func;
36          if (data.disabled) return;
37          if (data.confirm && !confirm(data.confirm)) return;
38          if (data.checks) {
39            for (var check in data.check) {
40              func = kivi.get_function_by_name(check);
41              if (!func()) return;
42            }
43          }
44          func = kivi.get_function_by_name(data.function[0]);
45          func.apply(document, data.function.slice(1))
46        });
47      }
48    }
49 });
50
51 $(function(){
52   $('div.layout-actionbar .layout-actionbar-action').each(function(_, e) {
53     kivi.ActionBarAction(e);
54   });
55 });