2025-06-16 18:28:08 +05:00

295 lines
6.7 KiB
JavaScript
Executable File

module.exports = function(grunt) {
'use strict';
var customLaunchers = {
/*
'SL_IE8': {
base: 'SauceLabs',
browserName: 'internet explorer',
version: '8.0',
platform: 'windows XP'
},
'SL_EDGE': {
base: 'SauceLabs',
browserName: 'microsoftedge',
version: 'latest',
platform: 'windows 10'
},
'SL_SAFARI': {
base: 'SauceLabs',
browserName: 'safari',
version: 'latest',
platform: 'OS X 10.12'
},
*/
'SL_IE9': {
base: 'SauceLabs',
browserName: 'internet explorer',
version: '9.0',
platform: 'windows 7'
},
'SL_IE10': {
base: 'SauceLabs',
browserName: 'internet explorer',
version: '10.0',
platform: 'windows 8'
},
'SL_IE11': {
base: 'SauceLabs',
browserName: 'internet explorer',
version: '11.0',
platform: 'windows 8.1'
},
'SL_CHROME': {
base: 'SauceLabs',
browserName: 'chrome',
version: 'latest',
platform: 'windows 8'
},
'SL_FIREFOX': {
base: 'SauceLabs',
browserName: 'firefox',
version: 'latest',
platform: 'windows 8'
}
};
grunt.initConfig({
// package File
pkg: grunt.file.readJSON('package.json'),
// bulid source(grunt-build.js).
build: {
bs3: {
input: './src/js/bs3/settings',
output: './dist/summernote.js'
},
bs4: {
input: './src/js/bs4/settings',
output: './dist/summernote-bs4.js'
},
lite: {
input: './src/js/lite/settings',
output: './dist/summernote-lite.js'
}
},
// for javascript convention.
eslint: {
target: [
'src/**/*.js',
'plugin/**/*.js',
'lang/**/*.js',
'Gruntfile.js',
'test/**/*.js',
'!coverage/**/*.js',
'!test/coverage/**/*.js',
'build/*.js'
]
},
// uglify: minify javascript
uglify: {
options: {
banner: '/*! Summernote v<%=pkg.version%> | (c) 2013- Alan Hong and other contributors | MIT license */\n'
},
all: {
files: [
{ 'dist/summernote.min.js': ['dist/summernote.js'] },
{ 'dist/summernote-bs4.min.js': ['dist/summernote-bs4.js'] },
{
expand: true,
cwd: 'dist/lang',
src: '**/*.js',
dest: 'dist/lang',
ext: '.min.js'
},
{
expand: true,
cwd: 'dist/plugin',
src: '**/*.js',
dest: 'dist/plugin',
ext: '.min.js'
}
]
}
},
// recess: minify stylesheets
recess: {
dist: {
options: { compile: true, compress: true },
files: [
{
'dist/summernote.css': ['src/less/summernote.less'],
'dist/summernote-bs4.css': ['src/less/summernote-bs4.less'],
'dist/summernote-lite.css': ['src/less/summernote-lite.less']
},
{
expand: true,
cwd: 'dist/plugin',
src: '**/*.css',
dest: 'dist/plugin',
ext: '.min.css'
}
]
}
},
// compress: summernote-{{version}}-dist.zip
compress: {
main: {
options: {
archive: function() {
return 'dist/summernote-{{version}}-dist.zip'.replace(
'{{version}}',
grunt.config('pkg.version')
);
}
},
files: [{
expand: true,
src: [
'dist/*.js',
'dist/*.css',
'dist/font/*'
]
}, {
src: ['plugin/**/*.js', 'plugin/**/*.css', 'lang/**/*.js'],
dest: 'dist/'
}]
}
},
// connect configuration.
connect: {
all: {
options: {
port: 3000
}
}
},
// watch source code change
watch: {
less: {
files: ['src/less/*.less'],
tasks: ['recess'],
options: {
livereload: true
}
},
script: {
files: ['src/js/**/*.js', 'test/unit/**/*.js'],
tasks: ['lint', 'build', 'karma:all'],
options: {
livereload: true
}
}
},
karma: {
options: {
configFile: './karma.conf.js'
},
watch: {
background: false,
singleRun: false
},
all: {
// Chrome, ChromeCanary, Firefox, Opera, Safari, PhantomJS, IE
singleRun: true,
browsers: ['PhantomJS']
},
dist: {
singleRun: true,
browsers: ['PhantomJS']
},
travis: {
singleRun: true,
browsers: ['PhantomJS'],
reporters: ['dots', 'coverage']
},
saucelabs: {
reporters: ['saucelabs'],
sauceLabs: {
testName: 'unit tests for summernote',
startConnect: false,
tunnelIdentifier: process.env.TRAVIS_JOB_NUMBER,
build: process.env.TRAVIS_BUILD_NUMBER,
tags: [process.env.TRAVIS_BRANCH, process.env.TRAVIS_PULL_REQUEST]
},
captureTimeout: 120000,
customLaunchers: customLaunchers,
browsers: Object.keys(customLaunchers),
singleRun: true
}
},
coveralls: {
options: {
force: false
},
travis: {
src: 'coverage/**/lcov.info'
}
},
clean: {
dist: ['dist/**/*']
},
copy: {
dist: {
files: [
{ src: 'lang/*', dest: 'dist/' },
{ expand: true, cwd: 'src/icons/dist/font/', src: ['**', '!*.html'], dest: 'dist/font/' }
]
}
},
webfont: {
icons: {
src: 'src/icons/*.svg',
dest: 'src/icons/dist/font',
destCss: 'src/icons/dist/',
options: {
font: 'summernote',
relativeFontPath: './font/',
stylesheet: 'less',
template: 'src/icons/templates/summernote.css'
}
}
}
});
// load all tasks from the grunt plugins used in this file
require('load-grunt-tasks')(grunt);
// load all grunts/*.js
grunt.loadTasks('grunts');
// server: run server for development
grunt.registerTask('server', ['connect', 'watch']);
// lint
grunt.registerTask('lint', ['eslint']);
// test: unit test on test folder
grunt.registerTask('test', ['lint', 'karma:watch']);
// test: unit test on travis
grunt.registerTask('test-travis', ['lint', 'karma:travis']);
// test: saucelabs test
grunt.registerTask('saucelabs-test', ['karma:saucelabs']);
// dist: make dist files
grunt.registerTask('dist', [
'clean:dist',
'build', 'webfont', 'lint', 'karma:dist',
'copy:dist', 'uglify', 'recess', 'compress'
]);
// default: server
grunt.registerTask('default', ['server']);
};