fileapi
Version:
FileAPI — a set of javascript tools for working with files. Multiupload, drag'n'drop and chunked file upload. Images: crop, resize and auto orientation by EXIF.
207 lines (185 loc) • 5.51 kB
JavaScript
'use strict';
module.exports = function (grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
jshint: {
all: [
'Gruntfile.js'
, 'lib/**/*.js'
, 'plugins/jquery.fileapi.js'
, 'node/**/*.js'
],
options: {
curly: true // + "Expected '{' and instead saw 'XXXX'."
, immed: true
, latedef: true
, newcap: true // "Tolerate uncapitalized constructors"
, noarg: true
, sub: true
, undef: true
, unused: true
, boss: true
, eqnull: true
, node: true
, expr: true // - "Expected an assignment or function call and instead saw an expression."
, supernew: true // - "Missing '()' invoking a constructor."
, laxcomma: true
, laxbreak: true
, smarttabs: true
}
},
version: {
src: 'lib/FileAPI.core.js'
},
connect: {
server: {
options: {
port: 9001,
base: '.'
}
},
standalone: {
options: {
hostname: '*',
keepalive: true,
port: 9001,
base: '.'
}
}
},
curl: {
jpg: {
src: 'https://dl.dropboxusercontent.com/u/49592745/BigJPG.jpg',
dest: 'tests/files/big.jpg'
}
},
qunit: {
all: {
options: {
timeout: 5 * 60 * 1000, // 5min
files: {
'1px_gif': ['tests/files/1px.gif']
, 'big.jpg': ['tests/files/big.jpg']
, 'hello.txt': ['tests/files/hello.txt']
, 'image.jpg': ['tests/files/image.jpg']
, 'dino.png': ['tests/files/dino.png']
, 'multiple': ['tests/files/1px.gif', 'tests/files/hello.txt', 'tests/files/image.jpg', 'tests/files/dino.png', 'tests/files/lebowski.json']
},
urls: ['http://127.0.0.1:<%=connect.server.options.port%>/tests/index.html']
}
}
},
concat: {
options: {
banner: '/*! <%= pkg.exportName %> <%= pkg.version %> - <%= pkg.license %> | <%= pkg.repository.url %>\n' +
' * <%= pkg.description %>\n' +
' */\n\n',
footer: 'if( typeof define === "function" && define.amd ){ define("<%= pkg.jam.name %>", [], function (){ return FileAPI; }); }'
},
all: {
src: [
'lib/canvas-to-blob.js'
, 'lib/FileAPI.core.js'
, 'lib/FileAPI.Image.js'
, 'lib/load-image-ios.js'
, 'lib/FileAPI.Form.js'
, 'lib/FileAPI.XHR.js'
, 'lib/FileAPI.Camera.js'
, 'lib/FileAPI.Flash.js'
, 'lib/FileAPI.Flash.Camera.js'
],
dest: 'dist/<%= pkg.exportName %>.js'
},
html5: {
src: [
'lib/canvas-to-blob.js'
, 'lib/FileAPI.core.js'
, 'lib/FileAPI.Image.js'
, 'lib/load-image-ios.js'
, 'lib/FileAPI.Form.js'
, 'lib/FileAPI.XHR.js'
, 'lib/FileAPI.Camera.js'
, 'lib/FileAPI.Flash.Camera.js'
],
dest: 'dist/<%= pkg.exportName %>.html5.js'
}
},
uglify: {
options: { banner: '/*! <%= pkg.exportName %> <%= pkg.version %> - <%= pkg.license %> | <%= pkg.repository.url %> */\n' },
dist: {
files: {
'dist/<%= pkg.exportName %>.min.js': ['<%= concat.all.dest %>']
, 'dist/<%= pkg.exportName %>.html5.min.js': ['<%= concat.html5.dest %>']
}
}
},
mxmlc: {
core: {
options: {
rawConfig: '-target-player=10.1 -static-link-runtime-shared-libraries=true -compiler.debug=false' +
' -library-path+=flash/core/lib/blooddy_crypto.swc -library-path+=flash/core/lib/EnginesLibrary.swc'
},
files: {
'dist/<%= pkg.exportName %>.flash.swf': ['flash/core/src/FileAPI_flash.as']
}
},
image: {
options: {
rawConfig: '-static-link-runtime-shared-libraries=true -compiler.debug=false' +
' -library-path+=flash/image/lib/blooddy_crypto.swc'
},
files: {
'dist/<%= pkg.exportName %>.flash.image.swf': ['flash/image/src/FileAPI_flash_image.as']
}
},
camera: {
options: {
rawConfig: '-static-link-runtime-shared-libraries=true -compiler.debug=false'
},
files: {
'dist/<%= pkg.exportName %>.flash.camera.swf': ['flash/camera/src/FileAPI_flash_camera.as']
}
}
},
watch: {
scripts: {
files: 'lib/**/*.js',
tasks: ['concat'],
options: { interrupt: true }
}
}
});
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-version');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-mxmlc');
grunt.loadNpmTasks('grunt-curl');
// Load custom QUnit task, based on grunt-contrib-qunit, but support "files" option.
grunt.loadTasks('./tests/grunt-task/');
grunt.loadTasks('./custom-tasks/');
// "npm build" runs these tasks
grunt.registerTask('prepare-test-files', function (){
// big.jpg added to git
/*if (!grunt.file.exists('tests/files/big.jpg')) {
grunt.task.run('curl');
}*/
});
grunt.registerTask('express', 'Start a custom web server.', function() {
var done = this.async();
require('./node/server.js').createServer(8000, function () {
done();
});
});
grunt.registerTask('server', ['connect:server', 'express']);
grunt.registerTask('dev', ['concat', 'server', 'watch']);
grunt.registerTask('tests', ['jshint', 'concat', 'server', 'prepare-test-files', 'qunit']);
grunt.registerTask('build', ['version', 'concat', 'uglify']);
grunt.registerTask('build-all', ['build', 'mxmlc']);
grunt.registerTask('default', ['tests', 'build']);
};