mirror of
https://github.com/wassname/talk.git
synced 2026-09-14 11:36:51 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46078117c8 | ||
|
|
879820d340 | ||
|
|
88d9cd193b | ||
|
|
624d768f38 | ||
|
|
254033a294 | ||
|
|
637630b8dd | ||
|
|
80987a1e46 | ||
|
|
e9e70f7e75 | ||
|
|
ffde113a74 | ||
|
|
aef096fa4c | ||
|
|
a6518b183f | ||
|
|
93ccec6614 | ||
|
|
691e0f5256 | ||
|
|
0e1ace115e | ||
|
|
ae361d5110 | ||
|
|
cfe5b12abd | ||
|
|
1e2c224204 | ||
|
|
fbe2ec30aa | ||
|
|
2f7f6f4f53 | ||
|
|
f77493afb1 | ||
|
|
793b473681 | ||
|
|
ad56d3b99a | ||
|
|
e6b8cd3220 | ||
|
|
98725fcb19 | ||
|
|
ee163af833 | ||
|
|
8ec933e844 | ||
|
|
13f81ad819 | ||
|
|
8d185fe309 | ||
|
|
edbe49618a | ||
|
|
2ec7b53cea | ||
|
|
c448d8d2cd | ||
|
|
fb3233cf01 | ||
|
|
30c38fa696 | ||
|
|
e4358ac3a1 | ||
|
|
de6f325204 | ||
|
|
13667deaed | ||
|
|
610bf36947 | ||
|
|
126d55e6d8 | ||
|
|
6f0af18619 | ||
|
|
3da201c22d | ||
|
|
5ae9d719f3 | ||
|
|
91bce6c74a | ||
|
|
232ed4f4ef | ||
|
|
7720f1d178 | ||
|
|
533cd3217d | ||
|
|
d16ce17e36 | ||
|
|
e8026afb41 | ||
|
|
81509b660e | ||
|
|
4ed04d1c39 | ||
|
|
17e90b0313 | ||
|
|
a509405f43 | ||
|
|
3d61713f16 | ||
|
|
56987bdcd6 | ||
|
|
24c1abaa06 | ||
|
|
fe75d9543c | ||
|
|
681f9ecf5a | ||
|
|
394ebb8f2d | ||
|
|
6982509233 | ||
|
|
06b64ad250 | ||
|
|
9cc089b3b2 | ||
|
|
ae674a4e62 | ||
|
|
ec117a67aa | ||
|
|
f32c9fa6b1 | ||
|
|
761e372016 | ||
|
|
8d147c9e7b | ||
|
|
4a4c502fdd | ||
|
|
bfea8b00e1 | ||
|
|
94dbfd6802 | ||
|
|
c5dc8454a2 | ||
|
|
ff9a212cfb | ||
|
|
0b3b252fc3 | ||
|
|
6f616a1e78 | ||
|
|
3a436bd530 | ||
|
|
cb7b4133f9 | ||
|
|
217c2f1bfa | ||
|
|
bad72e0ef4 | ||
|
|
cf0551d3e7 | ||
|
|
93d6ad9e55 | ||
|
|
f8fbedd727 | ||
|
|
2cf047a393 | ||
|
|
f9ca66d165 | ||
|
|
45b570e163 | ||
|
|
ab96417d3d | ||
|
|
2fe17d29e3 | ||
|
|
a53194b4a0 |
@@ -6,6 +6,7 @@ npm-debug.log*
|
||||
dump.rdb
|
||||
|
||||
client/coral-framework/graphql/introspection.json
|
||||
docs/source/_data/introspection.json
|
||||
|
||||
.env
|
||||
*.cfg
|
||||
|
||||
+19
-13
@@ -13,6 +13,7 @@ const CommentModel = require('../models/comment');
|
||||
const AssetsService = require('../services/assets');
|
||||
const mongoose = require('../services/mongoose');
|
||||
const scraper = require('../services/scraper');
|
||||
const Context = require('../graph/context');
|
||||
const inquirer = require('inquirer');
|
||||
const { URL } = require('url');
|
||||
|
||||
@@ -52,22 +53,27 @@ async function refreshAssets(ageString) {
|
||||
const ageMs = parseDuration(ageString);
|
||||
const age = new Date(now - ageMs);
|
||||
|
||||
let assets = await AssetModel.find({
|
||||
$or: [
|
||||
{
|
||||
scraped: {
|
||||
$lte: age,
|
||||
let assets = await AssetModel.find(
|
||||
{
|
||||
$or: [
|
||||
{
|
||||
scraped: {
|
||||
$lte: age,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
scraped: null,
|
||||
},
|
||||
],
|
||||
});
|
||||
{
|
||||
scraped: null,
|
||||
},
|
||||
],
|
||||
},
|
||||
{ id: 1 }
|
||||
);
|
||||
|
||||
// Create a graph context.
|
||||
const ctx = Context.forSystem();
|
||||
|
||||
// Queue all the assets for scraping.
|
||||
await Promise.all(assets.map(scraper.create));
|
||||
|
||||
await Promise.all(assets.map(({ id }) => scraper.create(ctx, id)));
|
||||
console.log('Assets were queued to be scraped');
|
||||
util.shutdown();
|
||||
} catch (e) {
|
||||
|
||||
@@ -2,10 +2,15 @@ import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Router, Route, IndexRedirect, IndexRoute } from 'react-router';
|
||||
|
||||
import Configure from 'routes/Configure';
|
||||
import Install from 'routes/Install';
|
||||
import Stories from 'routes/Stories';
|
||||
import Community from 'routes/Community';
|
||||
|
||||
import Configure from 'routes/Configure';
|
||||
import StreamSettings from './routes/Configure/containers/StreamSettings';
|
||||
import ModerationSettings from './routes/Configure/containers/ModerationSettings';
|
||||
import TechSettings from './routes/Configure/containers/TechSettings';
|
||||
|
||||
import { ModerationLayout, Moderation } from 'routes/Moderation';
|
||||
|
||||
import Layout from 'containers/Layout';
|
||||
@@ -15,7 +20,14 @@ const routes = (
|
||||
<Route exact path="/admin/install" component={Install} />
|
||||
<Route path="/admin" component={Layout}>
|
||||
<IndexRedirect to="/admin/moderate" />
|
||||
<Route path="configure" component={Configure} />
|
||||
|
||||
<Route path="configure" component={Configure}>
|
||||
<Route path="stream" component={StreamSettings} />
|
||||
<Route path="moderation" component={ModerationSettings} />
|
||||
<Route path="tech" component={TechSettings} />
|
||||
<IndexRedirect to="stream" />
|
||||
</Route>
|
||||
|
||||
<Route path="stories" component={Stories} />
|
||||
|
||||
{/* Community Routes */}
|
||||
|
||||
@@ -8,6 +8,10 @@ export const clearPending = () => {
|
||||
return { type: actions.CLEAR_PENDING };
|
||||
};
|
||||
|
||||
export const setActiveSection = section => {
|
||||
return { type: actions.SET_ACTIVE_SECTION, section };
|
||||
export const showSaveDialog = () => {
|
||||
return { type: actions.SHOW_SAVE_DIALOG };
|
||||
};
|
||||
|
||||
export const hideSaveDialog = () => {
|
||||
return { type: actions.HIDE_SAVE_DIALOG };
|
||||
};
|
||||
|
||||
@@ -2,4 +2,6 @@ const prefix = 'TALK_ADMIN_CONFIGURE';
|
||||
|
||||
export const UPDATE_PENDING = `${prefix}_UPDATE_PENDING`;
|
||||
export const CLEAR_PENDING = `${prefix}_CLEAR_PENDING`;
|
||||
export const SET_ACTIVE_SECTION = `${prefix}_SET_ACTIVE_SECTION`;
|
||||
|
||||
export const SHOW_SAVE_DIALOG = `${prefix}_SHOW_SAVE_DIALOG`;
|
||||
export const HIDE_SAVE_DIALOG = `${prefix}_HIDE_SAVE_DIALOG`;
|
||||
|
||||
@@ -6,11 +6,23 @@ const initialState = {
|
||||
canSave: false,
|
||||
pending: {},
|
||||
errors: {},
|
||||
activeSection: 'stream',
|
||||
saveDialog: false,
|
||||
};
|
||||
|
||||
export default function configure(state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case actions.SHOW_SAVE_DIALOG: {
|
||||
return {
|
||||
...state,
|
||||
saveDialog: true,
|
||||
};
|
||||
}
|
||||
case actions.HIDE_SAVE_DIALOG: {
|
||||
return {
|
||||
...state,
|
||||
saveDialog: false,
|
||||
};
|
||||
}
|
||||
case actions.UPDATE_PENDING: {
|
||||
let next = state;
|
||||
if (action.updater) {
|
||||
@@ -40,11 +52,8 @@ export default function configure(state = initialState, action) {
|
||||
pending: {},
|
||||
canSave: false,
|
||||
};
|
||||
case actions.SET_ACTIVE_SECTION:
|
||||
return {
|
||||
...state,
|
||||
activeSection: action.section,
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
||||
@@ -1,50 +1,37 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { Button, List, Item } from 'coral-ui';
|
||||
import styles from './Configure.css';
|
||||
import StreamSettings from '../containers/StreamSettings';
|
||||
import ModerationSettings from '../containers/ModerationSettings';
|
||||
import TechSettings from '../containers/TechSettings';
|
||||
import t from 'coral-framework/services/i18n';
|
||||
import { can } from 'coral-framework/services/perms';
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import t from 'coral-framework/services/i18n';
|
||||
import { Button, List, Item } from 'coral-ui';
|
||||
import { can } from 'coral-framework/services/perms';
|
||||
import styles from './Configure.css';
|
||||
import SaveChangesDialog from './SaveChangesDialog';
|
||||
|
||||
export default class Configure extends Component {
|
||||
getSectionComponent(section) {
|
||||
switch (section) {
|
||||
case 'stream':
|
||||
return StreamSettings;
|
||||
case 'moderation':
|
||||
return ModerationSettings;
|
||||
case 'tech':
|
||||
return TechSettings;
|
||||
}
|
||||
throw new Error(`Unknown section ${section}`);
|
||||
}
|
||||
|
||||
class Configure extends React.Component {
|
||||
render() {
|
||||
const {
|
||||
currentUser,
|
||||
canSave,
|
||||
savePending,
|
||||
setActiveSection,
|
||||
activeSection,
|
||||
} = this.props;
|
||||
const SectionComponent = this.getSectionComponent(activeSection);
|
||||
const { canSave, currentUser, root, savePending, settings } = this.props;
|
||||
|
||||
if (!can(currentUser, 'UPDATE_CONFIG')) {
|
||||
return (
|
||||
<p>
|
||||
You must be an administrator to access config settings. Please find
|
||||
the nearest Admin and ask them to level you up!
|
||||
</p>
|
||||
);
|
||||
return <p>{t('configure.access_message')}</p>;
|
||||
}
|
||||
|
||||
const passProps = {
|
||||
root,
|
||||
settings,
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.container}>
|
||||
<SaveChangesDialog
|
||||
saveDialog={this.props.saveDialog}
|
||||
hideSaveDialog={this.props.hideSaveDialog}
|
||||
saveChanges={this.props.saveChanges}
|
||||
discardChanges={this.props.discardChanges}
|
||||
/>
|
||||
<div className={styles.leftColumn}>
|
||||
<List onChange={setActiveSection} activeItem={activeSection}>
|
||||
<List
|
||||
onChange={this.props.handleSectionChange}
|
||||
activeItem={this.props.activeSection}
|
||||
>
|
||||
<Item itemId="stream" icon="speaker_notes">
|
||||
{t('configure.stream_settings')}
|
||||
</Item>
|
||||
@@ -74,10 +61,7 @@ export default class Configure extends Component {
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.mainContent}>
|
||||
<SectionComponent
|
||||
root={this.props.root}
|
||||
settings={this.props.settings}
|
||||
/>
|
||||
{React.cloneElement(this.props.children, passProps)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
@@ -86,10 +70,17 @@ export default class Configure extends Component {
|
||||
|
||||
Configure.propTypes = {
|
||||
savePending: PropTypes.func.isRequired,
|
||||
saveChanges: PropTypes.func.isRequired,
|
||||
discardChanges: PropTypes.func.isRequired,
|
||||
currentUser: PropTypes.object.isRequired,
|
||||
root: PropTypes.object.isRequired,
|
||||
settings: PropTypes.object.isRequired,
|
||||
canSave: PropTypes.bool.isRequired,
|
||||
setActiveSection: PropTypes.func.isRequired,
|
||||
handleSectionChange: PropTypes.func.isRequired,
|
||||
activeSection: PropTypes.string.isRequired,
|
||||
children: PropTypes.node.isRequired,
|
||||
saveDialog: PropTypes.bool,
|
||||
hideSaveDialog: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default Configure;
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
.buttonActions {
|
||||
padding-top: 15px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
padding: 25px;
|
||||
min-width: 400px;
|
||||
}
|
||||
|
||||
.close {
|
||||
font-size: 20px;
|
||||
line-height: 14px;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
position: absolute;
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
color: #363636;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 18px;
|
||||
font-weight: 800;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.cancel {
|
||||
color: #363636;
|
||||
margin-right: 15px;
|
||||
display: inline-block;
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.button {
|
||||
margin-left: 5px;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import cn from 'classnames';
|
||||
import { Button, Dialog } from 'coral-ui';
|
||||
import styles from './SaveChangesDialog.css';
|
||||
import t from 'coral-framework/services/i18n';
|
||||
|
||||
const SaveChangesDialog = ({
|
||||
saveDialog,
|
||||
hideSaveDialog,
|
||||
saveChanges,
|
||||
discardChanges,
|
||||
}) => (
|
||||
<Dialog
|
||||
className={cn(styles.dialog, 'talk-admin-configure-save-dialog')}
|
||||
id="saveDialog"
|
||||
open={saveDialog}
|
||||
onCancel={hideSaveDialog}
|
||||
>
|
||||
<span className={styles.close} onClick={hideSaveDialog}>
|
||||
×
|
||||
</span>
|
||||
<div className={styles.title}>
|
||||
{t('configure.save_changes_dialog.unsaved_changes')}
|
||||
</div>
|
||||
{t('configure.save_changes_dialog.copy')}
|
||||
<div
|
||||
className={cn(
|
||||
styles.buttonActions,
|
||||
'talk-admin-configure-save-dialog-button-actions'
|
||||
)}
|
||||
>
|
||||
<a className={styles.cancel} onClick={hideSaveDialog}>
|
||||
Cancel
|
||||
</a>
|
||||
<Button onClick={discardChanges} className={styles.button}>
|
||||
{t('configure.save_changes_dialog.discard')}
|
||||
</Button>
|
||||
<Button onClick={saveChanges} cStyle="green" className={styles.button}>
|
||||
{t('configure.save_changes_dialog.save_settings')}
|
||||
</Button>
|
||||
</div>
|
||||
</Dialog>
|
||||
);
|
||||
|
||||
SaveChangesDialog.propTypes = {
|
||||
saveDialog: PropTypes.bool.isRequired,
|
||||
hideSaveDialog: PropTypes.func.isRequired,
|
||||
saveChanges: PropTypes.func.isRequired,
|
||||
discardChanges: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default SaveChangesDialog;
|
||||
@@ -1,4 +1,4 @@
|
||||
import React, { Component } from 'react';
|
||||
import React from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { compose, gql } from 'react-apollo';
|
||||
@@ -10,15 +10,70 @@ import { getDefinitionName } from 'coral-framework/utils';
|
||||
import StreamSettings from './StreamSettings';
|
||||
import TechSettings from './TechSettings';
|
||||
import ModerationSettings from './ModerationSettings';
|
||||
import { clearPending, setActiveSection } from '../../../actions/configure';
|
||||
import {
|
||||
clearPending,
|
||||
showSaveDialog,
|
||||
hideSaveDialog,
|
||||
} from '../../../actions/configure';
|
||||
import Configure from '../components/Configure';
|
||||
import { withRouter } from 'react-router';
|
||||
|
||||
class ConfigureContainer extends React.Component {
|
||||
state = { nextRoute: '' };
|
||||
|
||||
class ConfigureContainer extends Component {
|
||||
savePending = async () => {
|
||||
await this.props.updateSettings(this.props.pending);
|
||||
this.props.clearPending();
|
||||
};
|
||||
|
||||
saveChanges = async () => {
|
||||
await this.savePending();
|
||||
this.props.hideSaveDialog();
|
||||
this.gotoNextRoute();
|
||||
};
|
||||
|
||||
discardChanges = async () => {
|
||||
await this.props.clearPending();
|
||||
this.props.hideSaveDialog();
|
||||
this.gotoNextRoute();
|
||||
};
|
||||
|
||||
gotoNextRoute = () => {
|
||||
const { nextRoute } = this.state;
|
||||
if (nextRoute) {
|
||||
this.props.router.push(nextRoute);
|
||||
this.setState({ nextRoute: '' });
|
||||
}
|
||||
};
|
||||
|
||||
handleSectionChange = async section => {
|
||||
const nextRoute = `/admin/configure/${section}`;
|
||||
|
||||
if (this.shouldShowSaveDialog()) {
|
||||
await this.setState({ nextRoute });
|
||||
this.props.showSaveDialog();
|
||||
} else {
|
||||
// Just go to the section
|
||||
this.props.router.push(nextRoute);
|
||||
}
|
||||
};
|
||||
|
||||
shouldShowSaveDialog = () => {
|
||||
return !!Object.keys(this.props.pending).length;
|
||||
};
|
||||
|
||||
routeLeave = ({ pathname }) => {
|
||||
if (this.shouldShowSaveDialog()) {
|
||||
this.setState({ nextRoute: pathname });
|
||||
this.props.showSaveDialog();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.props.router.setRouteLeaveHook(this.props.route, this.routeLeave);
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.props.data.error) {
|
||||
return <div>{this.props.data.error.message}</div>;
|
||||
@@ -30,14 +85,20 @@ class ConfigureContainer extends Component {
|
||||
|
||||
return (
|
||||
<Configure
|
||||
saveChanges={this.saveChanges}
|
||||
discardChanges={this.discardChanges}
|
||||
saveDialog={this.props.saveDialog}
|
||||
activeSection={this.props.routes[3].path}
|
||||
hideSaveDialog={this.props.hideSaveDialog}
|
||||
canSave={this.props.canSave}
|
||||
currentUser={this.props.currentUser}
|
||||
root={this.props.root}
|
||||
settings={this.props.mergedSettings}
|
||||
canSave={this.props.canSave}
|
||||
handleSectionChange={this.handleSectionChange}
|
||||
savePending={this.savePending}
|
||||
setActiveSection={this.props.setActiveSection}
|
||||
activeSection={this.props.activeSection}
|
||||
/>
|
||||
>
|
||||
{this.props.children}
|
||||
</Configure>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -74,18 +135,21 @@ const mapStateToProps = state => ({
|
||||
pending: state.configure.pending,
|
||||
canSave: state.configure.canSave,
|
||||
activeSection: state.configure.activeSection,
|
||||
saveDialog: state.configure.saveDialog,
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dispatch =>
|
||||
bindActionCreators(
|
||||
{
|
||||
clearPending,
|
||||
setActiveSection,
|
||||
showSaveDialog,
|
||||
hideSaveDialog,
|
||||
},
|
||||
dispatch
|
||||
);
|
||||
|
||||
export default compose(
|
||||
withRouter,
|
||||
connect(mapStateToProps, mapDispatchToProps),
|
||||
withUpdateSettings,
|
||||
withConfigureQuery,
|
||||
@@ -93,14 +157,20 @@ export default compose(
|
||||
)(ConfigureContainer);
|
||||
|
||||
ConfigureContainer.propTypes = {
|
||||
activeSection: PropTypes.string,
|
||||
updateSettings: PropTypes.func.isRequired,
|
||||
clearPending: PropTypes.func.isRequired,
|
||||
setActiveSection: PropTypes.func.isRequired,
|
||||
showSaveDialog: PropTypes.func.isRequired,
|
||||
hideSaveDialog: PropTypes.func.isRequired,
|
||||
saveDialog: PropTypes.bool.isRequired,
|
||||
currentUser: PropTypes.object.isRequired,
|
||||
data: PropTypes.object.isRequired,
|
||||
root: PropTypes.object.isRequired,
|
||||
canSave: PropTypes.bool.isRequired,
|
||||
pending: PropTypes.object.isRequired,
|
||||
mergedSettings: PropTypes.object.isRequired,
|
||||
activeSection: PropTypes.string.isRequired,
|
||||
children: PropTypes.node.isRequired,
|
||||
router: PropTypes.object,
|
||||
route: PropTypes.object,
|
||||
routes: PropTypes.array,
|
||||
};
|
||||
|
||||
@@ -10,12 +10,14 @@ const InitialStep = () => {
|
||||
return (
|
||||
<div className={cn(styles.step, styles.finalStep, 'talk-install-step-5')}>
|
||||
<p>{t('install.final.description')}</p>
|
||||
<Button raised>
|
||||
<Link to="/admin">{t('install.final.launch')}</Link>
|
||||
</Button>
|
||||
<Button cStyle="black" raised>
|
||||
<a href="http://coralproject.net">{t('install.final.close')}</a>
|
||||
</Button>
|
||||
<Link to="/admin">
|
||||
<Button raised>{t('install.final.launch')}</Button>
|
||||
</Link>
|
||||
<a href="http://coralproject.net">
|
||||
<Button cStyle="black" raised>
|
||||
{t('install.final.close')}
|
||||
</Button>
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -35,12 +35,9 @@ class ExtendableTabPanelContainer extends React.Component {
|
||||
|
||||
createPluginTabFactory = (props = this.props) => el => {
|
||||
return (
|
||||
<ExtendableTab
|
||||
tabId={el.type.talkPluginName}
|
||||
key={el.type.talkPluginName}
|
||||
>
|
||||
<ExtendableTab tabId={el.key} key={el.key}>
|
||||
{React.cloneElement(el, {
|
||||
active: props.activeTab === el.type.talkPluginName,
|
||||
active: props.activeTab === el.key,
|
||||
})}
|
||||
</ExtendableTab>
|
||||
);
|
||||
@@ -59,7 +56,7 @@ class ExtendableTabPanelContainer extends React.Component {
|
||||
|
||||
createPluginTabPane(el) {
|
||||
return (
|
||||
<TabPane tabId={el.type.talkPluginName} key={el.type.talkPluginName}>
|
||||
<TabPane tabId={el.key} key={el.key}>
|
||||
{el}
|
||||
</TabPane>
|
||||
);
|
||||
|
||||
@@ -34,6 +34,7 @@ class Comment extends React.Component {
|
||||
defaultComponent={CommentContent}
|
||||
className={cn(styles.commentBody, 'my-comment-body')}
|
||||
passthrough={slotPassthrough}
|
||||
size={1}
|
||||
/>
|
||||
<div className={cn(styles.commentSummary, 'comment-summary')}>
|
||||
<span
|
||||
|
||||
@@ -57,6 +57,10 @@ export const setAuthToken = token => (dispatch, _, { localStorage }) => {
|
||||
localStorage.setItem('token', token);
|
||||
}
|
||||
|
||||
// Dispatch the set auth token action. For some browsers and situations, we
|
||||
// may not be able to persist the auth token any other way. Keep it in redux!
|
||||
dispatch({ type: actions.SET_AUTH_TOKEN, token });
|
||||
|
||||
dispatch(checkLogin());
|
||||
};
|
||||
|
||||
@@ -87,6 +91,7 @@ export const handleSuccessfulLogin = (user, token) => (
|
||||
dispatch({
|
||||
type: actions.HANDLE_SUCCESSFUL_LOGIN,
|
||||
user,
|
||||
token,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ class IfSlotIsNotEmpty extends React.Component {
|
||||
isSlotEmpty(props = this.props) {
|
||||
const { slotElements } = props;
|
||||
return slotElements.length === 0
|
||||
? false
|
||||
? true
|
||||
: slotElements.every(elements => elements.length === 0);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ class IfSlotIsNotEmpty extends React.Component {
|
||||
|
||||
IfSlotIsNotEmpty.propTypes = {
|
||||
slot: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
|
||||
slotElements: PropTypes.array.isRequired,
|
||||
children: PropTypes.node.isRequired,
|
||||
passthrough: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
const prefix = `TALK_FRAMEWORK`;
|
||||
|
||||
export const SET_AUTH_TOKEN = `${prefix}_SET_AUTH_TOKEN`;
|
||||
|
||||
export const CHECK_LOGIN_REQUEST = `${prefix}_CHECK_LOGIN_REQUEST`;
|
||||
export const CHECK_LOGIN_SUCCESS = `${prefix}_CHECK_LOGIN_SUCCESS`;
|
||||
export const CHECK_LOGIN_FAILURE = `${prefix}_CHECK_LOGIN_FAILURE`;
|
||||
|
||||
@@ -5,6 +5,7 @@ const initialState = {
|
||||
checkedInitialLogin: false,
|
||||
initialLoginError: null,
|
||||
user: null,
|
||||
token: null,
|
||||
};
|
||||
|
||||
const purge = user => {
|
||||
@@ -14,12 +15,18 @@ const purge = user => {
|
||||
|
||||
export default function auth(state = initialState, action) {
|
||||
switch (action.type) {
|
||||
case actions.SET_AUTH_TOKEN:
|
||||
return {
|
||||
...state,
|
||||
token: action.token || null,
|
||||
};
|
||||
case actions.CHECK_LOGIN_FAILURE:
|
||||
return {
|
||||
...state,
|
||||
initialLoginError: action.error,
|
||||
checkedInitialLogin: true,
|
||||
user: null,
|
||||
token: null,
|
||||
};
|
||||
case actions.CHECK_LOGIN_SUCCESS:
|
||||
return {
|
||||
@@ -31,11 +38,13 @@ export default function auth(state = initialState, action) {
|
||||
return {
|
||||
...state,
|
||||
user: action.user ? purge(action.user) : null,
|
||||
token: action.token || null,
|
||||
};
|
||||
case actions.LOGOUT:
|
||||
return {
|
||||
...state,
|
||||
user: null,
|
||||
token: null,
|
||||
};
|
||||
case actions.UPDATE_STATUS: {
|
||||
return {
|
||||
|
||||
+7
-1
@@ -47,6 +47,12 @@ const getAuthToken = (store, storage) => {
|
||||
} 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;
|
||||
@@ -123,7 +129,7 @@ export async function createContext({
|
||||
// Try to get the token from localStorage. If it isn't here, it may
|
||||
// be passed as a cookie.
|
||||
|
||||
// NOTE: THIS IS ONLY EVER EVALUATED ONCE, IN ORDER TO SEND A DIFFERNT
|
||||
// NOTE: THIS IS ONLY EVER EVALUATED ONCE, IN ORDER TO SEND A DIFFERENT
|
||||
// TOKEN YOU MUST DISCONNECT AND RECONNECT THE WEBSOCKET CLIENT.
|
||||
return getAuthToken(store, localStorage);
|
||||
};
|
||||
|
||||
@@ -136,6 +136,7 @@ export function t(key, ...replacements) {
|
||||
replacements.forEach((str, i) => {
|
||||
translation = translation.replace(new RegExp(`\\{${i}\\}`, 'g'), str);
|
||||
});
|
||||
|
||||
return translation;
|
||||
} else {
|
||||
console.warn(`${lang}.${key} and en.${key} language key not set`);
|
||||
|
||||
@@ -173,11 +173,30 @@ class PluginsService {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This adds a consistent keying for the slot elements.
|
||||
* It uses the plugin name as the key. If the same plugin inserts
|
||||
* multiple elements it will append `.${noOfOccurence}` to the
|
||||
* key starting with the second element.
|
||||
*/
|
||||
const getKey = (() => {
|
||||
const map = {};
|
||||
return component => {
|
||||
if (map[component.talkPluginName] === undefined) {
|
||||
map[component.talkPluginName] = 0;
|
||||
} else {
|
||||
map[component.talkPluginName]++;
|
||||
}
|
||||
const i = map[component.talkPluginName];
|
||||
return `${component.talkPluginName}${i > 0 ? `.${i}` : ''}`;
|
||||
};
|
||||
})();
|
||||
|
||||
return (size > 0 ? slots.slice(0, size) : slots)
|
||||
.map((component, i) => ({
|
||||
.map(component => ({
|
||||
component,
|
||||
disabled: isDisabled(component),
|
||||
key: i,
|
||||
key: getKey(component),
|
||||
}))
|
||||
.filter(o => !o.disabled)
|
||||
.map(({ component, key }) =>
|
||||
|
||||
@@ -59,6 +59,10 @@ const CONFIG = {
|
||||
// it was built at.
|
||||
REVISION_HASH: process.env.REVISION_HASH,
|
||||
|
||||
// SCRAPER_HEADERS is a JSON string that will be used to override the headers
|
||||
// on the scraper when it makes requests.
|
||||
SCRAPER_HEADERS: process.env.TALK_SCRAPER_HEADERS || '{}',
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// JWT based configuration
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -154,6 +154,8 @@ sidebar:
|
||||
url: /building-basic-plugin/
|
||||
- title: Customizing Plugins with Coral UI
|
||||
url: /customizing-plugins-coral-ui/
|
||||
- title: When You've Installed Talk
|
||||
url: /when-youve-installed-talk/
|
||||
- title: Migrating
|
||||
children:
|
||||
- title: Migrating to v4.0.0
|
||||
|
||||
@@ -167,14 +167,10 @@ TALK_REDIS_URL=redis://127.0.0.1:6379
|
||||
TALK_ROOT_URL=http://127.0.0.1:3000
|
||||
TALK_PORT=3000
|
||||
TALK_JWT_SECRET=password
|
||||
TALK_FACEBOOK_APP_ID=A-Facebook-App-ID
|
||||
TALK_FACEBOOK_APP_SECRET=A-Facebook-App-Secret
|
||||
```
|
||||
|
||||
This is only the bare minimum needed to run the demo, for more configuration
|
||||
variables, check out the [Configuration](/talk/configuration/) section. Facebook login above
|
||||
will definitely not work unless you change those values as well.
|
||||
|
||||
variables, check out the [Configuration](/talk/configuration/) section.
|
||||
|
||||
You can now start the application by running:
|
||||
|
||||
|
||||
@@ -57,14 +57,11 @@ TALK_REDIS_URL=redis://127.0.0.1:6379
|
||||
TALK_ROOT_URL=http://127.0.0.1:3000
|
||||
TALK_PORT=3000
|
||||
TALK_JWT_SECRET=password
|
||||
TALK_FACEBOOK_APP_ID=A-Facebook-App-ID
|
||||
TALK_FACEBOOK_APP_SECRET=A-Facebook-App-Secret
|
||||
```
|
||||
|
||||
This is the bare minimum needed to start Talk, for more configuration
|
||||
variables, check out the [Configuration](/talk/configuration/)
|
||||
section. Facebook login above will definitely not work unless you change those
|
||||
values as well.
|
||||
section.
|
||||
|
||||
|
||||
You can now start the application by running:
|
||||
|
||||
@@ -524,4 +524,11 @@ Sets the logging level for the context logger (from [Bunyan](https://github.com/
|
||||
- `warn`
|
||||
- `info`
|
||||
- `debug`
|
||||
- `trace`
|
||||
- `trace`
|
||||
|
||||
## TALK_SCRAPER_HEADERS
|
||||
|
||||
A JSON string representing the configuration passed to the
|
||||
[fetch](https://www.npmjs.com/package/node-fetch) call for the scraper. It
|
||||
can be used to set an authorization header, or change the user agent. (Default
|
||||
`{}`)
|
||||
@@ -24,7 +24,7 @@ All levels of comments and replies are able to be linked to via permalink. Perma
|
||||
```text
|
||||
https://<your asset url>?commentId=<the comment id>
|
||||
```
|
||||
{:.no-copy}
|
||||
|
||||
|
||||
### Threading
|
||||
|
||||
@@ -44,7 +44,7 @@ talk-stream-comment-level-${depth}
|
||||
talk-stream-highlighted-comment
|
||||
talk-stream-pending-comment
|
||||
```
|
||||
{:.no-copy}
|
||||
|
||||
|
||||
### Automatic Updates
|
||||
|
||||
|
||||
@@ -1,21 +1,56 @@
|
||||
const Asset = require('../models/asset');
|
||||
const scraper = require('../services/scraper');
|
||||
const Assets = require('../services/assets');
|
||||
const { createLogger } = require('../services/logging');
|
||||
const Asset = require('../../models/asset');
|
||||
const scraper = require('../../services/scraper');
|
||||
const Assets = require('../../services/assets');
|
||||
const { createLogger } = require('../../services/logging');
|
||||
const logger = createLogger('jobs:scraper');
|
||||
const metascraper = require('metascraper');
|
||||
const fetch = require('node-fetch');
|
||||
const { merge } = require('lodash');
|
||||
const { version } = require('../../package.json');
|
||||
const { SCRAPER_HEADERS } = require('../../config');
|
||||
|
||||
// Load the scraper with the rules.
|
||||
const metascraper = require('metascraper').load([
|
||||
require('metascraper-title')(),
|
||||
require('metascraper-description')(),
|
||||
require('metascraper-image')(),
|
||||
require('metascraper-author')(),
|
||||
require('metascraper-date')(),
|
||||
require('./rules/modified')(),
|
||||
require('./rules/section')(),
|
||||
]);
|
||||
|
||||
let customHeaders = {};
|
||||
try {
|
||||
customHeaders = JSON.parse(SCRAPER_HEADERS);
|
||||
} catch (err) {
|
||||
console.error('Cannot parse TALK_SCRAPER_HEADERS');
|
||||
throw err;
|
||||
}
|
||||
|
||||
// Parse the headers to be added to the scraper.
|
||||
const headers = merge(
|
||||
{
|
||||
'User-Agent': `Coral-Talk/${version}`,
|
||||
},
|
||||
customHeaders
|
||||
);
|
||||
|
||||
/**
|
||||
* Scrapes the given asset for metadata.
|
||||
*/
|
||||
async function scrape(asset) {
|
||||
return metascraper.scrapeUrl(
|
||||
asset.url,
|
||||
Object.assign({}, metascraper.RULES, {
|
||||
section: $ => $('meta[property="article:section"]').attr('content'),
|
||||
modified: $ => $('meta[property="article:modified"]').attr('content'),
|
||||
})
|
||||
);
|
||||
async function scrape({ url }) {
|
||||
const res = await fetch(url, {
|
||||
headers,
|
||||
});
|
||||
const html = await res.text();
|
||||
|
||||
// Get the metadata from the scraped html.
|
||||
const metadata = await metascraper({
|
||||
html,
|
||||
url,
|
||||
});
|
||||
|
||||
return metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -0,0 +1,5 @@
|
||||
module.exports = () => ({
|
||||
modified: [
|
||||
({ htmlDom: $ }) => $('meta[property="article:modified"]').attr('content'),
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,5 @@
|
||||
module.exports = () => ({
|
||||
section: [
|
||||
({ htmlDom: $ }) => $('meta[property="article:section"]').attr('content'),
|
||||
],
|
||||
});
|
||||
@@ -154,12 +154,19 @@ en:
|
||||
sign_out: "Sign Out"
|
||||
stories: Stories
|
||||
stream_settings: "Stream Settings"
|
||||
access_message: "You must be an administrator to access config settings. Please find the nearest Admin and ask them to level you up!"
|
||||
suspect_word_title: "Suspect words list"
|
||||
suspect_word_text: "Comments which contain these words or phrases (not case-sensitive) will be highlighted in the comment stream. Type a word and press Enter or Tab to add. Optionally paste a comma-separated list."
|
||||
tech_settings: "Tech Settings"
|
||||
title: "Configure Comment Stream"
|
||||
weeks: Weeks
|
||||
wordlist: "Banned Words"
|
||||
save_changes_dialog:
|
||||
unsaved_changes: "Unsaved changes"
|
||||
copy: "You have made one or more changes without saving. Would you like to save or discard your changes?"
|
||||
save_settings: "Save Settings"
|
||||
discard: "Discard"
|
||||
cancel: "Cancel"
|
||||
continue: "Continue"
|
||||
createdisplay:
|
||||
check_the_form: "Invalid Form. Please check the fields"
|
||||
|
||||
@@ -153,12 +153,19 @@ es:
|
||||
sign_out: "Desconectar"
|
||||
stories: Artículos
|
||||
stream_settings: "Configuración de Comentarios"
|
||||
access_message: "Usted debe ser un administrador para acceder a esta página. Encuentre a otro admin y actualice los permisos de su cuenta!"
|
||||
suspect_word_title: "Lista de palabras sospechosas"
|
||||
suspect_word_text: "Comentarios que contengan estas palabras o frases, considerando mayusculas y minúsculas, serán automáticamente destacadas en los comentarios publicados. Escribir una palabra y apretar Enter o Tabulador para agregarla. O pegar una lista de palabras separadas por coma."
|
||||
tech_settings: "Configuración Técnica"
|
||||
title: "Configurar los comentarios"
|
||||
weeks: Semanas
|
||||
wordlist: "Palabras Suspendidas"
|
||||
save_changes_dialog:
|
||||
unsaved_changes: "Cambios no guardados"
|
||||
copy: Has hecho uno o más cambios sin guardar. Deseas guardar o descartar tus cambios?"
|
||||
save_settings: "Guardar configuración"
|
||||
discard: "Descartar"
|
||||
cancel: "Cancelar"
|
||||
continue: "Continuar"
|
||||
createdisplay:
|
||||
check_the_form: "Formulario Inválido. Por favor verifica los campos"
|
||||
|
||||
@@ -0,0 +1,465 @@
|
||||
fi_FI:
|
||||
your_account_has_been_suspended: Tilisi on väliaikasesti suljettu.
|
||||
your_account_has_been_banned: Tilillesi on asetettu kirjoituskielto.
|
||||
your_username_has_been_rejected: Tilisi on suljettu, koska käyttäjänimesi on epäsopiva. Vaihda käyttäjänimeä jatkaaksesi tilin käyttöä.
|
||||
embed_comments_tab: Kommentit
|
||||
bandialog:
|
||||
are_you_sure: "Haluatko varmasti asettaa kirjoituskiellon käyttäjätilille {0}?"
|
||||
ban_user: "Estä käyttäjä?"
|
||||
banned_user: "Estetty käyttäjä"
|
||||
cancel: "Peruuta"
|
||||
note: "Huom! {0}"
|
||||
note_reject_comment: "Käyttäjän asettaminen kirjoituskieltoon asettaa myös kommentin Hylätyt-jonoon"
|
||||
note_ban_user: "Käyttäjän kirjoituskielto estää kommentoinnin, kommentteihin reagoinnin, sekä kommenttien ilmiantamisen."
|
||||
yes_ban_user: "Kyllä, aseta käyttäjälle kirjoituskielto"
|
||||
write_a_message: "Kirjoita viesti"
|
||||
send: "Lähetä"
|
||||
notify_ban_headline: "Lähetä käyttäjälle ilmoitus kirjoituskiellosta"
|
||||
notify_ban_description: "Tämä lähettää käyttäjälle sähköposti-ilmoituksen kirjoituskiellosta."
|
||||
email_message_ban: "{0},\n\nTilläsi on rikottu kommentoinnin sääntöjä, jonka takia tilille on asetettu kirjoituskielto. Tiliä ei voida enää käyttää kommentointiin osallistumiseen tai kommenttien ilmiantamiseen. Ota yhteyttä moderointiin, jos tämä on tapahtunut mielestäsi väärin perustein."
|
||||
bio_offensive: "Kuvaus on loukkaava"
|
||||
cancel: "Peruuta"
|
||||
confirm_email:
|
||||
click_to_confirm: "Vahvista sähköpostiosoitteesi"
|
||||
confirm: "Vahvista"
|
||||
password_reset:
|
||||
mail_sent: "Salasananvaihtolinkki on lähetetty rekisteröityyn sähköpostiosoitteeseen"
|
||||
set_new_password: "Luo uusi salasana"
|
||||
new_password: "Uusi salasana"
|
||||
new_password_help: "Salasanan tulee olla vähintään 8 merkin pituinen"
|
||||
confirm_new_password: "Vahvista uusi salasana"
|
||||
change_password: "Vaihda salasana"
|
||||
characters_remaining: "merkki(ä) jäljellä"
|
||||
comment:
|
||||
anon: "Anonyymi"
|
||||
undo_reject: "Peruuta"
|
||||
ban_user: "Estä käyttäjä"
|
||||
comment: "Kommentoi"
|
||||
edited: Muokattu
|
||||
flagged: "ilmiannettu"
|
||||
view_context: "Näytä konteksti"
|
||||
comment_box:
|
||||
post: "Lähetä"
|
||||
cancel: "Peruuta"
|
||||
reply: "Vastaa"
|
||||
comment: "Kommentoi"
|
||||
name: "Nimi"
|
||||
comment_post_notif: "Kommenttisi on lähetetty."
|
||||
comment_post_notif_premod: "Kiitos kommentistasi. Moderointitiimimme käsittelee kommenttisi mahdollisimman pian."
|
||||
comment_post_banned_word: "Kommenttisi sisältää vähintään yhden kielletyn sanan, joten kommenttiasi ei tulla julkaisemaan. Jos tämä ilmoitus on mielestäsi aiheeton, olethan yhteydessä moderointitiimiimme."
|
||||
characters_remaining: "merkki(ä) jäljellä"
|
||||
comment_offensive: "Kommentti on loukkaava"
|
||||
comment_singular: Kommentti
|
||||
comment_plural: Kommentit
|
||||
comment_post_banned_word: "Kommenttisi sisältää vähintään yhden kielletyn sanan, joten kommenttiasi ei tulla julkaisemaan. Jos tämä ilmoitus on mielestäsi aiheeton, olethan yhteydessä moderointitiimiimme."
|
||||
comment_post_notif: "Kommenttisi on lähetetty."
|
||||
comment_post_notif_premod: "Kiitos kommentistasi. Moderointitiimimme käsittelee kommenttisi mahdollisimman pian."
|
||||
common:
|
||||
copy: 'Kopioi'
|
||||
error: 'Tapahtui virhe.'
|
||||
reply: 'vastaa'
|
||||
replies: 'vastaukset'
|
||||
reaction: 'reaktio'
|
||||
reactions: 'reaktiot'
|
||||
story: 'Artikkeli'
|
||||
flagged_usernames:
|
||||
notify_approved: '{0} hyväksyi käyttäjänimen {1}'
|
||||
notify_rejected: '{0} hylkäsi käyttäjänimen {1}'
|
||||
notify_flagged: '{0} ilmiantoi käyttäjänimen {1}'
|
||||
notify_changed: 'käyttäjä {0} vaihtoi käyttäjänimesä muotoon {1}'
|
||||
community:
|
||||
account_creation_date: "Tilin luontiaika"
|
||||
active: Aktiivinen
|
||||
admin: Ylläpitäjä
|
||||
ads_marketing: "Vaikuttaa mainokselta"
|
||||
are_you_sure: "Haluatka varmasti asettaa käyttäjlle {0} kirjoituskiellon?"
|
||||
ban_user: "Estä käyttäjä?"
|
||||
banned: Estetty
|
||||
banned_user: "Estetty käyttäjä"
|
||||
cancel: Peruuta
|
||||
dont_like_username: "Epäsopiva käyttäjänimi"
|
||||
flaggedaccounts: "Ilmiannetut käyttäjänimet"
|
||||
flags: Liputuksia
|
||||
impersonating: "Toiseksi tekeytyminen"
|
||||
loading: "Ladataan tuloksia"
|
||||
moderator: Moderaattori
|
||||
newsroom_role: "Uutishuoneen rooli"
|
||||
no_flagged_accounts: "Ilmiannettujen nimimerkkien jono on tyhjä."
|
||||
no_results: "Antamallasi hakusanalla ei löydy yhtään käyttäjää."
|
||||
offensive: "Loukkaava"
|
||||
other: Muu
|
||||
people: Käyttäjät
|
||||
role: "Valitse rooli..."
|
||||
select_status: "Valitse tila..."
|
||||
spam_ads: "Roskapostit/mainokset"
|
||||
staff: "Työntekijä"
|
||||
status: Tila
|
||||
username_and_email: "Käyttäjänimi ja sähköposti"
|
||||
yes_ban_user: "Kyllä, estä käyttäjä"
|
||||
commenter: "Kommentoija"
|
||||
configure:
|
||||
apply: Käytä
|
||||
banned_word_text: "Näitä sanoja tai fraaseja sisältävät kommentit poistetaan automaattisesti. Lisää uusi kirjoittamalla sana ja painamalla enter- tai tab-näppäintä. Vaihtoehtoisesti kopio lista, jossa sanat on eroteltu pilkuilla."
|
||||
banned_words_title: "Estettyjen sanojen lista."
|
||||
close: "Sulje"
|
||||
close_after: "Sulje kommentit, kun on kulunut"
|
||||
close_stream: "Sulje kommentointi"
|
||||
close_stream_configuration: "Kommentointi suljettu. Kommentointi on mahdollista, jos avaat kommentoinnin uudelleen."
|
||||
closed_comments_desc: "Kirjoita viesti, joka näytetään, kun kommenttivirta on suljettu ja uusia viestejä ei voi enää lähettää."
|
||||
closed_comments_label: "Kirjoita viesti..."
|
||||
closed_stream_settings: "Suljetun keskustelun ilmoitusviesti"
|
||||
comment_count_error: "Syötä numero."
|
||||
comment_count_header: "Rajoita kommentin pituutta"
|
||||
comment_count_text_post: merkkiin
|
||||
comment_count_text_pre: "Kommentin pituus rajoitetaan"
|
||||
comment_settings: Asetukset
|
||||
comment_stream: "Kommentit"
|
||||
comment_stream_will_close: "Kommentointi sulkeutuu"
|
||||
community: Yhteisö
|
||||
configure: "Muokkaa asetuksia"
|
||||
copy_and_paste: "Kopio ja liitä koodi sisällönhallintajärjestelmääsi upottaaksesi kommenttiosion artikkeliin."
|
||||
custom_css_url: "CSS-tiedoston URL"
|
||||
custom_css_url_desc: "CSS-tiedoston URL, jonka sisällöllä ylikirjoitetaan oletustyylit. Voi olla sisäinen tai ulkoinen."
|
||||
days: Päivää
|
||||
description: "Ylläpitäjänä voit muokata tämän artikkelin kommentoinnin asetuksia:"
|
||||
domain_list_text: "Syötä verkkotunnukset, joilla on lupa käyttää Talkia. Esimerkiksi lokaalikehitys-, QA- ja tuotantoympäristöt: localhost:3000 staging.domain.com domain.com."
|
||||
domain_list_title: "Luviteut verkkotunnukset"
|
||||
edit_comment_timeframe_heading: "Muokkaa kommentin muokkausaikaikkunaa"
|
||||
edit_comment_timeframe_text_pre: "Kommentoijilla on"
|
||||
edit_comment_timeframe_text_post: "sekuntia aikaa muokata kommenttejaan."
|
||||
embed_comment_stream: "Upota keskustelu"
|
||||
enable_premod_links_text: Moderaattorien tulee hyväksyä sellaisten kommenttien julkaisu, joissa on linkki.
|
||||
enable_pre_moderation: "Esimoderointi päälle"
|
||||
enable_pre_moderation_text: "Moderaattorien tulee hyväksyä kaikki julkaistavat kommentit."
|
||||
enable_premod_links: "Esimoderoi kommentit, joissa on linkki"
|
||||
enable_premod: "Esimoderointi päälle"
|
||||
enable_premod_description: "Moderaattorien tulee hyväksyä kaikki julkaistavat kommentit."
|
||||
enable_premod_links_description: "Moderaattorien tulee hyväksyä sellaisten kommenttien julkaisu, joissa on linkki."
|
||||
enable_questionbox: "Kysy lukijoilta"
|
||||
enable_questionbox_description: "Tämä kysymys tulee näkymään kommenttiosion ylälaidassa. Kysy artikkelin aiheesta tai ohjaa keskustelua kysymyksen avulla."
|
||||
hours: Tuntia
|
||||
include_comment_stream: "Sisällytä kommentoinnin kuvaus lukijoille"
|
||||
include_comment_stream_desc: "Kirjoita kommenttiosion yläreunassa näkyvä viesti. Aseta keskustelun aihe, sisällytä sääntöjä tms."
|
||||
include_text: "Lisää teksti tähän."
|
||||
include_question_here: "Kirjoita kysymyksesi tähän:"
|
||||
moderate: Moderoi
|
||||
moderation_settings: "Moderointiasetukset"
|
||||
open: "Avaa"
|
||||
open_stream: "Avaa kommentointi"
|
||||
open_stream_configuration: "Tämän artikkelin kommentointi on tällä hetkellä auki. Jos se suljetaan, ei kommentointi ole enää mahdollista, mutta vanhat kommentit jäävät näkyviin."
|
||||
require_email_verification: "Vaadi sähköpostin vahvistus"
|
||||
require_email_verification_text: "Uusien käyttäjien täytyy vahvistaa sähköpostiosoitteensa ennen kommentoinnin aloittamista"
|
||||
save_changes: "Tallenna muutokset"
|
||||
shortcuts: Pikalinkit
|
||||
sign_out: "Kirjaudu ulos"
|
||||
stories: Artikkelitarinat
|
||||
stream_settings: "Kommentoinnin asetukset"
|
||||
suspect_word_title: "Epäilyttävien sanojen lista"
|
||||
suspect_word_text: "Nämä sanat tai fraasit näkyvät korostettuina kommenteissa. Lisää uusi kirjoittamalla sana ja painamalla enter- tai tab-näppäintä. Vaihtoehtoisesti kopio lista, jossa sanat on eroteltu pilkuilla."
|
||||
tech_settings: "Tekniset asetukset"
|
||||
title: "Muokkaa kommentoinnin asetuksia"
|
||||
weeks: Viikkoa
|
||||
wordlist: "Kielletyt sanat"
|
||||
continue: "Jatka"
|
||||
createdisplay:
|
||||
check_the_form: "Tarkista syöttämäsi tiedot"
|
||||
continue: "Käytä Facebook-käyttäjänimeä"
|
||||
error_create: "Käyttäjänimen vaihdossa tapahtui virhe"
|
||||
fake_comment_body: "Tämä on esimerkkikommentti. Lukijat voivat jakaa mielipiteitään ja näkemyksiään kommenttiosiossa."
|
||||
fake_comment_date: "1 minuutti sitten"
|
||||
if_you_dont_change_your_name: "Facebook-käyttäjänimesi näkyy kommenttiesi yhteydessä, ellet tässä vaiheessa vaihda käyttäjänimeäsi."
|
||||
required_field: "Vaadittu tieto"
|
||||
save: Tallenna
|
||||
special_characters: "Käyttäjänimissä sallittuja merkkejä ovat ainoastaan kirjaimet, numerot, sekä alaviiva"
|
||||
username: Käyttäjänimi
|
||||
write_your_username: "Muokkaa käyttäjänimeäsi"
|
||||
your_username: "Käyttäjänimesi näkyy jokaisen kommenttisi yhteydessä"
|
||||
done: Valmis
|
||||
edit_comment:
|
||||
body_input_label: "Muokkaa tätä kommenttia"
|
||||
save_button: "Tallenna muutokset"
|
||||
edit_window_expired: "Et voi enää muokata tätä kommenttia, koska muokkauksen aikaikkuna on umpeutunut. Jätä sen sijaan uusi kommentti?"
|
||||
edit_window_expired_close: "Sulje"
|
||||
edit_window_timer_prefix: "Muokkauksen aikaikkunaa jäljellä: "
|
||||
second: "sekunti"
|
||||
seconds_plural: "sekuntia"
|
||||
minute: "minuutti"
|
||||
minutes_plural: "minuuttia"
|
||||
email:
|
||||
suspended:
|
||||
subject: "Tilisi on väliaikaisesti suljettu"
|
||||
banned:
|
||||
subject: "Tilisi on asetettu kirjoituskieltoon"
|
||||
body: "Tilisi on asetettu kirjoituskieltoon. Et voi osallistua keskusteluun kirjoituskiellon aikana."
|
||||
confirm:
|
||||
has_been_requested: "Sähköpostivahvistus on pyydetty tilille:"
|
||||
to_confirm: "Vahvista tili klikkaamalla seuraavaa linkkiä:"
|
||||
confirm_email: "Vahvista sähköposti"
|
||||
if_you_did_not: "Jätä tämä viesti huomioimatta, jos et ole tehnyt pyyntöä."
|
||||
subject: "Sähköpostin vahvistus"
|
||||
password_reset:
|
||||
we_received_a_request: "Tilisi salasanan vaihtoa on pyydetty. Jätä tämä viesti huomioimatta, jos et ole tehnyt pyyntöä."
|
||||
if_you_did: "Jos pyysit,"
|
||||
please_click: "klikkaa tästä vaihtaaksesi salasanasi."
|
||||
embedlink:
|
||||
copy: "Kopioi leikepöydälle"
|
||||
error:
|
||||
COMMENT_PARENT_NOT_VISIBLE: "Kommenttia, johon yrität vastata, ei enää ole."
|
||||
EMAIL_VERIFICATION_TOKEN_INVALID: "Sähköpostin vahvistusvarmiste on epävalidi."
|
||||
PASSWORD_RESET_TOKEN_INVALID: "Salasananvaihtolinkki on epävalidi."
|
||||
COMMENT_TOO_SHORT: "Kommentin tulee olla vähintään kaksi merkkiä pitkä. Tarkista kirjoittamasi teksti."
|
||||
NOT_AUTHORIZED: "Sinulla ei ole oikeutta suorittaa tätä toimintoa."
|
||||
NO_SPECIAL_CHARACTERS: "Käyttäjänimissä sallittuja merkkejä ovat ainoastaan kirjaimet, numerot, sekä alaviiva"
|
||||
PASSWORD_LENGTH: "Salasana on liian lyhyt"
|
||||
PROFANITY_ERROR: "Käyttäjänimet eivät saa sisältää hävyttömyyksiä. Ota yhteyttä ylläpitoon, jos mielestäsi on tapahtunut virhe."
|
||||
RATE_LIMIT_EXCEEDED: "Raja-arvo on ylittynyt"
|
||||
USERNAME_IN_USE: "Käyttäjänimi jo käytössä"
|
||||
USERNAME_REQUIRED: "Syötä käyttäjänimi"
|
||||
EMAIL_NOT_VERIFIED: "Sähköpostiosoitetta ei ole vahvistettu"
|
||||
EDIT_WINDOW_ENDED: "Et voi enää muokata tätä kommenttia, koska muokkauksen aikaikkuna on umpeutunut."
|
||||
EDIT_USERNAME_NOT_AUTHORIZED: "Sinulla ei ole oikeutta päivittää tai muokata käyttäjänimeä."
|
||||
SAME_USERNAME_PROVIDED: "Anna eri käyttäjänimi."
|
||||
EMAIL_IN_USE: "Sähköpostiosoite on jo käytössä"
|
||||
EMAIL_REQUIRED: "Syötä sähköpostiosoite"
|
||||
LOGIN_MAXIMUM_EXCEEDED: "Olet tehnyt liian monta epäonnistunutta yritystä. Odota, ole hyvä."
|
||||
PASSWORD_REQUIRED: "Syötä salasana"
|
||||
COMMENTING_CLOSED: "Kommentointi on suljettu"
|
||||
NOT_FOUND: "Resurssia ei löydy"
|
||||
ALREADY_EXISTS: "Resurssi on jo olemassa"
|
||||
INVALID_ASSET_URL: "Tarkista tiedoston URL"
|
||||
CANNOT_IGNORE_STAFF: "Työntekijöitä ei voi jättää huomioimatta"
|
||||
email: "Tarkista sähköpostiosoite"
|
||||
confirm_password: "Salasanat eivät täsmää. Tarkista, ole hyvä."
|
||||
network_error: "Palvelimeen yhdistäminen epäonnistui. Tarkista internetyhteytesi."
|
||||
email_not_verified: "Sähköpostiosoitetta {0} ei ole vahvistettu."
|
||||
email_password: "Sähköpostiosoite ja/tai salasana on väärä."
|
||||
organization_name: "Organisaation nimessä voi käyttää vain kirjaimia ja numeroita."
|
||||
password: "Salasanan tulee olla vähintään 8 merkkiä pitkä"
|
||||
username: "Käyttäjänimissä sallittuja merkkejä ovat ainoastaan kirjaimet, numerot, sekä alaviiva"
|
||||
unexpected: "Tapahtui odottamaton virhe. Pahiottelemme!"
|
||||
required_field: "Tämä on vaadittu kenttä"
|
||||
temporarily_suspended: "Tilisi on suljettu väliaikaisesti. Se aktivoituu uudelleen {0}. Ota yhteyttä, jos on sinulla on aiheesta kysyttävää."
|
||||
flag_comment: "Ilmianna kommentti"
|
||||
flag_reason: "Ilmiannon syy (ei pakollinen)"
|
||||
flag_username: "Ilmianna käyttäjä"
|
||||
framework:
|
||||
banned_account_header: "Tilisi on kirjoituskiellossa"
|
||||
banned_account_body: "Et pysty kirjoittamaan tai ilmiantamaan kommentteja."
|
||||
comment: kommentti
|
||||
comment_is_ignored: "Tämä kommentti on piilossa, koska olet päättänyt jättää kommentin kirjoittajan huomiotta."
|
||||
comment_is_rejected: "Olet piilottanut tämän kommentin."
|
||||
comment_is_hidden: "Tämä kommentti ei ole saatavilla."
|
||||
comments: kommentit
|
||||
configure_stream: "Muokkaa asetuksia"
|
||||
content_not_available: "Sisältö ei ole saatavilla"
|
||||
edit_name:
|
||||
button: Lähetä
|
||||
error: "Käyttäjänimissä sallittuja merkkejä ovat ainoastaan kirjaimet, numerot, sekä alaviiva"
|
||||
label: "Uusi käyttäjänimi"
|
||||
msg: "Tilisi on suljettu väliaikaisesti, koska käyttäjänimi on todettu sopimattomaksi. Vaihda käyttäjänimi, jos haluat jatkaa tilin käyttöä. Ole meihin yhteydessä, jos sinulla on aiheesta kysyttävää."
|
||||
changed_name:
|
||||
msg: "Käyttäjänimen vaihto on moderointitiimillämme tarkistuksessa."
|
||||
my_comments: "Kommenttini"
|
||||
my_profile: "Profiilini"
|
||||
new_count: "Näytä {0} lisää {1}"
|
||||
profile: Profiili
|
||||
show_all_comments: "Näytä kaikki kommentit"
|
||||
success_bio_update: "Kuvauksesi on päivitetty"
|
||||
success_name_update: "Käyttäjänimesi on päivitetty"
|
||||
success_update_settings: "Tekemäsi muutokset on otettu käyttöön"
|
||||
show_all_replies: Näytä kaikki vastaukset
|
||||
show_more_replies: Näytä lisää vastauksia
|
||||
view_more_comments: "näytä lisää kommentteja"
|
||||
view_reply: "näytä vastaus"
|
||||
from_settings_page: "Näet kommentointihistoriasi profiilisivulta."
|
||||
like: Tykkää
|
||||
loading_results: "Ladataan tuloksia"
|
||||
marketing: "Vaikuttaa mainokselta"
|
||||
moderate_this_stream: "Moderoi tätä kommentointia"
|
||||
flags:
|
||||
reasons:
|
||||
user:
|
||||
username_offensive: "Loukkaava"
|
||||
username_nolike: "En tykkää"
|
||||
username_impersonating: "Toisena esiintyminen"
|
||||
username_spam: "Roskaviesti"
|
||||
username_other: "Muu"
|
||||
comment:
|
||||
comment_offensive: "Loukkaava"
|
||||
comment_spam: "Roskaviesti"
|
||||
comment_noagree: "Olen eri mieltä"
|
||||
comment_other: "Muu"
|
||||
suspect_word: "Epäilyttävä sana"
|
||||
banned_word: "Kielletty sana"
|
||||
body_count: "Liian pitkä viesti"
|
||||
trust: "Luotettava"
|
||||
links: "Linkki"
|
||||
modqueue:
|
||||
account: "Liputuksia"
|
||||
actions: Toiminnot
|
||||
all: kaikki
|
||||
all_streams: "Kaikki keskustelut"
|
||||
notify_edited: '{0} muokkasi kommenttia "{1}"'
|
||||
notify_accepted: '{0} hyväksyi kommentin "{1}"'
|
||||
notify_rejected: '{0} hylkäsi kommentin "{1}"'
|
||||
notify_flagged: '{0} ilmiantoi kommentin "{1}"'
|
||||
notify_reset: '{0} tyhjensi kommentin "{1}" tilan'
|
||||
approve: "Hyväksy"
|
||||
approved: "Hyväksytty"
|
||||
ban_user: "Kirjoituskielto käyttäjälle"
|
||||
billion: mrd
|
||||
close: Sulje
|
||||
empty_queue: "Moderointijono on tyhjä."
|
||||
flagged: liputettu
|
||||
reported: ilmiannettu
|
||||
less_detail: "Vähemmän yksityiskohtia"
|
||||
likes: tykkäyksiä
|
||||
million: milj.
|
||||
mod_faster: "Moderoi nopeammin käyttäen pikanäppäimiä"
|
||||
moderate: "Moderoi →"
|
||||
more_detail: "Enemmän yksityiskohtia"
|
||||
new: Uusi
|
||||
newest_first: "Uusin ensin"
|
||||
navigation: Navioginti
|
||||
next_comment: "Seuraava kommentti"
|
||||
toggle_search: "Avaa haku"
|
||||
next_queue: "Vaihda jonoa"
|
||||
oldest_first: "Vanhin ensin"
|
||||
premod: esimoderoi
|
||||
prev_comment: "Edellinen kommentti"
|
||||
reject: "Hylkää"
|
||||
rejected: "Hylätty"
|
||||
reply: "Vastaa"
|
||||
select_stream: "Valitse kommenttivirta"
|
||||
shift_key: "⇧"
|
||||
shortcuts: "Pikalinkit"
|
||||
sort: "Järjestä"
|
||||
show_shortcuts: "Näytä pikalinkit"
|
||||
singleview: "Zen-moodi"
|
||||
thismenu: "Avaa valikko"
|
||||
jump_to_queue: "Siirry tiettyyn jonoon"
|
||||
thousand: tuhatta
|
||||
try_these: "Kokeile näitä"
|
||||
view_more_shortcuts: "Näytä enemmän pikalinkkejä"
|
||||
my_comment_history: "Kommentointihistoriani"
|
||||
name: Nimi
|
||||
no_agree_comment: "En ole samaa mieltä"
|
||||
no_like_bio: "En pidä kuvauksesta"
|
||||
no_like_username: "En pidä käyttäjänimestä"
|
||||
already_flagged_username: "Olet jo ilmiantanut tämän käyttäjänimen."
|
||||
other: Muu
|
||||
permalink: Jaa
|
||||
personal_info: "Kommentti sisältää henkilökohtaisesti tunnistettavia tietoja"
|
||||
post: Lähetä
|
||||
profile: Profiili
|
||||
profile_settings: Profiiliasetukset
|
||||
reply: Vastaa
|
||||
report: Ilmianna
|
||||
report_notif: "Kiitos ilmiannosta. Moderointitiimimme käsittelee tapauksen mahdollisimman pian."
|
||||
report_notif_remove: "Ilmiantosi on poistettu."
|
||||
reported: Ilmiannettu
|
||||
settings:
|
||||
from_settings_page: "Näet kommenttihistoriasi profiilisivultasi."
|
||||
my_comment_history: "Kommenttihistoriani"
|
||||
profile: Profiili
|
||||
profile_settings: "Profiiliasetukset"
|
||||
sign_in: "Kirjaudu sisään"
|
||||
to_access: "päästäksesi profiilisivulle"
|
||||
user_no_comment: "Et ole jättänyt yhtään kommenttia. Liity keskusteluun!"
|
||||
stream:
|
||||
all_comments: "Kaikki kommentit"
|
||||
temporarily_suspended: "Tilisi on väliaikasesti suljettu, koska et ole noudattanut {0}-sivuston sääntöjä. Voit liittyä keskusteluun uudelleen {1}."
|
||||
comment_not_found: "Kommenttia ei ole olemassa."
|
||||
no_comments: "Ei vielä kommentteja."
|
||||
no_comments_and_closed: "Tässä artikkelissa ei vielä ollut kommentteja."
|
||||
step_1_header: "Ilmianna ongelma"
|
||||
step_2_header: "Kerro ilmiannon syy"
|
||||
step_3_header: "Kiitos panoksestasi"
|
||||
streams:
|
||||
all: Kaikki
|
||||
article: Artikkeli
|
||||
closed: Suljettu
|
||||
empty_result: "Ei hakutuloksia. Kokeile laajentaa hakuasi."
|
||||
filter_streams: "Suodata kommenttivirtoja"
|
||||
newest: Uusin
|
||||
oldest: Vanhin
|
||||
open: Avoin
|
||||
pubdate: "Julkaisupäivä"
|
||||
search: Haku
|
||||
sort_by: "Järjestä"
|
||||
status: "Kommentoinnin tila"
|
||||
stream_status: "Kommentoinnin tila"
|
||||
suspenduser:
|
||||
title_suspend: "Aseta väliaikainen käyttökielto"
|
||||
description_suspend: "Olet asettamassa käyttäjälle {0} väliaikasta käyttökieltoa. Tämä kommentti menee hylätyt-jonoon, ja käyttäjä {0} ei voi reagoida kommentteihin, ilmiantaa, tai vastata niihin, kunnes käyttökielto on päättynyt."
|
||||
select_duration: "Käyttökiellon kesto"
|
||||
one_hour: "1 tunti"
|
||||
hours: "{0} tuntia"
|
||||
days: "{0} päivää"
|
||||
cancel: "Peruuta"
|
||||
suspend_user: "Aseta väliaikainen käyttökielto"
|
||||
email_message_suspend: "Hyvä {0}, tilisi on asetettu {1}-sivuston sääntöjenmukaiseen käyttökieltoon. Et voi osallistua keskusteluun käyttökiellon aikana. Voit liittyä keskusteluun uudelleen {2}."
|
||||
title_notify: "Lähetä käyttäjälle tieto asetetusta käyttökiellosta"
|
||||
notify_suspend_until: "Käyttäjä {0} on asetettu väliaikaiseen käyttökieltoon. Kielto päättyy automaattisesti {1}."
|
||||
description_notify: "Käyttökiellon asettaminen sulkee tilin väliaikaisesti."
|
||||
write_message: "Kirjoita viesti"
|
||||
send: Lähetä
|
||||
reject_username:
|
||||
username: käyttäjänimi
|
||||
no_cancel: "En, peruuta"
|
||||
description_reject: "Haluatko asettaa käyttökiellon, syynä {0}? Jos haluat, asetetaan käyttäjätili väliaikaseen käyttökieltoon, kunnes {0} on kirjoitettu uudelleen."
|
||||
title_notify: "Lähetä käyttäjälle tieto asetetusta käyttökiellosta"
|
||||
description_notify: "Käyttökiellon asettaminen sulkee tilin väliaikaisesti."
|
||||
title_reject: "Huomasimme sinun hylänneen käyttäjänimen"
|
||||
suspend_user: "Aseta väliaikainen käyttökielto"
|
||||
yes_suspend: "Kyllä, sulje väliaikaisesti"
|
||||
email_message_reject: "Toinen yhteisön jäsen on ilmiantanut käyttäjänimesi ja sen perusteella nimi on hylätty. Et voi enää osallistua keskusteluun. Ole ystävällisesti yhteydessä meihin, jos sinulla on asiasta kysyttävää."
|
||||
write_message: "Kirjoita viesti"
|
||||
send: Lähetä
|
||||
thank_you: "Arvostamme palautettasi. Moderaattorimme käy läpi tekemäsi ilmiannon."
|
||||
user:
|
||||
bio_flags: "liputusta kuvaukselle"
|
||||
user_bio: "Käyttäjän kuvaus"
|
||||
username_flags: "liputusta käyttäjänimelle"
|
||||
user_detail:
|
||||
remove_suspension: "Poista käyttökielto"
|
||||
suspend: "Aseta väliaikainen käyttökielto"
|
||||
remove_ban: "Poista kirjoituskielto"
|
||||
ban: "Aseta kirjoituskielto"
|
||||
member_since: "Jäsenenä lähtien"
|
||||
email: "Sähköposti"
|
||||
total_comments: "Kommentteja yhteensä"
|
||||
reject_rate: "Hylkäysaste"
|
||||
reports: "Raportit"
|
||||
all: "Kaikki"
|
||||
rejected: "Hylätyt"
|
||||
account_history: "Tilin historia"
|
||||
user_impersonating: "Käyttäjä on tekeytynyt toiseksi"
|
||||
user_no_comment: "Et ole jättänyt yhtään kommenttia. Liity mukaan keskusteluun!"
|
||||
username_offensive: "Käyttäjänimi on loukkaava"
|
||||
view_conversation: "Näytä keskustelu"
|
||||
install:
|
||||
initial:
|
||||
description: "Ota Talk käyttöön, vain muutama askel jäljellä"
|
||||
submit: "Aloita käyttö"
|
||||
add_organization:
|
||||
description: "Kerro organisaatiosi nimi. Tämä näkyy uusien jäsenten kutsuissa."
|
||||
label: "Organisaation nimi"
|
||||
save: "Tallenna"
|
||||
create:
|
||||
email: "Sähköpostiosoite"
|
||||
username: "Käyttäjänimi"
|
||||
password: "Salasana"
|
||||
confirm_password: "Salasana uudelleen"
|
||||
save: "Tallenna"
|
||||
permitted_domains:
|
||||
title: "Sallitut domainit"
|
||||
description: "Syötä domainit, joilla on lupa käyttää Talkia. Esimerkiksi lokaalikehitys-, QA- ja tuotantoympäristöt: localhost:3000 staging.domain.com domain.com."
|
||||
submit: "Lopeta asennus"
|
||||
final:
|
||||
description: "Kiitos kun asensit Talkin! Lähetämme sähköpostinvarmistusviestin antamaasi osoitteeseen. Voit nyt aloittaa kommentoinnin käytön."
|
||||
launch: "Käynnistä Talk"
|
||||
close: "Sulje asennusnäkymä"
|
||||
admin_sidebar:
|
||||
view_options: "Näytä asetukset"
|
||||
sort_comments: "Järjestä kommentit"
|
||||
+138
-124
@@ -1,41 +1,42 @@
|
||||
fr:
|
||||
your_account_has_been_suspended: Your account has been temporarily suspended.
|
||||
your_account_has_been_banned: Your account has been banned.
|
||||
your_username_has_been_rejected: Your account has been suspended because your username has been deemed inappropriate. To restore your account please enter a new username.
|
||||
embed_comments_tab: Comments
|
||||
your_account_has_been_suspended: Votre compte a été temporairement suspendu.
|
||||
your_account_has_been_banned: Votre compte a été banni.
|
||||
your_username_has_been_rejected: Votre compte a été suspendu en raison de votre nom d’utilisateur jugé inapproprié. Veuillez saisir un nouveau nom d’utilisateur pour restaurer votre compte.
|
||||
embed_comments_tab: Commentaires
|
||||
bandialog:
|
||||
are_you_sure: "Êtes-vous sûr de vouloir bannir {0}?"
|
||||
ban_user: "Bannir l'utilisateur ?"
|
||||
banned_user: "Utilisateur banni"
|
||||
cancel: Annuler
|
||||
note: "Remarque: bannir cet utilisateur rejettera également ce commentaire."
|
||||
note_reject_comment: "Banning this user will also place this comment in the Rejected queue."
|
||||
note_ban_user: "Banning this user will not let them comment, react to, or report comments."
|
||||
note: "Remarque : bannir cet utilisateur rejettera également ce commentaire."
|
||||
note_reject_comment: "Bannir cet utilisateur placera ce commentaire dans la liste des commentaires rejetées."
|
||||
note_ban_user: "Bannir cet utilisateur empêchera cet utilisateur d’écrire, de réagir à ou de signaler des commentaires."
|
||||
yes_ban_user: "Oui, bannir cet utilisateur"
|
||||
write_a_message: "Write a message"
|
||||
send: "Send"
|
||||
notify_ban_headline: "Notify the user of ban"
|
||||
notify_ban_description: "This will notify the user by email that they have been banned from the community"
|
||||
email_message_ban: "Dear {0},\n\nSomeone with access to your account has violated our community guidelines. As a result, your account has been banned. You will no longer be able to comment, like or report comments. if you think this has been done in error, please contact our community team."
|
||||
write_a_message: "Écrire un message"
|
||||
send: "Envoyer"
|
||||
notify_ban_headline: "Aviser l’utilisateur du bannissement"
|
||||
notify_ban_description: "Ceci avisera l’utilisateur par courrier électronique de son bannissement de la communauté"
|
||||
email_message_ban: "Cher {0},\n\nUne personne ayant accès à votre compte a transgressé nos directives communautaires. En conséquence, votre compte a été banni. Vous ne pourrez plus écrire, aimer ou signaler des commentaires. Si vous pensez qu’il s’agit d’une erreur, veuillez contacter notre équipe communautaire."
|
||||
bio_offensive: "Cette biographie est offensante"
|
||||
cancel: Annuler
|
||||
cancel: "Annuler"
|
||||
confirm_email:
|
||||
click_to_confirm: "Click below to confirm your email address"
|
||||
confirm: "Confirm"
|
||||
click_to_confirm: "Cliquez ci-dessous pour confirmer votre adresse électronique"
|
||||
confirm: "Confirmer"
|
||||
password_reset:
|
||||
set_new_password: "Change Your Password"
|
||||
new_password: "New Password"
|
||||
new_password_help: "Password must be at least 8 characters"
|
||||
confirm_new_password: "Confirm New Password"
|
||||
change_password: "Change Password"
|
||||
mail_sent: 'Si vous avez un compte enregistré, un lien de réinitialisation de mot de passe a été envoyé à cette adresse électronique'
|
||||
set_new_password: "Changer votre mot de passe"
|
||||
new_password: "Nouveau mot de passe"
|
||||
new_password_help: "Le mot de passe doit comporter au moins 8 caractères"
|
||||
confirm_new_password: "Confirmer le nouveau mot de passe"
|
||||
change_password: "Changer le mot de passe"
|
||||
characters_remaining: "caractères restants"
|
||||
comment:
|
||||
anon: Anonyme
|
||||
anon: "Anonyme"
|
||||
ban_user: "Bannir utilisateur"
|
||||
undo_reject: "Undo"
|
||||
undo_reject: "Annuler"
|
||||
comment: "Publier un commentaire"
|
||||
flagged: signalé
|
||||
edited: Edited
|
||||
flagged: "signalé"
|
||||
edited: Modifié
|
||||
view_context: "Afficher le contexte"
|
||||
comment_box:
|
||||
post: "Publier"
|
||||
@@ -54,18 +55,18 @@ fr:
|
||||
comment_post_notif: "Votre commentaire a été publié."
|
||||
comment_post_notif_premod: "Merci d'avoir envoyé un commentaire. Notre équipe de modération passera en revue votre commentaire sous peu."
|
||||
common:
|
||||
copy: 'Copy'
|
||||
error: 'An error has occurred.'
|
||||
reply: 'reply'
|
||||
replies: 'replies'
|
||||
reaction: 'reaction'
|
||||
reactions: 'reactions'
|
||||
story: 'Story'
|
||||
copy: 'Copier'
|
||||
error: 'Une erreur est survenue.'
|
||||
reply: 'répondre'
|
||||
replies: 'réponses'
|
||||
reaction: 'réaction'
|
||||
reactions: 'réactions'
|
||||
story: 'Histoire'
|
||||
flagged_usernames:
|
||||
notify_approved: '{0} approved username {1}'
|
||||
notify_rejected: '{0} rejected username {1}'
|
||||
notify_flagged: '{0} reported username {1}'
|
||||
notify_changed: 'user {0} changed their username to {1}'
|
||||
notify_approved: "{0} a approuvé le nom d’utilisateur {1}"
|
||||
notify_rejected: "{0} a rejeté le nom d’utilisateur {1}"
|
||||
notify_flagged: "{0} a signalé le nom d’utilisateur {1}"
|
||||
notify_changed: "l’utilisateur {0} a modifié son nom d’utilisateur en {1}"
|
||||
community:
|
||||
account_creation_date: "Date de création du compte"
|
||||
active: Actif
|
||||
@@ -75,18 +76,18 @@ fr:
|
||||
ban_user: "Bannir l'utilisateur ?"
|
||||
banned: Banni
|
||||
banned_user: "Utilisateur banni"
|
||||
cancel: Signalé
|
||||
dont_like_username: "Dislike username"
|
||||
cancel: Annuler
|
||||
dont_like_username: "Ne pas aimer le nom d’utilisateur"
|
||||
flaggedaccounts: "Noms d'utilisateurs signalés"
|
||||
flags: Signalements
|
||||
impersonating: Impersonation"
|
||||
impersonating: "Usurpation d’identité"
|
||||
loading: "Chargement des résultats"
|
||||
moderator: Modérateur
|
||||
newsroom_role: "Rôle de la salle de presse"
|
||||
no_flagged_accounts: "La liste des comptes signalés est vide."
|
||||
no_results: "Aucun utilisateur n'a été trouvé avec ce nom d'utilisateur ou cette adresse de messagerie. Ils se cachent !"
|
||||
offensive: "Offensive"
|
||||
other: "Other"
|
||||
other: "Autre"
|
||||
people: Gens
|
||||
role: "Sélectionnez le rôle ..."
|
||||
select_status: "Sélectionnez l'état ..."
|
||||
@@ -153,26 +154,33 @@ fr:
|
||||
sign_out: "Se Déconnecter"
|
||||
stories: Histoires
|
||||
stream_settings: "Paramètres du fil"
|
||||
access_message: "Vous devez être un administrateur pour accéder aux paramètres de configuration. Veuillez trouver l'administrateur le plus proche et demandez-lui d'augmenter votre niveau d’accès !"
|
||||
suspect_word_title: "Liste des mots suspects"
|
||||
suspect_word_text: "Les commentaires contenant ces mots ou expressions (non sensibles à la casse) seront mis en évidence dans le flux de commentaires. Tapez un mot et appuyez sur Entrée ou Tabulation pour ajouter. En option, entrez une liste séparée par des virgules."
|
||||
tech_settings: "Paramètres techniques"
|
||||
title: "Configurer le fil de commentaires"
|
||||
weeks: Semaines
|
||||
wordlist: "Mots interdits"
|
||||
save_changes_dialog:
|
||||
unsaved_changes: "Modifications non enregistrées"
|
||||
copy: "Vous avez fait une ou plusieurs modifications sans enregistrer. Souhaitez-vous sauvegarder ou abandonner vos modifications ?"
|
||||
save_settings: "Enregistrer la configuration"
|
||||
discard: "Abandonner"
|
||||
cancel: "Annuler"
|
||||
continue: Continuer
|
||||
createdisplay:
|
||||
check_the_form: "Invalid Form. Please check the fields"
|
||||
continue: "Continue with the same Facebook username"
|
||||
error_create: "Error when changing username"
|
||||
fake_comment_body: "This is an example comment. Readers can share their thoughts and opinions with newsrooms in the comments section."
|
||||
fake_comment_date: "1 minute ago"
|
||||
if_you_dont_change_your_name: "If you don't change your username at this step your Facebook display name will appear alongside of all your comments."
|
||||
required_field: "Required field"
|
||||
save: Save
|
||||
special_characters: "Usernames can contain letters numbers and _ only"
|
||||
username: Username
|
||||
write_your_username: "Edit your username"
|
||||
your_username: "Your username appears on every comment you post."
|
||||
check_the_form: "Formulaire invalide. Veuillez vérifier les champs"
|
||||
continue: "Continuer avec le même nom d’utilisateur Facebook"
|
||||
error_create: "Une erreur lors du changement de nom d’utilisateur"
|
||||
fake_comment_body: "Ceci est un exemple de commentaire. Les lecteurs peuvent livrer leurs réflexions et avis avec les salles de presse dans la section des commentaires."
|
||||
fake_comment_date: "il y a 1 minute"
|
||||
if_you_dont_change_your_name: "Si vous ne modifiez pas votre nom d’utilisateur à cette étape, votre nom d’affichage Facefook apparaîtra avec tous vos commentaires."
|
||||
required_field: "Champ obligatoire"
|
||||
save: Sauvegarder
|
||||
special_characters: "Les noms d'utilisateur ne peuvent contenir que des lettres, des chiffres et \"_\""
|
||||
username: Nom d’utilisateur
|
||||
write_your_username: "Modifier votre nom d’utilisateur"
|
||||
your_username: "Votre nom d’utilisateur apparait sur chaque commentaire publié."
|
||||
done: Terminé
|
||||
edit_comment:
|
||||
body_input_label: "Modifier ce commentaire"
|
||||
@@ -186,47 +194,48 @@ fr:
|
||||
minutes_plural: "minutes"
|
||||
email:
|
||||
suspended:
|
||||
subject: "Your account has been suspended"
|
||||
subject: "Votre compte a été suspendu"
|
||||
banned:
|
||||
subject: "Your account has been banned"
|
||||
body: "In accordance with The Coral Project’s community guidelines, your account has been banned. You are now longer allowed to comment, flag or engage with our community."
|
||||
subject: "Votre compte a été banni"
|
||||
body: "Conformément aux directives communautaires du projet Coral, votre compte a été banni. Vous ne pouvez désormais plus commenter, signaler ou collaborer avec notre communauté."
|
||||
confirm:
|
||||
has_been_requested: "A email confirmation has been requested for the following account:"
|
||||
to_confirm: "To confirm the account, please visit the following link:"
|
||||
confirm_email: "Confirm Email"
|
||||
if_you_did_not: "If you did not request this, you can safely ignore this email."
|
||||
subject: "Email Confirmation"
|
||||
has_been_requested: "Une confirmation de l’adresse électronique a été demandée pour le compte suivant :"
|
||||
to_confirm: "Pour confirmer le compte, veuillez suivre le lien suivant :"
|
||||
confirm_email: "Confirmer l’adresse électronique"
|
||||
if_you_did_not: "Si vous n’êtes pas à l’origine de cette requête, vous pouvez ignorer ce courriel en toute sécurité."
|
||||
subject: "Confirmation adresse électronique"
|
||||
password_reset:
|
||||
we_received_a_request: "We received a request to reset your password. If you did not request this change, you can ignore this email."
|
||||
if_you_did: "If you did,"
|
||||
please_click: "please click here to reset password"
|
||||
we_received_a_request: "Nous avons reçu une demande de réinitialisation de votre mot de passe. Si vous n'avez pas demandé cette modification, vous pouvez ignorer ce courriel."
|
||||
if_you_did: "Si vous êtes à l’origine de cette requête,"
|
||||
please_click: "veuillez cliquez ici pour réinitialiser le mot de passe"
|
||||
embedlink:
|
||||
copy: "Copier dans le presse-papier"
|
||||
error:
|
||||
COMMENT_PARENT_NOT_VISIBLE: "The comment that you're replying to has been removed or doesn't exist."
|
||||
EMAIL_VERIFICATION_TOKEN_INVALID: "Email verification token is invalid."
|
||||
PASSWORD_RESET_TOKEN_INVALID: "Your password reset link is invalid."
|
||||
COMMENT_PARENT_NOT_VISIBLE: "Le commentaire auquel vous répondez a été supprimé ou n’existe plus."
|
||||
EMAIL_VERIFICATION_TOKEN_INVALID: "Le code de vérification de l'adresse électronique n'est pas valide."
|
||||
EMAIL_ALREADY_VERIFIED: "Adresse électronique déjà vérifiée."
|
||||
PASSWORD_RESET_TOKEN_INVALID: "Votre lien de réinitialisation de mot de passe n'est pas valide."
|
||||
COMMENT_TOO_SHORT: "Votre commentaire doit contenir quelque chose"
|
||||
NOT_AUTHORIZED: "Vous n'êtes pas autorisé à effectuer cette action."
|
||||
NO_SPECIAL_CHARACTERS: "Les noms d'utilisateur ne peuvent contenir que des lettres, des chiffres et \"_\" seulement"
|
||||
PASSWORD_LENGTH: "Le mot de passe est trop court"
|
||||
PROFANITY_ERROR: "Les noms d'utilisateur ne doivent pas contenir de mots offensants. Veuillez contacter l'administrateur si vous pensez qu'il y a une erreur."
|
||||
RATE_LIMIT_EXCEEDED: "Rate limit exceeded"
|
||||
RATE_LIMIT_EXCEEDED: "Nombre d’utilisations dépassé"
|
||||
USERNAME_IN_USE: "Ce nom d'utilisateur est déjà pris"
|
||||
USERNAME_REQUIRED: "Doit entrer un nom d'utilisateur"
|
||||
EMAIL_NOT_VERIFIED: "E-mail address not verified"
|
||||
EMAIL_NOT_VERIFIED: "Adresse électronique non vérifiée"
|
||||
EDIT_WINDOW_ENDED: "Vous ne pouvez plus modifier ce commentaire. La fenêtre de temps pour le faire a expiré."
|
||||
EDIT_USERNAME_NOT_AUTHORIZED: "Vous n'avez pas la permission de mettre à jour votre nom d'utilisateur."
|
||||
SAME_USERNAME_PROVIDED: "You must submit a different username."
|
||||
EMAIL_IN_USE: "Adresse e-mail déjà utilisée"
|
||||
EMAIL_REQUIRED: "Une adresse email est requise"
|
||||
SAME_USERNAME_PROVIDED: "Vous devez soumettre un nom d’utilisateur différent."
|
||||
EMAIL_IN_USE: "Adresse électronique déjà utilisée"
|
||||
EMAIL_REQUIRED: "Une adresse électronique est requise"
|
||||
LOGIN_MAXIMUM_EXCEEDED: "Vous avez effectué trop de tentatives infructueuses pour entrer votre mot de passe. S'il vous plaît, attendez."
|
||||
PASSWORD_REQUIRED: "Doit entrer un mot de passe"
|
||||
COMMENTING_CLOSED: "Les commentaires sont déjà fermés"
|
||||
NOT_FOUND: "Ressource introuvable"
|
||||
ALREADY_EXISTS: "Resource already exists"
|
||||
ALREADY_EXISTS: "Ressource déjà existante"
|
||||
INVALID_ASSET_URL: "L'URL est invalide"
|
||||
CANNOT_IGNORE_STAFF: "Cannot ignore Staff members."
|
||||
CANNOT_IGNORE_STAFF: "Ne peut pas ignorer les membres de l'équipe."
|
||||
email: "Pas une adresse e-mail valide"
|
||||
confirm_password: "Les mots de passe ne correspondent pas. Vérifiez à nouveau"
|
||||
network_error: "Échec de connexion au serveur. Vérifiez votre connexion Internet et réessayez."
|
||||
@@ -236,20 +245,20 @@ fr:
|
||||
password: "Le mot de passe doit être d'au moins 8 caractères"
|
||||
username: "Les noms d'utilisateur ne peuvent contenir que des chiffres, des lettres et \"_\""
|
||||
required_field: "Ce champ est obligatoire"
|
||||
unexpected: "Unexpected error occurred. Sorry!"
|
||||
temporarily_suspended: "Your account is currently suspended. It will be reactivated {0}. Please contact us if you have any questions."
|
||||
unexpected: "Désolé, une erreur inattendue s'est produite."
|
||||
temporarily_suspended: "Votre compte est actuellement suspendu. Il sera réactivé {0}. Veuillez nous contacter si vous avez des questions."
|
||||
flag_comment: "Signaler un commentaire"
|
||||
flag_reason: "Motif du signalement (facultatif)"
|
||||
flag_username: "Signaler un nom d'utilisateur"
|
||||
framework:
|
||||
banned_account_header: "Your account is currently banned."
|
||||
banned_account_body: "This means that you cannot Like, Report, or write comments."
|
||||
banned_account_header: "Votre compte est actuellement banni."
|
||||
banned_account_body: "Cela signifie que vous ne pouvez pas aimer, signaler ou écrire des commentaires."
|
||||
comment: commentaire
|
||||
comment_is_rejected: "You have rejected this comment."
|
||||
comment_is_hidden: "This comment is not available."
|
||||
comment_is_rejected: "Vous avez rejeté ce commentaire."
|
||||
comment_is_hidden: "Ce commentaire n’est pas disponible."
|
||||
comment_is_ignored: "Ce commentaire est caché car vous avez ignoré cet utilisateur."
|
||||
comments: commentaires
|
||||
configure_stream: "Configure le fil"
|
||||
configure_stream: "Configurer le fil"
|
||||
content_not_available: "Ce contenu n'est pas disponible"
|
||||
edit_name:
|
||||
button: Soumettre
|
||||
@@ -257,7 +266,7 @@ fr:
|
||||
label: "Nouveau nom d'utilisateur"
|
||||
msg: "Votre compte est actuellement suspendu car votre nom d'utilisateur a été jugé inapproprié. Pour restaurer votre compte, entrez un nouveau nom d'utilisateur. Contactez-nous si vous avez des questions."
|
||||
changed_name:
|
||||
msg: "Your username change is under review by our moderation team."
|
||||
msg: "Votre modification de nom d’utilisateur est sous révision par notre équipe de modération."
|
||||
my_comments: "Mes commentaires"
|
||||
my_profile: "Mon profil"
|
||||
new_count: "Voir {0} plus {1}"
|
||||
@@ -280,29 +289,29 @@ fr:
|
||||
user:
|
||||
username_offensive: "Offensive"
|
||||
username_nolike: "Dislike"
|
||||
username_impersonating: "Impersonation"
|
||||
username_impersonating: "Usurpation d’identité"
|
||||
username_spam: "Spam"
|
||||
username_other: "Other"
|
||||
username_other: "Autre"
|
||||
comment:
|
||||
comment_offensive: "Offensive"
|
||||
comment_spam: "Spam"
|
||||
comment_noagree: "Disagree"
|
||||
comment_other: "Other"
|
||||
suspect_word: "Suspect Word"
|
||||
banned_word: "Banned Word"
|
||||
body_count: "Body exceeds max length"
|
||||
comment_noagree: "Pas d’accord"
|
||||
comment_other: "Autre"
|
||||
suspect_word: "Mot suspect"
|
||||
banned_word: "Mot banni"
|
||||
body_count: "Le texte dépasse la longueur maximale"
|
||||
trust: "Trust"
|
||||
links: "Link"
|
||||
links: "Lien"
|
||||
modqueue:
|
||||
account: "Signalements du compte"
|
||||
actions: Actions
|
||||
all: tous
|
||||
all_streams: "Tous les fils"
|
||||
notify_edited: '{0} edited comment "{1}"'
|
||||
notify_accepted: '{0} accepted comment "{1}"'
|
||||
notify_rejected: '{0} rejected comment "{1}"'
|
||||
notify_flagged: '{0} flagged comment "{1}"'
|
||||
notify_reset: '{0} reset status of comment "{1}"'
|
||||
notify_edited: '{0} a modifié le commentaire "{1}"'
|
||||
notify_accepted: '{0} a accepté le commentaire "{1}"'
|
||||
notify_rejected: '{0} a rejeté le commentaire "{1}"'
|
||||
notify_flagged: '{0} a signalé le commentaire "{1}"'
|
||||
notify_reset: '{0} a réinitialisé le statut du commentaire "{1}"'
|
||||
approve: "Approuver"
|
||||
approved: "Approuvé"
|
||||
ban_user: "Bannir"
|
||||
@@ -317,26 +326,26 @@ fr:
|
||||
mod_faster: "Modérer plus rapidement avec les raccourcis clavier"
|
||||
moderate: "Modérer →"
|
||||
more_detail: "Plus de détails"
|
||||
new: New
|
||||
new: Nouveau
|
||||
newest_first: "Le plus récent d'abord"
|
||||
navigation: Navigation
|
||||
next_comment: "Aller au prochain commentaire"
|
||||
toggle_search: "Open search"
|
||||
next_queue: "Switch queues"
|
||||
toggle_search: "Ouvrir la recherche"
|
||||
next_queue: "Changer de file"
|
||||
oldest_first: "Le plus ancien d'abord"
|
||||
premod: Pre-modérer
|
||||
prev_comment: "Aller au commentaire précédent"
|
||||
reject: "Rejeter"
|
||||
rejected: "Rejeté"
|
||||
reply: "Reply"
|
||||
reply: "Répondre"
|
||||
select_stream: "Sélectionnez le fil"
|
||||
shift_key: ⇧
|
||||
shortcuts: Raccourcis
|
||||
sort: "Sort"
|
||||
sort: "Trier"
|
||||
show_shortcuts: "Afficher les raccourcis"
|
||||
singleview: "Mode zen"
|
||||
thismenu: "Ouvrir ce menu"
|
||||
jump_to_queue: "Jump to specific queue"
|
||||
jump_to_queue: "Aller dans une file d'attente spécifique"
|
||||
thousand: k
|
||||
try_these: "Essayez ces"
|
||||
view_more_shortcuts: "Afficher plus de raccourcis"
|
||||
@@ -345,7 +354,7 @@ fr:
|
||||
no_agree_comment: "Je ne suis pas d'accord avec ce commentaire"
|
||||
no_like_bio: "Je n'aime pas cette biographie"
|
||||
no_like_username: "Je n'aime pas ce nom d'utilisateur"
|
||||
already_flagged_username: "You have already flagged this username."
|
||||
already_flagged_username: "Vous avez déjà signalé ce nom d’utilisateur."
|
||||
other: Autre
|
||||
permalink: Partager
|
||||
personal_info: "Ce commentaire révèle des informations personnelles identifiables"
|
||||
@@ -354,9 +363,12 @@ fr:
|
||||
profile_settings: "Paramètres"
|
||||
reply: Répondre
|
||||
report: Signaler
|
||||
report_notif: "Merci de signaler ce commentaire. Notre équipe de modération a é té informée."
|
||||
report_notif: "Merci de signaler ce commentaire. Notre équipe de modération a été informée."
|
||||
report_notif_remove: "Votre signalement a été supprimé."
|
||||
reported: Signalé
|
||||
comment_history_blank:
|
||||
title: Vous n’avez écrit aucun commentaire
|
||||
info: Un historique de vos commentaires apparaîtra ici
|
||||
settings:
|
||||
from_settings_page: "Dans la page Profil, vous pouvez voir l'historique de vos commentaires."
|
||||
my_comment_history: "Mon historique de commentaires"
|
||||
@@ -369,8 +381,8 @@ fr:
|
||||
all_comments: "Tous les commentaires"
|
||||
temporarily_suspended: "Conformément à la charte d'utilisation des commentaires de {0}, votre compte a été temporairement suspendu. Merci de revenir dans la conversation {1}."
|
||||
comment_not_found: "Ce commentaire a été supprimé ou n'existe pas."
|
||||
no_comments: "There are no comments yet, why don’t you write one?"
|
||||
no_comments_and_closed: "There were no comments on this article."
|
||||
no_comments: "Il n’y a aucun commentaire pour le moment. Soyez le premier à commenter !"
|
||||
no_comments_and_closed: "Il n'y avait aucun commentaire sur cet article."
|
||||
step_1_header: "Signaler un problème"
|
||||
step_2_header: "Aidez-nous à comprendre"
|
||||
step_3_header: "Merci pour votre participation"
|
||||
@@ -395,6 +407,8 @@ fr:
|
||||
one_hour: "1 heure"
|
||||
hours: "{0} heures"
|
||||
days: "{0} jours"
|
||||
hour: "{0} heures"
|
||||
day: "{0} jours"
|
||||
cancel: "Annuler"
|
||||
suspend_user: "Suspendre l'utilisateur"
|
||||
email_message_suspend: "Cher {0},\n\nConformément à la charte des commentaires de {1}, votre compte a été temporairement suspendu. Pendant cette période, vous ne pourrez pas commenter, signaler ou participer à d'autres commentaires. \n\nMerci de revenir dans la conversation {2}."
|
||||
@@ -421,28 +435,28 @@ fr:
|
||||
user_bio: "Bio de l'utilisateur"
|
||||
username_flags: "Signaler pour ce nom d'utilisateur"
|
||||
user_detail:
|
||||
remove_suspension: "Remove Suspension"
|
||||
suspend: "Suspend User"
|
||||
remove_ban: "Remove Ban"
|
||||
ban: "Ban User"
|
||||
member_since: "Member Since"
|
||||
email: "Email"
|
||||
total_comments: "Total Comments"
|
||||
reject_rate: "Reject Rate"
|
||||
reports: "Reports"
|
||||
all: "All"
|
||||
rejected: "Rejected"
|
||||
account_history: "Account History"
|
||||
remove_suspension: "Lever la suspension"
|
||||
suspend: "Suspendre l’utilisateur"
|
||||
remove_ban: "Lever le bannissement"
|
||||
ban: "Bannir l’utilisateur"
|
||||
member_since: "Membre depuis"
|
||||
email: "adresse électronique"
|
||||
total_comments: "Nombre total de commentaires"
|
||||
reject_rate: "Fréquence de rejet"
|
||||
reports: "Signalements"
|
||||
all: "Tous"
|
||||
rejected: "Rejeté"
|
||||
account_history: "Historique de compte"
|
||||
account_history:
|
||||
user_banned: "User banned"
|
||||
ban_removed: "Ban removed"
|
||||
username_status: "Username {0}"
|
||||
suspended: "Suspended, {0}"
|
||||
suspension_removed: "Suspension removed"
|
||||
system: "System"
|
||||
user_banned: "Utilisateur banni"
|
||||
ban_removed: "Bannissement levé"
|
||||
username_status: "Nom d’utilisateur {0}"
|
||||
suspended: "Suspendu, {0}"
|
||||
suspension_removed: "Suspension levée"
|
||||
system: "Système"
|
||||
date: "Date"
|
||||
action: "Action"
|
||||
taken_by: "Taken By"
|
||||
taken_by: "Prise par"
|
||||
user_impersonating: "Cet utilisateur se fait passer pour quelqu'un d'autre"
|
||||
user_no_comment: "Vous n'avez jamais laissé de commentaire. Rejoignez la conversation !"
|
||||
username_offensive: "Ce nom d'utilisateur est offensant"
|
||||
@@ -470,5 +484,5 @@ fr:
|
||||
launch: "Lancer Talk"
|
||||
close: "Fermez cet installateur"
|
||||
admin_sidebar:
|
||||
view_options: "View Options"
|
||||
sort_comments: "Sort Comments"
|
||||
view_options: "Afficher les options"
|
||||
sort_comments: "Trier les commentaires"
|
||||
|
||||
+7
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "talk",
|
||||
"version": "4.3.0",
|
||||
"version": "4.3.1",
|
||||
"description": "A better commenting experience from Mozilla, The New York Times, and the Washington Post. https://coralproject.net",
|
||||
"main": "app.js",
|
||||
"private": true,
|
||||
@@ -137,7 +137,12 @@
|
||||
"lodash-es": "^4.16.6",
|
||||
"marked": "^0.3.6",
|
||||
"material-design-lite": "^1.2.1",
|
||||
"metascraper": "1.0.7",
|
||||
"metascraper": "^3.9.2",
|
||||
"metascraper-author": "^3.9.2",
|
||||
"metascraper-date": "^3.3.0",
|
||||
"metascraper-description": "^3.9.2",
|
||||
"metascraper-image": "^3.9.2",
|
||||
"metascraper-title": "^3.9.2",
|
||||
"minimist": "^1.2.0",
|
||||
"moment": "^2.18.1",
|
||||
"mongoose": "^4.12.3",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Slot } from 'plugin-api/beta/client/components';
|
||||
import {
|
||||
Button,
|
||||
TextField,
|
||||
@@ -28,6 +29,15 @@ class SignUp extends React.Component {
|
||||
this.props.onSubmit();
|
||||
};
|
||||
|
||||
childFactory = el => {
|
||||
const key = el.key;
|
||||
const props = {
|
||||
indicateBlocker: () => this.props.indicateBlocker(key),
|
||||
indicateBlockerResolved: () => this.props.indicateBlockerResolved(key),
|
||||
};
|
||||
return React.cloneElement(el, props);
|
||||
};
|
||||
|
||||
render() {
|
||||
const {
|
||||
username,
|
||||
@@ -42,6 +52,7 @@ class SignUp extends React.Component {
|
||||
errorMessage,
|
||||
requireEmailConfirmation,
|
||||
success,
|
||||
blocked,
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
@@ -103,6 +114,10 @@ class SignUp extends React.Component {
|
||||
onChange={this.handlePasswordRepeatChange}
|
||||
minLength="8"
|
||||
/>
|
||||
<Slot
|
||||
fill="talkPluginAuth.formField"
|
||||
childFactory={this.childFactory}
|
||||
/>
|
||||
<div className={styles.action}>
|
||||
<Button
|
||||
type="submit"
|
||||
@@ -110,6 +125,7 @@ class SignUp extends React.Component {
|
||||
id="coralSignUpButton"
|
||||
className={styles.button}
|
||||
full
|
||||
disabled={blocked}
|
||||
>
|
||||
{t('talk-plugin-auth.login.sign_up')}
|
||||
</Button>
|
||||
@@ -161,6 +177,9 @@ SignUp.propTypes = {
|
||||
errorMessage: PropTypes.string,
|
||||
requireEmailConfirmation: PropTypes.bool.isRequired,
|
||||
success: PropTypes.bool.isRequired,
|
||||
blocked: PropTypes.bool.isRequired,
|
||||
indicateBlocker: PropTypes.func.isRequired,
|
||||
indicateBlockerResolved: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
export default SignUp;
|
||||
|
||||
@@ -16,8 +16,19 @@ class SignUpContainer extends Component {
|
||||
emailError: null,
|
||||
passwordError: null,
|
||||
passwordRepeatError: null,
|
||||
blockers: [],
|
||||
};
|
||||
|
||||
indicateBlocker = key =>
|
||||
this.setState(state => ({
|
||||
blockers: state.blockers.concat(key),
|
||||
}));
|
||||
|
||||
indicateBlockerResolved = key =>
|
||||
this.setState(state => ({
|
||||
blockers: state.blockers.filter(i => i !== key),
|
||||
}));
|
||||
|
||||
validate = data => {
|
||||
let valid = true;
|
||||
const changes = {};
|
||||
@@ -48,7 +59,7 @@ class SignUpContainer extends Component {
|
||||
passwordRepeat: this.state.passwordRepeat,
|
||||
};
|
||||
|
||||
if (this.validate(data)) {
|
||||
if (this.validate(data) && !this.state.blockers.length) {
|
||||
this.props.signUp(data);
|
||||
}
|
||||
};
|
||||
@@ -76,6 +87,9 @@ class SignUpContainer extends Component {
|
||||
render() {
|
||||
return (
|
||||
<SignUp
|
||||
indicateBlocker={this.indicateBlocker}
|
||||
indicateBlockerResolved={this.indicateBlockerResolved}
|
||||
blocked={!!this.state.blockers.length}
|
||||
onSubmit={this.handleSubmit}
|
||||
onUsernameChange={this.setUsername}
|
||||
onEmailChange={this.props.setEmail}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import cn from 'classnames';
|
||||
import styles from './Comment.css';
|
||||
import { t } from 'plugin-api/beta/client/services';
|
||||
@@ -28,6 +29,7 @@ class Comment extends React.Component {
|
||||
fill="commentContent"
|
||||
defaultComponent={CommentContent}
|
||||
passthrough={slotPassthrough}
|
||||
size={1}
|
||||
/>
|
||||
|
||||
<div className={cn(`${pluginName}-comment-username-box`)}>
|
||||
@@ -87,4 +89,11 @@ class Comment extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
Comment.propTypes = {
|
||||
viewComment: PropTypes.func,
|
||||
comment: PropTypes.object,
|
||||
asset: PropTypes.object,
|
||||
root: PropTypes.object,
|
||||
};
|
||||
|
||||
export default Comment;
|
||||
|
||||
@@ -14,10 +14,10 @@ import cn from 'classnames';
|
||||
|
||||
class Settings extends React.Component {
|
||||
childFactory = el => {
|
||||
const pluginName = el.type.talkPluginName;
|
||||
const key = el.key;
|
||||
const props = {
|
||||
indicateOn: () => this.props.indicateOn(pluginName),
|
||||
indicateOff: () => this.props.indicateOff(pluginName),
|
||||
indicateOn: () => this.props.indicateOn(key),
|
||||
indicateOff: () => this.props.indicateOff(key),
|
||||
};
|
||||
return React.cloneElement(el, props);
|
||||
};
|
||||
|
||||
@@ -20,14 +20,14 @@ class SettingsContainer extends React.Component {
|
||||
turnOffInput: {},
|
||||
};
|
||||
|
||||
indicateOn = plugin =>
|
||||
indicateOn = key =>
|
||||
this.setState(state => ({
|
||||
hasNotifications: state.hasNotifications.concat(plugin),
|
||||
hasNotifications: state.hasNotifications.concat(key),
|
||||
}));
|
||||
|
||||
indicateOff = plugin =>
|
||||
indicateOff = key =>
|
||||
this.setState(state => ({
|
||||
hasNotifications: state.hasNotifications.filter(i => i !== plugin),
|
||||
hasNotifications: state.hasNotifications.filter(i => i !== key),
|
||||
}));
|
||||
|
||||
setTurnOffInputFragment = fragment =>
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import Linkify from 'react-linkify';
|
||||
import styles from './AdminCommentContent.css';
|
||||
import { AdminCommentContent as Content } from 'plugin-api/beta/client/components';
|
||||
|
||||
class AdminCommentContent extends React.Component {
|
||||
render() {
|
||||
const { comment, suspectWords, bannedWords } = this.props;
|
||||
return (
|
||||
const content = (
|
||||
<Content
|
||||
className={styles.content}
|
||||
body={comment.richTextBody ? comment.richTextBody : comment.body}
|
||||
@@ -15,6 +16,12 @@ class AdminCommentContent extends React.Component {
|
||||
html={!!comment.richTextBody}
|
||||
/>
|
||||
);
|
||||
|
||||
if (!!comment.richTextBody) {
|
||||
return content;
|
||||
}
|
||||
|
||||
return <Linkify properties={{ target: '_blank' }}>{content}</Linkify>;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { PLUGIN_NAME } from '../constants';
|
||||
import cn from 'classnames';
|
||||
import styles from './CommentContent.css';
|
||||
import Linkify from 'react-linkify';
|
||||
|
||||
class CommentContent extends React.Component {
|
||||
render() {
|
||||
@@ -14,7 +15,9 @@ class CommentContent extends React.Component {
|
||||
dangerouslySetInnerHTML={{ __html: comment.richTextBody }}
|
||||
/>
|
||||
) : (
|
||||
<div className={className}>{comment.body}</div>
|
||||
<Linkify properties={{ target: '_blank' }}>
|
||||
<div className={className}>{comment.body}</div>
|
||||
</Linkify>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+18
-4
@@ -22,6 +22,7 @@ require('dotenv').config();
|
||||
const { plugins, pluginsPath, PluginManager } = require('./plugins');
|
||||
const manager = new PluginManager(plugins);
|
||||
const targetPlugins = manager.section('targets').plugins;
|
||||
const clientPlugins = manager.section('client').plugins;
|
||||
|
||||
debug(`Using ${pluginsPath} as the plugin configuration path`);
|
||||
|
||||
@@ -51,6 +52,19 @@ const TALK_WEBPACK_SOURCE_MAP = _.get(
|
||||
const devtool =
|
||||
TALK_WEBPACK_SOURCE_MAP === 'none' ? false : TALK_WEBPACK_SOURCE_MAP;
|
||||
|
||||
// Exclude everything from node_modules except for those that may be in a
|
||||
// plugin folder inside the node_modules folder.
|
||||
const exclude = {
|
||||
and: [
|
||||
// Exclude everything inside node_modules..
|
||||
/node_modules/,
|
||||
// But not those that contain plugins.
|
||||
{
|
||||
not: clientPlugins.map(({ name }) => new RegExp(`node_modules\/${name}`)),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
// Base Webpack Config
|
||||
//==============================================================================
|
||||
@@ -73,7 +87,7 @@ const config = {
|
||||
},
|
||||
{
|
||||
loader: 'babel-loader',
|
||||
exclude: /node_modules/,
|
||||
exclude,
|
||||
test: /\.js$/,
|
||||
query: {
|
||||
cacheDirectory: true,
|
||||
@@ -82,11 +96,11 @@ const config = {
|
||||
{
|
||||
loader: 'hjson-loader',
|
||||
test: /\.(json|yml)$/,
|
||||
exclude: /node_modules/,
|
||||
exclude,
|
||||
},
|
||||
{
|
||||
loader: 'yaml-loader',
|
||||
exclude: /node_modules/,
|
||||
exclude,
|
||||
test: /\.yml$/,
|
||||
},
|
||||
{
|
||||
@@ -118,7 +132,7 @@ const config = {
|
||||
},
|
||||
{
|
||||
test: /\.(graphql|gql)$/,
|
||||
exclude: /node_modules/,
|
||||
exclude,
|
||||
loader: 'graphql-tag/loader',
|
||||
},
|
||||
],
|
||||
|
||||
@@ -114,6 +114,18 @@
|
||||
git-url-parse "^6.0.2"
|
||||
shelljs "^0.7.0"
|
||||
|
||||
"@metascraper/helpers@^3.9.2":
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-3.9.2.tgz#c96588de5c6352d7ed9bf7245e35ac0c82333c59"
|
||||
dependencies:
|
||||
condense-whitespace "~1.0.0"
|
||||
is-relative-url "~2.0.0"
|
||||
lodash "~4.17.4"
|
||||
normalize-url "~2.0.0"
|
||||
smartquotes "~2.3.1"
|
||||
to-title-case "~1.0.0"
|
||||
url-regex "~4.1.1"
|
||||
|
||||
"@types/graphql@0.10.2":
|
||||
version "0.10.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/graphql/-/graphql-0.10.2.tgz#d7c79acbaa17453b6681c80c34b38fcb10c4c08c"
|
||||
@@ -315,6 +327,12 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0:
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
any-observable@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242"
|
||||
@@ -323,10 +341,6 @@ any-promise@^0.1.0, any-promise@~0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-0.1.0.tgz#830b680aa7e56f33451d4b049f3bd8044498ee27"
|
||||
|
||||
any-promise@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
|
||||
anymatch@^1.3.0:
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
|
||||
@@ -517,7 +531,7 @@ array-union@^1.0.1:
|
||||
dependencies:
|
||||
array-uniq "^1.0.1"
|
||||
|
||||
array-uniq@^1.0.1:
|
||||
array-uniq@^1.0.1, array-uniq@^1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
|
||||
|
||||
@@ -621,10 +635,6 @@ async@~0.2.6:
|
||||
version "0.2.10"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
|
||||
|
||||
async@~0.9.0:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||
|
||||
async@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
|
||||
@@ -1826,6 +1836,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^4.0.0"
|
||||
|
||||
chalk@^2.3.0, chalk@^2.3.2:
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
|
||||
dependencies:
|
||||
ansi-styles "^3.2.1"
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796"
|
||||
@@ -1868,7 +1886,7 @@ cheerio@^0.20.0:
|
||||
optionalDependencies:
|
||||
jsdom "^7.0.2"
|
||||
|
||||
cheerio@^1.0.0-rc.2:
|
||||
cheerio@^1.0.0-rc.2, cheerio@~1.0.0-rc.2:
|
||||
version "1.0.0-rc.2"
|
||||
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
|
||||
dependencies:
|
||||
@@ -1916,7 +1934,7 @@ chownr@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
|
||||
|
||||
chrono-node@^1.2.3:
|
||||
chrono-node@~1.3.5:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/chrono-node/-/chrono-node-1.3.5.tgz#a2495298a32da82bcc01ad9be7d77efa5e244122"
|
||||
dependencies:
|
||||
@@ -2127,12 +2145,6 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
combined-stream@~0.0.4:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f"
|
||||
dependencies:
|
||||
delayed-stream "0.0.5"
|
||||
|
||||
command-exists@^1.2.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.2.tgz#12819c64faf95446ec0ae07fe6cafb6eb3708b22"
|
||||
@@ -2231,14 +2243,6 @@ concat-map@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
|
||||
concat-stream@^1.4.7, concat-stream@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.2.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
concat-stream@^1.5.0:
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26"
|
||||
@@ -2247,6 +2251,18 @@ concat-stream@^1.5.0:
|
||||
readable-stream "^2.2.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
concat-stream@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.2.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
condense-whitespace@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-1.0.0.tgz#8376d98ef028e6cb2cd2468e28ce42c5c65ab1a9"
|
||||
|
||||
configstore@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90"
|
||||
@@ -2402,7 +2418,7 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
|
||||
parse-json "^2.2.0"
|
||||
require-from-string "^1.1.0"
|
||||
|
||||
cosmiconfig@^4.0.0:
|
||||
cosmiconfig@^4.0.0, cosmiconfig@~4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc"
|
||||
dependencies:
|
||||
@@ -2805,10 +2821,6 @@ del@^2.0.2:
|
||||
pinkie-promise "^2.0.0"
|
||||
rimraf "^2.2.8"
|
||||
|
||||
delayed-stream@0.0.5:
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f"
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
@@ -3876,14 +3888,6 @@ form-data@1.0.0-rc4:
|
||||
combined-stream "^1.0.5"
|
||||
mime-types "^2.1.10"
|
||||
|
||||
form-data@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.2.0.tgz#26f8bc26da6440e299cbdcfb69035c4f77a6e466"
|
||||
dependencies:
|
||||
async "~0.9.0"
|
||||
combined-stream "~0.0.4"
|
||||
mime-types "~2.0.3"
|
||||
|
||||
form-data@^2.3.1, form-data@~2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
|
||||
@@ -4801,7 +4805,7 @@ html-entities@^1.2.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
|
||||
|
||||
htmlparser2@^3.9.1:
|
||||
htmlparser2@^3.9.0, htmlparser2@^3.9.1:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
|
||||
dependencies:
|
||||
@@ -5099,7 +5103,7 @@ ioredis@3.1.4, ioredis@^3.1.2:
|
||||
redis-commands "^1.2.0"
|
||||
redis-parser "^2.4.0"
|
||||
|
||||
ip-regex@^1.0.0:
|
||||
ip-regex@^1.0.0, ip-regex@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
|
||||
|
||||
@@ -5294,10 +5298,6 @@ is-ip@1.0.0:
|
||||
dependencies:
|
||||
ip-regex "^1.0.0"
|
||||
|
||||
is-isodate@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-isodate/-/is-isodate-0.0.1.tgz#4fe2e937d50f3ba68c7b69b0218008b624aa5036"
|
||||
|
||||
is-my-json-valid@^2.12.4:
|
||||
version "2.16.1"
|
||||
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
|
||||
@@ -5399,6 +5399,12 @@ is-regexp@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
|
||||
|
||||
is-relative-url@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-2.0.0.tgz#72902d7fe04b3d4792e7db15f9db84b7204c9cef"
|
||||
dependencies:
|
||||
is-absolute-url "^2.0.0"
|
||||
|
||||
is-resolvable@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4"
|
||||
@@ -5439,10 +5445,6 @@ is-typedarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||
|
||||
is-url@^1.2.1:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
|
||||
|
||||
is-utf8@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
||||
@@ -5490,6 +5492,10 @@ isomorphic-fetch@^2.1.1:
|
||||
node-fetch "^1.0.1"
|
||||
whatwg-fetch ">=0.10.0"
|
||||
|
||||
isostring@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isostring/-/isostring-0.0.1.tgz#ddb608efbfc89cda86db9cb16be090a788134c7f"
|
||||
|
||||
isstream@0.1.x, isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
@@ -6601,6 +6607,10 @@ lodash.endswith@^4.0.1, lodash.endswith@^4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09"
|
||||
|
||||
lodash.escaperegexp@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
|
||||
|
||||
lodash.flatten@^4.2.0, lodash.flatten@^4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
|
||||
@@ -6856,16 +6866,6 @@ make-dir@^1.0.0:
|
||||
dependencies:
|
||||
pify "^3.0.0"
|
||||
|
||||
make-error-cause@^1.0.1:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d"
|
||||
dependencies:
|
||||
make-error "^1.2.0"
|
||||
|
||||
make-error@^1.2.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
|
||||
|
||||
makeerror@1.0.x:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
|
||||
@@ -6975,16 +6975,94 @@ merge@^1.1.3:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
|
||||
|
||||
metascraper@1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/metascraper/-/metascraper-1.0.7.tgz#2343f9108f34e4d2b55b7b4f543c96dfc52e1478"
|
||||
metascraper-author@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-author/-/metascraper-author-3.9.2.tgz#ff2020ac428f59a875d655df3b0d4bea171fde19"
|
||||
dependencies:
|
||||
cheerio "^0.20.0"
|
||||
chrono-node "^1.2.3"
|
||||
is-isodate "0.0.1"
|
||||
is-url "^1.2.1"
|
||||
popsicle "^6.2.0"
|
||||
to-title-case "^1.0.0"
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
lodash "~4.17.4"
|
||||
|
||||
metascraper-date@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-3.3.0.tgz#359cc596896286ac06a677508fd66a0ee490fd17"
|
||||
dependencies:
|
||||
chrono-node "~1.3.5"
|
||||
isostring "0.0.1"
|
||||
|
||||
metascraper-description@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-3.9.2.tgz#1afc983e7088f05e1a6961fe9772360aa0664bd1"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
lodash "~4.17.4"
|
||||
|
||||
metascraper-image@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-image/-/metascraper-image-3.9.2.tgz#029649356565b92c7685873c36a04f92ccb979e8"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
|
||||
metascraper-lang@^3.9.0:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-lang/-/metascraper-lang-3.9.0.tgz#b66547c470618416dab89c8e221a29df9ac88f75"
|
||||
dependencies:
|
||||
lodash "~4.17.4"
|
||||
|
||||
metascraper-logo@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-3.9.2.tgz#9779c5efda3391a1642bd9b7e590855477644225"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
lodash "~4.17.4"
|
||||
|
||||
metascraper-publisher@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-3.4.0.tgz#b1ecbe6b2300eca97e860ad322f817925dbfffe4"
|
||||
dependencies:
|
||||
condense-whitespace "~1.0.0"
|
||||
lodash "~4.17.4"
|
||||
|
||||
metascraper-title@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-3.9.2.tgz#594bea98e2b364bf808d40720950f6a1e4057a1f"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
lodash "~4.17.4"
|
||||
|
||||
metascraper-url@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-3.9.2.tgz#e578eb35a13f359dadb57f90d49025a2ed39b43c"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
|
||||
metascraper-video@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper-video/-/metascraper-video-3.9.2.tgz#027c16cf48a48b636c7611492357ef6898e28577"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
video-extensions "~1.1.0"
|
||||
|
||||
metascraper@^3.9.2:
|
||||
version "3.9.2"
|
||||
resolved "https://registry.yarnpkg.com/metascraper/-/metascraper-3.9.2.tgz#bc2d1705a80be619ddc254716d2bf9d98e92b1c2"
|
||||
dependencies:
|
||||
"@metascraper/helpers" "^3.9.2"
|
||||
cheerio "~1.0.0-rc.2"
|
||||
cosmiconfig "~4.0.0"
|
||||
lodash "~4.17.4"
|
||||
metascraper-author "^3.9.2"
|
||||
metascraper-date "^3.3.0"
|
||||
metascraper-description "^3.9.2"
|
||||
metascraper-image "^3.9.2"
|
||||
metascraper-lang "^3.9.0"
|
||||
metascraper-logo "^3.9.2"
|
||||
metascraper-publisher "^3.4.0"
|
||||
metascraper-title "^3.9.2"
|
||||
metascraper-url "^3.9.2"
|
||||
metascraper-video "^3.9.2"
|
||||
p-reduce "~1.0.0"
|
||||
resolve-from "~4.0.0"
|
||||
sanitize-html "~1.18.2"
|
||||
|
||||
methods@^1.1.1, methods@^1.1.2, methods@~1.1.2:
|
||||
version "1.1.2"
|
||||
@@ -7041,22 +7119,12 @@ miller-rabin@^4.0.0:
|
||||
version "1.33.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
|
||||
|
||||
mime-db@~1.12.0:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7"
|
||||
|
||||
mime-types@^2.1.10, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
|
||||
version "2.1.17"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
|
||||
dependencies:
|
||||
mime-db "~1.30.0"
|
||||
|
||||
mime-types@~2.0.3:
|
||||
version "2.0.14"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6"
|
||||
dependencies:
|
||||
mime-db "~1.12.0"
|
||||
|
||||
mime@1.4.1, mime@^1.3.4, mime@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
|
||||
@@ -7699,6 +7767,14 @@ normalize-url@^1.4.0:
|
||||
query-string "^4.1.0"
|
||||
sort-keys "^1.0.0"
|
||||
|
||||
normalize-url@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6"
|
||||
dependencies:
|
||||
prepend-http "^2.0.0"
|
||||
query-string "^5.0.1"
|
||||
sort-keys "^2.0.0"
|
||||
|
||||
npm-path@^2.0.2:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64"
|
||||
@@ -7969,6 +8045,10 @@ p-map@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
|
||||
|
||||
p-reduce@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa"
|
||||
|
||||
p-try@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
||||
@@ -8295,19 +8375,6 @@ pn@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
|
||||
|
||||
popsicle@^6.2.0:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-6.2.2.tgz#e273c8bd48181f73a59b199e2a5e25b692b3e237"
|
||||
dependencies:
|
||||
any-promise "^1.3.0"
|
||||
arrify "^1.0.0"
|
||||
concat-stream "^1.4.7"
|
||||
form-data "^0.2.0"
|
||||
make-error-cause "^1.0.1"
|
||||
throwback "^1.1.0"
|
||||
tough-cookie "^2.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
posix-character-classes@^0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
|
||||
@@ -8722,6 +8789,14 @@ postcss@^6.0.1:
|
||||
source-map "^0.6.1"
|
||||
supports-color "^4.4.0"
|
||||
|
||||
postcss@^6.0.14:
|
||||
version "6.0.21"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d"
|
||||
dependencies:
|
||||
chalk "^2.3.2"
|
||||
source-map "^0.6.1"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
postinstall-build@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/postinstall-build/-/postinstall-build-5.0.1.tgz#b917a9079b26178d9a24af5a5cd8cb4a991d11b9"
|
||||
@@ -8774,6 +8849,10 @@ prepend-http@^1.0.0, prepend-http@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
|
||||
|
||||
prepend-http@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
|
||||
|
||||
preserve@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
|
||||
@@ -9072,6 +9151,14 @@ query-string@^5.0.0:
|
||||
object-assign "^4.1.0"
|
||||
strict-uri-encode "^1.0.0"
|
||||
|
||||
query-string@^5.0.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
|
||||
dependencies:
|
||||
decode-uri-component "^0.2.0"
|
||||
object-assign "^4.1.0"
|
||||
strict-uri-encode "^1.0.0"
|
||||
|
||||
querystring-es3@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
|
||||
@@ -9759,6 +9846,10 @@ resolve-from@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
|
||||
|
||||
resolve-from@~4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
|
||||
resolve-url@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
||||
@@ -9903,6 +9994,21 @@ sane@^2.0.0:
|
||||
optionalDependencies:
|
||||
fsevents "^1.1.1"
|
||||
|
||||
sanitize-html@~1.18.2:
|
||||
version "1.18.2"
|
||||
resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.18.2.tgz#61877ba5a910327e42880a28803c2fbafa8e4642"
|
||||
dependencies:
|
||||
chalk "^2.3.0"
|
||||
htmlparser2 "^3.9.0"
|
||||
lodash.clonedeep "^4.5.0"
|
||||
lodash.escaperegexp "^4.1.2"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.isstring "^4.0.1"
|
||||
lodash.mergewith "^4.6.0"
|
||||
postcss "^6.0.14"
|
||||
srcset "^1.0.0"
|
||||
xtend "^4.0.0"
|
||||
|
||||
sass-graph@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
|
||||
@@ -10230,6 +10336,10 @@ smart-buffer@^1.0.13, smart-buffer@^1.0.4:
|
||||
version "1.1.15"
|
||||
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"
|
||||
|
||||
smartquotes@~2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/smartquotes/-/smartquotes-2.3.1.tgz#01ebb595d6c7a9e24d90e8cb95c17d0e1af49407"
|
||||
|
||||
smoothscroll-polyfill@^0.3.5:
|
||||
version "0.3.6"
|
||||
resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.3.6.tgz#492be845195157cdc2fc529a95d89e7a71509172"
|
||||
@@ -10314,6 +10424,12 @@ sort-keys@^1.0.0:
|
||||
dependencies:
|
||||
is-plain-obj "^1.0.0"
|
||||
|
||||
sort-keys@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128"
|
||||
dependencies:
|
||||
is-plain-obj "^1.0.0"
|
||||
|
||||
source-list-map@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
|
||||
@@ -10398,6 +10514,13 @@ sprintf-js@~1.0.2:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
|
||||
srcset@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/srcset/-/srcset-1.0.0.tgz#a5669de12b42f3b1d5e83ed03c71046fc48f41ef"
|
||||
dependencies:
|
||||
array-uniq "^1.0.2"
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
|
||||
@@ -10701,6 +10824,12 @@ supports-color@^5.2.0:
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
svgo@^0.7.0:
|
||||
version "0.7.2"
|
||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
|
||||
@@ -10849,12 +10978,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
|
||||
throwback@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/throwback/-/throwback-1.1.1.tgz#f007e7c17604a6d16d7a07c41aa0e8fedc6184a4"
|
||||
dependencies:
|
||||
any-promise "^1.3.0"
|
||||
|
||||
thunkify@~2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
|
||||
@@ -10899,7 +11022,7 @@ titlecase@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/titlecase/-/titlecase-1.1.2.tgz#78113d1108086b8326331a3247dea8f5a49ea853"
|
||||
|
||||
tlds@^1.196.0, tlds@^1.57.0:
|
||||
tlds@^1.187.0, tlds@^1.196.0, tlds@^1.57.0:
|
||||
version "1.199.0"
|
||||
resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.199.0.tgz#a4fc8c3058216488a80aaaebb427925007e55217"
|
||||
|
||||
@@ -10968,7 +11091,7 @@ to-space-case@^1.0.0:
|
||||
dependencies:
|
||||
to-no-case "^1.0.0"
|
||||
|
||||
to-title-case@^1.0.0:
|
||||
to-title-case@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/to-title-case/-/to-title-case-1.0.0.tgz#aca88f89d6064de50108a97cea0db44827e80061"
|
||||
dependencies:
|
||||
@@ -10999,7 +11122,7 @@ touch@^3.1.0:
|
||||
dependencies:
|
||||
nopt "~1.0.10"
|
||||
|
||||
tough-cookie@>=2.3.3, tough-cookie@^2.0.0, tough-cookie@^2.2.0, tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
|
||||
tough-cookie@>=2.3.3, tough-cookie@^2.2.0, tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
|
||||
dependencies:
|
||||
@@ -11293,6 +11416,13 @@ url-parse-lax@^1.0.0:
|
||||
dependencies:
|
||||
prepend-http "^1.0.1"
|
||||
|
||||
url-regex@~4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-4.1.1.tgz#a5617b22e15e26dac57ce74c3f52088bcdfec995"
|
||||
dependencies:
|
||||
ip-regex "^1.0.1"
|
||||
tlds "^1.187.0"
|
||||
|
||||
url-search-params@^0.9.0:
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/url-search-params/-/url-search-params-0.9.0.tgz#e71d7764a6503533cbfe9771b2963cb61ea1c225"
|
||||
@@ -11371,6 +11501,10 @@ verror@1.10.0:
|
||||
core-util-is "1.0.2"
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
video-extensions@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/video-extensions/-/video-extensions-1.1.0.tgz#eaa86b45f29a853c2b873e9d8e23b513712997d6"
|
||||
|
||||
vm-browserify@0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
|
||||
|
||||
Reference in New Issue
Block a user