Redesign UI to add some color,
eliminate the FAB, and make dialogs look better Add an about page
This commit is contained in:
parent
a291d68fa9
commit
67a40cfb84
9 changed files with 318 additions and 51 deletions
104
package-lock.json
generated
104
package-lock.json
generated
|
@ -2767,6 +2767,15 @@
|
||||||
"integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
|
"integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"get-npm-tarball-url": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-POrVRGyS9X5w+855/H46JGVYBGuVgJXyIkbsTCzW+sv5x2qH+rfQjc7652DzkgOskF+cqLevA2En7V0hu0gZCg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"normalize-registry-url": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"get-stream": {
|
"get-stream": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
|
||||||
|
@ -3925,6 +3934,34 @@
|
||||||
"to-regex": "^3.0.1"
|
"to-regex": "^3.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"needle": {
|
||||||
|
"version": "2.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/needle/-/needle-2.3.2.tgz",
|
||||||
|
"integrity": "sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"debug": "^3.2.6",
|
||||||
|
"iconv-lite": "^0.4.4",
|
||||||
|
"sax": "^1.2.4"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "3.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||||
|
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"negotiator": {
|
"negotiator": {
|
||||||
"version": "0.6.2",
|
"version": "0.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
||||||
|
@ -4013,6 +4050,12 @@
|
||||||
"integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
|
"integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"normalize-registry-url": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/normalize-registry-url/-/normalize-registry-url-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-0v6T4851b72ykk5zEtFoN4QX/Fqyk7pouIj9xZyAvAe9jlDhAwT4z6FlwsoQCHjeuK2EGUoAwy/F4y4B1uZq9A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"npm-run-path": {
|
"npm-run-path": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
||||||
|
@ -4857,6 +4900,12 @@
|
||||||
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
|
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"sax": {
|
||||||
|
"version": "1.2.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
|
||||||
|
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"schema-utils": {
|
"schema-utils": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
|
||||||
|
@ -5258,6 +5307,37 @@
|
||||||
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
|
"integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"spdx-exceptions": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"spdx-expression-parse": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"spdx-exceptions": "^2.1.0",
|
||||||
|
"spdx-license-ids": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spdx-expression-validate": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"spdx-expression-parse": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spdx-license-ids": {
|
||||||
|
"version": "3.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
||||||
|
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"spdy": {
|
"spdy": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz",
|
||||||
|
@ -5414,6 +5494,16 @@
|
||||||
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
|
"integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"string-replace-loader": {
|
||||||
|
"version": "2.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-2.2.0.tgz",
|
||||||
|
"integrity": "sha512-Ukt4ZC8+xVWdBRut3/iwnPJCNL1yV8AbVKXn8UcWdYrHgtuW4UDDAbBSi/J/CQDEWQBt824AJvPYahF23eJLRg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"loader-utils": "^1.2.3",
|
||||||
|
"schema-utils": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"string-width": {
|
"string-width": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
|
||||||
|
@ -6125,6 +6215,20 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"webpack-license-plugin": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/webpack-license-plugin/-/webpack-license-plugin-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-CYqPx4f8e7thGIrv5aruoUAF8sTw94o3dGhZbALc4szYIjdQPGLO3lCB/YLUj7UaI+JJeuboVz0lu3QPx5k+ZA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^2.4.1",
|
||||||
|
"get-npm-tarball-url": "^2.0.1",
|
||||||
|
"lodash": "^4.17.10",
|
||||||
|
"needle": "^2.2.4",
|
||||||
|
"spdx-expression-validate": "^2.0.0",
|
||||||
|
"webpack-sources": "^1.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"webpack-log": {
|
"webpack-log": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"idb-keyval": "^3.2.0",
|
"idb-keyval": "^3.2.0",
|
||||||
"reset-css": "^5.0.1",
|
"reset-css": "^5.0.1",
|
||||||
"serviceworker-webpack-plugin": "^1.0.1",
|
"serviceworker-webpack-plugin": "^1.0.1",
|
||||||
|
"string-replace-loader": "^2.2.0",
|
||||||
"style-loader": "^1.1.3",
|
"style-loader": "^1.1.3",
|
||||||
"svelte": "^3.4.1",
|
"svelte": "^3.4.1",
|
||||||
"svelte-loader": "^2.13.4",
|
"svelte-loader": "^2.13.4",
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
"webpack": "^4.31.0",
|
"webpack": "^4.31.0",
|
||||||
"webpack-cli": "^3.3.2",
|
"webpack-cli": "^3.3.2",
|
||||||
"webpack-dev-server": "^3.4.1",
|
"webpack-dev-server": "^3.4.1",
|
||||||
|
"webpack-license-plugin": "^4.1.1",
|
||||||
"webpack-merge": "^4.2.2",
|
"webpack-merge": "^4.2.2",
|
||||||
"workbox-cacheable-response": "^5.0.0",
|
"workbox-cacheable-response": "^5.0.0",
|
||||||
"workbox-expiration": "^5.0.0",
|
"workbox-expiration": "^5.0.0",
|
||||||
|
|
64
src/ncounter/About.svelte
Normal file
64
src/ncounter/About.svelte
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
<div class="about">
|
||||||
|
<button class="close" on:click={ () => { dispatch('close'); } }><i class="material-icons">close</i></button>
|
||||||
|
<header>
|
||||||
|
<h1>NCounter</h1>
|
||||||
|
<h2>Release |BUILD_DATE|</h2>
|
||||||
|
<h2>© |BUILD_YEAR|</h2>
|
||||||
|
</header>
|
||||||
|
<div class="licenses">
|
||||||
|
<h2>Open Source License Information</h2>
|
||||||
|
<Licenses></Licenses>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
import Licenses from './Licenses.svelte';
|
||||||
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
.about {
|
||||||
|
background-color: white;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 3;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
|
||||||
|
overflow: auto;
|
||||||
|
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about > header {
|
||||||
|
flex: center;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.licenses h2{
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close {
|
||||||
|
position: absolute;
|
||||||
|
top: 15px;
|
||||||
|
right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.licenses {
|
||||||
|
margin-top: 32px;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,27 +1,36 @@
|
||||||
<div class="app">
|
<div class="app">
|
||||||
<button class="add" on:click="{ showAdd }"><i class="material-icons">add</i></button>
|
<div class="counter-list">
|
||||||
{#each $counters as counter}
|
{#each $counters as counter}
|
||||||
<Counter counterId={ counter.id }></Counter>
|
<Counter counterId={ counter.id }></Counter>
|
||||||
{/each}
|
{/each}
|
||||||
|
</div>
|
||||||
|
<div class="tool-bar">
|
||||||
|
<button class="add" on:click="{ showAdd }"><i class="material-icons">add</i></button>
|
||||||
|
<button class="about" on:click="{ () => { showAbout = true; } }">?</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{#if showAddDialog}
|
{#if showAddDialog}
|
||||||
<div class="dialog">
|
<div class="dialog">
|
||||||
<div class="dialog-content">
|
<div class="dialog-content">
|
||||||
<label>Name: <input type="text" bind:value={newCounter.title} use:focus/></label>
|
<label>Name<input type="text" bind:value={newCounter.title} use:focus/></label>
|
||||||
<label>Initial Value: <input type="number" bind:value={newCounter.initialValue} /></label>
|
<label>Initial Value<input type="number" bind:value={newCounter.initialValue} /></label>
|
||||||
<label>Target: <input type="number" bind:value={newCounter.max} /></label>
|
<label>Target<input type="number" bind:value={newCounter.max} /></label>
|
||||||
<label>Save history: <input type="checkbox" bind:checked={newCounter.saveHistory} /></label>
|
<label>Save history<input type="checkbox" bind:checked={newCounter.saveHistory} /></label>
|
||||||
<button on:click={ () => { showAddDialog = false; } }>Cancel</button>
|
<button on:click={ () => { showAddDialog = false; } }>Cancel</button>
|
||||||
<button class="ok" on:click={ add }>OK</button>
|
<button class="ok" on:click={ add }>OK</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if showAbout}
|
||||||
|
<About on:close="{ () => { showAbout = false; } }"></About>
|
||||||
|
{/if}
|
||||||
<script>
|
<script>
|
||||||
|
import About from './About.svelte';
|
||||||
import Counter from './Counter.svelte';
|
import Counter from './Counter.svelte';
|
||||||
import { counters } from './db.js';
|
import { counters } from './db.js';
|
||||||
|
|
||||||
let showAddDialog = false;
|
let showAddDialog = false;
|
||||||
|
let showAbout = false;
|
||||||
let newCounter = null;
|
let newCounter = null;
|
||||||
|
|
||||||
function focus(node){
|
function focus(node){
|
||||||
|
@ -50,34 +59,16 @@ function add(){
|
||||||
showAddDialog = false;
|
showAddDialog = false;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style lang="scss">
|
||||||
.add {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
position: fixed;
|
|
||||||
bottom: 15px;
|
|
||||||
right: 15px;
|
|
||||||
|
|
||||||
z-index: 2;
|
|
||||||
|
|
||||||
background-color: #90C090;
|
|
||||||
border-radius: 50%;
|
|
||||||
|
|
||||||
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
|
|
||||||
|
|
||||||
width: 40px;
|
|
||||||
height: 40px;
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ok {
|
.ok {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app {
|
.app {
|
||||||
padding: 5px;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
|
@ -85,7 +76,35 @@ function add(){
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.counter-list {
|
||||||
|
padding: 5px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
flex: 1 0 0;
|
||||||
|
|
||||||
|
background-color: #8baec6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tool-bar {
|
||||||
|
flex: none;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
border-top: 2px solid #3A86B7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tool-bar > button {
|
||||||
|
background-color: #3A86B7;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tool-bar > button:focus, .tool-bar > button:hover {
|
||||||
|
border: 2px solid #303030;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about {
|
||||||
|
margin-left: auto;
|
||||||
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -27,10 +27,10 @@
|
||||||
{#if showEditDialog}
|
{#if showEditDialog}
|
||||||
<div class="dialog">
|
<div class="dialog">
|
||||||
<div class="dialog-content">
|
<div class="dialog-content">
|
||||||
<label>Name: <input type="text" bind:value={editingCounter.title} use:focus/></label>
|
<label>Name<input type="text" bind:value={editingCounter.title} use:focus/></label>
|
||||||
<label>Initial Value: <input type="number" bind:value={editingCounter.initialValue} /></label>
|
<label>Initial Value<input type="number" bind:value={editingCounter.initialValue} /></label>
|
||||||
<label>Target: <input type="number" bind:value={editingCounter.max} /></label>
|
<label>Target<input type="number" bind:value={editingCounter.max} /></label>
|
||||||
<label>Save history: <input type="checkbox" bind:checked={editingCounter.saveHistory} /></label>
|
<label>Save history<input type="checkbox" bind:checked={editingCounter.saveHistory} /></label>
|
||||||
<button on:click={ () => { showEditDialog = false; } }>Cancel</button>
|
<button on:click={ () => { showEditDialog = false; } }>Cancel</button>
|
||||||
<button class="ok" on:click={ finishEdit }>OK</button>
|
<button class="ok" on:click={ finishEdit }>OK</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -122,7 +122,10 @@ function remove(){
|
||||||
<style>
|
<style>
|
||||||
.counter{
|
.counter{
|
||||||
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
|
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
|
||||||
margin-bottom: 12px;
|
|
||||||
|
background-color: #FCFCFC;
|
||||||
|
|
||||||
|
margin-bottom: 4px;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
@ -130,10 +133,6 @@ function remove(){
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.counter:last-child {
|
|
||||||
margin-bottom: 72px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.controls {
|
.controls {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
@ -151,7 +150,7 @@ header {
|
||||||
}
|
}
|
||||||
|
|
||||||
.reset {
|
.reset {
|
||||||
margin-left: 24px;
|
margin-left: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reset + button {
|
.reset + button {
|
||||||
|
@ -159,7 +158,7 @@ header {
|
||||||
}
|
}
|
||||||
|
|
||||||
.history {
|
.history {
|
||||||
margin-right: 24px;
|
margin-right: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-value {
|
.dialog-value {
|
||||||
|
|
|
@ -107,8 +107,6 @@ function close(){
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
|
|
||||||
overflow: auto;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
|
@ -124,6 +122,8 @@ function close(){
|
||||||
|
|
||||||
.table-container {
|
.table-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.close {
|
.close {
|
||||||
|
|
39
src/ncounter/Licenses.svelte
Normal file
39
src/ncounter/Licenses.svelte
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<div>
|
||||||
|
{#each licenses as license}
|
||||||
|
<header>
|
||||||
|
<h1>{license.name} by {license.author}</h1>
|
||||||
|
<div>Source: <a href="{license.repository}" target="_blank">{license.repository}</a></div>
|
||||||
|
</header>
|
||||||
|
<pre>{license.licenseText}</pre>
|
||||||
|
{/each}
|
||||||
|
{#if !licenses}
|
||||||
|
<progress></progress>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
let licenses = [];
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
licenses = await fetch('oss-licenses.json')
|
||||||
|
.then(response => {
|
||||||
|
if(response.ok)
|
||||||
|
return response.json();
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
header {
|
||||||
|
margin-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
background-color: #F0F0F0;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -25,7 +25,21 @@ body {
|
||||||
button {
|
button {
|
||||||
background: 0;
|
background: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
|
||||||
|
width: 36px;
|
||||||
height: 36px;
|
height: 36px;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus, button:hover {
|
||||||
|
border: 2px solid #3A86B7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog {
|
.dialog {
|
||||||
|
@ -47,14 +61,13 @@ button {
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-content {
|
.dialog-content {
|
||||||
background-color: #E0E0E0;
|
background-color: #FCFCFC;
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
|
|
||||||
width: 300px;
|
width: 315px;
|
||||||
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
|
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
|
||||||
padding: 5px;
|
padding: 10px;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
@ -64,16 +77,30 @@ button {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
|
align-items: center;
|
||||||
|
height: 26px;
|
||||||
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-content > label > input {
|
.dialog-content > label > input {
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dialog-content input[type='text'], .dialog-content input[type='number'] {
|
||||||
|
width: 175px;
|
||||||
|
}
|
||||||
|
|
||||||
.dialog-content button {
|
.dialog-content button {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dialog-content button:focus, .dialog-content button:hover {
|
||||||
|
border: 0;
|
||||||
|
outline: 2px solid #3A86B7;
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="text"],
|
input[type="text"],
|
||||||
|
|
|
@ -3,6 +3,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||||
const GoogleFontsPlugin = require('@beyonk/google-fonts-webpack-plugin');
|
const GoogleFontsPlugin = require('@beyonk/google-fonts-webpack-plugin');
|
||||||
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
||||||
const ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin');
|
const ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin');
|
||||||
|
const LicensePlugin = require('webpack-license-plugin');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
entry: './src/index.js',
|
entry: './src/index.js',
|
||||||
|
@ -21,7 +22,8 @@ module.exports = {
|
||||||
new ServiceWorkerWebpackPlugin({
|
new ServiceWorkerWebpackPlugin({
|
||||||
entry: path.join(__dirname, 'src/sw.js'),
|
entry: path.join(__dirname, 'src/sw.js'),
|
||||||
publicPath: './'
|
publicPath: './'
|
||||||
})
|
}),
|
||||||
|
new LicensePlugin()
|
||||||
],
|
],
|
||||||
output: {
|
output: {
|
||||||
filename: 'index.js',
|
filename: 'index.js',
|
||||||
|
@ -32,7 +34,18 @@ module.exports = {
|
||||||
{
|
{
|
||||||
test: /\.svelte$/,
|
test: /\.svelte$/,
|
||||||
exclude: /node_modules/,
|
exclude: /node_modules/,
|
||||||
loader: 'svelte-loader'
|
use: [
|
||||||
|
'svelte-loader',
|
||||||
|
{
|
||||||
|
loader: 'string-replace-loader',
|
||||||
|
options: {
|
||||||
|
multiple: [
|
||||||
|
{ search: '|BUILD_YEAR|', replace: '2020' },
|
||||||
|
{ search: '|BUILD_DATE|', replace: '2020-02-28'}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.css$/,
|
test: /\.css$/,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue