test web first commit
This commit is contained in:
commit
a4ed88b058
63
.gitignore
vendored
Normal file
63
.gitignore
vendored
Normal file
|
@ -0,0 +1,63 @@
|
|||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
|
||||
dist/
|
||||
node_modules/
|
||||
public/
|
||||
.vscode/
|
12
gulpfile.js
Normal file
12
gulpfile.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
var gulp = require('gulp');
|
||||
var webpack = require('webpack');
|
||||
var webpackStream = require('webpack-stream');
|
||||
var webpackDevServer = require("webpack-dev-server");
|
||||
|
||||
gulp.task('webpack', function (callback) {
|
||||
var webpackConfig = require('./webpack.config');
|
||||
|
||||
return webpackStream(webpackConfig, webpack)
|
||||
.pipe(gulp.dest('./dist'));
|
||||
});
|
||||
|
39
package.json
Normal file
39
package.json
Normal file
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"name": "web_ui",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"webpack-dev-server": "webpack-dev-server"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/material-ui": "^0.17.7",
|
||||
"@types/node": "^7.0.22",
|
||||
"@types/react": "^15.0.24",
|
||||
"@types/react-dom": "^15.5.0",
|
||||
"@types/react-router": "^4.0.9",
|
||||
"@types/react-router-dom": "^4.0.4",
|
||||
"@types/react-tap-event-plugin": "^0.0.30",
|
||||
"awesome-typescript-loader": "^3.1.3",
|
||||
"css-loader": "^0.28.2",
|
||||
"extract-text-webpack-plugin": "^2.1.0",
|
||||
"file-loader": "^0.11.1",
|
||||
"gulp": "^3.9.1",
|
||||
"image-webpack-loader": "^3.3.1",
|
||||
"node-sass": "^4.5.3",
|
||||
"postcss-loader": "^2.0.5",
|
||||
"react-router-dom": "^4.1.1",
|
||||
"sass-loader": "^6.0.5",
|
||||
"source-map-loader": "^0.2.1",
|
||||
"style-loader": "^0.18.1",
|
||||
"typescript": "^2.3.3",
|
||||
"webpack": "^2.6.0",
|
||||
"webpack-dev-server": "^2.4.5",
|
||||
"webpack-stream": "^3.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"material-ui": "^0.18.1",
|
||||
"react": "^15.5.4",
|
||||
"react-dom": "15.5.4",
|
||||
"react-router": "^4.1.1",
|
||||
"react-tap-event-plugin": "^2.0.1"
|
||||
}
|
||||
}
|
5
postcss.config.js
Normal file
5
postcss.config.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
plugins: [
|
||||
require('autoprefixer')
|
||||
]
|
||||
}
|
24
src/scss/components/Hello.scss
Normal file
24
src/scss/components/Hello.scss
Normal file
|
@ -0,0 +1,24 @@
|
|||
.App {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #222;
|
||||
height: 150px;
|
||||
padding: 20px;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.App-intro {
|
||||
font-size: large;
|
||||
}
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
5
src/scss/index.scss
Normal file
5
src/scss/index.scss
Normal file
|
@ -0,0 +1,5 @@
|
|||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
}
|
82
src/ts/containers/Main.tsx
Normal file
82
src/ts/containers/Main.tsx
Normal file
|
@ -0,0 +1,82 @@
|
|||
import * as React from 'react';
|
||||
import RaisedButton from 'material-ui/RaisedButton';
|
||||
import Dialog from 'material-ui/Dialog';
|
||||
import {deepOrange500} from 'material-ui/styles/colors';
|
||||
import FlatButton from 'material-ui/FlatButton';
|
||||
import getMuiTheme from 'material-ui/styles/getMuiTheme';
|
||||
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
|
||||
|
||||
|
||||
const styles = {
|
||||
container: {
|
||||
textAlign: 'center',
|
||||
paddingTop: 200,
|
||||
},
|
||||
};
|
||||
|
||||
const muiTheme = getMuiTheme({
|
||||
palette: {
|
||||
accent1Color: deepOrange500,
|
||||
},
|
||||
});
|
||||
|
||||
interface MainState {
|
||||
open: boolean;
|
||||
}
|
||||
|
||||
export class Main extends React.Component<any, any> {
|
||||
constructor(props: any, context: any) {
|
||||
super(props, context);
|
||||
|
||||
this.handleRequestClose = this.handleRequestClose.bind(this);
|
||||
this.handleTouchTap = this.handleTouchTap.bind(this);
|
||||
|
||||
this.state = {
|
||||
open: false,
|
||||
} as MainState;
|
||||
}
|
||||
|
||||
handleRequestClose() {
|
||||
this.setState({
|
||||
open: false,
|
||||
} as MainState);
|
||||
}
|
||||
|
||||
handleTouchTap() {
|
||||
this.setState({
|
||||
open: true,
|
||||
} );
|
||||
}
|
||||
|
||||
render() {
|
||||
const standardActions = (
|
||||
<FlatButton
|
||||
label="Ok"
|
||||
primary={true}
|
||||
onTouchTap={this.handleRequestClose}
|
||||
/>
|
||||
) as any;
|
||||
|
||||
return (
|
||||
<MuiThemeProvider muiTheme={muiTheme}>
|
||||
<div style={styles.container}>
|
||||
<Dialog
|
||||
open={this.state.open}
|
||||
title="Super Secret Password"
|
||||
actions={standardActions}
|
||||
onRequestClose={this.handleRequestClose}
|
||||
>
|
||||
1-2-3-4-5
|
||||
</Dialog>
|
||||
<h1>Material-UI</h1>
|
||||
<h2>example project</h2>
|
||||
<RaisedButton
|
||||
label="Super Secret Password"
|
||||
secondary={true}
|
||||
onTouchTap={this.handleTouchTap}
|
||||
/>
|
||||
</div>
|
||||
</MuiThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
44
src/ts/containers/member/emailConfirm.tsx
Normal file
44
src/ts/containers/member/emailConfirm.tsx
Normal file
|
@ -0,0 +1,44 @@
|
|||
|
||||
|
||||
import * as React from "react";
|
||||
import getMuiTheme from 'material-ui/styles/getMuiTheme';
|
||||
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
|
||||
import { deepOrange500 } from 'material-ui/styles/colors';
|
||||
import RaisedButton from 'material-ui/RaisedButton';
|
||||
|
||||
const styles = {
|
||||
container: {
|
||||
textAlign: 'center',
|
||||
}
|
||||
}
|
||||
|
||||
const muiTheme = getMuiTheme({
|
||||
palette: {
|
||||
accent1Color: deepOrange500,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
export class MemberEmailConfirm extends React.Component<any, any> {
|
||||
constructor(props: any, context: any) {
|
||||
super(props, context);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
<MuiThemeProvider muiTheme={muiTheme}>
|
||||
<div style={styles.container}>
|
||||
<h1>Email Conform!</h1>
|
||||
<h2>You Can Do it</h2>
|
||||
<RaisedButton label="Go to Main" primary={true}/>
|
||||
|
||||
|
||||
</div>
|
||||
</MuiThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
212
src/ts/containers/member/regist.tsx
Normal file
212
src/ts/containers/member/regist.tsx
Normal file
|
@ -0,0 +1,212 @@
|
|||
/**
|
||||
* In this file, we create a React component
|
||||
* which incorporates components provided by Material-UI.
|
||||
*/
|
||||
import * as React from 'react';
|
||||
import RaisedButton from 'material-ui/RaisedButton';
|
||||
import Dialog from 'material-ui/Dialog';
|
||||
import { deepOrange500 } from 'material-ui/styles/colors';
|
||||
import FlatButton from 'material-ui/FlatButton';
|
||||
import getMuiTheme from 'material-ui/styles/getMuiTheme';
|
||||
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
|
||||
|
||||
import * as ReactDOM from 'react-dom';
|
||||
|
||||
import Divider from 'material-ui/Divider';
|
||||
import Paper from 'material-ui/Paper';
|
||||
import TextField from 'material-ui/TextField';
|
||||
|
||||
import SelectField from 'material-ui/SelectField';
|
||||
import MenuItem from 'material-ui/MenuItem';
|
||||
|
||||
import Slider from 'material-ui/Slider';
|
||||
|
||||
import * as http from "http"
|
||||
|
||||
import { MemberRegistResult } from './registResult';
|
||||
|
||||
|
||||
const styles = {
|
||||
body: {
|
||||
textAlign: 'center',
|
||||
},
|
||||
container: {
|
||||
textAlign: 'center',
|
||||
|
||||
},
|
||||
|
||||
textfield: {
|
||||
width: 300,
|
||||
marginLeft: 3
|
||||
},
|
||||
|
||||
customWidth: {
|
||||
width: 150,
|
||||
},
|
||||
button: {
|
||||
margin: 12,
|
||||
}
|
||||
};
|
||||
|
||||
const muiTheme = getMuiTheme({
|
||||
palette: {
|
||||
accent1Color: deepOrange500,
|
||||
},
|
||||
});
|
||||
|
||||
export class MemberRegist extends React.Component<any, any> {
|
||||
constructor(props: any, context: any) {
|
||||
super(props, context);
|
||||
|
||||
this.handleSignUp = this.handleSignUp.bind(this);
|
||||
|
||||
this.state = {
|
||||
open: false,
|
||||
value: 1,
|
||||
|
||||
email:"",
|
||||
name:"",
|
||||
company:"",
|
||||
phone:"",
|
||||
pw:"",
|
||||
};
|
||||
}
|
||||
|
||||
handleChange = () => this.setState({ });
|
||||
|
||||
private emailInput: any;
|
||||
|
||||
handleRequestClose = () => {
|
||||
this.setState({
|
||||
open: false,
|
||||
});
|
||||
}
|
||||
|
||||
handleTouchTap = () => {
|
||||
this.setState({
|
||||
open: true,
|
||||
});
|
||||
}
|
||||
|
||||
handleSignUp = () => {
|
||||
|
||||
let output: string;
|
||||
let obj: any; //new object declaration
|
||||
obj = {"email":this.state.email,
|
||||
"pwSalt":this.state.pw,
|
||||
"name":this.state.name,
|
||||
"company":this.state.company,
|
||||
"phone":this.state.phone};
|
||||
|
||||
|
||||
output = JSON.stringify(obj);
|
||||
|
||||
obj = {"value":output};
|
||||
|
||||
fetch('http://192.168.1.209:8080/v1/example/echo', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
// mode: 'no-cors'
|
||||
},
|
||||
body: JSON.stringify(obj)
|
||||
}).then(function (response) {
|
||||
return response.json();
|
||||
}).then(function (json) {
|
||||
console.log(json);
|
||||
}).catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
handleResultContainer = () => {
|
||||
ReactDOM.render(
|
||||
<MemberRegistResult />,
|
||||
document.getElementById('example')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
btnTouchTap = () => {
|
||||
alert(event)
|
||||
};
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
<MuiThemeProvider muiTheme={muiTheme}>
|
||||
|
||||
<div style={styles.container}>
|
||||
Get started with Overflow
|
||||
<br/>
|
||||
<TextField
|
||||
ref="email"
|
||||
hintText="smith@gmail.com"
|
||||
floatingLabelText="Email address*"
|
||||
errorText=""
|
||||
style={styles.textfield}
|
||||
underlineShow={true}
|
||||
value={this.state.email}
|
||||
onChange={(e, newValue) => this.setState({ email: newValue})}
|
||||
/>
|
||||
<br/>
|
||||
<TextField
|
||||
ref="name"
|
||||
hintText="Snoop"
|
||||
floatingLabelText="Full Name*"
|
||||
style={styles.textfield}
|
||||
underlineShow={true}
|
||||
value={this.state.name}
|
||||
onChange={(e, newValue) => this.setState({ name: newValue})}
|
||||
|
||||
/>
|
||||
<br/>
|
||||
|
||||
<TextField
|
||||
ref="company"
|
||||
hintText="Loafle"
|
||||
floatingLabelText="Company*"
|
||||
style={styles.textfield}
|
||||
underlineShow={true}
|
||||
value={this.state.company}
|
||||
onChange={(e, newValue) => this.setState({ company: newValue})}
|
||||
/>
|
||||
<br/>
|
||||
|
||||
<TextField
|
||||
ref="phone"
|
||||
hintText="Loafle"
|
||||
floatingLabelText="Phone*"
|
||||
style={styles.textfield}
|
||||
underlineShow={true}
|
||||
value={this.state.phone}
|
||||
onChange={(e, newValue) => this.setState({ phone: newValue})}
|
||||
/>
|
||||
<br/>
|
||||
|
||||
<TextField
|
||||
hintText="Password"
|
||||
floatingLabelText="Password"
|
||||
type="password"
|
||||
style={styles.textfield}
|
||||
value={this.state.pw}
|
||||
onChange={(e, newValue) => this.setState({ pw: newValue})}
|
||||
/>
|
||||
<br/>
|
||||
|
||||
|
||||
<RaisedButton label="Sign Up" primary={true} style={styles.button} onClick={this.handleSignUp.bind(this)}/>
|
||||
|
||||
</div>
|
||||
|
||||
</MuiThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
44
src/ts/containers/member/registResult.tsx
Normal file
44
src/ts/containers/member/registResult.tsx
Normal file
|
@ -0,0 +1,44 @@
|
|||
|
||||
|
||||
import * as React from "react";
|
||||
import getMuiTheme from 'material-ui/styles/getMuiTheme';
|
||||
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
|
||||
import { deepOrange500 } from 'material-ui/styles/colors';
|
||||
import RaisedButton from 'material-ui/RaisedButton';
|
||||
|
||||
const styles = {
|
||||
container: {
|
||||
textAlign: 'center',
|
||||
}
|
||||
}
|
||||
|
||||
const muiTheme = getMuiTheme({
|
||||
palette: {
|
||||
accent1Color: deepOrange500,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
export class MemberRegistResult extends React.Component<any, any> {
|
||||
constructor(props: any, context: any) {
|
||||
super(props, context);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
|
||||
return (
|
||||
<MuiThemeProvider muiTheme={muiTheme}>
|
||||
<div style={styles.container}>
|
||||
<h1>Starting Overflow!</h1>
|
||||
<h2>Please Check Email</h2>
|
||||
<RaisedButton label="ReSend Email" primary={true}/>
|
||||
|
||||
|
||||
</div>
|
||||
</MuiThemeProvider>
|
||||
);
|
||||
}
|
||||
}
|
16
src/ts/index.tsx
Normal file
16
src/ts/index.tsx
Normal file
|
@ -0,0 +1,16 @@
|
|||
import * as React from 'react';
|
||||
import * as ReactDOM from 'react-dom';
|
||||
import * as injectTapEventPlugin from 'react-tap-event-plugin';
|
||||
import { MemberRegist } from './containers/member/regist';
|
||||
import { MemberRegistResult } from './containers/member/registResult';
|
||||
import { MemberEmailConfirm } from './containers/member/emailConfirm';
|
||||
|
||||
|
||||
import '../scss/index.scss';
|
||||
|
||||
injectTapEventPlugin();
|
||||
|
||||
ReactDOM.render(
|
||||
<MemberRegist />,
|
||||
document.getElementById('example')
|
||||
);
|
25
tsconfig.json
Normal file
25
tsconfig.json
Normal file
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"declaration": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"jsx": "react",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"newLine": "LF",
|
||||
"noImplicitAny": true,
|
||||
"noImplicitThis": true,
|
||||
"outDir": "./dist/src/",
|
||||
"preserveConstEnums": true,
|
||||
"sourceMap": true,
|
||||
"target": "es5"
|
||||
},
|
||||
"include": [
|
||||
"./src/ts/**/*"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"dist"
|
||||
]
|
||||
}
|
23
tslint.json
Normal file
23
tslint.json
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"rules": {
|
||||
"indent": [
|
||||
true,
|
||||
4,
|
||||
"spaces"
|
||||
],
|
||||
"quotemark": [
|
||||
"single"
|
||||
],
|
||||
"no-unused-expression": true,
|
||||
"no-duplicate-variable": true,
|
||||
"curly": true,
|
||||
"class-name": true,
|
||||
"triple-equals": [
|
||||
true
|
||||
],
|
||||
"semicolon": [
|
||||
true,
|
||||
"always"
|
||||
]
|
||||
}
|
||||
}
|
93
webpack.config.js
Normal file
93
webpack.config.js
Normal file
|
@ -0,0 +1,93 @@
|
|||
const webpack = require('webpack');
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
||||
|
||||
module.exports = {
|
||||
entry: {
|
||||
ts: [
|
||||
'./src/ts/index.tsx'
|
||||
],
|
||||
vendor: [
|
||||
'react',
|
||||
'react-dom',
|
||||
'react-router',
|
||||
'react-router-dom'
|
||||
]
|
||||
},
|
||||
output: {
|
||||
filename: 'bundle.js',
|
||||
path: __dirname + '/dist',
|
||||
},
|
||||
|
||||
devtool: 'source-map',
|
||||
|
||||
devServer: {
|
||||
hot: true, // enable HMR on the server
|
||||
inline: true,
|
||||
historyApiFallback: true,
|
||||
contentBase: [__dirname + '/public', __dirname + '/dist', __dirname + '/node_modules'], // match the output path
|
||||
publicPath: '/' ,// match the output `publicPath`
|
||||
host: '192.168.1.209',
|
||||
port: 9091,
|
||||
stats: {
|
||||
colors: true
|
||||
},
|
||||
},
|
||||
|
||||
resolve: {
|
||||
// Add '.ts' and '.tsx' as resolvable extensions.
|
||||
extensions: ['.ts', '.tsx', '.js', '.json']
|
||||
},
|
||||
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
enforce: 'pre',
|
||||
test: /\.js$/,
|
||||
loader: 'source-map-loader'
|
||||
},
|
||||
{
|
||||
test: /\.scss$/,
|
||||
use: ExtractTextPlugin.extract({
|
||||
fallback: 'style-loader',
|
||||
use: ['css-loader', 'postcss-loader', 'sass-loader']
|
||||
})
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
|
||||
// loader: 'url?limit=10000'
|
||||
loaders: [
|
||||
'file-loader?hash=sha512&digest=hex&name=[hash].[ext]',
|
||||
'image-webpack-loader?bypassOnDebug&optipng.optimizationLevel=7&gifsicle.interlaced=false'
|
||||
]
|
||||
},
|
||||
|
||||
{
|
||||
test: /\.tsx?$/,
|
||||
loader: 'awesome-typescript-loader'
|
||||
}
|
||||
|
||||
]
|
||||
},
|
||||
plugins: [
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'vendor',
|
||||
minChunks: Infinity,
|
||||
filename: 'vendor.bundle.js'
|
||||
}),
|
||||
new ExtractTextPlugin({
|
||||
filename: __dirname + '/dist/css/[name].bundle.css',
|
||||
disable: false,
|
||||
allChunks: true
|
||||
}),
|
||||
new webpack.HotModuleReplacementPlugin(), // enable HMR globally
|
||||
|
||||
],
|
||||
// When importing a module whose path matches one of the following, just
|
||||
// assume a corresponding global variable exists and use that instead.
|
||||
// This is important because it allows us to avoid bundling all of our
|
||||
// dependencies, which allows browsers to cache those libraries between builds.
|
||||
// externals: {
|
||||
// 'react': 'React',
|
||||
// 'react-dom': 'ReactDOM'
|
||||
// },
|
||||
};
|
Loading…
Reference in New Issue
Block a user