Styleguide and theme code de-duplication (#1651)
[openemr.git] / interface / gulpfile.js
blob72794b67d665a9e5df1232c3959972308d98e525
1 'use strict';
3 // modules
4 var browserSync = require('browser-sync');
5 var csso = require('gulp-csso');
6 var del = require('del');
7 var gap = require('gulp-append-prepend');
8 var gulp = require('gulp');
9 var argv = require('minimist')(process.argv.slice(2));
10 var gulpif = require('gulp-if');
11 var prefix = require('gulp-autoprefixer');
12 var reload = browserSync.reload;
13 var rename = require('gulp-rename');
14 var runSequence = require('run-sequence');
15 var sass = require('gulp-sass');
16 var sourcemaps = require('gulp-sourcemaps');
18 // configuration
19 var config = {
20     dev: argv['dev'],
21     proxy: argv['p'],
22     src: {
23         styles: {
24             style_uni: 'themes/style_*.scss',
25             style_color: 'themes/colors/*.scss',
26             all: 'themes/**/style_*.css',
27             all_rtl: 'themes/**/*style_*.css',
28         }
29     },
30     dist: {
31         storybook: '.out/'
32     },
33     dest: {
34         themes: 'themes'
35     }
38 // clean - will make even stricter once css files are no longer committed
39 gulp.task('clean', function () {
40     let ignore = "!" + config.dist.storybook+ '.gitignore';
41     del.sync([config.dist.storybook + "*", ignore]);
42 });
44 gulp.task('ingest', function() {
45     if (config.dev && typeof config.dev !== "boolean") {
46         // allows for custom proxy to be passed into script
47         config.proxy = config.dev;
48         config.dev = true;
49     }
50 });
52 gulp.task('sync', ['styles'], function() {
53     if (config.proxy) {
54         browserSync.init({
55             proxy: "localhost:" + config.proxy
56         });
57     }
59     if (config.dev) {
60         gulp.watch('themes/**/*.scss', ['styles']);
61     } else {
62         // hack to get font awesome files into the .out directory
63         gulp.src([
64             '../public/assets/font-awesome-4-6-3/fonts/**/*.{ttf,woff,eof,svg}'
65             ], {base: '../'})
66             .pipe(gulp.dest(config.dist.storybook));
67     }
68 });
70 // styles
71 const autoGeneratedHeader = `
72 /*! This style sheet was autogenerated using gulp + scss
73  *  For usage instructions, see: https://github.com/openemr/openemr/blob/master/interface/README.md
74  */
76 gulp.task('styles:style_uni', function () {
77     gulp.src(config.src.styles.style_uni)
78         .pipe(sourcemaps.init())
79         .pipe(sass().on('error', sass.logError))
80         .pipe(prefix('last 1 version'))
81         .pipe(gap.prependText(autoGeneratedHeader))
82         .pipe(gulpif(!config.dev, csso()))
83         .pipe(sourcemaps.write())
84         .pipe(gulp.dest(config.dest.themes))
85         .pipe(gulpif(!config.dev, gulp.dest(config.dist.storybook + config.dest.themes)))
86         .pipe(gulpif(config.dev, reload({stream:true})));
87 });
89 gulp.task('styles:style_color', function () {
90     gulp.src(config.src.styles.style_color)
91         .pipe(sourcemaps.init())
92         .pipe(sass().on('error', sass.logError))
93         .pipe(prefix('last 1 version'))
94         .pipe(gap.prependText(autoGeneratedHeader))
95         .pipe(gulpif(!config.dev, csso()))
96         .pipe(sourcemaps.write())
97         .pipe(gulp.dest(config.dest.themes))
98         .pipe(gulpif(!config.dev, gulp.dest(config.dist.storybook + config.dest.themes)))
99         .pipe(gulpif(config.dev, reload({stream:true})));
102 gulp.task('styles:rtl', function () {
103     gulp.src(config.src.styles.all)
104         .pipe(sourcemaps.init())
105         .pipe(sass().on('error', sass.logError))
106         .pipe(prefix('last 1 version'))
107         .pipe(gulpif(!config.dev, csso()))
108         .pipe(sourcemaps.write())
109         .pipe(gap.appendFile('themes/rtl.css'))
110         .pipe(rename({
111             dirname: "",
112             prefix:"rtl_"
113         }))
114         .pipe(gulp.dest(config.dest.themes))
115         .pipe(gulpif(!config.dev, gulp.dest(config.dist.storybook + config.dest.themes)))
116         .pipe(gulpif(config.dev, reload({stream:true})));
119 gulp.task('styles:style_list', function () {
120     gulp.src(config.src.styles.all_rtl)
121         .pipe(require('gulp-filelist')('themeOptions.json', {flatten: true, removeExtensions: true}))
122         .pipe(gulp.dest('.storybook'));
125 gulp.task('styles', ['styles:style_uni', 'styles:style_color', 'styles:rtl', 'styles:style_list']);
127 if (config.dev) {
128     gulp.task('default', [ 'ingest', 'sync' ]);
129 } else {
130     gulp.task('default', function (callback) {
131         runSequence('clean', ['sync'], callback)
132     });