diff options
author | Aleksander Machniak <alec@alec.pl> | 2012-05-28 14:17:57 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2012-05-28 14:17:57 +0200 |
commit | e349a8c9ae4adfc1aab48a5461902242930da7bf (patch) | |
tree | 7938bd47af7bca77b023d1eaf2bf1c1e23a57f0c /program/js | |
parent | 2d7b4ff03fc5a4ee4705698d96ad377b5f81a65c (diff) |
Added browser capabilities detection, i.e. PDF and TIFF support
Diffstat (limited to 'program/js')
-rw-r--r-- | program/js/app.js | 83 |
1 files changed, 81 insertions, 2 deletions
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<len; i++) { + plugin = plugins[i]; + if (typeof plugin === 'String') { + if (regex.test(plugin)) + return 1; + } + else if (plugin.name && regex.test(plugin.name)) + return 1; + } + + return 0; + }; + } // end object rcube_webmail |