Add folder hierarchy collapsing.
6 files modified
2 files added
| | |
| | | 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) |
| | |
| | | ) |
| | | ); |
| | | |
| | | // 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'; |
| | | |
| | |
| | | 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'))); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | 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 = ''; |
| | |
| | | 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), |
| | |
| | | ), Q($foldername))); |
| | | |
| | | if (!empty($folder['folders'])) |
| | | $out .= "\n<ul>\n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $realnames, $nestLevel+1) . "</ul>\n"; |
| | | $out .= "\n<ul" . ($collapsed ? " style=\"display: none;\"" : "") . ">\n" . rcmail_render_folder_tree_html($folder['folders'], $mbox_name, $maxlength, $realnames, $nestLevel+1) . "</ul>\n"; |
| | | |
| | | $out .= "</li>\n"; |
| | | $idx++; |
| | | } |
| | | |
| | | $OUTPUT->set_env('collapsed_folders', $RCMAIL->config->get('collapsed_folders')); |
| | | |
| | | return $out; |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | 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': |
| | |
| | | var li; |
| | | if (this.drag_active && (li = this.get_folder_li(id))) |
| | | 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 |
| | |
| | | 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)) |
| | |
| | | border-bottom: 1px solid #EBEBEB; |
| | | } |
| | | |
| | | #mailboxlist li div |
| | | { |
| | | position: absolute; |
| | | padding-left: 10px; |
| | | padding-top: 2px; |
| | | padding-bottom: 2px; |
| | | margin-right: 2px; |
| | | width: 12px; |
| | | } |
| | | |
| | | #mailboxlist li div.collapsed, |
| | | #mailboxlist li div.expanded |
| | | { |
| | | cursor: pointer; |
| | | } |
| | | |
| | | #mailboxlist li div.collapsed |
| | | { |
| | | background: url(images/icons/collapsed.png) bottom right no-repeat; |
| | | } |
| | | |
| | | #mailboxlist li div.expanded |
| | | { |
| | | background: url(images/icons/expanded.png) bottom right no-repeat; |
| | | } |
| | | |
| | | #mailboxlist li.inbox |
| | | { |
| | | background-image: url(images/icons/folder-inbox.png); |
| | |
| | | padding-top: 2px; |
| | | padding-bottom: 2px; |
| | | text-decoration: none; |
| | | /* css hack for IE */ |
| | | margin-top: expression('-12px'); |
| | | } |
| | | |
| | | #mailboxlist li.unread |