Keyword wrapper/splitter
by joplomacedo
HTML
<form>
<textarea></textarea>
<button>Split in groups</button>
</form>
CSS
textarea {
display: block;
width: 100%;
box-shadow: 0;
border: 1px solid;
resize: vertical;
outline: none;
min-height: 200px;
}
JavaScript
function splitLoop( arr, max, func, callback, current_index ) {
var date = +new Date(),
current_index = current_index || -1;
for (; ++current_index < max;) {
if ( +new Date() - date < 99 ) {
func( arr[current_index], current_index );
} else {
setTimeout(function () {
splitLoop(arr, max, func, callback, current_index);
}, 25);
return;
}
}
callback();
}
var $textarea = $('textarea'),
wrapAndGroup = function ( kws, max_kws_in_group ) {
var kw,
kws_len,
kw_str = '',
max_trios_in_group = Math.floor(max_kws_in_group / 3),
trios_in_group = 0,
$textarea,
$textareas = $('');
kws = kws.filter(function ( kw ) {
return kw.length;
});
kws_len = kws.length;
splitLoop(kws, kws_len, function ( kw, i ) {
kw_str += kw + '\n"' + kw + '"\n[' + kw + ']\n';
if ( ++trios_in_group == max_trios_in_group ) {
$textarea = $('<textarea>').html(kw_str);
$textareas = $textareas.add($textarea);
kw_str = '';
trios_in_group = 0;
}
}, function () {
if ( kw_str.length ) {
$textarea = $('<textarea>').html(kw_str);
$textareas = $textareas.add($textarea);
}
$textareas.appendTo('body');
});
};
$('form').on('submit', function (e) {
var kws = $textarea.val().split('\n');
wrapAndGroup( kws, 2500 );
e.preventDefault();
});