'use strict' var gulp = require('gulp'); var browserSync = require('browser-sync').create(); var sass = require('gulp-sass'); var del = require('del'); var replace = require('gulp-replace'); var injectPartials = require('gulp-inject-partials'); var inject = require('gulp-inject'); var sourcemaps = require('gulp-sourcemaps'); var concat = require('gulp-concat'); var merge = require('merge-stream'); gulp.paths = { dist: 'dist', }; var paths = gulp.paths; gulp.task('sass', function () { return gulp.src('./scss/**/style.scss') .pipe(sourcemaps.init()) .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError)) .pipe(sourcemaps.write('./maps')) .pipe(gulp.dest('./css')) .pipe(browserSync.stream()); }); // Static Server + watching scss/html files gulp.task('serve', gulp.series('sass', function() { browserSync.init({ port: 3100, server: "./", ghostMode: false, notify: false }); gulp.watch('scss/**/*.scss', gulp.series('sass')); gulp.watch('**/*.html').on('change', browserSync.reload); gulp.watch('js/**/*.js').on('change', browserSync.reload); })); // Static Server without watching scss files gulp.task('serve:lite', function() { browserSync.init({ server: "./", ghostMode: false, notify: false }); gulp.watch('**/*.css').on('change', browserSync.reload); gulp.watch('**/*.html').on('change', browserSync.reload); gulp.watch('js/**/*.js').on('change', browserSync.reload); }); gulp.task('sass:watch', function () { gulp.watch('./scss/**/*.scss'); }); /* inject partials like sidebar and navbar */ gulp.task('injectPartial', function () { var injPartial1 = gulp.src("./pages/**/*.html", { base: "./" }) .pipe(injectPartials()) .pipe(gulp.dest(".")); var injPartial2 = gulp.src("./*.html", { base: "./" }) .pipe(injectPartials()) .pipe(gulp.dest(".")); return merge(injPartial1, injPartial2); }); /* inject Js and CCS assets into HTML */ gulp.task('injectCommonAssets', function () { return gulp.src('./**/*.html') .pipe(inject(gulp.src([ './vendors/ti-icons/css/themify-icons.css', './vendors/base/vendor.bundle.base.css', './vendors/base/vendor.bundle.base.js' ], {read: false}), {name: 'plugins', relative: true})) .pipe(inject(gulp.src([ './css/*.css', './js/off-canvas.js', './js/hoverable-collapse.js', './js/template.js', './js/todolist.js' ], {read: false}), {relative: true})) .pipe(gulp.dest('.')); }); /* inject Js and CCS assets into HTML */ gulp.task('injectLayoutStyles', function () { return gulp.src('./**/*.html') .pipe(inject(gulp.src([ './css/style.css', ], {read: false}), {relative: true})) .pipe(gulp.dest('.')); }); /*replace image path and linking after injection*/ gulp.task('replacePath', function(){ var replacePath1 = gulp.src(['./pages/*/*.html'], { base: "./" }) .pipe(replace('="images/', '="../../images/')) .pipe(replace('href="pages/', 'href="../../pages/')) .pipe(replace('href="documentation/', 'href="../../documentation/')) .pipe(replace('href="index.html"', 'href="../../index.html"')) .pipe(gulp.dest('.')); var replacePath2 = gulp.src(['./pages/*.html'], { base: "./" }) .pipe(replace('="images/', '="../images/')) .pipe(replace('"pages/', '"../pages/')) .pipe(replace('href="index.html"', 'href="../index.html"')) .pipe(gulp.dest('.')); var replacePath3 = gulp.src(['./index.html'], { base: "./" }) .pipe(replace('="images/', '="images/')) .pipe(gulp.dest('.')); return merge(replacePath1, replacePath2, replacePath3); }); /*sequence for injecting partials and replacing paths*/ gulp.task('inject', gulp.series('injectPartial' , 'injectCommonAssets' , 'injectLayoutStyles', 'replacePath')); gulp.task('clean:vendors', function () { return del([ 'vendors/**/*' ]); }); /*Building vendor scripts needed for basic template rendering*/ gulp.task('buildBaseVendorScripts', function() { return gulp.src([ './node_modules/jquery/dist/jquery.min.js', // './node_modules/popper.js/dist/umd/popper.min.js', './node_modules/bootstrap/dist/js/bootstrap.bundle.min.js', './node_modules/perfect-scrollbar/dist/perfect-scrollbar.min.js' ]) .pipe(concat('vendor.bundle.base.js')) .pipe(gulp.dest('./vendors/base')); }); /*Building vendor styles needed for basic template rendering*/ gulp.task('buildBaseVendorStyles', function() { return gulp.src(['./node_modules/perfect-scrollbar/css/perfect-scrollbar.css']) .pipe(concat('vendor.bundle.base.css')) .pipe(gulp.dest('./vendors/base')); }); /* Scripts for addons */ gulp.task('copyRecursiveVendorFiles', function () { var chartJs = gulp.src(['./node_modules/chart.js/dist/Chart.min.js']) .pipe(gulp.dest('./vendors/chart.js')); var ti = gulp.src(['./node_modules/ti-icons/css/themify-icons.css']) .pipe(gulp.dest('./vendors/ti-icons/css')); var tiFonts = gulp.src(['./node_modules/ti-icons/fonts/*']) .pipe(gulp.dest('./vendors/ti-icons/fonts')); return merge(chartJs, ti, tiFonts); }); //Copy essential map files gulp.task('copyMapFiles', function() { var map1 = gulp.src('node_modules/bootstrap/dist/js/bootstrap.min.js.map') .pipe(gulp.dest('./vendors/base')); return merge(map1); }); /*sequence for building vendor scripts and styles*/ gulp.task('bundleVendors', gulp.series('clean:vendors', 'buildBaseVendorStyles','buildBaseVendorScripts','copyRecursiveVendorFiles','copyMapFiles')); gulp.task('default', gulp.series('serve'));