copied fucking angular from htmlsupplier, I hate this shit, got at least 50 errors, now its only 100 warnings, but at least it doesnt die on me, fuck this shit

This commit is contained in:
Daniel Hübleitner
2019-07-28 11:55:17 +02:00
parent cb1060dbca
commit 1e6621bb11
38 changed files with 4816 additions and 489 deletions
-3
View File
@@ -1,3 +0,0 @@
{
"httpPort": 8080
}
-1
View File
@@ -1 +0,0 @@
{"apiHost":"localhost","apiPort":10001}
+3256 -482
View File
File diff suppressed because it is too large Load Diff
+18 -3
View File
@@ -2,8 +2,8 @@
"name": "frontblock-admin", "name": "frontblock-admin",
"version": "1.0.0", "version": "1.0.0",
"scripts": { "scripts": {
"start": "npm run build; node --experimental-modules lib/FrontblockAdmin.js", "start": "webpack-dev-server --config static.webpack.config.dev.js --hot --open",
"build": "npm run clean; tsc; node_modules/.bin/webpack", "build": "npm run clean; webpack --display-error-details --config static.webpack.config.prod.js --progress --colors",
"clean": "rm -rf lib", "clean": "rm -rf lib",
"update-frontblock": "rm -rf node_modules/frontblock*; npm install" "update-frontblock": "rm -rf node_modules/frontblock*; npm install"
}, },
@@ -16,16 +16,31 @@
"dependencies": { "dependencies": {
"@types/express": "^4.17.0", "@types/express": "^4.17.0",
"@types/node": "^11.13.17", "@types/node": "^11.13.17",
"@types/webpack-env": "^1.14.0",
"@uirouter/angularjs": "^1.0.5",
"angular": "^1.7.8",
"autoprefixer": "^9.6.1",
"bsock": "^0.1.9", "bsock": "^0.1.9",
"css-loader": "^3.1.0",
"cssnano": "^4.1.10",
"express": "^4.16.4", "express": "^4.16.4",
"frontblock": "^0.4.3", "frontblock": "^0.4.3",
"frontblock-generic": "^0.4.0", "frontblock-generic": "^0.4.0",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"http": "0.0.0", "http": "0.0.0",
"key-file-storage": "^2.2.1", "key-file-storage": "^2.2.1",
"live-plugin-manager": "^0.13.2", "live-plugin-manager": "^0.13.2",
"log4js": "^4.4.0", "log4js": "^4.4.0",
"node-fetch": "^2.6.0", "node-fetch": "^2.6.0",
"socket.io": "^2.2.0" "node-sass": "^4.12.0",
"postcss-loader": "^3.0.0",
"sass-loader": "^7.1.0",
"socket.io": "^2.2.0",
"style-loader": "^0.23.1",
"ts-loader": "^6.0.4",
"tslint-loader": "^3.5.4",
"webpack-dev-server": "^3.7.2"
}, },
"devDependencies": { "devDependencies": {
"@types/jest": "^24.0.15", "@types/jest": "^24.0.15",
+6
View File
@@ -0,0 +1,6 @@
module.exports = {
plugins: {
autoprefixer: {},
cssnano: {}
}
};
+5
View File
@@ -0,0 +1,5 @@
export default class Controller {
private $rootScope;
static $inject: string[];
constructor($rootScope: any);
}
+8
View File
@@ -0,0 +1,8 @@
export default class Controller {
static $inject = ['$rootScope']
constructor(private $rootScope){
}
}
+7
View File
@@ -0,0 +1,7 @@
import './index.scss';
import rootCtrl from './controller';
declare const _default: {
template: string;
controller: typeof rootCtrl;
};
export default _default;
+34
View File
@@ -0,0 +1,34 @@
<div class="grid">
<aside class="sidenav">
<div class="sidenav__profile">
<a class="sidenav__brand-link" href="#">Front<span class="text-light">block</span></a>
<i class="fas fa-times sidenav__brand-close"></i>
</div>
<div class="row row--align-v-center row--align-h-center">
<ul class="navlist">
<li class="navlist__heading">wallets<i class="far fa-file-alt"></i></li>
<!--
<a ui-sref="btc" ui-sref-active="active">
<div class="navlist__subheading row row--align-v-center">
<span class="navlist__subheading-icon"><i class="fas fa-briefcase-medical"></i></span>
<span class="navlist__subheading-title">Bitcoin</span>
</div>
</a>
-->
<a ui-sref="todolist" ui-sref-active="active">
<div class="navlist__subheading row row--align-v-center">
<span class="navlist__subheading-icon"><i class="fas fa-users"></i></span>
<span class="navlist__subheading-title">ANOTHER ONE</span>
</div>
</a>
</ul>
</div>
</aside>
<main class="main">
<div ui-view class="view"></div>
</main>
<footer class="footer">
<p><span class="footer__copyright">&copy;</span> MIT license (open source)</p>
<p>by <a href="https://frontblock.me" target="_blank" class="footer__signature">Frontblock.me</a></p>
</footer>
</div>
+6
View File
@@ -0,0 +1,6 @@
.view {
height: 100%;
min-height: 300px;
}
+8
View File
@@ -0,0 +1,8 @@
import html from './index.html'
import './index.scss'
import rootCtrl from './controller'
export default {
template: html,
controller: rootCtrl
}
+2
View File
@@ -0,0 +1,2 @@
declare const _default: string;
export default _default;
+7
View File
@@ -0,0 +1,7 @@
import angular = require('angular')
import Root from './Root'
export default angular
.module('components', [])
.component('root', Root)
.name
+5
View File
@@ -0,0 +1,5 @@
declare function routerRegister($urlRouterProvider: any, $stateProvider: any): void;
declare namespace routerRegister {
var $inject: string[];
}
export default routerRegister;
+34
View File
@@ -0,0 +1,34 @@
const routePathes: Array<string> = [
'todo-list'
]
let routes: Array<object> = []
routePathes.forEach(path => {
const parentRoutes = require(`../views/${path}/route`).default
const { children } = parentRoutes
let childRoutes: Array<object> = []
if (children && children.length > 0) {
childRoutes = children.map(childRoute => {
childRoute.name = `${parentRoutes.name}.${childRoute.name}`
return childRoute
})
}
delete parentRoutes.children
childRoutes.push(parentRoutes)
routes = routes.concat(childRoutes)
})
function routerRegister($urlRouterProvider, $stateProvider): void {
$urlRouterProvider.otherwise('views')
routes.forEach(route => {
$stateProvider.state(route)
})
}
routerRegister.$inject = ['$urlRouterProvider', '$stateProvider']
export default routerRegister
+2
View File
@@ -0,0 +1,2 @@
declare const _default: string;
export default _default;
+7
View File
@@ -0,0 +1,7 @@
import angular = require('angular')
import todosVisible from './todosVisible'
export default angular
.module('filters', [])
.filter('todosVisible', () => todosVisible)
.name
+1
View File
@@ -0,0 +1 @@
export default function (todos: any, type: string): Array<object>;
+12
View File
@@ -0,0 +1,12 @@
export default function (todos, type: string): Array<object> {
switch (type) {
case 'All':
return todos
case 'Todo':
return todos.filter(todo => !todo.complete)
case 'Done':
return todos.filter(todo => todo.complete)
default:
throw new Error('Unknown type ' + type)
}
}
+2
View File
@@ -0,0 +1,2 @@
/// <reference path="type.d.ts" />
import './index.scss';
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<root></root>
</body>
</html>
+897
View File
@@ -0,0 +1,897 @@
html, body {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif; }
a {
text-decoration: none; }
.break-word {
word-wrap: break-word;
}
.text-light {
font-weight: 300; }
.monospace {
font-family: monospace;
font-size: 90%
}
.text-bold {
font-weight: bold; }
.row {
}
.row--align-v-center {
align-items: center; }
.row--align-h-center {
justify-content: center; }
.grid {
position: relative;
display: grid;
grid-template-columns: 100%;
grid-template-rows: 50px 1fr 50px;
grid-template-areas: 'header' 'main' 'footer';
height: 100vh;
overflow-x: hidden; }
.grid--noscroll {
overflow-y: hidden; }
.header {
grid-area: header;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #F9FAFC; }
.header__menu {
position: fixed;
padding: 13px;
left: 12px;
background-color: #DADAE3;
border-radius: 50%;
z-index: 1; }
.header__menu:hover {
cursor: pointer; }
.header__search {
margin-left: 55px;
font-size: 20px;
color: #777; }
.header__input {
border: none;
background: transparent;
padding: 12px;
font-size: 20px;
color: #777; }
.header__input:focus {
outline: none;
border: none; }
.header__avatar {
background-size: cover;
background-repeat: no-repeat;
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.2);
position: relative;
margin: 0 26px;
width: 35px;
height: 35px;
cursor: pointer; }
.header__avatar:after {
position: absolute;
content: "";
width: 6px;
height: 6px;
background: none;
border-left: 2px solid #777;
border-bottom: 2px solid #777;
transform: rotate(-45deg) translateY(-50%);
top: 50%;
right: -18px; }
.dropdown {
position: absolute;
top: 54px;
right: -16px;
width: 220px;
height: auto;
z-index: 1;
background-color: #fff;
border-radius: 4px;
visibility: hidden;
opacity: 0;
transform: translateY(-10px);
transition: all .3s;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 0 1px rgba(0, 0, 0, 0.08); }
.dropdown__list {
margin: 0;
padding: 0;
list-style-type: none; }
.dropdown__list-item {
padding: 12px 24px;
color: #777;
text-transform: capitalize; }
.dropdown__list-item:hover {
background-color: rgba(0, 0, 0, 0.1); }
.dropdown__icon {
color: #1BBAE1; }
.dropdown__title {
margin-left: 10px; }
.dropdown:before {
position: absolute;
content: "";
top: -6px;
right: 30px;
width: 0;
height: 0;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-bottom: 6px solid #FFF; }
.dropdown--active {
visibility: visible;
opacity: 1;
transform: translateY(0); }
.sidenav {
position: fixed;
grid-area: sidenav;
height: 100%;
overflow-y: auto;
background-color: #394263;
color: #FFF;
width: 220px;
transform: translateX(-245px);
transition: all .6s ease-in-out;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 0 1px rgba(0, 0, 0, 0.08);
z-index: 2; }
.sidenav__brand {
position: relative;
display: flex;
align-items: center;
padding: 0 16px;
height: 50px;
background-color: rgba(0, 0, 0, 0.15); }
.sidenav__brand-icon {
margin-top: 2px;
font-size: 14px;
color: rgba(255, 255, 255, 0.5); }
.sidenav__brand-close {
position: absolute;
right: 8px;
top: 8px;
visibility: visible;
color: rgba(255, 255, 255, 0.5);
cursor: pointer; }
.sidenav__brand-link {
font-size: 18px;
font-weight: bold;
color: #FFF;
margin: 0 15px;
letter-spacing: 1.5px; }
.sidenav__profile {
display: flex;
align-items: center;
min-height: 90px;
background-color: rgba(255, 255, 255, 0.1); }
.sidenav__profile-avatar {
background-size: cover;
background-repeat: no-repeat;
border-radius: 50%;
border: 2px solid rgba(255, 255, 255, 0.2);
height: 64px;
width: 64px;
margin: 0 15px; }
.sidenav__profile-title {
font-size: 17px;
letter-spacing: 1px; }
.sidenav__arrow {
position: absolute;
content: "";
width: 6px;
height: 6px;
top: 50%;
right: 20px;
border-left: 2px solid rgba(255, 255, 255, 0.5);
border-bottom: 2px solid rgba(255, 255, 255, 0.5);
transform: translateY(-50%) rotate(225deg); }
.sidenav__sublist {
list-style-type: none;
margin: 0;
padding: 10px 0 0; }
.sidenav--active {
transform: translateX(0); }
.navlist {
width: 220px;
padding: 0;
margin: 0;
background-color: #394263;
list-style-type: none; }
.navlist__heading {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 16px 3px;
color: rgba(255, 255, 255, 0.5);
text-transform: uppercase;
font-size: 15px; }
.navlist__subheading {
position: relative;
padding: 10px 30px;
color: #fff;
font-size: 16px;
text-transform: capitalize; }
.navlist__subheading-icon {
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
color: rgba(255, 255, 255, 0.5);
width: 12px; }
.navlist__subheading-title {
margin: 0 15px; }
.navlist__subheading:after {
position: absolute;
content: "";
height: 6px;
width: 6px;
top: 17px;
right: 25px;
border-left: 1px solid rgba(255, 255, 255, 0.5);
border-bottom: 1px solid rgba(255, 255, 255, 0.5);
transform: rotate(225deg);
transition: all .2s; }
.navlist__subheading:hover {
background-color: #303753;
cursor: pointer; }
.navlist__subheading--open {
background-color: #303753; }
.navlist__subheading--open:after {
transform: rotate(315deg); }
.navlist .sublist {
padding: 0;
margin: 0;
list-style-type: none;
background-color: #262c43;
visibility: visible;
overflow: hidden;
max-height: 220px;
transition: all .4s ease-in-out; }
.navlist .sublist__item {
padding: 8px;
text-transform: capitalize;
padding: 8px 30px;
color: #D3D3D3; }
.navlist .sublist__item:first-child {
padding-top: 15px; }
.navlist .sublist__item:hover {
background-color: rgba(255, 255, 255, 0.1);
cursor: pointer; }
.navlist .sublist--hidden {
visibility: hidden;
max-height: 0; }
.errorDisplay {
background: rgba(180, 55, 87, 0.5);
padding: 10px;
}
.main {
grid-area: main;
background-color: #EAEDF1;
color: #394263; }
.main__cards {
display: block;
column-count: 1;
column-gap: 20px;
margin: 20px; }
.main-header {
position: relative;
display: flex;
justify-content: space-between;
height: 250px;
color: #FFF;
background-size: cover;
margin-bottom: 20px; }
.main-header__intro-wrapper {
display: flex;
flex: 1;
flex-direction: column;
align-items: center;
justify-content: space-between;
height: 160px;
padding: 12px 30px;
background: rgba(255, 255, 255, 0.12);
font-size: 26px;
letter-spacing: 1px; }
.main-header__welcome {
display: flex;
flex-direction: column;
align-items: center; }
.main-header__welcome-title {
margin-bottom: 8px;
font-size: 26px; }
.main-header__welcome-subtitle {
font-size: 18px; }
.quickview {
display: grid;
grid-auto-flow: column;
grid-gap: 60px; }
.quickview__item {
display: flex;
align-items: center;
flex-direction: column; }
.quickview__item-total {
margin-bottom: 2px;
font-size: 32px; }
.quickview__item-description {
font-size: 16px;
text-align: center; }
.main-overview {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(265px, 1fr));
grid-auto-rows: 94px;
grid-gap: 30px;
margin: 20px; }
.overviewcard {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px;
background-color: #FFF;
transform: translateY(0);
transition: all .3s; }
.overviewcard-icon {
display: flex;
align-items: center;
justify-content: center;
height: 60px;
width: 60px;
border-radius: 50%;
font-size: 21px;
color: #fff; }
.overviewcard-icon--document {
background-color: #e67e22; }
.overviewcard-icon--calendar {
background-color: #27ae60; }
.overviewcard-icon--mail {
background-color: #e74c3c; }
.overviewcard-icon--photo {
background-color: #af64cc; }
.overviewcard-description {
display: flex;
flex-direction: column;
align-items: center; }
.overviewcard-title {
font-size: 18px;
color: #1BBAE1;
margin: 0; }
.overviewcard-subtitle {
margin: 2px;
color: #777; }
.overviewcard:hover {
transform: translateY(-3px);
box-shadow: 0 5px 5px rgba(0, 0, 0, 0.1);
cursor: pointer; }
.card {
display: flex;
flex-direction: column;
width: 100%;
background-color: #fff;
margin-bottom: 20px;
-webkit-column-break-inside: avoid; }
.card__header {
display: flex;
align-items: center;
justify-content: space-between;
height: 50px;
background-color: #394263;
color: #FFF; }
.card__header-title {
margin: 0 20px;
font-size: 20px;
letter-spacing: 1.2px; }
.card__header-link {
font-size: 16px;
color: #1BBAE1;
letter-spacing: normal;
display: inline-block; }
.card__main {
position: relative;
padding-right: 20px;
background-color: #FFF; }
.card__main:after {
content: "";
position: absolute;
top: 0;
left: 120px;
bottom: 0;
width: 2px;
background-color: #f0f0f0; }
.card__secondary {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-auto-rows: 100px;
grid-gap: 25px;
padding: 20px;
background-color: #FFF; }
.card__photo {
background-size: cover;
background-repeat: no-repeat;
background-color: slategray;
transform: scale(1);
transition: transform .3s ease-in-out;
width: 100%;
height: 100%; }
.card__photo:hover {
transform: scale(1.1);
cursor: pointer; }
.card__photo-wrapper {
overflow: hidden; }
.card__row {
position: relative;
display: flex;
flex: 1;
margin: 15px 15px 15px; }
.card__icon {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
content: "";
width: 30px;
height: 30px;
top: 0;
left: 121px;
transform: translateX(-50%);
border-radius: 50%;
color: #FFF;
background-color: #1BBAE1;
z-index: 1; }
.card__row:nth-child(even) .card__icon {
background-color: #e74c3c; }
.card__time {
display: flex;
flex: 1;
justify-content: flex-end;
max-width: 80px;
margin-left: 15px;
text-align: right;
font-size: 14px;
line-height: 2; }
.card__detail {
display: flex;
flex: 1;
flex-direction: column;
padding-left: 12px;
margin-left: 48px;
transform: translateX(0);
transition: all .3s; }
.card__detail:hover {
background-color: #f0f0f0;
transform: translateX(4px);
cursor: pointer; }
.card__source {
line-height: 1.8;
color: #1BBAE1; }
.card__note {
margin: 10px 0;
color: #777; }
.card--finance {
position: relative; }
.settings {
display: flex;
margin: 8px;
align-self: flex-start;
background-color: rgba(255, 255, 255, 0.5);
border: 1px solid rgba(0, 0, 0, 0.1);
border-radius: 2px; }
.settings__block {
display: flex;
align-items: center;
justify-content: center;
padding: 4px;
color: #394263;
font-size: 11px; }
.settings__block:not(:last-child) {
border-right: 1px solid rgba(0, 0, 0, 0.1); }
.settings__icon {
padding: 0px 3px;
font-size: 12px; }
.settings__icon:hover {
background-color: rgba(255, 255, 255, 0.8);
cursor: pointer; }
.settings:hover {
background-color: #fff;
cursor: pointer; }
.documents {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(105px, 1fr));
grid-auto-rows: 214px;
grid-gap: 12px;
height: auto;
background-color: #FFF; }
.document {
display: flex;
align-items: center;
justify-content: center;
margin: 15px 0 0;
flex-direction: column; }
.document__img {
width: 105px;
height: 136px;
background-size: cover;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
cursor: pointer;
transition: transform .3s ease; }
.document__img:hover {
transform: translateY(-4px); }
.document__title {
margin: 8px 0 2px;
color: #777; }
.document__date {
font-size: 10px; }
#chartdiv {
width: 100%;
height: 300px;
font-size: 11px;
min-width: 0; }
.footer {
grid-area: footer;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 16px;
color: #777;
background-color: #FFF; }
.footer__copyright {
color: #1BBAE1; }
.footer__icon {
color: #e74c3c; }
.footer__signature {
color: #1BBAE1;
cursor: pointer;
font-weight: bold; }
@media only screen and (min-width: 46.875em) {
.grid {
display: grid;
grid-template-columns: 220px calc(100% - 220px);
grid-template-rows: 0px 1fr 50px;
grid-template-areas: 'sidenav header' 'sidenav main' 'sidenav footer';
height: 100vh; }
.grid__no-head {
display: grid;
grid-template-columns: 220px calc(100% - 220px);
grid-template-rows: 0px 1fr 0px;
grid-template-areas: 'sidenav header' 'sidenav main' 'sidenav footer';
height: calc(100%); }
.sidenav {
position: relative;
transform: translateX(0); }
.sidenav__brand-close {
visibility: hidden; }
.main-header__intro-wrapper {
padding: 0 30px; }
.header__menu {
display: none; }
.header__search {
margin-left: 20px; }
.header__avatar {
width: 40px;
height: 40px; } }
@media only screen and (min-width: 65.625em) {
.main__cards {
column-count: 2; }
.main-header__intro-wrapper {
flex-direction: row; }
.main-header__welcome {
align-items: flex-start; } }
table {
border-spacing: 1;
border-collapse: collapse;
background: white;
overflow: hidden;
width: 100%;
margin: 0 auto;
position: relative;
}
table * {
position: relative;
}
table td, table th {
padding-left: 8px;
}
table thead tr {
height: 50px;
background: #394263;
}
table tbody tr {
height: 50px;
}
table tbody tr:last-child {
border: 0;
}
table td, table th {
text-align: left;
}
table td.l, table th.l {
text-align: right;
}
table td.c, table th.c {
text-align: center;
}
table td.r, table th.r {
text-align: center;
}
.table100-head th{
color: #fff;
line-height: 1.2;
font-weight: unset;
}
tbody tr:nth-child(even) {
background-color: #f5f5f5;
}
tbody tr {
font-size: 15px;
color: #808080;
line-height: 1.2;
font-weight: unset;
}
tbody tr:hover {
color: #555555;
background-color: #f5f5f5;
cursor: pointer;
}
.column1 {
padding-left: 40px;
width: 280px;
}
.column2 {
width: 280px;
}
.column3 {
width: 280px;
}
.column4 {
width: 280px;
}
.column5 {
width: 170px;
text-align: right;
}
.column6 {
width: 222px;
text-align: right;
padding-right: 62px;
}
@media screen and (max-width: 1050px) {
table {
display: block;
}
table > *, table tr, table td, table th {
display: block;
}
table thead {
display: none;
}
table tbody tr {
height: auto;
padding: 37px 0;
}
table tbody tr td {
padding-left: 40% !important;
margin-bottom: 24px;
}
table tbody tr td:last-child {
margin-bottom: 0;
}
table tbody tr td:before {
font-size: 14px;
color: #999999;
line-height: 1.2;
font-weight: unset;
position: absolute;
width: 40%;
left: 30px;
top: 0;
}
table.t1 tbody tr td:nth-child(1):before {
content: "Address";
}
table.t1 tbody tr td:nth-child(2):before {
content: "Balance";
}
table.t1 tbody tr td:nth-child(3):before {
content: "Unconfirmed";
}
table.t1 tbody tr td:nth-child(4):before {
content: "Total";
}
table.t2 tbody tr td:nth-child(1):before {
content: "Type";
}
table.t2 tbody tr td:nth-child(2):before {
content: "Value";
}
table.t3 tbody tr:nth-child(1) td:nth-child(1) {
display: none;
}
table.t3 tbody tr:nth-child(1) td:nth-child(2):before {
content: "To";
}
table.t3 tbody tr:nth-child(2) td:nth-child(1){
display: none;
}
table.t3 tbody tr:nth-child(2) td:nth-child(2):before {
content: "Amount";
}
.column4,
.column5,
.column6 {
text-align: left;
}
.column4,
.column5,
.column6,
.column1,
.column2,
.column3 {
width: 100%;
}
tbody tr {
font-size: 14px;
}
}
@media (max-width: 576px) {
.container-table100 {
padding-left: 15px;
padding-right: 15px;
}
}
.qtip {
display: inline-block;
position: relative;
cursor: pointer;
color: #3bb4e5;
border-bottom: 0.05em dotted #3bb4e5;
box-sizing: border-box;
font-style: normal;
transition:all .25s ease-in-out;
z-index: 10000
}
.qtip:hover {color:#069;border-bottom:0.05em dotted #069}
/*the tip*/
.qtip:before {
content: attr(data-tip);
font-size: 14px;
position: absolute;
background: rgba(10, 20, 30, 0.85);
color: #fff;
line-height: 1.2em;
padding: 0.5em;
font-style: normal;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
min-width: 120px;
text-align: center;
opacity: 0;
visibility: hidden;
transition: all .3s ease-in-out;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
font-family: sans-serif;
letter-spacing: 0;
font-weight: 600
}
.qtip:after {
width: 0;
height: 0;
border-style: solid;
content: '';
position: absolute;
opacity: 0;
visibility: hidden;
transition: all .3s ease-in-out
}
.qtip:hover:before,
.qtip:hover:after {
visibility: visible;
opacity: 1
}
/*top*/
.qtip.tip-top:before {
top: 0;
left: 50%;
transform: translate(-50%, calc(-100% - 8px));
box-sizing: border-box;
border-radius: 3px;
}
.qtip.tip-top:after {
border-width: 8px 8px 0 8px;
border-color: rgba(10, 20, 30, 0.85) transparent transparent transparent;
top: -8px;
left: 50%;
transform: translate(-50%, 0);
}
/*bottom*/
.qtip.tip-bottom:before {
bottom: 0;
left: 50%;
transform: translate(-50%, calc(100% + 8px));
box-sizing: border-box;
border-radius: 3px;
}
.qtip.tip-bottom:after {
border-width: 0 8px 8px 8px;
border-color: transparent transparent rgba(10, 20, 30, 0.85) transparent;
bottom: -8px;
left: 50%;
transform: translate(-50%, 0);
}
/*left*/
.qtip.tip-left:before {
left: 0;
top: 50%;
transform: translate(calc(-100% - 8px), -50%);
box-sizing: border-box;
border-radius: 3px;
}
.qtip.tip-left:after {
border-width: 8px 0 8px 8px;
border-color: transparent transparent transparent rgba(10, 20, 30, 0.85);
left: -8px;
top: 50%;
transform: translate(0, -50%);
}
/*right*/
.qtip.tip-right:before {
right: 0;
top: 50%;
transform: translate(calc(100% + 8px), -50%);
box-sizing: border-box;
border-radius: 3px;
}
.qtip.tip-right:after {
border-width: 8px 8px 8px 0;
border-color: transparent rgba(10, 20, 30, 0.85) transparent transparent;
right: -8px;
top: 50%;
transform: translate(0, -50%);
}
+24
View File
@@ -0,0 +1,24 @@
/// <reference path='./type.d.ts'/>
import './index.scss'
import angular = require('angular')
import uiRouter from '@uirouter/angularjs'
import router from './config/routes.config'
import components from './components'
import views from './views'
import filters from './filters'
angular
.module('app', [
uiRouter,
components,
views,
filters
])
.config(router)
angular.bootstrap(document, ['app'])
if (module.hot) {
module.hot.accept()
}
View File
+7
View File
@@ -0,0 +1,7 @@
class Log {
info(info) {
alert(info)
}
}
export default Log
+8
View File
@@ -0,0 +1,8 @@
declare module '*.html' {
const content: string
export default content
}
declare function require(arg: string): any
declare var module
+2
View File
@@ -0,0 +1,2 @@
declare const _default: string;
export default _default;
+7
View File
@@ -0,0 +1,7 @@
import angular = require('angular')
import TodoList from './todo-list'
export default angular
.module('wallets', [])
.component('todolist', TodoList)
.name
+13
View File
@@ -0,0 +1,13 @@
export default class TodoListCtrl {
private bip32;
static $inject: string[];
todos: any[];
id: number;
todo: string;
todoTypes: string[];
visibleType: string;
constructor(bip32: any);
handleSubmit(e: any): void;
toggleTodo(curTodo: any): void;
toggleType(type: string): void;
}
+23
View File
@@ -0,0 +1,23 @@
export default class TodoListCtrl {
static $inject = ['bip32']
todos = []
id = 0
todo: string
todoTypes = ['All', 'Todo', 'Done']
visibleType = 'All'
constructor(private bip32) {
}
handleSubmit(e): void {
if (e.keyCode !== 13) {
return
}
}
toggleType(type: string): void {
this.visibleType = type
}
}
+7
View File
@@ -0,0 +1,7 @@
import ctrl from './controller';
import './index.scss';
declare const _default: {
template: string;
controller: typeof ctrl;
};
export default _default;
+9
View File
@@ -0,0 +1,9 @@
<div class="todo-list">
<ul class="todos-type">
<li ng-repeat="type in $ctrl.todoTypes" ng-click="$ctrl.toggleType(type)" ng-class="{active:type===$ctrl.visibleType}">{{ type }}</li>
</ul>
<input type="text" class="input" ng-model="$ctrl.todo" ng-keyup="$ctrl.handleSubmit($event)" />
<ul class="todos">
<li ng-repeat="todo in $ctrl.todos | todosVisible:$ctrl.visibleType" ng-click="$ctrl.toggleTodo(todo)" ng-style="{textDecoration: todo.complete ? 'line-through' : 'none'}">{{ todo.text }}</li>
</ul>
</div>
+38
View File
@@ -0,0 +1,38 @@
.todo-list {
.input {
box-sizing: border-box;
display: block;
width: 200px;
margin: 20px auto;
padding: 5px 8px;
background-color: #fff;
border: 1px solid #d9d9d9;
border-radius: 4px;
transition: all .3s;
}
@at-root {
.todos-type {
display: table;
margin: 0 auto;
li {
display: table-cell;
padding: 3px 8px;
cursor: pointer;
&:hover {
color: #108ee9;
}
&.active {
color: #108ee9;
}
}
}
.todos {
width: 200px;
margin: 0 auto;
li {
line-height: 1.8;
cursor: pointer;
}
}
}
}
+8
View File
@@ -0,0 +1,8 @@
import ctrl from './controller'
import html from './index.html'
import './index.scss'
export default {
template: html,
controller: ctrl
}
+6
View File
@@ -0,0 +1,6 @@
declare const _default: {
name: string;
url: string;
component: string;
};
export default _default;
+5
View File
@@ -0,0 +1,5 @@
export default {
name: 'todolist',
url: '/todolist',
component: 'todolist'
}
+137
View File
@@ -0,0 +1,137 @@
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const path = require('path');
const ROOT_PATH = path.resolve(__dirname);
const APP_PATH = path.resolve(ROOT_PATH, 'src');
const BUILD_PATH = path.resolve(ROOT_PATH, 'dist');
const NODE_MODULES_PATH = path.resolve(ROOT_PATH, 'node_modules');
const ENTRY_FILE = path.resolve(APP_PATH, 'index');
const TEMPLATE_FILE = path.resolve(APP_PATH, 'index.html'); //html
module.exports = {
mode: 'development',
devtool: 'source-map',
entry: {
app: ENTRY_FILE,
vendor: [
"angular",
'@uirouter/angularjs'
]
},
output: {
path: BUILD_PATH,
filename: 'js/[name].[hash:8].js',
chunkFilename: '[name].[chunkhash:8].js',
publicPath: '/'
},
module: {
rules: [
{
test: /\.html$/,
use: {
loader: 'html-loader',
options: {
exportAsEs6Default: true,
minimize: true,
removeComments: true
}
}
},
{
test: /\.css$/,
exclude: NODE_MODULES_PATH,
use: ['style-loader', 'css-loader', 'postcss-loader'],
include: APP_PATH
},
{
test: /\.less$/,
use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader'],
},
{
test: /\.scss$/,
exclude: NODE_MODULES_PATH,
use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader'],
include: APP_PATH
},
{
test: /\.(eot|woff|ttf|woff2)(\?|$)/,
exclude: NODE_MODULES_PATH,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
},
include: APP_PATH
},
{
test: /\.(png|jpg|gif|svg)$/,
exclude: NODE_MODULES_PATH,
use: {
loader: 'url-loader',
options: {
limit: 8192,
name: 'images/[name].[hash:8].[ext]'
}
},
include: APP_PATH
},
{
test: /\.ts$/,
exclude: NODE_MODULES_PATH,
use: [
'ts-loader',
{
loader: 'tslint-loader',
options: {
configFile: ROOT_PATH + '/tslint.json'
}
}
],
include: APP_PATH
}
]
},
devServer: {
hot: true,
contentBase: BUILD_PATH,
port: 3000,
publicPath: '/'
},
plugins: [
new HtmlWebpackPlugin({
filename: path.resolve(BUILD_PATH, 'index.html'),
template: TEMPLATE_FILE,
hash: false,
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin()
],
optimization: {
splitChunks: {
cacheGroups: {
common: {
chunks: 'all',
minChunks: 2,
maxInitialRequests: 5,
minSize: 0,
name: 'common'
},
vendor: {
test: /node_modules/,
chunks: 'all',
name: 'vendor',
priority: 10,
enforce: true,
minChunks: 2
}
}
}
},
resolve: {
extensions: ['.js', '.ts', '.less', '.scss', '.css'],
alias: {
'@': APP_PATH,
}
}
}
+193
View File
@@ -0,0 +1,193 @@
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const webpack = require('webpack');
const path = require('path');
const ROOT_PATH = path.resolve(__dirname);
const APP_PATH = path.resolve(ROOT_PATH, 'src');
const NODE_MODULES_PATH = path.resolve(ROOT_PATH, 'node_modules');
const ENTRY_FILE = path.resolve(APP_PATH, 'index');
const TEMPLATE_FILE = path.resolve(APP_PATH, 'index.html');
const BUILD_PATH = path.resolve(ROOT_PATH, './static');
const staticFiles = {
mode: 'production',
entry: {
app: ENTRY_FILE,
vendor: [
"angular",
'@uirouter/angularjs'
]
},
output: {
path: BUILD_PATH,
filename: 'js/[name].[hash:8].js',
chunkFilename: 'js/[name].[chunkhash:8].js'
},
module: {
rules: [
{
test: /\.html$/,
use: {
loader: 'html-loader',
options: {
exportAsEs6Default: true,
minimize: true,
removeComments: true
}
}
},
{
test: /\.css$/,
exclude: NODE_MODULES_PATH,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader'],
include: APP_PATH
},
{
test: /\.less$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'less-loader'],
},
{
test: /\.scss$/,
exclude: NODE_MODULES_PATH,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader'],
include: APP_PATH
},
{
test: /\.(eot|woff|ttf|woff2)(\?|$)/,
exclude: NODE_MODULES_PATH,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
},
include: APP_PATH
},
{
test: /\.(png|jpg|gif|svg)$/,
exclude: NODE_MODULES_PATH,
use: {
loader: 'url-loader',
options: {
limit: 8192,
name: 'images/[name].[hash:8].[ext]'
}
},
include: APP_PATH
},
{
test: /\.ts$/,
exclude: NODE_MODULES_PATH,
use: 'ts-loader',
include: APP_PATH
}
]
},
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('production')
}
}),
new HtmlWebpackPlugin({
filename: path.resolve(BUILD_PATH, 'index.html'),
template: TEMPLATE_FILE,
hash: false,
}),
new CleanWebpackPlugin(['./static'], {
root: path.resolve(__dirname, './'),
verbose: true
}),
new MiniCssExtractPlugin({
filename: 'css/[name].css?v=[contenthash:8]'
})
],
optimization: {
splitChunks: {
cacheGroups: {
common: {
chunks: 'all',
minChunks: 2,
maxInitialRequests: 5,
minSize: 0,
name: 'common'
},
vendor: {
test: /node_modules/,
chunks: 'all',
name: 'vendor',
priority: 10,
enforce: true,
minChunks: 2
}
}
}
},
resolve: {
extensions: ['.js', '.ts', '.less', '.scss', '.css'],
alias: {
'@': APP_PATH,
}
}
};
const plugin = {
target: "node",
mode: 'production',
entry: path.resolve(__dirname, 'Plugin.ts'),
output: {
path: path.resolve(__dirname, 'static'),
filename: 'Plugin.js',
libraryTarget: "commonjs2",
},
module: {
rules: [
{
test: /\.ts$/,
exclude: path.resolve(__dirname, 'node_modules'),
use: 'ts-loader',
}
]
},
optimization: {
minimizer: [new TerserPlugin({
cache: true,
parallel: true,
terserOptions:{
mangle: false,
keep_classnames: true
}
})],
splitChunks: {
cacheGroups: {
common: {
chunks: 'all',
minChunks: 2,
maxInitialRequests: 5,
minSize: 0,
name: 'common'
},
vendor: {
test: /node_modules/,
chunks: 'all',
name: 'vendor',
priority: 10,
enforce: true,
minChunks: 2
}
}
}
},
resolve: {
extensions: ['.ts', '.js'],
}
}
module.exports = [
Object.assign({}, staticFiles),
Object.assign({}, plugin),
];