epic-s6ts
[kivitendo-erp.git] / js / client_js.js
index 031b5c8..c9a1524 100644 (file)
@@ -4,35 +4,58 @@
 // "scripts/generate_client_js_actions.pl". See the documentation for
 // SL/ClientJS.pm for instructions.
 
-function display_flash(type, message) {
+namespace("kivi", function(ns) {
+ns.display_flash = function(type, message, noscroll) {
   $('#flash_' + type + '_content').text(message);
   $('#flash_' + type).show();
-}
-
-function eval_json_result(data) {
+  if (!noscroll && $('#frame-header')[0]) {
+    $('#frame-header')[0].scrollIntoView();
+  }
+};
+
+ns.display_flash_detail = function(type, message) {
+  $('#flash_' + type + '_detail').html(message);
+  $('#flash_' + type + '_disp').show();
+};
+
+ns.clear_flash = function(category , timeout) {
+  window.setTimeout(function(){
+    $('#flash_' + category).hide();
+    $('#flash_detail_' + category).hide();
+    $('#flash_' + category + '_disp').hide();
+    $('#flash_' + category + '_content').empty();
+    $('#flash_' + category + '_detail').empty();
+  }, timeout);
+};
+
+ns.eval_json_result = function(data) {
   if (!data)
     return;
 
   if (data.error)
-    return display_flash('error', data.error);
-
-  $('#flash_error').hide();
-  $('#flash_error_content').empty();
-
-  if ((data.js || '') != '')
+    return ns.display_flash('error', data.error);
+
+  if (!data.no_flash_clear) {
+    $(['info', 'warning', 'error']).each(function(idx, category) {
+      $('#flash_' + category).hide();
+      $('#flash_detail_' + category).hide();
+      $('#flash_' + category + '_disp').hide();
+      $('#flash_' + category + '_content').empty();
+      $('#flash_' + category + '_detail').empty();
+    });
+  }
+  if ((data.js || '') !== '')
+    // jshint -W061
     eval(data.js);
+    // jshint +W061
 
   if (data.eval_actions)
     $(data.eval_actions).each(function(idx, action) {
       // console.log("ACTION " + action[0] + " ON " + action[1]);
 
-      // ## Non-jQuery methods ##
-           if (action[0] == 'flash')                display_flash(action[1], action[2]);
-
       // ## jQuery basics ##
-
       // Basic effects
-      else if (action[0] == 'hide')                 $(action[1]).hide();
+           if (action[0] == 'hide')                 $(action[1]).hide();
       else if (action[0] == 'show')                 $(action[1]).show();
       else if (action[0] == 'toggle')               $(action[1]).toggle();
 
@@ -71,12 +94,31 @@ function eval_json_result(data) {
       else if (action[0] == 'removeProp')           $(action[1]).removeProp(action[2]);
       else if (action[0] == 'val')                  $(action[1]).val(action[2]);
 
+      // Class attribute
+      else if (action[0] == 'addClass')             $(action[1]).addClass(action[2]);
+      else if (action[0] == 'removeClass')          $(action[1]).removeClass(action[2]);
+      else if (action[0] == 'toggleClass')          $(action[1]).toggleClass(action[2]);
+
       // Data storage
       else if (action[0] == 'data')                 $(action[1]).data(action[2], action[3]);
       else if (action[0] == 'removeData')           $(action[1]).removeData(action[2]);
 
       // Form Events
-      else if (action[0] == 'focus')                $(action[1]).focus();
+      else if (action[0] == 'focus')                kivi.set_focus(action[1]);
+
+      // Generic Event Handling ##
+      else if (action[0] == 'on')                   $(action[1]).on(action[2], kivi.get_function_by_name(action[3]));
+      else if (action[0] == 'off')                  $(action[1]).off(action[2], kivi.get_function_by_name(action[3]));
+      else if (action[0] == 'one')                  $(action[1]).one(action[2], kivi.get_function_by_name(action[3]));
+
+      // ## jQuery UI dialog plugin ##
+
+      // Opening and closing a popup
+      else if (action[0] == 'dialog:open')          kivi.popup_dialog(action[1]);
+      else if (action[0] == 'dialog:close')         $(action[1]).dialog('close');
+
+      // ## jQuery Form plugin ##
+      else if (action[0] == 'ajaxForm')             $(action[1]).ajaxForm({ success: eval_json_result });
 
       // ## jstree plugin ##
 
@@ -104,12 +146,29 @@ function eval_json_result(data) {
       else if (action[0] == 'jstree:deselect_node') $.jstree._reference($(action[1])).deselect_node(action[2]);
       else if (action[0] == 'jstree:deselect_all')  $.jstree._reference($(action[1])).deselect_all();
 
+      // ## ckeditor stuff ##
+      else if (action[0] == 'focus_ckeditor')       kivi.focus_ckeditor_when_ready(action[1]);
+
+      // ## other stuff ##
+      else if (action[0] == 'redirect_to')          window.location.href = action[1];
+      else if (action[0] == 'save_file')            kivi.save_file(action[1], action[2], action[3], action[4]);
+      else if (action[0] == 'flash')                kivi.display_flash(action[1], action[2]);
+      else if (action[0] == 'flash_detail')         kivi.display_flash_detail(action[1], action[2]);
+      else if (action[0] == 'clear_flash')          kivi.clear_flash(action[1], action[2]);
+      else if (action[0] == 'reinit_widgets')       kivi.reinit_widgets();
+      else if (action[0] == 'run')                  kivi.run(action[1], action.slice(2, action.length));
+      else if (action[0] == 'run_once_for')         kivi.run_once_for(action[1], action[2], action[3]);
+      else if (action[0] == 'scroll_into_view')     $(action[1])[0].scrollIntoView();
+      else if (action[0] == 'set_cursor_position')  kivi.set_cursor_position(action[1], action[2]);
+
       else                                          console.log('Unknown action: ' + action[0]);
 
     });
 
   // console.log("current_content_type " + $('#current_content_type').val() + ' ID ' + $('#current_content_id').val());
-}
+};
+
+});
 
 // Local Variables:
 // mode: js