| | |
| | | | | |
| | | | This file is part of the Roundcube Webmail client | |
| | | | Copyright (C) 2006-2009, The Roundcube Dev Team | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | Licensed under the GNU General Public License version 3 or | |
| | | | any later version with exceptions for skins & plugins. | |
| | | | See the README file for a full license statement. | |
| | | | | |
| | | +-----------------------------------------------------------------------+ |
| | | | Authors: Thomas Bruederli <roundcube@gmail.com> | |
| | |
| | | this.colcount = 0; |
| | | |
| | | this.subject_col = -1; |
| | | this.shiftkey = false; |
| | | this.modkey = 0; |
| | | this.multiselect = false; |
| | | this.multiexpand = false; |
| | | this.multi_selecting = false; |
| | |
| | | init_row: function(row) |
| | | { |
| | | // make references in internal array and set event handlers |
| | | if (row && String(row.id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)) { |
| | | if (row && String(row.id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i)) { |
| | | var self = this, |
| | | uid = RegExp.$1; |
| | | row.uid = uid; |
| | |
| | | */ |
| | | remove_row: function(uid, sel_next) |
| | | { |
| | | if (this.rows[uid].obj) |
| | | this.rows[uid].obj.style.display = 'none'; |
| | | var obj = this.rows[uid] ? this.rows[uid].obj : null; |
| | | |
| | | if (!obj) |
| | | return; |
| | | |
| | | obj.style.display = 'none'; |
| | | |
| | | if (sel_next) |
| | | this.select_next(); |
| | |
| | | this.in_selection_before = false; |
| | | |
| | | // row was double clicked |
| | | if (this.rows && dblclicked && this.in_selection(id)) |
| | | if (this.rows && dblclicked && this.in_selection(id)) { |
| | | this.triggerEvent('dblclick'); |
| | | now = 0; |
| | | } |
| | | else |
| | | this.triggerEvent('click'); |
| | | |
| | |
| | | var i, len, rows = this.list.tBodies[0].rows; |
| | | |
| | | for (i=0, len=rows.length-1; i<len; i++) |
| | | if (rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null) |
| | | if (rows[i].id && String(rows[i].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null) |
| | | return RegExp.$1; |
| | | } |
| | | |
| | |
| | | var i, rows = this.list.tBodies[0].rows; |
| | | |
| | | for (i=rows.length-1; i>=0; i--) |
| | | if (rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null) |
| | | if (rows[i].id && String(rows[i].id).match(/^rcmrow([a-z0-9\-_=\+\/]+)/i) && this.rows[RegExp.$1] != null) |
| | | return RegExp.$1; |
| | | } |
| | | |
| | |
| | | case CONTROL_KEY: |
| | | if (!with_mouse) |
| | | this.highlight_row(id, true); |
| | | break; |
| | | break; |
| | | |
| | | case CONTROL_SHIFT_KEY: |
| | | this.shift_select(id, true); |
| | |
| | | */ |
| | | key_press: function(e) |
| | | { |
| | | if (this.focused != true) |
| | | var target = e.target || {}; |
| | | if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT') |
| | | return true; |
| | | |
| | | var keyCode = rcube_event.get_keycode(e), |
| | |
| | | |
| | | switch (keyCode) { |
| | | case 40: |
| | | case 38: |
| | | case 38: |
| | | case 63233: // "down", in safari keypress |
| | | case 63232: // "up", in safari keypress |
| | | // Stop propagation so that the browser doesn't scroll |
| | |
| | | rcube_event.cancel(e); |
| | | var ret = this.use_plusminus_key(keyCode, mod_key); |
| | | this.key_pressed = keyCode; |
| | | this.modkey = mod_key; |
| | | this.triggerEvent('keypress'); |
| | | this.modkey = 0; |
| | | return ret; |
| | | case 36: // Home |
| | | this.select_first(mod_key); |
| | |
| | | this.select_last(mod_key); |
| | | return rcube_event.cancel(e); |
| | | default: |
| | | this.shiftkey = e.shiftKey; |
| | | this.key_pressed = keyCode; |
| | | this.modkey = mod_key; |
| | | this.triggerEvent('keypress'); |
| | | this.modkey = 0; |
| | | |
| | | if (this.key_pressed == this.BACKSPACE_KEY) |
| | | return rcube_event.cancel(e); |
| | |
| | | */ |
| | | key_down: function(e) |
| | | { |
| | | var target = e.target || {}; |
| | | if (this.focused != true || target.nodeName == 'INPUT' || target.nodeName == 'TEXTAREA' || target.nodeName == 'SELECT') |
| | | return true; |
| | | |
| | | switch (rcube_event.get_keycode(e)) { |
| | | case 27: |
| | | if (this.drag_active) |
| | | return this.drag_mouse_up(e); |
| | | return this.drag_mouse_up(e); |
| | | if (this.col_drag_active) { |
| | | this.selected_column = null; |
| | | return this.column_drag_mouse_up(e); |
| | | return this.column_drag_mouse_up(e); |
| | | } |
| | | |
| | | case 40: |
| | |
| | | new_row = this.get_prev_row(); |
| | | |
| | | if (new_row) { |
| | | this.select_row(new_row.uid, mod_key, true); |
| | | this.select_row(new_row.uid, mod_key, false); |
| | | this.scrollto(new_row.uid); |
| | | } |
| | | |