first commit

This commit is contained in:
armansansd
2023-07-12 16:31:19 +01:00
commit 3424b1927b
23306 changed files with 2217776 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
var chalk = require('chalk');
module.exports = function(err) {
console.log(
chalk.red(
err.fileName +
(
err.loc ?
'(' + err.loc.line + ',' + err.loc.column + '): ' :
': '
)
) +
'error Babel: ' + err.message + '\n' +
err.codeFrame
);
}
+25
View File
@@ -0,0 +1,25 @@
'use strict';
var gulp = require('gulp');
var checkDeps = require('gulp-check-deps');
var postcss = require('gulp-postcss');
var doiuse = require('doiuse');
var CONFIG = require('../config.js');
gulp.task('check', gulp.series('check:deps', 'check:browserSupport'));
// Check npm dependencies
gulp.task('check:deps', function() {
return gulp.src('package.json').pipe(checkDeps());
});
// Check browser support
gulp.task('check:browserSupport', function() {
return gulp.src(['_build/assets/css/foundation.css'])
.pipe(postcss([doiuse({
/* browsers: uses ".browserslistrc" */
onFeatureUsage: function (usageInfo) {
console.log(usageInfo.message)
}
})]))
});
+7
View File
@@ -0,0 +1,7 @@
var gulp = require('gulp');
var rimraf = require('rimraf');
// Erases the dist folder
gulp.task('clean', function(done) {
rimraf('_build', done);
});
+9
View File
@@ -0,0 +1,9 @@
var gulp = require('gulp');
var CONFIG = require('../config.js');
// Copies static assets
gulp.task('copy', function() {
return gulp.src(CONFIG.ASSETS_FILES)
.pipe(gulp.dest('_build/assets'));
});
+171
View File
@@ -0,0 +1,171 @@
var addSrc = require('gulp-add-src');
var cleancss = require('gulp-clean-css');
var customizer = require('../../customizer/lib');
var Vinyl = require('vinyl');
var fs = require('fs');
var gulp = require('gulp');
var If = require('gulp-if');
var path = require('path');
var Readable = require('stream').Readable;
var replace = require('gulp-replace');
var rename = require('gulp-rename');
var rimraf = require('rimraf');
var sass = require('gulp-sass');
var touch = require('touch');
var uglify = require('gulp-uglify');
var yaml = require('js-yaml').safeLoad;
var yargs = require('yargs');
var zip = require('gulp-zip');
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer');
var webpackStream = require('webpack-stream');
var webpack = require('webpack');
var utils = require('../utils.js');
var ARGS = yargs.argv;
var FOUNDATION_VERSION = require('../../package.json').version;
var OUTPUT_DIR = ARGS.output || 'custom-build';
var CUSTOMIZER_CONFIG;
var MODULE_LIST;
var VARIABLE_LIST;
var WEBPACK_CONFIG = {
mode: 'development',
externals: utils.umdExternals({
'jquery': 'jQuery'
}),
module: {
rules: [
{
test: /.js$/,
use: [
{
loader: 'babel-loader'
}
]
}
]
},
output: {
libraryTarget: 'umd',
}
};
// Load the configuration file for the customizer. It's a list of modules to load and Sass variables to override
gulp.task('customizer:loadConfig', function(done) {
fs.readFile('customizer/config.yml', function(err, data) {
var moduleListPath = ARGS.modules || '../../customizer/complete';
var moduleList = require(moduleListPath);
CUSTOMIZER_CONFIG = yaml(data.toString());
MODULE_LIST = moduleList.modules;
VARIABLE_LIST = moduleList.variables || {};
done();
});
});
// Prepare dependencies
gulp.task('customizer:prepareSassDeps', function() {
return gulp.src([
'node_modules/@(sassy-lists)/stylesheets/helpers/missing-dependencies',
'node_modules/@(sassy-lists)/stylesheets/helpers/true',
'node_modules/@(sassy-lists)/stylesheets/functions/contain',
'node_modules/@(sassy-lists)/stylesheets/functions/purge',
'node_modules/@(sassy-lists)/stylesheets/functions/remove',
'node_modules/@(sassy-lists)/stylesheets/functions/replace',
'node_modules/@(sassy-lists)/stylesheets/functions/to-list'
])
.pipe(gulp.dest('_vendor'));
});
// Creates a Sass file from the module/variable list and creates foundation.css and foundation.min.css
gulp.task('customizer:sass', gulp.series('customizer:loadConfig', 'customizer:prepareSassDeps', function() {
var sassFile = customizer.sass(CUSTOMIZER_CONFIG, MODULE_LIST, VARIABLE_LIST);
var stream = createStream('foundation.scss', sassFile);
return stream
.pipe(sass({
includePaths: [
'scss',
'node_modules/motion-ui/src'
]
}))
.pipe(postcss([autoprefixer()])) // uses ".browserslistrc"
.pipe(gulp.dest(path.join(OUTPUT_DIR, 'css')))
.pipe(cleancss({ compatibility: 'ie9' }))
.pipe(rename('foundation.min.css'))
.pipe(gulp.dest(path.join(OUTPUT_DIR, 'css')))
}));
// Creates a Foundation JavaScript file from the module list, and also copies dependencies (jQuery, what-input)
gulp.task('customizer:javascript-entry', gulp.series('customizer:loadConfig', function() {
var entryFile = customizer.js(CUSTOMIZER_CONFIG, MODULE_LIST);
// Create a stream with our entry file
var stream = createStream('foundation.js', entryFile);
return stream
.pipe(gulp.dest(path.join(OUTPUT_DIR, 'js/vendor')));
}));
gulp.task('customizer:javascript', gulp.series('customizer:javascript-entry', function() {
return gulp.src(path.join(OUTPUT_DIR, 'js/vendor/foundation.js'))
.pipe(webpackStream(WEBPACK_CONFIG, webpack))
.pipe(rename('foundation.js'))
.pipe(gulp.dest(path.join(OUTPUT_DIR, 'js/vendor')))
.pipe(uglify())
.pipe(rename('foundation.min.js'))
.pipe(addSrc([
'node_modules/jquery/dist/jquery.js',
'node_modules/what-input/dist/what-input.js'
]))
.pipe(gulp.dest(path.join(OUTPUT_DIR, 'js/vendor')));
}));
// Copies the boilerplate index.html to the custom download folder
gulp.task('customizer:html', gulp.series('customizer:loadConfig', function() {
var rtlEnabled = VARIABLE_LIST['global-text-direction'] && VARIABLE_LIST['global-text-direction'] === 'rtl';
return gulp.src('customizer/index.html')
.pipe(If(rtlEnabled, replace('ltr', 'rtl')))
.pipe(gulp.dest(OUTPUT_DIR));
}));
// Add main CSS and JS files to the build directory and create a ZIP file from it.
gulp.task('customizer:zip', function (done) {
var outputFolder = path.dirname(OUTPUT_DIR);
var outputFileName = path.basename(OUTPUT_DIR);
touch(path.join(OUTPUT_DIR, 'css/app.css'));
touch(path.join(OUTPUT_DIR, 'js/app.js'));
fs.writeFileSync(path.join(OUTPUT_DIR, 'js/app.js'), '$(document).foundation()\n');
return gulp.src(path.join(OUTPUT_DIR, '/**/*'))
.pipe(zip(path.basename(outputFileName) + '.zip'))
.pipe(gulp.dest(outputFolder));
});
// Clean the build directory
gulp.task('customizer:clean', function(done) {
rimraf(OUTPUT_DIR, done);
});
// Creates a custom build by:
// - Generating a CSS file
// - Generating a JS file
// - Copying the index.html file
// - Creating a blank app.css file
// - Creating an app.js file with Foundation initialization code
gulp.task('customizer', gulp.series('customizer:sass', 'customizer:javascript', 'customizer:html', 'customizer:zip', 'customizer:clean'));
function createStream(name, content) {
// Create a stream with our entry file
var stream = new Readable({ objectMode: true });
stream._read = function() {};
stream.push(new Vinyl({
path: name,
contents: new Buffer(content)
}));
stream.push(null);
return stream;
}
+221
View File
@@ -0,0 +1,221 @@
var gulp = require('gulp');
var filter = require('gulp-filter');
var cleancss = require('gulp-clean-css');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var confirm = require('gulp-prompt').confirm;
var rsync = require('gulp-rsync');
var replace = require('gulp-replace');
var octophant = require('octophant');
var inquirer = require('inquirer');
var exec = require('child_process').execSync;
var plumber = require('gulp-plumber');
var sourcemaps = require('gulp-sourcemaps');
var rollup = require('rollup');
var ROLLUP_CONFIG = require('../../rollup.config.js');
var CONFIG = require('../config.js');
var CURRENT_VERSION = require('../../package.json').version;
var NEXT_VERSION;
gulp.task('deploy', gulp.series('deploy:prompt', 'deploy:version', 'deploy:dist', 'deploy:plugins', 'deploy:settings', 'deploy:commit', 'deploy:templates'));
gulp.task('deploy:prep', gulp.series('deploy:prompt', 'deploy:version', 'deploy:dist', 'deploy:plugins', 'deploy:settings'));
gulp.task('deploy:dist', gulp.series('sass:foundation', 'javascript:foundation', 'deploy:dist:files', 'deploy:dist:bundles'));
gulp.task('deploy:plugins', gulp.series('deploy:plugins:sources', 'deploy:plugins:sourcemaps'));
gulp.task('deploy:prompt', function(cb) {
inquirer.prompt([{
type: 'input',
name: 'version',
message: 'What version are we moving to? (Current version is ' + CURRENT_VERSION + ')'
}])
.then(function(res) {
NEXT_VERSION = res.version;
cb();
});
});
// Bumps the version number in any file that has one
gulp.task('deploy:version', function() {
return gulp.src(CONFIG.VERSIONED_FILES, { base: process.cwd() })
.pipe(replace(CURRENT_VERSION, NEXT_VERSION))
.pipe(gulp.dest('.'));
});
// Generates compiled CSS and JS files and sourcemaps and puts them in the dist/ folder
gulp.task('deploy:dist:files', function() {
var cssFilter = filter(['**/*.css'], { restore: true });
var jsFilter = filter(['**/*.js'], { restore: true });
var cssSourcemapFilter = filter(['**/*.css.map'], { restore: true });
var jsSourcemapFilter = filter(['**/*.js.map'], { restore: true });
var tsFilter = filter(['**/*.ts'], { restore: true });
return gulp.src(CONFIG.DIST_FILES)
.pipe(plumber())
// --- Source maps ---
// * Copy sourcemaps to the dist folder
// This is done first to avoid collision with minified-sourcemaps.
.pipe(cssSourcemapFilter)
.pipe(gulp.dest('./dist/css'))
.pipe(cssSourcemapFilter.restore)
.pipe(jsSourcemapFilter)
.pipe(gulp.dest('./dist/js'))
.pipe(jsSourcemapFilter.restore)
// --- Source files ---
// * Copy source files to dist folder
// * Create minified files
// * Create minified-sourcemaps based on standard sourcemaps.
// Sourcemaps are initialized before the ".min" renaming to be able retrieve
// original sourcemaps from source names.
.pipe(cssFilter)
.pipe(gulp.dest('./dist/css'))
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(rename({ suffix: '.min' }))
.pipe(cleancss({ compatibility: 'ie9' }))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist/css'))
.pipe(cssFilter.restore)
.pipe(jsFilter)
.pipe(gulp.dest('./dist/js'))
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('./dist/js'))
.pipe(jsFilter.restore)
// --- TypeScript files ---
// * Copy typescript files to the dist folder
.pipe(tsFilter)
.pipe(gulp.dest('./dist/js'))
.pipe(tsFilter.restore);
});
//
// Generates JS bundles and puts them in the dist/ folder.
//
// In addition to the UMD bundle coming from the build task, the following
// formats are generated: CJS, ESM, ES6.
// See "rollup.config.js" for more information.
//
gulp.task('deploy:dist:bundles', gulp.series(
// Create a subtask for each Rollup config
...ROLLUP_CONFIG.map((config) => function () {
// Run rollup with the Rollup config
return rollup.rollup(config)
.then(bundle => bundle.write(config.output));
})
));
// Copies standalone JavaScript plugins to dist/ folder
gulp.task('deploy:plugins:sources', function () {
return gulp.src('_build/assets/js/plugins/*.js')
.pipe(gulp.dest('dist/js/plugins'))
.pipe(sourcemaps.init({ loadMaps: true }))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist/js/plugins'));
});
// Copies standalone JavaScript plugins sourcemaps to dist/ folder
gulp.task('deploy:plugins:sourcemaps', function () {
return gulp.src('_build/assets/js/plugins/*.js.map')
.pipe(gulp.dest('dist/js/plugins'));
});
// Generates a settings file
gulp.task('deploy:settings', function(done) {
var options = {
title: 'Foundation for Sites Settings',
output: './scss/settings/_settings.scss',
groups: {
'grid': 'The Grid',
'off-canvas': 'Off-canvas',
'typography-base': 'Base Typography'
},
sort: [
'global',
'breakpoints',
'grid',
'typography-base',
'typography-helpers'
],
imports: ['util/util'],
_foundationShim: true
}
octophant('./scss', options, done);
});
// Writes a commit with the changes to the version numbers
gulp.task('deploy:commit', function() {
exec('git commit -am "Bump to version "' + NEXT_VERSION);
exec('git tag v' + NEXT_VERSION);
exec('git push origin develop --follow-tags');
});
// Uploads the documentation to the live server
gulp.task('deploy:docs', gulp.series('build', function() {
return gulp.src('./_build/**')
.pipe(confirm('Make sure everything looks right before you deploy.'))
.pipe(rsync({
root: './_build',
hostname: 'deployer@72.32.134.77',
destination: '/home/deployer/sites/foundation-sites-6-docs'
}));
}));
// Uploads the documentation to the live server in beta env
gulp.task('deploy:beta', gulp.series('build', function() {
return gulp.src('./_build/**')
.pipe(confirm('Make sure everything looks right before you deploy.'))
.pipe(rsync({
root: './_build',
hostname: 'deployer@72.32.134.77',
destination: '/home/deployer/sites/scalingsexiness/foundation-sites-6-docs'
}));
}));
// This part of the deploy process hasn't been tested! It should be done manually for now
gulp.task('deploy:templates', function(done) {
// exec('git clone https://github.com/zurb/foundation-sites-template');
// exec('cp scss/settings/_settings.scss foundation-sites-template/scss/_settings.scss');
// exec('cd foundation-sites-template');
// exec('git commit -am "Update settings file to match Foundation "' + NEXT_VERSION);
// exec('git push origin master');
// exec('cd ..');
// exec('rm -rf foundation-sites-template');
//
// exec('git clone https://github.com/zurb/foundation-zurb-template');
// exec('cp scss/settings/_settings.scss foundation-zurb-template/src/assets/scss/_settings.scss');
// exec('cd foundation-zurb-template');
// exec('git commit -am "Update settings file to match Foundation "' + NEXT_VERSION);
// exec('git push origin master');
// exec('cd ..');
// exec('rm -rf foundation-zurb-template');
done();
});
// The Customizer runs this function to generate files it needs
gulp.task('deploy:custom', gulp.series('sass:foundation', 'javascript:foundation', gulp.parallel(
function () {
return gulp.src('./_build/assets/css/foundation.css')
.pipe(cleancss({ compatibility: 'ie9' }))
.pipe(rename('foundation.min.css'))
.pipe(gulp.dest('./_build/assets/css'));
},
function () {
return gulp.src('_build/assets/js/foundation.js')
.pipe(uglify())
.pipe(rename('foundation.min.js'))
.pipe(gulp.dest('./_build/assets/js'));
}
)));
+83
View File
@@ -0,0 +1,83 @@
var cacheBust = require('gulp-cache-bust');
var foundationDocs = require('foundation-docs');
var gulp = require('gulp');
var newer = require('gulp-newer');
var panini = require('panini');
var supercollider = require('supercollider');
var PANINI_CONFIG = {
root: 'docs/pages/',
layouts: 'docs/layout/',
partials: ['docs/partials/', 'node_modules/foundation-docs/templates/partials/'],
helpers: foundationDocs.handlebarsHelpers,
}
var SEARCH_SORT_ORDER = ['page', 'component', 'sass variable', 'sass mixin', 'sass function', 'js class', 'js function', 'js plugin option', 'js event'];
var SEARCH_PAGE_TYPES = {
'library': function(item) {
return !!(item.library);
}
}
supercollider
.config({
template: foundationDocs.componentTemplate,
marked: foundationDocs.marked,
handlebars: foundationDocs.handlebars,
keepFm: true,
quiet: false,
pageRoot: 'docs/pages',
data: {
repoName: 'foundation-sites',
editBranch: 'develop'
}
})
.searchConfig({
extra: 'docs/search.yml',
sort: SEARCH_SORT_ORDER,
pageTypes: SEARCH_PAGE_TYPES
})
.adapter('sass')
.adapter('js');
// Build the search entries
gulp.task('docs:search', function (done) {
supercollider.buildSearch('_build/data/search.json', done);
});
// Assembles the modified layout, pages, and partials in the docs folder
gulp.task('docs:pages', function() {
return gulp.src('docs/pages/**/*')
.pipe(newer({
dest: '_build',
ext: '.html'
}))
.pipe(supercollider.init())
.pipe(panini(PANINI_CONFIG))
.pipe(cacheBust({
basePath: '_build/'
}))
.pipe(gulp.dest('_build'));
});
// Assembles layout, pages, and partials in the docs folder, even if not modified
gulp.task('docs:pages:all', function() {
panini.refresh();
return gulp.src('docs/pages/**/*')
.pipe(supercollider.init())
.pipe(panini(PANINI_CONFIG))
.pipe(cacheBust({
basePath: '_build/'
}))
.pipe(gulp.dest('_build'));
});
gulp.task('docs:debug', gulp.series('docs:all', function(done) {
var output = JSON.stringify(supercollider.tree, null, ' ');
require('fs').writeFile('./_debug.json', output, done);
}));
gulp.task('docs', gulp.series('docs:pages', 'docs:search'));
gulp.task('docs:all', gulp.series('docs:pages:all', 'docs:search'));
+147
View File
@@ -0,0 +1,147 @@
var gulp = require('gulp');
var concat = require('gulp-concat');
var webpackStream = require('webpack-stream');
var webpack = require('webpack');
var named = require('vinyl-named');
var sourcemaps = require('gulp-sourcemaps');
var utils = require('../utils.js');
var CONFIG = require('../config.js');
// ----- WEBPACK CONFIGURATION -----
//
// The following sets up all imports from within Foundation as externals, for the purpose
// of replicating the "drop in dist file" approach of prior versions.
// THIS IS NOT RECOMMENDED FOR MOST USERS. Chances are you either want everything
// (just throw in foundation.js or foundation.min.js) or you should be using a build
// system.
//
// Generate the webpack "Externals" configuration for UMD modules.
// This tells webpack that the modules imported with the listed paths should not
// be included in the build but will be provided later from an external source.
//
// `umdExternals` is used to generate the webpack "externals" configuration:
// an object indicating to different module tools under which name our modules
// are declared. "root" is the global variable name to use in module-less
// environments (or in the namespace if given).
//
// See https://webpack.js.org/configuration/externals/#externals
//
var webpackExternalPlugins = Object.assign(
// | Module import path | External source names and paths
utils.umdExternals({
'jquery': { root: 'jQuery' },
}),
utils.umdExternals({
'./foundation.core': { root: 'foundation.core', default: './foundation.core' },
'./foundation.core.utils': { root: 'foundation.core', default: './foundation.core' },
'./foundation.core.plugin': { root: 'foundation.core', default: './foundation.core' },
'./foundation.util.imageLoader': { root: 'foundation.util.imageLoader' },
'./foundation.util.keyboard': { root: 'foundation.util.keyboard' },
'./foundation.util.mediaQuery': { root: 'foundation.util.mediaQuery' },
'./foundation.util.motion': { root: 'foundation.util.motion' },
'./foundation.util.nest': { root: 'foundation.util.nest' },
'./foundation.util.timer': { root: 'foundation.util.timer' },
'./foundation.util.touch': { root: 'foundation.util.touch' },
'./foundation.util.box': { root: 'foundation.util.box' },
'./foundation.dropdownMenu': { root: 'foundation.dropdownMenu' },
'./foundation.drilldown': { root: 'foundation.drilldown' },
'./foundation.accordionMenu': { root: 'foundation.accordionMenu' },
'./foundation.accordion': { root: 'foundation.accordion' },
'./foundation.tabs': { root: 'foundation.tabs' },
'./foundation.smoothScroll': { root: 'foundation.smoothScroll' },
}, {
// Search for the module in this global variable in module-less environments.
namespace: CONFIG.JS_BUNDLE_NAMESPACE
})
);
// The webpack "output" configuration for UMD modules.
// Makes the modules being exported as UMD modules. In module-less environments,
// modules will be stored in the global variable defined by JS_BUNDLE_NAMESPACE.
var webpackOutputAsExternal = {
library: [CONFIG.JS_BUNDLE_NAMESPACE, '[name]'],
libraryTarget: 'umd',
};
var webpackConfig = {
mode: 'development',
externals: utils.umdExternals({
// Use the global jQuery object "jQuery" in module-less environments.
'jquery': { root: 'jQuery' },
}),
module: {
rules: [
{
test: /.js$/,
use: [
{
loader: 'babel-loader'
}
]
}
]
},
output: {
libraryTarget: 'umd',
},
// https://github.com/shama/webpack-stream#source-maps
devtool: 'source-map',
stats: {
chunks: false,
entrypoints: false,
}
}
// ----- TASKS -----
//
// Compiles JavaScript into a single file
gulp.task('javascript', gulp.series('javascript:foundation', 'javascript:deps', 'javascript:docs'));
// Core has to be dealt with slightly differently due to bootstrapping externals
// and the dependency on foundation.core.utils
//
gulp.task('javascript:plugin-core', function() {
return gulp.src('js/entries/plugins/foundation.core.js')
.pipe(named())
.pipe(sourcemaps.init())
.pipe(webpackStream(Object.assign({}, webpackConfig, {
output: webpackOutputAsExternal,
}), webpack))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/js/plugins'));
});
gulp.task('javascript:plugins', gulp.series('javascript:plugin-core', function () {
return gulp.src(['js/entries/plugins/*.js', '!js/entries/plugins/foundation.core.js'])
.pipe(named())
.pipe(sourcemaps.init())
.pipe(webpackStream(Object.assign({}, webpackConfig, {
externals: webpackExternalPlugins,
output: webpackOutputAsExternal,
}), webpack))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/js/plugins'));
}));
gulp.task('javascript:foundation', gulp.series('javascript:plugins', function() {
return gulp.src('js/entries/foundation.js')
.pipe(named())
.pipe(sourcemaps.init())
.pipe(webpackStream(webpackConfig, webpack))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/js'));
}));
gulp.task('javascript:deps', function() {
return gulp.src(CONFIG.JS_DEPS)
.pipe(concat('vendor.js'))
.pipe(gulp.dest('_build/assets/js'));
});
gulp.task('javascript:docs', function() {
return gulp.src(CONFIG.JS_DOCS)
.pipe(concat('docs.js'))
.pipe(gulp.dest('_build/assets/js'));
});
+39
View File
@@ -0,0 +1,39 @@
var gulp = require('gulp');
var sassLint = require('gulp-sass-lint');
var eslint = require('gulp-eslint');
var CONFIG = require('../config.js');
// Lints Sass and JavaScript files for formatting issues
gulp.task('lint', gulp.series('lint:sass', 'lint:javascript'));
// Lints Sass and Javascript without throwing error
gulp.task('lint:graceful', gulp.series('lint:graceful:sass', 'lint:graceful:javascript'));
function lintSass() {
return gulp.src(CONFIG.SASS_LINT_FILES)
.pipe(sassLint({
config: './.sass-lint.yml'
}))
.pipe(sassLint.format());
}
function lintJavascript() {
return gulp.src(CONFIG.JS_FILES)
.pipe(eslint({
useEslintrc: true,
configFile: '.eslintrc'
}))
.pipe(eslint.format());
}
gulp.task('lint:sass', function () {
return lintSass()
.pipe(sassLint.failOnError());
});
gulp.task('lint:javascript', function () {
return lintJavascript()
.pipe(eslint.failAfterError());
});
gulp.task('lint:graceful:sass', lintSass);
gulp.task('lint:graceful:javascript', lintJavascript);
+56
View File
@@ -0,0 +1,56 @@
'use strict';
var fs = require('fs');
var gulp = require('gulp');
var Parker = require('parker/lib/Parker');
var prettyJSON = require('prettyjson');
var sass = require('gulp-sass');
var plumber = require('gulp-plumber');
var sourcemaps = require('gulp-sourcemaps');
var sassLint = require('gulp-sass-lint');
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer');
var CONFIG = require('../config.js');
// Compiles Sass files into CSS
gulp.task('sass', gulp.series('sass:foundation', 'sass:docs'));
// Prepare dependencies
gulp.task('sass:deps', function() {
return gulp.src(CONFIG.SASS_DEPS_FILES)
.pipe(gulp.dest('_vendor'));
});
// Compiles Foundation Sass
gulp.task('sass:foundation', gulp.series('sass:deps', function() {
return gulp.src(['assets/*'])
.pipe(sourcemaps.init())
.pipe(plumber())
.pipe(sass().on('error', sass.logError))
.pipe(postcss([autoprefixer()])) // uses ".browserslistrc"
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/css'));
}));
// Compiles docs Sass (includes Foundation code also)
gulp.task('sass:docs', gulp.series('sass:deps', function() {
return gulp.src('docs/assets/scss/docs.scss')
.pipe(sourcemaps.init())
.pipe(sass({
includePaths: CONFIG.SASS_DOC_PATHS
}).on('error', sass.logError))
.pipe(postcss([autoprefixer()])) // uses ".browserslistrc"
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('_build/assets/css'));
}));
// Audits CSS filesize, selector count, specificity, etc.
gulp.task('sass:audit', gulp.series('sass:foundation', function(done) {
fs.readFile('./_build/assets/css/foundation.css', function(err, data) {
var parker = new Parker(require('parker/metrics/All'));
var results = parker.run(data.toString());
console.log(prettyJSON.render(results));
done();
});
}));
+40
View File
@@ -0,0 +1,40 @@
var gulp = require('gulp');
var browser = require('browser-sync');
var concat = require('gulp-concat');
var babel = require('gulp-babel');
var onBabelError = require('./babel-error.js');
var rimraf = require('rimraf').sync;
var CONFIG = require('../config.js');
// Runs unit tests
gulp.task('test', gulp.series('sass:foundation', 'test:transpile-js', gulp.parallel('watch', 'test:watch')));
gulp.task('test:watch', function () {
browser.init({
server: {
baseDir: 'test/visual',
directory: true,
routes: {
"/assets": "_build/assets",
"/motion-ui": "node_modules/motion-ui"
}
}
});
gulp.watch(['test/visual/**/*'], gulp.series('test:reload'));
});
gulp.task('test:reload', function(done) {
browser.reload();
done();
});
gulp.task('test:transpile-js', gulp.series('javascript:foundation', 'javascript:deps', function () {
rimraf('test/javascript/js-tests.js');
return gulp.src(CONFIG.TEST_JS_FILES)
.pipe(babel()
.on('error', onBabelError))
.pipe(concat('js-tests.js'))
.pipe(gulp.dest('test/javascript'))
}));