From 9601f05424baf0c457b44310d80115deeb8aa1b7 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Wed, 11 Aug 2010 05:10:34 -0400 Subject: [PATCH] - Two fixes for Konqueror --- program/js/app.js | 248 ++++++++++++++++++++----------------------------- 1 files changed, 102 insertions(+), 146 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index fc9ef77..6266c33 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -203,7 +203,7 @@ 'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers']; if (this.env.action=='show' || this.env.action=='preview') { - this.enable_command(this.env.message_commands, true); + this.enable_command(this.env.message_commands, this.env.uid); if (this.env.next_uid) { this.enable_command('nextmessage', 'lastmessage', true); @@ -225,7 +225,7 @@ } } else if (this.env.action == 'compose') { - this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true); + this.enable_command('send-attachment', 'remove-attachment', 'send', 'toggle-editor', true); if (this.env.spellcheck) { this.env.spellcheck.spelling_state_observer = function(s){ ref.set_spellcheck_state(s); }; @@ -243,7 +243,7 @@ this.init_messageform(); } // show printing dialog - else if (this.env.action == 'print') + else if (this.env.action == 'print' && this.env.uid) window.print(); // get unread count for each mailbox @@ -321,7 +321,7 @@ } else if (this.env.action=='edit-identity' || this.env.action=='add-identity') { this.enable_command('add', this.env.identities_level < 2); - this.enable_command('save', 'delete', 'edit', true); + this.enable_command('save', 'delete', 'edit', 'toggle-editor', true); } else if (this.env.action=='folders') this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', 'enable-threading', 'disable-threading', true); @@ -484,10 +484,9 @@ } break; - // misc list commands case 'list': if (this.task=='mail') { - if (this.env.search_request<0 || (props != '' && (this.env.search_request && props != this.env.mailbox))) + if (!this.env.search_request || (props && props != this.env.mailbox)) this.reset_qsearch(); this.list_mailbox(props); @@ -496,7 +495,7 @@ this.set_alttext('delete', this.env.mailbox != this.env.trash_mailbox ? 'movemessagetotrash' : 'deletemessage'); } else if (this.task=='addressbook') { - if (this.env.search_request<0 || (this.env.search_request && props != this.env.source)) + if (!this.env.search_request || (props != this.env.source)) this.reset_qsearch(); this.list_contacts(props); @@ -504,16 +503,9 @@ } break; - - case 'listgroup': - this.list_contacts(props.source, props.id); - break; - - case 'load-headers': this.load_headers(obj); break; - case 'sort': var sort_order, sort_col = props; @@ -557,7 +549,6 @@ this.purge_mailbox(this.env.mailbox); break; - // common commands used in multiple tasks case 'show': if (this.task=='mail') { @@ -597,7 +588,6 @@ } break; - case 'save-identity': case 'save': if (this.gui_objects.editform) { var input_pagesize = $("input[name='_pagesize']"); @@ -872,18 +862,11 @@ clearTimeout(this.request_timer); break; - case 'add-attachment': - this.show_attachment_form(true); - case 'send-attachment': // Reset the auto-save timer self.clearTimeout(this.save_timer); this.upload_file(props) - break; - - case 'remove-attachment': - this.remove_attachment(props); break; case 'insert-sig': @@ -930,10 +913,6 @@ this.goto_url('viewsource', '&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+'&_save=1'); break; - case 'add-contact': - this.add_contact(props); - break; - // quicksearch case 'search': if (!props && this.gui_objects.qsearchbox) @@ -954,16 +933,8 @@ this.list_contacts(this.env.source, this.env.group); break; - case 'group-create': - this.add_contact_group(props) - break; - - case 'group-rename': - this.rename_contact_group(); - break; - - case 'group-delete': - this.delete_contact_group(); + case 'listgroup': + this.list_contacts(props.source, props.id); break; case 'import': @@ -991,12 +962,6 @@ } break; - // collapse/expand folder - case 'collapse-folder': - if (props) - this.collapse_folder(props); - break; - // user settings commands case 'preferences': this.goto_url(''); @@ -1006,41 +971,16 @@ this.goto_url('identities'); break; - case 'delete-identity': - this.delete_identity(); - case 'folders': this.goto_url('folders'); break; - case 'subscribe': - this.subscribe_folder(props); + // unified command call (command name == function name) + default: + var func = command.replace(/-/g, '_'); + if (this[func] && typeof this[func] == 'function') + this[func](props); break; - - case 'unsubscribe': - this.unsubscribe_folder(props); - break; - - case 'enable-threading': - this.enable_threading(props); - break; - - case 'disable-threading': - this.disable_threading(props); - break; - - case 'create-folder': - this.create_folder(props); - break; - - case 'rename-folder': - this.rename_folder(props); - break; - - case 'delete-folder': - this.delete_folder(props); - break; - } this.triggerEvent('after'+command, props); @@ -1078,9 +1018,10 @@ if (msg == message) msg = 'Loading...'; - this.display_message(msg, 'loading', true); + if (this.gui_objects.message && this.gui_objects.message.__type != 'error') + this.display_message(msg, 'loading', true); } - else if (!a) + else if (!a && this.gui_objects.message && this.gui_objects.message.__type != 'error') this.hide_message(); this.busy = a; @@ -1302,7 +1243,7 @@ this.env.folder_coords[k].on = 0; } } - + if (layerclass != oldclass && this.contact_list && this.contact_list.draglayer) this.contact_list.draglayer.attr('class', layerclass); } @@ -1495,13 +1436,13 @@ if (this.env.messages[row.uid]) this.env.messages[row.uid].expanded = row.expanded; }; - + this.msglist_set_coltypes = function(list) { var i, found, name, cols = list.list.tHead.rows[0].cells; - + this.env.coltypes = []; - + for (i=0; i<cols.length; i++) if (cols[i].id && cols[i].id.match(/^rcm/)) { name = cols[i].id.replace(/^rcm/, ''); @@ -1520,7 +1461,7 @@ this.check_droptarget = function(id) { var allow = false, copy = false; - + if (this.task == 'mail') allow = (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual); else if (this.task == 'settings') @@ -1538,7 +1479,7 @@ } } } - + return allow ? (copy ? 2 : 1) : 0; }; @@ -1594,7 +1535,9 @@ depth: flags.depth?flags.depth:0, unread_children: flags.unread_children?flags.unread_children:0, parent_uid: flags.parent_uid?flags.parent_uid:0, - selected: this.select_all_mode || this.message_list.in_selection(uid) + selected: this.select_all_mode || this.message_list.in_selection(uid), + // flags from plugins + flags: flags.extra_flags }); var c, tree = expando = '', @@ -1729,7 +1672,7 @@ { var update, add_url = ''; - if (sort_col === null) + if (typeof sort_col == 'undefined') sort_col = this.env.sort_col; if (!sort_order) sort_order = this.env.sort_order; @@ -1816,11 +1759,11 @@ this.show_contentframe = function(show) { - var frm; + var frm, win; if (this.env.contentframe && (frm = $('#'+this.env.contentframe)) && frm.length) { - if (!show && window.frames[this.env.contentframe]) { - if (window.frames[this.env.contentframe].location.href.indexOf(this.env.blankpage)<0) - window.frames[this.env.contentframe].location.href = this.env.blankpage; + if (!show && (win = window.frames[this.env.contentframe])) { + if (win.location && win.location.href.indexOf(this.env.blankpage)<0) + win.location.href = this.env.blankpage; } else if (!bw.safari && !bw.konq) frm[show ? 'show' : 'hide'](); @@ -1893,17 +1836,14 @@ page = 1; this.env.current_page = page; this.select_all_mode = false; - this.show_contentframe(false); } + + // unselect selected messages and clear the list and message data + this.clear_message_list(); if (mbox != this.env.mailbox || (mbox == this.env.mailbox && !page && !sort)) url += '&_refresh=1'; - // unselect selected messages - this.last_selected = 0; - if (this.message_list) { - this.message_list.clear_selection(); - } this.select_folder(mbox, this.env.mailbox); this.env.mailbox = mbox; @@ -1923,6 +1863,16 @@ this.set_busy(true, 'loading'); target.location.href = this.env.comm_path+'&_mbox='+urlencode(mbox)+(page ? '&_page='+page : '')+url; } + }; + + this.clear_message_list = function() + { + this.env.messages = {}; + this.last_selected = 0; + + this.show_contentframe(false); + if (this.message_list) + this.message_list.clear(true); }; // send remote request to load message list @@ -2258,8 +2208,6 @@ rows[uid].forwarded = status; else if (flag == 'flagged') rows[uid].flagged = status; - -// this.env.messages[uid] = rows[uid]; }; // set message row status, class and icon @@ -2866,6 +2814,31 @@ return true; }; + this.toggle_editor = function(props) + { + if (props.mode == 'html') { + this.display_spellcheck_controls(false); + this.plain2html($('#'+props.id).val(), props.id); + tinyMCE.execCommand('mceAddControl', false, props.id); + } + else { + var thisMCE = tinyMCE.get(props.id), existingHtml; + if (thisMCE.plugins.spellchecker && thisMCE.plugins.spellchecker.active) + thisMCE.execCommand('mceSpellCheck', false); + + if (existingHtml = thisMCE.getContent()) { + if (!confirm(this.get_label('editorwarning'))) { + return false; + } + this.html2plain(existingHtml, props.id); + } + tinyMCE.execCommand('mceRemoveControl', false, props.id); + this.display_spellcheck_controls(true); + } + + return true; + }; + this.stop_spellchecking = function() { if (this.env.spellcheck && !this.spellcheck_ready) { @@ -3067,32 +3040,6 @@ return true; }; - this.show_attachment_form = function(a) - { - if (!this.gui_objects.uploadbox) - return false; - - var elm, list; - if (elm = this.gui_objects.uploadbox) { - if (a && (list = this.gui_objects.attachmentlist)) { - var pos = $(list).offset(); - elm.style.top = (pos.top + list.offsetHeight + 10) + 'px'; - elm.style.left = pos.left + 'px'; - } - - $(elm).toggle(); - } - - // clear upload form - try { - if (!a && this.gui_objects.attachmentform != this.gui_objects.messageform) - this.gui_objects.attachmentform.reset(); - } - catch(e){} // ignore errors - - return true; - }; - // upload attachment file this.upload_file = function(form) { @@ -3155,8 +3102,6 @@ form.setAttribute('enctype', 'multipart/form-data'); form.submit(); - // hide upload form - this.show_attachment_form(false); // display upload indicator and cancel button var content = this.get_label('uploading'); if (this.env.loadingicon) @@ -3244,7 +3189,7 @@ if (value != '') { var addurl = ''; if (this.message_list) { - this.message_list.clear(); + this.clear_message_list(); if (this.env.search_mods) { var mods = this.env.search_mods[this.env.mailbox] ? this.env.search_mods[this.env.mailbox] : this.env.search_mods['*']; if (mods) { @@ -3476,7 +3421,7 @@ for (i=0; i < a_results.length; i++) { text = typeof a_results[i] == 'object' ? a_results[i].name : a_results[i]; li = document.createElement('LI'); - li.innerHTML = text.replace(new RegExp('('+s_val+')', 'ig'), '##$1%%').replace(/</g, '<').replace(/>/g, '>').replace(/##([^%]+)%%/g, '<b>$1</b>'); + li.innerHTML = text.replace(new RegExp('('+RegExp.escape(s_val)+')', 'ig'), '##$1%%').replace(/</g, '<').replace(/>/g, '>').replace(/##([^%]+)%%/g, '<b>$1</b>'); li.onmouseover = function(){ ref.ksearch_select(this); }; li.onmouseup = function(){ ref.ksearch_click(this) }; li._rcm_id = i; @@ -3726,7 +3671,7 @@ this.contact_list.remove_row(cid); this.contact_list.init_row(row); this.contact_list.selection[0] = newcid; - ow.style.display = ''; + row.style.display = ''; } return true; @@ -3766,24 +3711,24 @@ }; - this.add_contact_group = function() + this.group_create = function() { if (!this.gui_objects.folderlist || !this.env.address_sources[this.env.source].groups) return; if (!this.name_input) { this.name_input = $('<input>').attr('type', 'text'); - this.name_input.bind('keypress', function(e){ return rcmail.add_input_keypress(e); }); + this.name_input.bind('keydown', function(e){ return rcmail.add_input_keydown(e); }); this.name_input_li = $('<li>').addClass('contactgroup').append(this.name_input); var li = this.get_folder_li(this.env.source) this.name_input_li.insertAfter(li); } - this.name_input.select(); + this.name_input.select().focus(); }; - this.rename_contact_group = function() + this.group_rename = function() { if (!this.env.group || !this.gui_objects.folderlist) return; @@ -3791,7 +3736,7 @@ if (!this.name_input) { this.enable_command('list', 'listgroup', false); this.name_input = $('<input>').attr('type', 'text').val(this.env.contactgroups['G'+this.env.source+this.env.group].name); - this.name_input.bind('keypress', function(e){ return rcmail.add_input_keypress(e); }); + this.name_input.bind('keydown', function(e){ return rcmail.add_input_keydown(e); }); this.env.group_renaming = true; var link, li = this.get_folder_li(this.env.source+this.env.group, 'rcmliG'); @@ -3800,10 +3745,10 @@ } } - this.name_input.select(); + this.name_input.select().focus(); }; - this.delete_contact_group = function() + this.group_delete = function() { if (this.env.group) this.http_post('group-delete', '_source='+urlencode(this.env.source)+'&_gid='+urlencode(this.env.group), true); @@ -3825,7 +3770,7 @@ }; // handler for keyboard events on the input field - this.add_input_keypress = function(e) + this.add_input_keydown = function(e) { var key = rcube_event.get_keycode(e); @@ -3918,9 +3863,9 @@ this.subscription_list.row_init = function (row) { var anchors = row.obj.getElementsByTagName('a'); if (anchors[0]) - anchors[0].onclick = function() { p.rename_folder(row.id); return false; }; + anchors[0].onclick = function() { p.command('rename-folder', row.id); return false; }; if (anchors[1]) - anchors[1].onclick = function() { p.delete_folder(row.id); return false; }; + anchors[1].onclick = function() { p.command('delete-folder', row.id); return false; }; row.obj.onmouseover = function() { p.focus_subscription(row.id); }; row.obj.onmouseout = function() { p.unfocus_subscription(row.id); }; }; @@ -3959,7 +3904,7 @@ if (action=='edit-identity' && (!id || id==this.env.iid)) return false; - var add_url = '', target = window; + var add_url = '', target = window; if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) { add_url = '&_framed=1'; @@ -4100,7 +4045,7 @@ reg = new RegExp('['+RegExp.escape(this.env.delimiter)+']?[^'+RegExp.escape(this.env.delimiter)+']+$'); this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, ''); - this.name_input.onkeypress = function(e){ rcmail.name_input_keypress(e); }; + this.name_input.onkeydown = function(e){ rcmail.name_input_keydown(e); }; row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild); this.edit_folder = id; @@ -4123,7 +4068,7 @@ }; // handler for keyboard events on the input field - this.name_input_keypress = function(e) + this.name_input_keydown = function(e) { var key = rcube_event.get_keycode(e); @@ -4287,13 +4232,13 @@ form.elements['_folder_newname'].value = ''; }; - this.subscribe_folder = function(folder) + this.subscribe = function(folder) { if (folder) this.http_post('subscribe', '_mbox='+urlencode(folder)); }; - this.unsubscribe_folder = function(folder) + this.unsubscribe = function(folder) { if (folder) this.http_post('unsubscribe', '_mbox='+urlencode(folder)); @@ -4551,6 +4496,7 @@ cont = '<div class="'+type+'">'+cont+'</div>'; var obj = $(this.gui_objects.message).html(cont).show(); + this.gui_objects.message.__type = type; if (type!='loading') obj.bind('mousedown', function(){ ref.hide_message(); return true; }); @@ -4673,7 +4619,7 @@ this.set_quota = function(content) { if (content && this.gui_objects.quotadisplay) { - if (typeof(content) == 'object') + if (typeof(content) == 'object' && content.type == 'image') this.percent_indicator(this.gui_objects.quotadisplay, content); else $(this.gui_objects.quotadisplay).html(content); @@ -4824,6 +4770,9 @@ quota_width = parseInt(quota / 100 * width), pos = $(obj).position(); + // Opera bug? + pos.top = Math.max(0, pos.top); + this.env.indicator_width = width; this.env.indicator_height = height; @@ -4832,6 +4781,9 @@ quota_width = width; quota = 100; } + + if (data.title) + data.title = this.get_label('quota') + ': ' + data.title; // main div var main = $('<div>'); @@ -4863,6 +4815,8 @@ // replace quota image $(obj).html('').append(bar1).append(bar2).append(main); + // update #quotaimg title + $('#quotaimg').attr('title', data.title); }; /********************************************************/ @@ -4927,7 +4881,7 @@ querystring += (querystring ? '&' : '') + '_remote=1'; var url = this.env.comm_path + '&_action=' + action + '&' + querystring; - + // send request console.log('HTTP GET: ' + url); $.get(url, { _unlock:(lock?1:0) }, function(data){ ref.http_response(data); }, 'json'); @@ -5022,7 +4976,8 @@ this.enable_command(this.env.message_commands, 'purge', 'expunge', 'select-all', 'select-none', 'sort', 'expand-all', 'expand-unread', 'collapse-all', false); } - this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount }); + if (this.message_list) + this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount }); } break; @@ -5076,9 +5031,9 @@ if (this._int) clearInterval(this._int); - if (this.env.keep_alive && !this.env.framed && this.task=='mail' && this.gui_objects.mailboxlist) + if (this.env.keep_alive && !this.env.framed && this.task == 'mail' && this.gui_objects.mailboxlist) this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000); - else if (this.env.keep_alive && !this.env.framed && this.task!='login') + else if (this.env.keep_alive && !this.env.framed && this.task != 'login' && this.env.action != 'print') this._int = setInterval(function(){ ref.send_keep_alive(); }, this.env.keep_alive * 1000); }; @@ -5193,3 +5148,4 @@ rcube_webmail.prototype.addEventListener = rcube_event_engine.prototype.addEventListener; rcube_webmail.prototype.removeEventListener = rcube_event_engine.prototype.removeEventListener; rcube_webmail.prototype.triggerEvent = rcube_event_engine.prototype.triggerEvent; + -- Gitblit v1.9.1