blob: eb9de2ff1a0c1f122c51933ad50cc1c34bcac670 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const gulp = require('gulp');
const sass = require('gulp-sass');
const header = require('gulp-header');
const cleanCSS = require('gulp-clean-css');
const concat = require('gulp-concat');
const rename = require('gulp-rename');
const terser = require('gulp-terser');
const noop = require('gulp-noop');
const streamqueue = require('streamqueue');
let prod = false;
const apache2License = [
'/*',
' * Licensed to the Apache Software Foundation (ASF) under one or more',
' * contributor license agreements. See the NOTICE file distributed with',
' * this work for additional information regarding copyright ownership.',
' * The ASF licenses this file to You under the Apache License, Version 2.0',
' * (the "License"); you may not use this file except in compliance with',
' * the License. You may obtain a copy of the License at',
' *',
' * http://www.apache.org/licenses/LICENSE-2.0',
' *',
' * Unless required by applicable law or agreed to in writing, software',
' * distributed under the License is distributed on an "AS IS" BASIS,',
' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.',
' * See the License for the specific language governing permissions and',
' * limitations under the License.',
' */',
'',
].join('\n');
function srcDir(sub) {
return `./src/main/frontend/${sub}`;
}
function distDir(sub) {
return `./target/frontend/dist/${sub}`;
}
gulp.task('styles', () => streamqueue({ objectMode: true },
gulp.src(srcDir('scss/*.scss'))
.pipe(header(apache2License))
.pipe(sass().on('error', sass.logError))
.pipe(prod ? cleanCSS() : noop()),
gulp.src([
'./node_modules/jam-icons/css/jam.min.css',
'./node_modules/js-autocomplete/auto-complete.css',
]))
.pipe(concat('styles.min.css'))
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms/css')))
.pipe(rename('bundle.css'))
.pipe(gulp.dest(distDir('jcr_root/content/starter/css'))));
gulp.task('cms-assets', () => gulp.src([srcDir('img/*')])
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms/img'))));
gulp.task('cms-fonts', () => gulp.src(['./node_modules/jam-icons/fonts/*', srcDir('fonts/*')])
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms/fonts'))));
gulp.task('cms-js', () => streamqueue({ objectMode: true },
gulp.src([
'./node_modules/rava/dist/rava.min.js',
'./node_modules/wysihtml/dist/minified/wysihtml.min.js',
'./node_modules/wysihtml/dist/minified/wysihtml.all-commands.min.js',
'./node_modules/wysihtml/dist/minified/wysihtml.table_editing.min.js',
'./node_modules/wysihtml/dist/minified/wysihtml.toolbar.min.js',
'./node_modules/handlebars/dist/handlebars.min.js',
'./node_modules/js-autocomplete/auto-complete.min.js',
]),
gulp.src([
'./node_modules/sorttable/sorttable.js',
'./node_modules/wysihtml/parser_rules/advanced_and_extended.js',
]).pipe(prod ? terser() : noop()),
gulp.src([
srcDir('js/cms.js'),
srcDir('js/cms.*.js'),
])
.pipe(prod ? terser() : noop())
.pipe(concat('cms.js'))
.pipe(header(apache2License)))
.pipe(concat('scripts-all.min.js'))
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms/js'))));
gulp.task('editor-fonts', () => gulp.src(['./node_modules/jam-icons/fonts/*', './src/fonts/*'])
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms-editor/fonts'))));
gulp.task('editor-js', () => gulp.src([
srcDir('js/editor.js'),
])
.pipe(terser())
.pipe(header(apache2License))
.pipe(concat('editor.min.js'))
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms-editor/js'))));
gulp.task('editor-styles', () => streamqueue({ objectMode: true },
gulp.src([srcDir('scss/editor.scss')])
.pipe(sass().on('error', sass.logError))
.pipe(prod ? cleanCSS() : noop())
.pipe(header(apache2License)),
gulp.src([
'./node_modules/jam-icons/css/jam.min.css',
]))
.pipe(concat('editor.min.css'))
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms-editor/css'))));
gulp.task('cms-styles', () => streamqueue({ objectMode: true },
gulp.src(srcDir('scss/cms.scss'))
.pipe(sass().on('error', sass.logError))
.pipe(prod ? cleanCSS() : noop())
.pipe(header(apache2License)),
gulp.src([
'./node_modules/jam-icons/css/jam.min.css',
'./node_modules/js-autocomplete/auto-complete.css',
]))
.pipe(concat('styles.min.css'))
.pipe(gulp.dest(distDir('jcr_root/static/clientlibs/sling-cms/css'))));
gulp.task('starter-assets', () => gulp.src(srcDir('img/*'))
.pipe(gulp.dest(distDir('jcr_root/content/starter/img'))));
gulp.task('starter-fonts', () => gulp.src([srcDir('fonts/*')])
.pipe(gulp.dest(distDir('jcr_root/content/starter/fonts'))));
gulp.task('starter-logo', () => gulp.src(srcDir('img/sling-logo.svg'))
.pipe(gulp.dest(distDir('jcr_root/content/starter'))));
gulp.task('starter-styles', () => gulp.src(srcDir('scss/starter.scss'))
.pipe(sass().on('error', sass.logError))
.pipe(cleanCSS())
.pipe(header(apache2License))
.pipe(rename('bundle.css'))
.pipe(gulp.dest(distDir('jcr_root/content/starter/css'))));
gulp.task('set-prod', () => {
prod = true;
});
gulp.task('cms', gulp.series('cms-styles', 'cms-js', 'cms-assets', 'cms-fonts'));
gulp.task('editor', gulp.series('editor-styles', 'editor-js', 'editor-fonts'));
gulp.task('starter', gulp.series('starter-styles', 'starter-assets', 'starter-fonts', 'starter-logo'));
gulp.task('dev', gulp.series('starter', 'cms', 'editor'));
gulp.task('prod', gulp.series('set-prod', 'dev'));