-var gulp = require('gulp');
-
-const { series, parallel } = require('gulp');
-var del = require('del');
-var uglify = require('gulp-uglify');
-var cleanCSS = require('gulp-clean-css');
-var merge = require('merge-stream');
-var concat = require('gulp-concat');
-var replace = require('gulp-replace');
-
-var galette = {
- 'modules': './node_modules/',
- 'public': './galette/webroot/assets/'
-};
+/*
+ * Set the URL of your local instance of Galette here.
+ * Then run "gulp serve".
+ * This is for local development purpose only.
+ * Don't commit this change in the repository.
+ */
+const localServer = {
+ url: 'http://galette.localhost/'
+}
+
+var gulp = require('gulp'),
+ del = require('del'),
+ uglify = require('gulp-uglify'),
+ cleanCSS = require('gulp-clean-css'),
+ merge = require('merge-stream'),
+ concat = require('gulp-concat'),
+ replace = require('gulp-replace'),
+ download = require("gulp-download"),
+ browserSync = require('browser-sync').create(),
+ build = require('./semantic/tasks/build'),
+ buildJS = require('./semantic/tasks/build/javascript'),
+ buildCSS = require('./semantic/tasks/build/css'),
+ buildAssets = require('./semantic/tasks/build/assets')
+;
+
+gulp.task('build ui', build);
+gulp.task('build-css', buildCSS);
+gulp.task('build-javascript', buildJS);
+gulp.task('build-assets', buildAssets);
-var main_styles = [
- './galette/webroot/themes/default/galette.css',
- './node_modules/@fortawesome/fontawesome-free/css/all.css',
- './node_modules/jquery-ui-dist/jquery-ui.css',
- './galette/webroot/themes/default/jquery-ui/jquery-ui-1.12.1.custom.css',
- './node_modules/selectize/dist/css/selectize.default.css',
-];
-
-var main_scripts = [
- './node_modules/jquery/dist/jquery.js',
- './node_modules/jquery-ui-dist/jquery-ui.js',
- './node_modules/jquery.cookie/jquery.cookie.js',
- './node_modules/microplugin/src/microplugin.js',
- './node_modules/sifter/sifter.js',
- './node_modules/selectize/dist/js/selectize.min.js',
- './galette/webroot/js/jquery/jquery.bgFade.js',
- './galette/webroot/js/common.js',
-];
-
-var main_assets = [
+var paths = {
+ webroot: './galette/webroot/',
+ assets: {
+ public: './galette/webroot/assets/',
+ css: './galette/webroot/assets/css/',
+ js: './galette/webroot/assets/js/',
+ webfonts: './galette/webroot/assets/webfonts/',
+ theme: {
+ public: './galette/webroot/themes/default/',
+ css: './galette/webroot/themes/default/ui/semantic.min.css',
+ js: './galette/webroot/themes/default/ui/semantic.min.js',
+ images: './galette/webroot/themes/default/images/'
+ }
+ },
+ src: {
+ semantic: './semantic.json',
+ theme: './ui/semantic/galette/**/*',
+ config: './ui/semantic/theme*',
+ files: [
+ './ui/semantic/galette/*',
+ './ui/semantic/galette/**/*.*'
+ ],
+ css: './ui/css/**/*.css',
+ js: './ui/js/*.js',
+ favicon:'./ui/images/favicon.png',
+ logo: './ui/images/galette.png',
+ photo:'./ui/images/default.png',
+ emojis: './node_modules/twemoji-emojis/vendor/svg/*'
+ },
+ semantic: {
+ src: './semantic/src/',
+ theme: './semantic/src/themes/galette/'
+ },
+ styles: {
+ summernote: [
+ './node_modules/summernote/dist/summernote-lite.min.css'
+ ],
+ codemirror: [
+ 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.css'
+ ]
+ },
+ scripts: {
+ main: [
+ './node_modules/js-cookie/dist/js.cookie.js',
+ './ui/js/common.js'
+ ],
+ masschanges: [
+ './ui/js/masschanges.js'
+ ],
+ chartjs: [
+ './node_modules/chart.js/dist/chart.umd.js',
+ './node_modules/chartjs-plugin-autocolors/dist/chartjs-plugin-autocolors.min.js',
+ './node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.min.js'
+ ],
+ sortablejs: [
+ './node_modules/sortablejs/Sortable.min.js'
+ ],
+ summernote: [
+ './node_modules/summernote/dist/summernote-lite.min.js'
+ ],
+ codemirror: [
+ 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.js'
+ ],
+ codemirrorxml: [
+ 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/mode/xml/xml.js'
+ ],
+ codemirrorformatting: [
+ 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/formatting.js'
+ ],
+ darkreader: [
+ './node_modules/darkreader/darkreader.js'
+ ]
+ },
+ extras: [
{
- 'src': './node_modules/@fortawesome/fontawesome-free/webfonts/*',
- 'dest': '/webfonts/'
- }, {
- 'src': './node_modules/jquery-ui-dist/images/*',
- 'dest': '/images/'
- }, {
- 'src': './galette/webroot/themes/default/jquery-ui/images/*',
- 'dest': '/images/'
+ src: './node_modules/summernote/dist/font/*',
+ dest: 'webfonts/'
}, {
- 'src': './galette/webroot/themes/default/images/desktop/*',
- 'dest': '/images/desktop/'
+ src: './node_modules/summernote/dist/lang/*.min.js',
+ dest: 'js/lang/'
}, {
- 'src': './node_modules/jstree/dist/themes/default/32px.png',
- 'dest': '/images/'
- }, {
- 'src': './node_modules/jstree/dist/themes/default/40px.png',
- 'dest': '/images/'
- }, {
- 'src': './node_modules/jstree/dist/themes/default/throbber.gif',
- 'dest': '/images/'
+ src: './node_modules/jquery/dist/jquery.min.js',
+ dest: 'js/'
}
-];
-
-const clean = function(cb) {
- del([galette.public]);
- cb();
+ ]
};
-function watch() {
- //wilcards are mandatory for task not to run only once...
- gulp.watch('./galette/webroot/themes/**/*.css', series(styles));
- gulp.watch('./galette/webroot/js/*.js', series(scripts));
-};
+function galette() {
+ favicon = gulp.src(paths.src.favicon)
+ .pipe(gulp.dest(paths.assets.theme.images))
+ .pipe(browserSync.stream());
-function styles() {
- var _dir = galette.public + '/css/';
+ logo = gulp.src(paths.src.logo)
+ .pipe(gulp.dest(paths.assets.theme.images))
+ .pipe(browserSync.stream());
- main = gulp.src(main_styles)
- .pipe(replace('jquery-ui/images/', '../images/'))
- .pipe(replace('("images/ui', '("../images/ui')) //
- .pipe(replace('url(images/', 'url(../images/'))
- .pipe(cleanCSS())
- .pipe(concat('galette-main.bundle.min.css'))
- .pipe(gulp.dest(_dir));
-
- jstree = gulp.src('./node_modules/jstree/dist/themes/default/style.css')
- .pipe(replace('url("32px', 'url("../images/32px'))
- .pipe(replace('url("40px', 'url("../images/40px'))
- .pipe(replace('url("throbber', 'url("../images/throbber'))
- .pipe(concat('galette-jstree.bundle.min.css'))
- .pipe(cleanCSS())
- .pipe(gulp.dest(_dir));
+ photo = gulp.src(paths.src.photo)
+ .pipe(gulp.dest(paths.assets.theme.images))
+ .pipe(browserSync.stream());
+
+ return merge(favicon, logo, photo);
+}
+
+function theme() {
+ config = gulp.src(paths.src.config)
+ .pipe(gulp.dest(paths.semantic.src))
+ .pipe(browserSync.stream());
- jqplot = gulp.src('./galette/webroot/js/jquery/jqplot-1.0.8r1250/jquery.jqplot.css')
- .pipe(concat('galette-jqplot.bundle.min.css'))
+ theme = gulp.src(paths.src.files)
+ .pipe(gulp.dest(paths.semantic.theme))
+ .pipe(browserSync.stream());
+
+ emojis = gulp.src(paths.src.emojis)
+ .pipe(gulp.dest(paths.semantic.theme + 'assets/emojis'))
+ .pipe(browserSync.stream());
+
+ return merge(config, theme, emojis);
+}
+
+function clean() {
+ return del([
+ paths.assets.public,
+ paths.assets.theme.public,
+ ]);
+}
+
+function styles() {
+ summernote = gulp.src(paths.styles.summernote)
+ .pipe(replace('url(font/', 'url(../webfonts/'))
.pipe(cleanCSS())
- .pipe(gulp.dest(_dir));
+ .pipe(concat('summernote.min.css'))
+ .pipe(gulp.dest(paths.assets.css))
+ .pipe(browserSync.stream());
- return merge(main, jstree, jqplot);
-};
+ codemirror = download(paths.styles.codemirror)
+ .pipe(concat('codemirror.css'))
+ .pipe(gulp.dest(paths.assets.css))
+ .pipe(browserSync.stream());
-function scripts() {
- var _dir = galette.public + '/js/';
+ return merge(summernote, codemirror);
+}
- main = gulp.src(main_scripts)
+function scripts() {
+ main = gulp.src(paths.scripts.main)
.pipe(concat('galette-main.bundle.min.js'))
- .pipe(uglify())
- .pipe(gulp.dest(_dir));
-
- jstree = gulp.src('./node_modules/jstree/dist/jstree.min.js')
- .pipe(concat('galette-jstree.bundle.min.js'))
- .pipe(uglify())
- .pipe(gulp.dest(_dir));
-
- //use local lib, npm one is missing plugins :/
- jqplot = gulp.src([
- './galette/webroot/js/jquery/jqplot-1.0.8r1250/jquery.jqplot.min.js',
- './galette/webroot/js/jquery/jqplot-1.0.8r1250/plugins/jqplot.barRenderer.min.js',
- './galette/webroot/js/jquery/jqplot-1.0.8r1250/plugins/jqplot.categoryAxisRenderer.min.js',
- './galette/webroot/js/jquery/jqplot-1.0.8r1250/plugins/jqplot.pieRenderer.min.js',
- './galette/webroot/js/jquery/jqplot-1.0.8r1250/plugins/jqplot.pointLabels.min.js',
- ])
- .pipe(concat('galette-jqplot.bundle.min.js'))
- .pipe(uglify())
- .pipe(gulp.dest(_dir));
-
- return merge(main, jstree, jqplot);
-};
+ .pipe(uglify({
+ output: {
+ comments: /^!/
+ }
+ }))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
-function assets() {
- main = main_assets.map(function (asset) {
- return gulp.src(asset.src)
- .pipe(gulp.dest(galette.public + asset.dest));
- }
- );
+ masschanges = gulp.src(paths.scripts.masschanges)
+ .pipe(concat('masschanges.min.js'))
+ .pipe(uglify({
+ output: {
+ comments: /^!/
+ }
+ }))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
- return merge(main);
-};
+ chartjs = gulp.src(paths.scripts.chartjs)
+ .pipe(concat('chartjs.min.js'))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
-exports.clean = clean;
-exports.watch = watch;
+ sortablejs = gulp.src(paths.scripts.sortablejs)
+ .pipe(concat('sortable.min.js'))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
+
+ summernote = gulp.src(paths.scripts.summernote)
+ .pipe(concat('summernote.min.js'))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
+
+ codemirror = download(paths.scripts.codemirror)
+ .pipe(concat('codemirror.js'))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
+
+ codemirrorxml = download(paths.scripts.codemirrorxml)
+ .pipe(concat('xml.js'))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
+
+ codemirrorformatting = download(paths.scripts.codemirrorformatting)
+ .pipe(concat('formatting.js'))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
+ darkreader = gulp.src(paths.scripts.darkreader)
+ .pipe(concat('darkreader.min.js'))
+ .pipe(uglify({
+ output: {
+ comments: /^!/
+ }
+ }))
+ .pipe(gulp.dest(paths.assets.js))
+ .pipe(browserSync.stream());
+
+ return merge(main, masschanges, chartjs, sortablejs, summernote, codemirror, codemirrorxml, codemirrorformatting, darkreader);
+}
+
+function movefiles() {
+ extras = paths.extras.map(function (extra) {
+ return gulp.src(extra.src)
+ .pipe(gulp.dest(paths.assets.public + extra.dest))
+ .pipe(browserSync.stream());
+ }
+ );
+
+ return merge(extras);
+}
+
+function watch() {
+ browserSync.init({
+ proxy: localServer.url
+ })
+
+ gulp.watch([paths.src.favicon, paths.src.logo, paths.src.photo], gulp.series(galette)).on('change', browserSync.reload)
+ gulp.watch([paths.src.semantic], gulp.series(theme, 'build ui')).on('change', browserSync.reload)
+ gulp.watch([paths.src.theme, paths.src.config], gulp.series(theme, 'build-css')).on('change', browserSync.reload)
+ gulp.watch([paths.src.css], gulp.series(styles)).on('change', browserSync.reload)
+ gulp.watch([paths.src.js], gulp.series(scripts)).on('change', browserSync.reload)
+ gulp.watch([paths.assets.theme.css, paths.assets.theme.js, paths.assets.theme.images]).on('change', browserSync.reload)
+}
+
+exports.galette = galette;
+exports.theme = theme;
+exports.clean = clean;
exports.styles = styles;
exports.scripts = scripts;
-exports.assets = assets;
+exports.movefiles = movefiles;
+exports.watch = watch;
-exports.build = series(styles, scripts, assets);
-exports.default = exports.build;
+var build = gulp.series(theme, clean, styles, scripts, movefiles, 'build ui', galette);
+exports.default = build;