From 14d494fd993a8530e41f65d548dd91e4a86c91b9 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 28 Sep 2011 05:00:25 -0400
Subject: [PATCH] - Fix misleading display when chaning editor type (#1488104), fix handling of custom commands result

---
 CHANGELOG            |    1 +
 program/js/editor.js |   10 +++++++---
 program/js/app.js    |   22 ++++++++++++++--------
 3 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 7b36c8f..f7fb73f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Fix misleading display when chaning editor type (#1488104)
 - Add loading indicator on contact delete
 - Fix bug where after delete message rows can be added to the list of another folder (#1487752)
 - Add notice on autocompletion that not all records were displayed
diff --git a/program/js/app.js b/program/js/app.js
index a209256..22599eb 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -439,6 +439,8 @@
   // execute a specific command on the web client
   this.command = function(command, props, obj)
   {
+    var ret;
+
     if (obj && obj.blur)
       obj.blur();
 
@@ -462,24 +464,26 @@
 
     // process external commands
     if (typeof this.command_handlers[command] === 'function') {
-      var ret = this.command_handlers[command](props, obj);
+      ret = this.command_handlers[command](props, obj);
       return ret !== undefined ? ret : (obj ? false : true);
     }
     else if (typeof this.command_handlers[command] === 'string') {
-      var ret = window[this.command_handlers[command]](props, obj);
+      ret = window[this.command_handlers[command]](props, obj);
       return ret !== undefined ? ret : (obj ? false : true);
     }
 
     // trigger plugin hooks
     this.triggerEvent('actionbefore', {props:props, action:command});
-    var ret = this.triggerEvent('before'+command, props);
+    ret = this.triggerEvent('before'+command, props);
     if (ret !== undefined) {
-      // abort if one the handlers returned false
+      // abort if one of the handlers returned false
       if (ret === false)
         return false;
       else
         props = ret;
     }
+
+    ret = undefined;
 
     // process internal command
     switch (command) {
@@ -1045,15 +1049,17 @@
       // unified command call (command name == function name)
       default:
         var func = command.replace(/-/g, '_');
-        if (this[func] && typeof this[func] === 'function')
-          this[func](props);
+        if (this[func] && typeof this[func] === 'function') {
+          ret = this[func](props);
+        }
         break;
     }
 
-    this.triggerEvent('after'+command, props);
+    if (this.triggerEvent('after'+command, props) === false)
+      ret = false;
     this.triggerEvent('actionafter', {props:props, action:command});
 
-    return obj ? false : true;
+    return ret === false ? false : obj ? false : true;
   };
 
   // set command(s) enabled or disabled
diff --git a/program/js/editor.js b/program/js/editor.js
index 906faec..63186fb 100644
--- a/program/js/editor.js
+++ b/program/js/editor.js
@@ -115,13 +115,17 @@
     if (flagElement && (flag = rcube_find_object(flagElement)))
       flag.value = '1';
   }
-  else {
-    if (!res && select.tagName == 'SELECT')
-      select.value = 'html';
+  else if (res) {
     if (flagElement && (flag = rcube_find_object(flagElement)))
       flag.value = '0';
 
     if (rcmail.env.composebody)
       rcube_find_object(rcmail.env.composebody).focus();
   }
+  else { // !res
+    if (select.tagName == 'SELECT')
+      select.value = 'html';
+    else if (select.tagName == 'INPUT')
+      select.checked = true;
+  }
 }

--
Gitblit v1.9.1