From 2e4fc557ea50685c06d062c4f25c58833e5930b5 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Fri, 9 Oct 2015 20:12:01 +0900 Subject: [PATCH] use webpack & add some styles --- .babelrc | 20 ++ browser/main/Components/ExternalLink.js | 19 ++ browser/main/Components/ProfileImage.js | 24 ++ browser/main/Components/ProfileImage.jsx | 15 -- .../HomeContainer/Components/ArticleDetail.js | 2 +- .../HomeContainer/Components/UserNavigator.js | 9 +- browser/main/HomeContainer/actions.js | 8 +- .../HomeContainer/components/ArticleTopBar.js | 27 +++ browser/main/HomeContainer/index.js | 47 ++-- browser/main/HomeContainer/reducer.js | 8 +- browser/main/index.html | 9 +- browser/main/index.js | 49 +++- .../ArticleDetail.styl | 2 +- .../ArticleList.styl | 3 +- .../main/HomeContainer/ArticleTopBar.styl | 92 +++++++ .../main/HomeContainer/UserNavigator.styl | 85 +++++++ browser/styles/main/HomeContainer/index.styl | 4 + browser/styles/main/components/TopBar.styl | 43 ---- .../styles/main/containers/HomeContainer.styl | 153 ------------ browser/styles/main/index.css | 227 +++++++++++++++--- browser/styles/main/index.styl | 1 + browser/styles/mixins/input.styl | 2 + package.json | 16 +- .../favicon-230x230.png | Bin webpack.config.js | 53 ++-- 25 files changed, 601 insertions(+), 317 deletions(-) create mode 100644 .babelrc create mode 100644 browser/main/Components/ExternalLink.js create mode 100644 browser/main/Components/ProfileImage.js delete mode 100644 browser/main/Components/ProfileImage.jsx create mode 100644 browser/main/HomeContainer/components/ArticleTopBar.js rename browser/styles/main/{components => HomeContainer}/ArticleDetail.styl (99%) rename browser/styles/main/{components => HomeContainer}/ArticleList.styl (98%) create mode 100644 browser/styles/main/HomeContainer/ArticleTopBar.styl create mode 100644 browser/styles/main/HomeContainer/UserNavigator.styl create mode 100644 browser/styles/main/HomeContainer/index.styl delete mode 100644 browser/styles/main/components/TopBar.styl delete mode 100644 browser/styles/main/containers/HomeContainer.styl rename {browser/main/resources => resources}/favicon-230x230.png (100%) diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..a3a2c1d4 --- /dev/null +++ b/.babelrc @@ -0,0 +1,20 @@ +{ + "stage": 0, + "env": { + "development": { + "plugins": ["react-transform"], + "extra": { + "react-transform": { + "transforms": [{ + "transform": "react-transform-hmr", + "imports": ["react"], + "locals": ["module"] + }, { + "transform": "react-transform-catch-errors", + "imports": ["react", "redbox-react"] + }] + } + } + } + } +} diff --git a/browser/main/Components/ExternalLink.js b/browser/main/Components/ExternalLink.js new file mode 100644 index 00000000..0cac86f6 --- /dev/null +++ b/browser/main/Components/ExternalLink.js @@ -0,0 +1,19 @@ +import React, { PropTypes } from 'react' +import shell from 'shell' + +export default class ExternalLink extends React.Component { + handleClick (e) { + shell.openExternal(this.props.href) + e.preventDefault() + } + + render () { + return ( + this.handleClick(e)} {...this.props}/> + ) + } +} + +ExternalLink.propTypes = { + href: PropTypes.string +} diff --git a/browser/main/Components/ProfileImage.js b/browser/main/Components/ProfileImage.js new file mode 100644 index 00000000..f99b64b5 --- /dev/null +++ b/browser/main/Components/ProfileImage.js @@ -0,0 +1,24 @@ +import React, { PropTypes} from 'react' +import md5 from 'md5' + +export default class ProfileImage extends React.Component { + render () { + let className = this.props.className == null ? 'ProfileImage' : 'ProfileImage ' + this.props.className + let email = this.props.email != null ? this.props.email : '' + let src = 'http://www.gravatar.com/avatar/' + md5(email.trim().toLowerCase()) + '?s=' + this.props.size + + return ( + + ) + } +} + +ProfileImage.propTypes = { + email: PropTypes.string, + size: PropTypes.string, + className: PropTypes.string +} diff --git a/browser/main/Components/ProfileImage.jsx b/browser/main/Components/ProfileImage.jsx deleted file mode 100644 index 77bef87e..00000000 --- a/browser/main/Components/ProfileImage.jsx +++ /dev/null @@ -1,15 +0,0 @@ -var React = require('react') -var md5 = require('md5') - -module.exports = React.createClass({ - propTypes: { - email: React.PropTypes.string, - size: React.PropTypes.string, - className: React.PropTypes.string - }, - render: function () { - return ( - +
) } } diff --git a/browser/main/HomeContainer/Components/UserNavigator.js b/browser/main/HomeContainer/Components/UserNavigator.js index 6e212893..481559d5 100644 --- a/browser/main/HomeContainer/Components/UserNavigator.js +++ b/browser/main/HomeContainer/Components/UserNavigator.js @@ -1,21 +1,24 @@ import React, { Component, PropTypes } from 'react' import { Link } from 'react-router' +import ProfileImage from '../../components/ProfileImage' export default class UserNavigator extends Component { renderUserList () { - var users = this.props.users.map(user => ( + var users = this.props.users.map((user, index) => (
  • +
    {user.name}
    +
    {'⌘' + (index + 1)}
  • )) return ( -
    +
      {users} -
    + ) } diff --git a/browser/main/HomeContainer/actions.js b/browser/main/HomeContainer/actions.js index d208a0ef..41e2c390 100644 --- a/browser/main/HomeContainer/actions.js +++ b/browser/main/HomeContainer/actions.js @@ -1,10 +1,8 @@ -function updateUser (user) { +export const USER_UPDATE = 'USER_UPDATE' + +export function updateUser (user) { return { type: 'USER_UPDATE', data: user } } - -module.exports = { - updateUser: updateUser -} diff --git a/browser/main/HomeContainer/components/ArticleTopBar.js b/browser/main/HomeContainer/components/ArticleTopBar.js new file mode 100644 index 00000000..c9b5a5c2 --- /dev/null +++ b/browser/main/HomeContainer/components/ArticleTopBar.js @@ -0,0 +1,27 @@ +import React, { PropTypes } from 'react' +import ExternalLink from '../../components/ExternalLink' + +const ArticleTopBar = React.createClass({ + render () { + return ( +
    +
    +
    + + +
    + +
    +
    + + + + + +
    +
    + ) + } +}) + +export default ArticleTopBar diff --git a/browser/main/HomeContainer/index.js b/browser/main/HomeContainer/index.js index 0e0be732..bbc6a3c1 100644 --- a/browser/main/HomeContainer/index.js +++ b/browser/main/HomeContainer/index.js @@ -1,8 +1,9 @@ -import React from 'react' -// import { connect } from 'react-redux' +import React, { PropTypes} from 'react' +import { connect } from 'react-redux' // import actionss.... import UserNavigator from './Components/UserNavigator' import ArticleNavigator from './Components/ArticleNavigator' +import ArticleTopBar from './Components/ArticleTopBar' import ArticleList from './Components/ArticleList' import ArticleDetail from './Components/ArticleDetail' @@ -10,30 +11,13 @@ import ArticleDetail from './Components/ArticleDetail' // var KeyCaster = require('../Mixins/KeyCaster') class HomeContainer extends React.Component { - componentDidMount () { - // if (!this.isActive('user')) { - // console.log('redirect to user home') - // var user = JSON.parse(localStorage.getItem('currentUser')) - // this.transitionTo('userHome', {userId: user.id}) - // } - } render () { - let users = [ - { - id: 1, - name: 'me', - email: 'fll@eme.com' - }, - { - id: 2, - name: 'me', - email: 'fll@eme.com' - } - ] + const { users } = this.props return (
    +
    @@ -41,10 +25,19 @@ class HomeContainer extends React.Component { } } -// function remap (state) { -// console.log('mapped') -// console.log(state) -// return {} -// } +function remap (state) { + let currentUser = state.currentUser + let teams = Array.isArray(currentUser.Teams) ? currentUser.Teams : [] -export default HomeContainer + let users = [currentUser, ...teams] + + return { + users + } +} + +HomeContainer.propTypes = { + users: PropTypes.array +} + +export default connect(remap, {})(HomeContainer) diff --git a/browser/main/HomeContainer/reducer.js b/browser/main/HomeContainer/reducer.js index 78224524..693130f1 100644 --- a/browser/main/HomeContainer/reducer.js +++ b/browser/main/HomeContainer/reducer.js @@ -1,10 +1,14 @@ -import {combineReducers} from 'redux' +import { combineReducers } from 'redux' +import { USER_UPDATE } from './actions' const initialCurrentUser = JSON.parse(localStorage.getItem('currentUser')) function currentUser (state, action) { switch (action.type) { - + case USER_UPDATE: + let user = action.data + localStorage.setItem('currentUser', JSON.stringify(user)) + return user default: return initialCurrentUser } diff --git a/browser/main/index.html b/browser/main/index.html index da8f0ce9..619e5ed4 100644 --- a/browser/main/index.html +++ b/browser/main/index.html @@ -6,7 +6,7 @@ - +