Keyword wrapper/splitter

by joplomacedo

HTML

<form>
    <textarea></textarea>
    <button>Split in groups</button>
</form>

JavaScript

var $textarea = $('textarea'),

    wrapKeywords = function ( kws ) {
        var kw,
            wrapped_kws = [];

        kws = kws.filter(function (kw) {
            return kw.length;
        });
        
        while ( kws.length ) {
            kw = kws.shift();
            wrapped_kws.push(kw);
            kw = '"' + kw + '"';
            wrapped_kws.push(kw);
            kw = '[' + kw + ']';
            wrapped_kws.push(kw);
        }
        
        return wrapped_kws;
    },

    splitInGroupsOf = function (kws, lines_per_group) {
        var kw_groups = [],
            current_kw_group_index = 0;

        while ( kws.length ) {
            kw_groups[current_kw_group_index++] = kws.splice(0, lines_per_group);
        }
        
        return kw_groups;
    },

    createTextareaFromKwGroup = function ( kw_group ) {
        var $textarea = $('<textarea>');

        while ( kw_group.length ) {
            $textarea.append(kw_group.shift() + '\n');
        }
        
        return $textarea;
    },

    wrapAndSplitKws = function ( kws ) {
        var wrapped_kws = wrapKeywords(kws),
            kw_groups = splitInGroupsOf(wrapped_kws, 2500),
            $textarea,
            $textareas = $('');
         
        while ( kw_groups.length ) {
            $textarea = createTextareaFromKwGroup(kw_groups.shift());           
            $textareas = $textareas.add($textarea);
        }
        
        $textareas.appendTo('body');
    };


$('form').on('submit', function (e) {
    var kws = $textarea.val().split('\n');
    wrapAndSplitKws( kws );
    e.preventDefault();
});