sipp11
9 years ago
commit
2986eeb89c
15 changed files with 516 additions and 0 deletions
@ -0,0 +1,27 @@ |
|||||||
|
{ |
||||||
|
"presets": ["react", "es2015"], |
||||||
|
"env": { |
||||||
|
"development": { |
||||||
|
"plugins": [ |
||||||
|
["transform-object-rest-spread"], |
||||||
|
["transform-react-display-name"], |
||||||
|
["react-transform", { |
||||||
|
"transforms": [{ |
||||||
|
"transform": "react-transform-hmr", |
||||||
|
"imports": ["react"], |
||||||
|
"locals": ["module"] |
||||||
|
}, { |
||||||
|
"transform": "react-transform-catch-errors", |
||||||
|
"imports": ["react", "redbox-react"] |
||||||
|
}] |
||||||
|
}] |
||||||
|
] |
||||||
|
}, |
||||||
|
"production": { |
||||||
|
"plugins": [ |
||||||
|
["transform-object-rest-spread"], |
||||||
|
["transform-react-display-name"] |
||||||
|
] |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,27 @@ |
|||||||
|
{ |
||||||
|
"ecmaFeatures": { |
||||||
|
"jsx": true, |
||||||
|
"modules": true |
||||||
|
}, |
||||||
|
"env": { |
||||||
|
"browser": true, |
||||||
|
"node": true |
||||||
|
}, |
||||||
|
"parser": "babel-eslint", |
||||||
|
"rules": { |
||||||
|
"quotes": [2, "single"], |
||||||
|
"strict": [2, "never"], |
||||||
|
"babel/generator-star-spacing": 1, |
||||||
|
"babel/new-cap": 1, |
||||||
|
"babel/object-shorthand": 1, |
||||||
|
"babel/arrow-parens": 1, |
||||||
|
"babel/no-await-in-loop": 1, |
||||||
|
"react/jsx-uses-react": 2, |
||||||
|
"react/jsx-uses-vars": 2, |
||||||
|
"react/react-in-jsx-scope": 2 |
||||||
|
}, |
||||||
|
"plugins": [ |
||||||
|
"babel", |
||||||
|
"react" |
||||||
|
] |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
# Logs |
||||||
|
logs |
||||||
|
*.log |
||||||
|
npm-debug.log* |
||||||
|
|
||||||
|
# Runtime data |
||||||
|
pids |
||||||
|
*.pid |
||||||
|
*.seed |
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover |
||||||
|
lib-cov |
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul |
||||||
|
coverage |
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) |
||||||
|
.grunt |
||||||
|
|
||||||
|
# node-waf configuration |
||||||
|
.lock-wscript |
||||||
|
|
||||||
|
# Compiled binary addons (http://nodejs.org/api/addons.html) |
||||||
|
build/Release |
||||||
|
|
||||||
|
# Dependency directory |
||||||
|
node_modules |
||||||
|
|
||||||
|
# Optional npm cache directory |
||||||
|
.npm |
||||||
|
|
||||||
|
# Optional REPL history |
||||||
|
.node_repl_history |
||||||
|
|
||||||
|
.DS_Store |
@ -0,0 +1,13 @@ |
|||||||
|
import Raven from 'raven-js'; |
||||||
|
|
||||||
|
const sentry_key = 'cb55d4f05cd443ce82303222f77ef5e0'; |
||||||
|
const sentry_app = '61499'; |
||||||
|
export const sentry_url = `https://${sentry_key}@app.getsentry.com/${sentry_app}`; |
||||||
|
|
||||||
|
export function logException(ex, context) { |
||||||
|
Raven.captureException(ex, { |
||||||
|
extra: context |
||||||
|
}); |
||||||
|
/*eslint no-console:0*/ |
||||||
|
window && window.console && console.error && console.error(ex); |
||||||
|
} |
@ -0,0 +1,17 @@ |
|||||||
|
// offset variable gets tacked for centering in addition to the scaling |
||||||
|
|
||||||
|
offsets = translateX(-50%) translateY(-50%) |
||||||
|
.likes-heart |
||||||
|
opacity 0 |
||||||
|
transition all 0.5s // time to fade out after its done |
||||||
|
transform offsets scale(5) // this is the "end state" |
||||||
|
display block |
||||||
|
&.like-enter |
||||||
|
transition all .2s |
||||||
|
transform offsets scale(1) |
||||||
|
opacity 1 |
||||||
|
&.like-enter-active |
||||||
|
transform offsets scale(5) |
||||||
|
.like-leave-active |
||||||
|
display none |
||||||
|
|
@ -0,0 +1,10 @@ |
|||||||
|
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block;}audio,canvas,video{display:inline-block;}audio:not([controls]){display:none;height:0;}[hidden]{display:none;}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}a:focus{outline:thin dotted;}a:active,a:hover{outline:0;}h1{font-size:2em;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:700;}dfn{font-style:italic;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace, serif;font-size:1em;}pre{white-space:pre-wrap;word-wrap:break-word;}q{quotes:\201C \201D \2018 \2019;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-.5em;}sub{bottom:-.25em;}img{border:0;}svg:not(:root){overflow:hidden;}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}button,input{line-height:normal;}button,html input[type=button],/* 1 */ |
||||||
|
input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;}button[disabled],input[disabled]{cursor:default;}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0;}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none;}textarea{overflow:auto;vertical-align:top;}table{border-collapse:collapse;border-spacing:0;}body,figure{margin:0;}legend,button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;} |
||||||
|
|
||||||
|
.clearfix:after {visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; } |
||||||
|
|
||||||
|
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } |
||||||
|
|
||||||
|
|
||||||
|
img |
||||||
|
max-width 100% |
@ -0,0 +1,45 @@ |
|||||||
|
/* |
||||||
|
Variables |
||||||
|
*/ |
||||||
|
|
||||||
|
blue = #125688 |
||||||
|
offwhite = #fafafa |
||||||
|
lightgrey = #EDEEED |
||||||
|
lightgray = lightgrey // OH Canada! |
||||||
|
|
||||||
|
html |
||||||
|
font-size 10px |
||||||
|
font-family sans-serif |
||||||
|
|
||||||
|
p |
||||||
|
font-size 1.6rem |
||||||
|
line-height 1.5 |
||||||
|
|
||||||
|
h1 |
||||||
|
font-family billabong, 'billabongregular' |
||||||
|
text-align center |
||||||
|
font-weight 100 |
||||||
|
font-size 13rem |
||||||
|
margin 2rem 0 |
||||||
|
letter-spacing -1px |
||||||
|
text-shadow 0px 4px 0 rgba(18, 86, 136, 0.11) |
||||||
|
a |
||||||
|
color blue |
||||||
|
text-decoration none |
||||||
|
&:focus |
||||||
|
outline 0 |
||||||
|
|
||||||
|
|
||||||
|
// "Instagram-like" webfont |
||||||
|
|
||||||
|
@font-face { |
||||||
|
font-family: 'billabongregular'; |
||||||
|
src: url('https://cdn.rawgit.com/milktronics/beaglegr.am/master/public/fonts/billabong-webfont.eot'); |
||||||
|
src: url('https://cdn.rawgit.com/milktronics/beaglegr.am/master/public/fonts/billabong-webfont.eot?#iefix') format('embedded-opentype'), |
||||||
|
url('https://cdn.rawgit.com/milktronics/beaglegr.am/master/public/fonts/billabong-webfont.woff') format('woff'), |
||||||
|
url('https://cdn.rawgit.com/milktronics/beaglegr.am/master/public/fonts/billabong-webfont.ttf') format('truetype'), |
||||||
|
url('https://cdn.rawgit.com/milktronics/beaglegr.am/master/public/fonts/billabong-webfont.svg#billabongregular') format('svg'); |
||||||
|
font-weight: normal; |
||||||
|
font-style: normal; |
||||||
|
|
||||||
|
} |
@ -0,0 +1,149 @@ |
|||||||
|
@import '_normalize.styl' |
||||||
|
@import '_typography.styl' |
||||||
|
@import '_animations.styl' |
||||||
|
|
||||||
|
body |
||||||
|
background offwhite |
||||||
|
|
||||||
|
.photo-grid |
||||||
|
display flex |
||||||
|
flex-wrap wrap |
||||||
|
max-width 1200px |
||||||
|
margin 0 auto |
||||||
|
|
||||||
|
.grid-figure |
||||||
|
flex-basis calc(33.333% - 4rem) |
||||||
|
flex-grow 1 |
||||||
|
flex-shrink 0 |
||||||
|
margin 0 2rem 2rem 2rem |
||||||
|
padding 2rem |
||||||
|
border 1px solid lightgray |
||||||
|
background white |
||||||
|
box-shadow 0 0 0 5px rgba(0,0,0,0.03); |
||||||
|
position relative |
||||||
|
|
||||||
|
.single-photo |
||||||
|
@extend .grid-figure |
||||||
|
max-width 900px |
||||||
|
margin 0 auto |
||||||
|
display flex |
||||||
|
background white |
||||||
|
.grid-figure |
||||||
|
box-shadow none |
||||||
|
margin 0 2rem 0 0 |
||||||
|
border 0 |
||||||
|
padding 0 |
||||||
|
flex 1 0 60% |
||||||
|
max-width 60% |
||||||
|
.comments |
||||||
|
flex 1 0 40% |
||||||
|
max-width 40% |
||||||
|
.grid-photo |
||||||
|
width 100% |
||||||
|
margin 0 |
||||||
|
|
||||||
|
.grid-photo |
||||||
|
width calc(100% + 4rem) |
||||||
|
margin-left -2rem |
||||||
|
margin-top -2rem |
||||||
|
max-width none |
||||||
|
|
||||||
|
// Comments |
||||||
|
.remove-comment |
||||||
|
background none |
||||||
|
border 0 |
||||||
|
line-height 1 |
||||||
|
opacity 0 |
||||||
|
&:hover |
||||||
|
color red |
||||||
|
|
||||||
|
.comment |
||||||
|
border-bottom 1px solid lightgrey |
||||||
|
padding 0.5rem 0 |
||||||
|
p |
||||||
|
font-size 1.2rem |
||||||
|
margin 0 |
||||||
|
strong |
||||||
|
color blue |
||||||
|
margin-right 5px |
||||||
|
&:hover |
||||||
|
.remove-comment |
||||||
|
opacity 1 |
||||||
|
|
||||||
|
.comment-form |
||||||
|
input, textarea |
||||||
|
width 100% |
||||||
|
border 0 |
||||||
|
font-size 1.3rem |
||||||
|
padding 1rem 0 |
||||||
|
border-bottom 1px solid lightgrey |
||||||
|
outline none |
||||||
|
resize vertical |
||||||
|
|
||||||
|
|
||||||
|
.grid-photo-wrap |
||||||
|
position relative |
||||||
|
|
||||||
|
.likes-heart |
||||||
|
background url(http://f.cl.ly/items/3Y373q2Q3J3Y1j203n0m/Bitmap-3.png) center no-repeat |
||||||
|
background-size contain |
||||||
|
font-size 2rem |
||||||
|
padding 1rem |
||||||
|
position absolute |
||||||
|
color blue |
||||||
|
left 50% |
||||||
|
top 50% |
||||||
|
pointer-events none |
||||||
|
|
||||||
|
|
||||||
|
/* |
||||||
|
Buttons |
||||||
|
*/ |
||||||
|
|
||||||
|
.control-buttons |
||||||
|
display flex |
||||||
|
justify-content space-between |
||||||
|
|
||||||
|
button, .button |
||||||
|
border 2px solid lighten(grey, 90%) |
||||||
|
background none |
||||||
|
flex-basis 48% |
||||||
|
display inline-block |
||||||
|
line-height 2 |
||||||
|
text-decoration none |
||||||
|
padding 5px |
||||||
|
text-align center |
||||||
|
font-size 15px |
||||||
|
color blue |
||||||
|
transition all 0.2s |
||||||
|
box-sizing padding-box |
||||||
|
&:hover, &:focus |
||||||
|
border-color blue |
||||||
|
outline 0 |
||||||
|
|
||||||
|
/* |
||||||
|
Cowboy style speech bubble - you should probably use an SVG for this if you are doing more icons. |
||||||
|
*/ |
||||||
|
.speech-bubble |
||||||
|
size = 1.25rem |
||||||
|
width size * 1.2 |
||||||
|
height size |
||||||
|
background blue |
||||||
|
display inline-block |
||||||
|
border-radius 50% |
||||||
|
position relative |
||||||
|
&:after |
||||||
|
display inline-block |
||||||
|
position absolute |
||||||
|
content '' |
||||||
|
width: 0; |
||||||
|
height: 0; |
||||||
|
border-style: solid; |
||||||
|
border-width: 0 size size 0 |
||||||
|
border-color: transparent blue transparent transparent |
||||||
|
top 30% |
||||||
|
left 0 |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,27 @@ |
|||||||
|
var path = require('path'); |
||||||
|
var express = require('express'); |
||||||
|
var webpack = require('webpack'); |
||||||
|
var config = require('./webpack.config.dev'); |
||||||
|
|
||||||
|
var app = express(); |
||||||
|
var compiler = webpack(config); |
||||||
|
|
||||||
|
app.use(require('webpack-dev-middleware')(compiler, { |
||||||
|
noInfo: true, |
||||||
|
publicPath: config.output.publicPath |
||||||
|
})); |
||||||
|
|
||||||
|
app.use(require('webpack-hot-middleware')(compiler)); |
||||||
|
|
||||||
|
app.get('*', function(req, res) { |
||||||
|
res.sendFile(path.join(__dirname, 'index.html')); |
||||||
|
}); |
||||||
|
|
||||||
|
app.listen(7700, 'localhost', function(err) { |
||||||
|
if (err) { |
||||||
|
console.log(err); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
console.log('Listening at http://localhost:7700'); |
||||||
|
}); |
@ -0,0 +1,13 @@ |
|||||||
|
<!doctype html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta charset="UTF-8"> |
||||||
|
<title>React + Redux</title> |
||||||
|
<link rel="shortcut icon" type="image/png" href="https://avatars1.githubusercontent.com/u/17867603?v=3&s=200"/> |
||||||
|
|
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="root"></div> |
||||||
|
<script src="/static/bundle.js"></script> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,60 @@ |
|||||||
|
{ |
||||||
|
"name": "learn-redux", |
||||||
|
"version": "0.0.1", |
||||||
|
"description": ":) ", |
||||||
|
"scripts": { |
||||||
|
"build:webpack": "NODE_ENV=production webpack --config webpack.config.prod.js", |
||||||
|
"build": "npm run clean && npm run build:webpack", |
||||||
|
"test": "NODE_ENV=production mocha './tests/**/*.spec.js' --compilers js:babel-core/register", |
||||||
|
"clean": "rimraf dist", |
||||||
|
"start": "node devServer.js", |
||||||
|
"tunnel": "browser-sync start --proxy localhost:7700 --tunnel wesbos" |
||||||
|
}, |
||||||
|
"repository": { |
||||||
|
"type": "git", |
||||||
|
"url": "https://github.com/wesbos/Learn-Redux.git" |
||||||
|
}, |
||||||
|
"author": "@sipp11", |
||||||
|
"license": "MIT", |
||||||
|
"homepage": "https://www.traffy.in.th", |
||||||
|
"dependencies": { |
||||||
|
"babel-core": "^6.7.7", |
||||||
|
"babel-eslint": "^6.0.4", |
||||||
|
"babel-loader": "^6.2.4", |
||||||
|
"babel-plugin-react-transform": "^2.0.2", |
||||||
|
"babel-plugin-transform-object-rest-spread": "^6.6.5", |
||||||
|
"babel-plugin-transform-react-display-name": "^6.5.0", |
||||||
|
"babel-polyfill": "^6.7.4", |
||||||
|
"babel-preset-es2015": "^6.6.0", |
||||||
|
"babel-preset-react": "^6.5.0", |
||||||
|
"css-loader": "^0.23.1", |
||||||
|
"eslint": "^2.9.0", |
||||||
|
"eslint-plugin-babel": "^3.2.0", |
||||||
|
"eslint-plugin-react": "^5.0.1", |
||||||
|
"express": "^4.13.4", |
||||||
|
"raven-js": "^2.3.0", |
||||||
|
"react": "^15.0.2", |
||||||
|
"react-addons-css-transition-group": "^15.0.2", |
||||||
|
"react-dom": "^15.0.2", |
||||||
|
"react-redux": "^4.4.5", |
||||||
|
"react-router": "^2.4.0", |
||||||
|
"react-router-redux": "^4.0.4", |
||||||
|
"react-transform-catch-errors": "^1.0.2", |
||||||
|
"react-transform-hmr": "^1.0.4", |
||||||
|
"redbox-react": "^1.2.3", |
||||||
|
"redux": "^3.5.2", |
||||||
|
"rimraf": "^2.5.2", |
||||||
|
"style-loader": "^0.13.1", |
||||||
|
"stylus": "^0.54.5", |
||||||
|
"stylus-loader": "^2.0.0", |
||||||
|
"webpack": "^1.13.0", |
||||||
|
"webpack-dev-middleware": "^1.6.1", |
||||||
|
"webpack-hot-middleware": "^2.10.0" |
||||||
|
}, |
||||||
|
"devDependencies": { |
||||||
|
"expect": "^1.18.0", |
||||||
|
"expect-jsx": "^2.5.1", |
||||||
|
"mocha": "^2.4.5", |
||||||
|
"react-addons-test-utils": "^15.0.2" |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
# App React Redux |
||||||
|
|
||||||
|
A simple React + Redux implementation. |
||||||
|
|
||||||
|
## Running |
||||||
|
|
||||||
|
First `npm install` to grab all the necessary dependencies. |
||||||
|
|
||||||
|
Then run `npm start` and open <localhost:7700> in your browser. |
||||||
|
|
||||||
|
## Production Build |
||||||
|
|
||||||
|
Run `npm build` to create a distro folder and a bundle.js file. |
@ -0,0 +1,35 @@ |
|||||||
|
var path = require('path'); |
||||||
|
var webpack = require('webpack'); |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
devtool: 'source-map', |
||||||
|
entry: [ |
||||||
|
'webpack-hot-middleware/client', |
||||||
|
'./client/app' |
||||||
|
], |
||||||
|
output: { |
||||||
|
path: path.join(__dirname, 'dist'), |
||||||
|
filename: 'bundle.js', |
||||||
|
publicPath: '/static/' |
||||||
|
}, |
||||||
|
plugins: [ |
||||||
|
new webpack.HotModuleReplacementPlugin(), |
||||||
|
new webpack.NoErrorsPlugin() |
||||||
|
], |
||||||
|
module: { |
||||||
|
loaders: [ |
||||||
|
// js
|
||||||
|
{ |
||||||
|
test: /\.js$/, |
||||||
|
loaders: ['babel'], |
||||||
|
include: path.join(__dirname, 'client') |
||||||
|
}, |
||||||
|
// CSS
|
||||||
|
{
|
||||||
|
test: /\.styl$/,
|
||||||
|
include: path.join(__dirname, 'client'), |
||||||
|
loader: 'style-loader!css-loader!stylus-loader' |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
}; |
@ -0,0 +1,44 @@ |
|||||||
|
var path = require('path'); |
||||||
|
var webpack = require('webpack'); |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
devtool: 'source-map', |
||||||
|
entry: [ |
||||||
|
|
||||||
|
'./client/app' |
||||||
|
], |
||||||
|
output: { |
||||||
|
path: path.join(__dirname, 'dist'), |
||||||
|
filename: 'bundle.js', |
||||||
|
publicPath: '/static/' |
||||||
|
}, |
||||||
|
plugins: [ |
||||||
|
new webpack.optimize.OccurenceOrderPlugin(), |
||||||
|
new webpack.DefinePlugin({ |
||||||
|
'process.env': { |
||||||
|
'NODE_ENV': "'production'" |
||||||
|
} |
||||||
|
}), |
||||||
|
new webpack.optimize.UglifyJsPlugin({ |
||||||
|
compressor: { |
||||||
|
warnings: false |
||||||
|
} |
||||||
|
}) |
||||||
|
], |
||||||
|
module: { |
||||||
|
loaders: [ |
||||||
|
// js
|
||||||
|
{ |
||||||
|
test: /\.js$/, |
||||||
|
loaders: ['babel'], |
||||||
|
include: path.join(__dirname, 'client') |
||||||
|
}, |
||||||
|
// CSS
|
||||||
|
{
|
||||||
|
test: /\.styl$/,
|
||||||
|
include: path.join(__dirname, 'client'), |
||||||
|
loader: 'style-loader!css-loader!stylus-loader' |
||||||
|
} |
||||||
|
] |
||||||
|
} |
||||||
|
}; |
Loading…
Reference in new issue