+ 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') 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 ##
+
+ // Operations on the whole tree
+ else if (action[0] == 'jstree:lock') $.jstree._reference($(action[1])).lock();
+ else if (action[0] == 'jstree:unlock') $.jstree._reference($(action[1])).unlock();
+
+ // Opening and closing nodes
+ else if (action[0] == 'jstree:open_node') $.jstree._reference($(action[1])).open_node(action[2]);
+ else if (action[0] == 'jstree:open_all') $.jstree._reference($(action[1])).open_all(action[2]);
+ else if (action[0] == 'jstree:close_node') $.jstree._reference($(action[1])).close_node(action[2]);
+ else if (action[0] == 'jstree:close_all') $.jstree._reference($(action[1])).close_all(action[2]);
+ else if (action[0] == 'jstree:toggle_node') $.jstree._reference($(action[1])).toggle_node(action[2]);
+ else if (action[0] == 'jstree:save_opened') $.jstree._reference($(action[1])).save_opened();
+ else if (action[0] == 'jstree:reopen') $.jstree._reference($(action[1])).reopen();
+
+ // Modifying nodes
+ else if (action[0] == 'jstree:create_node') $.jstree._reference($(action[1])).create_node(action[2], action[3], action[4]);
+ else if (action[0] == 'jstree:rename_node') $.jstree._reference($(action[1])).rename_node(action[2], action[3]);
+ else if (action[0] == 'jstree:delete_node') $.jstree._reference($(action[1])).delete_node(action[2]);
+ else if (action[0] == 'jstree:move_node') $.jstree._reference($(action[1])).move_node(action[2], action[3], action[4], action[5]);
+
+ // Selecting nodes (from the 'ui' plugin to jstree)
+ else if (action[0] == 'jstree:select_node') $.jstree._reference($(action[1])).select_node(action[2], true);
+ 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]);