Concat Javascripts

by Konstantin Cryman

HTML

<div style="margin: 100px auto; width: 300px;">
        <button id="addFile"> + </button>          <button id="packFiles"> >>> </button>
        <br>
        <form id="fileList" action="/"></form>
    </div>



    <script type="text/javascript">
				
        /* FileSaver.js
 * A saveAs() FileSaver implementation.
 * 2013-01-23
 * 
 * By Eli Grey, http://eligrey.com
 * License: X11/MIT
 *   See LICENSE.md
 */

/*global self */
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,
  plusplus: true */

/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */

var saveAs = saveAs || (navigator.msSaveBlob && navigator.msSaveBlob.bind(navigator)) || (function(view) {

	"use strict";
	var doc = view.document
		  // only get URL when necessary in case BlobBuilder.js hasn't overridden it yet
		, get_URL = function() {
			return view.URL || view.webkitURL || view;
		}
		, URL = view.URL || view.webkitURL || view
		, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
		, can_use_save_link = "download" in save_link
		, click = function(node) {
			var event = doc.createEvent("MouseEvents");
			event.initMouseEvent(
				"click", true, false, view, 0, 0, 0, 0, 0
				, false, false, false, false, 0, null
			);
			node.dispatchEvent(event);
		}
		, webkit_req_fs = view.webkitRequestFileSystem
		, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
		, throw_outside = function (ex) {
			(view.setImmediate || view.setTimeout)(function() {
				throw ex;
			}, 0);
		}
		, force_saveable_type = "application/octet-stream"
		, fs_min_size = 0
		, deletion_queue = []
		, process_deletion_queue = function() {
			var i = deletion_queue.length;
			while (i--) {
				var file = deletion_queue[i];
				if (typeof file === "string") { // file is an object URL
					URL.revokeObjectURL(file);
				} else { // file is a File
					file.remove();
				}
			}
			deletion_queue.length = 0; //...

JavaScript

function readFile( file, callback ){
            var _fr = new FileReader();
            try{
                _fr[ 'readAsText' ]( file );
                _fr.onload = function(){
                    if( callback ) callback( _fr.result );
                };
            } catch( err ){
                if( callback ) callback( err );
            }
        };

        $(function(){
						
            console.log( window.navigator );

            $('#addFile').click(function(){
                var fileInput = $('<input type="file">');
                var removeButton = $('<button class="removeFile"> - </button>');
                var container = $('<div class="file-item"></div>');
                removeButton.click(function(){
                    container.remove();
                });
                container.append( fileInput );
                container.append( removeButton );
                $('#fileList').append(container);
            });

            $('#packFiles').click(function(){

                var filesToLoad = $('#fileList').find('input').length;
                var filesToSend = [];

                var resultString = '';

                $('#fileList').find('input').each(function(){

                    var nextFile = this.files[0];
                    if(!nextFile) {
                        filesToLoad--;
                        console.warn('file input is empty');
                        return true;
                    }

                    var nextFileName = nextFile.name;
                    var nextFileExt = nextFileName.split('.')[ nextFileName.split('.').length-1 ];

                    if(nextFileExt != 'js'){
                        filesToLoad--;
                        console.warn( nextFileName + ' not a javascript file! \n reject from queue');
                        return true;
                    }

                    var nextFileData = {
                        name: nextFile.name,
                        size: nextFile.size,
   ...