release v1.0.0 #14
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
 | 
			
		||||
node_modules/
 | 
			
		||||
							
								
								
									
										295
									
								
								gulpfile.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										295
									
								
								gulpfile.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,295 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Settings
 | 
			
		||||
 * Turn on/off build features
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var settings = {
 | 
			
		||||
	clean: true,
 | 
			
		||||
	scripts: true,
 | 
			
		||||
	polyfills: true,
 | 
			
		||||
	styles: true,
 | 
			
		||||
	svgs: true,
 | 
			
		||||
	copy: true,
 | 
			
		||||
	reload: true
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Paths to project folders
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var paths = {
 | 
			
		||||
	input: 'src/',
 | 
			
		||||
	output: 'dist/',
 | 
			
		||||
	scripts: {
 | 
			
		||||
		input: 'src/js/*',
 | 
			
		||||
		polyfills: '.polyfill.js',
 | 
			
		||||
		output: 'dist/js/'
 | 
			
		||||
	},
 | 
			
		||||
	styles: {
 | 
			
		||||
		input: 'src/sass/**/*.{scss,sass}',
 | 
			
		||||
		output: 'dist/css/'
 | 
			
		||||
	},
 | 
			
		||||
	svgs: {
 | 
			
		||||
		input: 'src/svg/*.svg',
 | 
			
		||||
		output: 'dist/svg/'
 | 
			
		||||
	},
 | 
			
		||||
	copy: {
 | 
			
		||||
		input: 'src/copy/**/*',
 | 
			
		||||
		output: 'dist/'
 | 
			
		||||
	},
 | 
			
		||||
	reload: './dist/'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Template for banner to add to file headers
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
var banner = {
 | 
			
		||||
	main:
 | 
			
		||||
		'/*!' +
 | 
			
		||||
		' <%= package.name %> v<%= package.version %>' +
 | 
			
		||||
		' | (c) ' + new Date().getFullYear() + ' <%= package.author.name %>' +
 | 
			
		||||
		' | <%= package.license %> License' +
 | 
			
		||||
		' | <%= package.repository.url %>' +
 | 
			
		||||
		' */\n'
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Gulp Packages
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// General
 | 
			
		||||
var {gulp, src, dest, watch, series, parallel} = require('gulp');
 | 
			
		||||
var del = require('del');
 | 
			
		||||
var flatmap = require('gulp-flatmap');
 | 
			
		||||
var lazypipe = require('lazypipe');
 | 
			
		||||
var rename = require('gulp-rename');
 | 
			
		||||
var header = require('gulp-header');
 | 
			
		||||
var package = require('./package.json');
 | 
			
		||||
 | 
			
		||||
// Scripts
 | 
			
		||||
var jshint = require('gulp-jshint');
 | 
			
		||||
var stylish = require('jshint-stylish');
 | 
			
		||||
var concat = require('gulp-concat');
 | 
			
		||||
var uglify = require('gulp-terser');
 | 
			
		||||
var optimizejs = require('gulp-optimize-js');
 | 
			
		||||
 | 
			
		||||
// Styles
 | 
			
		||||
var sass = require('gulp-sass');
 | 
			
		||||
var postcss = require('gulp-postcss');
 | 
			
		||||
var prefix = require('autoprefixer');
 | 
			
		||||
var minify = require('cssnano');
 | 
			
		||||
 | 
			
		||||
// SVGs
 | 
			
		||||
var svgmin = require('gulp-svgmin');
 | 
			
		||||
 | 
			
		||||
// BrowserSync
 | 
			
		||||
var browserSync = require('browser-sync');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Gulp Tasks
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// Remove pre-existing content from output folders
 | 
			
		||||
var cleanDist = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.clean) return done();
 | 
			
		||||
 | 
			
		||||
	// Clean the dist folder
 | 
			
		||||
	del.sync([
 | 
			
		||||
		paths.output
 | 
			
		||||
	]);
 | 
			
		||||
 | 
			
		||||
	// Signal completion
 | 
			
		||||
	return done();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Repeated JavaScript tasks
 | 
			
		||||
var jsTasks = lazypipe()
 | 
			
		||||
	.pipe(header, banner.main, {package: package})
 | 
			
		||||
	.pipe(optimizejs)
 | 
			
		||||
	.pipe(dest, paths.scripts.output)
 | 
			
		||||
	.pipe(rename, {suffix: '.min'})
 | 
			
		||||
	.pipe(uglify)
 | 
			
		||||
	.pipe(optimizejs)
 | 
			
		||||
	.pipe(header, banner.main, {package: package})
 | 
			
		||||
	.pipe(dest, paths.scripts.output);
 | 
			
		||||
 | 
			
		||||
// Lint, minify, and concatenate scripts
 | 
			
		||||
var buildScripts = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.scripts) return done();
 | 
			
		||||
 | 
			
		||||
	// Run tasks on script files
 | 
			
		||||
	return src(paths.scripts.input)
 | 
			
		||||
		.pipe(flatmap(function(stream, file) {
 | 
			
		||||
 | 
			
		||||
			// If the file is a directory
 | 
			
		||||
			if (file.isDirectory()) {
 | 
			
		||||
 | 
			
		||||
				// Setup a suffix variable
 | 
			
		||||
				var suffix = '';
 | 
			
		||||
 | 
			
		||||
				// If separate polyfill files enabled
 | 
			
		||||
				if (settings.polyfills) {
 | 
			
		||||
 | 
			
		||||
					// Update the suffix
 | 
			
		||||
					suffix = '.polyfills';
 | 
			
		||||
 | 
			
		||||
					// Grab files that aren't polyfills, concatenate them, and process them
 | 
			
		||||
					src([file.path + '/*.js', '!' + file.path + '/*' + paths.scripts.polyfills])
 | 
			
		||||
						.pipe(concat(file.relative + '.js'))
 | 
			
		||||
						.pipe(jsTasks());
 | 
			
		||||
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// Grab all files and concatenate them
 | 
			
		||||
				// If separate polyfills enabled, this will have .polyfills in the filename
 | 
			
		||||
				src(file.path + '/*.js')
 | 
			
		||||
					.pipe(concat(file.relative + suffix + '.js'))
 | 
			
		||||
					.pipe(jsTasks());
 | 
			
		||||
 | 
			
		||||
				return stream;
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Otherwise, process the file
 | 
			
		||||
			return stream.pipe(jsTasks());
 | 
			
		||||
 | 
			
		||||
		}));
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Lint scripts
 | 
			
		||||
var lintScripts = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.scripts) return done();
 | 
			
		||||
 | 
			
		||||
	// Lint scripts
 | 
			
		||||
	return src(paths.scripts.input)
 | 
			
		||||
		.pipe(jshint())
 | 
			
		||||
		.pipe(jshint.reporter('jshint-stylish'));
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Process, lint, and minify Sass files
 | 
			
		||||
var buildStyles = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.styles) return done();
 | 
			
		||||
 | 
			
		||||
	// Run tasks on all Sass files
 | 
			
		||||
	return src(paths.styles.input)
 | 
			
		||||
		.pipe(sass({
 | 
			
		||||
			outputStyle: 'expanded',
 | 
			
		||||
			sourceComments: true
 | 
			
		||||
		}))
 | 
			
		||||
		.pipe(postcss([
 | 
			
		||||
			prefix({
 | 
			
		||||
				cascade: true,
 | 
			
		||||
				remove: true
 | 
			
		||||
			})
 | 
			
		||||
		]))
 | 
			
		||||
		.pipe(header(banner.main, {package: package}))
 | 
			
		||||
		.pipe(dest(paths.styles.output))
 | 
			
		||||
		.pipe(rename({suffix: '.min'}))
 | 
			
		||||
		.pipe(postcss([
 | 
			
		||||
			minify({
 | 
			
		||||
				discardComments: {
 | 
			
		||||
					removeAll: true
 | 
			
		||||
				}
 | 
			
		||||
			})
 | 
			
		||||
		]))
 | 
			
		||||
		.pipe(dest(paths.styles.output));
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Optimize SVG files
 | 
			
		||||
var buildSVGs = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.svgs) return done();
 | 
			
		||||
 | 
			
		||||
	// Optimize SVG files
 | 
			
		||||
	return src(paths.svgs.input)
 | 
			
		||||
		.pipe(svgmin())
 | 
			
		||||
		.pipe(dest(paths.svgs.output));
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Copy static files into output folder
 | 
			
		||||
var copyFiles = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.copy) return done();
 | 
			
		||||
 | 
			
		||||
	// Copy static files
 | 
			
		||||
	return src(paths.copy.input)
 | 
			
		||||
		.pipe(dest(paths.copy.output));
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Watch for changes to the src directory
 | 
			
		||||
var startServer = function (done) {
 | 
			
		||||
 | 
			
		||||
	// Make sure this feature is activated before running
 | 
			
		||||
	if (!settings.reload) return done();
 | 
			
		||||
 | 
			
		||||
	// Initialize BrowserSync
 | 
			
		||||
	browserSync.init({
 | 
			
		||||
		server: {
 | 
			
		||||
			baseDir: paths.reload
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	// Signal completion
 | 
			
		||||
	done();
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Reload the browser when files change
 | 
			
		||||
var reloadBrowser = function (done) {
 | 
			
		||||
	if (!settings.reload) return done();
 | 
			
		||||
	browserSync.reload();
 | 
			
		||||
	done();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Watch for changes
 | 
			
		||||
var watchSource = function (done) {
 | 
			
		||||
	watch(paths.input, series(exports.default, reloadBrowser));
 | 
			
		||||
	done();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Export Tasks
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// Default task
 | 
			
		||||
// gulp
 | 
			
		||||
exports.default = series(
 | 
			
		||||
	cleanDist,
 | 
			
		||||
	parallel(
 | 
			
		||||
		buildScripts,
 | 
			
		||||
		lintScripts,
 | 
			
		||||
		buildStyles,
 | 
			
		||||
		buildSVGs,
 | 
			
		||||
		copyFiles
 | 
			
		||||
	)
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
// Watch and reload
 | 
			
		||||
// gulp watch
 | 
			
		||||
exports.watch = series(
 | 
			
		||||
	exports.default,
 | 
			
		||||
	startServer,
 | 
			
		||||
	watchSource
 | 
			
		||||
);
 | 
			
		||||
							
								
								
									
										3453
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										3453
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										45
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "Meritkollen",
 | 
			
		||||
	"version": "1.0.0",
 | 
			
		||||
	"description": "Den enkla meritkalkylatorn",
 | 
			
		||||
	"main": "./dist/your-main-js-file.js",
 | 
			
		||||
	"author": {
 | 
			
		||||
		"name": "Felix Schulze",
 | 
			
		||||
		"url": "https://meritkollen.se"
 | 
			
		||||
	},
 | 
			
		||||
	"license": "AGPL-3.0",
 | 
			
		||||
	"repository": {
 | 
			
		||||
		"type": "git",
 | 
			
		||||
		"url": "https://github.com/thefeli73/meritkollen.git"
 | 
			
		||||
	},
 | 
			
		||||
	"boilerplate": {
 | 
			
		||||
		"version": "2.2.5",
 | 
			
		||||
		"author": "Chris Ferdinandi",
 | 
			
		||||
		"url": "https://gomakethings.com",
 | 
			
		||||
		"repo": "http://github.com/cferdinandi/gulp-boilerplate"
 | 
			
		||||
	},
 | 
			
		||||
	"browserslist": [
 | 
			
		||||
		"last 2 versions",
 | 
			
		||||
		"> 0.25%"
 | 
			
		||||
	],
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"autoprefixer": "9.6.1",
 | 
			
		||||
		"browser-sync": "2.26.7",
 | 
			
		||||
		"cssnano": "4.1.10",
 | 
			
		||||
		"del": "3.0.0",
 | 
			
		||||
		"gulp": "^4.0.2",
 | 
			
		||||
		"gulp-concat": "2.6.1",
 | 
			
		||||
		"gulp-flatmap": "1.0.2",
 | 
			
		||||
		"gulp-header": "2.0.5",
 | 
			
		||||
		"gulp-jshint": "2.1.0",
 | 
			
		||||
		"gulp-optimize-js": "1.1.0",
 | 
			
		||||
		"gulp-postcss": "8.0.0",
 | 
			
		||||
		"gulp-rename": "1.4.0",
 | 
			
		||||
		"gulp-sass": "4.0.2",
 | 
			
		||||
		"gulp-svgmin": "2.1.0",
 | 
			
		||||
		"gulp-terser": "1.1.7",
 | 
			
		||||
		"jshint": "2.9.6",
 | 
			
		||||
		"jshint-stylish": "2.2.1",
 | 
			
		||||
		"lazypipe": "1.0.1"
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user