| | |
| | | this.keyboard = false; |
| | | this.toggleselect = false; |
| | | this.aria_listbox = false; |
| | | this.parent_focus = true; |
| | | |
| | | this.drag_active = false; |
| | | this.col_drag_active = false; |
| | | this.column_fixed = null; |
| | | this.last_selected = 0; |
| | | this.shift_start = 0; |
| | | this.last_selected = null; |
| | | this.shift_start = null; |
| | | this.focused = false; |
| | | this.drag_mouse_start = null; |
| | | this.dblclick_time = 500; // default value on MS Windows is 500 |
| | |
| | | if (p && typeof p === 'object') |
| | | for (var n in p) |
| | | this[n] = p[n]; |
| | | |
| | | // register this instance |
| | | rcube_list_widget._instances.push(this); |
| | | }; |
| | | |
| | | |
| | |
| | | this.tbody = this.list; |
| | | } |
| | | |
| | | if ($(this.list).attr('role') == 'listbox') { |
| | | this.aria_listbox = true; |
| | | if (this.multiselect) |
| | | $(this.list).attr('aria-multiselectable', 'true'); |
| | | } |
| | | |
| | | var me = this; |
| | | |
| | | if (this.tbody) { |
| | | this.rows = {}; |
| | | this.rowcount = 0; |
| | | |
| | | var r, len, rows = this.tbody.childNodes, me = this; |
| | | var r, len, rows = this.tbody.childNodes; |
| | | |
| | | for (r=0, len=rows.length; r<len; r++) { |
| | | this.rowcount += this.init_row(rows[r]) ? 1 : 0; |
| | |
| | | } |
| | | } |
| | | |
| | | if ($(this.list).attr('role') == 'listbox') { |
| | | this.aria_listbox = true; |
| | | if (this.multiselect) |
| | | $(this.list).attr('aria-multiselectable', 'true'); |
| | | if (this.parent_focus) { |
| | | this.list.parentNode.onclick = function(e) { me.focus(); }; |
| | | } |
| | | |
| | | return this; |
| | |
| | | var self = this, uid = row.uid; |
| | | this.rows[uid] = {uid:uid, id:row.id, obj:row}; |
| | | |
| | | // set eventhandlers to table row |
| | | // set eventhandlers to table row (only left-button-clicks in mouseup) |
| | | row.onmousedown = function(e){ return self.drag_row(e, this.uid); }; |
| | | row.onmouseup = function(e){ return self.click_row(e, this.uid); }; |
| | | row.onmouseup = function(e){ if (e.which == 1) return self.click_row(e, this.uid); }; |
| | | |
| | | if (bw.touch) { |
| | | if (bw.touch && row.addEventListener) { |
| | | row.addEventListener('touchstart', function(e) { |
| | | if (e.touches.length == 1) { |
| | | self.touchmoved = false; |
| | |
| | | |
| | | if (this.fixed_header) { // copy (modified) fixed header back to the actual table |
| | | $(this.list.tHead).replaceWith($(this.fixed_header).find('thead').clone()); |
| | | $(this.list.tHead).find('tr td').attr('style', '').find('a').attr('tabindex', '-1'); // remove fixed widths |
| | | $(this.list.tHead).find('th,td').attr('style', '').find('a').attr('tabindex', '-1'); // remove fixed widths |
| | | } |
| | | else if (!bw.touch && this.list.className.indexOf('fixedheader') >= 0) { |
| | | this.init_fixed_header(); |
| | |
| | | if (this.column_fixed == r) |
| | | continue; |
| | | col = this.thead.rows[0].cells[r]; |
| | | col.onmousedown = function(e){ return p.drag_column(e, this); }; |
| | | col.onmousedown = function(e) { return p.drag_column(e, this); }; |
| | | this.colcount++; |
| | | } |
| | | } |
| | |
| | | $(this.list).before(this.fixed_header); |
| | | |
| | | var me = this; |
| | | $(window).resize(function(){ me.resize() }); |
| | | $(window).scroll(function(){ |
| | | $(window).resize(function() { me.resize(); }); |
| | | $(window).scroll(function() { |
| | | var w = $(window); |
| | | me.fixed_header.css('marginLeft', (-w.scrollLeft()) + 'px'); |
| | | if (!bw.webkit) |
| | |
| | | var column_widths = []; |
| | | |
| | | // get column widths from original thead |
| | | $(this.tbody).parent().find('thead tr td').each(function(index) { |
| | | $(this.tbody).parent().find('thead th,thead td').each(function(index) { |
| | | column_widths[index] = $(this).width(); |
| | | }); |
| | | |
| | | // apply fixed widths to fixed table header |
| | | $(this.thead).parent().width($(this.tbody).parent().width()); |
| | | $(this.thead).find('tr td').each(function(index) { |
| | | $(this).css('width', column_widths[index]); |
| | | $(this.thead).find('th,td').each(function(index) { |
| | | $(this).width(column_widths[index]); |
| | | }); |
| | | |
| | | $(window).scroll(); |
| | |
| | | |
| | | this.rows = {}; |
| | | this.rowcount = 0; |
| | | this.last_selected = 0; |
| | | this.last_selected = null; |
| | | |
| | | if (sel) |
| | | this.clear_selection(); |
| | |
| | | if (row.id) domrow.id = row.id; |
| | | if (row.className) domrow.className = row.className; |
| | | if (row.style) $.extend(domrow.style, row.style); |
| | | if (row.uid) $(domrow).data('uid', row.uid); |
| | | if (row.uid) $(domrow).data('uid', String(row.uid)); // #1489906 |
| | | |
| | | for (var e, domcell, col, i=0; row.cols && i < row.cols.length; i++) { |
| | | col = row.cols[i]; |
| | |
| | | get_first_row: function() |
| | | { |
| | | if (this.rowcount) { |
| | | var i, len, uid, rows = this.tbody.childNodes; |
| | | var i, uid, rows = this.tbody.childNodes; |
| | | |
| | | for (i=0, len=rows.length-1; i<len; i++) |
| | | for (i=0; i<rows.length; i++) |
| | | if (rows[i].id && (uid = this.get_row_uid(rows[i]))) |
| | | return uid; |
| | | } |
| | |
| | | */ |
| | | select_row: function(id, mod_key, with_mouse) |
| | | { |
| | | var select_before = this.selection.join(','); |
| | | var select_before = this.selection.join(','), |
| | | in_selection_before = this.in_selection(id); |
| | | |
| | | if (!this.multiselect) |
| | | if (!this.multiselect && with_mouse) |
| | | mod_key = 0; |
| | | |
| | | if (!this.shift_start) |
| | |
| | | this.multi_selecting = true; |
| | | } |
| | | |
| | | // trigger event if selection changed |
| | | if (this.selection.join(',') != select_before) |
| | | this.triggerEvent('select'); |
| | | |
| | | if (this.last_selected != 0 && this.rows[this.last_selected]) { |
| | | if (this.last_selected && this.rows[this.last_selected]) { |
| | | $(this.rows[this.last_selected].obj).removeClass('focused') |
| | | .find(this.col_tagname()).eq(this.subject_col).removeAttr('tabindex'); |
| | | } |
| | | |
| | | // unselect if toggleselect is active and the same row was clicked again |
| | | if (this.toggleselect && this.last_selected == id) { |
| | | if (this.toggleselect && in_selection_before && !mod_key) { |
| | | this.clear_selection(); |
| | | id = null; |
| | | } |
| | | else { |
| | | // trigger event if selection changed |
| | | else if (this.selection.join(',') != select_before) { |
| | | this.triggerEvent('select'); |
| | | } |
| | | |
| | | if (this.rows[id]) { |
| | | $(this.rows[id].obj).addClass('focused'); |
| | | // set cursor focus to link inside selected row |
| | | if (this.focused) |
| | |
| | | |
| | | if (num_select && !this.selection.length && !no_event) { |
| | | this.triggerEvent('select'); |
| | | this.last_selected = 0; |
| | | this.last_selected = null; |
| | | } |
| | | }, |
| | | |
| | |
| | | */ |
| | | scrollto: function(id) |
| | | { |
| | | var row = this.rows[id].obj; |
| | | var row = this.rows[id] ? this.rows[id].obj : null; |
| | | |
| | | if (row && this.frame) { |
| | | var scroll_to = Number(row.offsetTop), |
| | | head_offset = 0; |
| | |
| | | |
| | | $('> ' + self.col_tagname(), self.rows[uid].obj).each(function(n, cell) { |
| | | if (self.subject_col < 0 || (self.subject_col >= 0 && self.subject_col == n)) { |
| | | var subject = $(cell).text(); |
| | | // remove elements marked with "skip-on-drag" class |
| | | cell = $(cell).clone(); |
| | | $(cell).find('.skip-on-drag').remove(); |
| | | |
| | | var subject = cell.text(); |
| | | |
| | | if (subject) { |
| | | // remove leading spaces |
| | |
| | | rcube_list_widget.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; |
| | | rcube_list_widget.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; |
| | | rcube_list_widget.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent; |
| | | |
| | | // static |
| | | rcube_list_widget._instances = []; |