init
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
.vscode
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
14
index.html
Normal file
14
index.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Monitorama Countdown!</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="main"></div>
|
||||||
|
<!-- Main -->
|
||||||
|
<script src="/dist/bundle.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
30
package.json
Normal file
30
package.json
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "countdown",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
|
"serve": "webpack-dev-server --output-public-path=dist --history-api-fallback",
|
||||||
|
"build": "npm run lint && webpack --mode production",
|
||||||
|
"compile": "npm run build",
|
||||||
|
"lint": "tslint --project ./tsconfig.json src/**/*.ts src/**/*.tsx"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/moment": "^2.13.0",
|
||||||
|
"@types/react": "^16.0.41",
|
||||||
|
"@types/react-dom": "^16.0.4",
|
||||||
|
"awesome-typescript-loader": "^4.0.1",
|
||||||
|
"css-loader": "^0.28.11",
|
||||||
|
"moment": "^2.21.0",
|
||||||
|
"react": "^16.2.0",
|
||||||
|
"react-dom": "^16.2.0",
|
||||||
|
"source-map-loader": "^0.2.3",
|
||||||
|
"tslint": "^5.9.1",
|
||||||
|
"typescript": "^2.7.2",
|
||||||
|
"webpack": "^4.2.0",
|
||||||
|
"webpack-cli": "^2.0.13"
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/App.tsx
Normal file
39
src/App.tsx
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import * as moment from "moment";
|
||||||
|
import React = require("react");
|
||||||
|
|
||||||
|
const monitorama = moment("20180604", "YYYYMMDD");
|
||||||
|
export class App extends React.Component<any, {remaining: string}> {
|
||||||
|
private runningInterval?: number;
|
||||||
|
constructor(props: any) {
|
||||||
|
super(props);
|
||||||
|
this.state = {remaining: this.CalulateTime()};
|
||||||
|
this.runningInterval = setInterval(() => {
|
||||||
|
this.Update();
|
||||||
|
}, 1000);
|
||||||
|
}
|
||||||
|
public componentWillUnmount() {
|
||||||
|
if (this.runningInterval) {
|
||||||
|
clearInterval(this.runningInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public Update() {
|
||||||
|
this.setState({remaining: this.CalulateTime()});
|
||||||
|
}
|
||||||
|
public CalulateTime() {
|
||||||
|
const now = moment();
|
||||||
|
if (now > monitorama) {
|
||||||
|
return "VICTORYYYYYYYYYYYYY";
|
||||||
|
} else {
|
||||||
|
const duration = moment.duration(monitorama.diff(now));
|
||||||
|
return `${duration.days()} days ${duration.hours()} hours ${duration.minutes()} minutes ${duration.seconds()} seconds`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public render() {
|
||||||
|
return(
|
||||||
|
<div>
|
||||||
|
<h4 style={{textAlign: "center", marginTop: "30vh", fontFamily: "Arial, sans-serif", fontWeight: "bold", fontSize: "80px"}}>{this.state.remaining}</h4>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
9
src/index.tsx
Normal file
9
src/index.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import * as React from "react";
|
||||||
|
import * as ReactDOM from "react-dom";
|
||||||
|
import {App} from "./App";
|
||||||
|
|
||||||
|
ReactDOM.render(
|
||||||
|
<App />
|
||||||
|
,
|
||||||
|
document.getElementById("main"),
|
||||||
|
);
|
||||||
14
tsconfig.json
Normal file
14
tsconfig.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist/",
|
||||||
|
"sourceMap": true,
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es5",
|
||||||
|
"jsx": "react",
|
||||||
|
"noResolve": false
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"./src/**/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
20
tslint.json
Normal file
20
tslint.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"defaultSeverity": "error",
|
||||||
|
"extends": ["tslint:recommended"],
|
||||||
|
"jsRules": {},
|
||||||
|
"rules": {
|
||||||
|
"no-console": false,
|
||||||
|
"jsdoc-format": false,
|
||||||
|
"no-reference": false,
|
||||||
|
"no-reference-import": false,
|
||||||
|
"interface-name": false,
|
||||||
|
"newline-before-return": false,
|
||||||
|
"max-line-length": [true, 400],
|
||||||
|
"comment-format": false,
|
||||||
|
"class-name": false,
|
||||||
|
"object-literal-sort-keys": false,
|
||||||
|
"indent": false,
|
||||||
|
"eofline": false
|
||||||
|
},
|
||||||
|
"rulesDirectory": []
|
||||||
|
}
|
||||||
30
webpack.config.js
Normal file
30
webpack.config.js
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
var webpack = require('webpack');
|
||||||
|
module.exports = {
|
||||||
|
entry: "./src/index.tsx",
|
||||||
|
output: {
|
||||||
|
filename: "bundle.js",
|
||||||
|
path: __dirname + "/dist",
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
// Enable sourcemaps for debugging webpack's output.
|
||||||
|
devtool: "source-map",
|
||||||
|
resolve: {
|
||||||
|
// Add '.ts' and '.tsx' as resolvable extensions.
|
||||||
|
extensions: [".ts", ".tsx", ".js", ".json"]
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
|
||||||
|
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" },
|
||||||
|
|
||||||
|
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
|
||||||
|
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" },
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ['style-loader', 'css-loader' ]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user