/*
* 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);
});
}