├── .travis.yml ├── logo.png ├── babel.config.js ├── src ├── common │ ├── config.js │ ├── components │ │ ├── errors.js │ │ ├── footer.js │ │ └── header.js │ ├── jwt.js │ └── action.js ├── profile │ ├── service.js │ ├── components │ │ ├── nav.js │ │ └── user-info.js │ ├── my.js │ ├── action.js │ └── favorited.js ├── user │ ├── service.js │ ├── login.js │ ├── register.js │ ├── action.js │ └── setting.js ├── index.html ├── article │ ├── components │ │ ├── comment-editor.js │ │ ├── list.js │ │ └── meta.js │ ├── service.js │ ├── home.js │ ├── view.js │ ├── edit.js │ └── action.js └── index.js ├── test └── unit │ ├── common │ ├── jwt.spec.js │ └── action.spec.js │ └── article │ └── action.spec.js ├── .gitignore ├── webpack.config.js ├── package.json └── README.md /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - lts/* 5 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ecomfe/san-realworld-app/HEAD/logo.png -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@babel/preset-env' 4 | ] 5 | }; 6 | -------------------------------------------------------------------------------- /src/common/config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | API_URL: 'https://conduit.productionready.io/api', 3 | PAGE_SIZE: 10 4 | }; -------------------------------------------------------------------------------- /src/common/components/errors.js: -------------------------------------------------------------------------------- 1 | import san from 'san'; 2 | import { connect } from 'san-store'; 3 | 4 | export default connect.san( 5 | { 6 | errors: 'errors' 7 | } 8 | )(san.defineComponent({ 9 | template: ` 10 |
13 | ` 14 | })) -------------------------------------------------------------------------------- /src/common/jwt.js: -------------------------------------------------------------------------------- 1 | const ID_TOKEN_KEY = "id_token"; 2 | 3 | function getToken() { 4 | return window.localStorage.getItem(ID_TOKEN_KEY); 5 | }; 6 | 7 | function setToken(token) { 8 | window.localStorage.setItem(ID_TOKEN_KEY, token); 9 | }; 10 | 11 | function clearToken(){ 12 | window.localStorage.removeItem(ID_TOKEN_KEY); 13 | } 14 | 15 | export default { getToken, setToken, clearToken }; -------------------------------------------------------------------------------- /src/common/components/footer.js: -------------------------------------------------------------------------------- 1 | import san from 'san'; 2 | 3 | export default san.defineComponent({ 4 | template: ` 5 |{{ article.description }}
31 | Read more... 32 | 37 | 38 |