From 2965a981b7ec22866fbdf2d567d87e2d068d3617 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli <thomas@roundcube.net> Date: Fri, 31 Jul 2015 16:04:08 -0400 Subject: [PATCH] Allow to search and import missing PGP pubkeys from keyservers using Publickey.js --- program/js/list.js | 55 ++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 36 insertions(+), 19 deletions(-) diff --git a/program/js/list.js b/program/js/list.js index 5492c0a..d5a1eb1 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -61,12 +61,13 @@ 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 @@ -104,11 +105,13 @@ $(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; @@ -127,6 +130,10 @@ } } + if (this.parent_focus) { + this.list.parentNode.onclick = function(e) { me.focus(); }; + } + return this; }, @@ -143,11 +150,16 @@ var self = this, uid = row.uid; this.rows[uid] = {uid:uid, id:row.id, obj:row}; - // set eventhandlers to table row - row.onmousedown = function(e){ return self.drag_row(e, this.uid); }; - row.onmouseup = function(e){ return self.click_row(e, this.uid); }; + // set eventhandlers to table row (only left-button-clicks in mouseup) + $(row).mousedown(function(e) { return self.drag_row(e, this.uid); }) + .mouseup(function(e) { + if (e.which == 1 && !self.drag_active) + return self.click_row(e, this.uid); + else + return true; + }); - if (bw.touch) { + if (bw.touch && row.addEventListener) { row.addEventListener('touchstart', function(e) { if (e.touches.length == 1) { self.touchmoved = false; @@ -212,7 +224,7 @@ 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++; } } @@ -233,8 +245,8 @@ $(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) @@ -263,14 +275,14 @@ 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(); @@ -293,7 +305,7 @@ this.rows = {}; this.rowcount = 0; - this.last_selected = 0; + this.last_selected = null; if (sel) this.clear_selection(); @@ -939,13 +951,13 @@ this.multi_selecting = true; } - 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 && in_selection_before) { + if (this.toggleselect && in_selection_before && !mod_key) { this.clear_selection(); } // trigger event if selection changed @@ -1171,7 +1183,7 @@ if (num_select && !this.selection.length && !no_event) { this.triggerEvent('select'); - this.last_selected = 0; + this.last_selected = null; } }, @@ -1410,7 +1422,8 @@ */ 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; @@ -1499,7 +1512,11 @@ $('> ' + 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 -- Gitblit v1.9.1