Skip to content
220 lines (188 sloc) 6.81 KB
var gulp = require('gulp'),
$ = require('gulp-load-plugins')(),
path = require('path'),
minimatch = require('minimatch'),
through2 = require('through2'),
del = require('del'),
inquirer = require('inquirer'),
sprite = require('css-sprite').stream;
var paths = {
dist: {
root: './dist'
}
};
paths.dist.scripts = path.join(paths.dist.root, 'js');
paths.dist.styles = { root: path.join(paths.dist.root, 'css') };
paths.dist.styles.dataURI = path.join(paths.dist.styles.root, 'data-uri');
paths.dist.styles.sprites = path.join(paths.dist.styles.root, 'sprites');
paths.dist.styles.basic = path.join(paths.dist.styles.root, 'basic');
paths.dist.images = { root: path.join(paths.dist.root, 'images') };
paths.dist.images.separate = path.join(paths.dist.images.root, 'basic');
paths.dist.images.sprites = path.join(paths.dist.images.root, 'sprites');
gulp.task('default', ['compile']);
gulp.task('compile', ['script', 'images-and-styles']);
gulp.task('release', ['update', 'compile', 'bump']);
gulp.task('script', function(){
var pkg = require('./package.json');
gulp.src('./src/emojify.js')
.pipe(gulp.dest(paths.dist.scripts))
.pipe($.jshint())
.pipe($.jshint.reporter('jshint-stylish'))
.pipe($.insert.prepend('/*! ' + pkg.name + ' - v' + pkg.version + ' - \n' +
' * Copyright (c) Hassan Khan ' + new Date().getFullYear() + '\n' +
' */'))
.pipe($.uglify({
preserveComments: 'some'
}))
.pipe($.rename({
suffix: '.min'
}))
.pipe(gulp.dest(paths.dist.scripts));
});
var getEmoticonFilter = function(){
var emoticons = [
'smile', 'scream', 'smirk', 'grinning', 'stuck_out_tongue_closed_eyes', 'stuck_out_tongue_winking_eye',
'rage', 'frowning', 'sob', 'kissing_heart', 'wink', 'pensive', 'confounded', 'flushed', 'relaxed', 'mask',
'heart', 'broken_heart'
];
return $.filter(function(file){
var index = emoticons.indexOf(path.basename(file.path, path.extname(file.path)));
if(index > -1){
emoticons.splice(index, 1);
return true;
}
})
};
gulp.task('images-and-styles', ['copy-styles', 'data-uri'], function(){
var emoticonFilter = getEmoticonFilter(),
cssFilter = $.filter('**.css'),
emoticonCssFilter = $.filter('**.css'),
emoticonPngFilter = $.filter('**.png');
return gulp.src('./src/images/emoji/*.png')
// copy images over as they are
.pipe(gulp.dest(paths.dist.images.separate))
// generate emoticon sprites
.pipe(emoticonFilter)
.pipe(sprite({
name: 'emojify-emoticons',
style: 'emojify-emoticons.css',
prefix: 'emoji',
cssPath: '../../images/sprites/',
orientation: 'binary-tree',
retina: true,
template: './build/sprites.mustache'
}))
.pipe(emoticonCssFilter)
.pipe($.replace('.emoji-+1', '.emoji-plus1'))
.pipe(gulp.dest(paths.dist.styles.sprites))
.pipe($.minifyCss())
.pipe($.rename({
suffix: '.min'
}))
.pipe(gulp.dest(paths.dist.styles.sprites))
.pipe(emoticonCssFilter.restore())
.pipe(emoticonPngFilter)
.pipe(gulp.dest(paths.dist.images.sprites))
.pipe(emoticonPngFilter.restore())
.pipe($.filter('!**sprites**')) //exclude generated spritesheets
.pipe(emoticonFilter.restore())
// generate all sprites
.pipe(sprite({
name: 'emojify',
style: 'emojify.css',
prefix: 'emoji',
cssPath: '../../images/sprites/',
orientation: 'binary-tree',
retina: true,
template: './build/sprites.mustache'
}))
.pipe(cssFilter)
.pipe($.replace('.emoji-+1', '.emoji-plus1'))
.pipe(gulp.dest(paths.dist.styles.sprites))
.pipe($.minifyCss())
.pipe($.rename({
suffix: '.min'
}))
.pipe(gulp.dest(paths.dist.styles.sprites))
.pipe(cssFilter.restore())
.pipe($.filter('**.png'))
.pipe(gulp.dest(paths.dist.images.sprites));
});
gulp.task('data-uri', function(){
var emoticonFilter = getEmoticonFilter();
return gulp.src('./src/images/emoji/*.png')
.pipe($.imageDataUri({
customClass: function(className){
return 'emoji-' + className
}
}))
.pipe(emoticonFilter)
.pipe($.concat('emojify-emoticons.css'))
.pipe($.replace('.emoji-+1', '.emoji-plus1'))
.pipe(gulp.dest(paths.dist.styles.dataURI))
.pipe($.minifyCss())
.pipe($.rename({
suffix: '.min'
}))
.pipe(gulp.dest(paths.dist.styles.dataURI))
.pipe(emoticonFilter.restore())
// generate all data-URIs
.pipe($.concat('emojify.css'))
.pipe($.replace('.emoji-+1', '.emoji-plus1'))
.pipe(gulp.dest(paths.dist.styles.dataURI))
.pipe($.minifyCss())
.pipe($.rename({
suffix: '.min'
}))
.pipe(gulp.dest(paths.dist.styles.dataURI));
});
gulp.task('copy-styles', function(){
gulp.src('./src/css/basic/*.css')
.pipe(gulp.dest(paths.dist.styles.basic))
.pipe($.minifyCss())
.pipe($.rename({
suffix: '.min'
}))
.pipe(gulp.dest(paths.dist.styles.basic));
});
gulp.task('clean', function(done){
del(paths.dist.root, done);
});
gulp.task('bump', function(done){
inquirer.prompt({
type: 'list',
name: 'bump',
message: 'What type of bump would you like to do?',
choices: ['patch', 'minor', 'major', "don't bump"]
}, function(result){
if(result.bump === "don't bump"){
done();
return;
}
gulp.src(['./bower.json', './package.json'])
.pipe($.bump({type: result.bump}))
.pipe(gulp.dest('./'))
.on('end', done);
});
});
gulp.task('update', function(done){
var emoji = '';
del('./src/images/emoji');
$.download('https://github.com/arvida/emoji-cheat-sheet.com/archive/master.zip')
.pipe($.unzip())
.pipe($.filter(function(file){
return minimatch(file.path, '**/public/graphics/emojis/*.png');
}))
.pipe($.rename({ dirname: './' }))
.pipe(gulp.dest('./src/images/emoji'))
.pipe(through2({ objectMode: true }, function(file, enc, cb){
emoji += ',' + path.basename(file.path, path.extname(file.path));
this.push(file);
cb();
}, function(){
gulp.src('./src/emojify.js')
.pipe($.replace(/(\/\*##EMOJILIST\*\/).+$/m, '$1"' + emoji.substr(1) + '";'))
.pipe(gulp.dest('./src'))
.on('end', done);
}));
});
Something went wrong with that request. Please try again.