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 | 98 ++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 85 insertions(+), 13 deletions(-) diff --git a/skins/default/functions.js b/skins/default/functions.js index 00e97fd..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) @@ -25,9 +25,8 @@ // Warning: don't place "caller" <script> inside page element (id) function rcube_init_tabs(id, current) { - var content = document.getElementById(id), - // get fieldsets of the higher-level (skip nested fieldsets) - fs = $('fieldset', content).not('fieldset > fieldset'); + var content = $('#'+id), + fs = content.children('fieldset'); if (!fs.length) return; @@ -38,18 +37,16 @@ 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) { - var tab, a, elm = $(this), - // get first legend element - legend = $(elm).children('legend'); + var tab, a, elm = $(this), legend = elm.children('legend'); // 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(); @@ -66,8 +63,7 @@ function rcube_show_tab(id, index) { - var content = document.getElementById(id), - fs = $('fieldset', content).not('fieldset > fieldset'); + var fs = $('#'+id).children('fieldset'); fs.each(function(idx) { // Show/hide fieldset (tab content) @@ -94,7 +90,8 @@ mailboxmenu: {id:'mailboxoptionsmenu', above:1}, composemenu: {id:'composeoptionsmenu', editable:1}, // toggle: #1486823, #1486930 - uploadmenu: {id:'attachment-form', editable:1, above:1, toggle:!bw.ie&&!bw.linux } + uploadmenu: {id:'attachment-form', editable:1, above:1, toggle:!bw.ie&&!bw.linux }, + uploadform: {id:'upload-form', editable:1, toggle:!bw.ie&&!bw.linux } }; var obj; @@ -131,10 +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() > win.width()) + pos.left = win.width() - obj.width() - 30; obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.offsetHeight)) }); } @@ -497,8 +497,19 @@ 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(); + } + else if (rcmail.env.task == 'addressbook') { + rcmail.addEventListener('afterupload-photo', function(){ rcmail_ui.show_popup('uploadform', false); }); } } @@ -510,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