From 749630294563ff017f81edb4c091e27502905c2d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Wed, 27 Jan 2016 02:53:12 -0500 Subject: [PATCH] Fix bug where Archive/Junk buttons were not active after page jump with select=all mode (#1490647) --- program/js/app.js | 48 +++++++++++++++++++++++++++++------------------- 1 files changed, 29 insertions(+), 19 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 123f1fe..d454109 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -141,8 +141,8 @@ var n, p = this; this.task = this.env.task; - // check browser - if (this.env.server_error != 409 && (!bw.dom || !bw.xmlhttp_test() || (bw.mz && bw.vendver < 1.9))) { + // check browser capabilities (never use version checks here) + if (this.env.server_error != 409 && (!bw.dom || !bw.xmlhttp_test())) { this.goto_url('error', '_code=0x199'); return; } @@ -7111,7 +7111,9 @@ this.enable_command('expand-all', 'expand-unread', 'collapse-all', this.env.threading && this.env.messagecount); if ((response.action == 'list' || response.action == 'search') && this.message_list) { - this.msglist_select(this.message_list); + // trigger 'select' so all dependent actions update its state + // e.g. plugins use this event to activate buttons (#1490647) + this.message_list.triggerEvent('select'); this.triggerEvent('listupdate', { folder:this.env.mailbox, rowcount:this.message_list.rowcount }); } } @@ -7248,8 +7250,8 @@ // html5 file-drop API this.document_drag_hover = function(e, over) { - e.preventDefault(); - $(ref.gui_objects.filedrop)[(over?'addClass':'removeClass')]('active'); + // don't e.preventDefault() here to not block text dragging on the page (#1490619) + $(this.gui_objects.filedrop)[(over?'addClass':'removeClass')]('active'); }; this.file_drag_hover = function(e, over) @@ -7281,7 +7283,8 @@ var submit_data = function() { var multiple = files.length > 1, ts = new Date().getTime(), - content = '<span>' + (multiple ? ref.get_label('uploadingmany') : files[0].name) + '</span>'; + // jQuery way to escape filename (#1490530) + content = $('<span>').text(multiple ? ref.get_label('uploadingmany') : files[0].name).html(); // add to attachments list if (!ref.add2attachment_list(ts, { name:'', html:content, classname:'uploading', complete:false })) @@ -7645,14 +7648,10 @@ if (!this.env.browser_capabilities) this.env.browser_capabilities = {}; - if (this.env.browser_capabilities.pdf === undefined) - this.env.browser_capabilities.pdf = this.pdf_support_check(); - - if (this.env.browser_capabilities.flash === undefined) - this.env.browser_capabilities.flash = this.flash_support_check(); - - if (this.env.browser_capabilities.tif === undefined) - this.tif_support_check(); + $.each(['pdf', 'flash', 'tif'], function() { + if (ref.env.browser_capabilities[this] === undefined) + ref.env.browser_capabilities[this] = ref[this + '_support_check'](); + }); }; // Returns browser capabilities string @@ -7671,16 +7670,19 @@ this.tif_support_check = function() { - var img = new Image(); + window.setTimeout(function() { + var img = new Image(); + img.onload = function() { ref.env.browser_capabilities.tif = 1; }; + img.onerror = function() { ref.env.browser_capabilities.tif = 0; }; + img.src = 'program/resources/blank.tif'; + }, 10); - img.onload = function() { rcmail.env.browser_capabilities.tif = 1; }; - img.onerror = function() { rcmail.env.browser_capabilities.tif = 0; }; - img.src = 'program/resources/blank.tif'; + return 0; }; this.pdf_support_check = function() { - var plugin = navigator.mimeTypes ? navigator.mimeTypes["application/pdf"] : {}, + var i, plugin = navigator.mimeTypes ? navigator.mimeTypes["application/pdf"] : {}, plugins = navigator.plugins, len = plugins.length, regex = /Adobe Reader|PDF|Acrobat/i; @@ -7711,6 +7713,14 @@ return 1; } + window.setTimeout(function() { + $('<object>').css({position: 'absolute', left: '-10000px'}) + .attr({data: 'program/resources/dummy.pdf', width: 1, height: 1, type: 'application/pdf'}) + .load(function() { ref.env.browser_capabilities.pdf = 1; }) + .error(function() { ref.env.browser_capabilities.pdf = 0; }) + .appendTo($('body')); + }, 10); + return 0; }; -- Gitblit v1.9.1