]> git.agnieray.net Git - galette.git/blob - gulpfile.js
Fix scrolling in emailing preview's modal
[galette.git] / gulpfile.js
1 /*
2 * Set the URL of your local instance of Galette here.
3 * Then run "gulp serve".
4 * This is for local development purpose only.
5 * Don't commit this change in the repository.
6 */
7 const localServer = {
8 url: 'http://galette.localhost/'
9 }
10
11 var gulp = require('gulp'),
12 del = require('del'),
13 uglify = require('gulp-uglify'),
14 cleanCSS = require('gulp-clean-css'),
15 merge = require('merge-stream'),
16 concat = require('gulp-concat'),
17 replace = require('gulp-replace'),
18 download = require("gulp-download"),
19 browserSync = require('browser-sync').create(),
20 build = require('./semantic/tasks/build'),
21 buildJS = require('./semantic/tasks/build/javascript'),
22 buildCSS = require('./semantic/tasks/build/css'),
23 buildAssets = require('./semantic/tasks/build/assets')
24 ;
25
26 gulp.task('build ui', build);
27 gulp.task('build-css', buildCSS);
28 gulp.task('build-javascript', buildJS);
29 gulp.task('build-assets', buildAssets);
30
31 var paths = {
32 webroot: './galette/webroot/',
33 assets: {
34 public: './galette/webroot/assets/',
35 css: './galette/webroot/assets/css/',
36 js: './galette/webroot/assets/js/',
37 webfonts: './galette/webroot/assets/webfonts/',
38 theme: {
39 public: './galette/webroot/themes/default/',
40 css: './galette/webroot/themes/default/ui/semantic.min.css',
41 js: './galette/webroot/themes/default/ui/semantic.min.js',
42 images: './galette/webroot/themes/default/images/'
43 }
44 },
45 src: {
46 semantic: './semantic.json',
47 theme: './ui/semantic/galette/**/*',
48 config: './ui/semantic/theme*',
49 files: [
50 './ui/semantic/galette/*',
51 './ui/semantic/galette/**/*.*'
52 ],
53 css: './ui/css/**/*.css',
54 js: './ui/js/*.js',
55 favicon:'./ui/images/favicon.png',
56 logo: './ui/images/galette.png',
57 photo:'./ui/images/default.png',
58 emojis: './node_modules/twemoji-emojis/vendor/svg/*'
59 },
60 semantic: {
61 src: './semantic/src/',
62 theme: './semantic/src/themes/galette/'
63 },
64 styles: {
65 summernote: [
66 './node_modules/summernote/dist/summernote-lite.min.css'
67 ],
68 codemirror: [
69 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.css'
70 ]
71 },
72 scripts: {
73 main: [
74 './node_modules/js-cookie/dist/js.cookie.js',
75 './ui/js/common.js'
76 ],
77 masschanges: [
78 './ui/js/masschanges.js'
79 ],
80 chartjs: [
81 './node_modules/chart.js/dist/chart.umd.js',
82 './node_modules/chartjs-plugin-autocolors/dist/chartjs-plugin-autocolors.min.js',
83 './node_modules/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.min.js'
84 ],
85 sortablejs: [
86 './node_modules/sortablejs/Sortable.min.js'
87 ],
88 summernote: [
89 './node_modules/summernote/dist/summernote-lite.min.js'
90 ],
91 codemirror: [
92 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/codemirror.js'
93 ],
94 codemirrorxml: [
95 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/3.20.0/mode/xml/xml.js'
96 ],
97 codemirrorformatting: [
98 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/2.36.0/formatting.js'
99 ],
100 darkreader: [
101 './node_modules/darkreader/darkreader.js'
102 ]
103 },
104 extras: [
105 {
106 src: './node_modules/summernote/dist/font/*',
107 dest: 'webfonts/'
108 }, {
109 src: './node_modules/summernote/dist/lang/*.min.js',
110 dest: 'js/lang/'
111 }, {
112 src: './node_modules/jquery/dist/jquery.min.js',
113 dest: 'js/'
114 }
115 ]
116 };
117
118 function galette() {
119 favicon = gulp.src(paths.src.favicon)
120 .pipe(gulp.dest(paths.assets.theme.images))
121 .pipe(browserSync.stream());
122
123 logo = gulp.src(paths.src.logo)
124 .pipe(gulp.dest(paths.assets.theme.images))
125 .pipe(browserSync.stream());
126
127 photo = gulp.src(paths.src.photo)
128 .pipe(gulp.dest(paths.assets.theme.images))
129 .pipe(browserSync.stream());
130
131 return merge(favicon, logo, photo);
132 }
133
134 function theme() {
135 config = gulp.src(paths.src.config)
136 .pipe(gulp.dest(paths.semantic.src))
137 .pipe(browserSync.stream());
138
139 theme = gulp.src(paths.src.files)
140 .pipe(gulp.dest(paths.semantic.theme))
141 .pipe(browserSync.stream());
142
143 emojis = gulp.src(paths.src.emojis)
144 .pipe(gulp.dest(paths.semantic.theme + 'assets/emojis'))
145 .pipe(browserSync.stream());
146
147 return merge(config, theme, emojis);
148 }
149
150 function clean() {
151 return del([
152 paths.assets.public,
153 paths.assets.theme.public,
154 ]);
155 }
156
157 function styles() {
158 summernote = gulp.src(paths.styles.summernote)
159 .pipe(replace('url(font/', 'url(../webfonts/'))
160 .pipe(cleanCSS())
161 .pipe(concat('summernote.min.css'))
162 .pipe(gulp.dest(paths.assets.css))
163 .pipe(browserSync.stream());
164
165 codemirror = download(paths.styles.codemirror)
166 .pipe(concat('codemirror.css'))
167 .pipe(gulp.dest(paths.assets.css))
168 .pipe(browserSync.stream());
169
170 return merge(summernote, codemirror);
171 }
172
173 function scripts() {
174 main = gulp.src(paths.scripts.main)
175 .pipe(concat('galette-main.bundle.min.js'))
176 .pipe(uglify({
177 output: {
178 comments: /^!/
179 }
180 }))
181 .pipe(gulp.dest(paths.assets.js))
182 .pipe(browserSync.stream());
183
184 masschanges = gulp.src(paths.scripts.masschanges)
185 .pipe(concat('masschanges.min.js'))
186 .pipe(uglify({
187 output: {
188 comments: /^!/
189 }
190 }))
191 .pipe(gulp.dest(paths.assets.js))
192 .pipe(browserSync.stream());
193
194 chartjs = gulp.src(paths.scripts.chartjs)
195 .pipe(concat('chartjs.min.js'))
196 .pipe(gulp.dest(paths.assets.js))
197 .pipe(browserSync.stream());
198
199 sortablejs = gulp.src(paths.scripts.sortablejs)
200 .pipe(concat('sortable.min.js'))
201 .pipe(gulp.dest(paths.assets.js))
202 .pipe(browserSync.stream());
203
204 summernote = gulp.src(paths.scripts.summernote)
205 .pipe(concat('summernote.min.js'))
206 .pipe(gulp.dest(paths.assets.js))
207 .pipe(browserSync.stream());
208
209 codemirror = download(paths.scripts.codemirror)
210 .pipe(concat('codemirror.js'))
211 .pipe(gulp.dest(paths.assets.js))
212 .pipe(browserSync.stream());
213
214 codemirrorxml = download(paths.scripts.codemirrorxml)
215 .pipe(concat('xml.js'))
216 .pipe(gulp.dest(paths.assets.js))
217 .pipe(browserSync.stream());
218
219 codemirrorformatting = download(paths.scripts.codemirrorformatting)
220 .pipe(concat('formatting.js'))
221 .pipe(gulp.dest(paths.assets.js))
222 .pipe(browserSync.stream());
223
224 darkreader = gulp.src(paths.scripts.darkreader)
225 .pipe(concat('darkreader.min.js'))
226 .pipe(uglify({
227 output: {
228 comments: /^!/
229 }
230 }))
231 .pipe(gulp.dest(paths.assets.js))
232 .pipe(browserSync.stream());
233
234 return merge(main, masschanges, chartjs, sortablejs, summernote, codemirror, codemirrorxml, codemirrorformatting, darkreader);
235 }
236
237 function movefiles() {
238 extras = paths.extras.map(function (extra) {
239 return gulp.src(extra.src)
240 .pipe(gulp.dest(paths.assets.public + extra.dest))
241 .pipe(browserSync.stream());
242 }
243 );
244
245 return merge(extras);
246 }
247
248 function watch() {
249 browserSync.init({
250 proxy: localServer.url
251 })
252
253 gulp.watch([paths.src.favicon, paths.src.logo, paths.src.photo], gulp.series(galette)).on('change', browserSync.reload)
254 gulp.watch([paths.src.semantic], gulp.series(theme, 'build ui')).on('change', browserSync.reload)
255 gulp.watch([paths.src.theme, paths.src.config], gulp.series(theme, 'build-css')).on('change', browserSync.reload)
256 gulp.watch([paths.src.css], gulp.series(styles)).on('change', browserSync.reload)
257 gulp.watch([paths.src.js], gulp.series(scripts)).on('change', browserSync.reload)
258 gulp.watch([paths.assets.theme.css, paths.assets.theme.js, paths.assets.theme.images]).on('change', browserSync.reload)
259 }
260
261 exports.galette = galette;
262 exports.theme = theme;
263 exports.clean = clean;
264 exports.styles = styles;
265 exports.scripts = scripts;
266 exports.movefiles = movefiles;
267 exports.watch = watch;
268
269 var build = gulp.series(theme, clean, styles, scripts, movefiles, 'build ui', galette);
270 exports.default = build;