From 070bc8302e00f766076b4aaabfd2de4a0f2da66f Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Wed, 20 Jul 2011 15:09:12 -0400 Subject: [PATCH] - Add check for inArray() input to prevent error in Firefox 5 --- program/js/app.js | 90 +++++++++++++++++++++++++++++---------------- 1 files changed, 58 insertions(+), 32 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 125b645..df14fc9 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -209,7 +209,7 @@ $(this.gui_objects.qsearchbox).focusin(function() { rcmail.message_list.blur(); }); } - if (this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox) + if (!this.env.flag_for_deletion && this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox) this.set_alttext('delete', 'movemessagetotrash'); this.env.message_commands = ['show', 'reply', 'reply-all', 'reply-list', 'forward', @@ -338,6 +338,10 @@ this.enable_command('add', 'import', this.env.writable_source); this.enable_command('list', 'listgroup', 'advanced-search', true); + + // load contacts of selected source + if (!this.env.action) + this.command('list', this.env.source); break; @@ -526,7 +530,7 @@ this.list_mailbox(props); - if (this.env.trash_mailbox) + if (this.env.trash_mailbox && !this.env.flag_for_deletion) this.set_alttext('delete', this.env.mailbox != this.env.trash_mailbox ? 'movemessagetotrash' : 'deletemessage'); } else if (this.task == 'addressbook') { @@ -2900,9 +2904,9 @@ this.auto_save_start(); }; - this.init_address_input_events = function(obj) + this.init_address_input_events = function(obj, action) { - obj[bw.ie || bw.safari || bw.chrome ? 'keydown' : 'keypress'](function(e){ return ref.ksearch_keydown(e, this); }) + obj[bw.ie || bw.safari || bw.chrome ? 'keydown' : 'keypress'](function(e) { return ref.ksearch_keydown(e, this, action); }) .attr('autocomplete', 'off'); }; @@ -3437,14 +3441,14 @@ /*********************************************************/ // handler for keyboard events on address-fields - this.ksearch_keydown = function(e, obj) + this.ksearch_keydown = function(e, obj, action) { if (this.ksearch_timer) clearTimeout(this.ksearch_timer); - var highlight; - var key = rcube_event.get_keycode(e); - var mod = rcube_event.get_modifier(e); + var highlight, + key = rcube_event.get_keycode(e), + mod = rcube_event.get_modifier(e); switch (key) { case 38: // key up @@ -3468,7 +3472,7 @@ break; case 13: // enter - if (this.ksearch_selected===null || !this.ksearch_input || !this.ksearch_value) + if (this.ksearch_selected === null || !this.ksearch_input || !this.ksearch_value) break; // insert selected address and hide ksearch pane @@ -3488,7 +3492,7 @@ } // start timer - this.ksearch_timer = window.setTimeout(function(){ ref.ksearch_get_results(); }, 200); + this.ksearch_timer = window.setTimeout(function(){ ref.ksearch_get_results(action); }, 200); this.ksearch_input = obj; return true; @@ -3516,6 +3520,7 @@ var inp_value = this.ksearch_input.value, cpos = this.get_caret_pos(this.ksearch_input), p = inp_value.lastIndexOf(this.ksearch_value, cpos), + trigger = false, insert = '', // replace search string with full address @@ -3527,10 +3532,12 @@ insert += this.env.contacts[id].name + ', '; this.group2expand = $.extend({}, this.env.contacts[id]); this.group2expand.input = this.ksearch_input; - this.http_request('group-expand', '_source='+urlencode(this.env.contacts[id].source)+'&_gid='+urlencode(this.env.contacts[id].id), false); + this.http_request('mail/group-expand', '_source='+urlencode(this.env.contacts[id].source)+'&_gid='+urlencode(this.env.contacts[id].id), false); } - else if (typeof this.env.contacts[id] === 'string') + else if (typeof this.env.contacts[id] === 'string') { insert = this.env.contacts[id] + ', '; + trigger = true; + } this.ksearch_input.value = pre + insert + end; @@ -3538,18 +3545,22 @@ cpos = p+insert.length; if (this.ksearch_input.setSelectionRange) this.ksearch_input.setSelectionRange(cpos, cpos); + + if (trigger) + this.triggerEvent('autocomplete_insert', { field:this.ksearch_input, insert:insert }); }; this.replace_group_recipients = function(id, recipients) { if (this.group2expand && this.group2expand.id == id) { this.group2expand.input.value = this.group2expand.input.value.replace(this.group2expand.name, recipients); + this.triggerEvent('autocomplete_insert', { field:this.group2expand.input, insert:recipients }); this.group2expand = null; } }; // address search processor - this.ksearch_get_results = function() + this.ksearch_get_results = function(action) { var inp_value = this.ksearch_input ? this.ksearch_input.value : null; @@ -3595,7 +3606,7 @@ return; var lock = this.display_message(this.get_label('searching'), 'loading'); - this.http_post('autocomplete', '_search='+urlencode(q), lock); + this.http_post(action ? action : 'mail/autocomplete', '_search='+urlencode(q), lock); }; this.ksearch_query_results = function(results, search) @@ -4449,6 +4460,10 @@ row.obj.onmouseout = function() { p.unfocus_subscription(row.id); }; }; this.subscription_list.init(); + $('#mailboxroot') + .mouseover(function(){ p.focus_subscription(this.id); }) + .mouseout(function(){ p.unfocus_subscription(this.id); }) + .mouseup(function(){ if (p.drag_active) p.subscription_move_folder(); }); }; this.focus_subscription = function(id) @@ -4467,6 +4482,10 @@ this.set_env('dstfolder', folder); $(row).addClass('droptarget'); } + } + else if (id == 'mailboxroot') { + this.set_env('dstfolder', ''); + $(row).addClass('droptarget'); } else if (this.env.mailbox.match(new RegExp(delim))) { this.set_env('dstfolder', this.env.delimiter); @@ -4512,11 +4531,13 @@ (this.env.dstfolder != this.env.mailbox.replace(reg, '')) ) { reg = new RegExp('[^'+delim+']*['+delim+']', 'g'); - var lock = this.set_busy(true, 'foldermoving'), - basename = this.env.mailbox.replace(reg, ''), + var basename = this.env.mailbox.replace(reg, ''), newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename; - - this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.mailbox)+'&_folder_newname='+urlencode(newname), lock); + + if (newname != this.env.mailbox) { + this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.mailbox)+'&_folder_newname='+urlencode(newname), this.set_busy(true, 'foldermoving')); + this.subscription_list.draglayer.hide(); + } } this.drag_active = false; this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder)); @@ -4546,9 +4567,9 @@ if (!this.gui_objects.subscriptionlist) return false; - var row, n, i, tmp, folders, len, list = [], slist = [], + var row, n, i, tmp, folders, rowid, list = [], slist = [], tbody = this.gui_objects.subscriptionlist.tBodies[0], - refrow = $('tr', tbody).get(0), + refrow = $('tr', tbody).get(1), id = 'rcmrow'+((new Date).getTime()); if (!refrow) { @@ -4575,7 +4596,10 @@ this.env.subscriptionrows[id] = [name, display_name, 0]; // sort folders, to find a place where to insert the row - folders = this.env.subscriptionrows; + folders = []; + $.each(this.env.subscriptionrows, function(k,v){ folders.push(v) }); + folders.sort(function(a,b){ return a[0] < b[0] ? -1 : (a[0] > b[0] ? 1 : 0) }); + for (n in folders) { // protected folder if (folders[n][2]) { @@ -4591,19 +4615,22 @@ tmp = null; } } - list.sort(); - // make sure protected folders (and their subs) are on top - list = slist.concat(list); + + // check if subfolder of a protected folder + for (n=0; n<slist.length; n++) { + if (name.indexOf(slist[n]+this.env.delimiter) == 0) + rowid = this.get_folder_row_id(slist[n]); + } // find folder position after sorting - for (n=0, len=list.length; n<len; n++) { - if (list[n] == name) - break; + for (n=0; !rowid && n<list.length; n++) { + if (n && list[n] == name) + rowid = this.get_folder_row_id(list[n-1]); } // add row to the table - if (n && n < len) - $('#'+this.get_folder_row_id(list[n-1])).after(row); + if (rowid) + $('#'+rowid).after(row); else row.appendTo(tbody); @@ -5685,7 +5712,7 @@ if (!field.length) { field = $('<input>').attr({type: 'hidden', name: fname}); - field.appendTo(form); + field.prependTo(form); } field.val(ts); @@ -5836,11 +5863,10 @@ if (elm.type == 'hidden') continue; - // remember which elem was disabled before lock if (lock && elm.disabled) this.disabled_form_elements.push(elm); - else if (lock || $.inArray(elm, this.disabled_form_elements)<0) + else if (lock || (this.disabled_form_elements && $.inArray(elm, this.disabled_form_elements)<0)) elm.disabled = lock; } }; -- Gitblit v1.9.1