initial commit
This commit is contained in:
commit
7d3c956806
38 changed files with 31353 additions and 0 deletions
5
.babelrc
Normal file
5
.babelrc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
["@babel/preset-env"]
|
||||||
|
]
|
||||||
|
}
|
30
.eslintrc
Normal file
30
.eslintrc
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"extends": ["airbnb", "prettier"],
|
||||||
|
"env": {
|
||||||
|
"node": true,
|
||||||
|
"jasmine": true,
|
||||||
|
"jquery": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"no-use-before-define": 0,
|
||||||
|
"func-names": 0,
|
||||||
|
"prefer-arrow-callback": 0,
|
||||||
|
"no-var": 0,
|
||||||
|
"max-len": 0,
|
||||||
|
"guard-for-in": 0,
|
||||||
|
"object-shorthand": 0,
|
||||||
|
"no-restricted-syntax": 0,
|
||||||
|
"prefer-template": 0,
|
||||||
|
"import/no-amd": 0,
|
||||||
|
"space-before-function-paren": 0,
|
||||||
|
"jsx-a11y/href-no-hash": "off",
|
||||||
|
"jsx-a11y/anchor-is-valid": ["warn", { "aspects": ["invalidHref"] }],
|
||||||
|
"import/no-unresolved": 0,
|
||||||
|
"import/extensions": 0
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"browser": false,
|
||||||
|
"window": true,
|
||||||
|
"document": true
|
||||||
|
}
|
||||||
|
}
|
76
.github/CODE_OF_CONDUCT.md
vendored
Normal file
76
.github/CODE_OF_CONDUCT.md
vendored
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to making participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||||
|
level of experience, education, socio-economic status, nationality, personal
|
||||||
|
appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community. Examples of
|
||||||
|
representing a project or community include using an official project e-mail
|
||||||
|
address, posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event. Representation of a project may be
|
||||||
|
further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team at we@athlonproduction.com. All
|
||||||
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||||
|
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see
|
||||||
|
https://www.contributor-covenant.org/faq
|
12
.github/CONTRIBUTING.md
vendored
Normal file
12
.github/CONTRIBUTING.md
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
## How to contribute to Athlon Frontend Webpack Boilerplate
|
||||||
|
|
||||||
|
Thank you for contributing to this template!
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
## Language
|
||||||
|
|
||||||
|
English is the best language to communicate.
|
||||||
|
|
||||||
|
## Templates
|
||||||
|
|
||||||
|
Please use issue/PR templates which are inserted automatically.
|
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# These are supported funding model platforms
|
||||||
|
|
||||||
|
github: [pnikolov]
|
42
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
42
.github/ISSUE_TEMPLATE/bug.md
vendored
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
---
|
||||||
|
name: Bug Report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug**
|
||||||
|
|
||||||
|
A clear and concise description of what the bug is.
|
||||||
|
|
||||||
|
**To Reproduce**
|
||||||
|
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '....'
|
||||||
|
3. Scroll down to '....'
|
||||||
|
4. See error
|
||||||
|
|
||||||
|
**Expected behavior**
|
||||||
|
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**Desktop (please complete the following information):**
|
||||||
|
|
||||||
|
- OS: [e.g. iOS]
|
||||||
|
- Browser [e.g. chrome, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Smartphone (please complete the following information):**
|
||||||
|
|
||||||
|
- Device: [e.g. iPhone6]
|
||||||
|
- OS: [e.g. iOS8.1]
|
||||||
|
- Browser [e.g. stock browser, safari]
|
||||||
|
- Version [e.g. 22]
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
|
||||||
|
Add any other context about the problem here.
|
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: GitHub Security Bug Bounty
|
||||||
|
url: https://weareathlon.com/
|
||||||
|
about: Please report security vulnerabilities here.
|
25
.github/ISSUE_TEMPLATE/feature.md
vendored
Normal file
25
.github/ISSUE_TEMPLATE/feature.md
vendored
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
---
|
||||||
|
name: Feature Request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
***What is the motivation / use case for changing the behavior?**
|
||||||
|
|
||||||
|
Describe an example use case of this feature.
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
|
||||||
|
Add any other context or screenshots about the feature request here.
|
18
.github/ISSUE_TEMPLATE/support.md
vendored
Normal file
18
.github/ISSUE_TEMPLATE/support.md
vendored
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
name: Support Request
|
||||||
|
about: Describe an issue using this repository code
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your support request related to a problem? Please describe.**
|
||||||
|
|
||||||
|
A clear and concise description of what the problem is.
|
||||||
|
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Additional context**
|
||||||
|
|
||||||
|
Add any other context or screenshots about the support request here.
|
23
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
23
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
* **Please check if the PR fulfills these requirements**
|
||||||
|
|
||||||
|
- [ ] The commit message follows our guidelines
|
||||||
|
- [ ] Tests for the changes have been added (for bug fixes / features)
|
||||||
|
- [ ] Docs have been added / updated (for bug fixes / features)
|
||||||
|
|
||||||
|
* **What kind of change does this PR introduce?**
|
||||||
|
|
||||||
|
(_Bug fix, feature, docs update, ..._)
|
||||||
|
|
||||||
|
* **What is the current behavior?**
|
||||||
|
|
||||||
|
(_You can also link to an open issue here_)
|
||||||
|
|
||||||
|
* **What is the new behavior (_if this is a feature change_)?**
|
||||||
|
|
||||||
|
(_Add description here_)
|
||||||
|
|
||||||
|
* **Does this PR introduce a breaking change?**
|
||||||
|
|
||||||
|
(_What changes might users need to make in their existing projects due to this PR?_)
|
||||||
|
|
||||||
|
* **Other information**:
|
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ master ]
|
||||||
|
schedule:
|
||||||
|
- cron: '34 6 * * 5'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'javascript' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
22
.gitignore
vendored
Normal file
22
.gitignore
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# Mac OS X
|
||||||
|
.DS_Store
|
||||||
|
._.*
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Ignore local editor
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.idea
|
||||||
|
*.swp
|
||||||
|
tags
|
||||||
|
nbproject/*
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
npm-debug.log
|
||||||
|
|
||||||
|
node_modules/
|
||||||
|
dist/
|
5
.prettierrc
Normal file
5
.prettierrc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"singleQuote": true,
|
||||||
|
"semi": false,
|
||||||
|
"endOfLine": "auto"
|
||||||
|
}
|
108
.sasslintrc
Normal file
108
.sasslintrc
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
files:
|
||||||
|
# formatter: stylish
|
||||||
|
include: 'src/scss/*'
|
||||||
|
ignore:
|
||||||
|
- 'src/scss/vendor/**/*.scss'
|
||||||
|
- 'src/scss/base/_reset.scss'
|
||||||
|
- 'src/scss/base/_print.scss'
|
||||||
|
- 'src/scss/base/_fonts.scss'
|
||||||
|
- 'src/scss/base/mixins.scss'
|
||||||
|
- 'src/scss/dirty/_hacks.scss'
|
||||||
|
|
||||||
|
rules:
|
||||||
|
# Extends
|
||||||
|
extends-before-mixins: 2
|
||||||
|
extends-before-declarations: 2
|
||||||
|
placeholder-in-extend: 2
|
||||||
|
|
||||||
|
# Mixins
|
||||||
|
mixins-before-declarations:
|
||||||
|
- 2
|
||||||
|
-
|
||||||
|
exclude: ['bp']
|
||||||
|
|
||||||
|
# Line Spacing
|
||||||
|
one-declaration-per-line: 2
|
||||||
|
empty-line-between-blocks: 2
|
||||||
|
single-line-per-selector: 2
|
||||||
|
|
||||||
|
# Disallows
|
||||||
|
no-attribute-selectors: 0
|
||||||
|
no-color-keywords: 2
|
||||||
|
no-color-literals: 2
|
||||||
|
no-combinators: 0
|
||||||
|
no-css-comments: 0
|
||||||
|
no-debug: 2
|
||||||
|
no-disallowed-properties: 0
|
||||||
|
no-duplicate-properties: 2
|
||||||
|
no-empty-rulesets: 2
|
||||||
|
no-extends: 1
|
||||||
|
no-ids: 2
|
||||||
|
no-important: 0
|
||||||
|
no-invalid-hex: 2
|
||||||
|
no-mergeable-selectors: 2
|
||||||
|
no-misspelled-properties: 2
|
||||||
|
no-qualifying-elements:
|
||||||
|
- 2
|
||||||
|
-
|
||||||
|
allow-element-with-attribute: true
|
||||||
|
|
||||||
|
no-trailing-whitespace: 2
|
||||||
|
no-trailing-zero: 2
|
||||||
|
no-transition-all: 0
|
||||||
|
no-universal-selectors: 2
|
||||||
|
no-url-protocols: 1
|
||||||
|
no-vendor-prefixes: 2
|
||||||
|
no-warn: 2
|
||||||
|
property-units: 0
|
||||||
|
|
||||||
|
# Nesting
|
||||||
|
force-attribute-nesting: 0
|
||||||
|
force-element-nesting: 0
|
||||||
|
force-pseudo-nesting: 0
|
||||||
|
|
||||||
|
# Name Formats
|
||||||
|
class-name-format: 2
|
||||||
|
function-name-format: 2
|
||||||
|
id-name-format: 2
|
||||||
|
mixin-name-format: 2
|
||||||
|
placeholder-name-format: 2
|
||||||
|
variable-name-format: 2
|
||||||
|
|
||||||
|
# Style Guide
|
||||||
|
attribute-quotes: 2
|
||||||
|
bem-depth: 0
|
||||||
|
border-zero:
|
||||||
|
- 2
|
||||||
|
-
|
||||||
|
convention: 'none'
|
||||||
|
|
||||||
|
brace-style: 2
|
||||||
|
clean-import-paths: 2
|
||||||
|
empty-args: 0
|
||||||
|
hex-length: 2
|
||||||
|
hex-notation: 2
|
||||||
|
indentation: 2
|
||||||
|
leading-zero: 2
|
||||||
|
nesting-depth: 0
|
||||||
|
property-sort-order: 0
|
||||||
|
pseudo-element: 2
|
||||||
|
quotes: 2
|
||||||
|
shorthand-values: 2
|
||||||
|
url-quotes: 2
|
||||||
|
variable-for-property: 0
|
||||||
|
zero-unit: 2
|
||||||
|
|
||||||
|
# Inner Spacing
|
||||||
|
space-after-comma: 2
|
||||||
|
space-before-colon: 2
|
||||||
|
space-after-colon: 2
|
||||||
|
space-before-brace: 2
|
||||||
|
space-before-bang: 2
|
||||||
|
space-after-bang: 2
|
||||||
|
space-between-parens: 2
|
||||||
|
space-around-operator: 2
|
||||||
|
|
||||||
|
# Final Items
|
||||||
|
trailing-semicolon: 2
|
||||||
|
final-newline: 2
|
22
.travis.yml
Normal file
22
.travis.yml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
language: node_js
|
||||||
|
dist: xenial
|
||||||
|
os: linux
|
||||||
|
node_js:
|
||||||
|
- node
|
||||||
|
- lts/*
|
||||||
|
install:
|
||||||
|
- npm ci
|
||||||
|
script:
|
||||||
|
- npm run lint:sass
|
||||||
|
- npm run lint:js
|
||||||
|
- npm run production
|
||||||
|
deploy:
|
||||||
|
strategy: git
|
||||||
|
provider: pages
|
||||||
|
skip_cleanup: true
|
||||||
|
token: $GITHUB_TOKEN # Set in the settings page of your repository, as a secure variable
|
||||||
|
keep_history: true
|
||||||
|
local_dir: dist
|
||||||
|
on:
|
||||||
|
branch: master
|
||||||
|
node_js: 'lts/*'
|
1058
CHANGELOG.md
Normal file
1058
CHANGELOG.md
Normal file
File diff suppressed because it is too large
Load diff
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Athlon DPS
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
230
README.md
Normal file
230
README.md
Normal file
|
@ -0,0 +1,230 @@
|
||||||
|
# Webpack 5 Boilerplate Template
|
||||||
|
|
||||||
|
![Maintenance](https://img.shields.io/maintenance/yes/2021?logo=github)
|
||||||
|
![webpack-current](https://img.shields.io/badge/webpack-v5.44.0-green?logo=webpack)
|
||||||
|
![node-current (scoped)](https://img.shields.io/node/v/@weareathlon/frontend-webpack-boilerplate)
|
||||||
|
[![Build Status](https://travis-ci.com/WeAreAthlon/frontend-webpack-boilerplate.svg?branch=master)](https://travis-ci.com/WeAreAthlon/frontend-webpack-boilerplate)
|
||||||
|
[![@weareathlon/frontend-webpack-boilerplate](https://snyk.io/advisor/npm-package/@weareathlon/frontend-webpack-boilerplate/badge.svg)](https://snyk.io/advisor/npm-package/@weareathlon/frontend-webpack-boilerplate)
|
||||||
|
[![GitHub Issues](https://img.shields.io/github/issues-raw/WeAreAthlon/frontend-webpack-boilerplate)](https://github.com/WeAreAthlon/frontend-webpack-boilerplate/issues)
|
||||||
|
[![Known Vulnerabilities](https://snyk.io/test/github/WeAreAthlon/frontend-webpack-boilerplate/badge.svg?targetFile=package.json)](https://snyk.io/test/github/WeAreAthlon/frontend-webpack-boilerplate?targetFile=package.json)
|
||||||
|
[![devDependency Status](https://david-dm.org/WeAreAthlon/frontend-webpack-boilerplate/dev-status.svg)](https://david-dm.org/WeAreAthlon/frontend-webpack-boilerplate?type=dev)
|
||||||
|
[![npm](https://img.shields.io/npm/dm/@weareathlon/frontend-webpack-boilerplate)](https://www.npmjs.com/package/@weareathlon/frontend-webpack-boilerplate)
|
||||||
|
[![GitHub License](https://img.shields.io/github/license/WeAreAthlon/frontend-webpack-boilerplate)](https://github.com/WeAreAthlon/frontend-webpack-boilerplate/blob/master/LICENSE)
|
||||||
|
|
||||||
|
![Front-end Webpack Boilerplate](https://repository-images.githubusercontent.com/96102257/4be7b600-61f1-11e9-9ebf-67b17d5ba125)
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
* [Demo page demonstrating building - SASS, JavaScript, Images, Fonts, HTML](https://weareathlon.github.io/frontend-webpack-boilerplate/)
|
||||||
|
|
||||||
|
Table of Contents
|
||||||
|
=================
|
||||||
|
|
||||||
|
* [Webpack 5 Boilerplate Template](#webpack-5-boilerplate-template)
|
||||||
|
* [Demo](#demo)
|
||||||
|
* [Features](#features)
|
||||||
|
* [Requirements](#requirements)
|
||||||
|
* [Setup](#setup)
|
||||||
|
* [Installation](#installation)
|
||||||
|
* [Define Package Metadata](#define-package-metadata)
|
||||||
|
* [Configuration](#configuration)
|
||||||
|
* [Environment Configuration](#environment-configuration)
|
||||||
|
* [Additional webpack configuration](#additional-webpack-configuration)
|
||||||
|
* [Development](#development)
|
||||||
|
* [Assets Source](#assets-source)
|
||||||
|
* [Build Assets](#build-assets)
|
||||||
|
* [One time build assets for development](#one-time-build-assets-for-development)
|
||||||
|
* [Build assets and enable source files watcher](#build-assets-and-enable-source-files-watcher)
|
||||||
|
* [Start a development server - reloading automatically after each file change.](#start-a-development-server---reloading-automatically-after-each-file-change)
|
||||||
|
* [Production](#production)
|
||||||
|
* [Build Assets](#build-assets-1)
|
||||||
|
* [Get Built Assets](#get-built-assets)
|
||||||
|
* [Run Code Style Linters](#run-code-style-linters)
|
||||||
|
* [SASS](#sass)
|
||||||
|
* [JavaScript](#javascript)
|
||||||
|
* [Additional Tools](#additional-tools)
|
||||||
|
* [Run Assets Bundle Analyzer](#run-assets-bundle-analyzer)
|
||||||
|
* [Continuous Integration](#continuous-integration)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* **Simple setup** instructions
|
||||||
|
* Start development of a project right away with **simple**, **configured**, **linter enabled**, **browser synced** asset files.
|
||||||
|
* Configuration per **environment**
|
||||||
|
* `development` - [`sourcemaps`](https://webpack.js.org/configuration/devtool/), [`browser synced developmentment server`](https://webpack.js.org/configuration/dev-server/)
|
||||||
|
* `production` - [`minification`](https://webpack.js.org/plugins/terser-webpack-plugin/), [`sourcemaps`](https://webpack.js.org/configuration/devtool/)
|
||||||
|
* Configurable **browsers versions support**. It uses [`browserslist`](https://github.com/browserslist/browserslist#full-list) - just specify the browsers you want to support in the `package.json` file for `browserslist`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
"browserslist": [
|
||||||
|
"last 2 versions",
|
||||||
|
"> 5%"
|
||||||
|
]
|
||||||
|
```
|
||||||
|
* The built CSS / JavaScript files will respect the **configured supported browser versions** using the following tools:
|
||||||
|
* [`autoprefixer`](https://github.com/postcss/autoprefixer) - automatically adds vendor prefixes to CSS rules
|
||||||
|
* [`babel-preset-env`](https://babeljs.io/docs/en/babel-preset-env) - smart preset that allows you to use the latest JavaScript without needing to micromanage which syntax transforms (*and optionally, browser polyfills*) are needed by your target environment(s).
|
||||||
|
* Demo project files to be used as a reference and **example demo** building of:
|
||||||
|
* *JavaScript*
|
||||||
|
* *SASS / PostCSS*
|
||||||
|
* *HTML* templates
|
||||||
|
* *Images* (*CSS backgrounds and image tags*)
|
||||||
|
* *Fonts*
|
||||||
|
* Support for **assets optimization** for production environment with ability to configure:
|
||||||
|
* **Code Minification** of *JavaScript* and *CSS* processed files.
|
||||||
|
* **Optimize Assets Loading** - inline and embed **images** / **fonts** files having file size below a *configurable* threshold value.
|
||||||
|
* **Images Optimisation** - optimize `jpeg`, `jpg`, `png`, `gif`, `svg` filesize and loading type via [`imagemin`](https://github.com/imagemin/imagemin). Plugin and Loader for webpack to optimize (*compress*) all images using `imagemin`. Do not worry about size of images, now they are always optimized/compressed.
|
||||||
|
* Support for **source code syntax style and formatting linters** that analyze source code to flag any programming errors, bugs, stylistic errors or suspicious constructs:
|
||||||
|
* **SASS/PostCSS syntax cheker** - you can change or add additional rules in `.sasslintrc` file. Configuration options can be found on [`sass-lint`](https://github.com/sasstools/sass-lint/blob/master/lib/config/sass-lint.yml) documentation.
|
||||||
|
* **JavaScript syntax checker** - following the `airbnb` style, you can review and configure the rules in `.eslintrc` file. Configuration options can be found on [`eslint`](https://eslint.org/docs/user-guide/configuring) documentation.
|
||||||
|
* Latest [Webpack 5](https://github.com/webpack/webpack) - *JavaScript* module bundler.
|
||||||
|
* Latest [SASS/PostCSS](https://github.com/sass/sass) compiler based on Dart `sass`.
|
||||||
|
* Latest [Babel 7](https://github.com/babel/babel) (`@babel/core`) - JavaScript compiler - _Use next generation JavaScript, today._
|
||||||
|
* Integration with [Travis CI](https://travis-ci.com/)
|
||||||
|
* [Demo deployment available to GitHub pages](https://weareathlon.github.io/frontend-webpack-boilerplate/)
|
||||||
|
* Configured and ready to use **Webpack Dev Server** plugin for faster local development - [`webpack-dev-server`](https://webpack.js.org/configuration/dev-server/)
|
||||||
|
* Integration with [Webpack Bundle Analyzer](https://www.npmjs.com/package/webpack-bundle-analyzer) - _Visualize size of webpack output files with an interactive zoomable treemap._
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
* `node` : `^12 || >=14`
|
||||||
|
* `npm`
|
||||||
|
|
||||||
|
# Setup
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Choose and download the latest template release from [List of Releases](https://github.com/WeAreAthlon/frontend-webpack-boilerplate/releases).
|
||||||
|
2. Extract the release archive to a new directory, rename it to your project name and browse the directory.
|
||||||
|
3. Install all dependencies using `npm` *clean install* command.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm ci
|
||||||
|
```
|
||||||
|
|
||||||
|
> More on the clean install npm command can be read here [`npm ci`](https://docs.npmjs.com/cli/ci.html)
|
||||||
|
|
||||||
|
> You can still use `npm install` in cases the `npm ci` raises system error due to specific platform incompatibilities.
|
||||||
|
|
||||||
|
## Define Package Metadata
|
||||||
|
|
||||||
|
* Amend `package.json` file and optionally specify:
|
||||||
|
* `name` - Name of your project. A name can be optionally prefixed by a scope, e.g. `@myorg/mypackage`.
|
||||||
|
* `version` - Specify and maintain a version number indicator for your project code.
|
||||||
|
* `author` - Your organisation or just yourself. You can also specify [`contributors`](https://docs.npmjs.com/files/package.json#people-fields-author-contributors).
|
||||||
|
* `description` - Short description of your project.
|
||||||
|
* `keywords` - Put keywords in it. It’s an array of strings.
|
||||||
|
* `repository` - Specify the place where your code lives.
|
||||||
|
* `license` - Announce your code license, figure out the license from [Choose an Open Source License](https://choosealicense.com) .
|
||||||
|
* `browserslist` - Specify the supported browsers versions - you can refer to [full list](https://github.com/browserslist/browserslist#full-list) of availalbe options.
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
|
||||||
|
## Environment Configuration
|
||||||
|
|
||||||
|
* Edit the [`configuration/environment.js`](configuration/environment.js) if you want to specify:
|
||||||
|
* **`server`**: configure development server, specify `host`, `port`. Refer to the full development server configuration options for [`webpack-dev-server`](https://webpack.js.org/configuration/dev-server/).
|
||||||
|
* **`limits`**: configure file size thresholds for assets optimizations.
|
||||||
|
* Image/Font files size in bytes. Below this value the image file will be served as Data URL (_inline base64_).
|
||||||
|
* **`paths`**: `src` or `dist` directories names and file system location.
|
||||||
|
|
||||||
|
## Additional `webpack` configuration
|
||||||
|
|
||||||
|
You can additionally configure `webpack` for specific environment:
|
||||||
|
* `development` - [`configuration/webpack.dev.config.js`](configuration/webpack.dev.config.js)
|
||||||
|
* `production` - [`configuration/webpack.prod.config.js`](configuration/webpack.prod.config.js)
|
||||||
|
* Note that if you prefer to build and deploy [`sourcemap`](https://webpack.js.org/configuration/devtool/#production) files:
|
||||||
|
> You should configure your server to disallow access to the Source Map file for normal users!
|
||||||
|
|
||||||
|
# Development
|
||||||
|
|
||||||
|
## Assets Source
|
||||||
|
|
||||||
|
* **SASS/PostCSS** files are located under `src/scss/`
|
||||||
|
* **JavaScript** files with support of latest ECMAScript _ES6 / ECMAScript 2016(ES7)/ etc_ files are located under `src/js/`
|
||||||
|
* **Image** files are located under `src/images/`
|
||||||
|
* **Font** files are located under `src/fonts/`
|
||||||
|
* **HTML** files are located under `src/`
|
||||||
|
* It will **automatically** build **all HTML files** placed under `src/` directory, no need to manually configure each template anymore!
|
||||||
|
|
||||||
|
## Build Assets
|
||||||
|
|
||||||
|
### One time build assets for development
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Build assets and enable source files watcher
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run watch
|
||||||
|
```
|
||||||
|
|
||||||
|
This command is suitable if you develop with external web server.
|
||||||
|
|
||||||
|
> **Note:** File watching does not work with *NFS* (*Windows*) and virtual machines under *VirtualBox*. Extend the configuration in such cases by:
|
||||||
|
|
||||||
|
```js
|
||||||
|
module.exports = {
|
||||||
|
//...
|
||||||
|
watchOptions: {
|
||||||
|
poll: 1000 // Check for changes every second
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Start a development server - reloading automatically after each file change.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
# Production
|
||||||
|
|
||||||
|
## Build Assets
|
||||||
|
|
||||||
|
Optimize assets for production by:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run production
|
||||||
|
```
|
||||||
|
|
||||||
|
## Get Built Assets
|
||||||
|
|
||||||
|
* _CSS_ files are located under `/dist/css/`
|
||||||
|
* _JavaScript_ files with support of _ES6 / ECMAScript 2016(ES7)_ files are located under `/dist/js/`
|
||||||
|
* _Images_ are located under `/dist/images/`
|
||||||
|
* Images part of the _design_ (_usually referenced in the CSS_) are located under `/dist/images/design/`
|
||||||
|
* Images part of the _content_ (_usually referenced via `<img>` tags_) are located under `/dist/images/content/`
|
||||||
|
* _Fonts_ are located under `/dist/fonts/`
|
||||||
|
* _HTML_ files are located under `/dist/`
|
||||||
|
|
||||||
|
# Run Code Style Linters
|
||||||
|
|
||||||
|
## SASS
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run lint:sass
|
||||||
|
```
|
||||||
|
## JavaScript
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run lint:js
|
||||||
|
```
|
||||||
|
|
||||||
|
# Additional Tools
|
||||||
|
|
||||||
|
## Run Assets Bundle Analyzer
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm run stats
|
||||||
|
```
|
||||||
|
|
||||||
|
> This will open the visualisaion on the default configuraiton URL `localhost:8888`, you can change this URL or port following the [package](https://github.com/webpack-contrib/webpack-bundle-analyzer#options-for-cli) documentation.
|
||||||
|
|
||||||
|
## Continuous Integration
|
||||||
|
|
||||||
|
This boilerplate template contains integration with [Travis CI](https://travis-ci.org/). The build system runs all linting scripts and deploys production optimized pages to _GitHub_ pages upon push to the `master` branch. However, note that this deployment flow only works for _Project Pages_, as User and Organization pages [only support the master branch flow](https://help.github.com/articles/user-organization-and-project-pages/).
|
||||||
|
|
||||||
|
For more information on how to set up alternative deployment processes, check out the [Travis CI documentation on deployment](https://docs.travis-ci.com/user/deployment). The service can deploy to dozens of cloud providers, including Heroku, AWS, and Firebase.
|
19
SECURITY.md
Normal file
19
SECURITY.md
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Security Policy
|
||||||
|
|
||||||
|
## Supported Versions
|
||||||
|
|
||||||
|
The following release versions of the template are
|
||||||
|
currently being supported with security updates.
|
||||||
|
|
||||||
|
| Version | Supported |
|
||||||
|
| ------- | ------------------ |
|
||||||
|
| 5.x | :white_check_mark: |
|
||||||
|
| < 4.x | :x: |
|
||||||
|
|
||||||
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
If you discover a security issue in this webpack boilerplate, please report it by sending an email to plamen@athlonsofia.com.
|
||||||
|
|
||||||
|
This will allow us to assess the risk, and make a fix available before we add a bug report to the GitHub repository.
|
||||||
|
|
||||||
|
Thanks for helping make this boilerplate safe for everyone!
|
22
configuration/environment.js
Normal file
22
configuration/environment.js
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
paths: {
|
||||||
|
/* Path to source files directory */
|
||||||
|
source: path.resolve(__dirname, '../src/'),
|
||||||
|
|
||||||
|
/* Path to built files directory */
|
||||||
|
output: path.resolve(__dirname, '../dist/'),
|
||||||
|
},
|
||||||
|
server: {
|
||||||
|
host: '0.0.0.0',
|
||||||
|
port: 4000,
|
||||||
|
},
|
||||||
|
limits: {
|
||||||
|
/* Image files size in bytes. Below this value the image file will be served as DataURL (inline base64). */
|
||||||
|
images: 8192,
|
||||||
|
|
||||||
|
/* Font files size in bytes. Below this value the font file will be served as DataURL (inline base64). */
|
||||||
|
fonts: 8192,
|
||||||
|
},
|
||||||
|
};
|
38
configuration/webpack.dev.config.js
Normal file
38
configuration/webpack.dev.config.js
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
|
const { merge } = require('webpack-merge');
|
||||||
|
|
||||||
|
const webpackConfiguration = require('../webpack.config');
|
||||||
|
const environment = require('./environment');
|
||||||
|
|
||||||
|
module.exports = merge(webpackConfiguration, {
|
||||||
|
mode: 'development',
|
||||||
|
|
||||||
|
/* Manage source maps generation process */
|
||||||
|
devtool: 'eval-source-map',
|
||||||
|
|
||||||
|
/* Development Server Configuration */
|
||||||
|
devServer: {
|
||||||
|
contentBase: environment.paths.output,
|
||||||
|
watchContentBase: true,
|
||||||
|
publicPath: '/',
|
||||||
|
open: true,
|
||||||
|
historyApiFallback: true,
|
||||||
|
compress: true,
|
||||||
|
overlay: true,
|
||||||
|
hot: false,
|
||||||
|
watchOptions: {
|
||||||
|
poll: 300,
|
||||||
|
},
|
||||||
|
...environment.server,
|
||||||
|
},
|
||||||
|
|
||||||
|
/* File watcher options */
|
||||||
|
watchOptions: {
|
||||||
|
aggregateTimeout: 300,
|
||||||
|
poll: 300,
|
||||||
|
ignored: /node_modules/,
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Additional plugins configuration */
|
||||||
|
plugins: [],
|
||||||
|
});
|
33
configuration/webpack.prod.config.js
Normal file
33
configuration/webpack.prod.config.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
|
const { merge } = require('webpack-merge');
|
||||||
|
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
|
||||||
|
const TerserPlugin = require('terser-webpack-plugin');
|
||||||
|
|
||||||
|
const webpackConfiguration = require('../webpack.config');
|
||||||
|
|
||||||
|
module.exports = merge(webpackConfiguration, {
|
||||||
|
mode: 'production',
|
||||||
|
|
||||||
|
/* Manage source maps generation process. Refer to https://webpack.js.org/configuration/devtool/#production */
|
||||||
|
devtool: false,
|
||||||
|
|
||||||
|
/* Optimization configuration */
|
||||||
|
optimization: {
|
||||||
|
minimize: true,
|
||||||
|
minimizer: [
|
||||||
|
new TerserPlugin({
|
||||||
|
parallel: true,
|
||||||
|
}),
|
||||||
|
new CssMinimizerPlugin(),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Performance treshold configuration values */
|
||||||
|
performance: {
|
||||||
|
maxEntrypointSize: 512000,
|
||||||
|
maxAssetSize: 512000,
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Additional plugins configuration */
|
||||||
|
plugins: [],
|
||||||
|
});
|
29006
package-lock.json
generated
Normal file
29006
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
82
package.json
Executable file
82
package.json
Executable file
|
@ -0,0 +1,82 @@
|
||||||
|
{
|
||||||
|
"author": "Adam Piontek <adam@73k.us> (https://73k.us)",
|
||||||
|
"name": "@73kus/err",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"description": "Simple but pretty error pages for statis serving, e.g. with nginx",
|
||||||
|
"homepage": "https://git.73k.us",
|
||||||
|
"browserslist": [
|
||||||
|
"last 2 versions",
|
||||||
|
"> 5%"
|
||||||
|
],
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Adam Piontek",
|
||||||
|
"email": "adam@73k.us",
|
||||||
|
"url": "https://73k.us"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.14.6",
|
||||||
|
"@babel/preset-env": "^7.14.7",
|
||||||
|
"autoprefixer": "^10.3.1",
|
||||||
|
"babel-loader": "^8.2.2",
|
||||||
|
"clean-webpack-plugin": "^3.0.0",
|
||||||
|
"copy-webpack-plugin": "^9.0.1",
|
||||||
|
"css-loader": "^5.2.6",
|
||||||
|
"css-minimizer-webpack-plugin": "^3.0.2",
|
||||||
|
"eslint": "^7.30.0",
|
||||||
|
"eslint-config-airbnb": "^18.2.1",
|
||||||
|
"eslint-config-prettier": "^8.3.0",
|
||||||
|
"eslint-plugin-import": "^2.23.4",
|
||||||
|
"eslint-plugin-jsx-a11y": "^6.4.1",
|
||||||
|
"file-loader": "^6.2.0",
|
||||||
|
"html-webpack-plugin": "^5.3.2",
|
||||||
|
"image-minimizer-webpack-plugin": "^2.2.0",
|
||||||
|
"imagemin-gifsicle": "^7.0.0",
|
||||||
|
"imagemin-jpegtran": "^7.0.0",
|
||||||
|
"imagemin-optipng": "^8.0.0",
|
||||||
|
"imagemin-svgo": "^9.0.0",
|
||||||
|
"mini-css-extract-plugin": "^2.1.0",
|
||||||
|
"postcss": "^8.3.6",
|
||||||
|
"postcss-loader": "^6.1.1",
|
||||||
|
"postcss-scss": "^4.0.0",
|
||||||
|
"prettier": "^2.3.2",
|
||||||
|
"sass": "^1.35.2",
|
||||||
|
"sass-lint": "^1.13.1",
|
||||||
|
"sass-loader": "^12.1.0",
|
||||||
|
"tailwindcss": "^2.2.7",
|
||||||
|
"terser-webpack-plugin": "^5.1.3",
|
||||||
|
"url-loader": "^4.1.1",
|
||||||
|
"webpack": "^5.44.0",
|
||||||
|
"webpack-bundle-analyzer": "^4.4.2",
|
||||||
|
"webpack-cli": "^4.7.2",
|
||||||
|
"webpack-dev-server": "^3.11.2",
|
||||||
|
"webpack-merge": "^5.8.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12 || >=14"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"webpack",
|
||||||
|
"error",
|
||||||
|
"404",
|
||||||
|
"50x"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"private": false,
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git@git.73k.us:73kus-err.git"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "webpack --config configuration/webpack.dev.config.js --mode=development",
|
||||||
|
"watch": "webpack --config configuration/webpack.dev.config.js --mode=development --watch",
|
||||||
|
"bundle": "npm install && npm run watch",
|
||||||
|
"dev": "webpack serve --config configuration/webpack.dev.config.js --mode=development",
|
||||||
|
"production": "webpack --config configuration/webpack.prod.config.js --mode=production",
|
||||||
|
"lint:sass": "sass-lint -v -q",
|
||||||
|
"lint:js": "eslint --ext .js src/js/",
|
||||||
|
"stats": "webpack --config configuration/webpack.prod.config.js --mode=production --json > dist/stats.json && webpack-bundle-analyzer dist/stats.json"
|
||||||
|
},
|
||||||
|
"target": "web"
|
||||||
|
}
|
7
postcss.config.js
Executable file
7
postcss.config.js
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
module.exports = {
|
||||||
|
parser: 'postcss-scss',
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
};
|
38
src/40x.html
Normal file
38
src/40x.html
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>40x Error!</title>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||||
|
<meta name="description" content="You tried to get something that’s not there!">
|
||||||
|
<meta name="author" content="Oh no! 404!">
|
||||||
|
</head>
|
||||||
|
<body class="h-screen w-screen bg-cover bg-center grid grid-cols-1 place-content-center" style="background-image: url(images/content/404_rainbow.jpg);">
|
||||||
|
|
||||||
|
<div class="grid justify-items-center text-gray-900">
|
||||||
|
|
||||||
|
<img src="images/content/404_unicorn.png" class="unicorn" alt="UNICORN">
|
||||||
|
|
||||||
|
<h1 class="text-5xl leading-normal">Oh no! 403/404!</h1>
|
||||||
|
|
||||||
|
<p class="text-info font-serif leading-loose">You tried to get something you can't get!</p>
|
||||||
|
|
||||||
|
<p class="icon-link mt-0 sm:mt-2 md:mt-6">
|
||||||
|
<a class="text-5xl hover:text-gray-800 filter hover:drop-shadow-md" title="Home" href="https://73k.us/" target="_blank">
|
||||||
|
<svg class="h-12 w-12" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-copy text-gray-200 mt-3 sm:mt-6 md:mt-8">
|
||||||
|
(Unicorn image
|
||||||
|
<a href="https://creativecommons.org/licenses/by-nc/4.0/" class="text-gray-100 underline">Creative Commons 4.0 BY-NC</a>
|
||||||
|
via <a href="http://pngimg.com/download/24891" class="text-gray-100 underline">pngimg.com</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
38
src/50x.html
Normal file
38
src/50x.html
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>40x Error!</title>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||||
|
<meta name="description" content="You tried to get something that’s not there!">
|
||||||
|
<meta name="author" content="Oh no! 404!">
|
||||||
|
</head>
|
||||||
|
<body class="h-screen w-screen bg-cover bg-center grid grid-cols-1 place-content-center" style="background-image: url(images/content/50x_rainbow.jpg);">
|
||||||
|
|
||||||
|
<div class="grid justify-items-center text-gray-900">
|
||||||
|
|
||||||
|
<img src="images/content/50x_unicorn.png" class="unicorn" alt="UNICORN">
|
||||||
|
|
||||||
|
<h1 class="text-5xl leading-normal">K̷z̴z̶t̸.̶ ̷5̷0̵x̷ ̷E̷r̷r̶o̸r̸!̶</h1>
|
||||||
|
|
||||||
|
<p class="text-info font-serif leading-loose">Something went wrong. Try going home…</p>
|
||||||
|
|
||||||
|
<p class="icon-link mt-0 sm:mt-2 md:mt-6">
|
||||||
|
<a class="text-5xl hover:text-gray-800 filter hover:drop-shadow-md" title="Home" href="https://73k.us/" target="_blank">
|
||||||
|
<svg class="h-12 w-12" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-copy text-gray-200 mt-3 sm:mt-6 md:mt-8">
|
||||||
|
(Unicorn image
|
||||||
|
<a href="https://creativecommons.org/licenses/by-nc/4.0/" class="text-gray-100 underline">Creative Commons 4.0 BY-NC</a>
|
||||||
|
via <a href="http://pngimg.com/download/24891" class="text-gray-100 underline">pngimg.com</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
src/images/content/404_rainbow.jpg
Normal file
BIN
src/images/content/404_rainbow.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 146 KiB |
BIN
src/images/content/404_unicorn.png
Normal file
BIN
src/images/content/404_unicorn.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 335 KiB |
BIN
src/images/content/50x_rainbow.jpg
Normal file
BIN
src/images/content/50x_rainbow.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 178 KiB |
BIN
src/images/content/50x_unicorn.png
Normal file
BIN
src/images/content/50x_unicorn.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 241 KiB |
BIN
src/images/favicon.ico
Executable file
BIN
src/images/favicon.ico
Executable file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
38
src/index.html
Normal file
38
src/index.html
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>40x Error!</title>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||||
|
<meta name="description" content="You tried to get something that’s not there!">
|
||||||
|
<meta name="author" content="Oh no! 404!">
|
||||||
|
</head>
|
||||||
|
<body class="h-screen w-screen bg-cover bg-center grid grid-cols-1 place-content-center" style="background-image: url(images/content/404_rainbow.jpg);">
|
||||||
|
|
||||||
|
<div class="grid justify-items-center text-gray-900">
|
||||||
|
|
||||||
|
<img src="images/content/404_unicorn.png" class="unicorn" alt="UNICORN">
|
||||||
|
|
||||||
|
<h1 class="text-5xl leading-normal">Oh no! 403/404!</h1>
|
||||||
|
|
||||||
|
<p class="text-info font-serif leading-loose">You tried to get something you can't get!</p>
|
||||||
|
|
||||||
|
<p class="icon-link mt-0 sm:mt-2 md:mt-6">
|
||||||
|
<a class="text-5xl hover:text-gray-800 filter hover:drop-shadow-md" title="Home" href="https://73k.us/" target="_blank">
|
||||||
|
<svg class="h-12 w-12" viewBox="0 0 20 20" fill="currentColor">
|
||||||
|
<path d="M10.707 2.293a1 1 0 00-1.414 0l-7 7a1 1 0 001.414 1.414L4 10.414V17a1 1 0 001 1h2a1 1 0 001-1v-2a1 1 0 011-1h2a1 1 0 011 1v2a1 1 0 001 1h2a1 1 0 001-1v-6.586l.293.293a1 1 0 001.414-1.414l-7-7z"/>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="text-copy text-gray-200 mt-3 sm:mt-6 md:mt-8">
|
||||||
|
(Unicorn image
|
||||||
|
<a href="https://creativecommons.org/licenses/by-nc/4.0/" class="text-gray-100 underline">Creative Commons 4.0 BY-NC</a>
|
||||||
|
via <a href="http://pngimg.com/download/24891" class="text-gray-100 underline">pngimg.com</a>)
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
3
src/js/app.js
Executable file
3
src/js/app.js
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
import '../scss/app.scss';
|
||||||
|
|
||||||
|
/* Your JS Code goes here */
|
66
src/scss/app.scss
Executable file
66
src/scss/app.scss
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
// /* By Athlon Front-End Team */
|
||||||
|
|
||||||
|
// /* Core variables */
|
||||||
|
// @import 'base/vars';
|
||||||
|
|
||||||
|
// /* CSS Reset */
|
||||||
|
// @import 'base/reset';
|
||||||
|
|
||||||
|
// /* CSS print */
|
||||||
|
// @import 'base/print';
|
||||||
|
|
||||||
|
// /* Fonts */
|
||||||
|
// @import 'base/fonts';
|
||||||
|
|
||||||
|
// /* Mixins, helpers and functions */
|
||||||
|
// @import 'base/mixins';
|
||||||
|
|
||||||
|
// /* Vendor */
|
||||||
|
|
||||||
|
// /* Components */
|
||||||
|
|
||||||
|
// /* Browser specific styles */
|
||||||
|
// @import 'dirty/hacks';
|
||||||
|
|
||||||
|
// /* Demo Page styles */
|
||||||
|
// @import 'demo';
|
||||||
|
|
||||||
|
/* Tailwind imports */
|
||||||
|
@import "tailwindcss/base";
|
||||||
|
@import "tailwindcss/components";
|
||||||
|
@import "tailwindcss/utilities";
|
||||||
|
|
||||||
|
|
||||||
|
/* unicorn images */
|
||||||
|
img {
|
||||||
|
&.unicorn {
|
||||||
|
max-width: 95% !important;
|
||||||
|
@media (min-width: 512px) {
|
||||||
|
max-width: 85% !important;
|
||||||
|
}
|
||||||
|
@media (min-width: 640px) {
|
||||||
|
max-width: 50% !important;
|
||||||
|
}
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
max-width: 40% !important;
|
||||||
|
}
|
||||||
|
@media (min-width: 1024px) {
|
||||||
|
max-width: 35% !important;
|
||||||
|
}
|
||||||
|
@media (min-width: 1280px) {
|
||||||
|
max-width: 30% !important;
|
||||||
|
}
|
||||||
|
@media (min-width: 1536px) {
|
||||||
|
max-width: 25% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
&.text-info {
|
||||||
|
text-shadow: 0 2px 2px rgba(243,244,246,0.3);
|
||||||
|
}
|
||||||
|
&.text-copy {
|
||||||
|
font-size: 0.6rem;
|
||||||
|
}
|
||||||
|
}
|
67
svgo.config.js
Normal file
67
svgo.config.js
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
module.exports = {
|
||||||
|
multipass: false, // boolean. false by default
|
||||||
|
plugins: [
|
||||||
|
'cleanupAttrs',
|
||||||
|
'mergeStyles',
|
||||||
|
'inlineStyles',
|
||||||
|
'removeDoctype',
|
||||||
|
'removeXMLProcInst',
|
||||||
|
'removeComments',
|
||||||
|
'removeMetadata',
|
||||||
|
'removeTitle',
|
||||||
|
'removeDesc',
|
||||||
|
'removeUselessDefs',
|
||||||
|
'removeXMLNS',
|
||||||
|
'removeEditorsNSData',
|
||||||
|
'removeEmptyAttrs',
|
||||||
|
'removeHiddenElems',
|
||||||
|
'removeEmptyText',
|
||||||
|
'removeEmptyContainers',
|
||||||
|
// 'removeViewBox',
|
||||||
|
'cleanupEnableBackground',
|
||||||
|
'minifyStyles',
|
||||||
|
// 'convertStyleToAttrs',
|
||||||
|
'convertColors',
|
||||||
|
'convertPathData',
|
||||||
|
'convertTransform',
|
||||||
|
'removeUnknownsAndDefaults',
|
||||||
|
'removeNonInheritableGroupAttrs',
|
||||||
|
'removeUselessStrokeAndFill',
|
||||||
|
'removeUnusedNS',
|
||||||
|
// 'prefixIds',
|
||||||
|
'cleanupIDs',
|
||||||
|
'cleanupNumericValues',
|
||||||
|
// 'cleanupListOfValues',
|
||||||
|
'moveElemsAttrsToGroup',
|
||||||
|
'moveGroupAttrsToElems',
|
||||||
|
'collapseGroups',
|
||||||
|
// 'removeRasterImages',
|
||||||
|
'mergePaths',
|
||||||
|
'convertShapeToPath',
|
||||||
|
'convertEllipseToCircle',
|
||||||
|
'sortAttrs',
|
||||||
|
'sortDefsChildren',
|
||||||
|
'removeDimensions',
|
||||||
|
// 'removeAttrs',
|
||||||
|
{
|
||||||
|
name: 'removeAttrs',
|
||||||
|
params: {
|
||||||
|
attrs: 'svg:id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 'removeAttributesBySelector',
|
||||||
|
// 'removeElementsByAttr',
|
||||||
|
// 'addClassesToSVGElement',
|
||||||
|
{
|
||||||
|
name: 'addClassesToSVGElement',
|
||||||
|
params: {
|
||||||
|
className: '{{class-placeholder}}'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 'addAttributesToSVGElement',
|
||||||
|
// 'removeOffCanvasPaths',
|
||||||
|
'removeStyleElement',
|
||||||
|
// 'removeScriptElement',
|
||||||
|
// 'reusePaths',
|
||||||
|
]
|
||||||
|
}
|
14
tailwind.config.js
Normal file
14
tailwind.config.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
module.exports = {
|
||||||
|
purge: [
|
||||||
|
'./src/**/*.html',
|
||||||
|
'./src/**/*.js',
|
||||||
|
],
|
||||||
|
darkMode: false, // or 'media' or 'class'
|
||||||
|
theme: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
variants: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
}
|
110
webpack.config.js
Executable file
110
webpack.config.js
Executable file
|
@ -0,0 +1,110 @@
|
||||||
|
/**
|
||||||
|
* Webpack main configuration file
|
||||||
|
*/
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const fs = require('fs');
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||||||
|
const HTMLWebpackPlugin = require('html-webpack-plugin');
|
||||||
|
const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin');
|
||||||
|
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||||
|
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
||||||
|
const { extendDefaultPlugins } = require('svgo');
|
||||||
|
|
||||||
|
const environment = require('./configuration/environment');
|
||||||
|
|
||||||
|
const templateFiles = fs.readdirSync(environment.paths.source)
|
||||||
|
.filter((file) => path.extname(file).toLowerCase() === '.html');
|
||||||
|
|
||||||
|
const htmlPluginEntries = templateFiles.map((template) => new HTMLWebpackPlugin({
|
||||||
|
inject: true,
|
||||||
|
hash: false,
|
||||||
|
filename: template,
|
||||||
|
template: path.resolve(environment.paths.source, template),
|
||||||
|
favicon: path.resolve(environment.paths.source, 'images', 'favicon.ico'),
|
||||||
|
}));
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: {
|
||||||
|
app: path.resolve(environment.paths.source, 'js', 'app.js'),
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
filename: 'js/[name].js',
|
||||||
|
path: environment.paths.output,
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.((c|sa|sc)ss)$/i,
|
||||||
|
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader', 'postcss-loader'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: ['babel-loader'],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(png|gif|jpe?g|svg)$/i,
|
||||||
|
use: [
|
||||||
|
{
|
||||||
|
loader: 'url-loader',
|
||||||
|
options: {
|
||||||
|
name: 'images/design/[name].[hash:6].[ext]',
|
||||||
|
publicPath: '../',
|
||||||
|
limit: environment.limits.images,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(eot|ttf|woff|woff2)$/,
|
||||||
|
use: [
|
||||||
|
{
|
||||||
|
loader: 'url-loader',
|
||||||
|
options: {
|
||||||
|
name: 'fonts/[name].[hash:6].[ext]',
|
||||||
|
publicPath: '../',
|
||||||
|
limit: environment.limits.fonts,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: 'css/[name].css',
|
||||||
|
}),
|
||||||
|
new ImageMinimizerPlugin({
|
||||||
|
test: /\.(jpe?g|png|gif|svg)$/i,
|
||||||
|
minimizerOptions: {
|
||||||
|
// Lossless optimization with custom option
|
||||||
|
// Feel free to experiment with options for better result for you
|
||||||
|
plugins: [
|
||||||
|
['gifsicle', { interlaced: true }],
|
||||||
|
['jpegtran', { progressive: true }],
|
||||||
|
['optipng', { optimizationLevel: 5 }],
|
||||||
|
['svgo', { configFile: path.resolve('svgo.config.js'), },
|
||||||
|
],
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
new CleanWebpackPlugin({
|
||||||
|
verbose: true,
|
||||||
|
cleanOnceBeforeBuildPatterns: ['**/*', '!stats.json'],
|
||||||
|
}),
|
||||||
|
new CopyWebpackPlugin({
|
||||||
|
patterns: [
|
||||||
|
{
|
||||||
|
from: path.resolve(environment.paths.source, 'images', 'content'),
|
||||||
|
to: path.resolve(environment.paths.output, 'images', 'content'),
|
||||||
|
toType: 'dir',
|
||||||
|
globOptions: {
|
||||||
|
ignore: ['*.DS_Store', 'Thumbs.db'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
].concat(htmlPluginEntries),
|
||||||
|
target: 'web',
|
||||||
|
};
|
Loading…
Reference in a new issue