diff --git a/client/modules/IDE/components/SketchList.jsx b/client/modules/IDE/components/SketchList.jsx
index 0bdef4c4..75a9b474 100644
--- a/client/modules/IDE/components/SketchList.jsx
+++ b/client/modules/IDE/components/SketchList.jsx
@@ -1,13 +1,13 @@
+import format from 'date-fns/format';
import PropTypes from 'prop-types';
import React from 'react';
-import { connect } from 'react-redux';
-import { bindActionCreators } from 'redux';
-import moment from 'moment';
-import { Link, browserHistory } from 'react-router';
-import InlineSVG from 'react-inlinesvg';
import { Helmet } from 'react-helmet';
-import * as SketchActions from '../actions/projects';
+import InlineSVG from 'react-inlinesvg';
+import { connect } from 'react-redux';
+import { browserHistory, Link } from 'react-router';
+import { bindActionCreators } from 'redux';
import * as ProjectActions from '../actions/project';
+import * as SketchActions from '../actions/projects';
import * as ToastActions from '../actions/toast';
const trashCan = require('../../../images/trash-can.svg');
@@ -73,8 +73,8 @@ class SketchList extends React.Component {
})()}
{sketch.name}
- {moment(sketch.createdAt).format('MMM D, YYYY h:mm A')}
- {moment(sketch.updatedAt).format('MMM D, YYYY h:mm A')}
+ {format(new Date(sketch.createdAt), 'MMM D, YYYY h:mm A')}
+ {format(new Date(sketch.updatedAt), 'MMM D, YYYY h:mm A')}
)}
}
diff --git a/client/modules/IDE/components/Timer.jsx b/client/modules/IDE/components/Timer.jsx
index dacb96cd..25e4b247 100644
--- a/client/modules/IDE/components/Timer.jsx
+++ b/client/modules/IDE/components/Timer.jsx
@@ -1,7 +1,8 @@
+import classNames from 'classnames';
+import differenceInMilliseconds from 'date-fns/difference_in_milliseconds';
+import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
import PropTypes from 'prop-types';
import React from 'react';
-import moment from 'moment';
-import classNames from 'classnames';
class Timer extends React.Component {
constructor(props) {
@@ -20,16 +21,19 @@ class Timer extends React.Component {
}
showSavedTime() {
- if (Math.abs(moment().diff(this.props.projectSavedTime)) < 10000) {
+ const now = new Date();
+ if (Math.abs(differenceInMilliseconds(now, this.props.projectSavedTime) < 10000)) {
return 'Saved: just now';
- } else if (Math.abs(moment().diff(this.props.projectSavedTime)) < 20000) {
+ } else if (differenceInMilliseconds(now, this.props.projectSavedTime) < 20000) {
return 'Saved: 15 seconds ago';
- } else if (Math.abs(moment().diff(this.props.projectSavedTime)) < 30000) {
+ } else if (differenceInMilliseconds(now, this.props.projectSavedTime) < 30000) {
return 'Saved: 25 seconds ago';
- } else if (Math.abs(moment().diff(this.props.projectSavedTime)) < 46000) {
+ } else if (differenceInMilliseconds(now, this.props.projectSavedTime) < 46000) {
return 'Saved: 35 seconds ago';
}
- return `Saved: ${moment(this.props.projectSavedTime).fromNow()}`;
+ return `Saved: ${distanceInWordsToNow(this.props.projectSavedTime, {
+ includeSeconds: true
+ })} ago`;
}
render() {
diff --git a/package-lock.json b/package-lock.json
index 6ed99d55..ae7f0777 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3442,6 +3442,11 @@
"semver": "^5.5.0"
}
},
+ "date-fns": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
+ },
"date-now": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
@@ -5076,7 +5081,8 @@
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
@@ -5094,11 +5100,13 @@
},
"balanced-match": {
"version": "1.0.0",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
+ "optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5111,15 +5119,18 @@
},
"code-point-at": {
"version": "1.1.0",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
@@ -5222,7 +5233,8 @@
},
"inherits": {
"version": "2.0.3",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"ini": {
"version": "1.3.5",
@@ -5232,6 +5244,7 @@
"is-fullwidth-code-point": {
"version": "1.0.0",
"bundled": true,
+ "optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -5244,17 +5257,20 @@
"minimatch": {
"version": "3.0.4",
"bundled": true,
+ "optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.0.8",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
+ "optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
@@ -5271,6 +5287,7 @@
"mkdirp": {
"version": "0.5.1",
"bundled": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -5343,7 +5360,8 @@
},
"number-is-nan": {
"version": "1.0.1",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
@@ -5353,6 +5371,7 @@
"once": {
"version": "1.4.0",
"bundled": true,
+ "optional": true,
"requires": {
"wrappy": "1"
}
@@ -5428,7 +5447,8 @@
},
"safe-buffer": {
"version": "5.1.2",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -5458,6 +5478,7 @@
"string-width": {
"version": "1.0.2",
"bundled": true,
+ "optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -5475,6 +5496,7 @@
"strip-ansi": {
"version": "3.0.1",
"bundled": true,
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -5513,11 +5535,13 @@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true
+ "bundled": true,
+ "optional": true
},
"yallist": {
"version": "3.0.3",
- "bundled": true
+ "bundled": true,
+ "optional": true
}
}
},
diff --git a/package.json b/package.json
index 7ec248ef..ef5f892d 100644
--- a/package.json
+++ b/package.json
@@ -96,6 +96,7 @@
"cors": "^2.8.5",
"cross-env": "^5.2.0",
"csslint": "^0.10.0",
+ "date-fns": "^1.30.1",
"decomment": "^0.8.7",
"dotenv": "^2.0.0",
"dropzone": "^4.3.0",
diff --git a/server/controllers/file.controller.js b/server/controllers/file.controller.js
index 5c494d99..a281f725 100644
--- a/server/controllers/file.controller.js
+++ b/server/controllers/file.controller.js
@@ -1,6 +1,5 @@
import each from 'async/each';
-import moment from 'moment';
-
+import isBefore from 'date-fns/is_before';
import Project from '../models/project';
import { resolvePathToFile } from '../utils/filePath';
import { deleteObjectsFromS3, getObjectKey } from './aws.controller';
@@ -56,7 +55,7 @@ function deleteMany(files, ids) {
each(ids, (id, cb) => {
if (files.id(id).url) {
if (!process.env.S3_DATE
- || (process.env.S3_DATE && moment(process.env.S3_DATE) < moment(files.id(id).createdAt))) {
+ || (process.env.S3_DATE && isBefore(new Date(process.env.S3_DATE), new Date(files.id(id).createdAt)))) {
const objectKey = getObjectKey(files.id(id).url);
objectKeys.push(objectKey);
}
diff --git a/server/controllers/project.controller.js b/server/controllers/project.controller.js
index c8899a38..9244c270 100644
--- a/server/controllers/project.controller.js
+++ b/server/controllers/project.controller.js
@@ -1,13 +1,14 @@
import archiver from 'archiver';
-import request from 'request';
-import moment from 'moment';
+import format from 'date-fns/format';
import isUrl from 'is-url';
-import slugify from 'slugify';
import jsdom, { serializeDocument } from 'jsdom';
-import { resolvePathToFile } from '../utils/filePath';
-import generateFileSystemSafeName from '../utils/generateFileSystemSafeName';
+import isBefore from 'date-fns/is_before';
+import request from 'request';
+import slugify from 'slugify';
import Project from '../models/project';
import User from '../models/user';
+import { resolvePathToFile } from '../utils/filePath';
+import generateFileSystemSafeName from '../utils/generateFileSystemSafeName';
import { deleteObjectsFromS3, getObjectKey } from './aws.controller';
export function createProject(req, res) {
@@ -109,7 +110,7 @@ export function getProject(req, res) {
function deleteFilesFromS3(files) {
deleteObjectsFromS3(files.filter((file) => {
if (file.url) {
- if (!process.env.S3_DATE || (process.env.S3_DATE && moment(process.env.S3_DATE) < moment(file.createdAt))) {
+ if (!process.env.S3_DATE || (process.env.S3_DATE && isBefore(new Date(process.env.S3_DATE), new Date(file.createdAt)))) {
return true;
}
}
@@ -291,7 +292,7 @@ function buildZip(project, req, res) {
res.status(500).send({ error: err.message });
});
- const currentTime = moment().format('YYYY_MM_DD_HH_mm_ss');
+ const currentTime = format(new Date(), 'YYYY_MM_DD_HH_mm_ss');
project.slug = slugify(project.name, '_');
res.attachment(`${generateFileSystemSafeName(project.slug)}_${currentTime}.zip`);
zip.pipe(res);