// MW_OVERLAY (function($){ $.fn.mw_overlay_load = function() { var url = $(this).attr('href'); if (url == null) { return false; } $('.mw-sys-overlay').remove(); $('.mw-sys-dialog').remove(); $('.mw-sys-loader').remove(); $('body').append('
'); overlay = $('.mw-sys-overlay'); overlay.addClass('mw-cust-overlay'); overlay.click(function() { return $().mw_overlay_unload(); }); $('body').append('
') var dialog = $('.mw-sys-dialog'); dialog.addClass('mw-cust-dialog'); $('body').append('
'); var loader = $('.mw-sys-loader'); loader.addClass('mw-cust-loader'); showCentered(loader); dialog.load(url, function() { $('.mw-overlay-closelink').click(function() { return $().mw_overlay_unload() }); loader.fadeOut(function() { showCentered(dialog); $(document).trigger('mw-overlay-loaded'); }); } ); function showCentered(element) { element.css('top', (($(window).height() - element.outerHeight()) / 2) + $(window).scrollTop()); element.css('left', (($(window).width() - element.outerWidth()) / 2) + $(window).scrollLeft()); element.fadeIn(); } } $.fn.mw_overlay_unload = function() { var overlay = $('.mw-sys-overlay'); var dialog = $('.mw-sys-dialog'); var loader = $('.mw-sys-loader'); loader.fadeOut(function() { loader.remove(); }); dialog.fadeOut(function() { dialog.remove(); }); overlay.fadeOut(function() { overlay.remove(); }); return false; } })(jQuery); $(function() { $(".mw-overlay").click(function() { $(this).mw_overlay_load(); return false; }); }); $(document).bind('mw-overlay-loaded', function() { $(".mw-overlay").unbind("click").click(function() { $(this).mw_overlay_load(); return false; }); }); // MW_TOGGLEOVERFLOW (function($){ $.fn.mw_toggleOverflow = function(options) { var defaults = { lines: null, duration: 600, ellipsis: '...', moreText: 'more', lessText: 'less', containerclass: 'mw-toggleoverflow-container', linkclass: 'mw-toggleoverflow-link' }; var options = $.extend(defaults, options); return this.each(function() { var current = $(this); // Set height by lines if (options.lines != null) { var lineHeight = parseInt(current.css('line-height')); if (isFinite(options.lines) && isFinite(lineHeight)) { current.height(2 + (options.lines * lineHeight)); } else { options.lines == null; } } // Check overflow current.css('overflow', 'hidden'); if (current.height() >= current[0].scrollHeight) { // no overflow current.css('overflow', 'visible'); return; } // Create container div and move current element to container var containerdiv = $('
'); containerdiv.addClass(options.containerclass); current.before(containerdiv); containerdiv.append(current); // Add link element var link = $('' + options.moreText + ''); link.addClass(options.linkclass); containerdiv.append(link); if (options.lines == null) { // Adjust height to cater for link element current.height(current.height() - link.height()) } // Store data on current element current.ellipsis = options.ellipsis + '
'; current.baseHeight = current.height(); current.maxHeight = current[0].scrollHeight; current.ellipsispos = determineEllipsisPos(current); current.ellipsed = false; // Set more / less link function link.click(function() { link.css('visibility', 'hidden'); toggleEllipsis(current, link, options, true); current.animate( { height: (current.height() < current.maxHeight) ? current.maxHeight : current.baseHeight }, options.duration, function() { toggleEllipsis(current, link, options); link.css('visibility', 'visible'); } ); return false; }); toggleEllipsis(current, link, options); }); }; function determineEllipsisPos(target) { // Determine and ellipsis position by finding last position without overflow (binary trial & error) var ellipsisPos = 0; var orgHTML = target.html(); var lastOKPos = 0; var lastFailPos = orgHTML.length; var lastTriedPos = -1; while (true) { var tryPos = Math.floor((lastOKPos + lastFailPos) / 2); // Avoid breaking html tags var tagStartPos = orgHTML.lastIndexOf('<', tryPos - 1); var tagEndPos = orgHTML.lastIndexOf('>', tryPos - 1); if (tagEndPos < tagStartPos) { tryPos = tagStartPos; } if (tryPos == lastTriedPos) { break; } target.html(orgHTML.substring(0, tryPos) + target.ellipsis); if (target[0].scrollHeight <= target.height()) { lastOKPos = tryPos; } else { lastFailPos = tryPos; } lastTriedPos = tryPos; } ellipsisPos = lastOKPos; // Cater for html open tag at end of successfull html if (orgHTML.charAt(ellipsisPos - 1) == '>') { var tagStartPos = orgHTML.lastIndexOf('<', ellipsisPos - 1); if (orgHTML.charAt(tagStartPos + 1) != '/') { ellipsisPos = tagStartPos ; } } // Reset html target.html(orgHTML); return ellipsisPos; } function toggleEllipsis(target, link, options, hideEllipsis) { if (hideEllipsis == undefined) { hideEllipsis = (target.height() == target.maxHeight); } if (hideEllipsis != target.ellipsed) { return; } if (hideEllipsis) { target.html(target.html().substring(0, target.ellipsispos) + target.html().substring(target.ellipsispos + target.ellipsis.length)); link[0].innerHTML = options.lessText; target.ellipsed = false; } else { target.html(target.html().substring(0, target.ellipsispos) + target.ellipsis + target.html().substring(target.ellipsispos)); link[0].innerHTML = options.moreText; target.ellipsed = true; } } })(jQuery);