Setup static site generator
This commit is contained in:
parent
fcff778e3d
commit
278a0c5f50
|
@ -0,0 +1,25 @@
|
|||
# EditorConfig helps developers define and maintain consistent
|
||||
# coding styles between different editors and IDEs
|
||||
# editorconfig.org
|
||||
|
||||
root = true
|
||||
|
||||
|
||||
[*]
|
||||
|
||||
# change these settings to your own preference
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
# we recommend you to keep these unchanged
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[{package,bower}.json]
|
||||
indent_style = space
|
||||
indent_size = 2
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"parser": "babel-eslint",
|
||||
"extends": "airbnb-base",
|
||||
"env": {
|
||||
"browser": true,
|
||||
"node": true,
|
||||
"mocha": true,
|
||||
"es6": true
|
||||
},
|
||||
"plugins": [
|
||||
"import"
|
||||
],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 6,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"arrow-body-style": [
|
||||
1,
|
||||
"as-needed"
|
||||
],
|
||||
"comma-dangle": [
|
||||
1,
|
||||
"only-multiline"
|
||||
],
|
||||
"import/imports-first": 0,
|
||||
"import/newline-after-import": 0,
|
||||
"import/no-extraneous-dependencies": 0,
|
||||
"import/no-named-as-default": 0,
|
||||
"import/no-unresolved": 2,
|
||||
"import/prefer-default-export": 0,
|
||||
"indent": [
|
||||
2,
|
||||
2, {
|
||||
"SwitchCase": 1
|
||||
}
|
||||
],
|
||||
"max-len": 0,
|
||||
"newline-per-chained-call": 0,
|
||||
"no-console": 1,
|
||||
"no-use-before-define": 0,
|
||||
"prefer-template": 2,
|
||||
"require-yield": 0
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
* text=auto
|
|
@ -0,0 +1,7 @@
|
|||
node_modules
|
||||
dist
|
||||
.tmp
|
||||
.sass-cache
|
||||
bower_components
|
||||
test/bower_components
|
||||
npm-debug.log
|
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"extends": "stylelint-config-standard",
|
||||
"plugins": [
|
||||
"stylelint-order",
|
||||
"stylelint-scss"
|
||||
],
|
||||
"rules": {
|
||||
"color-hex-case": "lower",
|
||||
"string-quotes": "single",
|
||||
"font-family-name-quotes": "always-where-recommended",
|
||||
"number-leading-zero": "never",
|
||||
"at-rule-empty-line-before": ["always", {
|
||||
"ignore": [
|
||||
"after-comment",
|
||||
"inside-block",
|
||||
"blockless-after-same-name-blockless",
|
||||
"blockless-after-blockless"
|
||||
]
|
||||
}],
|
||||
"selector-pseudo-class-no-unknown": [
|
||||
true, {
|
||||
"ignorePseudoClasses": [
|
||||
"global"
|
||||
]
|
||||
}
|
||||
],
|
||||
"indentation": 2,
|
||||
"order/declaration-block-order": [
|
||||
"dollar-variables",
|
||||
{
|
||||
type: "at-rule",
|
||||
name: "include"
|
||||
},
|
||||
{
|
||||
type: "at-rule",
|
||||
name: "extend"
|
||||
},
|
||||
"declarations",
|
||||
"rules",
|
||||
"at-rules"
|
||||
],
|
||||
"order/declaration-block-properties-specified-order": [
|
||||
[
|
||||
"position",
|
||||
"top",
|
||||
"right",
|
||||
"bottom",
|
||||
"left",
|
||||
"z-index",
|
||||
"display",
|
||||
"align-content",
|
||||
"align-items",
|
||||
"align-self",
|
||||
"flex",
|
||||
"flex-basis",
|
||||
"flex-direction",
|
||||
"flex-flow",
|
||||
"flex-grow",
|
||||
"flex-shrink",
|
||||
"flex-wrap",
|
||||
"justify-content",
|
||||
"order",
|
||||
"float",
|
||||
"width",
|
||||
"height",
|
||||
"max-width",
|
||||
"max-height",
|
||||
"min-width",
|
||||
"min-height",
|
||||
"margin",
|
||||
"margin-top",
|
||||
"margin-right",
|
||||
"margin-bottom",
|
||||
"margin-left",
|
||||
"margin-collapse",
|
||||
"margin-top-collapse",
|
||||
"margin-right-collapse",
|
||||
"margin-bottom-collapse",
|
||||
"margin-left-collapse",
|
||||
"padding",
|
||||
"padding-top",
|
||||
"padding-right",
|
||||
"padding-bottom",
|
||||
"padding-left",
|
||||
"overflow",
|
||||
"overflow-x",
|
||||
"overflow-y",
|
||||
"clip",
|
||||
"clear",
|
||||
"font",
|
||||
"font-family",
|
||||
"font-size",
|
||||
"font-smoothing",
|
||||
"osx-font-smoothing",
|
||||
"font-style",
|
||||
"font-weight",
|
||||
"hyphens",
|
||||
"src",
|
||||
"line-height",
|
||||
"letter-spacing",
|
||||
"word-spacing",
|
||||
"color",
|
||||
"text-align",
|
||||
"text-decoration",
|
||||
"text-indent",
|
||||
"text-overflow",
|
||||
"text-rendering",
|
||||
"text-size-adjust",
|
||||
"text-shadow",
|
||||
"text-transform",
|
||||
"word-break",
|
||||
"word-wrap",
|
||||
"white-space",
|
||||
"vertical-align",
|
||||
"list-style",
|
||||
"list-style-type",
|
||||
"list-style-position",
|
||||
"list-style-image",
|
||||
"pointer-events",
|
||||
"cursor",
|
||||
"background",
|
||||
"background-attachment",
|
||||
"background-clip",
|
||||
"background-color",
|
||||
"background-image",
|
||||
"background-position",
|
||||
"background-repeat",
|
||||
"background-size",
|
||||
"border",
|
||||
"border-collapse",
|
||||
"border-top",
|
||||
"border-right",
|
||||
"border-bottom",
|
||||
"border-left",
|
||||
"border-color",
|
||||
"border-image",
|
||||
"border-top-color",
|
||||
"border-right-color",
|
||||
"border-bottom-color",
|
||||
"border-left-color",
|
||||
"border-spacing",
|
||||
"border-style",
|
||||
"border-top-style",
|
||||
"border-right-style",
|
||||
"border-bottom-style",
|
||||
"border-left-style",
|
||||
"border-width",
|
||||
"border-top-width",
|
||||
"border-right-width",
|
||||
"border-bottom-width",
|
||||
"border-left-width",
|
||||
"border-radius",
|
||||
"border-top-right-radius",
|
||||
"border-bottom-right-radius",
|
||||
"border-bottom-left-radius",
|
||||
"border-top-left-radius",
|
||||
"border-radius-topright",
|
||||
"border-radius-bottomright",
|
||||
"border-radius-bottomleft",
|
||||
"border-radius-topleft",
|
||||
"content",
|
||||
"quotes",
|
||||
"outline",
|
||||
"outline-offset",
|
||||
"outline-width",
|
||||
"outline-style",
|
||||
"outline-color",
|
||||
"opacity",
|
||||
"filter",
|
||||
"visibility",
|
||||
"size",
|
||||
"zoom",
|
||||
"transform",
|
||||
"box-align",
|
||||
"box-flex",
|
||||
"box-orient",
|
||||
"box-pack",
|
||||
"box-shadow",
|
||||
"box-sizing",
|
||||
"table-layout",
|
||||
"animation",
|
||||
"animation-delay",
|
||||
"animation-duration",
|
||||
"animation-iteration-count",
|
||||
"animation-name",
|
||||
"animation-play-state",
|
||||
"animation-timing-function",
|
||||
"animation-fill-mode",
|
||||
"transition",
|
||||
"transition-delay",
|
||||
"transition-duration",
|
||||
"transition-property",
|
||||
"transition-timing-function",
|
||||
"backface-visibility",
|
||||
"resize",
|
||||
"appearance",
|
||||
"user-select",
|
||||
"interpolation-mode",
|
||||
"direction",
|
||||
"marks",
|
||||
"page",
|
||||
"set-link-source",
|
||||
"unicode-bidi",
|
||||
"speak"
|
||||
],
|
||||
{ unspecified: "bottomAlphabetical" }
|
||||
]
|
||||
}
|
||||
}
|
|
@ -14,4 +14,8 @@ You can find out more by watching the video below and joining the upcoming meetu
|
|||
|
||||
Is simply somewhere to keep the #ArtProject website for now and create bounties for any and all of the technical work we will require in order to make this the single greatest and most mind-boggling installation the crypto-world has ever seen!
|
||||
|
||||
<<<<<<< HEAD
|
||||
Join us - the revolution will rendered artistically!
|
||||
=======
|
||||
Join us - the revolution will rendered artistically!
|
||||
>>>>>>> Setup static site generator
|
||||
|
|
|
@ -0,0 +1,256 @@
|
|||
import gulp from 'gulp';
|
||||
import gulpLoadPlugins from 'gulp-load-plugins';
|
||||
import browserSync from 'browser-sync';
|
||||
import del from 'del';
|
||||
import sassModuleImporter from 'sass-module-importer';
|
||||
import browserify from 'browserify';
|
||||
import babelify from 'babelify';
|
||||
import rollupify from 'rollupify';
|
||||
import source from 'vinyl-source-stream';
|
||||
import buffer from 'vinyl-buffer';
|
||||
|
||||
const $ = gulpLoadPlugins();
|
||||
const reload = browserSync.reload;
|
||||
|
||||
const packageJSON = require('./package.json');
|
||||
const dependenciesObject = (packageJSON && packageJSON.dependencies) || {};
|
||||
const vendorDeps = Object.keys(dependenciesObject).filter(name => !/\.s?css|\.sass/.test(name));
|
||||
|
||||
function lint(files) {
|
||||
return () => {
|
||||
return gulp.src(files)
|
||||
.pipe($.plumber({
|
||||
errorHandler(err) {
|
||||
console.log(err); // eslint-disable-line no-console
|
||||
this.emit('end');
|
||||
}
|
||||
}))
|
||||
.pipe($.eslint())
|
||||
.pipe($.eslint.format())
|
||||
.pipe($.if(!browserSync.active, $.eslint.failAfterError()));
|
||||
};
|
||||
}
|
||||
|
||||
gulp.task('styles', ['styles:lint'], () => {
|
||||
return gulp.src('./src/styles/**/*.scss')
|
||||
.pipe($.plumber({
|
||||
errorHandler(err) {
|
||||
console.log(err); // eslint-disable-line no-console
|
||||
this.emit('end');
|
||||
}
|
||||
}))
|
||||
.pipe($.sass({
|
||||
importer: sassModuleImporter()
|
||||
}))
|
||||
.pipe($.sourcemaps.init())
|
||||
.pipe($.autoprefixer({
|
||||
browsers: ['last 1 version']
|
||||
}))
|
||||
.pipe($.sourcemaps.write())
|
||||
.pipe(gulp.dest('./dist/css'))
|
||||
.pipe(reload({
|
||||
stream: true
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('styles:lint', () => {
|
||||
return gulp.src('./src/styles/**/*.scss')
|
||||
.pipe($.stylelint({
|
||||
reporters: [{
|
||||
formatter: 'string',
|
||||
console: true
|
||||
}]
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('lint', lint('./src/scripts/**/*.js'));
|
||||
gulp.task('lint:test', lint('test/spec/**/*.js'));
|
||||
|
||||
gulp.task('scripts', ['scripts:vendor'], () => {
|
||||
return browserify({
|
||||
entries: './src/scripts/main.js',
|
||||
debug: true,
|
||||
})
|
||||
.external(vendorDeps)
|
||||
.transform(babelify)
|
||||
.transform(rollupify)
|
||||
.bundle()
|
||||
.on('error', $.notify.onError({
|
||||
title: 'Failed running browserify',
|
||||
message: 'Error: <%= error.message %>'
|
||||
}))
|
||||
.pipe(source('main.js'))
|
||||
.pipe(buffer())
|
||||
.pipe($.sourcemaps.init({
|
||||
loadMaps: true
|
||||
}))
|
||||
.pipe($.sourcemaps.write())
|
||||
.pipe(gulp.dest('./dist/js'))
|
||||
.pipe(reload({
|
||||
stream: true,
|
||||
once: true
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('scripts:vendor', () => (
|
||||
browserify()
|
||||
.require(vendorDeps)
|
||||
.transform(rollupify)
|
||||
.bundle()
|
||||
.on('error', $.notify.onError({
|
||||
title: 'Failed running browserify',
|
||||
message: 'Error: <%= error.message %>'
|
||||
}))
|
||||
.pipe(source('vendor.js'))
|
||||
.pipe(buffer())
|
||||
.pipe(gulp.dest('./dist/js'))
|
||||
));
|
||||
|
||||
gulp.task('hbs', () => {
|
||||
return gulp.src('./src/hbs/*.hbs')
|
||||
.pipe($.plumber({
|
||||
errorHandler(err) {
|
||||
console.log(err); // eslint-disable-line no-console
|
||||
this.emit('end');
|
||||
}
|
||||
}))
|
||||
.pipe($.frontMatter({
|
||||
property: 'data',
|
||||
remove: true
|
||||
}))
|
||||
.pipe(
|
||||
$.hb({
|
||||
bustCache: true,
|
||||
helpers: [
|
||||
'./src/hbs/helpers/repeat.js',
|
||||
'./node_modules/handlebars-helpers/lib/fs.js',
|
||||
'./node_modules/handlebars-helpers/lib/comparison.js',
|
||||
'./node_modules/handlebars-helpers/lib/collection.js',
|
||||
'./node_modules/handlebars-helpers/lib/string.js',
|
||||
'./node_modules/handlebars-helpers/lib/math.js',
|
||||
'./node_modules/handlebars-layouts'
|
||||
]
|
||||
})
|
||||
.partials('./src/hbs/layouts/*.hbs')
|
||||
.partials('./src/hbs/partials/**/*.hbs')
|
||||
)
|
||||
.pipe($.rename({
|
||||
extname: '.html',
|
||||
}))
|
||||
.pipe(gulp.dest('./dist'))
|
||||
.pipe(reload({
|
||||
stream: true,
|
||||
once: true
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('html', ['hbs', 'styles', 'scripts'], () => {
|
||||
return gulp.src('./dist/*.html')
|
||||
.pipe($.useref())
|
||||
.pipe($.if('*.js', $.uglify()))
|
||||
.pipe($.if('*.css', $.cleanCss({
|
||||
compatibility: '*'
|
||||
})))
|
||||
.pipe($.if('*.html', $.htmlmin({
|
||||
collapseWhitespace: true,
|
||||
conditionals: true
|
||||
})))
|
||||
.pipe(gulp.dest('./dist'));
|
||||
});
|
||||
|
||||
gulp.task('images', () => {
|
||||
return gulp.src('./src/images/**/*.{png,jpg,jpeg,gif,svg}')
|
||||
.pipe($.plumber())
|
||||
.pipe($.if($.if.isFile, $.cache($.imagemin({
|
||||
progressive: true,
|
||||
interlaced: true,
|
||||
// don't remove IDs from SVGs, they are often used
|
||||
// as hooks for embedding and styling
|
||||
svgoPlugins: [{
|
||||
cleanupIDs: false,
|
||||
removeUselessDefs: true,
|
||||
convertStyleToAttrs: true
|
||||
}]
|
||||
}))
|
||||
.on('error', (err) => {
|
||||
console.log(err); // eslint-disable-line no-console
|
||||
this.end();
|
||||
})))
|
||||
.pipe(gulp.dest('dist/images'));
|
||||
});
|
||||
|
||||
gulp.task('fonts', () => {
|
||||
return gulp.src(['./src/fonts/*.{eot,svg,ttf,woff,woff2}'])
|
||||
.pipe(gulp.dest('./dist/fonts'));
|
||||
});
|
||||
|
||||
gulp.task('extras', () => {
|
||||
return gulp.src([
|
||||
'./src/*.*',
|
||||
'!./src/.DS_Store',
|
||||
'!src/*.html'
|
||||
], {
|
||||
dot: true
|
||||
}).pipe(gulp.dest('dist'));
|
||||
});
|
||||
|
||||
gulp.task('clean', () => {
|
||||
return del.sync('./dist');
|
||||
});
|
||||
|
||||
gulp.task('serve', ['clean', 'hbs', 'styles', 'lint', 'scripts'], () => {
|
||||
browserSync({
|
||||
notify: false,
|
||||
port: 9000,
|
||||
server: {
|
||||
baseDir: './dist',
|
||||
routes: {
|
||||
'/images': 'src/images',
|
||||
'/fonts': 'src/fonts'
|
||||
},
|
||||
directory: true
|
||||
}
|
||||
});
|
||||
|
||||
$.watch([
|
||||
'./src/hbs/partials/**/*.hbs',
|
||||
'./src/hbs/layouts/*.hbs',
|
||||
'./src/hbs/*.html'
|
||||
], () => {
|
||||
gulp.start('hbs');
|
||||
});
|
||||
|
||||
$.watch('./src/scripts/**/*.js', () => {
|
||||
gulp.start('scripts');
|
||||
gulp.start('lint');
|
||||
});
|
||||
|
||||
$.watch('./src/styles/**/*.scss', () => {
|
||||
gulp.start('styles');
|
||||
});
|
||||
|
||||
gulp.watch('./src/images/**/**.{png,jpg,jpeg,gif,svg}').on('change', reload);
|
||||
});
|
||||
|
||||
gulp.task('test', () => {
|
||||
gulp.src('./test/**/*.js', { read: false })
|
||||
.pipe($.mocha());
|
||||
});
|
||||
|
||||
gulp.task('test:watch', ['lint:test', 'test'], () => {
|
||||
$.watch('./test/spec/**/*.js', () => {
|
||||
gulp.start('lint:test');
|
||||
gulp.start('test');
|
||||
});
|
||||
});
|
||||
|
||||
gulp.task('build', ['clean', 'lint', 'html', 'fonts', 'extras', 'images'], () => {
|
||||
return gulp.src('dist/**/*').pipe($.size({
|
||||
title: 'build',
|
||||
gzip: true
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('default', () => {
|
||||
gulp.start('serve');
|
||||
});
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"name": "static-site-starter",
|
||||
"description": "Starter for any static site that you want to build.",
|
||||
"version": "1.1.2",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"npm": ">=3"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "./node_modules/gulp/bin/gulp.js serve",
|
||||
"build": "./node_modules/gulp/bin/gulp.js build",
|
||||
"test": "./node_modules/gulp/bin/gulp.js test",
|
||||
"test:watch": "./node_modules/gulp/bin/gulp.js test:watch"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-core": "^5.5.6",
|
||||
"babel-eslint": "^6.1.2",
|
||||
"babel-preset-es2015": "^6.18.0",
|
||||
"babel-preset-stage-0": "^6.16.0",
|
||||
"babelify": "^7.3.0",
|
||||
"browser-sync": "^2.18.1",
|
||||
"browserify": "^13.1.1",
|
||||
"chai": "^3.5.0",
|
||||
"del": "^2.2.2",
|
||||
"eslint": "^3.10.2",
|
||||
"eslint-config-airbnb-base": "^10.0.1",
|
||||
"eslint-plugin-import": "^2.2.0",
|
||||
"gulp": "^3.9.1",
|
||||
"gulp-autoprefixer": "^3.1.1",
|
||||
"gulp-cache": "^0.4.5",
|
||||
"gulp-clean-css": "^2.0.13",
|
||||
"gulp-eslint": "^3.0.1",
|
||||
"gulp-front-matter": "^1.3.0",
|
||||
"gulp-hb": "^5.1.4",
|
||||
"gulp-htmlmin": "^3.0.0",
|
||||
"gulp-if": "^2.0.2",
|
||||
"gulp-imagemin": "^3.1.1",
|
||||
"gulp-load-plugins": "^1.4.0",
|
||||
"gulp-mocha": "^3.0.1",
|
||||
"gulp-notify": "^2.2.0",
|
||||
"gulp-plumber": "^1.1.0",
|
||||
"gulp-rename": "^1.2.2",
|
||||
"gulp-sass": "^2.3.2",
|
||||
"gulp-size": "^2.1.0",
|
||||
"gulp-sourcemaps": "^2.2.0",
|
||||
"gulp-stylelint": "^3.7.0",
|
||||
"gulp-uglify": "^2.0.0",
|
||||
"gulp-useref": "^3.1.2",
|
||||
"gulp-watch": "^4.3.10",
|
||||
"handlebars-helper-repeat": "^0.3.1",
|
||||
"handlebars-helpers": "^0.7.5",
|
||||
"handlebars-layouts": "^3.1.4",
|
||||
"opn": "^4.0.2",
|
||||
"rollupify": "^0.3.5",
|
||||
"sass-module-importer": "^1.4.0",
|
||||
"stylelint": "^7.8.0",
|
||||
"stylelint-config-standard": "^16.0.0",
|
||||
"stylelint-order": "^0.2.2",
|
||||
"stylelint-scss": "^1.4.1",
|
||||
"vinyl-buffer": "^1.0.0",
|
||||
"vinyl-source-stream": "^1.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"sanitize.css": "^4.1.0"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
var repeat = require('handlebars-helper-repeat');
|
||||
|
||||
module.exports.register = function(Handlebars, options) {
|
||||
Handlebars.registerHelper('repeat', repeat);
|
||||
};
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
title: 'Home'
|
||||
---
|
||||
|
||||
{{#extend "base"}}
|
||||
{{#content "main"}}
|
||||
|
||||
<div class="container">
|
||||
<h1>Hello World!</h1>
|
||||
</div>
|
||||
|
||||
{{/content}}
|
||||
{{/extend}}
|
|
@ -0,0 +1,46 @@
|
|||
<!doctype html>
|
||||
<html class="no-js">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>Static Site Starter | {{@file.data.title}}</title>
|
||||
|
||||
<!-- build:css css/main.css -->
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
<!-- endbuild -->
|
||||
</head>
|
||||
<body>
|
||||
<!--[if lt IE 10]>
|
||||
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
|
||||
<![endif]-->
|
||||
|
||||
<div class="wrapper">
|
||||
{{> header}}
|
||||
|
||||
<main class="main">
|
||||
{{{ block "main"}}}
|
||||
</main>
|
||||
|
||||
{{> footer}}
|
||||
</div>
|
||||
|
||||
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
|
||||
<!--<script>
|
||||
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
|
||||
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
|
||||
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
|
||||
e.src='https://www.google-analytics.com/analytics.js';
|
||||
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
|
||||
ga('create','UA-XXXXX-X');ga('send','pageview');
|
||||
</script>-->
|
||||
|
||||
<!-- build:js js/vendor.js -->
|
||||
<script src="/js/vendor.js" type="text/javascript"></script>
|
||||
<!-- endbuild -->
|
||||
|
||||
<!-- build:js js/main.js -->
|
||||
<script src="/js/main.js" type="text/javascript"></script>
|
||||
<!-- endbuild -->
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,3 @@
|
|||
<footer>
|
||||
This is footer
|
||||
</footer>
|
|
@ -0,0 +1,3 @@
|
|||
<header>
|
||||
This is header
|
||||
</header>
|
|
@ -0,0 +1,4 @@
|
|||
# robotstxt.org/
|
||||
|
||||
User-agent: *
|
||||
Disallow:
|
|
@ -0,0 +1 @@
|
|||
console.log('Hello World!'); // eslint-disable-line no-console
|
|
@ -0,0 +1,6 @@
|
|||
//=======================
|
||||
// Colors
|
||||
//=======================
|
||||
|
||||
$primary: #fff;
|
||||
$text: #000;
|
|
@ -0,0 +1,76 @@
|
|||
//=======================
|
||||
// Core styles
|
||||
//=======================
|
||||
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: $base-font-family;
|
||||
font-weight: 400;
|
||||
line-height: 1.33;
|
||||
color: $text;
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
height: auto;
|
||||
min-height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
//=======================
|
||||
// Styles reset
|
||||
//=======================
|
||||
|
||||
* {
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
a,
|
||||
input,
|
||||
button,
|
||||
textarea,
|
||||
select {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
|
||||
&:focus,
|
||||
&:active {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
font-family: $base-font-family;
|
||||
font-size: remify(14px);
|
||||
cursor: pointer;
|
||||
background: none;
|
||||
|
||||
&::-moz-focus-inner {
|
||||
border: 0;
|
||||
}
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
font-family: $base-font-family;
|
||||
box-sizing: border-box;
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
//=======================
|
||||
// Media queries
|
||||
//=======================
|
||||
|
||||
$xs: 480px;
|
||||
$sm: 768px;
|
||||
$md: 992px;
|
||||
$lg: 1200px;
|
||||
|
||||
$grid-gutter: 30px;
|
||||
$grid-columns: 12;
|
||||
|
||||
$container-sm: 720px;
|
||||
$container-md: 940px;
|
||||
$container-lg: 1140px;
|
||||
|
||||
$screen-xs: 'only screen and (min-width: 1px)';
|
||||
$screen-sm: 'only screen and (min-width: #{$sm})';
|
||||
$screen-md: 'only screen and (min-width: #{$md})';
|
||||
$screen-lg: 'only screen and (min-width: #{$lg})';
|
||||
|
||||
$screen-only-xs: 'only screen and (max-width: #{$xs - 1})';
|
||||
$screen-only-sm: 'only screen and (min-width: #{$xs}) and (max-width: #{$md - 1})';
|
||||
$screen-only-md: 'only screen and (min-width: #{$md}) and (max-width: #{$lg - 1})';
|
||||
$screen-only-lg: 'only screen and (min-width: #{$lg})';
|
||||
|
||||
//=======================
|
||||
// Typography
|
||||
//=======================
|
||||
|
||||
// HTML base font size is 16px
|
||||
$base-font-size: 16px;
|
||||
$base-font-family: Arial, sans-serif;
|
||||
|
||||
//=======================
|
||||
// Misc
|
||||
//=======================
|
||||
|
||||
$duration: .2s;
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
//=======================
|
||||
// Headings
|
||||
//=======================
|
||||
|
||||
@for $i from 0 through 6 {
|
||||
h#{$i} {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
// *** Styles ***
|
||||
@import 'sanitize.css';
|
||||
|
||||
@import './base/settings';
|
||||
@import './base/colors';
|
||||
|
||||
@import './utils/easings';
|
||||
@import './utils/animations';
|
||||
@import './utils/grid';
|
||||
@import './utils/ui';
|
||||
|
||||
@import './base/core';
|
||||
@import './base/typography';
|
|
@ -0,0 +1,39 @@
|
|||
@mixin fade-in($duration: .2s) {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transition: opacity $duration;
|
||||
}
|
||||
|
||||
@mixin fade-out($duration: .2s, $easing: linear) {
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity $duration $easing 0s, visibility 0s $easing $duration;
|
||||
}
|
||||
|
||||
@mixin slide-up-in($duration: .2s) {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
transform: translate3d(0, 0, 0);
|
||||
transition: opacity $duration, transform $duration;
|
||||
}
|
||||
|
||||
@mixin slide-down-out($pos, $duration: .2s, $easing: linear) {
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transform: translate3d(0, $pos, 0);
|
||||
transition: opacity $duration $easing 0s, transform $duration $easing 0s, visibility 0s $easing $duration;
|
||||
}
|
||||
|
||||
@mixin scale-up($duration: .2s) {
|
||||
visibility: visible;
|
||||
transform: scale(1);
|
||||
transform-origin: 50% 50%;
|
||||
transition: transform $duration;
|
||||
}
|
||||
|
||||
@mixin scale-down($duration: .2s, $easing: linear) {
|
||||
visibility: hidden;
|
||||
transform: scale(0);
|
||||
transform-origin: 50% 50%;
|
||||
transition: transform $duration $easing 0s, visibility 0s $easing $duration;
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
// Cubic
|
||||
$ease-in-cubic: cubic-bezier(.55, .055, .675, .19);
|
||||
$ease-out-cubic: cubic-bezier(.215, .61, .355, 1);
|
||||
$ease-in-out-cubic: cubic-bezier(.645, .045, .355, 1);
|
||||
|
||||
// Circ
|
||||
$ease-in-circ: cubic-bezier(.6, .04, .98, .335);
|
||||
$ease-out-circ: cubic-bezier(.075, .82, .165, 1);
|
||||
$ease-in-out-circ: cubic-bezier(.785, .135, .15, .86);
|
||||
|
||||
// Expo
|
||||
$ease-in-expo: cubic-bezier(.95, .05, .795, .035);
|
||||
$ease-out-expo: cubic-bezier(.19, 1, .22, 1);
|
||||
$ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
|
||||
|
||||
// Quad
|
||||
$ease-in-quad: cubic-bezier(.55, .085, .68, .53);
|
||||
$ease-out-quad: cubic-bezier(.25, .46, .45, .94);
|
||||
$ease-in-out-quad: cubic-bezier(.455, .03, .515, .955);
|
||||
|
||||
// Quart
|
||||
$ease-in-quart: cubic-bezier(.895, .03, .685, .22);
|
||||
$ease-out-quart: cubic-bezier(.165, .84, .44, 1);
|
||||
$ease-in-out-quart: cubic-bezier(.77, 0, .175, 1);
|
||||
|
||||
// Quint
|
||||
$ease-in-quint: cubic-bezier(.755, .05, .855, .06);
|
||||
$ease-out-quint: cubic-bezier(.23, 1, .32, 1);
|
||||
$ease-in-out-quint: cubic-bezier(.86, 0, .07, 1);
|
||||
|
||||
// Sine
|
||||
$ease-in-sine: cubic-bezier(.47, 0, .745, .715);
|
||||
$ease-out-sine: cubic-bezier(.39, .575, .565, 1);
|
||||
$ease-in-out-sine: cubic-bezier(.445, .05, .55, .95);
|
||||
|
||||
// Back
|
||||
$ease-in-back: cubic-bezier(.6, -.28, .735, .045);
|
||||
$ease-out-back: cubic-bezier(.175, .885, .32, 1.275);
|
||||
$ease-in-out-back: cubic-bezier(.68, -.55, .265, 1.55);
|
|
@ -0,0 +1,146 @@
|
|||
//=======================
|
||||
// Mixins
|
||||
//=======================
|
||||
|
||||
@mixin clearfix {
|
||||
&::before,
|
||||
&::after {
|
||||
display: table;
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&::after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin container {
|
||||
@include clearfix;
|
||||
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding: 0 $grid-gutter / 2;
|
||||
|
||||
@media #{$screen-sm} {
|
||||
width: $container-sm + $grid-gutter;
|
||||
}
|
||||
|
||||
@media #{$screen-md} {
|
||||
width: $container-md + $grid-gutter;
|
||||
}
|
||||
|
||||
@media #{$screen-lg} {
|
||||
width: $container-lg + $grid-gutter;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin row {
|
||||
@include clearfix;
|
||||
|
||||
margin-right: -($grid-gutter / 2);
|
||||
margin-left: -($grid-gutter / 2);
|
||||
}
|
||||
|
||||
@mixin row-gutter {
|
||||
margin-right: -($grid-gutter / 2);
|
||||
margin-left: -($grid-gutter / 2);
|
||||
}
|
||||
|
||||
@mixin row-flex {
|
||||
@include row-gutter;
|
||||
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
}
|
||||
|
||||
@mixin column($size) {
|
||||
float: left;
|
||||
width: ($size * 100% / $grid-columns);
|
||||
min-height: 1px;
|
||||
padding-right: $grid-gutter / 2;
|
||||
padding-left: $grid-gutter / 2;
|
||||
}
|
||||
|
||||
@mixin column-no-float($size) {
|
||||
width: ($size * 100% / $grid-columns);
|
||||
padding-right: $grid-gutter / 2;
|
||||
padding-left: $grid-gutter / 2;
|
||||
}
|
||||
|
||||
@mixin column-flex($size) {
|
||||
flex: 0 0 ($size * 100% / $grid-columns);
|
||||
max-width: ($size * 100% / $grid-columns);
|
||||
padding-right: $grid-gutter / 2;
|
||||
padding-left: $grid-gutter / 2;
|
||||
}
|
||||
|
||||
@mixin column-offset($size, $dir: 'right') {
|
||||
@if $dir == 'left' {
|
||||
padding-left: calc(#{($size * 100% / $grid-columns)} + #{($grid-gutter / 2)});
|
||||
}
|
||||
@else if $dir == 'right' {
|
||||
padding-right: calc(#{($size * 100% / $grid-columns)} + #{($grid-gutter / 2)});
|
||||
}
|
||||
}
|
||||
|
||||
@mixin make-columns-grid($quantity) {
|
||||
@for $i from 1 through $quantity {
|
||||
.col-xs-#{$i},
|
||||
.col-sm-#{$i},
|
||||
.col-md-#{$i},
|
||||
.col-lg-#{$i} {
|
||||
@extend %col;
|
||||
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin generate-columns($quantity, $prefix) {
|
||||
@for $i from 1 through $quantity {
|
||||
.col-#{$prefix}-#{$i} {
|
||||
width: ($i * 100% / $quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin generate-columns-media($breakpoint, $prefix) {
|
||||
@media #{$screen-sm} {
|
||||
@include generate-columns(12, $prefix);
|
||||
|
||||
.container {
|
||||
width: $container-sm + $grid-gutter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================
|
||||
// Placeholders
|
||||
//=======================
|
||||
|
||||
%clearfix {
|
||||
@include clearfix;
|
||||
}
|
||||
|
||||
%row {
|
||||
@extend %clearfix;
|
||||
|
||||
margin-right: -($grid-gutter / 2);
|
||||
margin-left: -($grid-gutter / 2);
|
||||
}
|
||||
|
||||
%col {
|
||||
float: left;
|
||||
padding-right: $grid-gutter / 2;
|
||||
padding-left: $grid-gutter / 2;
|
||||
}
|
||||
|
||||
%container-fluid {
|
||||
@include clearfix;
|
||||
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
%container {
|
||||
@include container;
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
//=======================
|
||||
// Form fields
|
||||
//=======================
|
||||
|
||||
@mixin placeholder {
|
||||
$placeholders: ':-webkit-input' ':-moz' '-moz' '-ms-input';
|
||||
|
||||
@each $placeholder in $placeholders {
|
||||
&:#{$placeholder}-placeholder {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//=======================
|
||||
// Typography
|
||||
//=======================
|
||||
|
||||
@function remify($px) {
|
||||
@return ($px / $base-font-size) * 1rem;
|
||||
}
|
||||
|
||||
%list-reset {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
//=======================
|
||||
// Scaling
|
||||
//=======================
|
||||
|
||||
@function calc-vw($size, $base-size) {
|
||||
@return ($size / $base-size) * 100 * 1vw;
|
||||
}
|
||||
|
||||
@function calc-vh($size, $base-size) {
|
||||
@return ($size / $base-size) * 100 * 1vh;
|
||||
}
|
||||
|
||||
@function calc-vm($size, $base-size) {
|
||||
@return ($size / $base-size) * 100 * 1vm;
|
||||
}
|
||||
|
||||
@function calc-vmin($size, $base-size) {
|
||||
@return ($size / $base-size) * 100 * 1vmin;
|
||||
}
|
||||
|
||||
@function calc-vmax($size, $base-size) {
|
||||
@return ($size / $base-size) * 100 * 1vmax;
|
||||
}
|
||||
|
||||
// Maintain full page height on mobile device browsers
|
||||
// using viewport height unit.
|
||||
@mixin get-fixed-vh($prop, $size, $offset: 0) {
|
||||
#{$prop}: calc(#{$size * 1vh} - #{$offset});
|
||||
|
||||
@media screen and (max-device-aspect-ratio: 3 / 4) {
|
||||
#{$prop}: calc(#{$size * 1vw * 1.333} - #{$offset});
|
||||
}
|
||||
|
||||
@media screen and (max-device-aspect-ratio: 2 / 3) {
|
||||
#{$prop}: calc(#{$size * 1vw * 1.5} - #{$offset});
|
||||
}
|
||||
|
||||
@media screen and (max-device-aspect-ratio: 10 / 16) {
|
||||
#{$prop}: calc(#{$size * 1vw * 1.6} - #{$offset});
|
||||
}
|
||||
|
||||
@media screen and (max-device-aspect-ratio: 9 / 16) {
|
||||
#{$prop}: calc(#{$size * 1vw * 1.778} - #{$offset});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import { assert } from 'chai';
|
||||
|
||||
describe('Give it some context', () => {
|
||||
describe('maybe a bit more context here', () => {
|
||||
it('should run here few assertions', () => {
|
||||
assert.isOk(true);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue