diff --git a/browser/main/Actions/login.js b/browser/main/Actions/login.js new file mode 100644 index 00000000..da9c4b1a --- /dev/null +++ b/browser/main/Actions/login.js @@ -0,0 +1,5 @@ +var Reflux = require('reflux') + +var login = Reflux.createAction() + +module.exports = login diff --git a/browser/main/Actions/register.js b/browser/main/Actions/register.js new file mode 100644 index 00000000..aa7b08a1 --- /dev/null +++ b/browser/main/Actions/register.js @@ -0,0 +1,5 @@ +var Reflux = require('reflux') + +var register = Reflux.createAction() + +module.exports = register diff --git a/browser/main/Actions/snippetUpdate.js b/browser/main/Actions/snippetUpdate.js new file mode 100644 index 00000000..138dc565 --- /dev/null +++ b/browser/main/Actions/snippetUpdate.js @@ -0,0 +1,6 @@ +var Reflux = require('reflux') + +// Creating an Action +var snippetUpdate = Reflux.createAction() + +module.exports = snippetUpdate diff --git a/browser/main/Components/CodeEditor.jsx b/browser/main/Components/CodeEditor.jsx index 089c652f..ef054e98 100644 --- a/browser/main/Components/CodeEditor.jsx +++ b/browser/main/Components/CodeEditor.jsx @@ -10,8 +10,8 @@ var CodeEditor = React.createClass({ componentDidMount: function () { var el = React.findDOMNode(this.refs.target) var editor = ace.edit(el) - editor.setValue(this.props.code) editor.$blockScrolling = Infinity + editor.setValue(this.props.code) editor.renderer.setShowGutter(true) editor.setTheme('ace/theme/xcode') diff --git a/browser/main/Components/CodeViewer.jsx b/browser/main/Components/CodeViewer.jsx index bb04eef5..35864cb9 100644 --- a/browser/main/Components/CodeViewer.jsx +++ b/browser/main/Components/CodeViewer.jsx @@ -9,8 +9,8 @@ var CodeViewer = React.createClass({ componentDidMount: function () { var el = React.findDOMNode(this.refs.target) var editor = ace.edit(el) - editor.setValue(this.props.code) editor.$blockScrolling = Infinity + editor.setValue(this.props.code) editor.renderer.setShowGutter(false) editor.setReadOnly(true) editor.setTheme('ace/theme/xcode') diff --git a/browser/main/Containers/LoginContainer.jsx b/browser/main/Containers/LoginContainer.jsx index 0d1c69dc..8597bf1f 100644 --- a/browser/main/Containers/LoginContainer.jsx +++ b/browser/main/Containers/LoginContainer.jsx @@ -1,7 +1,9 @@ var React = require('react/addons') var ReactRouter = require('react-router') var Link = ReactRouter.Link -var Auth = require('../Services/Auth') + +var AuthStore = require('../Stores/AuthStore') +var login = require('../Actions/login') module.exports = React.createClass({ mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation], @@ -11,31 +13,54 @@ module.exports = React.createClass({ password: '' } }, + componentDidMount: function () { + this.unsubscribe = AuthStore.listen(this.onLogin) + }, + componentWillUnmount: function () { + this.unsubscribe() + }, handleSubmit: function (e) { - console.log(this.state) - Auth.attempt() - // TODO: request user data - .then(function (user) { - this.transitionTo('dashboard', {userName: user.name, planetName: user.name}) - }.bind(this)) + login({ + email: this.state.email, + password: this.state.password + }) e.preventDefault() }, + onLogin: function (user) { + var planet = user.Planets.length > 0 ? user.Planets[0] : null + if (planet == null) { + this.transitionTo('user', {userName: user.name}) + return + } + this.transitionTo('dashboard', {userName: user.name, planetName: planet.name}) + }, render: function () { return (
-

CodeXen

-

Log In | Register

+ + + + +
+

Connect with

+ + +
+ +
+
+
or
+
+
- - +
- - +
- +
diff --git a/browser/main/Containers/PlanetContainer.jsx b/browser/main/Containers/PlanetContainer.jsx index 3b750739..81b40ee4 100644 --- a/browser/main/Containers/PlanetContainer.jsx +++ b/browser/main/Containers/PlanetContainer.jsx @@ -14,7 +14,7 @@ var currentUser = { var userPlanets = [ { id: 1, - name: 'testcat', + name: 'myplanet', profileName: 'TestCat' }, { diff --git a/browser/main/Containers/RegisterContainer.jsx b/browser/main/Containers/RegisterContainer.jsx index 819a17b2..6215c998 100644 --- a/browser/main/Containers/RegisterContainer.jsx +++ b/browser/main/Containers/RegisterContainer.jsx @@ -1,7 +1,9 @@ var React = require('react/addons') var ReactRouter = require('react-router') var Link = ReactRouter.Link -var Auth = require('../Services/Auth') + +var AuthStore = require('../Stores/AuthStore') +var register = require('../Actions/register') module.exports = React.createClass({ mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation], @@ -13,42 +15,67 @@ module.exports = React.createClass({ profileName: '' } }, + componentDidMount: function () { + this.unsubscribe = AuthStore.listen(this.onRegister) + }, + componentWillUnmount: function () { + this.unsubscribe() + }, handleSubmit: function (e) { - Auth.register() - // TODO: request user data - .then(function (user) { - this.transitionTo('dashboard', {userName: user.name, planetName: user.name}) - }.bind(this)) + register({ + email: this.state.email, + password: this.state.password, + name: this.state.name, + profileName: this.state.profileName + }) e.preventDefault() }, + onRegister: function (user) { + var planet = user.Planets.length > 0 ? user.Planets[0] : null + if (planet == null) { + this.transitionTo('user', {userName: user.name}) + return + } + this.transitionTo('dashboard', {userName: user.name, planetName: planet.name}) + }, render: function () { return (
-

CodeXen

-

Log In | Register

+ + + + +
+

Connect with

+ + +
+ +
+
+
or
+
+
- - +
- - -
-
-
- - +
- - +
- + +
+
+
+ +

Sign Upをクリックすることで、当サイトの利用規約及びCookieの使用を含むデータに関するポリシーに同意するものとします。

) } diff --git a/browser/main/Services/Snippet.js b/browser/main/Services/Snippet.js index a919549e..4435d332 100644 --- a/browser/main/Services/Snippet.js +++ b/browser/main/Services/Snippet.js @@ -1,7 +1,7 @@ var Snippet = {} var snippets = { - testcat: [ + myplanet: [ { id: 1, callSign: 'alert', diff --git a/browser/main/Stores/AuthStore.js b/browser/main/Stores/AuthStore.js new file mode 100644 index 00000000..25feb6c9 --- /dev/null +++ b/browser/main/Stores/AuthStore.js @@ -0,0 +1,39 @@ +/* global localStorage */ +var Reflux = require('reflux') +var request = require('superagent') + +var login = require('../Actions/login') +var register = require('../Actions/register') + +var AuthStore = Reflux.createStore({ + init: function () { + this.listenTo(login, this.login) + this.listenTo(register, this.register) + }, + login: function (input) { + request + .post('http://localhost:8000/auth/login') + .send(input) + .set('Accept', 'application/json') + .end(function (err, res) { + if (err) console.error(err) + var user = res.body.user + localStorage.setItem('token', res.body.token) + this.trigger(user) + }.bind(this)) + }, + register: function (input) { + request + .post('http://localhost:8000/auth/signup') + .send(input) + .set('Accept', 'application/json') + .end(function (err, res) { + if (err) console.error(err) + var user = res.body.user + localStorage.setItem('token', res.body.token) + this.trigger(user) + }.bind(this)) + } +}) + +module.exports = AuthStore diff --git a/browser/main/favicon.ico b/browser/main/favicon.ico new file mode 100644 index 00000000..7f2beb95 Binary files /dev/null and b/browser/main/favicon.ico differ diff --git a/browser/main/index.html b/browser/main/index.html index 76268582..eaefe99c 100644 --- a/browser/main/index.html +++ b/browser/main/index.html @@ -4,6 +4,7 @@ CodeXen + diff --git a/browser/main/resources/favicon-230x230.png b/browser/main/resources/favicon-230x230.png new file mode 100644 index 00000000..e75fdb72 Binary files /dev/null and b/browser/main/resources/favicon-230x230.png differ diff --git a/browser/styles/main/containers/LoginContainer.styl b/browser/styles/main/containers/LoginContainer.styl new file mode 100644 index 00000000..181dd1c0 --- /dev/null +++ b/browser/styles/main/containers/LoginContainer.styl @@ -0,0 +1,55 @@ +.LoginContainer, .RegisterContainer + margin 15px auto + padding 25px 15px + box-sizing border-box + color inactiveTextColor + .logo + display block + margin 0 auto + .authNavigator + margin 15px 0 + a + font-size 1.5em + text-decoration none + color inactiveTextColor + &:hover, &.hover, &:active, &.active + color brandColor + .socialControl + text-align center + margin 25px 0 + p + margin-bottom 25px + .facebookBtn, .githubBtn + padding 20px + margin 0 45px + background-image none + font-size 25px + color white + border none + circle() + cursor pointer + .facebookBtn + background-color facebookColor + &:hover, &.hover + background-color lighten(facebookColor, 25%) + .githubBtn + background-color githubBtn + &:hover, &.hover + background-color lighten(githubBtn, 25%) + .divider + .dividerLabel + text-align center + position relative + top -35px + background-color backgroundColor + margin 0 auto + width 50px + form + width 400px + margin 0 auto 45px + div.form-group:last-child + margin-top 45px + .btn-primary + display block + width 200px + margin 0 auto diff --git a/browser/styles/main/index.styl b/browser/styles/main/index.styl index 49e21dca..9114fcd7 100644 --- a/browser/styles/main/index.styl +++ b/browser/styles/main/index.styl @@ -38,11 +38,23 @@ button text-align center .form-group - margin-bottom 15px + margin-bottom 20px &>label display block margin-bottom 5px +.stripInput + border none + border-bottom 1px solid borderColor + padding 5px 15px + width 100% + display block + font-size 1em + height 33px + box-sizing border-box + &:focus, &.focus + border-bottom 1px solid brandBorderColor + outline none .block-input, .inline-input border solid 1px borderColor @@ -74,14 +86,6 @@ textarea.block-input #content fullsize() -.LoginContainer, .RegisterContainer - width 400px - margin 15px auto - padding 25px 15px - box-sizing border-box - h1, h2 - margin 5px auto 25px - .UserNavigator background-color planetNavBgColor absolute left top bottom diff --git a/browser/styles/shared/modal.styl b/browser/styles/shared/modal.styl index 7b700d90..de957c47 100644 --- a/browser/styles/shared/modal.styl +++ b/browser/styles/shared/modal.styl @@ -39,5 +39,5 @@ .ace_editor height 300px - border-radius 5px + border-radius 10px border solid 1px borderColor diff --git a/browser/styles/vars.styl b/browser/styles/vars.styl index b17d438c..36fa37e3 100644 --- a/browser/styles/vars.styl +++ b/browser/styles/vars.styl @@ -11,6 +11,7 @@ hoverBackgroundColor= transparentify(#444, 3%) // v0.2.0 +inactiveTextColor = #888 textColor = #4D4D4D backgroundColor= white @@ -27,3 +28,6 @@ planetAnchorActiveBgColor = white popupShadow = 0 0 5px 0 #888 modalBaseColor = transparentify(white, 65%) + +facebookColor= #3b5998 +githubBtn= #201F1F diff --git a/package.json b/package.json index 098a7ee2..1addcff6 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "homepage": "https://github.com/Rokt33r/codexen-app#readme", "dependencies": { "dotenv": "^1.1.0", + "halogen": "^0.1.10", "marked": "^0.3.3", "moment": "^2.10.3", "node-jsx": "^0.13.3", @@ -39,7 +40,8 @@ "react-router": "^0.13.3", "react-select": "^0.5.4", "react-tooltip": "^0.3.3", - "reflux": "^0.2.8" + "reflux": "^0.2.8", + "superagent": "^1.2.0" }, "devDependencies": { "css-loader": "^0.15.1",