]> git.agnieray.net Git - galette.git/blobdiff - gulpfile.js
Fix groups selection widget on member form
[galette.git] / gulpfile.js
index 3cc0ca865cb9773c4bdd302acea97e1eee0ce4d8..0181184f154b5cf1eeeb9e0fe3a532fecf3ff7ca 100644 (file)
-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',
-    './node_modules/summernote/dist/summernote-lite.min.css',
-];
-
-var main_scripts = [
-    './node_modules/jquery/dist/jquery.js',
-    './node_modules/jquery-ui-dist/jquery-ui.js',
-    './node_modules/jquery-ui/ui/i18n/*',
-    './node_modules/js-cookie/dist/js.cookie.min.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',
-    './node_modules/summernote/dist/summernote-lite.min.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/summernote/dist/font/*',
-        'dest': '/webfonts/'
-    }, {
-        'src': './node_modules/summernote/dist/lang/*.min.js',
-        'dest': '/js/lang/'
+      src: './node_modules/summernote/dist/font/*',
+      dest: 'webfonts/'
     }, {
-        'src': './node_modules/jquery-ui-dist/images/*',
-        'dest': '/images/'
+      src: './node_modules/summernote/dist/lang/*.min.js',
+      dest: 'js/lang/'
     }, {
-        'src': './galette/webroot/themes/default/jquery-ui/images/*',
-        'dest': '/images/'
-    }, {
-        'src': './galette/webroot/themes/default/images/desktop/*',
-        'dest': '/images/desktop/'
-    }, {
-        '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());
+
+  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());
 
-  main = gulp.src(main_styles)
-    .pipe(replace('jquery-ui/images/', '../images/'))
-    .pipe(replace('("images/ui', '("../images/ui')) //
-    .pipe(replace('url(images/', 'url(../images/'))
+  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(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));
+    .pipe(concat('summernote.min.css'))
+    .pipe(gulp.dest(paths.assets.css))
+    .pipe(browserSync.stream());
 
-  jqplot = gulp.src('./galette/webroot/js/jquery/jqplot-1.0.8r1250/jquery.jqplot.css')
-    .pipe(concat('galette-jqplot.bundle.min.css'))
-    .pipe(cleanCSS())
-    .pipe(gulp.dest(_dir));
+  codemirror = download(paths.styles.codemirror)
+    .pipe(concat('codemirror.css'))
+    .pipe(gulp.dest(paths.assets.css))
+    .pipe(browserSync.stream());
 
-  return merge(main, jstree, jqplot);
-};
+  return merge(summernote, codemirror);
+}
 
 function scripts() {
-  var _dir = galette.public + '/js/';
-
-  main = gulp.src(main_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;