Compare commits

...
43 Commits
Author SHA1 Message Date
Kim Gardner c3e162dd56 Merge pull request #1770 from icco/patch-1
Fix small typo in integrating/configuring-admin.md
2018-08-01 16:14:37 +01:00
Wyatt Johnson 3cdd061afd Merge branch 'master' into patch-1 2018-07-31 18:25:05 +00:00
Kim Gardner aaaf37b8db Small typo fix (#1772) 2018-07-31 18:24:52 +00:00
Nat Welch 7af5f04e45 Fix small typo in integrating/configuring-admin.md 2018-07-30 11:42:01 -04:00
Kim Gardner 65a166b860 Merge pull request #1767 from coralproject/token-fix
Token Handling
2018-07-27 21:25:07 +01:00
Kim Gardner eb4bcb71c4 Merge branch 'master' into token-fix 2018-07-27 21:12:52 +01:00
Wyatt Johnson 6a04b66d84 fix: token handling
- Fixes #1728
2018-07-27 14:08:53 -06:00
Kim Gardner 30ae9a82c1 Merge pull request #1764 from coralproject/user-fix
Username Status Fix
2018-07-27 20:50:57 +01:00
Wyatt Johnson ec06f2a392 chore: update 4.6.0 2018-07-27 13:37:46 -06:00
Wyatt Johnson f461f0884b Merge branch 'master' into user-fix 2018-07-27 19:29:05 +00:00
Wyatt Johnson d55c329f76 chore: version bump 2018-07-27 13:27:17 -06:00
Wyatt Johnson 0f63e076a6 fix: username status fix 2018-07-27 13:25:58 -06:00
Fabian Marz 1012b6b28b Fixed UI component path reference. (#1761) 2018-07-26 22:09:03 +00:00
Fabian Marz 421352c75c Fixed code markup for action name. (#1746) 2018-07-13 16:19:00 +00:00
Kim Gardner a170c107e2 Add FAQ and Troubleshooting docs (#1742)
* Add FAQ and Troubleshooting docs

* Add to nav

* Fix links

* Fix css formatting and fix rel links
2018-07-12 19:05:08 +00:00
Kim Gardner 104617d644 Merge pull request #1739 from memz/ar-translations-update-1
updated translation files with new Arabic translations
2018-07-09 17:33:37 -04:00
Kim Gardner 5b1773ba26 Merge branch 'master' into ar-translations-update-1 2018-07-09 16:33:31 -04:00
Nat Welch cd0aeca87c Add suggested index to comments (#1740) 2018-07-09 16:20:05 +00:00
Melhem Fawaz 5c65702032 updated translation files with new Arabic translations 2018-07-09 17:07:02 +04:00
Kim Gardner 66445aae59 Merge pull request #1737 from coralproject/username-status
findOrCreateExternalUser Deprecation
2018-07-06 17:18:32 -04:00
Wyatt Johnson 23156f3d5e feat: added deprecations, docs 2018-07-06 14:28:25 -06:00
Kim Gardner 76bb6df084 Merge pull request #1735 from coralproject/update-doc-versions
Update versions to 4.5
2018-07-06 13:01:03 -04:00
Kim Gardner 54c99c7fcc Update versions to 4.5 2018-07-06 12:52:40 -04:00
Kim Gardner 80fc5e86ff Upgrade mongoose (#1734)
* Upgrade Mongoose

* Upgrade Mongoose 5.2.1

* Yarn
2018-07-05 12:27:20 -06:00
Davis Shaver eddd63ae1a [Request for feedback] Heroku fix (#1721)
* Remove package-lock.json file, as Talk uses Yarn
* Silence ENV rewrite errors in Heroku
2018-07-05 09:06:49 -06:00
Wyatt Johnson e55ed489f2 fix: added disable polyfill arg to onbuild (#1732) 2018-07-04 11:08:47 -06:00
Kim Gardner 95fb33e41b Update version to 4.5.1 (#1718) 2018-06-29 13:08:14 -06:00
Kim Gardner 404c900de7 Merge pull request #1716 from coralproject/readme-link
Fix Talk link in README
2018-06-29 14:47:37 -04:00
Kim Gardner dc773f486b Merge branch 'master' into readme-link 2018-06-29 14:31:49 -04:00
Kim Gardner db679fb6ca Merge pull request #1712 from coralproject/fix-broken-links
Fix some broken links
2018-06-29 14:31:37 -04:00
Kim Gardner a2458e0dd0 Merge branch 'master' into readme-link 2018-06-29 14:12:14 -04:00
Wyatt Johnson f22507e313 Merge branch 'master' into fix-broken-links 2018-06-29 12:06:55 -06:00
Kim Gardner 8cfc0caad3 Merge pull request #1715 from coralproject/custom-displayname
Search - Display Name
2018-06-29 14:01:40 -04:00
Kim Gardner 7d8b36e00c Fix Talk link in README 2018-06-29 13:43:29 -04:00
Wyatt Johnson 50b920b799 feat: added support for metadata.displayName for searches 2018-06-29 11:17:21 -06:00
Kim Gardner b4f5121382 Update links 2018-06-28 16:19:38 -04:00
Kim Gardner b9828bcf11 Merge pull request #1706 from coralproject/snyk-fix-svo35q
[Snyk] Fix for 1 vulnerable dependencies
2018-06-28 15:43:48 -04:00
Kim Gardner 0ad0577ba3 Update lockfile 2018-06-28 15:16:05 -04:00
Kim Gardner 46d6c3a8c6 Merge branch 'master' into snyk-fix-svo35q 2018-06-28 15:11:34 -04:00
Kim Gardner b40ed1d217 Merge pull request #1710 from coralproject/losowsky-patch-1
Added Rich Text to checklist
2018-06-28 14:54:04 -04:00
Andrew Losowsky ab3ceb151a Added Rich Text to checklist 2018-06-27 17:57:23 -05:00
Kim Gardner d393c6fc4d Set versions to 4.5.0 instead of latest (#1708) 2018-06-26 19:35:46 +00:00
snyk-bot e6c6391958 fix: package.json to reduce vulnerabilities
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/npm:braces:20180219
2018-06-26 02:49:35 +00:00
45 changed files with 1352 additions and 2654 deletions
+1
View File
@@ -6,6 +6,7 @@ ONBUILD ARG TALK_ASSET_COMMENTS_LOAD_DEPTH=10
ONBUILD ARG TALK_REPLY_COMMENTS_LOAD_DEPTH=3
ONBUILD ARG TALK_THREADING_LEVEL=3
ONBUILD ARG TALK_DEFAULT_STREAM_TAB=all
ONBUILD ARG TALK_DISABLE_EMBED_POLYFILL=FALSE
ONBUILD ARG TALK_DEFAULT_LANG=en
ONBUILD ARG TALK_WHITELISTED_LANGUAGES
ONBUILD ARG TALK_PLUGINS_JSON
+1 -1
View File
@@ -1,6 +1,6 @@
# Talk · [![CircleCI](https://circleci.com/gh/coralproject/talk.svg?style=svg)](https://circleci.com/gh/coralproject/talk) · [![NSP Status](https://nodesecurity.io/orgs/coralproject/projects/7bd7d26c-47ed-4a5f-8c4a-b919bf1c2946/badge)](https://nodesecurity.io/orgs/coralproject/projects/7bd7d26c-47ed-4a5f-8c4a-b919bf1c2946) · [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md#pull-requests)
Online comments are broken. Our open-source commenting platform, Talk, rethinks how moderation, comment display, and conversation function, creating the opportunity for safer, smarter discussions around your work. [Read more about Talk here](https://coralproject.net/products/talk.html).
Online comments are broken. Our open-source commenting platform, Talk, rethinks how moderation, comment display, and conversation function, creating the opportunity for safer, smarter discussions around your work. [Read more about Talk here](https://coralproject.net/talk).
Built with <3 by The Coral Project.
+3 -3
View File
@@ -17,19 +17,19 @@ export const checkLogin = () => (
if (!result.user) {
cleanAuthData(localStorage);
dispatch(checkLoginSuccess(null));
client.resetWebsocket();
return;
}
// Reset the websocket.
client.resetWebsocket();
dispatch(checkLoginSuccess(result.user));
pym.sendMessage('coral-auth-changed', JSON.stringify(result.user));
client.resetWebsocket();
})
.catch(error => {
if (error.status && error.status === 401 && localStorage) {
// Unauthorized.
cleanAuthData(localStorage);
client.resetWebsocket();
} else {
console.error(error);
}
+9 -2
View File
@@ -3,9 +3,11 @@ import {
ENABLE_PLUGINS_DEBUG,
DISABLE_PLUGINS_DEBUG,
} from '../constants/config';
import { LOGOUT } from '../constants/auth';
import { LOGOUT, SET_AUTH_TOKEN } from '../constants/auth';
const initialState = {};
const initialState = {
auth_token: null,
};
export default function config(state = initialState, action) {
switch (action.type) {
@@ -30,6 +32,11 @@ export default function config(state = initialState, action) {
...state,
auth_token: null,
};
case SET_AUTH_TOKEN:
return {
...state,
auth_token: action.token || null,
};
case MERGE_CONFIG:
return {
...state,
+4 -8
View File
@@ -42,17 +42,13 @@ const getAuthToken = (store, storage) => {
let state = store.getState();
if (state.config && state.config.auth_token) {
// if an auth_token exists in config, use it.
return state.config.auth_token;
// If the embed is called with `embed.login(token)`, and the browser is not
// capable of storing the token in localStorage, then we would have
// persisted it to the redux state.
return state.config.auth_token || state.auth.token;
} else if (!bowser.safari && !bowser.ios && storage) {
// Use local storage auth tokens where there's a stable api.
return storage.getItem('token');
} else if (state.auth && state.auth.token) {
// Use the redux token state if the remaining methods fall out. If the embed
// is called with `embed.login(token)`, and the browser is not capable of
// storing the token in localStorage, then we would have persisted it to the
// redux state.
return state.auth.token;
}
return null;
+9 -1
View File
@@ -102,7 +102,7 @@ sidebar:
children:
- title: Authentication
url: /integrating/authentication/
- title: Asset Managment
- title: Asset Management
url: /integrating/asset-management/
- title: Configuring the Comment Stream
url: /integrating/configuring-comment-stream/
@@ -164,10 +164,18 @@ sidebar:
url: /when-youve-installed-talk/
- title: Migrating
children:
- title: Migrating from v3.x.x
url: /migration/3/
- title: Migrating to v4.0.0
url: /migration/4/
- title: Migrating to v4.1.0
url: /migration/4.1/
- title: FAQ & Troubleshooting
children:
- title: FAQ
url: /faq/
- title: Troubleshooting Tips
url: /troubleshooting-tips/
- title: Contact
url: /contact/
+2 -2
View File
@@ -6,7 +6,7 @@ permalink: /
Online comments are broken. Our open-source Talk tool rethinks how moderation,
comment display, and conversation function, creating the opportunity for safer,
smarter discussions around your work. Read more about our product features and
goals [here](https://coralproject.net/products/talk.html). The
goals [here](https://coralproject.net/talk). The
documentation available here is pertaining to the technical details for
installing, configuring, and deploying Talk.
@@ -48,7 +48,7 @@ be used to setup Talk:
version: '2'
services:
talk:
image: coralproject/talk:latest
image: coralproject/talk:4.5
restart: always
ports:
- "3000:3000"
@@ -43,7 +43,7 @@ be used to setup Talk:
version: '2'
services:
talk:
image: coralproject/talk:latest
image: coralproject/talk:4.5
restart: always
ports:
- "3000:3000"
@@ -121,7 +121,7 @@ base installation with additional custom plugins. Images can be created with the
most basic of `Dockerfile`'s:
```docker
FROM coralproject/talk:latest-onbuild
FROM coralproject/talk:4.5-onbuild
```
And running the following to build the docker image:
@@ -153,7 +153,7 @@ your containerized infrastructure. The versioning of our Docker tags as well
lets you do something like:
```docker
FROM coralproject/talk:4.0-onbuild
FROM coralproject/talk:4.5-onbuild
```
Which would pin your image to `4.0` release's.
Which would pin your image to `4.5.x release's.
@@ -52,6 +52,10 @@ permalink: /pre-launch-checklist/
- See [Notifications](/talk/integrating/notifications/)
- [ ] Do you want to setup rich text (bold, italics, quotes)?
- Install [talk-plugin-rich-text](/talk/plugin/talk-plugin-rich-text)
- [ ] Do you want to display comment counts?
- Use the GraphQL [CommentCountQuery](https://docs.coralproject.net/talk/api/graphql/#CommentCountQuery)
- Install [talk-plugin-deep-reply-count](/talk/plugin/talk-plugin-deep-reply-count) if necessary.
@@ -60,6 +60,10 @@ When `TRUE`, disables flagging of comments that match the suspect word filter. (
## TALK_DISABLE_EMBED_POLYFILL
This is a **Build Variable** and must be consumed during build. If using the
[Docker-onbuild](/talk/installation-from-docker/#onbuild)
image you can specify it with `--build-arg TALK_DISABLE_EMBED_POLYFILL=TRUE`.
When set to `TRUE`, the build process will not include the
[babel-polyfill](https://babeljs.io/docs/usage/polyfill/)
in the embed.js target that is loaded on the page that loads the embed. (Default
@@ -48,7 +48,7 @@ Your plans might include:
Other options for contentious topics instead of comments:
* Use a form to request answers on a specific question related to the article, and select only the best answers for display. This is how the Spotlight team at Boston Globe solicited responses to their series on racism in Boston, using our Ask tool. ([Learn more about Ask here.](https://coralproject.net/products/ask.html)) This also allows people to submit their thoughts anonymously.
* Use a form to request answers on a specific question related to the article, and select only the best answers for display. This is how the Spotlight team at Boston Globe solicited responses to their series on racism in Boston, using our Ask tool. ([Learn more about Ask here.](https://coralproject.net/ask)) This also allows people to submit their thoughts anonymously.
* Host a focused, more controlled online discussion about the topic over a fixed period of time, during which you apply more vigilant moderation than usual. You can write a note in the Ask A Question space described above to make that clear, such as "We will host an online conversation about this topic here on Friday between 11am and 3pm EST. Moderators will be present throughout, and our journalists will answer your questions about the topic. "This allows community members to approach the topic more calmly than their initial reactions on reading the story, in a space where you can dedicate temporary, more intensive resources to ensuring civility (perhaps with pre-moderation), while still signaling your commitment to engagement around an important topic.
+70
View File
@@ -0,0 +1,70 @@
---
title: Migrating from v3.x.x
permalink: /migration/3/
---
## Deprecation Notices
It was previously recommended to use the user service function:
```js
Users.findOrCreateExternalUser(...);
```
If you are developing a social plugin, you should migrate this function to:
```js
Users.upsertSocialUser(...);
```
If you are developing an external auth integration (where the integration
provides) a custom displayName, you should migrate to:
```js
Users.upsertExternalUser(...);
```
## Troubleshooting Username Status
You may be affected by a side-effect of the above mentioned deprecated function
`Users.findOrCreateExternalUser(...);` if the following are true:
1. You have upgraded from Talk `< 3` to `>= 4` and have completed a database
migration
2. You have used a custom auth plugin in the past
3. You have disabled or not included the `talk-plugin-auth` as a `client` plugin
4. You have received reports that some users can not comment, and are instead
given a message `You are not authorized to perform this action.`
If this is the case, you can execute the following one time MongoDB query to
repair the affected users.
```js
db.users.update(
{
"status.username.status": {
$in: ["UNSET", "CHANGED"]
}
},
{
$set: {
"status.username.status": "SET"
},
$push: {
"status.username.history": {
status: "SET",
assigned_by: null,
created_at: ISODate()
}
}
},
{
multi: true
}
);
```
**Note: You must resolve and/or update your custom auth code to resolve the
above mentioned deprecation notices _before_ running the above mentioned MongoDB
query**
+58 -6
View File
@@ -3,15 +3,67 @@ title: FAQ
permalink: /faq/
---
## How can I get help integrating Talk into my newsroom?
## How can I get help, submit a bug, or suggest a feature?
We're here to help with newsrooms of all sizes. Email our Integration Engineer
([jeff@mozillafoundation.org](mailto:jeff@mozillafoundation.org)) to set up a meeting.
There are a few avenues to get in touch with us and others in the community for help.
## How do I request a feature or submit a bug?
To log a bug or request a feature, submit a Support ticket ([support@coralproject.net](mailto:support@coralproject.net)) and someone from our team will get back to you.
The best way is to [submit a Github issue](https://github.com/coralproject/talk/issues). Make sure you give plenty of details, our Core Team can usually respond within a few hours on weekdays.
You can also request help on Github by [submitting an issue](https://github.com/coralproject/talk/issues). This also increases your chances of having someone from the community respond to help.
And you can also search our [Coral Community](https://community.coralproject.net) to see if your issue has been solved, or to get tips from the community.
## How can our dev team contribute to Talk?
We are lucky to work with newsroom dev teams and individual contributors who span the world, and come from newsrooms of all sizes. You can read our [Contribution Guide](https://github.com/coralproject/talk/blob/master/CONTRIBUTING.md) to get started, but feel free to reach out to us via Github, or get in touch directly with Jeff via jeff@mozillafoundation.org.
We are lucky to work with newsroom dev teams and individual contributors who span the world, and come from newsrooms of all sizes. You can read our [Contribution Guide](https://github.com/coralproject/talk/blob/master/CONTRIBUTING.md) to get started, but feel free to reach out to us via Github too.
## What if we want to add a feature you don't have?
Talk is open source, so you're free to develop additional functionality and [submit a pull request](https://github.com/coralproject.net/talk).
## Do you have GDPR features?
Yes! Please read our [GDPR documentation](/talk/integrating/gdpr/) for more information and instructions to get started.
## Can I import my existing comments?
Yes! We have a community-supported [import framework](https://github.com/coralproject/talk-importer) that you can use to migrate your existing comments.
## What support is available?
Our team is small, so it's difficult for us to provide support packages. However, you can always email us at [support@coralproject.net](mailto:support@coralproject.net), and we can help answer your questions. In some cases, we can provide premium support packages either with our team, or through partners. You can inquire about this via the support email address above.
## Is there a hosted version I can purchase by monthly subscription?
Yes! We are happy to announce that as of July 2018, we provide a SaaS version of Talk, called the Coral Cloud. For a monthly subscription, you get your own hosted Talk instance to embed on your news and blog articles. [Reach out to us](mailto:support@coralproject.net) if you're interested in this option.
## Where is our data when we use Talk?
If you are hosting Talk on your own:
* Your data is stored in a MongoDB database that you provide
* The Coral Team doesnt have any access to your data
If you are using Coral Cloud Hosting for Talk:
* Your data is stored in a dedicated MongDB database that is provisioned for your in the Cloud
* Your data is completely isolated from other customers data
* The Coral Team and its third party database hosting providers use strict access controls and auditing to protected your data from unauthorized access by team members
## Does Talk have any automated moderation features to protect against spam and trolling?
Talk features a couple of plugins that provide advanced moderation:
* The [Toxic Comments plugin](/talk/plugin/talk-plugin-toxic-comments) integrates with the [Perspective API from Google](https://www.perspectiveapi.com/) to detect the likelihood of toxicity of comments in real-time
* The [Akismet plugin](/talk/plugin/talk-plugin-akismet) detects and blocks spam comments
## How much can I customize Talk?
* The CSS of the Talk comment stream can be customized by [adding your own CSS via an external stylesheet](/talk/integrating/styling-css/)
* The functionality of Talk can be [extended through the plugin framework](/talk/plugins/)
## How much does Talk cost?
* The Talk software is freely available under the Apache 2.0 open source license
* Associated costs are those for the infrastructure required to run Talk (i.e. cloud hosting fee or bare-metal server costs)
* The Coral Project offers a SaaS version of Talk. Please [get in touch with us](mailto:support@coralproject.net) to discuss pricing for your custom requirements.
+36
View File
@@ -0,0 +1,36 @@
---
title: Troubleshooting Tips
permalink: /troubleshooting-tips/
---
## I've installed Talk but I can't see the comment stream appear on my articles
* Make sure you've adding the correct domains to your Permitted Domains in Configure > Tech Settings
* Make sure you've correctly added the embed via your CMS to your article pages
* Check the console for any errors and you can file a bug via [support](mailto:support@coralproject.net) if you can't resolve the issue
## My commenters are reporting they can't see the comment stream, but I'm able to
* If this seems to be isolated to one commenter, it could be related to 3rd party cookies
* Post 4.x Talk doesn't require 3rd party cookies to be enabled. Check the version of Talk you're using and you might consider upgrading.
* A quick fix in the meantime is to ask them to allow 3rd party cookies
* You could also try asking them to clear their browser cache
## My commenters are reporting that they cannot login to Talk
If you're using your own custom auth plugin:
* Review the code and your server logs to ensure your plugin is working correctly. Check [our auth docs](/talk/integrating/authentication/) for more tips.
* Ensure that your JWT token settings, especially expiry, is being set correctly. You can troubleshoot JWT related issues with the [JWT Debugger](https://jwt.io/).
* See if you can isolate if it's a particular group of users that are experiencing this issue, e.g. mods, admins, subscribers? Confirm they have the appropriate permissions to comment.
* Note if this is a new issue that happened after an upgrade - did you read the [migration docs](/talk/migration/3/) and the [release notes](https://github.com/coralproject/talk/releases)? This might help you resolve the issue
* Confirm that users who are affected have the correct `username.status`. If users have status `UNSET`, this is related to a bug with upgrading from 3.x to 4.x that has affected some organizations. Read more here about [upgrading from 3.x to 4.x](/talk/migration/3/).
* If you're still experiencing issues, log a [support ticket](mailto:support@coralproject.net) so we can help diagnose the issue
If you're using `talk-plugin-auth`:
* See if you can isolate if it's a particular group of users that are experiencing this issue, e.g. mods, admins, subscribers? Confirm they have the appropriate permissions to comment.
* Note if this is a new issue that happened after an upgrade - did you read the [migration docs](/talk/migration/3/) and the [release notes](https://github.com/coralproject/talk/releases)? This might help you resolve the issue.
* If you're still experiencing issues, log a [support ticket](mailto:support@coralproject.net) so we can help diagnose the issue
+2 -2
View File
@@ -22,7 +22,7 @@ Feel free to check all the utilities here: `talk/plugin-api`.
#### Stream
* `setSort`
* `showSignInDialog``
* `showSignInDialog`
### Import
```
@@ -264,7 +264,7 @@ Coral UI is a set of components to help you build your UI. This powers our core.
### Import
```js
import {Button} from 'plugin-api/beta/components/ui';
import {Button} from 'plugin-api/beta/client/components/ui';
```
### Components
+1 -1
View File
@@ -319,7 +319,7 @@ module.exports = {
let user;
try {
const { id, provider, displayName } = profile;
user = await UsersService.findOrCreateExternalUser(
user = await UsersService.upsertSocialUser(
req.context,
id,
provider,
+1 -1
View File
@@ -7,7 +7,7 @@ Using plugins and configuration variables, you can modify the way the Admin look
### Creating a Custom Moderation Queue
Talk can support custom pluggable mod queues, meaning you can write a plugin that has some logic and determines which comments should appear there. This works by adding a field modQueues` in the `index.js` of your client side plugin, like so:
Talk can support custom pluggable mod queues, meaning you can write a plugin that has some logic and determines which comments should appear there. This works by adding a field `modQueues` in the `index.js` of your client side plugin, like so:
```
modQueues: {
+297
View File
@@ -8,3 +8,300 @@ You can add your own stylesheet in Admin > Configure > Tech Settings.
If you would like to change the styling of any elements in Talk, we provide global classnames with the prefix `talk-`. The easiest way to find the classname for the element you're looking for is to use the web inspector, and then update your stylesheet accordingly.
Plugins also have their own stylesheets located in the client directory.
Here is an example stylesheet that we use on our [Coral Blog](https://coralproject.net/blog):
```css
/*
* You can use this stylesheet as a place to get started
* for styling your own version of Talk!
* Author: Sam Hankins, Coral Project, 2018
* License: Apache 2.0
*/
* {
/* font-family: inherit; */
}
html, body {
width:auto;
height:auto;
}
body {
font-family: Helvetica, 'Helvetica Neue', Verdana, sans-serif;
width: 100%;
font-size: 14px;
margin: 0px;
padding: 0px 0px 100px 0px;
height: auto !important;
}
#talk-embed-stream-container {
padding: 4px;
}
.expandForSignin {
min-height: 600px;
}
.coralButton {
margin: 5px 10px 5px 0px;
background: none;
padding: 0px;
border: none;
font-size: inherit;
}
.coralButton:hover {
border-radius: 2px;
color: #767676;
}
.coralButton i {
margin-right: 3px;
}
.coralHr {
border: 0;
height: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid rgba(255, 255, 255, 0.3);
}
.screen-reader-text {
clip: rect(1px, 1px, 1px, 1px);
height: 1px;
width: 1px;
overflow: hidden;
position: absolute !important;
}
/* Notification styles */
#coral-notif {
position: fixed;
border: 0;
background: rgb(105,105,105);
color: white;
border-radius: 2px;
font-weight: bold;
}
/* Info Box Styles */
.talk-plugin-infobox-info {
top: 0;
border: 0;
background: #DEEDFF;
color: #2a2a2a;
width: 100%;
text-align: left;
padding: 10px;
margin-bottom: 10px;
display: block;
box-sizing: border-box;
border-radius: 2px;
}
.talk-plugin-infobox-info em{
font-style: italic;
}
.talk-plugin-infobox-info strong{
font-weight: bold;
}
.talk-plugin-infobox-info blockquote{
border-left: solid 2px #2a2a2a;
padding-left: 10px;
}
.talk-plugin-infobox-info a{
color: #2a2a2a;
}
/* Question Box Styles */
.talk-stream-comments-container {
position: relative;
}
/* Comment styles */
.comment {
margin-bottom: 10px;
position: relative;
}
.talk-plugin-commentcontent-text {
margin-bottom: 7px;
font-size: 16px;
font-weight: 100;
line-height: 1.3;
}
/* Tag Labels */
.talk-plugin-tag-label {
background-color: #4C1066;
color: white;
display: inline-block;
border-radius: 2px;
font-size: 12px;
padding: 5px 6px;
}
/* Comment Action Styles */
.commentActionsRight, .replyActionsRight {
display: flex;
justify-content: flex-end;
}
.commentActionsLeft, .replyActionsLeft {
display: flex;
justify-content: flex-start;
float: left;
}
button.comment__action-button,
.comment__action-button button {
cursor: pointer;
}
button.comment__action-button[disabled],
.comment__action-button[disabled] button {
cursor: inherit;
}
.comment__action-button--nowrap {
white-space: nowrap;
}
.likedButton {
color: rgb(0,134,227);
}
.flaggedIcon {
color: #F00;
}
/* Flag Styles */
.talk-plugin-flags-popup-form {
margin-bottom: 10px;
}
.talk-plugin-flags-popup-header {
font-weight: bold;
font-size: 1rem;
margin-bottom: 10px;
}
.talk-plugin-flags-popup-radio {
margin:5px;
}
.talk-plugin-flags-popup-radio-label {
margin:5px;
font-weight: 400;
font-size: .9rem;
}
.talk-plugin-flags-popup-counter {
float: left;
margin-top: 21px;
color: #999;
}
.talk-plugin-flags-popup-button {
float: right;
margin-top: 10px;
}
.talk-plugin-flags-reason-text {
margin-left: 20px;
margin-top: 5px;
width: 75%;
font-size: 16px;
border: 1px solid #ccc;
max-width: calc(100% - 40px);
}
/* Close comments */
.close-comments-message {
box-sizing: border-box;
width: 100%;
height: 100px;
}
.close-comments-confirm-wrapper {
float: right;
}
.close-comments-alert {
background-color: #d65344;
color: white;
font-size: 1.33rem;
padding: 5px;
}
.close-comments-alert i.material-icons {
font-size: 16px !important;
}
/* Load More */
.talk-load-more {
text-align: center;
}
.talk-load-more button {
width: 100%;
text-align: center;
color: #FFF;
background-color: #2376D8;
border-radius: 2px;
cursor: pointer;
padding: 10px;
border-radius: 2px;
line-height: 1em;
text-transform: capitalize;
display: inline-block;
}
.talk-load-more:hover button {
background-color: #4399FF;
}
.talk-new-comments {
width: 100%;
text-align: center;
margin: 4px 0;
}
.talk-load-more-replies {
width: 100%;
padding-left: 20px;
box-sizing: border-box;
}
.talk-load-more-replies .talk-load-more-button {
background-color: transparent;
color: #979797;
border: #979797 solid 1px;
border-radius: 2px;
}
.talk-load-more-replies .talk-load-more:hover button {
background-color: #979797;
color: white;
}
.hidden {
visibility: hidden;
display: none;
}
```
+1 -1
View File
@@ -109,7 +109,7 @@ If you deploy using Docker, you can extend from the `*-onbuild` image, an
example `Dockerfile` for your project could be:
```Dockerfile
FROM coralproject/talk:latest-onbuild
FROM coralproject/talk:4.5-onbuild
```
Where the directory for your instance would contain a `plugins.json` file
+7
View File
@@ -110,6 +110,13 @@ const getUsersByQuery = async (
},
},
},
// Search by the displayName metadata field.
{
'metadata.displayName': {
$regex,
},
},
],
});
}
+227 -6
View File
@@ -1,4 +1,7 @@
ar:
admin_sidebar:
sort_comments: 'فرز التعليقات'
view_options: 'عرض الخيارات'
already_flagged_username: 'لقد سبق لك وضع علامة باسم المستخدم هذا.'
bandialog:
are_you_sure: 'أنت متأكد أنك تريد حظر {0}؟'
@@ -35,6 +38,9 @@ ar:
name: الاسم
post: نشر
reply: رد
comment_history_blank:
info: 'سوف يظهر تاريخ تعليقاتك هنا'
title: 'لم تكتب أي تعليقات'
comment_offensive: 'هذا التعليق مسيء'
comment_plural: تعليقات
comment_post_banned_word: 'تعليقك يحتوي على كلمة أو أكثر غير مسموح بها، لذا لن يتم نشره. إذا كنت تعتقد أن هذه الرسالة خطأ، رجاء الاتصال بفريق الإشراف لدينا.'
@@ -80,6 +86,7 @@ ar:
username_and_email: 'اسم المستخدم والبريد الإلكتروني'
yes_ban_user: 'نعم إحظر المستخدم'
configure:
access_message: 'You must be an administrator to access config settings. Please find the nearest Admin and ask them to level you up!'
apply: طبق
banned_word_text: 'التعليقات التي تحتوي على هذه الكلمات أو العبارات سيتم حذفها آليا من جدول التعليقات. اطبع كلمة واضغط Enter أو Tab لزيادة الكلمة. اختياريا الصق قائمة مقسمة بالفصلات.'
banned_words_title: 'قائمة بالكلمات المحظورة'
@@ -104,11 +111,14 @@ ar:
custom_css_url_desc: 'رابط CSS الذي سيتجاوز أنماط جدول التعليقات المضمن. يمكن أن يكون داخلي أو خارجي.'
days: أيام
description: 'كإداري يمكنك تعديل إعدادات جدول التعليقات لهذه القصة:'
disable_commenting_desc: 'اكتب رسالة سيتم عرضها أثناء إلغاء تفعيل التعليقات.'
disable_commenting_title: 'إلغاء تفعيل التعليقات على مستوى الموقع'
domain_list_text: 'أدخل عناوين النطاقات التي سوف تسمح فيها لTalk.. مثلا بيئات التدريج و الإنتاج (مثلا localhost:3000 staging.domain.com domain.com).'
domain_list_title: 'النطاقات المسموح بها'
edit_comment_timeframe_heading: 'عدل الإطار الزمني للتعليق'
edit_comment_timeframe_text_post: 'ثوان لتحرير تعليقاتهم.'
edit_comment_timeframe_text_pre: 'سيكون لدى المعلقين'
edit_info: 'تحرير المعلومات'
embed_comment_stream: 'تضمين الجدول'
enable_pre_moderation: 'تمكين الإشراف المسبق'
enable_pre_moderation_text: 'يجب على المشرفين الموافقة على أي تعليق قبل نشره.'
@@ -129,9 +139,23 @@ ar:
open: مفتوح
open_stream: 'افتح الجدول'
open_stream_configuration: 'جدول التعليقات هذا مفتوح. بإغلاق هذا الجدول لن يتم قبول تعليقات جديدة، وستبقى التعليقات القديمة ظاهرة.'
organization_contact_email: 'بريد المنظمة الالكتروني'
organization_info_copy: 'نستخدم هذه المعلومات في إشعارات البريد الإلكتروني التي يتم إنشاؤها بواسطة Talk. يعمل هذا على توصيل الرسائل إلى مؤسستك ، ويوفر طريقة للمستخدمين للاتصال بك إذا كانت لديهم مشكلة في حسابهم.'
organization_info_copy_2: 'We recommend creating a generic email account (eg. community@yournewsroom.com) for this purpose. This means it can remain consistent over time, and doesn''t expose a name that users could target if their account were blocked.'
organization_information: 'معلومات المنظمة'
organization_name: 'اسم المنظمة'
product_guide_link: 'دليل المنتج'
report_bug_or_feedback: 'Report a bug or give feedback'
require_email_verification: 'يلزم التحقق من البريد الإلكتروني'
require_email_verification_text: 'يجب على المستخدمين الجدد التحقق من بريدهم الإلكتروني قبل التعليق'
save: حفظ
save_changes: 'احفظ التعديلات'
save_changes_dialog:
cancel: إلغاء
copy: 'لقد أجريت تغييرًا واحدًا أو أكثر بدون حفظ. هل تريد حفظ التغييرات أو تجاهلها؟'
discard: تجاهل
save_settings: 'احفظ التغييرات'
unsaved_changes: 'التغييرات غير المحفوظة'
shortcuts: اختصارات
sign_out: خروج
stories: قصص
@@ -140,11 +164,13 @@ ar:
suspect_word_title: 'قائمة الكلمات المشبوهة'
tech_settings: 'إعدادات تقنية'
title: 'تهيئة جدول التعليق'
view_last_version: 'عرض أحدث إصدار'
weeks: أسابيع
wordlist: 'الكلمات المحظورة'
confirm_email:
click_to_confirm: 'إضغط في الأسفل لتأكيد البريد الألكتروني'
confirm: تأكيد
email_confirmation: 'تأكيد البريد الإلكتروني'
continue: واصل
createdisplay:
check_the_form: 'استمارة غير صالحة. يرجى التحقق من الحقول'
@@ -180,9 +206,13 @@ ar:
if_you_did_not: 'إذا لم تطلب ذلك، يمكنك تجاهل هذه الرسالة الإلكترونية.'
subject: 'تأكيد البريد الإلكتروني'
to_confirm: 'لتأكيد الحساب، يرجى زيارة الرابط التالي:'
password_change:
body: "تم تغيير كلمة المرور على حسابك. \n\n إذا لم تطلب هذا التغيير ، فيرجى الاتصال بنا على {0}."
subject: '{0} تغيير كلمة السر'
password_reset:
if_you_did: 'اذا فعلت،'
please_click: 'الرجاء النقر هنا لإعادة تعيين كلمة المرور'
subject: 'إعادة ضبط كلمة المرور'
we_received_a_request: 'لقد تلقينا طلبا لإعادة تعيين كلمة المرور. إذا لم تطلب هذا التغيير، فيمكنك تجاهل هذه الرسالة الإلكترونية.'
suspended:
subject: 'تم تعليق حسابك'
@@ -191,28 +221,35 @@ ar:
copy: 'نسخ إلى الحافظة'
error:
ALREADY_EXISTS: 'المورد موجود من قبل'
AUTHENTICATION: 'حدث خطأ أثناء محاولة مصادقة حسابك.'
CANNOT_IGNORE_STAFF: 'لا يمكن تجاهل الموظفين.'
COMMENT_PARENT_NOT_VISIBLE: 'التعليق الذي ترد عليه تمت إزالته أو غير موجود.'
COMMENT_TOO_SHORT: 'يجب أن تكون التعليقات أكثر من حرف واحد، يرجى مراجعة تعليقك وإعادة المحاولة.'
COMMENTING_CLOSED: 'تم إغلاق فاعلية التعليق'
COMMENTING_DISABLED: 'التعليق معطّل حاليًا على هذا الموقع'
confirm_password: 'كلمات المرور غير متطابقة. يرجى التحقق مرة أخرى'
DELETION_NOT_SCHEDULED: 'لم يكن من المقرر الحذف'
EDIT_USERNAME_NOT_AUTHORIZED: 'ليس لديك إذن بتحديث اسم المستخدم الخاص بك.'
EDIT_WINDOW_ENDED: 'لم يعد بإمكانك تحرير هذا التعليق. نافذة الوقت للقيام بذلك قد انتهت صلاحيتها.'
email: 'ليس بريدا إلكترونيا صالحا'
EMAIL_ALREADY_VERIFIED: 'عنوان البريد الإلكتروني تم التحقق منه.'
EMAIL_IN_USE: 'البريد الالكتروني قيد الاستخدام'
email_not_verified: 'عنوان البريد الإلكتروني {0} لم يتم التحقق منه.'
EMAIL_NOT_VERIFIED: 'لم يتم التحقق من عنوان البريد الإلكتروني'
email_password: 'مجموعة البريد الإلكتروني و / أو كلمة المرور غير صحيحة.'
EMAIL_REQUIRED: 'مطلوب عنوان البريد الإلكتروني'
EMAIL_VERIFICATION_TOKEN_INVALID: 'رمز التحقق من البريد الإلكتروني غير صالح.'
INCORRECT_PASSWORD: 'كلمة سر خاطئة'
INVALID_ASSET_URL: 'رابط المادة غير صالح'
LOGIN_MAXIMUM_EXCEEDED: 'لقد أجريت العديد من محاولات إدخال كلمة المرور غير الناجحة. أرجو الإنتظار.'
network_error: 'فشل الاتصال بالخادم. تحقق من اتصالك بالإنترنت وحاول مرة أخرى.'
NO_SPECIAL_CHARACTERS: 'يمكن أن تحتوي أسماء المستخدمين على أحرف, أرقام و _ فقط'
NOT_AUTHORIZED: 'غير مصرح لك بتنفيذ هذا الإجراء.'
NOT_FOUND: 'المورد غير موجود'
organization_contact_email: 'البريد الإلكتروني للمؤسسة غير صالح.'
organization_name: 'يجب أن يحتوي اسم المؤسسة على أحرف أو أرقام فقط.'
password: 'يجب أن تكون كلمة المرور 8 أحرف على الأقل'
PASSWORD_INCORRECT: 'تم إدخال كلمة المرور الحالية بشكل غير صحيح'
PASSWORD_LENGTH: 'كلمة المرور قصيرة جدا'
PASSWORD_REQUIRED: 'يجب إدخال كلمة مرور'
PASSWORD_RESET_TOKEN_INVALID: 'رابط إعادة تعيين كلمة المرور غير صالح.'
@@ -227,6 +264,13 @@ ar:
USERNAME_REQUIRED: 'يجب إدخال اسم مستخدم'
flag_comment: 'الإبلاغ عن تعليق'
flag_reason: 'سبب الإبلاغ (اختياري)'
flag_reasons:
username:
impersonating: 'هذا المستخدم ينتحل شخصية'
nolike: 'أنا لا أحب اسم المستخدم هذا'
offensive: 'اسم المستخدم هذا مسيء'
other: آخر
spam: 'هذا يشبه الإعلان / التسويق'
flag_username: 'بلغ عن اسم المستخدم'
flagged_usernames:
notify_approved: '{0} وافق على اسم المستخدم {1}'
@@ -244,6 +288,7 @@ ar:
comment_spam: 'غير مرغوب فيه'
links: رابط
suspect_word: 'كلمة مشتبهة'
trust: Karma
user:
username_impersonating: 'إنتحال شخصية'
username_nolike: 'لم يعجبنى'
@@ -256,6 +301,7 @@ ar:
changed_name:
msg: 'يتم مراجعة تغيير اسم المستخدم من قبل فريق الإشراف لدينا.'
comment: تعليق
comment_is_deleted: 'حذف هذا المعلق حسابه.'
comment_is_hidden: 'هذا التعليق غير متاح.'
comment_is_ignored: 'هذا التعليق مخفي لأنك تجاهلت هذا المستخدم.'
comment_is_rejected: 'لقد رفضت هذا التعليق.'
@@ -280,10 +326,92 @@ ar:
view_more_comments: 'عرض مزيد من التعليقات'
view_reply: 'عرض الرد'
from_settings_page: 'من صفحة الملف الشخصي يمكنك مشاهدة سجل التعليقات.'
install:
add_organization:
description: 'Please tell us the name of your organization. This will appear in emails when inviting new team members.'
label: 'Organization Name'
save: حفظ
create:
confirm_password: 'تأكيد كلمة المرور'
email: 'عنوان البريد الإلكتروني'
organization_contact_email: 'Organization Contact Email'
password: كلمه المرور
save: حفظ
username: اسم المستخدم
final:
close: 'Close this Installer'
description: 'Thanks for installing Talk! We sent an email to verify your email address. While you finish setting up the account, you can start engaging with your readers now.'
launch: 'Launch Talk'
initial:
description: 'Let''s set up your Talk community in just a few short steps.'
submit: 'Get Started'
permitted_domains:
description: 'Enter the domains you would like to permit for Talk, e.g. your local, staging and production environments (ex. localhost:3000, staging.domain.com, domain.com).'
submit: 'Finish install'
title: 'Permitted domains'
like: إعجاب
loading_results: 'جار تحميل النتائج'
login:
email_address: 'البريد الإلكتروني'
forgot_password: 'نسيت كلمه المرور؟'
go_back: 'عُد'
sign_in: 'تسجيل الدخول'
sign_in_button: 'تسجيل الدخول'
sign_in_message: 'تسجيل الدخول للتفاعل مع مجتمعك.'
password: كلمه المرور
request_passowrd: 'اطلب واحدة جديده.'
team_sign_in: 'تسجيل الدخول لفريق العمل'
marketing: 'هذا يشبه الإعلان / التسويق'
moderate_all_streams: 'Moderate comments on All Stories'
moderate_this_stream: 'أشرف على هذا الجدول'
modqueue:
account: 'account flags'
actions: Actions
all: all
all_streams: 'All Streams'
approve: Approve
approved: Approved
ban_user: Ban
billion: B
close: Close
empty_queue: 'No more comments to moderate! You''re all caught up. Go have some ☕️'
flagged: flagged
jump_to_queue: 'Jump to specific queue'
less_detail: 'Less detail'
likes: likes
million: M
mod_faster: 'Moderate faster with keyboard shortcuts'
moderate: 'Moderate →'
more_detail: 'More detail'
navigation: Navigation
new: New
newest_first: 'Newest First'
next_comment: 'Go to the next comment'
next_queue: 'Switch queues'
notify_accepted: '{0} accepted comment "{1}"'
notify_edited: '{0} edited comment "{1}"'
notify_flagged: '{0} flagged comment "{1}"'
notify_rejected: '{0} rejected comment "{1}"'
notify_reset: '{0} reset status of comment "{1}"'
oldest_first: 'Oldest First'
premod: pre-mod
prev_comment: 'Go to the previous comment'
reject: Reject
rejected: Rejected
reply: Reply
reported: reported
select_stream: 'Select Stream'
shift_key:
shortcuts: Shortcuts
show_shortcuts: 'Show Shortcuts'
singleview: 'Zen mode'
sort: Sort
system_withheld: 'System Withheld'
thismenu: 'Open this menu'
thousand: k
toggle_search: 'Open search'
try_these: 'Try these'
view_more_shortcuts: 'View more shortcuts'
my_comment_history: 'سجل التعليقات'
name: اسم
no_agree_comment: 'لا أوافق على هذا التعليق'
@@ -292,6 +420,7 @@ ar:
other: آخر
password_reset:
change_password: 'تغيير كلمة السر'
change_password_help: 'يرجى إدخال كلمة مرور جديدة لاستخدامها لتسجيل الدخول. اجعلها آمنة!'
confirm_new_password: 'تأكيد كلمة السر الجديدة'
mail_sent: 'إذا كان لديك حساب مسجل، فقد تم إرسال رابط إعادة تعيين كلمة المرور إلى هذا البريد الإلكتروني'
new_password: 'كلمة السر الجديدة'
@@ -302,6 +431,25 @@ ar:
post: نشر
profile: 'الملف الشخصي'
profile_settings: إعدادات
reject_username:
description_notify: 'Suspending this user will temporarily disable their account.'
description_reject: 'Would you like to temporarily ban this user because of their {0}? Doing so will temporarily suspend this user until they rewrite their {0}.'
email_message_reject: 'Another member of the community recently flagged your username for review. Because of its content your user was rejected. This means you can no longer comment, like, or flag content until you rewrite your username. Please email us if you have any questions or concerns.'
no_cancel: 'No cancel'
send: Send
suspend_user: 'Suspend User'
title_notify: 'Notify the user of their temporary suspension'
title_reject: 'We noticed you rejected a username'
username: username
write_message: 'Write a message'
yes_suspend: 'Yes suspend'
reject_username_dialog:
cancel: إلغاء
description: 'ساعدنا على الفهم'
message: 'سبب الإبلاغ (اختياري)'
reason: السبب
reject_username: 'رفض اسم المستخدم'
title: 'رفض اسم المستخدم'
reply: رد
report: أبلغ
report_notif: 'شكرا على الإبلاغ عن هذا التعليق. تم إبلاغ فريق الإشراف لدينا وسيراجعه قريبًا.'
@@ -324,17 +472,90 @@ ar:
no_comments: 'لا توجد تعليقات حتى الآن، لماذا لا تكتب واحد؟'
no_comments_and_closed: 'لم تكن هناك تعليقات على هذه المقالة.'
temporarily_suspended: 'وفقا لإرشادات المجموعة {0}، تم تعليق حسابك مؤقتا. الرجاء إعادة الانضمام إلى المحادثة {1}.'
streams:
all: All
article: Story
closed: Closed
empty_result: 'No assets match this search. Maybe try widening your search?'
filter_streams: 'Filter Streams'
most_recent_stories: 'Most Recent Stories'
newest: Newest
no_results: 'No results'
oldest: Oldest
open: Open
pubdate: 'Publication Date'
search: Search
search_results: 'Search Results'
sort_by: 'Sort By'
status: 'Stream Status'
stream_status: 'Stream Status'
suspenduser:
cancel: Cancel
day: '{0} days'
days: '{0} days'
description_notify: 'Suspending this user will temporarily disable their account.'
description_suspend: 'You are suspending {0}. This comment will go to the Rejected queue, and {0} will not be allowed to like, report, reply or post until the suspension time is complete.'
email_message_suspend: "Dear {0},\n\nIn accordance with {1}s community guidelines, your account has been temporarily suspended. During the suspension, you will be unable to comment, flag or engage with fellow commenters. Please rejoin the conversation {2}."
hour: '{0} hours'
hours: '{0} hours'
notify_suspend_until: 'User {0} has been temporarily suspended. This suspension will automatically end {1}.'
one_hour: '1 hour'
select_duration: 'Select suspension duration'
send: Send
suspend_user: 'Suspend User'
title_notify: 'Notify the user of their temporary suspension'
title_suspend: 'Suspend User'
write_message: 'Write a message'
thank_you: 'نحن نقدر سلامتك وردود الفعل. سيراجع المشرف التقرير الخاص بك'
user:
bio_flags: 'flags for this bio'
user_bio: 'User Bio'
username_flags: 'flags for this username'
user_detail:
all: All
ban: 'Ban User'
banned: Banned
email: Email
id: ID
karma: Karma
karma_docs_link: 'https://docs.coralproject.net/talk/trust/#user-karma-score'
learn_more: 'Learn More'
member_since: 'Member Since'
reject_rate: 'Reject Rate'
reject_username: 'Reject Username'
rejected: Rejected
remove_ban: 'Remove Ban'
remove_suspension: 'Remove Suspension'
suspend: 'Suspend User'
suspended: Suspended
total_comments: 'Total Comments'
unreliable: Unreliable
user_history: 'User History'
user_karma_score: 'User Karma Score'
username: Username
username_needs_approval: 'Username needs approval'
username_rejected: 'Username rejected'
user_history:
action: Action
ban_removed: 'Ban removed'
date: Date
suspended: 'Suspended, {0}'
suspension_removed: 'Suspension removed'
system: System
taken_by: 'Taken By'
user_banned: 'User banned'
username_status: 'Username {0}'
user_impersonating: 'هذا المستخدم ينتحل شخصية'
user_no_comment: 'لم تترك تعليقا مطلقا. إنضم إلى المحادثة!'
username_offensive: 'اسم المستخدم هذا مسيء'
validators:
confirm_password: 'ﻚﻠﻣﺎﺗ ﺎﻠﻣﺭﻭﺭ ﻎﻳﺭ ﻢﺘﻃﺎﺒﻗﺓ. ﻱﺮﺟﻯ ﺎﻠﺘﺤﻘﻗ ﻡﺭﺓ ﺄﺧﺭﻯ'
required: 'ﻩﺬﻫ ﺎﻠﺧﺎﻧﺓ ﻢﻄﻟﻮﺒﻫ'
verify_email: 'ﻞﻴﺳ ﺏﺮﻳﺩﺍ ﺈﻠﻜﺗﺭﻮﻨﻳﺍ ﺹﺎﻠﺣﺍ'
verify_organization_name: 'ﻲﺠﺑ ﺄﻧ ﻲﺤﺗﻮﻳ ﺎﺴﻣ ﺎﻠﻣﺆﺴﺳﺓ ﻊﻟﻯ ﺄﺣﺮﻓ ﺃﻭ ﺃﺮﻗﺎﻣ ﻒﻘﻃ.'
verify_password: 'ﻲﺠﺑ ﺄﻧ ﺖﻛﻮﻧ ﻚﻠﻣﺓ ﺎﻠﻣﺭﻭﺭ 8 ﺄﺣﺮﻓ ﻊﻟﻯ ﺍﻸﻘﻟ'
verify_username: 'ﻲﻤﻜﻧ ﺄﻧ ﺖﺤﺗﻮﻳ ﺄﺴﻣﺍﺀ ﺎﻠﻤﺴﺘﺧﺪﻤﻴﻧ ﻊﻟﻯ ﺃﺮﻗﺎﻣ, ﺄﺣﺮﻓ ﻭ _ ﻒﻘﻃ'
confirm_email: 'عناوين البريد الإلكتروني لا تتطابق. يرجى التحقق مرة أخرى.'
confirm_password: 'كلمات المرور غير متطابقة. يرجى التحقق مرة أخرى'
required: 'هذه الخانة مطلوبة'
verify_email: 'ليس بريدا إلكترونيا صالحا'
verify_organization_name: 'يجب أن يحتوي اسم المؤسسة على أحرف أو أرقام فقط.'
verify_password: 'يجب أن تكون كامة المرور 8 أحرف على اﻷقل'
verify_username: 'يمكن أن تحتوي أسماء المستخدمين على أرقام, أحرف ﻭ _ فقط'
view_conversation: 'عرض المحادثة'
your_account_has_been_banned: 'تم حظر حسابك.'
your_account_has_been_suspended: 'تم تعليق حسابك مؤقتا.'
+6
View File
@@ -163,6 +163,12 @@ Comment.index({
created_at: -1,
});
Comment.index({
asset_id: 1,
parent_id: 1,
created_at: 1,
});
Comment.index(
{
'action_counts.flag': 1,
+9
View File
@@ -235,6 +235,15 @@ User.index({
created_at: -1,
});
User.index(
{
'metadata.displayName': 1,
},
{
sparse: true,
}
);
// This query is executed often, to count the number of flagged accounts with
// usernames.
User.index({
-2350
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "talk",
"version": "4.5.0",
"version": "4.6.0",
"description": "A better commenting experience from Mozilla, The New York Times, and the Washington Post. https://coralproject.net",
"main": "app.js",
"private": true,
@@ -133,7 +133,7 @@
"inquirer-autocomplete-prompt": "^0.12.1",
"ioredis": "3.1.4",
"ip": "^1.1.5",
"jest": "^22.4.3",
"jest": "^23.0.0",
"joi": "^13.4.0",
"jsonwebtoken": "^8.3.0",
"jwt-decode": "^2.2.0",
@@ -152,7 +152,7 @@
"metascraper-title": "^3.9.2",
"minimist": "^1.2.0",
"moment": "^2.18.1",
"mongoose": "^5.1.5",
"mongoose": "^5.2.1",
"ms": "^2.0.0",
"murmurhash-js": "^1.0.0",
"name-all-modules-plugin": "^1.0.1",
@@ -15,6 +15,7 @@ ar:
or: "أو"
email: "البريد الإلكتروني"
password: "كلمة المرور"
password_error: "يجب أن تكون كلمة المرور 8 أحرف على الأقل."
forgot_your_pass: "نسيت كلمة المرور؟"
need_an_account: "تحتاج الى حساب؟"
register: "تسجيل"
@@ -43,6 +44,15 @@ ar:
username: اسم المستخدم
write_your_username: "عدل اسم المستخدم"
your_username: "يظهر اسم المستخدم في كل تعليق تنشره."
change_password:
change_password: "تغيير كلمة المرور"
passwords_dont_match: "كلمات المرور غير متطابقة"
required_field: "هذه الخانة مطلوبه"
forgot_password: "نسيت كلمة المرور؟"
save: "حفظ"
cancel: "إلغاء"
edit: "تصحيح"
changed_password_msg: "كلمة المرور الخاصة بك تم تغييرها بنجاح"
da:
talk-plugin-auth:
login:
@@ -27,7 +27,7 @@ module.exports = passport => {
try {
const { id, provider, displayName } = profile;
user = await UsersService.findOrCreateExternalUser(
user = await UsersService.upsertSocialUser(
req.context,
id,
provider,
@@ -26,7 +26,7 @@ module.exports = passport => {
try {
const { id, provider, displayName } = profile;
user = await UsersService.findOrCreateExternalUser(
user = await UsersService.upsertSocialUser(
req.context,
id,
provider,
@@ -1,5 +1,6 @@
ar:
talk-plugin-ignore-user:
blank_info: أنت لا تتجاهل حاليًا أي مستخدم
section_title: المستخدمون الذين تم تجاهلهم
section_info: لأنك تجاهلت المعلقين التاليين، يتم إخفاء تعليقاتهم.
stop_ignoring: إيقاف التجاهل
@@ -1,3 +1,79 @@
ar:
email:
email_change_original:
subject: تغيير البريد الإلكتروني
body: تم تغيير عنوان بريدك الإلكتروني من {0} إلى {1}. إذا لم تطلب هذا التغيير ، فيرجى الاتصال {2}.
error:
NO_LOCAL_PROFILE: لا يوجد عنوان بريد إلكتروني حالي مقترن بهذا الحساب.
LOCAL_PROFILE: هناك بريد إلكتروني مرتبط بهذا الحساب.
INCORRECT_PASSWORD: كلمة المرور المقدمة غير صحيحة.
talk-plugin-local-auth:
change_password:
change_password: "تغيير كلمة المرور"
passwords_dont_match: "كلمات المرور لا تتطابق"
required_field: "هذه الخانة مطلوبه"
forgot_password: "نسيت كلمة المرور؟"
old_password: "كلمة المرور القديمة"
new_password: "كلمة المرور الجديدة"
confirm_new_password: "تأكيد كلمة المرور الجديدة"
save: "حفظ"
cancel: "إلغاء"
edit: "تعديل"
changed_password_msg: "تغيير كلمة المرور - تم تغيير كلمة المرور الخاصة بك بنجاح"
forgot_password_sent: "نسيت كلمة المرور - لقد أرسلنا إليك رسالة بريد إلكتروني لاسترداد كلمة المرور الخاصة بك"
change_username:
change_username_note: "لا يمكن تغيير أسماء المستخدمين إلا مرة واحدة كل 14 يومًا."
is_not_eligible: "لا يمكنك حاليا تغيير اسم المستخدم الخاص بك."
save: "حفظ"
edit_profile: "تعديل الملف الشخصي"
cancel: "إلغاء"
confirm_username_change: "تأكيد تغيير اسم المستخدم"
description: "أنت تحاول تغيير اسم المستخدم الخاص بك. سوف يظهر اسم المستخدم الجديد الخاص بك على جميع تعليقاتك الماضية والتعليقات المستقبلية."
old_username: "اسم المستخدم القديم"
new_username: "اسم المستخدم الجديد"
re_enter: "أعد إدخال اسم مستخدم جديد"
bottom_note: "ملاحظة: لن تتمكن من تغيير اسم المستخدم الخاص بك مرة أخرى لمدة 14 يومًا"
confirm_changes: "تأكيد التغييرات"
username_does_not_match: "اسم المستخدم غير متطابق"
cant_be_equal: "يجب أن يكون {0} الجديد الخاص بك مختلفًا عن الحالي"
changed_username_success_msg: "اسم المستخدم تم تغييره - تم تغيير اسم المستخدم الخاص بك بنجاح. لن تتمكن من تغيير اسم المستخدم الخاص بك لمدة 14 يومًا."
change_username_attempt: "لا يمكن تحديث اسم المستخدم. لا يمكن تغيير أسماء المستخدمين إلا كل 14 يومًا."
change_email:
confirm_email_change: "تأكيد تغيير عنوان البريد الإلكتروني"
description: "أنت تحاول تغيير عنوان بريدك الإلكتروني. سيتم استخدام عنوان بريدك الإلكتروني الجديد لتسجيل الدخول ولتلقي إشعارات الحساب."
old_email: "عنوان البريد الإلكتروني القديم"
new_email: "عنوان البريد الإلكتروني الجديد"
enter_password: "أدخل كلمة المرور"
incorrect_password: "كلمة مرور خاطئة"
confirm_change: "تأكيد التغيير"
cancel: "إلغاء"
change_email_msg: "تم تغيير عنوان البريد الإلكتروني. سيتم استخدام عنوان البريد الإلكتروني هذا الآن لتسجيل الدخول ولإشعارات البريد الإلكتروني."
add_email:
add_email_address: "إضافة البريد الإلكتروني"
enter_email_address: "أدخل البريد الالكتروني:"
invalid_email_address: "البريد الإلكتروني غير صالح"
confirm_email_address: "أكد عنوان بريدك الإلكتروني:"
email_does_not_match: "عنوان البريد الإلكتروني غير مطابق"
insert_password: "إدخال كلمة المرور:"
confirm_password: "تأكيد كلمة المرور:"
required_field: "هذه الخانة مطلوبه"
done: "تم"
content:
title: "أضف عنوان بريد إلكتروني"
description: "لمزيد من الأمان ، نطلب من المستخدمين إضافة عنوان بريد إلكتروني إلى حساباتهم. سيتم استخدام عنوان بريدك الإلكتروني في:"
item_1: "تلقي التحديثات المتعلقة بأي تغييرات في حسابك (عنوان البريد الإلكتروني ، اسم المستخدم ، كلمة المرور ، إلخ.)"
item_2: "السماح لك بتنزيل تعليقاتك."
item_3: "إرسال إشعارات التعليقات التي اخترت استلامها."
verify:
title: "تحقق من عنوان البريد الإلكتروني الخاص بك"
description: "لقد أرسلنا رسالة إلكترونية إلى {0} لإثبات ملكية حسابك. يجب عليك التحقق من عنوان بريدك الإلكتروني حتى يمكن استخدامه لتأكيد تعديلات الحساب والإشعارات."
added:
title: "تمت إضافة عنوان البريد الالكتروني"
description: "تمت إضافة عنوان بريدك الإلكتروني إلى حسابك."
subtitle: "هل تحتاج إلى تغيير عنوان بريدك الإلكتروني؟"
description_2: "يمكنك تغيير إعدادات حسابك من خلال زيارة"
path: "ملفي > الإعدادات"
alert: "تمت إضافة البريد الإلكتروني!"
en:
email:
email_change_original:
@@ -1,3 +1,6 @@
ar:
talk-plugin-notifications-category-featured:
toggle_description: تعليقي تم تمييزه
en:
talk-plugin-notifications-category-featured:
toggle_description: My comment is featured
@@ -1,3 +1,10 @@
ar:
talk-plugin-notifications:
categories:
featured:
subject: "تميَزت واحدة من تعليقاتك على {0}"
body: "{0}\n
حدد أحد أعضاء فريقنا هذا التعليق ليتم عرضه كتعليق مميز للقراء الآخرين: {1}"
en:
talk-plugin-notifications:
categories:
@@ -1,3 +1,6 @@
ar:
talk-plugin-notifications-category-reply:
toggle_description: يتلقى تعليقي ردا
en:
talk-plugin-notifications-category-reply:
toggle_description: My comment receives a reply
@@ -1,3 +1,10 @@
ar:
talk-plugin-notifications:
categories:
reply:
subject: "رد شخص ما على تعليقك على {0}"
body: "{0}\n{1} رد على تعليقك
{2}"
en:
talk-plugin-notifications:
categories:
@@ -1,3 +1,6 @@
ar:
talk-plugin-notifications-category-staff:
toggle_description: يرد أحد الموظفين على تعليقي
en:
talk-plugin-notifications-category-staff:
toggle_description: A staff member replies to my comment
@@ -1,3 +1,10 @@
ar:
talk-plugin-notifications:
categories:
staff:
subject: "شخص ما في {0} قد رد على تعليقك"
body: "{0}\n{1} يعمل ل
{2} وقد رد على تعليقك: {3}"
en:
talk-plugin-notifications:
categories:
@@ -1,3 +1,7 @@
ar:
talk-plugin-notifications:
digest_enum:
DAILY: في ملخص يومي
en:
talk-plugin-notifications:
digest_enum:
@@ -1,3 +1,7 @@
ar:
talk-plugin-notifications:
digest_enum:
HOURLY: في ملخص كل ساعة
en:
talk-plugin-notifications:
digest_enum:
@@ -1,3 +1,21 @@
ar:
talk-plugin-notifications:
settings_title: إشعارات
settings_subtitle: تلقي الإشعارات متى
turn_off_all: لا أريد تلقي الإشعارات
banner_info:
title: التحقق من البريد الإلكتروني مطلوب
text: لتلقي إشعارات البريد الإلكتروني ، يجب أن يكون لديك عنوان بريد إلكتروني تم التحقق منه.
verify_now: تحقق من بريدك الالكتروني الآن
banner_success:
title: تم إرسال التحقق عبر البريد الإلكتروني
text: تم إرسال رسالة إلكترونية إلى {0} يحتوي على رابط التحقق.
banner_error:
title: خطأ
text: حدث خطأ في إرسال رسالة التحقق الخاصة بك. الرجاء معاودة المحاولة في وقت لاحق.
digest_option: إرسال الإشعارات
digest_enum:
NONE: فورا
en:
talk-plugin-notifications:
settings_title: Notifications
@@ -1,3 +1,17 @@
ar:
talk-plugin-notifications:
templates:
digest:
subject: "نشاطك الأخير للتعليق على {0}"
footer: "لقد تلقيت هذا الإشعار نظرًا لأنك معلق على {0} وتم تمكين تلقي الإشعارات."
links:
unsubscribe: "إلغاء الاشتراك في إشعارات التعليقات"
unsubscribe_page:
unsubscribe: "إلغاء الاشتراك في إشعارات التعليقات"
click_to_confirm: "انقر أدناه لتأكيد رغبتك في إلغاء الاشتراك من جميع الإشعارات"
confirm: "أكد"
are_unsubscribed: "أنت الآن غير مشترك في جميع الإشعارات."
token_invalid: "رابط إلغاء الاشتراك غير صالح ، انقر الرابط من بريد إلكتروني أحدث أو قم بزيارة جدول تعليقات وتسجيل الدخول لتغيير تفضيلات الإشعارات الخاصة بك"
en:
talk-plugin-notifications:
templates:
@@ -1,3 +1,54 @@
ar:
download_request:
section_title: "قم بتنزيل سجل التعليقات الخاص بي"
you_will_get_a_copy: "ستتلقى رسالة إلكترونية تحتوي على رابط لتنزيل سجل التعليقات. تستطيع طلب"
download_rate: "طلب تنزيل واحد كل {0} يوم"
most_recent_request: "طلبك الأخير"
request: "طلب سجل التعليقات"
rate_limit: "يمكنك تقديم طلب سجل تعليقات آخر في {0}"
hours: "{0} ساعات"
days: "{0} أيام"
hour: "{0} ساعة"
day: "{0} يوم"
download_preparing: "جارٍ التحضير لتنزيل الحساب - تحقق من بريدك الإلكتروني قريبًا للحصول على رابط تنزيل"
delete_request:
account_deletion_cancelled: 'طلب حذف الحساب تم إلغاؤه - لقد تم إلغاء طلبك لحذف حسابك.'
account_deletion_requested: 'تم طلب حذف الحساب'
received_on: "تم تلقي طلب لحذف حسابك في "
cancel_request_description: "إذا كنت ترغب في إعادة تفعيل حسابك ، فيمكنك إلغاء طلبك لحذف حسابك أدناه"
before: "قبل"
cancel_account_deletion_request: "إلغاء طلب حذف الحساب"
delete_my_account: "احذف حسابي"
delete_my_account_description: "سيؤدي حذف حسابك إلى محو ملفك الشخصي نهائيًا وإزالة جميع تعليقاتك من هذا الموقع."
already_submitted_request_description: "لقد أرسلت طلبًا لحذف حسابك. سيتم حذف حسابك بعد {0}. يمكنك إلغاء الطلب حتى ذلك الوقت"
your_request_submitted_description: "تم إرسال طلبك وتم إرسال التأكيد إلى عنوان البريد الإلكتروني المرتبط بحسابك."
your_account_deletion_scheduled: "من المقرر أن يتم حذف حسابك بعد:"
changed_your_mind: "غيرت رأيك؟"
simply_go_to: "ما عليك سوى الانتقال إلى حسابك مرة أخرى قبل هذا الوقت والنقر"
tell_us_why: "أخبرنا لماذا"
feedback_copy: "نود أن نعرف لماذا اخترت حذف حسابك. أرسل لنا ردود الفعل على نظام التعليق لدينا عن طريق البريد الإلكتروني"
done: "تم"
cancel: "إلغاء"
proceed: "تقدم"
input_is_not_correct: "المدخلات غير صحيحة"
step_0:
you_are_attempting: "أنت تحاول حذف حسابك. هذا يعنى:"
item_1: "تم إزالة جميع تعليقاتك من هذا الموقع"
item_2: "تم حذف جميع تعليقاتك من قاعدة البيانات الخاصة بنا"
item_3: "تم إزالة اسم المستخدم وعنوان البريد الإلكتروني من نظامنا"
step_1:
subtitle: "متى سيتم حذف حسابي؟"
description: "سيتم حذف حسابك بعد {0} ساعات من تقديم طلبك."
subtitle_2: "هل ما زال بإمكاني كتابة تعليقات حتى يتم حذف حسابي؟"
description_2: "نعم ، لا يزال بإمكانك التعليق والرد على التعليقات والتفاعل عليها حتى تنتهي صلاحية {0} ساعات."
step_2:
description: "قبل حذف حسابك، نوصيك بتنزيل سجل التعليقات الخاص بسجلاتك. بعد حذف حسابك، لن تتمكن من طلب سجل التعليقات الخاص بك."
to_download: "لتنزيل سجل التعليقات، انتقل إلى:"
path: "ملفي > تنزيل سجل تعليقاتي"
step_3:
subtitle: "هل انت متأكد انك تريد حذف حسابك؟"
description: "للتأكيد على رغبتك في حذف حسابك، يرجى كتابة العبارة التالية في مربع النص أدناه:"
type_to_confirm: "اكتب عبارة أدناه للتأكيد"
en:
download_request:
section_title: "Download My Comment History"
@@ -1,3 +1,41 @@
ar:
download_landing:
download_your_account: "قم بتنزيل سجل التعليقات الخاص بك"
download_details: "سيتم تنزيل سجل التعليقات في ملف .zip. بعد فك ضغط محفوظات التعليقات ، سيكون لديك ملف ذو قيمة مفصولة بفاصلة (أو .csv) يمكنك استيراده بسهولة إلى تطبيق جدول البيانات المفضل لديك."
all_information_included: "لكل من تعليقاتك يتم تضمين المعلومات التالية:"
information_included:
date: "متى كتبت التعليق"
url: "الرابط الثابت للتعليق"
body: "نص التعليق"
asset_url: "عنوان URL للمقال أو القصة التي يظهر فيها التعليق"
confirm: "تنزيل محفوظات تعليقاتي"
email:
download:
subject: "تعليقاتك جاهزة للتنزيل من {0}"
download_link_ready: "انقر هنا لتنزيل تعليقاتك من
{0} اعتبارا من {1}:"
download_archive: "تنزيل الأرشيف"
delete:
subject: "حسابك ل {0} من المقرر أن يتم حذفه"
body: |
تم تلقي طلب لحذف حسابك. تمت جدولة حسابك للحذف في {1}.
بعد ذلك الوقت ، ستتم إزالة جميع تعليقاتك من الموقع ، وستتم إزالة جميع تعليقاتك من قاعدة بياناتنا ، وستتم إزالة اسم المستخدم وعنوان البريد الإلكتروني من نظامنا.
إذا غيرت رأيك ، يمكنك تسجيل الدخول إلى حسابك وإلغاء الطلب قبل وقت حذف الحساب المجدول.
deleted:
subject: "حسابك ل {0} قد تم حذفه"
body: |
حساب المعلق الخاص بك ل {0} تم حذفه الآن. نحن آسفون أن نراك تذهب!
إذا كنت ترغب في إعادة الانضمام إلى المناقشة في المستقبل ، يمكنك الاشتراك للحصول على حساب جديد.
إذا كنت ترغب في تزويدنا بتعليقات حول سبب تركك وما يمكننا فعله لجعل تجربة التعليق أفضل ، يرجى مراسلتنا عبر البريد الإلكتروني على {1}.
cancelDelete:
subject: "طلب حذف حسابك ل {0} تم إلغاؤه"
body: "لقد ألغيت طلب حذف حسابك ل {0}. تم الآن إعادة تفعيل حسابك."
error:
DOWNLOAD_TOKEN_INVALID: "رابط التنزيل الخاص بك غير صالح."
en:
download_landing:
download_your_account: "Download Your Comment History"
+4
View File
@@ -1,3 +1,7 @@
// Ensure that we always process the rewrites silently, otherwise it may fail in
// environments like Heroku.
process.env.REWRITE_ENV_SILENT = 'TRUE';
// Perform rewrites to the runtime environment variables based on the contents
// of the process.env.REWRITE_ENV if it exists. This is done here as it is the
// entrypoint for the entire applications configuration.
+84 -40
View File
@@ -48,6 +48,60 @@ const loginRateLimiter = new Limit(
RECAPTCHA_WINDOW
);
// upsertUser will try to lookup the user by their profile. If the user cannot
// be looked up, it will create one with a unique username and the designated
// username status.
async function upsertUser(
ctx,
id,
provider,
displayName,
usernameStatus,
shouldSetDisplayName = false
) {
let user = await User.findOne({
profiles: {
$elemMatch: {
id,
provider,
},
},
});
if (user) {
return user;
}
// User does not exist and need to be created.
// Create an initial username for the user.
let username = await Users.getInitialUsername(displayName);
// The user was not found, lets create them!
user = new User({
username,
lowercaseUsername: username.toLowerCase(),
profiles: [{ id, provider }],
status: {
username: {
status: usernameStatus,
history: [{ status: usernameStatus }],
},
},
});
if (shouldSetDisplayName) {
// Set the displayName on the user metadata so that it can be accessed.
user.metadata = user.metadata || {};
user.metadata.displayName = displayName;
}
// Save the user in the database.
await user.save();
// Emit that the user was created.
ctx.pubsub.publish('userCreated', user);
}
// Users is the interface for the application to interact with the
// User through.
class Users {
@@ -478,52 +532,42 @@ class Users {
);
}
/**
* upsertExternalUser will create or lookup a user where the user will not be
* able to change their username.
*
* @param {Object} ctx the graph context
* @param {String} id the ID for the user from the provider
* @param {String} provider the name of the provider
* @param {String} displayName the users desired displayName, not guaranteed
*/
static async upsertExternalUser(ctx, id, provider, displayName) {
return upsertUser(ctx, id, provider, displayName, 'SET', true);
}
/**
* upsertSocialUser will create or lookup a user as provided from a social
* graph.
*
* @param {Object} ctx the graph context
* @param {String} id the ID for the user from the provider
* @param {String} provider the name of the provider
* @param {String} displayName the users desired displayName, not guaranteed
*/
static async upsertSocialUser(ctx, id, provider, displayName) {
return upsertUser(ctx, id, provider, displayName, 'UNSET');
}
/**
* Finds a user given a social profile and if the user does not exist, creates
* them.
* @param {Object} profile - User social/external profile
* @param {Function} done [description]
*/
static async findOrCreateExternalUser(ctx, id, provider, displayName) {
let user = await User.findOne({
profiles: {
$elemMatch: {
id,
provider,
},
},
});
if (user) {
return user;
}
ctx.log.warn(
'findOrCreateExternalUser is deprecated and will be removed in a future version, replace with upsertExternalUser'
);
// User does not exist and need to be created.
// Create an initial username for the user.
let username = await Users.getInitialUsername(displayName);
// The user was not found, lets create them!
user = new User({
username,
lowercaseUsername: username.toLowerCase(),
profiles: [{ id, provider }],
status: {
username: {
status: 'UNSET',
history: {
status: 'UNSET',
},
},
},
});
// Save the user in the database.
await user.save();
// Emit that the user was created.
ctx.pubsub.publish('userCreated', user);
return user;
return Users.upsertSocialUser(ctx, id, provider, displayName);
}
/**
+256 -220
View File
@@ -924,12 +924,12 @@ babel-jest@^21.2.0:
babel-plugin-istanbul "^4.0.0"
babel-preset-jest "^21.2.0"
babel-jest@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d"
babel-jest@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.2.0.tgz#14a9d6a3f4122dfea6069d37085adf26a53a4dba"
dependencies:
babel-plugin-istanbul "^4.1.5"
babel-preset-jest "^22.4.4"
babel-plugin-istanbul "^4.1.6"
babel-preset-jest "^23.2.0"
babel-loader@^7.1.2:
version "7.1.4"
@@ -957,7 +957,7 @@ babel-plugin-dynamic-import-node@^1.1.0:
dependencies:
babel-plugin-syntax-dynamic-import "^6.18.0"
babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.5:
babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.6:
version "4.1.6"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
dependencies:
@@ -970,9 +970,9 @@ babel-plugin-jest-hoist@^21.2.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006"
babel-plugin-jest-hoist@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b"
babel-plugin-jest-hoist@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167"
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
@@ -1306,11 +1306,11 @@ babel-preset-jest@^21.2.0:
babel-plugin-jest-hoist "^21.2.0"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-jest@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39"
babel-preset-jest@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46"
dependencies:
babel-plugin-jest-hoist "^22.4.4"
babel-plugin-jest-hoist "^23.2.0"
babel-plugin-syntax-object-rest-spread "^6.13.0"
babel-preset-react@^6.23.0:
@@ -1583,9 +1583,9 @@ browser-process-hrtime@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e"
browser-resolve@^1.11.2:
version "1.11.2"
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
browser-resolve@^1.11.3:
version "1.11.3"
resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
dependencies:
resolve "1.1.7"
@@ -2181,6 +2181,10 @@ clone@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
clorox@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/clorox/-/clorox-1.0.3.tgz#6fa63653f280c33d69f548fb14d239ddcfa1590d"
cluster-key-slot@^1.0.6:
version "1.0.12"
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz#d5deff2a520717bc98313979b687309b2d368e29"
@@ -3683,16 +3687,16 @@ expect-ct@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.0.tgz#52735678de18530890d8d7b95f0ac63640958094"
expect@^22.4.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674"
expect@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/expect/-/expect-23.2.0.tgz#53a7e135e36fe27e75867b1178ff08aaacc2b0dd"
dependencies:
ansi-styles "^3.2.0"
jest-diff "^22.4.3"
jest-get-type "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-message-util "^22.4.3"
jest-regex-util "^22.4.3"
jest-diff "^23.2.0"
jest-get-type "^22.1.0"
jest-matcher-utils "^23.2.0"
jest-message-util "^23.2.0"
jest-regex-util "^23.0.0"
exports-loader@^0.6.4:
version "0.6.4"
@@ -5708,7 +5712,7 @@ isstream@0.1.x, isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
istanbul-api@^1.1.14:
istanbul-api@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954"
dependencies:
@@ -5725,7 +5729,7 @@ istanbul-api@^1.1.14:
mkdirp "^0.5.1"
once "^1.4.0"
istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0:
istanbul-lib-coverage@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341"
@@ -5735,7 +5739,7 @@ istanbul-lib-hook@^1.2.0:
dependencies:
append-transform "^0.4.0"
istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0:
istanbul-lib-instrument@^1.10.1:
version "1.10.1"
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b"
dependencies:
@@ -5756,16 +5760,6 @@ istanbul-lib-report@^1.1.4:
path-parse "^1.0.5"
supports-color "^3.1.2"
istanbul-lib-source-maps@^1.2.1:
version "1.2.3"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6"
dependencies:
debug "^3.1.0"
istanbul-lib-coverage "^1.1.2"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
istanbul-lib-source-maps@^1.2.4:
version "1.2.5"
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1"
@@ -5790,15 +5784,15 @@ iterall@^1.1.0, iterall@^1.1.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
jest-changed-files@^22.2.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2"
jest-changed-files@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.2.0.tgz#a145a6e4b66d0129fc7c99cee134dc937a643d9c"
dependencies:
throat "^4.0.0"
jest-cli@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90"
jest-cli@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.2.0.tgz#3b543a3da5145dd8937931017282379fc696c45b"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
@@ -5807,115 +5801,126 @@ jest-cli@^22.4.4:
graceful-fs "^4.1.11"
import-local "^1.0.0"
is-ci "^1.0.10"
istanbul-api "^1.1.14"
istanbul-lib-coverage "^1.1.1"
istanbul-lib-instrument "^1.8.0"
istanbul-lib-source-maps "^1.2.1"
jest-changed-files "^22.2.0"
jest-config "^22.4.4"
jest-environment-jsdom "^22.4.1"
istanbul-api "^1.3.1"
istanbul-lib-coverage "^1.2.0"
istanbul-lib-instrument "^1.10.1"
istanbul-lib-source-maps "^1.2.4"
jest-changed-files "^23.2.0"
jest-config "^23.2.0"
jest-environment-jsdom "^23.2.0"
jest-get-type "^22.1.0"
jest-haste-map "^22.4.2"
jest-message-util "^22.4.0"
jest-regex-util "^22.1.0"
jest-resolve-dependencies "^22.1.0"
jest-runner "^22.4.4"
jest-runtime "^22.4.4"
jest-snapshot "^22.4.0"
jest-util "^22.4.1"
jest-validate "^22.4.4"
jest-worker "^22.2.2"
micromatch "^2.3.11"
jest-haste-map "^23.2.0"
jest-message-util "^23.2.0"
jest-regex-util "^23.0.0"
jest-resolve-dependencies "^23.2.0"
jest-runner "^23.2.0"
jest-runtime "^23.2.0"
jest-snapshot "^23.2.0"
jest-util "^23.2.0"
jest-validate "^23.2.0"
jest-watcher "^23.2.0"
jest-worker "^23.2.0"
micromatch "^3.1.10"
node-notifier "^5.2.1"
prompts "^0.1.9"
realpath-native "^1.0.0"
rimraf "^2.5.4"
slash "^1.0.0"
string-length "^2.0.0"
strip-ansi "^4.0.0"
which "^1.2.12"
yargs "^10.0.3"
yargs "^11.0.0"
jest-config@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a"
jest-config@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.2.0.tgz#d2fb556fd5a2a19c39eb56d139dcca5dad2a1c88"
dependencies:
babel-core "^6.0.0"
babel-jest "^23.2.0"
chalk "^2.0.1"
glob "^7.1.1"
jest-environment-jsdom "^22.4.1"
jest-environment-node "^22.4.1"
jest-environment-jsdom "^23.2.0"
jest-environment-node "^23.2.0"
jest-get-type "^22.1.0"
jest-jasmine2 "^22.4.4"
jest-regex-util "^22.1.0"
jest-resolve "^22.4.2"
jest-util "^22.4.1"
jest-validate "^22.4.4"
pretty-format "^22.4.0"
jest-jasmine2 "^23.2.0"
jest-regex-util "^23.0.0"
jest-resolve "^23.2.0"
jest-util "^23.2.0"
jest-validate "^23.2.0"
pretty-format "^23.2.0"
jest-diff@^22.4.0, jest-diff@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030"
jest-diff@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a"
dependencies:
chalk "^2.0.1"
diff "^3.2.0"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-get-type "^22.1.0"
pretty-format "^23.2.0"
jest-docblock@^21.0.0:
version "21.2.0"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414"
jest-docblock@^22.4.0, jest-docblock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19"
jest-docblock@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7"
dependencies:
detect-newline "^2.1.0"
jest-environment-jsdom@^22.4.1:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e"
jest-each@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.2.0.tgz#a400f81c857083f50c4f53399b109f12023fb19d"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
chalk "^2.0.1"
pretty-format "^23.2.0"
jest-environment-jsdom@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.2.0.tgz#3634603a08a975b0ca8a658320f56a54a8e04558"
dependencies:
jest-mock "^23.2.0"
jest-util "^23.2.0"
jsdom "^11.5.1"
jest-environment-node@^22.4.1:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129"
jest-environment-node@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.2.0.tgz#b6fe41372e382093bb6f3d9bdf6c1c4ec0a50f18"
dependencies:
jest-mock "^22.4.3"
jest-util "^22.4.3"
jest-mock "^23.2.0"
jest-util "^23.2.0"
jest-get-type@^22.1.0, jest-get-type@^22.4.3:
jest-get-type@^22.1.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4"
jest-haste-map@^22.4.2:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b"
jest-haste-map@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.2.0.tgz#d10cbac007c695948c8ef1821a2b2ed2d4f2d4d8"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
jest-docblock "^22.4.3"
jest-serializer "^22.4.3"
jest-worker "^22.4.3"
micromatch "^2.3.11"
jest-docblock "^23.2.0"
jest-serializer "^23.0.1"
jest-worker "^23.2.0"
micromatch "^3.1.10"
sane "^2.0.0"
jest-jasmine2@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23"
jest-jasmine2@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.2.0.tgz#aa670cdb1e4d5f8ec774c94dda5e105fe33d8bb4"
dependencies:
chalk "^2.0.1"
co "^4.6.0"
expect "^22.4.0"
graceful-fs "^4.1.11"
expect "^23.2.0"
is-generator-fn "^1.0.0"
jest-diff "^22.4.0"
jest-matcher-utils "^22.4.0"
jest-message-util "^22.4.0"
jest-snapshot "^22.4.0"
jest-util "^22.4.1"
source-map-support "^0.5.0"
jest-diff "^23.2.0"
jest-each "^23.2.0"
jest-matcher-utils "^23.2.0"
jest-message-util "^23.2.0"
jest-snapshot "^23.2.0"
jest-util "^23.2.0"
pretty-format "^23.2.0"
jest-junit@^3.6.0:
version "3.7.0"
@@ -5925,129 +5930,125 @@ jest-junit@^3.6.0:
strip-ansi "^4.0.0"
xml "^1.0.1"
jest-leak-detector@^22.4.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35"
jest-leak-detector@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.2.0.tgz#c289d961dc638f14357d4ef96e0431ecc1aa377d"
dependencies:
pretty-format "^22.4.3"
pretty-format "^23.2.0"
jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff"
jest-matcher-utils@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.4.3"
pretty-format "^22.4.3"
jest-get-type "^22.1.0"
pretty-format "^23.2.0"
jest-message-util@^22.4.0, jest-message-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7"
jest-message-util@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.2.0.tgz#591e8148fff69cf89b0414809c721756ebefe744"
dependencies:
"@babel/code-frame" "^7.0.0-beta.35"
chalk "^2.0.1"
micromatch "^2.3.11"
micromatch "^3.1.10"
slash "^1.0.0"
stack-utils "^1.0.1"
jest-mock@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7"
jest-mock@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134"
jest-regex-util@^22.1.0, jest-regex-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af"
jest-regex-util@^23.0.0:
version "23.0.0"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.0.0.tgz#dd5c1fde0c46f4371314cf10f7a751a23f4e8f76"
jest-resolve-dependencies@^22.1.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e"
jest-resolve-dependencies@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.2.0.tgz#6df8d5709c6406639cd07f54bff074e01b5c0458"
dependencies:
jest-regex-util "^22.4.3"
jest-regex-util "^23.0.0"
jest-snapshot "^23.2.0"
jest-resolve@^22.4.2:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea"
jest-resolve@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.2.0.tgz#a0790ad5a3b99002ab4dbfcbf8d9e2d6a69b3d99"
dependencies:
browser-resolve "^1.11.2"
browser-resolve "^1.11.3"
chalk "^2.0.1"
realpath-native "^1.0.0"
jest-runner@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907"
jest-runner@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.2.0.tgz#0d91967ea82f72b0c705910926086d2055ce75af"
dependencies:
exit "^0.1.2"
jest-config "^22.4.4"
jest-docblock "^22.4.0"
jest-haste-map "^22.4.2"
jest-jasmine2 "^22.4.4"
jest-leak-detector "^22.4.0"
jest-message-util "^22.4.0"
jest-runtime "^22.4.4"
jest-util "^22.4.1"
jest-worker "^22.2.2"
graceful-fs "^4.1.11"
jest-config "^23.2.0"
jest-docblock "^23.2.0"
jest-haste-map "^23.2.0"
jest-jasmine2 "^23.2.0"
jest-leak-detector "^23.2.0"
jest-message-util "^23.2.0"
jest-runtime "^23.2.0"
jest-util "^23.2.0"
jest-worker "^23.2.0"
source-map-support "^0.5.6"
throat "^4.0.0"
jest-runtime@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048"
jest-runtime@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.2.0.tgz#62dcb01766a1c4c64696dc090209e76ce1aadcbc"
dependencies:
babel-core "^6.0.0"
babel-jest "^22.4.4"
babel-plugin-istanbul "^4.1.5"
babel-plugin-istanbul "^4.1.6"
chalk "^2.0.1"
convert-source-map "^1.4.0"
exit "^0.1.2"
fast-json-stable-stringify "^2.0.0"
graceful-fs "^4.1.11"
jest-config "^22.4.4"
jest-haste-map "^22.4.2"
jest-regex-util "^22.1.0"
jest-resolve "^22.4.2"
jest-util "^22.4.1"
jest-validate "^22.4.4"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
jest-config "^23.2.0"
jest-haste-map "^23.2.0"
jest-message-util "^23.2.0"
jest-regex-util "^23.0.0"
jest-resolve "^23.2.0"
jest-snapshot "^23.2.0"
jest-util "^23.2.0"
jest-validate "^23.2.0"
micromatch "^3.1.10"
realpath-native "^1.0.0"
slash "^1.0.0"
strip-bom "3.0.0"
write-file-atomic "^2.1.0"
yargs "^10.0.3"
yargs "^11.0.0"
jest-serializer@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436"
jest-serializer@^23.0.1:
version "23.0.1"
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165"
jest-snapshot@^22.4.0:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2"
jest-snapshot@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.2.0.tgz#c7a3d017177bbad60c8a595869cf90a8782e6a7e"
dependencies:
chalk "^2.0.1"
jest-diff "^22.4.3"
jest-matcher-utils "^22.4.3"
jest-diff "^23.2.0"
jest-matcher-utils "^23.2.0"
mkdirp "^0.5.1"
natural-compare "^1.4.0"
pretty-format "^22.4.3"
pretty-format "^23.2.0"
jest-util@^22.4.1, jest-util@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac"
jest-util@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.2.0.tgz#62b770757696d96e094a04b8f1c373ca50a5ab2e"
dependencies:
callsites "^2.0.0"
chalk "^2.0.1"
graceful-fs "^4.1.11"
is-ci "^1.0.10"
jest-message-util "^22.4.3"
jest-message-util "^23.2.0"
mkdirp "^0.5.1"
slash "^1.0.0"
source-map "^0.6.0"
jest-validate@^22.4.4:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d"
dependencies:
chalk "^2.0.1"
jest-config "^22.4.4"
jest-get-type "^22.1.0"
leven "^2.1.0"
pretty-format "^22.4.0"
jest-validate@^23.0.0:
version "23.0.1"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.0.1.tgz#cd9f01a89d26bb885f12a8667715e9c865a5754f"
@@ -6057,18 +6058,35 @@ jest-validate@^23.0.0:
leven "^2.1.0"
pretty-format "^23.0.1"
jest-worker@^22.2.2, jest-worker@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b"
jest-validate@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.2.0.tgz#67c8b909e11af1701765238894c67ac3291b195e"
dependencies:
chalk "^2.0.1"
jest-get-type "^22.1.0"
leven "^2.1.0"
pretty-format "^23.2.0"
jest-watcher@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.2.0.tgz#678e852896e919e9d9a0eb4b8baf1ae279620ea9"
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.1"
string-length "^2.0.0"
jest-worker@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9"
dependencies:
merge-stream "^1.0.1"
jest@^22.4.3:
version "22.4.4"
resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.4.tgz#ffb36c9654b339a13e10b3d4b338eb3e9d49f6eb"
jest@^23.0.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/jest/-/jest-23.2.0.tgz#828bf31a096d45dcf06824d1ea03013af7bcfc20"
dependencies:
import-local "^1.0.0"
jest-cli "^22.4.4"
jest-cli "^23.2.0"
joi@^13.4.0:
version "13.4.0"
@@ -7166,7 +7184,7 @@ methods@^1.1.1, methods@^1.1.2, methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
micromatch@^2.1.5, micromatch@^2.3.11:
micromatch@^2.1.5:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
dependencies:
@@ -7184,7 +7202,7 @@ micromatch@^2.1.5, micromatch@^2.3.11:
parse-glob "^3.0.4"
regex-cache "^0.4.2"
micromatch@^3.1.4, micromatch@^3.1.8:
micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
dependencies:
@@ -7369,32 +7387,35 @@ moment@2.x.x, "moment@>= 2.9.0", moment@^2.10.3, moment@^2.10.6, moment@^2.15.2,
version "2.22.2"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
mongodb-core@3.0.8:
version "3.0.8"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.0.8.tgz#8d401f4eab6056c0d874a3d5844a4844f761d4d7"
mongodb-core@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-3.1.0.tgz#af91f36fd560ed785f4e61e694432df4d3698aad"
dependencies:
bson "~1.0.4"
require_optional "^1.0.1"
optionalDependencies:
saslprep "^1.0.0"
mongodb@3.0.9:
version "3.0.9"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.0.9.tgz#742e685e45ac9c3ead02a91c9ebaae7165bb2def"
mongodb@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.1.0.tgz#20cd836381a4d8a6b1c5a194bb9c8dde852163bb"
dependencies:
mongodb-core "3.0.8"
mongodb-core "3.1.0"
mongoose-legacy-pluralize@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4"
mongoose@^5.1.5:
version "5.1.5"
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.1.5.tgz#0d0b4dc658deeb7ad9794af7453442ecf7fc7cb0"
mongoose@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.2.1.tgz#f49d730d2ccf23a07ffcf05ccc44e0dfc19d6e6a"
dependencies:
async "2.6.1"
bson "~1.0.5"
kareem "2.2.1"
lodash.get "4.4.2"
mongodb "3.0.9"
mongodb "3.1.0"
mongodb-core "3.1.0"
mongoose-legacy-pluralize "1.0.2"
mpath "0.4.1"
mquery "3.0.0"
@@ -8969,16 +8990,16 @@ prettier@^1.10.2:
version "1.13.4"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.4.tgz#31bbae6990f13b1093187c731766a14036fa72e6"
pretty-format@^22.4.0, pretty-format@^22.4.3:
version "22.4.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f"
pretty-format@^23.0.1:
version "23.0.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.0.1.tgz#d61d065268e4c759083bccbca27a01ad7c7601f4"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
pretty-format@^23.0.1:
version "23.0.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.0.1.tgz#d61d065268e4c759083bccbca27a01ad7c7601f4"
pretty-format@^23.2.0:
version "23.2.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017"
dependencies:
ansi-regex "^3.0.0"
ansi-styles "^3.2.0"
@@ -9023,6 +9044,13 @@ promised-io@*:
version "0.3.5"
resolved "https://registry.yarnpkg.com/promised-io/-/promised-io-0.3.5.tgz#4ad217bb3658bcaae9946b17a8668ecd851e1356"
prompts@^0.1.9:
version "0.1.10"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.10.tgz#832cbf6116ecb121d6884e84643bb2cf92b3ed2c"
dependencies:
clorox "^1.0.3"
sisteransi "^0.1.1"
prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1:
version "15.6.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca"
@@ -10086,6 +10114,10 @@ sanitize-html@~1.18.2:
srcset "^1.0.0"
xtend "^4.0.0"
saslprep@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.0.tgz#2c4968a0bfbf249530cd597bc62870ccd4b41a24"
sass-graph@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
@@ -10358,6 +10390,10 @@ sinon@^3.2.1:
text-encoding "0.6.4"
type-detect "^4.0.0"
sisteransi@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce"
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -10486,7 +10522,7 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
source-map-support@^0.5.0, source-map-support@^0.5.1:
source-map-support@^0.5.1, source-map-support@^0.5.6:
version "0.5.6"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13"
dependencies:
@@ -11885,15 +11921,15 @@ yargs-parser@^7.0.0:
dependencies:
camelcase "^4.1.0"
yargs-parser@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
yargs-parser@^9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
dependencies:
camelcase "^4.1.0"
yargs@^10.0.3:
version "10.1.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5"
yargs@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b"
dependencies:
cliui "^4.0.0"
decamelize "^1.1.1"
@@ -11906,7 +11942,7 @@ yargs@^10.0.3:
string-width "^2.0.0"
which-module "^2.0.0"
y18n "^3.2.1"
yargs-parser "^8.1.0"
yargs-parser "^9.0.2"
yargs@^3.19.0, yargs@^3.32.0:
version "3.32.0"