diff --git a/home/inc/class.home_list_portlet.inc.php b/home/inc/class.home_list_portlet.inc.php index db792f3801..2944470e01 100644 --- a/home/inc/class.home_list_portlet.inc.php +++ b/home/inc/class.home_list_portlet.inc.php @@ -59,25 +59,6 @@ class home_list_portlet extends home_portlet { $this->title = $context['title']; } - // Add a new entry to the list - if($context['add']) - { - $ok_to_add = true; - foreach($context['list'] as $key => $entry) - { - if($entry == $context['add']) - { - $ok_to_add = false; - break; - } - } - if($ok_to_add) - { - $context['list'][] = $context['add']; - } - unset($context['add']); - } - $this->context = $context; } @@ -120,7 +101,27 @@ class home_list_portlet extends home_portlet } // Find the portlet widget, and add a link-list to it - return ""; + $script = 'app.home.List.set_content("'.$id.'", '.json_encode($list).');'; + if(egw_json_response::isJSONResponse()) + { + $response = egw_json_response::get(); + // This has to go last, after the template is loaded + $response->addBeforeSendDataCallback( + function($response, $script) { + // Bind to load event to make sure template is loaded first + $response->script('$j("#home-index").on("load", function() {'.$script.'});'); + // Or just call it, in the event of a normal ajax change - no load event + $response->script("try { $script } catch (e) {egw.debug('error', e.message);}"); + } + ,$response, $script + ); + } else { + // Not a JSON Response? Probably an idots first load + $response = egw_json_response::get(); + // Bind to load event to make sure template is loaded first + $response->script('$j("#home-index").on("load", function() {'.$script.'});'); + } + return ''; } /** diff --git a/home/js/app.js b/home/js/app.js index d0c88fe0ca..1893ec9b7f 100644 --- a/home/js/app.js +++ b/home/js/app.js @@ -303,30 +303,30 @@ app.home = AppJS.extend( set_content: function(id, list_values) { var portlet = app.home.portlet_container.getWidgetById(id); - if(portlet != null) - { - var list = portlet.getWidgetById(id+'-list'); - if(list) - { + if(portlet != null) + { + var list = portlet.getWidgetById(id+'-list'); + if(list) + { // List was just rudely pulled from DOM by the call to HTML, put it back - portlet.content.append(list.getDOMNode()); - } - else - { + portlet.content.append(list.getDOMNode()); + } + else + { // Create widget - list = et2_createWidget('link-list', {id: id+'-list'}, portlet); + list = et2_createWidget('link-list', {id: id+'-list'}, portlet); list.doLoadingFinished(); - // Abuse link list by overwriting delete handler - list._delete_link = app.home.List.delete_link; - } - list.set_value(list_values); + // Abuse link list by overwriting delete handler + list._delete_link = app.home.List.delete_link; + } + list.set_value(list_values); - // Disable link list context menu - $j('tr',list.list).unbind('contextmenu'); + // Disable link list context menu + $j('tr',list.list).unbind('contextmenu'); - // Allow scroll bars - portlet.content.css('overflow', 'auto'); - } + // Allow scroll bars + portlet.content.css('overflow', 'auto'); + } }, @@ -356,10 +356,21 @@ app.home = AppJS.extend( var link = et2_createWidget('link-entry', {label: egw.lang('Add')}, this.portlet_container); var dialog = et2_dialog.show_dialog( function(button_id) { + if(button_id == et2_dialog.CANCEL_BUTTON) return; var new_list = widget.options.settings.list || []; - new_list.push(link.getValue()); - widget._process_edit(button_id,{list: new_list || [],add: link.getValue()}); + var add = link.getValue(); link.destroy(); + for(var i = 0; i < new_list.length; i++) + { + if(new_list[i].app == add.app && new_list[i].id == add.id) + { + // Duplicate + return; + } + } + + new_list.push(add); + widget._process_edit(button_id,{list: new_list}); }, 'Add', egw.lang('Add'), {}, diff --git a/home/setup/setup.inc.php b/home/setup/setup.inc.php index 7b503f9a34..153a705d78 100755 --- a/home/setup/setup.inc.php +++ b/home/setup/setup.inc.php @@ -11,9 +11,10 @@ /* Basic information about this app */ $setup_info['home']['name'] = 'home'; $setup_info['home']['title'] = 'Home'; -$setup_info['home']['version'] = '1.8'; +$setup_info['home']['version'] = '1.9'; $setup_info['home']['app_order'] = 1; $setup_info['home']['enable'] = 1; +$setup_info['home']['index'] = 'home.home_ui.index&ajax=true'; $setup_info['home']['author'] = 'eGroupWare Core Team'; $setup_info['home']['license'] = 'GPL'; @@ -30,5 +31,5 @@ $setup_info['home']['hooks']['showUpdates'] = 'home.updates.showUpdates'; /* Dependencies for this app to work */ $setup_info['home']['depends'][] = array( 'appname' => 'phpgwapi', - 'versions' => Array('1.7','1.8','1.9') + 'versions' => Array('1.9') );