From 5934e238242cb0d96e128bfad3905809b5aeb093 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Fri, 21 Mar 2014 18:32:04 +0100 Subject: Disable link registering mailto: protocol handler if not supported by the browser (#1489569) --- program/js/app.js | 26 +++++++++++++++++--------- program/steps/settings/func.inc | 9 ++++++--- skins/classic/common.css | 7 +++++++ skins/larry/settings.css | 5 +++++ skins/larry/styles.css | 6 ++++++ 5 files changed, 41 insertions(+), 12 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 605df57fa..f9d4bb056 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -7510,20 +7510,28 @@ function rcube_webmail() try { window.navigator.registerProtocolHandler('mailto', this.mailto_handler_uri(), name); } - catch(e) {}; + catch(e) { + this.display_message(String(e), 'error'); + }; }; this.check_protocol_handler = function(name, elem) { var nav = window.navigator; - if (!nav - || (typeof nav.registerProtocolHandler != 'function') - || ((typeof nav.isProtocolHandlerRegistered == 'function') - && nav.isProtocolHandlerRegistered('mailto', this.mailto_handler_uri()) == 'registered') - ) - $(elem).addClass('disabled'); - else - $(elem).click(function() { rcmail.register_protocol_handler(name); return false; }); + if (!nav || (typeof nav.registerProtocolHandler != 'function')) { + $(elem).addClass('disabled').click(function(){ return false; }); + } + else { + var status = null; + if (typeof nav.isProtocolHandlerRegistered == 'function') { + status = nav.isProtocolHandlerRegistered('mailto', this.mailto_handler_uri()); + if (status) + $(elem).parent().find('.mailtoprotohandler-status').html(status); + } + else { + $(elem).click(function() { rcmail.register_protocol_handler(name); return false; }); + } + } }; // Checks browser capabilities eg. PDF support, TIF support diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index 7c36df3b1..307be8c8e 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -376,13 +376,16 @@ function rcmail_user_prefs($current = null) if ($current) { $product_name = $RCMAIL->config->get('product_name', 'Roundcube Webmail'); $RCMAIL->output->add_script(sprintf("%s.check_protocol_handler('%s', '#mailtoprotohandler');", - rcmail_output::JS_OBJECT_NAME, rcube::JQ($product_name)), 'foot'); + rcmail_output::JS_OBJECT_NAME, rcube::JQ($product_name)), 'docready'); } $blocks['browser']['options']['mailtoprotohandler'] = array( 'content' => html::a(array( - 'href' => '#', - 'id' => 'mailtoprotohandler'), rcube::Q($RCMAIL->gettext('mailtoprotohandler'))), + 'href' => '#', + 'id' => 'mailtoprotohandler' + ), + rcube::Q($RCMAIL->gettext('mailtoprotohandler'))) . + html::span('mailtoprotohandler-status', ''), ); break; diff --git a/skins/classic/common.css b/skins/classic/common.css index ec58af0a4..1007b866c 100644 --- a/skins/classic/common.css +++ b/skins/classic/common.css @@ -55,6 +55,13 @@ a.tab text-align: center; } +a.disabled +{ + color: #999; + text-decoration: none; + cursor: default; +} + hr { height: 1px; diff --git a/skins/larry/settings.css b/skins/larry/settings.css index af667b9e7..675ef9973 100644 --- a/skins/larry/settings.css +++ b/skins/larry/settings.css @@ -319,3 +319,8 @@ img.skinthumbnail { #rcmfd_signature_toolbar2 td { width: auto; } + +.mailtoprotohandler-status { + padding-left: 1em; + font-style: italic; +} diff --git a/skins/larry/styles.css b/skins/larry/styles.css index 18ba49ae2..bc301df41 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -1564,6 +1564,12 @@ body.iframe .footerleft.floating:before, width: 95%; } +.propform a.disabled { + color: #999; + text-decoration: none; + cursor: default; +} + fieldset.floating { float: left; margin-right: 10px; -- cgit v1.2.3