From f5aa16541e6901d2fc543f9044be1c898365b61e Mon Sep 17 00:00:00 2001 From: svncommit Date: Thu, 28 Aug 2008 08:15:31 +0000 Subject: [PATCH] Add folder hierarchy collapsing. --- CHANGELOG | 4 +++ index.php | 8 +++++ program/include/html.php | 4 +-- program/include/main.inc | 12 ++++++-- program/js/app.js | 36 +++++++++++++++++++++-- skins/default/images/icons/collapsed.png | Bin 0 -> 205 bytes skins/default/images/icons/expanded.png | Bin 0 -> 184 bytes skins/default/mail.css | 28 ++++++++++++++++++ 8 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 skins/default/images/icons/collapsed.png create mode 100644 skins/default/images/icons/expanded.png diff --git a/CHANGELOG b/CHANGELOG index 5367fabc6..69254a6d6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,10 @@ CHANGELOG RoundCube Webmail --------------------------- +2008/08/28 (robin) +---------- +- Added folder hierarchy collapsing + 2008/08/27 (alec) ---------- - Added options to use syslog instead of log file (#1484850) diff --git a/index.php b/index.php index 05ef875a8..aa6bf1293 100644 --- a/index.php +++ b/index.php @@ -201,6 +201,14 @@ $action_map = array( ) ); +// save preference value +if ($RCMAIL->action=='save-pref') + { + $USER->save_prefs(array(get_input_value('_name', RCUBE_INPUT_POST) => get_input_value('_value', RCUBE_INPUT_POST))); + $OUTPUT->reset(); + $OUTPUT->send(); + } + // include task specific functions include_once 'program/steps/'.$RCMAIL->task.'/func.inc'; diff --git a/program/include/html.php b/program/include/html.php index 704d10a0a..7ab82d820 100644 --- a/program/include/html.php +++ b/program/include/html.php @@ -98,7 +98,7 @@ class html if (is_string($attr)) { $attr = array('class' => $attr); } - return self::tag('div', $attr, $cont, self::$common_attrib); + return self::tag('div', $attr, $cont, array_merge(self::$common_attrib, array('onclick'))); } /** @@ -644,4 +644,4 @@ class html_table extends html } } -?> \ No newline at end of file +?> diff --git a/program/include/main.inc b/program/include/main.inc index 2b4797873..869921edb 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -1000,7 +1000,7 @@ function rcmail_build_folder_tree(&$arrFolders, $folder, $delm='/', $path='') */ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $realnames=false, $nestLevel=0) { - global $COMM_PATH, $IMAP, $CONFIG, $OUTPUT; + global $COMM_PATH, $IMAP, $CONFIG, $OUTPUT, $RCMAIL; $idx = 0; $out = ''; @@ -1046,11 +1046,17 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $ if ($folder['id'] == $mbox_name) $classes[] = 'selected'; + $collapsed = preg_match('/&'.rawurlencode($folder['id']).'&/', $RCMAIL->config->get('collapsed_folders')); + $js_name = JQ($folder['id']); $out .= html::tag('li', array( 'id' => "rcmli".$folder_id, 'class' => join(' ', $classes), 'noclose' => true), + html::div(array( + 'class' => empty($folder['folders']) ? 'nocollapse' : ($collapsed ? 'collapsed' : 'expanded'), + 'onclick' => sprintf("%s.command('collapse-folder', '%s')", JS_OBJECT_NAME, $js_name) + ), ' ') . html::a(array( 'href' => rcmail_url('', array('_mbox' => $folder['id'])), 'onclick' => sprintf("return %s.command('list','%s',this)", JS_OBJECT_NAME, $js_name), @@ -1061,12 +1067,14 @@ function rcmail_render_folder_tree_html(&$arrFolders, &$mbox_name, $maxlength, $ ), Q($foldername))); if (!empty($folder['folders'])) - $out .= "\n\n"; + $out .= "\n\n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $realnames, $nestLevel+1) . "\n"; $out .= "\n"; $idx++; } + $OUTPUT->set_env('collapsed_folders', $RCMAIL->config->get('collapsed_folders')); + return $out; } diff --git a/program/js/app.js b/program/js/app.js index b5073daed..f81f19d1d 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -151,7 +151,7 @@ function rcube_webmail() this.set_message_coltypes(this.env.coltypes); // enable mail commands - this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', true); + this.enable_command('list', 'checkmail', 'compose', 'add-contact', 'search', 'reset-search', 'collapse-folder', true); if (this.env.search_text != null && document.getElementById('quicksearchbox') != null) document.getElementById('quicksearchbox').value = this.env.search_text; @@ -982,6 +982,11 @@ function rcube_webmail() this.list_contacts(this.env.source); break; + // collapse/expand folder + case 'collapse-folder': + if (props) + this.collapse_folder(props); + break; // user settings commands case 'preferences': @@ -1142,6 +1147,33 @@ function rcube_webmail() this.set_classname(li, 'droptarget', false); } + this.collapse_folder = function(id) + { + var div; + if ((li = this.get_folder_li(id)) && + (div = li.getElementsByTagName("div")[0]) && + (div.className.match(/collapsed/) || div.className.match(/expanded/))) + { + var ul = li.getElementsByTagName("ul")[0]; + if (div.className.match(/collapsed/)) + { + ul.style.display = ''; + this.set_classname(div, 'collapsed', false); + this.set_classname(div, 'expanded', true); + var reg = new RegExp('&'+escape(id)+'&'); + this.set_env('collapsed_folders', this.env.collapsed_folders.replace(reg, '')); + } + else + { + ul.style.display = 'none'; + this.set_classname(div, 'expanded', false); + this.set_classname(div, 'collapsed', true); + this.set_env('collapsed_folders', this.env.collapsed_folders+'&'+escape(id)+'&'); + } + this.http_post('save-pref', '_name=collapsed_folders&_value='+escape(this.env.collapsed_folders)); + } + } + // onmouseup handler for folder list item this.folder_mouse_up = function(id) { @@ -3441,7 +3473,7 @@ function rcube_webmail() if (item = this.get_folder_li(mbox)) { // set new text - text_obj = item.firstChild; + text_obj = item.firstChild.nextSibling; reg = /\s+\([0-9]+\)$/i; if (count && text_obj.innerHTML.match(reg)) diff --git a/skins/default/images/icons/collapsed.png b/skins/default/images/icons/collapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..e483b17e2ed7925fd508afdfd079822eb5d01cc9 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6FmMZlFeAgPITAoY_7YEDSN0oh0$l8(hh8VD1BHA&T^vIsE+^|~ zYyUp)z_7sp2ujMzi-`$p3v!tw3(hrCpWI1*E rwCshuCyqF<90+JRyS(Q}i!cL6we-#UGqM|j1~YiN`njxgN@xNAkuX7z literal 0 HcmV?d00001 diff --git a/skins/default/images/icons/expanded.png b/skins/default/images/icons/expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..74726c8aebb428935aa412eef06e0b1555486722 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6U4S$Y z{B+)352QE?JR*x37`TN&n2}-D90{Nxdx@v7EBg&L0WLNn*C|Jj0);F*T^vIsE+^|~ zYyUp)z_7sp2ujMz