From e349a8c9ae4adfc1aab48a5461902242930da7bf Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 28 May 2012 14:17:57 +0200 Subject: Added browser capabilities detection, i.e. PDF and TIFF support --- program/js/app.js | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 81 insertions(+), 2 deletions(-) (limited to 'program/js/app.js') diff --git a/program/js/app.js b/program/js/app.js index c4bf5ec31..32ab69f2e 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -307,6 +307,10 @@ function rcube_webmail() this.http_post(postact, postdata); } + // detect browser capabilities + if (!this.is_framed()) + this.browser_capabilities_check(); + break; case 'addressbook': @@ -1943,13 +1947,16 @@ function rcube_webmail() if (this.env.search_request) url += '&_search='+this.env.search_request; - if (action == 'preview' && String(target.location.href).indexOf(url) >= 0) + // add browser capabilities, so we can properly handle attachments + url += '&_caps='+urlencode(this.browser_capabilities()); + + if (preview && String(target.location.href).indexOf(url) >= 0) this.show_contentframe(true); else { this.location_href(this.env.comm_path+url, target, true); // mark as read and change mbox unread counter - if (action == 'preview' && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) { + if (preview && this.message_list && this.message_list.rows[id] && this.message_list.rows[id].unread && this.env.preview_pane_mark_read >= 0) { this.preview_read_timer = setTimeout(function() { ref.set_message(id, 'unread', false); ref.update_thread_root(id, 'read'); @@ -6368,6 +6375,78 @@ function rcube_webmail() $(elem).click(function() { rcmail.register_protocol_handler(name); return false; }); }; + // Checks browser capabilities eg. PDF support, TIF support + this.browser_capabilities_check = function() + { + 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.tif === undefined) + this.tif_support_check(); + }; + + // Returns browser capabilities string + this.browser_capabilities = function() + { + if (!this.env.browser_capabilities) + return ''; + + var n, ret = []; + + for (n in this.env.browser_capabilities) + ret.push(n + '=' + this.env.browser_capabilities[n]); + + return ret.join(); + }; + + this.tif_support_check = function() + { + var img = new Image(); + + img.onload = function() { rcmail.env.browser_capabilities.tif = 1; }; + img.onerror = function() { rcmail.env.browser_capabilities.tif = 0; }; + img.src = 'program/blank.tif'; + }; + + this.pdf_support_check = function() + { + var plugin = navigator.mimeTypes ? navigator.mimeTypes["application/pdf"] : {}, + plugins = navigator.plugins, + len = plugins.length, + regex = /Adobe Reader|PDF|Acrobat/i; + + if (plugin && plugin.enabledPlugin) + return 1; + + if (window.ActiveXObject) { + try { + if (axObj = new ActiveXObject("AcroPDF.PDF")) + return 1; + } + catch (e) {} + try { + if (axObj = new ActiveXObject("PDF.PdfCtrl")) + return 1; + } + catch (e) {} + } + + for (i=0; i Date: Mon, 28 May 2012 15:19:43 +0200 Subject: Add Flash support detection --- CHANGELOG | 2 +- program/js/app.js | 21 +++++++++++++++++++++ program/steps/mail/show.inc | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) (limited to 'program/js/app.js') diff --git a/CHANGELOG b/CHANGELOG index 365667592..b125dbebb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,7 @@ CHANGELOG Roundcube Webmail =========================== -- Don't display PDF and TIFF attachments inline without browser support (#1488452, #1487929) +- Don't display Pdf/Tiff/Flash attachments inline without browser support (#1488452, #1487929) - Fix html2text conversion of strong|b|a|th|h tags when used in upper case - Add listcontrols template container in Larry skin (#1488498) - Fix host autoselection when default_host is an array (#1488495) diff --git a/program/js/app.js b/program/js/app.js index 32ab69f2e..e487a6052 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -6384,6 +6384,9 @@ function rcube_webmail() 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(); }; @@ -6447,6 +6450,24 @@ function rcube_webmail() return 0; }; + this.flash_support_check = function() + { + var plugin = navigator.mimeTypes ? navigator.mimeTypes["application/x-shockwave-flash"] : {}; + + if (plugin && plugin.enabledPlugin) + return 1; + + if (window.ActiveXObject) { + try { + if (axObj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) + return 1; + } + catch (e) {} + } + + return 0; + }; + } // end object rcube_webmail diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index bf1757699..7fcfafcaa 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -69,6 +69,9 @@ if ($uid = get_input_value('_uid', RCUBE_INPUT_GET)) { if (empty($_SESSION['browser_caps']['pdf']) && ($key = array_search('application/pdf', $mimetypes)) !== false) { unset($mimetypes[$key]); } + if (empty($_SESSION['browser_caps']['flash']) && ($key = array_search('application/x-shockwave-flash', $mimetypes)) !== false) { + unset($mimetypes[$key]); + } // @TODO: we could convert TIFF to JPEG and display it if (empty($_SESSION['browser_caps']['tif']) && ($key = array_search('image/tiff', $mimetypes)) !== false) { unset($mimetypes[$key]); -- cgit v1.2.3