You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
336 lines
9.3 KiB
336 lines
9.3 KiB
2 years ago
|
/*jshint -W106 */
|
||
|
/*jshint node:true, maxstatements: false, maxlen: false */
|
||
|
|
||
|
var os = require("os");
|
||
|
var path = require("path");
|
||
|
var loadGruntTasks = require("load-grunt-tasks");
|
||
|
|
||
|
module.exports = function(grunt) {
|
||
|
"use strict";
|
||
|
|
||
|
// Load necessary tasks
|
||
|
loadGruntTasks(grunt);
|
||
|
|
||
|
|
||
|
// Metadata
|
||
|
var pkg = grunt.file.readJSON("package.json");
|
||
|
|
||
|
// Make a temp dir for Flash compilation
|
||
|
var tmpDir = os.tmpdir ? os.tmpdir() : os.tmpDir();
|
||
|
var flashTmpDir = path.join(tmpDir, "zcflash");
|
||
|
|
||
|
// Shared configuration
|
||
|
var localPort = 7320; // "ZERO"
|
||
|
|
||
|
// Project configuration.
|
||
|
var config = {
|
||
|
// Task configuration
|
||
|
jshint: {
|
||
|
options: {
|
||
|
jshintrc: true
|
||
|
},
|
||
|
gruntfile: ["Gruntfile.js"],
|
||
|
component: ["index.js"],
|
||
|
js: ["src/js/**/*.js", "!src/js/start.js", "!src/js/end.js"],
|
||
|
test: ["test/**/*.js"],
|
||
|
dist: ["dist/*.js", "!dist/*.min.js"]
|
||
|
},
|
||
|
flexpmd: {
|
||
|
flash: {
|
||
|
src: [flashTmpDir]
|
||
|
}
|
||
|
},
|
||
|
clean: {
|
||
|
dist: ["ZeroClipboard.*", "dist/ZeroClipboard.*"],
|
||
|
flash: {
|
||
|
options: {
|
||
|
// Force is required when trying to clean outside of the project dir
|
||
|
force: true
|
||
|
},
|
||
|
src: [flashTmpDir]
|
||
|
},
|
||
|
meta: ["bower.json", "composer.json", "LICENSE"],
|
||
|
coveralls: ["tmp/", "coverage/"]
|
||
|
},
|
||
|
concat: {
|
||
|
options: {
|
||
|
stripBanners: false,
|
||
|
process: {
|
||
|
data: pkg
|
||
|
}
|
||
|
},
|
||
|
core: {
|
||
|
src: [
|
||
|
"src/meta/source-banner.tmpl",
|
||
|
"src/js/start.js",
|
||
|
"src/js/shared/state.js",
|
||
|
"src/js/shared/private.js",
|
||
|
"src/js/core/state.js",
|
||
|
"src/js/core/private.js",
|
||
|
"src/js/core/api.js",
|
||
|
"src/js/end.js"
|
||
|
],
|
||
|
dest: "dist/ZeroClipboard.Core.js"
|
||
|
},
|
||
|
client: {
|
||
|
src: [
|
||
|
"src/meta/source-banner.tmpl",
|
||
|
"src/js/start.js",
|
||
|
"src/js/shared/state.js",
|
||
|
"src/js/shared/private.js",
|
||
|
"src/js/core/state.js",
|
||
|
"src/js/core/private.js",
|
||
|
"src/js/core/api.js",
|
||
|
"src/js/client/state.js",
|
||
|
"src/js/client/private.js",
|
||
|
"src/js/client/api.js",
|
||
|
"src/js/end.js"
|
||
|
],
|
||
|
dest: "dist/ZeroClipboard.js"
|
||
|
},
|
||
|
flash: {
|
||
|
files: [
|
||
|
{
|
||
|
src: [
|
||
|
"src/meta/source-banner.tmpl",
|
||
|
"src/flash/ZeroClipboard.as"
|
||
|
],
|
||
|
dest: path.join(flashTmpDir, "ZeroClipboard.as")
|
||
|
},
|
||
|
{
|
||
|
src: [
|
||
|
"src/meta/source-banner.tmpl",
|
||
|
"src/flash/ClipboardInjector.as"
|
||
|
],
|
||
|
dest: path.join(flashTmpDir, "ClipboardInjector.as")
|
||
|
},
|
||
|
{
|
||
|
src: [
|
||
|
"src/meta/source-banner.tmpl",
|
||
|
"src/flash/JsProxy.as"
|
||
|
],
|
||
|
dest: path.join(flashTmpDir, "JsProxy.as")
|
||
|
},
|
||
|
{
|
||
|
src: [
|
||
|
"src/meta/source-banner.tmpl",
|
||
|
"src/flash/XssUtils.as"
|
||
|
],
|
||
|
dest: path.join(flashTmpDir, "XssUtils.as")
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
},
|
||
|
uglify: {
|
||
|
options: {
|
||
|
report: "min"
|
||
|
},
|
||
|
js: {
|
||
|
options: {
|
||
|
preserveComments: function(node, comment) {
|
||
|
return comment &&
|
||
|
comment.type === "comment2" &&
|
||
|
/^(!|\*|\*!)\r?\n/.test(comment.value);
|
||
|
},
|
||
|
beautify: {
|
||
|
beautify: true,
|
||
|
// `indent_level` requires jshint -W106
|
||
|
indent_level: 2
|
||
|
},
|
||
|
mangle: false,
|
||
|
compress: false
|
||
|
},
|
||
|
files: [
|
||
|
{
|
||
|
src: ["<%= concat.core.dest %>"],
|
||
|
dest: "<%= concat.core.dest %>"
|
||
|
},
|
||
|
{
|
||
|
src: ["<%= concat.client.dest %>"],
|
||
|
dest: "<%= concat.client.dest %>"
|
||
|
}
|
||
|
]
|
||
|
},
|
||
|
minjs: {
|
||
|
options: {
|
||
|
preserveComments: function(node, comment) {
|
||
|
return comment &&
|
||
|
comment.type === "comment2" &&
|
||
|
/^(!|\*!)\r?\n/.test(comment.value);
|
||
|
},
|
||
|
sourceMap: true,
|
||
|
sourceMapName: function(dest) {
|
||
|
return dest.replace(".min.js", ".min.map");
|
||
|
},
|
||
|
// Bundles the contents of "`src`" into the "`dest`.map" source map file. This way,
|
||
|
// consumers only need to host the "*.min.js" and "*.min.map" files rather than
|
||
|
// needing to host all three files: "*.js", "*.min.js", and "*.min.map".
|
||
|
sourceMapIncludeSources: true
|
||
|
},
|
||
|
files: [
|
||
|
{
|
||
|
src: ["<%= concat.core.dest %>"],
|
||
|
dest: "dist/ZeroClipboard.Core.min.js"
|
||
|
},
|
||
|
{
|
||
|
src: ["<%= concat.client.dest %>"],
|
||
|
dest: "dist/ZeroClipboard.min.js"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
},
|
||
|
mxmlc: {
|
||
|
options: {
|
||
|
rawConfig: "-target-player=11.0.0 -static-link-runtime-shared-libraries=true -actionscript-file-encoding=UTF-8"
|
||
|
},
|
||
|
swf: {
|
||
|
files: {
|
||
|
"dist/ZeroClipboard.swf": ["<%= concat.flash.files[0].dest %>"]
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
template: {
|
||
|
options: {
|
||
|
data: pkg
|
||
|
},
|
||
|
bower: {
|
||
|
files: {
|
||
|
"bower.json": ["src/meta/bower.json.tmpl"]
|
||
|
}
|
||
|
},
|
||
|
composer: {
|
||
|
files: {
|
||
|
"composer.json": ["src/meta/composer.json.tmpl"]
|
||
|
}
|
||
|
},
|
||
|
LICENSE: {
|
||
|
files: {
|
||
|
"LICENSE": ["src/meta/LICENSE.tmpl"]
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
chmod: {
|
||
|
options: {
|
||
|
mode: "444"
|
||
|
},
|
||
|
dist: ["dist/ZeroClipboard.*"],
|
||
|
meta: ["bower.json", "composer.json", "LICENSE"]
|
||
|
},
|
||
|
connect: {
|
||
|
server: {
|
||
|
options: {
|
||
|
port: localPort
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
qunit: {
|
||
|
file: [
|
||
|
"test/shared/private.tests.js.html",
|
||
|
"test/core/private.tests.js.html",
|
||
|
"test/core/api.tests.js.html",
|
||
|
"test/client/private.tests.js.html",
|
||
|
"test/client/api.tests.js.html",
|
||
|
"test/built/ZeroClipboard.Core.tests.js.html",
|
||
|
"test/built/ZeroClipboard.tests.js.html"
|
||
|
//"test/**/*.tests.js.html"
|
||
|
],
|
||
|
http: {
|
||
|
options: {
|
||
|
urls:
|
||
|
grunt.file.expand([
|
||
|
"test/shared/private.tests.js.html",
|
||
|
"test/core/private.tests.js.html",
|
||
|
"test/core/api.tests.js.html",
|
||
|
"test/client/private.tests.js.html",
|
||
|
"test/client/api.tests.js.html",
|
||
|
"test/built/ZeroClipboard.Core.tests.js.html",
|
||
|
"test/built/ZeroClipboard.tests.js.html"
|
||
|
//"test/**/*.tests.js.html"
|
||
|
]).map(function(testPage) {
|
||
|
return "http://localhost:" + localPort + "/" + testPage + "?noglobals=true";
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
coveralls: {
|
||
|
options: {
|
||
|
"--web-security": false,
|
||
|
timeout: 10000,
|
||
|
coverage: {
|
||
|
baseUrl: ".",
|
||
|
src: [
|
||
|
"src/js/**/*.js",
|
||
|
"!src/js/start.js",
|
||
|
"!src/js/end.js",
|
||
|
"dist/*.js",
|
||
|
"!dist/*.min.js"
|
||
|
],
|
||
|
instrumentedFiles: "tmp",
|
||
|
htmlReport: "coverage/html",
|
||
|
lcovReport: "coverage/lcov",
|
||
|
statementsThresholdPct: 60.0,
|
||
|
disposeCollector: true
|
||
|
},
|
||
|
urls:
|
||
|
grunt.file.expand([
|
||
|
"test/shared/private.tests.js.html",
|
||
|
"test/core/private.tests.js.html",
|
||
|
"test/core/api.tests.js.html",
|
||
|
"test/client/private.tests.js.html",
|
||
|
"test/client/api.tests.js.html",
|
||
|
"test/built/ZeroClipboard.Core.tests.js.html",
|
||
|
"test/built/ZeroClipboard.tests.js.html"
|
||
|
//"test/**/*.tests.js.html"
|
||
|
]).map(function(testPage) {
|
||
|
return "http://localhost:" + localPort + "/" + testPage + "?noglobals=true";
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
coveralls: {
|
||
|
options: {
|
||
|
force: true
|
||
|
},
|
||
|
all: {
|
||
|
src: "<%= qunit.coveralls.options.coverage.lcovReport %>/lcov.info"
|
||
|
}
|
||
|
},
|
||
|
watch: {
|
||
|
options: {
|
||
|
spawn: false
|
||
|
},
|
||
|
gruntfile: {
|
||
|
files: "<%= jshint.Gruntfile %>",
|
||
|
tasks: ["jshint:Gruntfile"]
|
||
|
},
|
||
|
js: {
|
||
|
files: "<%= jshint.js %>",
|
||
|
tasks: ["jshint:js", "unittest"]
|
||
|
},
|
||
|
test: {
|
||
|
files: "<%= jshint.test %>",
|
||
|
tasks: ["jshint:test", "unittest"]
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
grunt.initConfig(config);
|
||
|
|
||
|
|
||
|
// Task aliases and chains
|
||
|
grunt.registerTask("jshint-prebuild", ["jshint:gruntfile", "jshint:component", "jshint:js", "jshint:test"]);
|
||
|
grunt.registerTask("prep-flash", ["clean:flash", "concat:flash"]);
|
||
|
grunt.registerTask("validate", ["jshint-prebuild", "prep-flash", "flexpmd"]);
|
||
|
grunt.registerTask("build", ["clean", "concat", "jshint:dist", "uglify", "mxmlc", "template", "chmod"]);
|
||
|
grunt.registerTask("build-travis", ["clean", "concat", "jshint:dist", "mxmlc", "chmod:dist"]);
|
||
|
grunt.registerTask("test", ["connect", "qunit:file", "qunit:http"]);
|
||
|
|
||
|
// Default task
|
||
|
grunt.registerTask("default", ["validate", "build", "test"]);
|
||
|
|
||
|
// Travis CI task
|
||
|
grunt.registerTask("travis", ["validate", "build-travis", "test", "qunit:coveralls", "coveralls"]);
|
||
|
|
||
|
// Local Flash dev
|
||
|
grunt.registerTask("asdev", ["validate", "build"]);
|
||
|
|
||
|
};
|