From d2215764898919f1ea3b461fb08ac430db4340a4 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Fri, 21 Mar 2014 13:32:13 -0400
Subject: [PATCH] Disable link registering mailto: protocol handler if not supported by the browser (#1489569)

---
 skins/larry/settings.css        |    5 +++++
 program/steps/settings/func.inc |    9 ++++++---
 skins/classic/common.css        |    7 +++++++
 skins/larry/styles.css          |    6 ++++++
 program/js/app.js               |   26 +++++++++++++++++---------
 5 files changed, 41 insertions(+), 12 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 332d984..7fb6441 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -7516,20 +7516,28 @@
     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 7c36df3..307be8c 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -376,13 +376,16 @@
             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 9eaa8f7..0de8a2f 100644
--- a/skins/classic/common.css
+++ b/skins/classic/common.css
@@ -55,6 +55,13 @@
   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 af667b9..675ef99 100644
--- a/skins/larry/settings.css
+++ b/skins/larry/settings.css
@@ -319,3 +319,8 @@
 #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 671cf6b..10e6489 100644
--- a/skins/larry/styles.css
+++ b/skins/larry/styles.css
@@ -1613,6 +1613,12 @@
 	width: 95%;
 }
 
+.propform a.disabled {
+	color: #999;
+	text-decoration: none;
+	cursor: default;
+}
+
 fieldset.floating {
 	float: left;
 	margin-right: 10px;

--
Gitblit v1.9.1