123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- var gulp = require('gulp');
- var gutil = require('gulp-util');
- var rename = require('gulp-rename');
- var path = require('path');
- gulp.task('default', ['build', 'watch']);
- gulp.task('build', ['styles', 'javascript', 'images', 'fonts']);
- var sourceDirName = 'static_src';
- var destDirName = 'static';
- var renameSrcToDest = function() {
- return rename(function(filePath) {
- filePath.dirname = filePath.dirname.replace(
- '/' + sourceDirName + '/',
- '/' + destDirName + '/');
- });
- };
- var flatten = function(arrOfArr) {
- return arrOfArr.reduce(function(flat, more) {
- return flat.concat(more);
- }, []);
- };
- // A Wagtail app that contains static files
- var App = function(dir, options) {
- this.dir = dir;
- this.options = options || {};
- this.appName = this.options.appName || path.basename(dir);
- this.sourceFiles = path.join('.', this.dir, sourceDirName);
- };
- App.prototype = Object.create(null);
- App.prototype.scssIncludePaths = function() {
- return [this.sourceFiles];
- };
- App.prototype.scssSources = function() {
- if (!this.options.scss) return [];
- return this.options.scss.map(function(file) {
- return path.join(this.sourceFiles, file);
- }, this);
- };
- // All the Wagtail apps that contain static files
- var apps = [
- new App('wagtail/wagtailadmin', {
- 'scss': [
- 'wagtailadmin/scss/core.scss',
- 'wagtailadmin/scss/layouts/login.scss',
- 'wagtailadmin/scss/layouts/home.scss',
- 'wagtailadmin/scss/layouts/page-editor.scss',
- 'wagtailadmin/scss/layouts/preview.scss',
- 'wagtailadmin/scss/panels/rich-text.scss',
- 'wagtailadmin/scss/userbar.scss',
- 'wagtailadmin/scss/userbar_embed.scss',
- ],
- }),
- new App('wagtail/wagtaildocs'),
- new App('wagtail/wagtailembeds'),
- new App('wagtail/wagtailforms'),
- new App('wagtail/wagtailimages', {
- 'scss': [
- 'wagtailimages/scss/add-multiple.scss',
- 'wagtailimages/scss/focal-point-chooser.scss',
- ],
- }),
- new App('wagtail/wagtailsnippets'),
- new App('wagtail/wagtailusers', {
- 'scss': [
- 'wagtailusers/scss/groups_edit.scss',
- ],
- }),
- new App('wagtail/contrib/wagtailstyleguide', {
- 'scss': [
- 'wagtailstyleguide/scss/styleguide.scss'
- ],
- }),
- ];
- /*
- * Watch - Watch files, trigger tasks when they are modified
- */
- gulp.task('watch', ['build'], function () {
- apps.forEach(function(app) {
- gulp.watch(path.join(app.sourceFiles, '*/scss/**'), ['styles:sass']);
- gulp.watch(path.join(app.sourceFiles, '*/css/**'), ['styles:css']);
- gulp.watch(path.join(app.sourceFiles, '*/js/**'), ['javascript']);
- gulp.watch(path.join(app.sourceFiles, '*/images/**'), ['images']);
- gulp.watch(path.join(app.sourceFiles, '*/fonts/**'), ['fonts']);
- });
- });
- /*
- * Styles
- **/
- gulp.task('styles', ['styles:sass', 'styles:css']);
- // SASS - Compile and move sass
- var sass = require('gulp-sass');
- var autoprefixer = require('gulp-autoprefixer');
- gulp.task('styles:sass', function () {
- // Wagtail Sass files include each other across applications,
- // e.g. wagtailimages Sass files will include wagtailadmin/sass/mixins.scss
- // Thus, each app is used as an includePath.
- var includePaths = flatten(apps.map(function(app) { return app.scssIncludePaths(); }));
- // Not all files in a directory need to be compiled, so each app defines
- // its own Sass files that need to be compiled.
- var sources = flatten(apps.map(function(app) { return app.scssSources(); }));
- return gulp.src(sources)
- .pipe(sass({
- errLogToConsole: true,
- includePaths: includePaths,
- outputStyle: 'expanded'
- }))
- .pipe(autoprefixer({
- browsers: ['last 2 versions'],
- cascade: false
- }))
- .pipe(gulp.dest(function(file) {
- // e.g. wagtailadmin/scss/core.scss -> wagtailadmin/css/core.css
- // Changing the suffix is done by Sass automatically
- return file.base
- .replace('/static_src/', '/static/')
- .replace('/scss/', '/css/');
- }))
- .on('error', gutil.log);
- });
- /*
- * Simple copy tasks - these just copy files from the source to the destination,
- * with no compilation, minification, or other intelligence
- *
- **/
- var rename = require('gulp-rename');
- var simpleCopyTask = function(glob) {
- return function() {
- var sources = apps.map(function(app) {
- return path.join(app.sourceFiles, app.appName, glob);
- });
- return gulp.src(sources, {base: '.'})
- .pipe(renameSrcToDest())
- .pipe(gulp.dest('.'))
- .on('error', gutil.log);
- };
- };
- gulp.task('styles:css', simpleCopyTask('css/**/*'));
- gulp.task('javascript', simpleCopyTask('js/**/*'));
- gulp.task('images', simpleCopyTask('images/**/*'));
- gulp.task('fonts', simpleCopyTask('fonts/**/*'));
|