/* * THIS IS FREE SCRIPT BUT LEAVE THIS COMMENT IF * YOU WANT USE THIS CODE ON YOUR SITE * * Made by Pieter Overbeeke, Ipportunities [new media], pieter@ipportunities.nl april 1 2009 (not a joke) * * * Description: http://textoverflow.ipdemo.nl */ jQuery.fn.textOverflow = function(options) { settings = jQuery.extend({ lines: 1, ellipsis: "…", wrap: "word", link: "", titleAttr: false }, options); return this.each(function() { $('head').append($('')); $(this).addClass("tExTOvErFLoW"); var boxWidth = $(this).width() - 10000; var content = $(this).html()+' '; var newContent = ""; var testLine = ""; var tempLine = ""; var contentPos = 0; var tempPos = 0; var lastChar = ""; var lineNr = 1; while (lineNr <= settings.lines && contentPos < content.length) { testLine = content.substr(contentPos, content.substr(contentPos, content.length - contentPos).indexOf(' ')); contentPos = contentPos + content.substr(contentPos, content.length - contentPos).indexOf(' ') + 1; if (lineNr != settings.lines) //not the last line yet { $(this).html(''+testLine+''); } else //last line (and first...) { $(this).html(''+testLine+settings.ellipsis+' '+settings.link+''); } while (contentPos < content.length && $(this).children().width() <= boxWidth) { tempLine = testLine; tempPos = contentPos; testLine += ' '+content.substr(contentPos, content.substr(contentPos, content.length - contentPos).indexOf(' ')); contentPos = contentPos + content.substr(contentPos, content.length - contentPos).indexOf(' ') + 1; if (lineNr != settings.lines) //not the last line yet { $(this).html(''+testLine+''); } else //last line { $(this).html(''+testLine+settings.ellipsis+' '+settings.link+''); } } if ($(this).children().width() > boxWidth) { if (lineNr < settings.lines || settings.wrap == 'word') { testLine = tempLine; contentPos = tempPos; } else { while ($(this).children().width() > boxWidth) { testLine = testLine.substr(0, testLine.length - 1); $(this).html(''+testLine+settings.ellipsis+' '+settings.link+''); } } } if (lineNr < settings.lines) { newContent += testLine+' '; } else { newContent += testLine+settings.ellipsis+' '+settings.link; } lineNr++; lastChar = ""; } $(this).removeClass("tExTOvErFLoW"); if (settings.titleAttr) { $(this).attr("title", content); } $(this).html(newContent); }); }