UNPKG

emojify.js

Version:

A Javascript module to convert emoji keywords to images.

220 lines (188 loc) 6.98 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); })); });