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,
...