2018-01-22 13:01:38 -08:00
|
|
|
/* jslint node:true */
|
|
|
|
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
2023-05-11 08:48:42 +02:00
|
|
|
const argv = require('yargs').argv,
|
2018-01-22 13:01:38 -08:00
|
|
|
concat = require('gulp-concat'),
|
|
|
|
|
ejs = require('gulp-ejs'),
|
2020-01-08 17:22:07 +01:00
|
|
|
execSync = require('child_process').execSync,
|
2023-05-11 10:39:15 +02:00
|
|
|
fs = require('fs'),
|
2018-01-22 13:01:38 -08:00
|
|
|
gulp = require('gulp'),
|
2023-05-11 11:29:08 +02:00
|
|
|
sass = require('gulp-sass')(require('sass')),
|
2018-01-22 13:01:38 -08:00
|
|
|
serve = require('gulp-serve'),
|
2018-12-11 19:23:18 +01:00
|
|
|
sourcemaps = require('gulp-sourcemaps');
|
2018-01-22 13:01:38 -08:00
|
|
|
|
|
|
|
|
if (argv.help || argv.h) {
|
|
|
|
|
console.log('Supported arguments for "gulp develop":');
|
|
|
|
|
console.log(' --api-origin <cloudron api uri>');
|
2018-04-06 00:11:08 +02:00
|
|
|
console.log(' --revision <revision>');
|
2022-05-05 16:34:45 +02:00
|
|
|
console.log(' --appstore-console-origin <appstore console uri>');
|
2018-01-22 13:01:38 -08:00
|
|
|
|
|
|
|
|
process.exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
2020-02-07 13:41:10 +01:00
|
|
|
const revision = argv.revision || '';
|
2018-04-06 00:11:08 +02:00
|
|
|
|
2020-02-07 18:27:39 +01:00
|
|
|
let apiOrigin = '';
|
|
|
|
|
if (argv.apiOrigin) {
|
|
|
|
|
if (argv.apiOrigin.indexOf('https://') === 0) apiOrigin = argv.apiOrigin;
|
|
|
|
|
else apiOrigin = 'https://' + argv.apiOrigin;
|
|
|
|
|
}
|
|
|
|
|
|
2019-08-05 20:32:56 +02:00
|
|
|
var appstore = {
|
2022-05-05 16:53:10 +02:00
|
|
|
consoleOrigin: argv.appstoreConsoleOrigin || ''
|
2020-09-28 16:10:55 -07:00
|
|
|
};
|
2019-08-05 20:32:56 +02:00
|
|
|
|
2018-01-22 13:01:38 -08:00
|
|
|
console.log();
|
2020-02-07 13:41:10 +01:00
|
|
|
console.log('Cloudron API: %s', apiOrigin || 'default');
|
2018-04-15 11:00:01 +02:00
|
|
|
console.log('Building for revision: %s', revision);
|
2018-01-22 13:01:38 -08:00
|
|
|
console.log();
|
2019-08-05 20:32:56 +02:00
|
|
|
console.log('Overriding appstore origin:');
|
2022-05-05 16:34:45 +02:00
|
|
|
console.log(' Console: %s', appstore.consoleOrigin || 'no');
|
2019-08-05 20:32:56 +02:00
|
|
|
console.log();
|
2018-01-22 13:01:38 -08:00
|
|
|
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.task('fontawesome', function () {
|
2020-07-30 13:20:28 +02:00
|
|
|
return gulp.src('node_modules/@fortawesome/fontawesome-free/**/*')
|
|
|
|
|
.pipe(gulp.dest('dist/3rdparty/fontawesome/'));
|
2019-02-21 14:17:14 -08:00
|
|
|
});
|
|
|
|
|
|
2024-03-28 17:03:53 +01:00
|
|
|
gulp.task('noto-sans', function () {
|
|
|
|
|
return gulp.src('node_modules/@fontsource/noto-sans/**/*')
|
|
|
|
|
.pipe(gulp.dest('dist/3rdparty/noto-sans/'));
|
|
|
|
|
});
|
|
|
|
|
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.task('bootstrap', function () {
|
|
|
|
|
return gulp.src('node_modules/bootstrap-sass/assets/javascripts/bootstrap.min.js')
|
|
|
|
|
.pipe(gulp.dest('dist/3rdparty/js'));
|
|
|
|
|
});
|
|
|
|
|
|
2023-04-15 19:00:01 +02:00
|
|
|
gulp.task('moment', function () {
|
|
|
|
|
return gulp.src('node_modules/moment/min/*')
|
|
|
|
|
.pipe(gulp.dest('dist/3rdparty/js'));
|
|
|
|
|
});
|
|
|
|
|
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.task('3rdparty-copy', function () {
|
|
|
|
|
return gulp.src([
|
|
|
|
|
'src/3rdparty/**/*.js',
|
|
|
|
|
'src/3rdparty/**/*.map',
|
|
|
|
|
'src/3rdparty/**/*.css',
|
|
|
|
|
'src/3rdparty/**/*.otf',
|
|
|
|
|
'src/3rdparty/**/*.eot',
|
|
|
|
|
'src/3rdparty/**/*.svg',
|
|
|
|
|
'src/3rdparty/**/*.gif',
|
2022-10-11 18:31:03 +02:00
|
|
|
'src/3rdparty/**/*.ttf',
|
2022-12-23 07:23:14 +01:00
|
|
|
'node_modules/chart.js/dist/chart.umd.js'
|
2022-10-11 18:31:03 +02:00
|
|
|
]).pipe(gulp.dest('dist/3rdparty/'));
|
2019-02-21 14:17:14 -08:00
|
|
|
});
|
|
|
|
|
|
2024-03-28 17:03:53 +01:00
|
|
|
gulp.task('3rdparty', gulp.series(['3rdparty-copy', 'moment', 'bootstrap', 'fontawesome', 'noto-sans']));
|
2019-02-21 14:17:14 -08:00
|
|
|
|
|
|
|
|
// --------------
|
|
|
|
|
// JavaScript
|
|
|
|
|
// --------------
|
2018-01-22 13:01:38 -08:00
|
|
|
|
|
|
|
|
gulp.task('js-index', function () {
|
2019-02-21 14:17:14 -08:00
|
|
|
return gulp.src([
|
2018-04-10 13:28:38 +02:00
|
|
|
'src/js/index.js',
|
|
|
|
|
'src/js/client.js',
|
2021-11-03 21:57:44 +01:00
|
|
|
'src/js/utils.js',
|
2018-04-10 13:28:38 +02:00
|
|
|
'src/views/*.js'
|
2020-09-28 16:10:55 -07:00
|
|
|
])
|
2020-02-07 13:41:10 +01:00
|
|
|
.pipe(ejs({ apiOrigin: apiOrigin, revision: revision, appstore: appstore }, {}, { ext: '.js' }))
|
2018-01-22 13:01:38 -08:00
|
|
|
.pipe(sourcemaps.init())
|
|
|
|
|
.pipe(concat('index.js', { newLine: ';' }))
|
|
|
|
|
.pipe(sourcemaps.write())
|
2018-04-10 13:28:38 +02:00
|
|
|
.pipe(gulp.dest('dist/js'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
2023-06-15 16:26:06 +02:00
|
|
|
gulp.task('js-passwordreset', function () {
|
|
|
|
|
return gulp.src(['src/js/passwordreset.js', 'src/js/utils.js'])
|
|
|
|
|
.pipe(ejs({ apiOrigin: apiOrigin, revision: revision, appstore: appstore }, {}, { ext: '.js' }))
|
|
|
|
|
.pipe(sourcemaps.init())
|
|
|
|
|
.pipe(concat('passwordreset.js', { newLine: ';' }))
|
|
|
|
|
.pipe(sourcemaps.write())
|
|
|
|
|
.pipe(gulp.dest('dist/js'));
|
|
|
|
|
});
|
|
|
|
|
|
2020-02-05 15:05:34 +01:00
|
|
|
gulp.task('js-setupaccount', function () {
|
2021-11-03 21:57:44 +01:00
|
|
|
return gulp.src(['src/js/setupaccount.js', 'src/js/utils.js'])
|
2021-01-29 11:18:26 +01:00
|
|
|
.pipe(ejs({ apiOrigin: apiOrigin, revision: revision, appstore: appstore }, {}, { ext: '.js' }))
|
2020-02-05 15:05:34 +01:00
|
|
|
.pipe(sourcemaps.init())
|
|
|
|
|
.pipe(concat('setupaccount.js', { newLine: ';' }))
|
|
|
|
|
.pipe(sourcemaps.write())
|
|
|
|
|
.pipe(gulp.dest('dist/js'));
|
|
|
|
|
});
|
|
|
|
|
|
2024-04-26 20:26:57 +02:00
|
|
|
gulp.task('js-activation', function () {
|
|
|
|
|
return gulp.src(['src/js/activation.js', 'src/js/client.js', 'src/js/utils.js'])
|
2021-01-29 11:18:26 +01:00
|
|
|
.pipe(ejs({ apiOrigin: apiOrigin, revision: revision, appstore: appstore }, {}, { ext: '.js' }))
|
2018-01-22 13:01:38 -08:00
|
|
|
.pipe(sourcemaps.init())
|
2024-04-26 20:26:57 +02:00
|
|
|
.pipe(concat('activation.js', { newLine: ';' }))
|
2018-01-22 13:01:38 -08:00
|
|
|
.pipe(sourcemaps.write())
|
2018-04-10 13:28:38 +02:00
|
|
|
.pipe(gulp.dest('dist/js'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
2024-04-26 20:32:23 +02:00
|
|
|
gulp.task('js-setup', function () {
|
|
|
|
|
return gulp.src(['src/js/setup.js', 'src/js/client.js', 'src/js/utils.js'])
|
2021-01-29 11:18:26 +01:00
|
|
|
.pipe(ejs({ apiOrigin: apiOrigin, revision: revision, appstore: appstore }, {}, { ext: '.js' }))
|
2018-01-22 13:01:38 -08:00
|
|
|
.pipe(sourcemaps.init())
|
2024-04-26 20:32:23 +02:00
|
|
|
.pipe(concat('setup.js', { newLine: ';' }))
|
2018-01-22 13:01:38 -08:00
|
|
|
.pipe(sourcemaps.write())
|
2018-04-10 13:28:38 +02:00
|
|
|
.pipe(gulp.dest('dist/js'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
gulp.task('js-restore', function () {
|
2021-11-03 21:57:44 +01:00
|
|
|
return gulp.src(['src/js/restore.js', 'src/js/client.js', 'src/js/utils.js'])
|
2021-01-29 11:18:26 +01:00
|
|
|
.pipe(ejs({ apiOrigin: apiOrigin, revision: revision, appstore: appstore }, {}, { ext: '.js' }))
|
2018-01-22 13:01:38 -08:00
|
|
|
.pipe(sourcemaps.init())
|
|
|
|
|
.pipe(concat('restore.js', { newLine: ';' }))
|
|
|
|
|
.pipe(sourcemaps.write())
|
2018-04-10 13:28:38 +02:00
|
|
|
.pipe(gulp.dest('dist/js'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
2024-04-26 20:32:23 +02:00
|
|
|
gulp.task('js', gulp.series([ 'js-index', 'js-passwordreset', 'js-setupaccount', 'js-activation', 'js-setup', 'js-restore' ]));
|
2018-01-22 13:01:38 -08:00
|
|
|
|
|
|
|
|
// --------------
|
|
|
|
|
// HTML
|
|
|
|
|
// --------------
|
|
|
|
|
|
|
|
|
|
gulp.task('html-views', function () {
|
2018-04-10 13:28:38 +02:00
|
|
|
return gulp.src('src/views/**/*.html').pipe(gulp.dest('dist/views'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.task('html-raw', function () {
|
2020-02-07 13:41:10 +01:00
|
|
|
return gulp.src('src/*.html').pipe(ejs({ apiOrigin: apiOrigin, revision: revision }, {}, { ext: '.html' })).pipe(gulp.dest('dist'));
|
2019-02-21 14:17:14 -08:00
|
|
|
});
|
|
|
|
|
|
2024-04-20 13:38:47 +02:00
|
|
|
gulp.task('html', gulp.series(['html-views', 'html-raw']));
|
2019-02-21 14:17:14 -08:00
|
|
|
|
2018-01-22 13:01:38 -08:00
|
|
|
// --------------
|
|
|
|
|
// CSS
|
|
|
|
|
// --------------
|
|
|
|
|
|
|
|
|
|
gulp.task('css', function () {
|
2018-04-10 13:28:38 +02:00
|
|
|
return gulp.src('src/*.scss')
|
2024-03-28 17:03:53 +01:00
|
|
|
.pipe(sass({ includePaths: [
|
|
|
|
|
'node_modules/bootstrap-sass/assets/stylesheets/',
|
|
|
|
|
'node_modules/@fontsource/'
|
|
|
|
|
]}).on('error', sass.logError))
|
2018-04-10 13:28:38 +02:00
|
|
|
.pipe(gulp.dest('dist'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
gulp.task('images', function () {
|
2018-04-10 13:28:38 +02:00
|
|
|
return gulp.src('src/img/**')
|
|
|
|
|
.pipe(gulp.dest('dist/img'));
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
2020-10-19 14:38:05 +02:00
|
|
|
gulp.task('translation', function () {
|
|
|
|
|
return gulp.src('src/translation/**')
|
|
|
|
|
.pipe(gulp.dest('dist/translation'));
|
|
|
|
|
});
|
|
|
|
|
|
2020-01-08 17:22:07 +01:00
|
|
|
gulp.task('timezones', function (done) {
|
|
|
|
|
execSync('./scripts/createTimezones.js ./dist/js/timezones.js');
|
|
|
|
|
done();
|
|
|
|
|
});
|
2019-02-21 14:17:14 -08:00
|
|
|
|
2018-01-22 13:01:38 -08:00
|
|
|
// --------------
|
|
|
|
|
// Utilities
|
|
|
|
|
// --------------
|
|
|
|
|
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.task('clean', function (done) {
|
2023-05-11 08:48:42 +02:00
|
|
|
fs.rm('dist', { recursive: true, force: true }, done);
|
2019-02-21 14:17:14 -08:00
|
|
|
});
|
|
|
|
|
|
2020-10-19 14:38:05 +02:00
|
|
|
gulp.task('default', gulp.series(['clean', 'html', 'js', 'timezones', '3rdparty', 'translation', 'images', 'css']));
|
2019-02-21 14:17:14 -08:00
|
|
|
|
|
|
|
|
gulp.task('watch', function (done) {
|
|
|
|
|
gulp.watch(['src/*.scss'], gulp.series(['css']));
|
|
|
|
|
gulp.watch(['src/img/*'], gulp.series(['images']));
|
2020-10-19 14:38:05 +02:00
|
|
|
gulp.watch(['src/translation/*'], gulp.series(['translation']));
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.watch(['src/**/*.html'], gulp.series(['html']));
|
|
|
|
|
gulp.watch(['src/views/*.html'], gulp.series(['html-views']));
|
2021-11-03 21:57:44 +01:00
|
|
|
gulp.watch(['scripts/createTimezones.js', 'src/js/utils.js'], gulp.series(['timezones']));
|
2024-04-26 20:26:57 +02:00
|
|
|
gulp.watch(['src/js/activation.js', 'src/js/client.js', 'src/js/utils.js'], gulp.series(['js-activation']));
|
2024-04-26 20:32:23 +02:00
|
|
|
gulp.watch(['src/js/setup.js', 'src/js/client.js', 'src/js/utils.js'], gulp.series(['js-setup']));
|
2021-11-03 21:57:44 +01:00
|
|
|
gulp.watch(['src/js/restore.js', 'src/js/client.js', 'src/js/utils.js'], gulp.series(['js-restore']));
|
2023-06-15 16:26:06 +02:00
|
|
|
gulp.watch(['src/js/passwordreset.js', 'src/js/utils.js'], gulp.series(['js-passwordreset']));
|
2021-11-03 21:57:44 +01:00
|
|
|
gulp.watch(['src/js/setupaccount.js', 'src/js/utils.js'], gulp.series(['js-setupaccount']));
|
2023-08-11 12:25:40 +02:00
|
|
|
gulp.watch(['src/js/index.js', 'src/js/client.js', 'src/views/*.js', 'src/js/utils.js'], gulp.series(['js-index']));
|
2019-02-21 14:17:14 -08:00
|
|
|
gulp.watch(['src/3rdparty/**/*'], gulp.series(['3rdparty']));
|
|
|
|
|
done();
|
2018-01-22 13:01:38 -08:00
|
|
|
});
|
|
|
|
|
|
2021-03-18 14:43:17 +01:00
|
|
|
gulp.task('serve', serve({ root: 'dist', port: 4000, hostname: '0.0.0.0' }));
|
2019-02-21 14:17:14 -08:00
|
|
|
|
|
|
|
|
gulp.task('develop', gulp.series(['default', 'watch', 'serve']));
|
2018-01-22 13:01:38 -08:00
|
|
|
|