var browserslist = require('browserslist'), console = require('better-console'), config = require('./user'), release = require('./project/release') ; var defaultBrowsers = browserslist(browserslist.defaults) var userBrowsers = browserslist() var hasBrowserslistConfig = JSON.stringify(defaultBrowsers) !== JSON.stringify(userBrowsers) var overrideBrowserslist = hasBrowserslistConfig ? undefined : [ 'last 2 versions', '> 1%', 'opera 12.1', 'bb 10', 'android 4' ] module.exports = { banner : release.banner, log: { created: function(file) { return 'Created: ' + file; }, modified: function(file) { return 'Modified: ' + file; } }, filenames: { concatenatedCSS : 'semantic.css', concatenatedJS : 'semantic.js', concatenatedMinifiedCSS : 'semantic.min.css', concatenatedMinifiedJS : 'semantic.min.js', concatenatedRTLCSS : 'semantic.rtl.css', concatenatedMinifiedRTLCSS : 'semantic.rtl.min.css' }, regExp: { comments: { // remove all comments from config files (.variable) variables : { in : /(\/\*[\s\S]+?\*\/+)[\s\S]+?\/\* End Config \*\//, out : '$1', }, // add version to first comment license: { in : /(^\/\*[\s\S]+)(# Fomantic-UI )([\s\S]+?\*\/)/, out : '$1$2' + release.version + ' $3' }, // adds uniform spacing around comments large: { in : /(\/\*\*\*\*[\s\S]+?\*\/)/mg, out : '\n\n$1\n' }, small: { in : /(\/\*---[\s\S]+?\*\/)/mg, out : '\n$1\n' }, tiny: { in : /(\/\* [\s\S]+? \*\/)/mg, out : '\n$1' } }, theme: /.*(\/|\\)themes(\/|\\).*?(?=(\/|\\))/mg }, settings: { /* Remove Files in Clean */ del: { silent : true }, concatCSS: { rebaseUrls: false }, /* Comment Banners */ header: { year : (new Date()).getFullYear(), title : release.title, version : release.version, repository : release.repository, url : release.url }, plumber: { less: { errorHandler: function(error) { var regExp = { variable : /@(\S.*?)\s/, theme : /themes[\/\\]+(.*?)[\/\\].*/, element : /[\/\\]([^\/\\*]*)\.overrides/ }, theme, element ; if(error && error.filename && error.filename.match(/theme.less/)) { if (error.line == 9) { element = regExp.variable.exec(error.message)[1]; if (element) { console.error('Missing theme.config value for ', element); } console.error('Most likely new UI was added in an update. You will need to add missing elements from theme.config.example'); } else if (error.line == 73) { element = regExp.element.exec(error.message)[1]; theme = regExp.theme.exec(error.message)[1]; console.error(theme + ' is not an available theme for ' + element); } else { console.error(error); } } else { throw new Error(error); } this.emit('end'); } } }, /* What Browsers to Prefix */ prefix: { overrideBrowserslist }, /* File Renames */ rename: { minJS : { extname : '.min.js' }, minCSS : { extname : '.min.css' }, rtlCSS : { extname : '.rtl.css' }, rtlMinCSS : { extname : '.rtl.min.css' } }, /* Minified CSS Concat */ minify: { level: { 1: { inline : false } } }, /* Minified JS Settings */ uglify: { mangle : true, output: { comments: 'some' } }, /* Minified Concat CSS Settings */ concatMinify: { level: { 1: { inline : false, specialComments : false } } }, /* Minified Concat JS */ concatUglify: { mangle : true, output: { comments: 'some' } } } };