123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- const gulp = require('gulp');
- const connect = require('gulp-connect');
- const clean = require('gulp-clean');
- const less = require('gulp-less');
- const lessAutoprefix = require('less-plugin-autoprefix');
- const gulpStylelint = require('gulp-stylelint');
- const header = require('gulp-header');
- const cleanCSS = require('gulp-clean-css');
- const sourcemaps = require('gulp-sourcemaps');
- const rename = require('gulp-rename');
- const chalk = require('chalk');
- const fs = require('fs');
- const path = require('path');
- const autoprefix = new lessAutoprefix({
- browsers: ['IE 11', 'last 2 Safari versions', 'iOS 9.0', 'last 2 Chrome versions', 'Firefox ESR'],
- grid: 'no-autoplace'
- });
- //
- // Lint less files using stylelint
- //
- gulp.task('lint', function() {
- return gulp.src('./src/less/**/*.less')
- .pipe(gulpStylelint({
- failAfterError: true,
- reporters: [
- {formatter: 'string', console: true}
- ]
- }));
- });
- //
- // Build HTML demos
- //
- gulp.task('buildDemos', function() {
- return gulp.src(['./src/demo/**/*'])
- .pipe(gulp.dest('./build'));
- });
- //
- // Copy TinyMCE from modules/tinymce to the build folder.
- // NOTE. This task must be run after the buildDemos task
- //
- gulp.task('copyTinymce', function(done) {
- if (fs.existsSync('../tinymce/js/tinymce/tinymce.min.js')) {
- return gulp.src(['../tinymce/js/tinymce/**/*'], {
- base: '../tinymce/js/'
- })
- .pipe(gulp.dest('./build'));
- } else {
- console.log(chalk.red('Local TinyMCE does not exist. Using cloud version instead'));
- console.log(chalk.yellow('Run yarn build in the repository root to build a local version of TinyMCE'));
- const url = 'https://cdn.tiny.cloud/1/qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc/tinymce/5-dev/tinymce.min.js';
- const html = fs.readFileSync('./build/index.html', 'utf8');
- fs.writeFileSync('./build/index.html', html.replace('/tinymce/tinymce.min.js', url));
- done();
- }
- });
- // Generate list of available skins and content css:es to populate select field in index.html
- const getDirs = (p) => fs.readdirSync(p).filter(f => fs.statSync(path.join(p, f)).isDirectory());
- gulp.task('buildSkinSwitcher', (done) => {
- const uiSkins = getDirs(`./build/skins/ui`);
- const contentSkins = getDirs(`./build/skins/content`);
- const data = `uiSkins = ${JSON.stringify(uiSkins)}, contentSkins = ${JSON.stringify(contentSkins)}`;
- const html = fs.readFileSync('./build/index.html', 'utf8');
- fs.writeFileSync('./build/index.html', html.replace('/** ADD_DATA */', data));
- done();
- });
- //
- // Build CSS
- //
- gulp.task('less', function() {
- return gulp.src('./src/less/skins/**/*.less')
- .pipe(less({
- relativeUrls: true,
- plugins: [autoprefix]
- }))
- .pipe(gulp.dest('./build/skins/'));
- });
- //
- // Minify CSS
- //
- gulp.task('minifyCss', function() {
- return gulp.src(['./build/skins/**/*.css', '!**/*.min.css'])
- .pipe(sourcemaps.init())
- .pipe(cleanCSS({ rebase: false }))
- .pipe(header(fs.readFileSync('src/text/license-header.css', 'utf8')))
- .pipe(rename({ extname: '.min.css' }))
- .pipe(sourcemaps.write('.'))
- .pipe(gulp.dest('./build/skins'))
- .pipe(connect.reload());
- });
- //
- // Copy icon font used by the mobile skin to each skin folder in /build
- //
- gulp.task('copyFonts', function() {
- let base = './build/skins/ui';
- return fs.readdirSync(base).reduce((stream, skin) => {
- return stream.pipe(gulp.dest(base + '/' + skin + '/fonts/'));
- }, gulp.src('./src/fonts/**'));
- });
- //
- // watch and rebuild CSS for Oxide demos
- //
- gulp.task('monitor', function (done) {
- connect.server({
- root: './build',
- port: 3000,
- livereload: true
- }, function () {
- this.server.on('close', done);
- });
- gulp.watch('./src/**/*').on('change', gulp.series('css', 'buildDemos', 'copyTinymce'));
- });
- //
- // clean builds
- //
- gulp.task('clean', function () {
- return gulp.src('./build', {
- read: false,
- allowEmpty: true
- })
- .pipe(clean());
- });
- //
- // Build project and watch LESS file changes
- //
- gulp.task('css', gulp.series('lint', 'less', 'minifyCss'));
- gulp.task('build', gulp.series('clean', 'css', 'copyFonts'));
- gulp.task('default', gulp.series('build'));
- gulp.task('demo-build', gulp.series('css', 'less', 'minifyCss', 'buildDemos', 'buildSkinSwitcher'));
- gulp.task('watch', gulp.series('build', 'buildDemos', 'copyTinymce', 'buildSkinSwitcher', 'monitor'));
|