{"_id":"twreporter-react","_rev":"60-c8e891102a2696f8f895a882add5492f","name":"twreporter-react","description":"React-Redux site for The Reporter Foundation in Taiwan","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"twreporter-react","version":"0.1.0","description":"React-Redux site for The Reporter Foundation in Taiwan","scripts":{"build":"webpack --verbose --colors --display-error-details --config webpack/prod.config.js","build-pkg":"npm run clean && npm run build-pkg:js && npm run build-pkg:css","build-pkg:js":"WEBPACK_CONFIG=$(pwd)/webpack/pkg.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ./node_modules/.bin/babel --out-dir='lib' src","build-pkg:css":"npm run build-pkg:bootstrap && mkdir -p lib/styles && node ./concatCssFiles $(pwd) && ./node_modules/.bin/rimraf lib-css","build-pkg:bootstrap":"webpack --verbose --colors --display-error-details --config $(pwd)/webpack/bootstrap.config.js","clean":"rimraf lib","dev":"concurrent --kill-others \"npm run watch-client\" \"npm run start-dev-api\" \"npm run start-dev\" ","start-dev":"better-npm-run start-dev","start-dev-api":"better-npm-run start-dev-api","watch-client":"better-npm-run watch-client","start":"concurrent --kill-others \"npm run start-prod\" \"npm run start-prod-api\"","start-prod":"better-npm-run start-prod","start-prod-api":"better-npm-run start-prod-api","postinstall":"webpack --display-error-details --config webpack/prod.config.js","lint":"eslint -c .eslintrc src server api spec","production":"webpack -p --progress && forever -e err.log server/index.js","test":"./node_modules/mocha/bin/mocha $(find spec -name '*.test.js') --compilers js:babel-core/register","validate":"npm ls"},"betterScripts":{"start-prod":{"command":"forever -e err.log ./bin/server.js","env":{"NODE_PATH":"./server","NODE_ENV":"production","PORT":3000,"APIHOST":"localhost","APIPORT":3030,"APIPROTOCOL":"http"}},"start-prod-api":{"command":"forever ./bin/api.js","env":{"NODE_PATH":"./api","NODE_ENV":"production","APIPORT":3030}},"start-dev":{"command":"node ./bin/server.js","env":{"NODE_PATH":"./server","NODE_ENV":"development","PORT":3000,"APIHOST":"localhost","APIPORT":3030,"APIPROTOCOL":"http"}},"start-dev-api":{"command":"node ./bin/api.js","env":{"NODE_PATH":"./api","NODE_ENV":"development","APIPORT":3030}},"watch-client":{"command":"node webpack/webpack-dev-server.js","env":{"UV_THREADPOOL_SIZE":100,"NODE_PATH":"./src"}}},"repository":{"type":"git","url":"git+https://github.com/twreporter/twreporter-react.git"},"license":"MIT","engines":{"node":">=4.1.1"},"bugs":{"url":"https://github.com/twreporter/twreporter-react/issues"},"dependencies":{"async":"^1.5.2","autoprefixer":"^6.2.1","babel-core":"^6.3.21","babel-loader":"^6.2.0","babel-plugin-rewire":"^0.1.22","babel-plugin-transform-react-constant-elements":"^6.3.13","babel-plugin-transform-react-inline-elements":"^6.3.13","babel-plugin-transform-runtime":"^6.3.13","babel-plugin-typecheck":"^3.0.0","babel-polyfill":"^6.3.14","babel-preset-es2015":"^6.3.13","babel-preset-react":"^6.3.13","babel-preset-stage-0":"^6.3.13","babel-runtime":"^6.3.19","better-npm-run":"0.0.5","bluebird":"^2.10.0","bootstrap-loader":"^1.0.10","bootstrap-sass":"^3.3.6","classnames":"^2.2.1","clean-webpack-plugin":"^0.1.4","concurrently":"^0.1.1","css-loader":"^0.23.1","ejs":"^2.3.4","es6-error":"^2.1.1","express":"^4.13.3","extract-text-webpack-plugin":"^0.9.1","history":"^2.1.2","http-proxy":"^1.12.0","humps":"^0.6.0","isomorphic-fetch":"^2.1.1","jsdom":"^7.0.1","json-loader":"^0.5.3","lodash":"^3.10.1","mobile-detect":"^1.3.0","node-sass":"^3.7.0","normalizr":"^1.0.0","piping":"^0.3.0","postcss-loader":"^0.9.1","pretty-error":"^2.0.0","qs":"^5.2.0","raf":"^3.2.0","rc-slider":"^3.7.2","react":"^15.2.0","react-addons-css-transition-group":"^15.2.0","react-addons-test-utils":"^15.2.0","react-burger-menu":"^1.4.4","react-document-title":"^2.0.2","react-dom":"^15.1.0","react-flex-carousel":"^0.1.7","react-howler":"^3.0.1","react-inline-css":"^2.0.0","react-intl":"^2.1.2","react-lazy-load":"^3.0.10","react-redux":"^4.4.5","react-responsive":"^1.1.3","react-router":"^2.5.1","react-router-redux":"^4.0.5","react-social":"^1.4.2","react-swipeable":"^3.5.1","react-transform-catch-errors":"^1.0.0","react-transform-hmr":"^1.0.1","react-youtube":"^7.0.1","redux":"^3.5.2","redux-logger":"^1.0.9","redux-mock-store":"^1.0.2","redux-thunk":"^0.1.0","resolve-url-loader":"^1.4.3","rewire":"^2.3.4","rewire-webpack":"^1.0.0","sass-loader":"^3.2.0","scrollmagic":"^2.0.5","strip-loader":"^0.1.0","style-loader":"^0.13.1","superagent":"^1.4.0","url-loader":"^0.5.7","webpack":"^1.9.11","webpack-isomorphic-tools":"^2.3.0"},"devDependencies":{"autoprefixer-loader":"^3.1.0","babel-cli":"^6.10.1","babel-eslint":"^5.0.0-beta6","babel-plugin-react-transform":"^2.0.0","babel-plugin-webpack-loaders":"^0.6.1","browser-sync":"^2.10.1","chai":"^3.3.0","chai-as-promised":"^5.1.0","compression":"^1.6.0","eslint":"1.10.3","eslint-config-rackt":"^1.1.1","eslint-loader":"^1.0.0","eslint-plugin-babel":"^3.0.0","eslint-plugin-import":"^0.8.0","eslint-plugin-react":"^3.13.0","forever":"^0.15.1","image-webpack-loader":"^1.6.2","karma":"^0.13.10","karma-chrome-launcher":"^0.2.0","karma-sinon":"^1.0.4","karma-source-map-support":"^1.1.0","karma-spec-reporter":"0.0.20","karma-webpack":"^1.7.0","mocha":"^2.3.3","nock":"^2.17.0","node-sass":"^3.4.2","precommit-hook":"^3.0.0","react-hot-loader":"^1.3.0","react-transform-hmr":"^1.0.1","rimraf":"^2.5.2","sass-loader":"^3.1.2","sinon":"^1.17.1","sinon-chai":"^2.8.0","strip-ansi":"^3.0.0","webpack-dev-middleware":"^1.4.0","webpack-hot-middleware":"^2.6.0"},"pre-commit":["lint"],"gitHead":"6efea3a5231d6e02d839488b67729b20e698bd67","homepage":"https://github.com/twreporter/twreporter-react#readme","_id":"twreporter-react@0.1.0","_shasum":"e81cc049781ae33ce270c55736e1cfc89d98bd08","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"twreporter","email":"twreporter25363030@gmail.com"},"dist":{"shasum":"e81cc049781ae33ce270c55736e1cfc89d98bd08","tarball":"https://registry.npmjs.org/twreporter-react/-/twreporter-react-0.1.0.tgz","integrity":"sha512-7RHExY6AOxmdqyS/Yz3BoaaGEl6q5eL46htW3RTuHRRQ3pIBEej6/rbv1AjYUoxdXCQrffhrOQkB/xLUeTg7PQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCot3YP+/KUMVgKtz9pHLS6/YFlAhpq/TQS9Hp98ghJOAIgX2DVsDAjMrcukLg23o86umAOAteiZuyLmTILO0OCJy8="}]},"maintainers":[{"name":"twreporter","email":"twreporter25363030@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/twreporter-react-0.1.0.tgz_1470659657233_0.9287419838365167"},"deprecated":"Use @twreporter/react-components instead","directories":{}}},"readme":"# TW Reporter\nNew Media foundation in Taiwan.\n\n# Environment\n  Install node(https://nodejs.org/en/) v5.x.x first.\n\n# Installation\n    $ npm install\n\n# Development\n    $ npm run dev\n  \n# Production\n    $ npm run build; npm run start\n\n## React & Redux\nThis project is built on Redux framework and rendered by React.\nIt uses server-side(universal) rendering, and also integrate ```Webpack Hot Middleware``` in Dev environment.\n\n## Redux State\nSince Redux see its state as single source of truth, we store our own data like the plain object below.\n```\n{\n  selectedArticle: {\n    isFetching: false,\n    slug: 'article-slug-1',\n    error: null,\n    lastUpdated: 1461656746427\n  }\n  entities: {\n    athours: {\n      'author-id-2': {\n        id: 'author-id-2',\n        name: 'Mika',\n        bio: ''\n        email: 'contact@twreporter.org'\n      },\n      'author-id-3': {\n        id: 'author-id-3',\n        name: 'HC',\n        bio: '',\n        email: 'contact@twreporter.org'\n      }\n    },\n    categories: {\n      'category-id-1': {\n        id: \"category-id-1\",\n        key: \"category-1\",\n        name: \"category-1\",\n        _v: 0,\n        sortOrder: 1\n      }, \n      'category-id-2': {        \n        id: \"category-id-2\",\n        key: \"category-2\",\n        name: \"category-2\",\n        _v: 0,\n        sortOrder: 2\n      }\n    },\n    tags: {\n      'tag-id-1': {\n        id: \"tag-id-1\",\n        key: \"tag-1\",\n        v: 0,\n        name: \"tag-1\"\n      }, \n      'tag-id-2': {\n        id: \"tag-id-2\",\n        key: \"tag-2\",\n        v: 0,\n        name: \"tag-2\"\n      }\n    },\n    articles: {\n      'article-slug-1': {\n        relateds: ['article-slug-2'],\n        _updated: \"Thu, 01 Jan 1970 00:00:00 GMT\",\n        style: \"article\",\n        byline: \"文/mika 攝/HC\",\n        subtitle: \"\",\n        name: \"article-slug-1\",\n        tags: ['tag-id-1'],\n        title: \"測試文章\",\n        publishedDate: \"Fri, 29 Apr 2016 08:05:25 GMT\",\n        content: {\n          brief: {\n            html: \"\",\n            draft: {...},\n            apiData: [...]\n          },\n          extend: {\n            html: \"\",\n            draft: {...},\n            apiData: [...]\n          }\n        },\n        state: \"published\",\n        og_description: \"\",\n        authors: ['author-id-2', 'author-id-3'],\n        og_title: \"\",\n        id: \"article-id-1\",\n        slug: \"article-slug-1\",\n        categories: ['category-id-1'],\n        created: \"Thu, 01 Jan 1970 00:00:00 GMT\"\n      },\n      'article-slug-2': {\n        ...\n      }\n    }\n  },\n  tags: {\n    'tag-1': {\n      isFetching: false,\n      error: null, \n      id: 'tag-id-1'\n    },\n    'tag-2': {\n      isFetching: false,\n      error: null, \n      id: 'tag-id-2'\n    }\n  },\n  categories: {\n    'category-1': {\n      isFetching: false,\n      error: null, \n      id: 'category-id-1'\n    },\n    'category-2': {\n      isFetching: false,\n      error: null, \n      id: 'category-id-2'\n    }\n  },\n  articlesByCats: {\n    'category-1': {\n      isFetching: false,\n      error: null,\n      nextUrl: \"http://104.199.134.142:8080/posts?where={%22categories%22:{%22$in%22:%22category-id-1%22}}embedded={%22categories%22:1,%20%22tags%22:1}&max_results=1&page=3\",\n      items: ['article-slug-1', 'article-slug-2'],\n      lastUpdated: 1234567890\n    },\n    'category-2': {\n      isFetching: true,\n      error: null,\n      nextUrl: null,\n      items: []\n    },\n    'category-3': {\n      isFetching: false,\n      error: Error(\"API return 500\"),\n      nextUrl: null,\n      items: []\n    }\n  },\n  articlesByTags: {\n    'tag-1': {\n      isFetching: false,\n      error: null,\n      nextUrl: \"http://104.199.134.142:8080/posts?where={%22tags%22:{%22$in%22:%22tag-id-1%22}}embedded={%22categories%22:1,%20%22tags%22:1}&max_results=1&page=3\",\n      items: ['article-slug-1', 'article-slug-2'],\n      lastUpdated: 1234567890\n    },\n    'tag-2': {\n      isFetching: true,\n      error: null,\n      nextUrl: null,\n      items: []\n    },\n    'tag-3': {\n      isFetching: false,\n      error: Error(\"API return 500\"),\n      nextUrl: null,\n      items: []\n    }\n  }\n}\n```\n# Reference\n[react-redux-universal-hot-example](https://github.com/erikras/react-redux-universal-hot-example)\n[Redux](https://github.com/reactjs/redux)\n[React](https://github.com/facebook/react)\n\n# License\n* Copyright (C) 2015 - 2016 The Reporter 報導者. All rights reserved.\n* Distributed under the GNU AGPL v3.0\n\n","maintainers":[],"time":{"modified":"2022-06-28T00:30:55.043Z","created":"2016-08-08T12:34:26.008Z","0.1.0":"2016-08-08T12:34:26.008Z","0.1.1":"2016-08-08T12:41:52.069Z","0.1.2":"2016-08-08T12:49:37.670Z","0.1.3":"2016-08-08T12:51:17.364Z","0.1.4":"2016-08-08T13:07:15.414Z","0.1.5":"2016-08-08T13:57:53.836Z","0.1.6":"2016-08-08T14:18:07.283Z","0.1.7":"2016-08-09T00:40:08.202Z","0.1.8":"2016-08-09T01:10:36.063Z","0.1.9":"2016-08-09T01:21:33.036Z","1.0.0":"2016-08-09T01:34:30.726Z","1.0.1":"2016-08-09T06:20:40.743Z","1.0.2":"2016-08-11T14:43:19.550Z","1.0.3":"2016-08-11T16:12:47.198Z","1.0.4":"2016-08-11T16:23:41.051Z","1.0.5":"2016-08-16T08:59:58.187Z","1.0.6":"2016-08-17T13:24:58.196Z","1.0.7":"2016-08-18T12:14:24.460Z","1.0.8":"2016-08-18T12:20:37.723Z","1.0.9":"2016-08-18T13:06:27.973Z","1.0.10":"2016-08-18T13:20:59.863Z","1.0.11":"2016-08-23T03:10:57.611Z","1.0.12":"2016-08-24T12:01:47.436Z","1.0.13":"2016-08-29T11:23:16.058Z","1.0.14":"2016-08-30T03:34:52.164Z","1.0.15":"2016-08-30T14:45:50.104Z"},"homepage":"https://github.com/twreporter/twreporter-react#readme","repository":{"type":"git","url":"git+https://github.com/twreporter/twreporter-react.git"},"bugs":{"url":"https://github.com/twreporter/twreporter-react/issues"},"license":"MIT","readmeFilename":"README.md"}