mirror of https://github.com/nextcloud/calendar
244 lines
8.2 KiB
JavaScript
244 lines
8.2 KiB
JavaScript
/**
|
|
* Nextcloud - Calendar
|
|
*
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
* later. See the COPYING file.
|
|
*
|
|
* @author Bernhard Posselt <dev@bernhard-posselt.com>
|
|
* @copyright Bernhard Posselt 2012, 2014
|
|
*
|
|
* @author Georg Ehrke
|
|
* @copyright 2017 Georg Ehrke <oc.list@georgehrke.com>
|
|
*/
|
|
|
|
/*jslint node: true */
|
|
'use strict';
|
|
|
|
// get plugins
|
|
const gulp = require('gulp'),
|
|
ngAnnotate = require('gulp-ng-annotate'),
|
|
uglify = require('gulp-uglify'),
|
|
uglifyCSS = require('gulp-uglifycss'),
|
|
jshint = require('gulp-jshint'),
|
|
KarmaServer = require('karma').Server,
|
|
concat = require('gulp-concat'),
|
|
insert = require('gulp-insert'),
|
|
wrap = require('gulp-wrap'),
|
|
strip = require('gulp-strip-comments'),
|
|
stripCSS = require('gulp-strip-css-comments'),
|
|
babel = require('gulp-babel'),
|
|
stylelint = require('gulp-stylelint'),
|
|
sourcemaps = require('gulp-sourcemaps'),
|
|
fs = require('fs');
|
|
const gulpsync = require('gulp-sync')(gulp);
|
|
const timezones = fs.readFileSync('./timezones/zones.json', 'UTF-8');
|
|
|
|
// configure
|
|
const buildTarget = 'app.js';
|
|
const buildTargetMin = 'app.min.js';
|
|
const cssBuildTarget = 'app.scss';
|
|
const cssBuildTargetMin = 'app.min.scss';
|
|
const vendorTarget = 'vendor.js';
|
|
const vendorTargetMin = 'vendor.min.js';
|
|
const vendorIETarget = 'vendor.ie.js';
|
|
const vendorIETargetMin = 'vendor.ie.min.js';
|
|
const vendorCssTarget = 'vendor.css';
|
|
const vendorCssTargetMin = 'vendor.min.css';
|
|
const karmaConfig = __dirname + '/../tests/js/config/karma.js';
|
|
const destinationFolder = __dirname + '/public/';
|
|
const cssDestinationFolder = __dirname + '/../css/public/';
|
|
|
|
const jsSources = [
|
|
'config/*.js',
|
|
'app/**/*.js'
|
|
];
|
|
const cssSources = [
|
|
'../css/app/*.scss'
|
|
];
|
|
const vendorSources = [
|
|
'node_modules/angular/angular.js',
|
|
'node_modules/angular-ui-bootstrap/dist/ui-bootstrap-tpls.js',
|
|
'node_modules/fullcalendar/dist/fullcalendar.js',
|
|
'node_modules/fullcalendar/dist/locale-all.js',
|
|
'licenses/hsl_rgb_converter.js',
|
|
'node_modules/hsl_rgb_converter/converter.js',
|
|
'node_modules/ical.js/build/ical.js',
|
|
'node_modules/jquery-timepicker/jquery.ui.timepicker.js',
|
|
'node_modules/jstzdetect/dist/jstz.js',
|
|
];
|
|
const vendorCssSources = [
|
|
'node_modules/fullcalendar/dist/fullcalendar.css',
|
|
'node_modules/angular/angular-csp.css',
|
|
'licenses/jquery.timepicker.css',
|
|
'node_modules/jquery-timepicker/jquery.ui.timepicker.css'
|
|
];
|
|
|
|
const testSources = ['../tests/js/unit/**/*.js'];
|
|
const lintJsSources = jsSources.concat(testSources).concat(['*.js']);
|
|
const watchSources = lintJsSources.concat(cssSources);
|
|
|
|
// tasks
|
|
gulp.task('lint', ['jslint', 'csslint']);
|
|
gulp.task('default', ['lint', '_buildSource', '_buildVendor']);
|
|
gulp.task('build', ['lint', '_buildSource']);
|
|
|
|
gulp.task('_buildAndMinifyCSSSources', gulpsync.sync(['_buildCSSSources', '_minifyCSSSources']));
|
|
gulp.task('_buildAndMinifyJavaScriptSources', gulpsync.sync(['_buildJavaScriptSources', '_minifyJavaScriptSources']));
|
|
gulp.task('_buildAndMinifyCSSVendor', gulpsync.sync(['_buildCSSVendor', '_minifyCSSVendor']));
|
|
gulp.task('_buildAndMinifyJavaScriptVendor', gulpsync.sync(['_buildJavaScriptVendor', '_minifyJavaScriptVendor']));
|
|
gulp.task('_buildAndMinifyIEJavaScriptVendor', gulpsync.sync(['_buildIEJavaScriptVendor', '_minifyIEJavaScriptVendor']));
|
|
|
|
gulp.task('_buildSource', ['_buildAndMinifyCSSSources', '_buildAndMinifyJavaScriptSources']);
|
|
gulp.task('_buildVendor', ['_buildAndMinifyCSSVendor', '_buildAndMinifyJavaScriptVendor', '_buildAndMinifyIEJavaScriptVendor']);
|
|
|
|
// #############################################################################
|
|
// ################################ SOURCE CSS #################################
|
|
// #############################################################################
|
|
gulp.task('_buildCSSSources', () => {
|
|
return gulp.src(cssSources)
|
|
.pipe(stripCSS({
|
|
preserve: false
|
|
}))
|
|
.pipe(concat(cssBuildTarget))
|
|
.pipe(gulp.dest(cssDestinationFolder));
|
|
});
|
|
|
|
gulp.task('_minifyCSSSources', () => {
|
|
return gulp.src(cssDestinationFolder + cssBuildTarget)
|
|
.pipe(sourcemaps.init({identityMap: true, largeFile: true}))
|
|
.pipe(concat(cssBuildTargetMin))
|
|
.pipe(uglifyCSS())
|
|
.pipe(sourcemaps.write('./', {includeContent: false}))
|
|
.pipe(gulp.dest(cssDestinationFolder));
|
|
});
|
|
|
|
// #############################################################################
|
|
// ################################ SOURCE JS ##################################
|
|
// #############################################################################
|
|
gulp.task('_buildJavaScriptSources', () => {
|
|
return gulp.src(jsSources)
|
|
.pipe(babel({
|
|
presets: ['es2015'],
|
|
compact: false,
|
|
babelrc: false,
|
|
ast: false
|
|
}))
|
|
.pipe(ngAnnotate())
|
|
.pipe(strip())
|
|
.pipe(concat(buildTarget))
|
|
.pipe(insert.append('\napp.service(\'TimezoneDataProvider\', function () { return '))
|
|
.pipe(insert.append(timezones))
|
|
.pipe(insert.append(';});'))
|
|
.pipe(wrap(`(function(angular, $, oc_requesttoken, undefined){
|
|
<%= contents %>
|
|
})(angular, jQuery, oc_requesttoken);`))
|
|
.pipe(gulp.dest(destinationFolder));
|
|
});
|
|
|
|
gulp.task('_minifyJavaScriptSources', () => {
|
|
return gulp.src(destinationFolder + buildTarget)
|
|
.pipe(sourcemaps.init({identityMap: true, largeFile: true}))
|
|
.pipe(concat(buildTargetMin))
|
|
.pipe(uglify())
|
|
.pipe(sourcemaps.write('./', {includeContent: false}))
|
|
.pipe(gulp.dest(destinationFolder));
|
|
});
|
|
|
|
// #############################################################################
|
|
// ################################ VENDOR CSS #################################
|
|
// #############################################################################
|
|
gulp.task('_buildCSSVendor', () => {
|
|
return gulp.src(vendorCssSources)
|
|
.pipe(concat(vendorCssTarget))
|
|
.pipe(gulp.dest(cssDestinationFolder));
|
|
});
|
|
|
|
gulp.task('_minifyCSSVendor', () => {
|
|
return gulp.src([cssDestinationFolder + vendorCssTarget])
|
|
.pipe(sourcemaps.init({identityMap: true, largeFile: true}))
|
|
.pipe(concat(vendorCssTargetMin))
|
|
.pipe(stripCSS({
|
|
preserve: false
|
|
}))
|
|
.pipe(uglifyCSS())
|
|
.pipe(sourcemaps.write('./', {includeContent: false}))
|
|
.pipe(gulp.dest(cssDestinationFolder));
|
|
});
|
|
|
|
// #############################################################################
|
|
// ################################# VENDOR JS #################################
|
|
// #############################################################################
|
|
gulp.task('_buildJavaScriptVendor', () => {
|
|
return gulp.src(vendorSources)
|
|
.pipe(concat(vendorTarget))
|
|
.pipe(gulp.dest(destinationFolder));
|
|
});
|
|
|
|
gulp.task('_minifyJavaScriptVendor', () => {
|
|
return gulp.src([destinationFolder + vendorTarget])
|
|
.pipe(sourcemaps.init({identityMap: true, largeFile: true}))
|
|
.pipe(concat(vendorTargetMin))
|
|
.pipe(strip())
|
|
.pipe(uglify())
|
|
.pipe(sourcemaps.write('./', {includeContent: false}))
|
|
.pipe(gulp.dest(destinationFolder));
|
|
});
|
|
|
|
// #############################################################################
|
|
// ############################### VENDOR IE JS ################################
|
|
// #############################################################################
|
|
gulp.task('_buildIEJavaScriptVendor', () => {
|
|
return gulp.src(['node_modules/babel-polyfill/dist/polyfill.js'].concat(vendorSources))
|
|
.pipe(concat(vendorIETarget))
|
|
.pipe(gulp.dest(destinationFolder));
|
|
});
|
|
|
|
gulp.task('_minifyIEJavaScriptVendor', () => {
|
|
return gulp.src([destinationFolder + vendorIETarget])
|
|
.pipe(sourcemaps.init({identityMap: true, largeFile: true}))
|
|
.pipe(concat(vendorIETargetMin))
|
|
.pipe(strip())
|
|
.pipe(uglify())
|
|
.pipe(sourcemaps.write('./', {includeContent: false}))
|
|
.pipe(gulp.dest(destinationFolder));
|
|
});
|
|
|
|
gulp.task('jslint', () => {
|
|
return gulp.src(lintJsSources)
|
|
.pipe(jshint('.jshintrc'))
|
|
.pipe(jshint.reporter('default'))
|
|
.pipe(jshint.reporter('fail'));
|
|
});
|
|
|
|
gulp.task('csslint', () => {
|
|
return gulp.src(cssSources)
|
|
.pipe(stylelint ({
|
|
reporters: [{
|
|
formatter: 'string',
|
|
console: true
|
|
}]
|
|
}));
|
|
});
|
|
|
|
gulp.task('watch', () => {
|
|
gulp.watch(watchSources, ['_buildSource']);
|
|
});
|
|
|
|
gulp.task('karma', (done) => {
|
|
new KarmaServer({
|
|
configFile: karmaConfig,
|
|
singleRun: true,
|
|
browsers: ['Firefox'],
|
|
reporters: ['progress', 'coverage']
|
|
}, done).start();
|
|
});
|
|
|
|
gulp.task('watch-karma', (done) => {
|
|
new KarmaServer({
|
|
configFile: karmaConfig,
|
|
autoWatch: true,
|
|
browsers: ['Firefox'],
|
|
reporters: ['progress', 'coverage']
|
|
}, done).start();
|
|
});
|