diff --git a/.meteor/.finished-upgraders b/.meteor/.finished-upgraders
index 3e712bc..a541808 100644
--- a/.meteor/.finished-upgraders
+++ b/.meteor/.finished-upgraders
@@ -13,3 +13,4 @@ notices-for-facebook-graph-api-2
1.3.0-split-minifiers-package
1.3.5-remove-old-dev-bundle-link
1.4.0-remove-old-dev-bundle-link
+1.4.1-add-shell-server-package
diff --git a/.meteor/packages b/.meteor/packages
index cb32a5a..6e488ac 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -6,19 +6,19 @@
meteor-base@1.0.4 # Packages every Meteor app needs to have
mobile-experience@1.0.4 # Packages for a great mobile UX
-mongo@1.1.10 # The database Meteor supports right now
-reactive-var@1.0.10 # Reactive variable for tracker
-session@1.1.6
-tracker@1.1.0 # Meteor's client-side reactive programming library
+mongo@1.1.14 # The database Meteor supports right now
+reactive-var@1.0.11 # Reactive variable for tracker
+session@1.1.7
+tracker@1.1.1 # Meteor's client-side reactive programming library
-standard-minifier-css@1.1.8 # CSS minifier run for production mode
-standard-minifier-js@1.1.8 # JS minifier run for production mode
-es5-shim@4.6.13 # ECMAScript 5 compatibility for older browsers.
-ecmascript@0.5.7 # Enable ECMAScript2015+ syntax in app code
+standard-minifier-css@1.3.2 # CSS minifier run for production mode
+standard-minifier-js@1.2.1 # JS minifier run for production mode
+es5-shim@4.6.15 # ECMAScript 5 compatibility for older browsers.
+ecmascript@0.5.9 # Enable ECMAScript2015+ syntax in app code
-accounts-password@1.2.12
-accounts-base@1.2.9
-check@1.2.3
+accounts-password@1.3.1
+accounts-base@1.2.14
+check@1.2.4
audit-argument-checks@1.0.7
browser-policy@1.0.9
@@ -32,4 +32,5 @@ practicalmeteor:mocha
xolvio:backdoor
mdg:validated-method
dburles:factory@1.0.0
-ddp-rate-limiter@1.0.5
+ddp-rate-limiter@1.0.6
+shell-server
diff --git a/.meteor/release b/.meteor/release
index c85944c..c260846 100644
--- a/.meteor/release
+++ b/.meteor/release
@@ -1 +1 @@
-METEOR@1.4.0.1
+METEOR@1.4.2
diff --git a/.meteor/versions b/.meteor/versions
index 6747b7b..6092391 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -1,106 +1,109 @@
-accounts-base@1.2.10
-accounts-password@1.2.14
+accounts-base@1.2.14
+accounts-password@1.3.1
alanning:roles@1.2.15
-aldeed:collection2@2.9.1
-aldeed:collection2-core@1.1.1
-aldeed:schema-deny@1.0.1
-aldeed:schema-index@1.0.1
+aldeed:collection2@2.10.0
+aldeed:collection2-core@1.2.0
+aldeed:schema-deny@1.1.0
+aldeed:schema-index@1.1.0
aldeed:simple-schema@1.5.3
allow-deny@1.0.5
audit-argument-checks@1.0.7
-autoupdate@1.2.11
-babel-compiler@6.9.0
-babel-runtime@0.1.10
-base64@1.0.9
-binary-heap@1.0.9
-blaze@2.1.8
-blaze-tools@1.0.9
-boilerplate-generator@1.0.9
+autoupdate@1.3.12
+babel-compiler@6.13.0
+babel-runtime@0.1.12
+base64@1.0.10
+binary-heap@1.0.10
+blaze@2.1.9
+blaze-tools@1.0.10
+boilerplate-generator@1.0.11
browser-policy@1.0.9
-browser-policy-common@1.0.10
-browser-policy-content@1.0.11
-browser-policy-framing@1.0.11
-caching-compiler@1.0.6
-caching-html-compiler@1.0.6
-callback-hook@1.0.9
-check@1.2.3
-coffeescript@1.1.4
+browser-policy-common@1.0.11
+browser-policy-content@1.0.12
+browser-policy-framing@1.0.12
+caching-compiler@1.1.8
+caching-html-compiler@1.0.7
+callback-hook@1.0.10
+check@1.2.4
+coffeescript@1.11.1_2
dburles:factory@1.1.0
ddp@1.2.5
-ddp-client@1.2.9
-ddp-common@1.2.6
-ddp-rate-limiter@1.0.5
-ddp-server@1.2.10
+ddp-client@1.3.2
+ddp-common@1.2.7
+ddp-rate-limiter@1.0.6
+ddp-server@1.3.11
deps@1.0.12
-diff-sequence@1.0.6
-ecmascript@0.5.7
-ecmascript-runtime@0.3.13
-ejson@1.0.12
-email@1.1.16
-es5-shim@4.6.13
-fastclick@1.0.12
-fortawesome:fontawesome@4.5.0
-fourseven:scss@3.8.1
-geojson-utils@1.0.9
+diff-sequence@1.0.7
+ecmascript@0.5.9
+ecmascript-runtime@0.3.15
+ejson@1.0.13
+email@1.1.18
+es5-shim@4.6.15
+fastclick@1.0.13
+fortawesome:fontawesome@4.6.3
+fourseven:scss@3.10.0
+geojson-utils@1.0.10
hot-code-push@1.0.4
-html-tools@1.0.10
-htmljs@1.0.10
-http@1.1.8
-id-map@1.0.8
-jquery@1.11.9
-launch-screen@1.0.12
+html-tools@1.0.11
+htmljs@1.0.11
+http@1.2.10
+id-map@1.0.9
+jquery@1.11.10
+launch-screen@1.1.0
livedata@1.0.18
-localstorage@1.0.11
-logging@1.1.14
+localstorage@1.0.12
+logging@1.1.16
mdg:validated-method@1.1.0
mdg:validation-error@0.5.1
-meteor@1.2.16
+meteor@1.6.0
meteor-base@1.0.4
-minifier-css@1.2.13
-minifier-js@1.2.13
-minimongo@1.0.17
+minifier-css@1.2.15
+minifier-js@1.2.15
+minimongo@1.0.18
mobile-experience@1.0.4
-mobile-status-bar@1.0.12
-modules@0.7.5
-modules-runtime@0.7.5
-mongo@1.1.10
-mongo-id@1.0.5
-npm-bcrypt@0.8.7_1
-npm-mongo@1.5.45
-observe-sequence@1.0.12
-ordered-dict@1.0.8
+mobile-status-bar@1.0.13
+modules@0.7.7
+modules-runtime@0.7.7
+mongo@1.1.14
+mongo-id@1.0.6
+npm-bcrypt@0.9.2
+npm-mongo@2.2.11_2
+observe-sequence@1.0.14
+ordered-dict@1.0.9
practicalmeteor:chai@2.1.0_1
practicalmeteor:loglevel@1.2.0_2
practicalmeteor:mocha@2.4.5_6
practicalmeteor:mocha-core@1.0.1
practicalmeteor:sinon@1.14.1_2
-promise@0.8.3
+promise@0.8.8
raix:eventemitter@0.1.3
random@1.0.10
-rate-limit@1.0.5
+rate-limit@1.0.6
reactive-dict@1.1.8
-reactive-var@1.0.10
-reload@1.1.10
-retry@1.0.8
-routepolicy@1.0.11
-service-configuration@1.0.10
-session@1.1.6
-sha@1.0.8
-spacebars@1.0.12
-spacebars-compiler@1.0.12
-srp@1.0.9
-standard-minifier-css@1.1.8
-standard-minifier-js@1.1.8
-static-html@1.1.11
-templating@1.1.14
-templating-tools@1.0.4
+reactive-var@1.0.11
+reload@1.1.11
+retry@1.0.9
+routepolicy@1.0.12
+service-configuration@1.0.11
+session@1.1.7
+sha@1.0.9
+shell-server@0.2.1
+spacebars@1.0.13
+spacebars-compiler@1.0.13
+srp@1.0.10
+standard-minifier-css@1.3.2
+standard-minifier-js@1.2.1
+static-html@1.1.13
+templating@1.2.15
+templating-compiler@1.2.15
+templating-runtime@1.2.15
+templating-tools@1.0.5
themeteorchef:bert@2.1.1
tmeasday:test-reporter-helpers@0.2.1
-tracker@1.1.0
-ui@1.0.11
-underscore@1.0.9
-url@1.0.10
-webapp@1.3.10
+tracker@1.1.1
+ui@1.0.12
+underscore@1.0.10
+url@1.0.11
+webapp@1.3.12
webapp-hashing@1.0.9
-xolvio:backdoor@0.2.0
+xolvio:backdoor@0.2.1
xolvio:cleaner@0.3.1
diff --git a/README.md b/README.md
index 9afdc91..915afca 100644
--- a/README.md
+++ b/README.md
@@ -5,11 +5,11 @@ A starting point for Meteor apps.
Base Version
- v4.7.0
+ v4.8.0
Meteor Version
- v1.4.0.1
+ v1.4.2
diff --git a/imports/api/documents/documents.js b/imports/api/documents/documents.js
index c9570dc..5578ed5 100644
--- a/imports/api/documents/documents.js
+++ b/imports/api/documents/documents.js
@@ -1,4 +1,4 @@
-import faker from 'faker';
+if (Meteor.isClient) import faker from 'faker';
import { Mongo } from 'meteor/mongo';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';
import { Factory } from 'meteor/dburles:factory';
diff --git a/imports/api/documents/methods.js b/imports/api/documents/methods.js
index c2339bd..dac5b4c 100644
--- a/imports/api/documents/methods.js
+++ b/imports/api/documents/methods.js
@@ -1,6 +1,6 @@
-import { Documents } from './documents';
import { SimpleSchema } from 'meteor/aldeed:simple-schema';
import { ValidatedMethod } from 'meteor/mdg:validated-method';
+import { Documents } from './documents';
import { rateLimit } from '../../modules/rate-limit.js';
export const insertDocument = new ValidatedMethod({
diff --git a/imports/modules/get-input-value.js b/imports/modules/get-input-value.js
deleted file mode 100644
index 365711b..0000000
--- a/imports/modules/get-input-value.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import ReactDOM from 'react-dom';
-
-export const getInputValue = (component) => ReactDOM.findDOMNode(component).value;
diff --git a/imports/startup/client/routes.js b/imports/startup/client/routes.js
index 85eebae..2ca0b69 100644
--- a/imports/startup/client/routes.js
+++ b/imports/startup/client/routes.js
@@ -2,14 +2,14 @@ import React from 'react';
import { render } from 'react-dom';
import { Router, Route, IndexRoute, browserHistory } from 'react-router';
import { Meteor } from 'meteor/meteor';
-import { App } from '../../ui/layouts/app';
-import { Documents } from '../../ui/pages/documents';
-import { Index } from '../../ui/pages/index';
-import { Login } from '../../ui/pages/login';
-import { NotFound } from '../../ui/pages/not-found';
-import { RecoverPassword } from '../../ui/pages/recover-password';
-import { ResetPassword } from '../../ui/pages/reset-password';
-import { Signup } from '../../ui/pages/signup';
+import { App } from '../../ui/layouts/App.js';
+import { Documents } from '../../ui/pages/Documents.js';
+import { Index } from '../../ui/pages/Index.js';
+import { Login } from '../../ui/pages/Login.js';
+import { NotFound } from '../../ui/pages/NotFound.js';
+import { RecoverPassword } from '../../ui/pages/RecoverPassword.js';
+import { ResetPassword } from '../../ui/pages/ResetPassword.js';
+import { Signup } from '../../ui/pages/Signup.js';
const requireAuth = (nextState, replace) => {
if (!Meteor.loggingIn() && !Meteor.userId()) {
diff --git a/imports/ui/components/AddDocument.js b/imports/ui/components/AddDocument.js
new file mode 100644
index 0000000..9cc7156
--- /dev/null
+++ b/imports/ui/components/AddDocument.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { FormGroup, FormControl } from 'react-bootstrap';
+import { Bert } from 'meteor/themeteorchef:bert';
+import { insertDocument } from '../../api/documents/methods.js';
+
+const handleInsertDocument = (event) => {
+ const target = event.target;
+ const title = target.value.trim();
+
+ if (title !== '' && event.keyCode === 13) {
+ insertDocument.call({
+ title,
+ }, (error) => {
+ if (error) {
+ Bert.alert(error.reason, 'danger');
+ } else {
+ target.value = '';
+ Bert.alert('Document added!', 'success');
+ }
+ });
+ }
+};
+
+const AddDocument = () => (
+
+
+
+);
+
+export default AddDocument;
diff --git a/imports/ui/components/AppNavigation.js b/imports/ui/components/AppNavigation.js
new file mode 100644
index 0000000..a22edb8
--- /dev/null
+++ b/imports/ui/components/AppNavigation.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import { Navbar } from 'react-bootstrap';
+import { Link } from 'react-router';
+import { PublicNavigation } from './PublicNavigation.js';
+import { AuthenticatedNavigation } from './AuthenticatedNavigation.js';
+
+const renderNavigation = hasUser => (hasUser ? : );
+
+const AppNavigation = ({ hasUser }) => (
+
+
+
+ Application Name
+
+
+
+
+ { renderNavigation(hasUser) }
+
+
+);
+
+AppNavigation.propTypes = {
+ hasUser: React.PropTypes.object,
+};
+
+export default AppNavigation;
diff --git a/imports/ui/components/AuthenticatedNavigation.js b/imports/ui/components/AuthenticatedNavigation.js
new file mode 100644
index 0000000..b75c066
--- /dev/null
+++ b/imports/ui/components/AuthenticatedNavigation.js
@@ -0,0 +1,33 @@
+import React from 'react';
+import { browserHistory } from 'react-router';
+import { IndexLinkContainer, LinkContainer } from 'react-router-bootstrap';
+import { Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap';
+import { Meteor } from 'meteor/meteor';
+
+const handleLogout = () => Meteor.logout(() => browserHistory.push('/login'));
+
+const userName = () => {
+ const user = Meteor.user();
+ const name = user && user.profile ? user.profile.name : '';
+ return user ? `${name.first} ${name.last}` : '';
+};
+
+const AuthenticatedNavigation = () => (
+
+
+
+ Index
+
+
+ Documents
+
+
+
+
+ Logout
+
+
+
+);
+
+export default AuthenticatedNavigation;
diff --git a/imports/ui/components/DocumentsList.js b/imports/ui/components/DocumentsList.js
new file mode 100644
index 0000000..288613b
--- /dev/null
+++ b/imports/ui/components/DocumentsList.js
@@ -0,0 +1,18 @@
+import React from 'react';
+import { ListGroup, Alert } from 'react-bootstrap';
+import { Document } from './Document.js';
+
+const DocumentsList = ({ documents }) => (
+ documents.length > 0 ?
+ {documents.map(doc => (
+
+ ))}
+ :
+ No documents yet.
+);
+
+DocumentsList.propTypes = {
+ documents: React.PropTypes.array,
+};
+
+export default DocumentsList;
diff --git a/imports/ui/components/PublicNavigation.js b/imports/ui/components/PublicNavigation.js
new file mode 100644
index 0000000..d04fc80
--- /dev/null
+++ b/imports/ui/components/PublicNavigation.js
@@ -0,0 +1,16 @@
+import React from 'react';
+import { LinkContainer } from 'react-router-bootstrap';
+import { Nav, NavItem } from 'react-bootstrap';
+
+const PublicNavigation = () => (
+
+
+ Sign Up
+
+
+ Log In
+
+
+);
+
+export default PublicNavigation;
diff --git a/imports/ui/components/add-document.js b/imports/ui/components/add-document.js
deleted file mode 100644
index a08c345..0000000
--- a/imports/ui/components/add-document.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react';
-import { FormGroup, FormControl } from 'react-bootstrap';
-import { Bert } from 'meteor/themeteorchef:bert';
-import { insertDocument } from '../../api/documents/methods.js';
-
-const handleInsertDocument = (event) => {
- const target = event.target;
- const title = target.value.trim();
-
- if (title !== '' && event.keyCode === 13) {
- insertDocument.call({
- title,
- }, (error) => {
- if (error) {
- Bert.alert(error.reason, 'danger');
- } else {
- target.value = '';
- Bert.alert('Document added!', 'success');
- }
- });
- }
-};
-
-export const AddDocument = () => (
-
-
-
-);
diff --git a/imports/ui/components/app-navigation.js b/imports/ui/components/app-navigation.js
deleted file mode 100644
index a8276fa..0000000
--- a/imports/ui/components/app-navigation.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import React from 'react';
-import { Navbar } from 'react-bootstrap';
-import { Link } from 'react-router';
-import { PublicNavigation } from './public-navigation';
-import { AuthenticatedNavigation } from './authenticated-navigation';
-
-export class AppNavigation extends React.Component {
- renderNavigation(hasUser) {
- return hasUser ? : ;
- }
-
- render() {
- return
-
-
- Application Name
-
-
-
-
- { this.renderNavigation(this.props.hasUser) }
-
- ;
- }
-}
-
-AppNavigation.propTypes = {
- hasUser: React.PropTypes.object,
-};
diff --git a/imports/ui/components/authenticated-navigation.js b/imports/ui/components/authenticated-navigation.js
deleted file mode 100644
index ff8d001..0000000
--- a/imports/ui/components/authenticated-navigation.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react';
-import { browserHistory } from 'react-router';
-import { IndexLinkContainer, LinkContainer } from 'react-router-bootstrap';
-import { Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap';
-import { Meteor } from 'meteor/meteor';
-
-const handleLogout = () => Meteor.logout(() => browserHistory.push('/login'));
-
-const userName = () => {
- const user = Meteor.user();
- const name = user && user.profile ? user.profile.name : '';
- return user ? `${name.first} ${name.last}` : '';
-};
-
-export const AuthenticatedNavigation = () => (
-
-
-
- Index
-
-
- Documents
-
-
-
-
- Logout
-
-
-
-);
diff --git a/imports/ui/components/document.js b/imports/ui/components/document.js
index 96f8ec8..0cc1ee2 100644
--- a/imports/ui/components/document.js
+++ b/imports/ui/components/document.js
@@ -37,7 +37,7 @@ const handleRemoveDocument = (documentId, event) => {
}
};
-export const Document = ({ document }) => (
+const Document = ({ document }) => (
@@ -58,3 +58,9 @@ export const Document = ({ document }) => (
);
+
+Document.propTypes = {
+ document: React.PropTypes.object,
+};
+
+export default Document;
diff --git a/imports/ui/components/documents-list.js b/imports/ui/components/documents-list.js
deleted file mode 100644
index f61fdc9..0000000
--- a/imports/ui/components/documents-list.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import React from 'react';
-import { ListGroup, Alert } from 'react-bootstrap';
-import { Document } from './document.js';
-
-export const DocumentsList = ({ documents }) => (
- documents.length > 0 ?
- {documents.map((doc) => (
-
- ))}
- :
- No documents yet.
-);
-
-DocumentsList.propTypes = {
- documents: React.PropTypes.array,
-};
diff --git a/imports/ui/components/loading.js b/imports/ui/components/loading.js
index f63d935..e7c7e7e 100644
--- a/imports/ui/components/loading.js
+++ b/imports/ui/components/loading.js
@@ -1,6 +1,6 @@
import React from 'react';
-export const Loading = () => (
+const Loading = () => (
(
);
+
+export default Loading;
diff --git a/imports/ui/components/public-navigation.js b/imports/ui/components/public-navigation.js
deleted file mode 100644
index a1f4e99..0000000
--- a/imports/ui/components/public-navigation.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import React from 'react';
-import { LinkContainer } from 'react-router-bootstrap';
-import { Nav, NavItem } from 'react-bootstrap';
-
-export const PublicNavigation = () => (
-
-
- Sign Up
-
-
- Log In
-
-
-);
diff --git a/imports/ui/containers/AppNavigation.js b/imports/ui/containers/AppNavigation.js
new file mode 100644
index 0000000..f272227
--- /dev/null
+++ b/imports/ui/containers/AppNavigation.js
@@ -0,0 +1,7 @@
+import { composeWithTracker } from 'react-komposer';
+import { Meteor } from 'meteor/meteor';
+import { AppNavigation } from '../components/AppNavigation.js';
+
+const composer = (props, onData) => onData(null, { hasUser: Meteor.user() });
+
+export default composeWithTracker(composer, {}, {}, { pure: false })(AppNavigation);
diff --git a/imports/ui/containers/DocumentsList.js b/imports/ui/containers/DocumentsList.js
new file mode 100644
index 0000000..0768ded
--- /dev/null
+++ b/imports/ui/containers/DocumentsList.js
@@ -0,0 +1,15 @@
+import { composeWithTracker } from 'react-komposer';
+import { Meteor } from 'meteor/meteor';
+import { Documents } from '../../api/documents/documents.js';
+import { DocumentsList } from '../components/DocumentsList.js';
+import { Loading } from '../components/Loading.js';
+
+const composer = (params, onData) => {
+ const subscription = Meteor.subscribe('documents');
+ if (subscription.ready()) {
+ const documents = Documents.find().fetch();
+ onData(null, { documents });
+ }
+};
+
+export default composeWithTracker(composer, Loading)(DocumentsList);
diff --git a/imports/ui/containers/app-navigation.js b/imports/ui/containers/app-navigation.js
deleted file mode 100644
index 4e39dcb..0000000
--- a/imports/ui/containers/app-navigation.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import { composeWithTracker } from 'react-komposer';
-import { Meteor } from 'meteor/meteor';
-import { AppNavigation } from '../components/app-navigation';
-
-const composer = (props, onData) => {
- onData(null, { hasUser: Meteor.user() });
-};
-
-export default composeWithTracker(composer, {}, {}, { pure: false })(AppNavigation);
diff --git a/imports/ui/containers/documents-list.js b/imports/ui/containers/documents-list.js
deleted file mode 100644
index b711315..0000000
--- a/imports/ui/containers/documents-list.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { composeWithTracker } from 'react-komposer';
-import { Documents } from '../../api/documents/documents.js';
-import { DocumentsList } from '../components/documents-list.js';
-import { Loading } from '../components/loading.js';
-import { Meteor } from 'meteor/meteor';
-
-const composer = (params, onData) => {
- const subscription = Meteor.subscribe('documents');
- if (subscription.ready()) {
- const documents = Documents.find().fetch();
- onData(null, { documents });
- }
-};
-
-export default composeWithTracker(composer, Loading)(DocumentsList);
diff --git a/imports/ui/layouts/app.js b/imports/ui/layouts/app.js
index 3ff4760..1a8c89c 100644
--- a/imports/ui/layouts/app.js
+++ b/imports/ui/layouts/app.js
@@ -1,17 +1,18 @@
import React from 'react';
import { Grid } from 'react-bootstrap';
-import AppNavigation from '../containers/app-navigation';
+import AppNavigation from '../containers/AppNavigation.js';
-export const App = React.createClass({
- propTypes: {
- children: React.PropTypes.element.isRequired,
- },
- render() {
- return
-
-
- { this.props.children }
-
-
;
- },
-});
+const App = ({ children }) => (
+
+);
+
+App.propTypes = {
+ children: React.PropTypes.node,
+};
+
+export default App;
diff --git a/imports/ui/pages/NotFound.js b/imports/ui/pages/NotFound.js
new file mode 100644
index 0000000..73d3a85
--- /dev/null
+++ b/imports/ui/pages/NotFound.js
@@ -0,0 +1,10 @@
+import React from 'react';
+import { Alert } from 'react-bootstrap';
+
+const NotFound = () => (
+
+ Error [404] : { window.location.pathname } does not exist.
+
+);
+
+export default NotFound;
diff --git a/imports/ui/pages/RecoverPassword.js b/imports/ui/pages/RecoverPassword.js
new file mode 100644
index 0000000..114e8ba
--- /dev/null
+++ b/imports/ui/pages/RecoverPassword.js
@@ -0,0 +1,35 @@
+import React from 'react';
+import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap';
+import { handleRecoverPassword } from '../../modules/recover-password';
+
+export default class RecoverPassword extends React.Component {
+ componentDidMount() {
+ handleRecoverPassword({ component: this });
+ }
+
+ handleSubmit() {
+ this.preventDefault();
+ }
+
+ render() {
+ return (
+
+ Recover Password
+
+ Enter your email address below to receive a link to reset your password.
+
+
+
+
);
+ }
+}
diff --git a/imports/ui/pages/ResetPassword.js b/imports/ui/pages/ResetPassword.js
new file mode 100644
index 0000000..e8c7154
--- /dev/null
+++ b/imports/ui/pages/ResetPassword.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
+import { handleResetPassword } from '../../modules/reset-password';
+
+export default class ResetPassword extends React.Component {
+ componentDidMount() {
+ handleResetPassword({ component: this, token: this.props.params.token });
+ }
+
+ handleSubmit() {
+ this.preventDefault();
+ }
+
+ render() {
+ return (
+
+ Reset Password
+
+ To reset your password, enter a new one below. You will be logged in
+with your new password.
+
+
+
+
);
+ }
+}
+
+ResetPassword.propTypes = {
+ params: React.PropTypes.object,
+};
diff --git a/imports/ui/pages/documents.js b/imports/ui/pages/documents.js
index 886ae89..8d1601b 100644
--- a/imports/ui/pages/documents.js
+++ b/imports/ui/pages/documents.js
@@ -1,9 +1,9 @@
import React from 'react';
import { Row, Col } from 'react-bootstrap';
-import DocumentsList from '../containers/documents-list.js';
-import { AddDocument } from '../components/add-document.js';
+import DocumentsList from '../containers/DocumentsList.js';
+import { AddDocument } from '../components/AddDocument.js';
-export const Documents = () => (
+const Documents = () => (
Documents
@@ -12,3 +12,5 @@ export const Documents = () => (
);
+
+export default Documents;
diff --git a/imports/ui/pages/index.js b/imports/ui/pages/index.js
index 750c8e6..02cb4a6 100644
--- a/imports/ui/pages/index.js
+++ b/imports/ui/pages/index.js
@@ -1,11 +1,13 @@
import React from 'react';
import { Jumbotron } from 'react-bootstrap';
-export const Index = () => (
+const Index = () => (
Base
A starting point for Meteor applications.
Read the Documentation
- Currently at v4.7.0
+ Currently at v4.8.0
);
+
+export default Index;
diff --git a/imports/ui/pages/login.js b/imports/ui/pages/login.js
index 99b3427..7d00da3 100644
--- a/imports/ui/pages/login.js
+++ b/imports/ui/pages/login.js
@@ -3,17 +3,17 @@ import { Link } from 'react-router';
import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
import { handleLogin } from '../../modules/login';
-export class Login extends React.Component {
+export default class Login extends React.Component {
componentDidMount() {
handleLogin({ component: this });
}
- handleSubmit(event) {
- event.preventDefault();
+ handleSubmit() {
+ this.preventDefault();
}
render() {
- return
+ return (
Login
-
;
+
);
}
}
diff --git a/imports/ui/pages/not-found.js b/imports/ui/pages/not-found.js
deleted file mode 100644
index 559955f..0000000
--- a/imports/ui/pages/not-found.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from 'react';
-import { Alert } from 'react-bootstrap';
-
-export const NotFound = () => (
-
- Error [404] : { window.location.pathname } does not exist.
-
-);
diff --git a/imports/ui/pages/recover-password.js b/imports/ui/pages/recover-password.js
deleted file mode 100644
index 10017ce..0000000
--- a/imports/ui/pages/recover-password.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap';
-import { handleRecoverPassword } from '../../modules/recover-password';
-
-export class RecoverPassword extends React.Component {
- componentDidMount() {
- handleRecoverPassword({ component: this });
- }
-
- handleSubmit(event) {
- event.preventDefault();
- }
-
- render() {
- return
-
- Recover Password
-
- Enter your email address below to receive a link to reset your password.
-
-
-
-
;
- }
-}
diff --git a/imports/ui/pages/reset-password.js b/imports/ui/pages/reset-password.js
deleted file mode 100644
index ca52b17..0000000
--- a/imports/ui/pages/reset-password.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from 'react';
-import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
-import { handleResetPassword } from '../../modules/reset-password';
-
-export class ResetPassword extends React.Component {
- componentDidMount() {
- handleResetPassword({
- component: this,
- token: this.props.params.token,
- });
- }
-
- handleSubmit(event) {
- event.preventDefault();
- }
-
- render() {
- return
-
- Reset Password
-
- To reset your password, enter a new one below. You will be logged in
-with your new password.
-
-
-
-
;
- }
-}
-
-ResetPassword.propTypes = {
- params: React.PropTypes.object,
-};
diff --git a/imports/ui/pages/signup.js b/imports/ui/pages/signup.js
index 16acb67..6784e50 100644
--- a/imports/ui/pages/signup.js
+++ b/imports/ui/pages/signup.js
@@ -3,17 +3,17 @@ import { Link } from 'react-router';
import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
import { handleSignup } from '../../modules/signup';
-export class Signup extends React.Component {
+export default class Signup extends React.Component {
componentDidMount() {
handleSignup({ component: this });
}
- handleSubmit(event) {
- event.preventDefault();
+ handleSubmit() {
+ this.preventDefault();
}
render() {
- return
+ return (
Sign Up
Already have an account? Log In.
-
;
+
);
}
}
diff --git a/package.json b/package.json
index d0f2e82..5207367 100644
--- a/package.json
+++ b/package.json
@@ -11,12 +11,13 @@
"production": "meteor deploy production.meteor.com --settings settings-production.json"
},
"devDependencies": {
- "chimp": "^0.39.1",
- "eslint": "^2.13.1",
- "eslint-config-airbnb": "^9.0.1",
- "eslint-plugin-jsx-a11y": "^1.5.5",
- "eslint-plugin-meteor": "^3.6.0",
- "eslint-plugin-react": "^5.2.2",
+ "chimp": "^0.41.2",
+ "eslint": "^3.8.1",
+ "eslint-config-airbnb": "^12.0.0",
+ "eslint-plugin-import": "^1.16.0",
+ "eslint-plugin-jsx-a11y": "^2.2.3",
+ "eslint-plugin-meteor": "^4.0.1",
+ "eslint-plugin-react": "^6.4.1",
"faker": "^3.1.0"
},
"eslintConfig": {
@@ -34,6 +35,9 @@
"plugin:meteor/guide",
"plugin:react/recommended"
],
+ "env": {
+ "browser": true
+ },
"globals": {
"server": false,
"browser": false,
@@ -41,6 +45,8 @@
},
"rules": {
"import/no-unresolved": 0,
+ "import/no-extraneous-dependencies": 0,
+ "import/extensions": 0,
"no-underscore-dangle": [
"error",
{
@@ -56,15 +62,16 @@
}
},
"dependencies": {
+ "bcrypt": "^0.8.7",
"bootstrap": "^3.3.7",
- "jquery": "^2.2.4",
+ "jquery": "^3.1.1",
"jquery-validation": "^1.15.1",
- "react": "^15.3.0",
- "react-addons-pure-render-mixin": "^15.2.1",
- "react-bootstrap": "^0.30.2",
- "react-dom": "^15.3.0",
+ "react": "^15.3.2",
+ "react-addons-pure-render-mixin": "^15.3.2",
+ "react-bootstrap": "^0.30.5",
+ "react-dom": "^15.3.2",
"react-komposer": "^1.13.1",
- "react-router": "^2.6.1",
+ "react-router": "^3.0.0",
"react-router-bootstrap": "^0.23.1"
}
}