Cambios

Busca en cnbGuatemala con Google

3566 bytes añadidos ,  hace 8 años
sin resumen de edición
Línea 52: Línea 52:  
   };
 
   };
 
}(jQuery));
 
}(jQuery));
 +
/**
 +
* Splits new lines of text into separate divs
 +
*
 +
* ### Options:
 +
* - `width` string The width of the box. By default, it tries to use the
 +
* element's width. If you don't define a width, there's no way to split it
 +
* by lines!
 +
* - `tag` string The tag to wrap the lines in
 +
* - `keepHtml` boolean Whether or not to try and preserve the html within
 +
* the element. Default is true
 +
*
 +
* @param options object The options object
 +
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
 +
*/
 +
(function($){
 +
 +
/**
 +
* Creates a temporary clone
 +
*
 +
* @param element element The element to clone
 +
*/
 +
function _createTemp(element) {
 +
return element.clone().css({position: 'absolute'});
 +
};
 +
 +
/**
 +
* Splits contents into words, keeping their original Html tag. Note that this
 +
* tags *each* word with the tag it was found in, so when the wrapping begins
 +
* the tags stay intact. This may have an effect on your styles (say, if you have
 +
* margin, each word will inherit those styles).
 +
*
 +
* @param node contents The contents
 +
*/
 +
function _splitHtmlWords(contents) {
 +
var words = [];
 +
var splitContent;
 +
for (var c=0; c<contents.length; c++) {
 +
if (contents[c].nodeType == 3) {
 +
splitContent = _splitWords(contents[c].textContent || contents[c].toString());
 +
} else {
 +
var tag = $(contents[c]).clone();
 +
splitContent = _splitHtmlWords(tag.contents());
 +
for (var tagless in splitContent) {
 +
tag.empty();
 +
splitContent[tagless] = tag.html(splitContent[tagless]).wrap('<p></p>').parent().html();
 +
}
 +
}
 +
for (var word in splitContent) {
 +
words.push(splitContent[word]);
 +
}
 +
}
 +
return words;
 +
};
 +
 +
/**
 +
* Splits words by spaces
 +
*
 +
* @param string text The text to split
 +
*/
 +
function _splitWords(text) {
 +
return text.split(/\s+/);
 +
}
 +
 +
/**
 +
* Formats html with tags and wrappers.
 +
*
 +
* @param tag
 +
* @param html content wrapped by the tag
 +
*/
 +
function _markupContent(tag, html) {
 +
// wrap in a temp div so .html() gives us the tags we specify
 +
tag = '<div>' + tag;
 +
// find the deepest child, add html, then find the parent
 +
return $(tag)
 +
.find('*:not(:has("*"))')
 +
.html(html)
 +
.parentsUntil()
 +
.slice(-1)
 +
.html();
 +
}
 +
 +
/**
 +
* The jQuery plugin function. See the top of this file for information on the
 +
* options
 +
*/
 +
$.fn.splitLines = function(options) {
 +
var settings = {
 +
width: 'auto',
 +
tag: '<div>',
 +
wrap: '',
 +
keepHtml: true
 +
};
 +
if (options) {
 +
$.extend(settings, options);
 +
}
 +
var newHtml = _createTemp(this);
 +
var contents = this.contents();
 +
var text = this.text();
 +
this.append(newHtml);
 +
newHtml.text('42');
 +
var maxHeight = newHtml.height()+2;
 +
newHtml.empty();
 +
 +
var tempLine = _createTemp(newHtml);
 +
if (settings.width !== 'auto') {
 +
tempLine.width(settings.width);
 +
}
 +
this.append(tempLine);
 +
var words = settings.keepHtml ? _splitHtmlWords(contents) : _splitWords(text);
 +
var prev;
 +
for (var w=0; w<words.length; w++) {
 +
var html = tempLine.html();
 +
tempLine.html(html+words[w]+' ');
 +
if (tempLine.html() == prev) {
 +
// repeating word, it will never fit so just use it instead of failing
 +
prev = '';
 +
newHtml.append(_markupContent(settings.tag, tempLine.html()));
 +
tempLine.html('');
 +
continue;
 +
}
 +
if (tempLine.height() > maxHeight) {
 +
prev = tempLine.html();
 +
tempLine.html(html);
 +
newHtml.append(_markupContent(settings.tag, tempLine.html()));
 +
tempLine.html('');
 +
w--;
 +
}
 +
}
 +
newHtml.append(_markupContent(settings.tag, tempLine.html()));
 +
 +
this.html(newHtml.html());
 +
 +
};
 +
})(jQuery);
    
$('#dynamicFont').flowtype({
 
$('#dynamicFont').flowtype({