From 90550b94790f74df455bfc34c5277c715c8d5d1a Mon Sep 17 00:00:00 2001
From: vbenincasa <vbenincasa@gmail.com>
Date: Mon, 02 May 2011 09:20:01 -0400
Subject: [PATCH]  - Added an example in editor.js to help the skin developers know the possibility of sending config. parameter to TinyMCE  - Small fix to allow the script to work in IE6 and IE7

---
 skins/default/functions.js |   83 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 76 insertions(+), 7 deletions(-)

diff --git a/skins/default/functions.js b/skins/default/functions.js
index 62e4783..65ac39d 100644
--- a/skins/default/functions.js
+++ b/skins/default/functions.js
@@ -13,7 +13,7 @@
     tab = '#settingstab' + (rcmail.env.action=='preferences' ? 'default' : (rcmail.env.action.indexOf('identity')>0 ? 'identities' : rcmail.env.action.replace(/\./g, '')));
 
   $(tab).addClass('tablink-selected');
-  $(tab + '> a').removeAttr('onclick').unbind('click').bind('click', function(){return false;});
+  $(tab + '> a').removeAttr('onclick').click(function() { return false; });
 }
 
 function rcube_show_advanced(visible)
@@ -37,7 +37,7 @@
   fs.each(function(idx) { if (idx != current) $(this).hide(); });
 
   // create tabs container
-  var tabs = $('<div>').addClass('tabsbar').appendTo($(content));
+  var tabs = $('<div>').addClass('tabsbar').appendTo(content);
 
   // convert fildsets into tabs
   fs.each(function(idx) {
@@ -46,7 +46,7 @@
     // create a tab
     a   = $('<a>').text(legend.text()).attr('href', '#');
     tab = $('<span>').attr({'id': 'tab'+idx, 'class': 'tablink'})
-        .click(function() { return rcube_show_tab(id, idx); })
+        .click(function() { rcube_show_tab(id, idx); return false })
 
     // remove legend
     legend.remove();
@@ -128,13 +128,13 @@
 
   if (show && ref) {
     var parent = $(ref).parent(),
+      win = $(window),
       pos = parent.hasClass('dropbutton') ? parent.offset() : $(ref).offset();
 
-    if (!above && pos.top + ref.offsetHeight + obj.height() > window.innerHeight)
+    if (!above && pos.top + ref.offsetHeight + obj.height() > win.height())
       above = true;
-
-    if (pos.left + obj.width() > window.innerWidth)
-      pos.left = window.innerWidth - obj.width() - 30;
+    if (pos.left + obj.width() > win.width())
+      pos.left = win.width() - obj.width() - 30;
 
     obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.offsetHeight)) });
   }
@@ -497,6 +497,14 @@
     rcmail.addEventListener('aftertoggle-editor', 'resize_compose_body_ev', rcmail_ui);
     rcmail.gui_object('message_dragmenu', 'dragmessagemenu');
 
+    if (rcmail.gui_objects.mailboxlist) {
+      rcmail.addEventListener('responseaftermark', rcube_render_mailboxlist);
+      rcmail.addEventListener('responseaftergetunread', rcube_render_mailboxlist);
+      rcmail.addEventListener('responseaftercheck-recent', rcube_render_mailboxlist);
+      rcmail.addEventListener('aftercollapse-folder', rcube_render_mailboxlist);
+      rcube_render_mailboxlist();
+    }
+
     if (rcmail.env.action == 'compose')
       rcmail_ui.init_compose_form();
   }
@@ -513,3 +521,64 @@
   rcube_event.add_listener({ element: doc, object:rcmail_ui, method:'body_mouseup', event:'mouseup' });
 }
 
+// Abbreviate mailbox names to fit width of the container
+function rcube_render_mailboxlist()
+{
+  if (bw.ie6)  // doesn't work well on IE6
+    return;
+
+  $('#mailboxlist > li a, #mailboxlist ul:visible > li a').each(function(){
+    var elem = $(this);
+    var text = elem.data('text');
+    if (!text) {
+      text = elem.text().replace(/\s+\(.+$/, '');
+      elem.data('text', text);
+    }
+    if (text.length < 6)
+      return;
+
+    var abbrev = fit_string_to_size(text, elem, elem.width() - elem.children('span.unreadcount').width());
+    if (abbrev != text)
+      elem.attr('title', text);
+    elem.contents().filter(function(){ return (this.nodeType == 3); }).get(0).data = abbrev;
+  });
+}
+
+// inspired by https://gist.github.com/24261/7fdb113f1e26111bd78c0c6fe515f6c0bf418af5
+function fit_string_to_size(str, elem, len)
+{
+    var result = str;
+    var ellip = '...';
+    var span = $('<b>').css({ visibility:'hidden', padding:'0px' }).appendTo(elem).get(0);
+
+    // on first run, check if string fits into the length already.
+    span.innerHTML = result;
+    if (span.offsetWidth > len) {
+        var cut = Math.max(1, Math.floor(str.length * ((span.offsetWidth - len) / span.offsetWidth) / 2)),
+          mid = Math.floor(str.length / 2);
+        var offLeft = mid, offRight = mid;
+        while (true) {
+            offLeft = mid - cut;
+            offRight = mid + cut;
+            span.innerHTML = str.substring(0,offLeft) + ellip + str.substring(offRight);
+
+            // break loop if string fits size
+            if (span.offsetWidth <= len || offLeft < 3)
+              break;
+
+            cut++;
+        }
+
+        // build resulting string
+        result = str.substring(0,offLeft) + ellip + str.substring(offRight);
+    }
+    
+    span.parentNode.removeChild(span);
+    return result;
+}
+
+// Optional parameters used by TinyMCE
+var rcmail_editor_settings = {
+  skin : "default", // "default", "o2k7"
+  skin_variant : "" // "", "silver", "black"
+};

--
Gitblit v1.9.1