From ef17c54e739676a73fff69fa85ea39a3a516fcab Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Fri, 12 Nov 2010 13:50:24 -0500 Subject: [PATCH] - Fix IE issue when replacing spaces doesn't work - Some code improvements --- program/js/list.js | 89 +++++++++++++++++++++++++++++++++----------- 1 files changed, 66 insertions(+), 23 deletions(-) diff --git a/program/js/list.js b/program/js/list.js index c94453c..aabba08 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -1,9 +1,9 @@ /* +-----------------------------------------------------------------------+ - | RoundCube List Widget | + | Roundcube List Widget | | | - | This file is part of the RoundCube Webmail client | - | Copyright (C) 2006-2009, RoundCube Dev, - Switzerland | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2006-2009, Roundcube Dev, - Switzerland | | Licensed under the GNU GPL | | | +-----------------------------------------------------------------------+ @@ -18,7 +18,7 @@ /** - * RoundCube List Widget class + * Roundcube List Widget class * @contructor */ function rcube_list_widget(list, p) @@ -102,14 +102,28 @@ { // make references in internal array and set event handlers if (row && String(row.id).match(/rcmrow([a-z0-9\-_=\+\/]+)/i)) { - var p = this; + var self = this; var uid = RegExp.$1; row.uid = uid; this.rows[uid] = {uid:uid, id:row.id, obj:row}; // set eventhandlers to table row - row.onmousedown = function(e){ return p.drag_row(e, this.uid); }; - row.onmouseup = function(e){ return p.click_row(e, this.uid); }; + row.onmousedown = function(e){ return self.drag_row(e, this.uid); }; + row.onmouseup = function(e){ return self.click_row(e, this.uid); }; + + if (bw.iphone || bw.ipad) { + row.addEventListener('touchstart', function(e) { + if (e.touches.length == 1) { + if (!self.drag_row(rcube_event.touchevent(e.touches[0]), this.uid)) + e.preventDefault(); + } + }, false); + row.addEventListener('touchend', function(e) { + if (e.changedTouches.length == 1) + if (!self.click_row(rcube_event.touchevent(e.changedTouches[0]), this.uid)) + e.preventDefault(); + }, false); + } if (document.all) row.onselectstart = function() { return false; }; @@ -285,6 +299,10 @@ this.drag_mouse_start = rcube_event.get_mouse_pos(e); rcube_event.add_listener({event:'mousemove', object:this, method:'drag_mouse_move'}); rcube_event.add_listener({event:'mouseup', object:this, method:'drag_mouse_up'}); + if (bw.iphone || bw.ipad) { + rcube_event.add_listener({event:'touchmove', object:this, method:'drag_mouse_move'}); + rcube_event.add_listener({event:'touchend', object:this, method:'drag_mouse_up'}); + } // enable dragging over iframes this.add_dragfix(); @@ -311,7 +329,7 @@ if (this.dont_select) { this.dont_select = false; return false; - } + } var dblclicked = now - this.rows[id].clicked < this.dblclick_time; @@ -393,7 +411,7 @@ var r = this.rows[new_row.uid]; if (r && r.depth <= depth) break; - $(new_row).hide(); + $(new_row).css('display', 'none'); if (r.expanded) { r.expanded = false; this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded }); @@ -436,7 +454,7 @@ if (p && p.expanded) { if ((row && p == row) || last_expanded_parent_depth >= p.depth - 1) { last_expanded_parent_depth = p.depth; - $(new_row).show(); + $(new_row).css('display', ''); r.expanded = true; this.triggerEvent('expandcollapse', { uid:r.uid, expanded:r.expanded }); } @@ -481,7 +499,7 @@ break; if (row || r.depth) - $(new_row).hide(); + $(new_row).css('display', 'none'); if (r.has_children && r.expanded) { r.expanded = false; this.update_expando(r.uid, false); @@ -517,7 +535,7 @@ if (row && r.depth <= depth) break; - $(new_row).show(); + $(new_row).css('display', ''); if (r.has_children && !r.expanded) { r.expanded = true; this.update_expando(r.uid, true); @@ -844,7 +862,7 @@ // one row if (id) { - for (var n=0 in this.selection) + for (var n in this.selection) if (this.selection[n] == id) { this.selection.splice(n,1); break; @@ -1072,6 +1090,14 @@ */ drag_mouse_move: function(e) { + // convert touch event + if (e.type == 'touchmove') { + if (e.changedTouches.length == 1) + e = rcube_event.touchevent(e.changedTouches[0]); + else + return rcube_event.cancel(e); + } + if (this.drag_start) { // check mouse movement, of less than 3 pixels, don't start dragging var m = rcube_event.get_mouse_pos(e); @@ -1092,13 +1118,15 @@ this.select_childs(uid); } + // reset content + this.draglayer.html(''); + // get subjects of selected messages - var names = ''; - var c, i, subject, obj; - for (var n=0; n<this.selection.length; n++) { + var c, i, n, subject, obj; + for (n=0; n<this.selection.length; n++) { // only show 12 lines if (n>12) { - names += '...'; + this.draglayer.append('...'); break; } @@ -1111,7 +1139,7 @@ this.drag_start_pos = $(obj.childNodes[i]).offset(); if (this.subject_col < 0 || (this.subject_col >= 0 && this.subject_col == c)) { - var node, tmp_node, nodes = obj.childNodes[i].childNodes; + var entry, node, tmp_node, nodes = obj.childNodes[i].childNodes; // find text node for (m=0; m<nodes.length; m++) { if ((tmp_node = obj.childNodes[i].childNodes[m]) && (tmp_node.nodeType==3 || tmp_node.nodeName=='A')) @@ -1121,11 +1149,14 @@ if (!node) break; - subject = node.nodeType==3 ? node.data : node.innerHTML; + subject = $(node).text(); // remove leading spaces - subject = subject.replace(/^\s+/i, ''); + subject = $.trim(subject); // truncate line to 50 characters - names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '<br />'; + subject = (subject.length > 50 ? subject.substring(0, 50) + '...' : subject); + + entry = $('<div>').text(subject); + this.draglayer.append(entry); break; } c++; @@ -1134,9 +1165,7 @@ } } - this.draglayer.html(names); this.draglayer.show(); - this.drag_active = true; this.triggerEvent('dragstart'); } @@ -1159,6 +1188,11 @@ drag_mouse_up: function(e) { document.onmousemove = null; + + if (e.type == 'touchend') { + if (e.changedTouches.length != 1) + return rcube_event.cancel(e); + } if (this.draglayer && this.draglayer.is(':visible')) { if (this.drag_start_pos) @@ -1173,6 +1207,11 @@ rcube_event.remove_listener({event:'mousemove', object:this, method:'drag_mouse_move'}); rcube_event.remove_listener({event:'mouseup', object:this, method:'drag_mouse_up'}); + + if (bw.iphone || bw.ipad) { + rcube_event.remove_listener({event:'touchmove', object:this, method:'drag_mouse_move'}); + rcube_event.remove_listener({event:'touchend', object:this, method:'drag_mouse_up'}); + } // remove temp divs this.del_dragfix(); @@ -1357,6 +1396,10 @@ // update subject column position if (this.subject_col == from) this.subject_col = to > from ? to - 1 : to; + else if (this.subject_col < from && to <= this.subject_col) + this.subject_col++; + else if (this.subject_col > from && to >= this.subject_col) + this.subject_col--; this.triggerEvent('column_replace'); } -- Gitblit v1.9.1