summaryrefslogtreecommitdiff
path: root/vendor/mervick/material-design-icons/Gulpfile.js
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/mervick/material-design-icons/Gulpfile.js')
-rw-r--r--vendor/mervick/material-design-icons/Gulpfile.js141
1 files changed, 141 insertions, 0 deletions
diff --git a/vendor/mervick/material-design-icons/Gulpfile.js b/vendor/mervick/material-design-icons/Gulpfile.js
new file mode 100644
index 000000000..df47545d1
--- /dev/null
+++ b/vendor/mervick/material-design-icons/Gulpfile.js
@@ -0,0 +1,141 @@
+/* jshint node: true */
+"use strict";
+
+var _ = require('lodash'),
+ fs = require('fs'),
+ gulp = require('gulp'),
+ gutil = require('gulp-util'),
+ changed = require('gulp-changed'),
+ File = require('vinyl'),
+ path = require('path'),
+ through2 = require('through2');
+
+
+var sassClassPrefix = 'md-css-prefix',
+ modulePath = './node_modules/material-design-icons',
+ srcCodepoints = modulePath + '/iconfont/codepoints',
+ fontsPath = './fonts',
+ dstCodepoints = fontsPath + '/codepoints',
+ sassFile = 'scss/_icons.scss',
+ sassHeader = '@import "variables";\n\n',
+ demoDataFile = 'demo/js/data.js'
+
+
+function generateSassCodepoints(filepath) {
+ return through2.obj(function(codepointsFile, encoding, callback) {
+ function codepointsToSass(codepoints) {
+ return _(codepoints)
+ .split('\n')
+ .reject(_.isEmpty)
+ .reduce(function(file, line) {
+ let codepoint = line.split(' ');
+ file += '.#{$' + sassClassPrefix + '}-' + codepoint[0].replace(/_/g, '-') +
+ ':before { content: "\\' + codepoint[1] + '"; }\n';
+ return file;
+ }, sassHeader);
+ }
+ callback(null, new File({
+ path: filepath,
+ contents: new Buffer(codepointsToSass(codepointsFile.contents), 'utf8')
+ }));
+ });
+}
+
+
+gulp.task('update-sass', function() {
+ gulp.src(srcCodepoints)
+ .pipe(changed(fontsPath, {hasChanged: changed.compareSha1Digest}))
+ .pipe(generateSassCodepoints(sassFile))
+ .pipe(gulp.dest('.'));
+});
+
+function generateDataCodepoints(filepath) {
+ return through2.obj(function(codepointsFile, encoding, callback) {
+ var countIcons = 0,
+ newIcons = 0;
+
+ function codepoints2obj(codepoints) {
+ return _(codepoints)
+ .split('\n')
+ .reject(_.isEmpty)
+ .reduce(function(obj, line) {
+ let codepoint = line.split(' ');
+ obj[codepoint[0]] = codepoint[1];
+ return obj;
+ }, {});
+ }
+
+ function scanCategories(dir, codes) {
+ var categories = {};
+ fs.readdirSync(dir)
+ .filter(function (file) {
+ return fs.statSync(path.join(dir, file)).isDirectory()
+ && fs.existsSync(path.join(dir, file, "svg/production"));
+ })
+ .forEach(function (category) {
+ categories[category] = {};
+ let catPath = path.join(dir, category, "svg/production");
+ fs.readdirSync(catPath)
+ .filter(function(file) {
+ return file.match(/^ic_(.+?)_\d+px\.svg$/);
+ })
+ .forEach(function(file) {
+ let matches;
+ if (matches = /^ic_(.+?)_\d+px\.svg$/.exec(file)) {
+ let icon = matches[1];
+ if (codes[icon]) {
+ if (!categories[category][icon]) {
+ categories[category][icon] = codes[icon];
+ countIcons ++;
+ }
+ }
+ }
+ });
+ });
+ return categories;
+ }
+
+ function calculateNewIcons(categories, codes, old) {
+ var cats = categories;
+ Object.keys(categories).forEach(function(name) {
+ let category = categories[name];
+ Object.keys(category).forEach(function(icon) {
+ let code = category[icon];
+ cats[name][icon] = [code, !old[icon]];
+ if (!old[icon]) {
+ newIcons ++;
+ }
+ });
+ });
+ return cats;
+ }
+
+ var codes = codepoints2obj(codepointsFile.contents);
+ var categories = scanCategories(modulePath, codes);
+ categories = calculateNewIcons(categories, codes,
+ codepoints2obj(fs.readFileSync(dstCodepoints).toString()));
+
+ gutil.log('Was found', gutil.colors.red(newIcons), 'new icons');
+ gutil.log('Total found', gutil.colors.red(countIcons), 'icons.');
+
+ callback(null, new File({
+ path: filepath,
+ contents: new Buffer(
+ 'window.data = ' + JSON.stringify(categories) + ';', 'utf8')
+ }));
+ });
+}
+
+gulp.task('update-demo-data', function() {
+ gulp.src(srcCodepoints)
+ .pipe(changed(fontsPath, {hasChanged: changed.compareSha1Digest}))
+ .pipe(generateDataCodepoints(demoDataFile))
+ .pipe(gulp.dest('.'));
+});
+
+gulp.task('update-codepoints', function() {
+ gulp.src(srcCodepoints)
+ .pipe(gulp.dest(fontsPath));
+})
+
+gulp.task('default', ['update-sass', 'update-demo-data']);