diff --git a/mail/inc/class.mail_hooks.inc.php b/mail/inc/class.mail_hooks.inc.php index 7005797ffe..1c6fe749e0 100644 --- a/mail/inc/class.mail_hooks.inc.php +++ b/mail/inc/class.mail_hooks.inc.php @@ -808,6 +808,13 @@ class mail_hooks ); } + // Destination div for folder tree + $file[] = array( + 'no_lang' => true, + 'text'=>'', + 'link'=>false, + 'icon' => false + ); // empty trash (if available -> move to trash ) if($preferences->preferences['deleteOptions'] == 'move_to_trash') { @@ -836,13 +843,6 @@ class mail_hooks } - // Destination div for folder tree - $file[] = array( - 'no_lang' => true, - 'text'=>'', - 'link'=>false, - 'icon' => false - ); // display them all display_sidebox($appname,$menu_title,$file); diff --git a/mail/inc/class.mail_ui.inc.php b/mail/inc/class.mail_ui.inc.php index e4e4846645..50cf5a084f 100644 --- a/mail/inc/class.mail_ui.inc.php +++ b/mail/inc/class.mail_ui.inc.php @@ -348,6 +348,12 @@ class mail_ui $oA['im2'] = "MailFolderClosed.png"; // has Children } $oA['id'] = $path; // ID holds the PATH + if (stripos(array2string($fS['attributes']),'\noselect')!== false) + { + $oA['im0'] = "folderNoSelectClosed.gif"; // one Level + $oA['im1'] = "folderNoSelectOpen.gif"; + $oA['im2'] = "folderNoSelectClosed.gif"; // has Children + } if (stripos(array2string($fS['attributes']),'\hasnochildren')=== false) { $oA['child']=1; // translates to: hasChildren -> dynamicLoading @@ -395,7 +401,7 @@ class mail_ui if ($createMissingParents) { unset($item); - $item = array('id' => $parent.$component, 'text' => $component, 'tooltip' => '**missing**'); + $item = array('id' => $parent.$component, 'text' => $component, 'im0' => "folderNoSelectClosed.gif",'im1' => "folderNoSelectOpen.gif",'im2' => "folderNoSelectClosed.gif",'tooltip' => '**missing**'); $insert['item'][] =& $item; $insert =& $item; } @@ -1221,6 +1227,6 @@ error_log(__METHOD__.__LINE__.' SelectedFolder:'.$query['selectedFolder'].' Star $this->mail_bo->compressFolder($trashFolder); } $response = egw_json_response::get(); - $response->call('egw_refresh',lang('emptied Trash'),'mail'); + $response->call('egw_refresh',lang('empty trash'),'mail'); } } diff --git a/mail/js/app.js b/mail/js/app.js index 68c36d1fed..fad9315a0f 100644 --- a/mail/js/app.js +++ b/mail/js/app.js @@ -8,10 +8,71 @@ * @version $Id$ */ +/** + * Refresh given application _targetapp display of entry _app _id, incl. outputting _msg + * + * Default implementation here only reloads window with it's current url with an added msg=_msg attached + * + * @param string _msg message (already translated) to show, eg. 'Entry deleted' + * @param string _app application name + * @param string|int _id=null id of entry to refresh + * @param string _type=null either 'edit', 'delete', 'add' or null + */ +var doStatus; +function app_refresh(_msg, _app, _id, _type) +{ + var bufferExists = false; + window.clearInterval(doStatus); // whatever message was up to be activated + //alert("app_refresh(\'"+_msg+"\',\'"+_app+"\',\'"+_id+"\',\'"+_type+"\')"); + //myCurrentMsg = getMsg(); + //if (myCurrentMsg.length) { + // clear message after some time + myMessageBuffer = ""; //myCurrentMsg; + bufferExists = true; + //} + setMsg('' +_msg+ ''); + if (_app=='mail') + { + //we may want to trigger some actions, like modifying the grid, disable preview and stuff + + // TODO: more actions + } + if (bufferExists) doStatus = window.setInterval("egw_appWindow('mail').setMsg(myMessageBuffer);", 10000); +} + +/** + * getMsg - gets the current Message + * @return string + */ +function getMsg() +{ + var msg_wdg = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('msg'); + if (msg_wdg) + { + return msg_wdg.valueOf().htmlNode[0].innerHTML; + } + return ""; +} + +/** + * setMsg - sets a Message, with the msg container, and controls if the container is enabled/disabled + * @param string myMsg - the message + */ +function setMsg(myMsg) +{ + var msg_wdg = etemplate2.getByApplication('mail')[0].widgetContainer.getWidgetById('msg'); + if (msg_wdg) + { + msg_wdg.set_value(myMsg); + msg_wdg.set_disabled(myMsg.trim().length==0); + } +} + /** * emptyTrash */ function emptyTrash() { + app_refresh(egw.lang('empty trash'), 'mail'); var request = new egw_json_request('mail.mail_ui.ajax_emptyTrash'); request.sendRequest(); } @@ -21,8 +82,30 @@ function emptyTrash() { */ function changeFolder(folder,_widget) { //alert('change Folder called:'+folder); + app_refresh(egw.lang('change folder'), 'mail'); + var img = _widget.getSelectedNode().images[0]; // fetch first image + if (!(img.search(eval('/'+'NoSelect'+'/'))<0)) + { + if (_widget.event_args.length==2) + { + folder = _widget.event_args[1]; + _widget.set_value(folder); + } + else + { + _widget.set_value(''); + } + } var nm = _widget.getRoot().getWidgetById('nm'); nm.activeFilters["selectedFolder"] = folder; nm.applyFilters(); + var msg = _widget.getRoot().getWidgetById('msg'); + if (msg) + { + window.clearInterval(doStatus); + displayname = _widget.getSelectedLabel(); + myMsg = (displayname?displayname:folder)+' '+egw.lang('selected'); + app_refresh(myMsg, 'mail'); + } } diff --git a/mail/templates/default/app.css b/mail/templates/default/app.css index 888a456583..0a6270c5b5 100644 --- a/mail/templates/default/app.css +++ b/mail/templates/default/app.css @@ -190,3 +190,35 @@ pre { white-space: -o-pre-wrap; /* Opera 7 */ width: 99%; } + +.dtree { + font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; + font-size: 11px; + color: #666; + white-space: nowrap; +} +.dtree img { + border: 0px; + vertical-align: middle; +} +.dtree a { + color: #333; + text-decoration: none; +} +.dtree a.node, .dtree a.nodeSel { + white-space: nowrap; + padding: 1px 2px 1px 2px; +} +.dtree a.node:hover, .dtree a.nodeSel:hover { + color: #333; + text-decoration: underline; +} +.dtree a.nodeSel { + background-color: #c0d2ec; +} +.dtree .clip { + overflow: hidden; +} +.dtree table, .dtree tr, .dtree td { + border: none; +}