Skip to content

Instantly share code, notes, and snippets.

@AlexandreBroudin
Created December 4, 2014 12:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlexandreBroudin/cdbfcba717a67efd0e39 to your computer and use it in GitHub Desktop.
Save AlexandreBroudin/cdbfcba717a67efd0e39 to your computer and use it in GitHub Desktop.
gulpfile
// global
var browserSync = require('browser-sync');
var gulp = require('gulp');
var plumber = require('gulp-plumber');
var ignore = require('gulp-ignore')
// css
var prefix = require('gulp-autoprefixer');
var urlAdjuster = require('gulp-css-url-adjuster');
var cssmin = require('gulp-cssmin');
var rename = require('gulp-rename');
var sass = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
// icons, pictos
var consolidate = require('gulp-consolidate');
var filter = require('gulp-filter');
var iconfont = require('gulp-iconfont');
var svgmin = require('gulp-svgmin');
var tinypng = require('gulp-tinypng');
var sprites = require('gulp-svg-sprites');
var svg2png = require('gulp-svg2png');
var sketch = require('gulp-sketch');
// docs
var docco = require('gulp-docco');
var kss = require('gulp-kss');
// tasks
var defaultTasks = ['custo-orga-build'];
var devCSStask = function(opts){
return gulp.src(opts.srcPath)
.pipe(plumber())
.pipe(sass({
errLogToConsole: true
}))
.pipe(prefix('last 2 versions', 'ff 4'))
.pipe(rename(opts.newFileName))
.pipe(urlAdjuster({
append: "?v="+(new Date()).getTime()
}))
.pipe(gulp.dest('web/build/frontend/css'));
};
var distCSStask = function(opts){
var excludePath = opts.exclude || '*.min.css';
return gulp.src(opts.srcPath)
.pipe(plumber())
.pipe(ignore.exclude(excludePath))
.pipe(cssmin({
keepSpecialComments: '0',
processImport: false
}))
.pipe(rename(opts.renameOpts))
.pipe(gulp.dest('web/build/frontend/css'));
};
// apps
var apps = [
{ name: 'business', ie: true },
{ name: 'desktop', ie: true },
{ name: 'home', ie: true },
{ name: 'fullscreen', ie: true },
{ name: 'mobile', ie: true },
{ name: 'print', ie: false },
{ name: 'touch', ie: false }
];
// browserSync
gulp.task('bs:serve', function(){
return browserSync.init('web/build/frontend/css/**', {
host: 'http://app.wisembly.dev/index_dev.php'
});
});
gulp.task('bs:reload', function(){
return browserSync.reload({
stream: true
});
});
// apps:dev
apps.forEach(function(app){
var appname = app.name;
gulp.task(appname + ':dev', function(){
// gulp home:dev
devCSStask({
srcPath: 'web/frontend/apps/'+ appname +'/sass/app.scss',
newFileName: 'app_'+ appname +'.css'
});
if(app.ie){
devCSStask({
srcPath: 'web/frontend/apps/'+ appname +'/sass/app-ie.scss',
newFileName: 'app_'+ appname +'-ie.css'
});
}
});
gulp.task(appname + ':watch', function(){
return gulp.watch([
'web/frontend/apps/'+ appname +'/sass/**/*.scss',
'web/frontend/core/sass/**/*.scss'
], [
appname + ':dev',
'bs:reload'
]);
});
gulp.task(appname, [
appname + ':dev',
'bs:serve',
appname + ':watch'
]);
return defaultTasks.push(appname + ':dev');
}); // forEach
// apps:dist
gulp.task('dist', function(){
distCSStask({
srcPath: 'web/build/frontend/css/**/*.css',
renameOpts: {
suffix: '.min'
}
});
});
// custo-orga|:dev|:dist|:watch|
gulp.task('custo-orga', function(){
var arg = process.argv[3].split('--')[1];
var hasAction = arg.split(':').length > 1;
var organame = hasAction ? arg.split(':')[0] : arg;
var action = hasAction ? arg.split(':')[1] : false;
gulp.task(organame + ':dev', function(){
devCSStask({
srcPath: 'web/frontend/custom/organization/'+ organame +'/sass/app.scss',
newFileName: organame + '.css'
});
});
gulp.task(organame + ':dist', function(){
distCSStask({
srcPath: 'web/build/frontend/css/'+ organame +'.css',
renameOpts: {
suffix: '.min'
}
});
});
gulp.task(organame + ':watch', function(){
gulp.watch(['web/frontend/custom/organization/**/*.scss'], [
organame + ':dev',
'bs:reload'
]);
});
if(hasAction){
gulp.start(organame + ':' + action);
return;
}
gulp.start([
organame + ':dev',
'bs:serve',
organame + ':watch'
]);
});
gulp.task('custo-orga-build', function(){
devCSStask({
srcPath: './web/frontend/custom/organization/**/sass/app.scss',
newFileName: function(path){
path.basename = path.dirname.split('/sass')[0].toString()
path.dirname = "";
}
});
});
gulp.task('icons', function(){
return gulp.src('web/frontend/core/sketch/icons.sketch')
.pipe(sketch({
export: 'slices',
formats: 'svg',
compact: 'yes',
saveForWeb: 'yes'
}))
.pipe(gulp.dest('web/frontend/core/svg/icons/'))
.pipe(iconfont({
fontName: 'icons',
appendCodepoints: false,
normalize: true,
centerHorizontally: true,
fontHeight: 100 // IMPORTANT
}))
.on('codepoints', function(codepoints, options) {
var iconsOptions = {
glyphs: codepoints,
fontName: 'icons',
fontPath: '/frontend/core/font/',
className: 'icon',
}
// recent browsers
gulp.src('doc/fonts/icon-template.css')
.pipe(consolidate('lodash', iconsOptions))
.pipe(rename('icons.scss'))
.pipe(gulp.dest('web/frontend/core/sass/components/icons/'));
// ie
gulp.src('doc/fonts/icon-template-ie.css')
.pipe(consolidate('lodash', iconsOptions))
.pipe(rename('icons-ie.scss'))
.pipe(gulp.dest('web/frontend/core/sass/components/icons/'));
})
.pipe(gulp.dest('web/frontend/core/font/'));
});
gulp.task('pictos', function(){
return gulp.src('web/frontend/core/sketch/pictos.sketch')
.pipe(sketch({
export: 'slices',
formats: 'svg',
compact: 'yes',
saveForWeb: 'yes'
}))
.pipe(gulp.dest('web/frontend/core/svg/pictos'))
.pipe(sprites({
padding: 0,
common: 'p',
layout: 'horizontal',
templates: {
css: require('fs').readFileSync('./doc/pictos/picto-template.css', 'utf-8'),
previewSprite: require('fs').readFileSync('./doc/pictos/picto-template.html', 'utf-8')
},
cssFile: '../sass/components/pictos/_pictos.scss',
preview: false,
svg: {
sprite: 'pictos.svg'
},
svgPath: '/frontend/core/images/%f',
pngPath: '/frontend/core/images/%f',
}))
.pipe(svgmin())
.pipe(gulp.dest('./web/frontend/core/images'))
.pipe(filter('**/*.svg'))
.pipe(svg2png())
.pipe(tinypng('IqkzldHCKO383hUTufE-BtwzbN-fia7P'))
.pipe(gulp.dest('./web/frontend/core/images'));
});
gulp.task('styleguide', function(){
gulp.src(['web/frontend/**/*.scss'])
.pipe(kss({
templateDirectory: 'doc/styleguide/template/'
}))
.pipe(gulp.dest('web/build/styleguide/'))
});
gulp.task('default', defaultTasks);
// GENERATING DOCCO FOR JOJO_JS
// gulp.task('docco-helpers', function() {
// gulp.src('web/frontend/core/js/helpers/helper_amcharts.js')
// .pipe(docco({
// tempalce: 'docco/layouts/wisembly',
// languages: {
// '.js': {
// 'name': 'javascript',
// 'symbol': '//='
// }
// }
// }))
// .pipe(gulp.dest('web/build/docco/helpers'))
// });
// gulp.task('docco-mixins', function() {
// gulp.src(['web/frontend/core/js/mixins/mixins_view_taggable.js', 'web/frontend/core/js/mixins/mixins_model_taggable.js'])
// .pipe(docco({
// layout: '../../../../../docco/layouts/wisembly',
// languages: {
// '.js': {
// 'name': 'javascript',
// 'symbol': '//='
// }
// }
// }))
// .pipe(gulp.dest('web/build/docco/mixins'))
// });
// gulp.task('docco', ['docco-mixins', 'docco-helpers']);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment