work
This commit is contained in:
parent
b5006a117c
commit
466df90e7c
|
@ -0,0 +1,2 @@
|
||||||
|
node_modules/
|
||||||
|
dist/
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
title: "{{ replace .Name "-" " " | title }}"
|
|
||||||
date: {{ .Date }}
|
|
||||||
draft: true
|
|
||||||
---
|
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
baseURL = "/"
|
|
||||||
languageCode = "en-us"
|
|
||||||
title = "git-deploy"
|
|
||||||
theme = "Arc"
|
|
||||||
disableKinds = ["RSS"]
|
|
||||||
|
|
||||||
[permalinks]
|
|
||||||
pages = "/:filename"
|
|
|
@ -1,23 +0,0 @@
|
||||||
---
|
|
||||||
title: Dashboard
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="columns">
|
|
||||||
<div class="column">
|
|
||||||
<div class="box">
|
|
||||||
<h2 class="is-size-5">Staging</h2>
|
|
||||||
<p>
|
|
||||||
<button class="button">Build</button>
|
|
||||||
<button class="button">Promote</button>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="column">
|
|
||||||
<div class="box">
|
|
||||||
<h2 class="is-size-5">Production</h2>
|
|
||||||
<p>
|
|
||||||
<button class="button">Build</button>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
title: About
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="content">
|
|
||||||
<p class="has-text-centered is-size-5">
|
|
||||||
<b>cdadmin</b> is a continous deployment tool for static websites.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
|
@ -1 +0,0 @@
|
||||||
signin
|
|
|
@ -1,23 +0,0 @@
|
||||||
<footer class="footer">
|
|
||||||
<div class="container">
|
|
||||||
<div class="columns">
|
|
||||||
<div class="column has-text-left">
|
|
||||||
<p>
|
|
||||||
<a
|
|
||||||
href="https://git.rootprojects.org/root/git-deploy"
|
|
||||||
target="_blank"
|
|
||||||
>
|
|
||||||
Git Repository
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="column has-text-right">
|
|
||||||
<p>
|
|
||||||
<span>Version: 0.1.0</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="/main.js"></script>
|
|
|
@ -1,3 +0,0 @@
|
||||||
<meta name="viewport" content="width=device-width" />
|
|
||||||
<link rel="stylesheet" href="/style.css" />
|
|
||||||
<link rel="stylesheet" href="/custom.css" />
|
|
|
@ -1,8 +0,0 @@
|
||||||
<header class="header">
|
|
||||||
<div class="brand content">
|
|
||||||
<h1>
|
|
||||||
<a href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a>
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
{{ partial "navbar.html" }}
|
|
||||||
</header>
|
|
|
@ -1,7 +0,0 @@
|
||||||
<nav class="navbar">
|
|
||||||
<ul>
|
|
||||||
<li><a href="/">Dashboard</a></li>
|
|
||||||
<!-- <li><a href="/sigin">Sign In</a></li> -->
|
|
||||||
<li><a href="/sigout">Sign Out</a></li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"@ryanburnette/html-remove-empty-lines": "^1.1.4",
|
||||||
|
"@ryanburnette/spawn-in-parallel": "^1.0.1",
|
||||||
|
"autoprefixer": "^8.6.5",
|
||||||
|
"axios": "^0.20.0",
|
||||||
|
"bulma": "^0.9.0",
|
||||||
|
"css-loader": "^3.5.3",
|
||||||
|
"http-server": "^0.12.3",
|
||||||
|
"jshint": "^2.12.0",
|
||||||
|
"mini-css-extract-plugin": "^0.9.0",
|
||||||
|
"node-sass": "^4.14.1",
|
||||||
|
"postcss-loader": "^4.0.2",
|
||||||
|
"prettier": "^2.1.2",
|
||||||
|
"purgecss": "^2.3.0",
|
||||||
|
"sass-loader": "^8.0.2",
|
||||||
|
"style-loader": "^1.2.1",
|
||||||
|
"vue": "^2.6.12",
|
||||||
|
"vue-router": "^3.4.3",
|
||||||
|
"webpack": "5.0.0-beta.31",
|
||||||
|
"webpack-cli": "^3.3.12",
|
||||||
|
"webpack-merge": "^5.1.4",
|
||||||
|
"@babel/core": "^7.11.6",
|
||||||
|
"@babel/preset-env": "^7.11.5",
|
||||||
|
"babel-loader": "^8.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {}
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
plugins: [require('autoprefixer')]
|
||||||
|
};
|
|
@ -0,0 +1,10 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
content: ['public/**/*.html', 'public/**/*.js'],
|
||||||
|
css: ['public/**/*.css'],
|
||||||
|
output: 'public/',
|
||||||
|
keyframes: true,
|
||||||
|
whitelist: [],
|
||||||
|
whitelistPatterns: []
|
||||||
|
};
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var spawn = require('@ryanburnette/spawn-in-parallel');
|
||||||
|
|
||||||
|
spawn([
|
||||||
|
'npx http-server dist/',
|
||||||
|
'npx webpack --config webpack.development.js --watch --colors',
|
||||||
|
'scripts/watch'
|
||||||
|
]);
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
var { exec } = require('child_process');
|
||||||
|
|
||||||
|
var cmd = `rsync -av --exclude="**.js" --exclude="css/" --exclude="js/" src/ dist/`;
|
||||||
|
fs.watch(
|
||||||
|
'src',
|
||||||
|
{
|
||||||
|
recursive: true
|
||||||
|
},
|
||||||
|
function (eventType, filename) {
|
||||||
|
//console.log(eventType, filename);
|
||||||
|
if (filename.includes('.html')) {
|
||||||
|
rsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
function rsync() {
|
||||||
|
exec(
|
||||||
|
cmd,
|
||||||
|
{
|
||||||
|
path: process.env.PATH,
|
||||||
|
cwd: process.cwd()
|
||||||
|
},
|
||||||
|
function (err, stdout, stderr) {
|
||||||
|
console.log(stdout);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
rsync();
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"email": "ryan.burnette@gmail.com"
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
// numbers
|
||||||
|
$golden: 1.618;
|
||||||
|
|
||||||
|
// colors
|
||||||
|
$primary: #1c6ba0;
|
||||||
|
$link: $primary;
|
||||||
|
|
||||||
|
// fonts
|
||||||
|
$family-primary: 'Open Sans', Arial, sans-serif;
|
||||||
|
|
||||||
|
@import 'bulma/bulma';
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
background-color: darken($white, 2.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sticky footer
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
.app {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.app {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
flex: 1 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
background-color: darken($white, 7.5);
|
||||||
|
font-size: (14/16) * 1rem;
|
||||||
|
}
|
||||||
|
.navbar-item {
|
||||||
|
padding-top: 1.25rem;
|
||||||
|
padding-bottom: 1.25rem;
|
||||||
|
}
|
||||||
|
a.navbar-item:focus,
|
||||||
|
a.navbar-item:focus-within,
|
||||||
|
a.navbar-item:hover,
|
||||||
|
a.navbar-item.is-active,
|
||||||
|
.navbar-link:focus,
|
||||||
|
.navbar-link:focus-within,
|
||||||
|
.navbar-link:hover,
|
||||||
|
.navbar-link.is-active {
|
||||||
|
background-color: darken($white, 2.5);
|
||||||
|
}
|
||||||
|
.x-footer {
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.x-footer {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
background-color: darken($white, 7.5);
|
||||||
|
p {
|
||||||
|
font-size: (12/16) * 1rem;
|
||||||
|
line-height: 2rem;
|
||||||
|
}
|
||||||
|
.column.x-l {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.column.x-r {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
@include tablet {
|
||||||
|
.column.x-l {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.column.x-r {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.hero.is-fullheight.signin {
|
||||||
|
background-color: darken($white, 2.5);
|
||||||
|
min-height: calc(100vh - 4rem);
|
||||||
|
}
|
||||||
|
.button.continue {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.signin-info p {
|
||||||
|
font-size: (14/16) * 1rem;
|
||||||
|
}
|
||||||
|
.signin {
|
||||||
|
// .content {
|
||||||
|
// margin-top: -0.5rem;
|
||||||
|
// margin-bottom: 1rem;
|
||||||
|
// }
|
||||||
|
.box {
|
||||||
|
padding-right: $golden * 1rem;
|
||||||
|
padding-bottom: 2rem;
|
||||||
|
padding-left: $golden * 1rem;
|
||||||
|
}
|
||||||
|
.column {
|
||||||
|
// @media screen and (min-width: 600px) {
|
||||||
|
max-width: 26rem;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[v-cloak] {
|
||||||
|
@extend .is-hidden;
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>git-deploy Dashboard</title>
|
||||||
|
<link rel="stylesheet" href="style.css" />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,600;1,400&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="app">
|
||||||
|
<div class="main">
|
||||||
|
<router-view name="header" :user="user"></router-view>
|
||||||
|
<router-view name="main" :user="user"></router-view>
|
||||||
|
</div>
|
||||||
|
<div class="x-footer">
|
||||||
|
<div class="container is-fluid">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column x-l">
|
||||||
|
<p>
|
||||||
|
<a
|
||||||
|
href="https://git.ryanburnette.com/ryanburnette/git-deploy"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
git-deploy
|
||||||
|
</a>
|
||||||
|
v0.1.0
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="column x-r">
|
||||||
|
<p>
|
||||||
|
<button v-if="signedIn" class="button is-small">
|
||||||
|
Sign Out
|
||||||
|
</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- <script src="/vendor.js"></script> -->
|
||||||
|
<script src="/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"node": true,
|
||||||
|
"browser": true,
|
||||||
|
"esversion": 8
|
||||||
|
}
|
|
@ -0,0 +1,160 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
require('../css/style.scss');
|
||||||
|
|
||||||
|
var Vue = require('vue');
|
||||||
|
var VueRouter = require('vue-router').default;
|
||||||
|
var axios = require('axios');
|
||||||
|
|
||||||
|
Vue.use(VueRouter);
|
||||||
|
|
||||||
|
var components = {};
|
||||||
|
|
||||||
|
components.signin = Vue.component('signin', function (resolve, reject) {
|
||||||
|
return axios.get('/templates/signin.html').then(function (resp) {
|
||||||
|
resolve({
|
||||||
|
template: resp.data,
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
email: '',
|
||||||
|
busy: false,
|
||||||
|
state: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
signin: function (ev) {
|
||||||
|
ev.preventDefault();
|
||||||
|
ev.stopPropagation();
|
||||||
|
var _this = this;
|
||||||
|
_this.busy = true;
|
||||||
|
//console.log(_this.email);
|
||||||
|
window.localStorage.setItem('token', _this.email);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted: function () {
|
||||||
|
var _this = this;
|
||||||
|
var token = window.localStorage.getItem('token');
|
||||||
|
if (token) {
|
||||||
|
getMe().then(function (result) {
|
||||||
|
if (result) {
|
||||||
|
router.push('/');
|
||||||
|
} else {
|
||||||
|
_this.state = 'signingIn';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
_this.state = 'signingIn';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
components.navbar = Vue.component('navbar', function (resolve, reject) {
|
||||||
|
return axios.get('/templates/navbar.html').then(function (resp) {
|
||||||
|
resolve({
|
||||||
|
template: resp.data,
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
ready: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted: function () {
|
||||||
|
var _this = this;
|
||||||
|
_this.$parent.getUser().then(function (user) {
|
||||||
|
if (user.email) {
|
||||||
|
_this.ready = true;
|
||||||
|
} else {
|
||||||
|
_this.$router.push('/signin');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
components.dashboard = Vue.component('dashboard', function (resolve, reject) {
|
||||||
|
return axios.get('/templates/dashboard.html').then(function (resp) {
|
||||||
|
resolve({
|
||||||
|
template: resp.data,
|
||||||
|
data: function () {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
props: ['user'],
|
||||||
|
computed: {
|
||||||
|
ready: function () {
|
||||||
|
return !!this.user.email;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var routes = [
|
||||||
|
{
|
||||||
|
path: '/',
|
||||||
|
components: {
|
||||||
|
header: components.navbar,
|
||||||
|
main: components.dashboard
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/signin',
|
||||||
|
components: {
|
||||||
|
main: components.signin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
var router = new VueRouter({
|
||||||
|
routes
|
||||||
|
});
|
||||||
|
|
||||||
|
var app = new Vue({
|
||||||
|
data: {
|
||||||
|
user: {}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getUser: function () {
|
||||||
|
var _this = this;
|
||||||
|
if (_this.user) {
|
||||||
|
return Promise.resolve(_this.user);
|
||||||
|
}
|
||||||
|
return getMe().then(function (result) {
|
||||||
|
_this.user = result.user;
|
||||||
|
return _this.user;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
signedIn: function () {
|
||||||
|
return Object.keys(this.user).length > 0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
router,
|
||||||
|
created: function () {}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.$mount('.app');
|
||||||
|
|
||||||
|
function getMe() {
|
||||||
|
var token = window.localStorage.getItem('token');
|
||||||
|
if (!token) {
|
||||||
|
return Promise.resolve(false);
|
||||||
|
}
|
||||||
|
return axios
|
||||||
|
.get('/api/auth/me.json')
|
||||||
|
.then(function (resp) {
|
||||||
|
return {
|
||||||
|
token,
|
||||||
|
user: resp.data
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.catch(function (err) {
|
||||||
|
if (err.resp.status === 401) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
throw err;
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
<div class="dashboard" v-if="ready">
|
||||||
|
<div class="section">
|
||||||
|
<div class="container is-fluid">
|
||||||
|
<div class="title">
|
||||||
|
<h2 class="has-text-weight-bold">Dashboard</h2>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
<b>git-deploy</b> is a tool for managing continuous deployment of
|
||||||
|
statically generated websites.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="columns">
|
||||||
|
<div class="column">
|
||||||
|
<div class="box">
|
||||||
|
<div class="title is-size-5">
|
||||||
|
<h3 class="has-text-weight-bold">Staging</h3>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>Staging...</p>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
<button class="button is-primary">Build</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<div class="box">
|
||||||
|
<div class="title is-size-5">
|
||||||
|
<h3 class="has-text-weight-bold">Production</h3>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>Production...</p>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<p>
|
||||||
|
<button class="button is-primary">Build</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<nav class="navbar" v-if="ready">
|
||||||
|
<div class="container is-fluid">
|
||||||
|
<div class="navbar-brand">
|
||||||
|
<span class="navbar-item brand-text has-text-weight-bold">
|
||||||
|
git-deploy
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="navMenu" class="navbar-menu">
|
||||||
|
<div class="navbar-start">
|
||||||
|
<a class="navbar-item" href="/">Dashboard</a>
|
||||||
|
<a class="navbar-item" href="/jobs">Jobs</a>
|
||||||
|
<a class="navbar-item" href="/promote">Promote</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
|
@ -0,0 +1,40 @@
|
||||||
|
<section class="hero is-fullheight signin">
|
||||||
|
<div class="hero-body" v-if="state === 'signingIn'">
|
||||||
|
<div class="container">
|
||||||
|
<div class="columns is-mobile is-centered">
|
||||||
|
<div class="column">
|
||||||
|
<div class="box">
|
||||||
|
<div class="title">
|
||||||
|
<h1 class="is-size-4 has-text-centered has-text-weight-bold">
|
||||||
|
git-deploy
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<div class="content has-text-centered signin-info">
|
||||||
|
<p>To sign in, enter your email address click Continue.</p>
|
||||||
|
</div>
|
||||||
|
<form @submit="signin($event)">
|
||||||
|
<div class="field">
|
||||||
|
<label for="email" class="label">Email</label>
|
||||||
|
<div class="control">
|
||||||
|
<input
|
||||||
|
id="email"
|
||||||
|
type="email"
|
||||||
|
class="input"
|
||||||
|
required
|
||||||
|
v-model="email"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="field">
|
||||||
|
<button class="button is-primary continue">Continue</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="hero-body" v-if="state === ''">
|
||||||
|
<div class="has-text-centered" style="width: 100%">Loading...</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
|
@ -1,3 +0,0 @@
|
||||||
{
|
|
||||||
"status": "idle"
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
html,
|
|
||||||
body,
|
|
||||||
.footer {
|
|
||||||
background-color: #ecf0f3;
|
|
||||||
}
|
|
||||||
.footer p {
|
|
||||||
display: inline-block;
|
|
||||||
font-size: 0.75rem;
|
|
||||||
line-height: 2rem;
|
|
||||||
}
|
|
||||||
.header {
|
|
||||||
background-color: #ffffff;
|
|
||||||
padding-top: 0.75rem;
|
|
||||||
padding-bottom: 0.5rem;
|
|
||||||
margin-bottom: 2rem;
|
|
||||||
}
|
|
||||||
.horizontal-overflow-scroll {
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
/* .horizontal-overflow-scroll pre {
|
|
||||||
} */
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 76d321b3f961e6017ca7d364b25c148d2735c5bb
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
var path = require('path');
|
||||||
|
var MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
context: path.resolve(__dirname, 'src'),
|
||||||
|
entry: {
|
||||||
|
// vendor: ['vue'],
|
||||||
|
main: {
|
||||||
|
import: './js/main.js'
|
||||||
|
// dependOn: 'vendor'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
filename: `[name].js`
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.s[ac]ss$/i,
|
||||||
|
use: [
|
||||||
|
MiniCssExtractPlugin.loader,
|
||||||
|
// 'postcss-loader',
|
||||||
|
'css-loader',
|
||||||
|
'sass-loader'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(js|jsx)$/,
|
||||||
|
exclude: /(node_modules|bower_components)/,
|
||||||
|
use: {
|
||||||
|
loader: 'babel-loader',
|
||||||
|
options: {
|
||||||
|
presets: ['@babel/preset-env']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new MiniCssExtractPlugin({
|
||||||
|
filename: `style.css`
|
||||||
|
})
|
||||||
|
],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
bulma: path.resolve(__dirname, 'node_modules/bulma'),
|
||||||
|
axios: path.resolve(__dirname, 'node_modules/axios/dist/axios.js'),
|
||||||
|
vue: path.resolve(__dirname, 'node_modules/vue/dist/vue.js')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,9 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var { merge } = require('webpack-merge');
|
||||||
|
var common = require('./webpack.common');
|
||||||
|
|
||||||
|
module.exports = merge(common, {
|
||||||
|
mode: 'development',
|
||||||
|
devtool: 'inline-source-map'
|
||||||
|
});
|
|
@ -0,0 +1,8 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var { merge } = require('webpack-merge');
|
||||||
|
var common = require('./webpack.common');
|
||||||
|
|
||||||
|
module.exports = merge(common, {
|
||||||
|
mode: 'production'
|
||||||
|
});
|
Loading…
Reference in New Issue