summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-09-23 12:29:54 -0400
committerGitHub <noreply@github.com>2016-09-23 12:29:54 -0400
commit93f2b6a83302ceef5c98be4fb696840608ad3bc3 (patch)
tree89e86c5983058189f032c817573bfd945491b4e7
parent214f9c13a261064733c23d762fa521444fbd7a9c (diff)
downloadchat-93f2b6a83302ceef5c98be4fb696840608ad3bc3.tar.gz
chat-93f2b6a83302ceef5c98be4fb696840608ad3bc3.tar.bz2
chat-93f2b6a83302ceef5c98be4fb696840608ad3bc3.zip
Updating ESLint (#4085)
-rw-r--r--webapp/.eslintrc.json31
-rw-r--r--webapp/actions/global_actions.jsx2
-rw-r--r--webapp/client/client.jsx4
-rw-r--r--webapp/components/activity_log_modal.jsx2
-rw-r--r--webapp/components/admin_console/admin_navbar_dropdown.jsx4
-rw-r--r--webapp/components/admin_console/admin_sidebar.jsx2
-rw-r--r--webapp/components/admin_console/audits.jsx2
-rw-r--r--webapp/components/admin_console/cluster_settings.jsx4
-rw-r--r--webapp/components/admin_console/cluster_table.jsx2
-rw-r--r--webapp/components/admin_console/compliance_reports.jsx4
-rw-r--r--webapp/components/admin_console/email_connection_test.jsx4
-rw-r--r--webapp/components/admin_console/ldap_test_button.jsx2
-rw-r--r--webapp/components/admin_console/recycle_db.jsx6
-rw-r--r--webapp/components/admin_console/reload_config.jsx6
-rw-r--r--webapp/components/admin_console/sync_now_button.jsx4
-rw-r--r--webapp/components/admin_console/user_item.jsx2
-rw-r--r--webapp/components/audit_table.jsx2
-rw-r--r--webapp/components/backstage/components/backstage_header.jsx2
-rw-r--r--webapp/components/backstage/components/backstage_list.jsx2
-rw-r--r--webapp/components/channel_header.jsx2
-rw-r--r--webapp/components/channel_switch_modal.jsx2
-rw-r--r--webapp/components/code_preview.jsx2
-rw-r--r--webapp/components/create_team/components/display_name.jsx2
-rw-r--r--webapp/components/emoji/components/emoji_list.jsx4
-rw-r--r--webapp/components/emoji/components/emoji_list_item.jsx2
-rw-r--r--webapp/components/file_upload_overlay.jsx2
-rw-r--r--webapp/components/filtered_channel_list.jsx2
-rw-r--r--webapp/components/get_link_modal.jsx2
-rw-r--r--webapp/components/header_footer_template.jsx4
-rw-r--r--webapp/components/integrations/components/installed_outgoing_webhook.jsx2
-rw-r--r--webapp/components/invite_member_modal.jsx2
-rw-r--r--webapp/components/loading_screen.jsx6
-rw-r--r--webapp/components/navbar.jsx14
-rw-r--r--webapp/components/navbar_dropdown.jsx8
-rw-r--r--webapp/components/permalink_view.jsx2
-rw-r--r--webapp/components/post_view/components/post_attachment.jsx15
-rw-r--r--webapp/components/post_view/components/post_attachment_list.jsx2
-rw-r--r--webapp/components/post_view/components/post_body.jsx2
-rw-r--r--webapp/components/post_view/components/post_body_additional_content.jsx2
-rw-r--r--webapp/components/post_view/post_view_cache.jsx2
-rw-r--r--webapp/components/rename_channel_modal.jsx2
-rw-r--r--webapp/components/rhs_comment.jsx2
-rw-r--r--webapp/components/rhs_header_post.jsx2
-rw-r--r--webapp/components/rhs_thread.jsx2
-rw-r--r--webapp/components/search_bar.jsx4
-rw-r--r--webapp/components/search_results_item.jsx2
-rw-r--r--webapp/components/setting_item_max.jsx3
-rw-r--r--webapp/components/settings_sidebar.jsx4
-rw-r--r--webapp/components/sidebar.jsx4
-rw-r--r--webapp/components/sidebar_right.jsx6
-rw-r--r--webapp/components/sidebar_right_menu.jsx32
-rw-r--r--webapp/components/suggestion/channel_mention_provider.jsx2
-rw-r--r--webapp/components/suggestion/search_channel_provider.jsx2
-rw-r--r--webapp/components/suggestion/search_user_provider.jsx2
-rw-r--r--webapp/components/suggestion/switch_channel_provider.jsx8
-rw-r--r--webapp/components/team_general_tab.jsx5
-rw-r--r--webapp/components/team_import_tab.jsx4
-rw-r--r--webapp/components/team_members_dropdown.jsx6
-rw-r--r--webapp/components/textbox.jsx3
-rw-r--r--webapp/components/tutorial/tutorial_tip.jsx2
-rw-r--r--webapp/components/user_profile.jsx2
-rw-r--r--webapp/components/user_settings/custom_theme_chooser.jsx18
-rw-r--r--webapp/components/user_settings/desktop_notification_settings.jsx2
-rw-r--r--webapp/components/user_settings/user_settings_notifications.jsx32
-rw-r--r--webapp/components/user_settings/user_settings_security.jsx8
-rw-r--r--webapp/components/user_settings/user_settings_theme.jsx2
-rw-r--r--webapp/components/webrtc/components/webrtc_sidebar.jsx2
-rw-r--r--webapp/i18n/i18n.jsx2
-rw-r--r--webapp/package.json4
-rw-r--r--webapp/utils/channel_intro_messages.jsx6
-rw-r--r--webapp/utils/markdown.jsx2
-rw-r--r--webapp/utils/syntax_hightlighting.jsx2
-rw-r--r--webapp/utils/text_formatting.jsx6
73 files changed, 180 insertions, 173 deletions
diff --git a/webapp/.eslintrc.json b/webapp/.eslintrc.json
index c5c100e6e..2762483ef 100644
--- a/webapp/.eslintrc.json
+++ b/webapp/.eslintrc.json
@@ -36,6 +36,7 @@
"block-scoped-var": 2,
"brace-style": [2, "1tbs", { "allowSingleLine": false }],
"camelcase": [2, {"properties": "never"}],
+ "class-methods-use-this": 1,
"comma-dangle": [2, "never"],
"comma-spacing": [2, {"before": false, "after": true}],
"comma-style": [2, "last"],
@@ -48,6 +49,7 @@
"dot-location": [2, "object"],
"dot-notation": 2,
"eqeqeq": [2, "smart"],
+ "func-call-spacing": [2, "never"],
"func-names": 2,
"func-style": [2, "declaration"],
"generator-star-spacing": [2, {"before": false, "after": true}],
@@ -56,14 +58,16 @@
"id-blacklist": 0,
"indent": [2, 4, {"SwitchCase": 0}],
"jsx-quotes": [2, "prefer-single"],
- "key-spacing": [2, {"beforeColon": false, "afterColon": true}],
+ "key-spacing": [2, {"beforeColon": false, "afterColon": true, "mode": "strict"}],
"keyword-spacing": [2, {"before": true, "after": true, "overrides": {}}],
+ "line-comment-position": 0,
"linebreak-style": 2,
"lines-around-comment": [2, { "beforeBlockComment": true, "beforeLineComment": true, "allowBlockStart": true, "allowBlockEnd": true }],
"max-lines": [1, {"max": 450, "skipBlankLines": true, "skipComments": false}],
"max-nested-callbacks": [1, {"max":1}],
"max-nested-callbacks": [2, {"max":2}],
"max-statements-per-line": [2, {"max": 1}],
+ "multiline-ternary": [1, "never"],
"new-cap": 2,
"new-parens": 2,
"newline-before-return": 0,
@@ -99,6 +103,8 @@
"no-fallthrough": 2,
"no-floating-decimal": 2,
"no-func-assign": 2,
+ "no-global-assign": 2,
+ "no-implicit-coercion": 2,
"no-implicit-globals": 0,
"no-implied-eval": 2,
"no-inner-declarations": 0,
@@ -131,12 +137,14 @@
"no-redeclare": 2,
"no-return-assign": [2, "always"],
"no-script-url": 2,
- "no-self-assign": 2,
+ "no-self-assign": [2, {"props": true}],
"no-self-compare": 2,
"no-sequences": 2,
"no-shadow": [2, {"hoist": "functions"}],
"no-shadow-restricted-names": 2,
"no-spaced-func": 2,
+ "no-tabs": 0,
+ "no-template-curly-in-string": 2,
"no-ternary": 0,
"no-this-before-super": 2,
"no-throw-literal": 2,
@@ -149,6 +157,7 @@
"no-unneeded-ternary": [2, {"defaultAssignment": false}],
"no-unreachable": 2,
"no-unsafe-finally": 2,
+ "no-unsafe-negation": 2,
"no-unused-expressions": 2,
"no-unused-vars": [2, {"vars": "all", "args": "after-used"}],
"no-use-before-define": [2, "nofunc"],
@@ -172,6 +181,7 @@
"padded-blocks": [2, "never"],
"prefer-arrow-callback": 2,
"prefer-const": 2,
+ "prefer-numeric-literals": 2,
"prefer-reflect": 2,
"prefer-rest-params": 2,
"prefer-spread": 2,
@@ -184,6 +194,7 @@
"react/jsx-closing-bracket-location": [2, { "location": "tag-aligned" }],
"react/jsx-curly-spacing": [2, "never"],
"react/jsx-equals-spacing": [2, "never"],
+ "react/jsx-filename-extension": 2,
"react/jsx-first-prop-new-line": [2, "multiline"],
"react/jsx-handler-names": 0,
"react/jsx-indent": [2, 4],
@@ -196,11 +207,10 @@
"react/jsx-no-target-blank": 2,
"react/jsx-no-undef": 2,
"react/jsx-pascal-case": 2,
- "react/jsx-filename-extension": 2,
"react/jsx-space-before-closing": [2, "never"],
"react/jsx-uses-react": 2,
"react/jsx-uses-vars": 2,
- "react/no-comment-textnodes": 2,
+ "react/jsx-no-comment-textnodes": 2,
"react/no-danger": 0,
"react/no-deprecated": 2,
"react/no-did-mount-set-state": 2,
@@ -219,19 +229,28 @@
"react/require-render-return": 2,
"react/self-closing-comp": 2,
"react/sort-comp": 0,
- "react/wrap-multilines": 2,
+ "react/jsx-wrap-multilines": 2,
+ "react/no-find-dom-node": 1,
+ "react/forbid-component-props": 0,
+ "react/no-danger-with-children": 2,
+ "react/no-unused-prop-types": [1, {"skipShapeProps": true}],
+ "react/style-prop-object": 2,
+ "react/no-children-prop": 2,
+ "react/no-unescaped-entities": 2,
"require-yield": 2,
"rest-spread-spacing": [2, "never"],
"semi": [2, "always"],
"semi-spacing": [2, {"before": false, "after": true}],
"sort-imports": 0,
+ "sort-keys": 0,
"space-before-blocks": [2, "always"],
"space-before-function-paren": [2, "never"],
"space-in-parens": [2, "never"],
"space-infix-ops": 2,
"space-unary-ops": [2, { "words": true, "nonwords": false }],
+ "symbol-description": 2,
"template-curly-spacing": [2, "never"],
- "valid-typeof": 2,
+ "valid-typeof": [2, {"requireStringLiterals": false}],
"vars-on-top": 0,
"wrap-iife": [2, "outside"],
"wrap-regex": 2,
diff --git a/webapp/actions/global_actions.jsx b/webapp/actions/global_actions.jsx
index 3b38d16b0..bc7562d44 100644
--- a/webapp/actions/global_actions.jsx
+++ b/webapp/actions/global_actions.jsx
@@ -253,7 +253,7 @@ export function loadMorePostsTop(id, isFocusPost) {
export function emitLoadMorePostsFocusedBottomEvent() {
const id = PostStore.getFocusedPostId();
const latestPostId = PostStore.getLatestPost(id).id;
- AsyncClient.getPostsAfter(latestPostId, 0, Constants.POST_CHUNK_SIZE, !!id);
+ AsyncClient.getPostsAfter(latestPostId, 0, Constants.POST_CHUNK_SIZE, Boolean(id));
}
export function emitUserPostedEvent(post) {
diff --git a/webapp/client/client.jsx b/webapp/client/client.jsx
index 4cd9c7c7c..439d41f78 100644
--- a/webapp/client/client.jsx
+++ b/webapp/client/client.jsx
@@ -749,7 +749,7 @@ export default class Client {
updateActive(userId, active, success, error) {
var data = {};
data.user_id = userId;
- data.active = '' + active;
+ data.active = String(active);
request.
post(`${this.getUsersRoute()}/update_active`).
@@ -1336,7 +1336,7 @@ export default class Client {
set(this.defaultHeaders).
type('application/json').
accept('application/json').
- send({channelId, command, suggest: '' + suggest}).
+ send({channelId, command, suggest: String(suggest)}).
end(this.handleResponse.bind(this, 'executeCommand', success, error));
this.track('api', 'api_integrations_used');
diff --git a/webapp/components/activity_log_modal.jsx b/webapp/components/activity_log_modal.jsx
index 7560cf5d9..2c093e1d2 100644
--- a/webapp/components/activity_log_modal.jsx
+++ b/webapp/components/activity_log_modal.jsx
@@ -90,7 +90,7 @@ export default class ActivityLogModal extends React.Component {
this.setState({moreInfo: newMoreInfo});
}
render() {
- let activityList = [];
+ const activityList = [];
for (let i = 0; i < this.state.sessions.length; i++) {
const currentSession = this.state.sessions[i];
diff --git a/webapp/components/admin_console/admin_navbar_dropdown.jsx b/webapp/components/admin_console/admin_navbar_dropdown.jsx
index 0bac263ef..f57635a11 100644
--- a/webapp/components/admin_console/admin_navbar_dropdown.jsx
+++ b/webapp/components/admin_console/admin_navbar_dropdown.jsx
@@ -77,7 +77,7 @@ export default class AdminNavbarDropdown extends React.Component {
<li
key='teamDiv'
className='divider'
- ></li>
+ />
);
}
@@ -118,7 +118,7 @@ export default class AdminNavbarDropdown extends React.Component {
<li
key='teamDiv'
className='divider'
- ></li>
+ />
<li>
<a
href='#'
diff --git a/webapp/components/admin_console/admin_sidebar.jsx b/webapp/components/admin_console/admin_sidebar.jsx
index 8600e1e8c..ddaa47ff8 100644
--- a/webapp/components/admin_console/admin_sidebar.jsx
+++ b/webapp/components/admin_console/admin_sidebar.jsx
@@ -124,7 +124,7 @@ export default class AdminSidebar extends React.Component {
>
<i
className='fa fa-plus'
- ></i>
+ />
</a>
</OverlayTrigger>
</span>
diff --git a/webapp/components/admin_console/audits.jsx b/webapp/components/admin_console/audits.jsx
index cb500f29c..5e0e03607 100644
--- a/webapp/components/admin_console/audits.jsx
+++ b/webapp/components/admin_console/audits.jsx
@@ -86,7 +86,7 @@ export default class Audits extends React.Component {
className='btn btn-link pull-right'
onClick={this.reload}
>
- <i className='fa fa-refresh'></i>
+ <i className='fa fa-refresh'/>
<FormattedMessage
id='admin.audits.reload'
defaultMessage='Reload User Activity Logs'
diff --git a/webapp/components/admin_console/cluster_settings.jsx b/webapp/components/admin_console/cluster_settings.jsx
index f45bafa6d..8aab905e4 100644
--- a/webapp/components/admin_console/cluster_settings.jsx
+++ b/webapp/components/admin_console/cluster_settings.jsx
@@ -82,7 +82,7 @@ export default class ClusterSettings extends AdminSettings {
style={{marginBottom: '10px'}}
className='alert alert-warning'
>
- <i className='fa fa-warning'></i>
+ <i className='fa fa-warning'/>
<FormattedHTMLMessage
id='admin.cluster.loadedFrom'
defaultMessage='This configuration file was loaded from Node ID {clusterId}. Please see the Troubleshooting Guide in our <a href="http://docs.mattermost.com/deployment/cluster.html" target="_blank">documentation</a> if you are accessing the System Console through a load balancer and experiencing issues.'
@@ -101,7 +101,7 @@ export default class ClusterSettings extends AdminSettings {
style={{marginBottom: '10px'}}
className='alert alert-warning'
>
- <i className='fa fa-warning'></i>
+ <i className='fa fa-warning'/>
<FormattedMessage
id='admin.cluster.should_not_change'
defaultMessage='WARNING: These settings may not sync with the other servers in the cluster. High Availability inter-node communication will not start until you modify the config.json to be identical on all servers and restart Mattermost. Please see the <a href="http://docs.mattermost.com/deployment/cluster.html" target="_blank">documentation</a> on how to add or remove a server from the cluster. If you are accessing the System Console through a load balancer and experiencing issues, please see the Troubleshooting Guide in our <a href="http://docs.mattermost.com/deployment/cluster.html" target="_blank">documentation</a>.'
diff --git a/webapp/components/admin_console/cluster_table.jsx b/webapp/components/admin_console/cluster_table.jsx
index c8a98fd76..4aca796a0 100644
--- a/webapp/components/admin_console/cluster_table.jsx
+++ b/webapp/components/admin_console/cluster_table.jsx
@@ -121,7 +121,7 @@ export default class ClusterTable extends React.Component {
className='btn btn-link'
onClick={this.props.reload}
>
- <i className='fa fa-refresh'></i>
+ <i className='fa fa-refresh'/>
<FormattedMessage
id='admin.cluster.status_table.reload'
defaultMessage=' Reload Cluster Status'
diff --git a/webapp/components/admin_console/compliance_reports.jsx b/webapp/components/admin_console/compliance_reports.jsx
index eb7faa0f6..aac09c0de 100644
--- a/webapp/components/admin_console/compliance_reports.jsx
+++ b/webapp/components/admin_console/compliance_reports.jsx
@@ -201,7 +201,7 @@ export default class ComplianceReports extends React.Component {
<table className='table'>
<thead>
<tr>
- <th></th>
+ <th/>
<th>
<FormattedMessage
id='admin.compliance_table.timestamp'
@@ -373,7 +373,7 @@ export default class ComplianceReports extends React.Component {
className='btn btn-link'
onClick={this.reload}
>
- <i className='fa fa-refresh'></i>
+ <i className='fa fa-refresh'/>
<FormattedMessage
id='admin.compliance_reports.reload'
defaultMessage='Reload Completed Compliance Reports'
diff --git a/webapp/components/admin_console/email_connection_test.jsx b/webapp/components/admin_console/email_connection_test.jsx
index 7713f0960..f96d540d6 100644
--- a/webapp/components/admin_console/email_connection_test.jsx
+++ b/webapp/components/admin_console/email_connection_test.jsx
@@ -64,7 +64,7 @@ export default class EmailConnectionTestButton extends React.Component {
if (this.state.success) {
testMessage = (
<div className='alert alert-success'>
- <i className='fa fa-check'></i>
+ <i className='fa fa-check'/>
<FormattedMessage
id='admin.email.emailSuccess'
defaultMessage='No errors were reported while sending an email. Please check your inbox to make sure.'
@@ -74,7 +74,7 @@ export default class EmailConnectionTestButton extends React.Component {
} else if (this.state.fail) {
testMessage = (
<div className='alert alert-warning'>
- <i className='fa fa-warning'></i>
+ <i className='fa fa-warning'/>
<FormattedMessage
id='admin.email.emailFail'
defaultMessage='Connection unsuccessful: {error}'
diff --git a/webapp/components/admin_console/ldap_test_button.jsx b/webapp/components/admin_console/ldap_test_button.jsx
index 16a433c23..e077aec5f 100644
--- a/webapp/components/admin_console/ldap_test_button.jsx
+++ b/webapp/components/admin_console/ldap_test_button.jsx
@@ -96,7 +96,7 @@ export default class LdapTestButton extends React.Component {
);
}
- let helpText = (
+ const helpText = (
<FormattedHTMLMessage
id='admin.ldap.testHelpText'
defaultMessage='Tests if the Mattermost server can connect to the AD/LDAP server specified. See log file for more detailed error messages.'
diff --git a/webapp/components/admin_console/recycle_db.jsx b/webapp/components/admin_console/recycle_db.jsx
index db13b5295..53e8e7436 100644
--- a/webapp/components/admin_console/recycle_db.jsx
+++ b/webapp/components/admin_console/recycle_db.jsx
@@ -45,14 +45,14 @@ export default class RecycleDbButton extends React.Component {
render() {
if (global.window.mm_license.IsLicensed !== 'true') {
- return <div></div>;
+ return <div/>;
}
let testMessage = null;
if (this.state.fail) {
testMessage = (
<div className='alert alert-warning'>
- <i className='fa fa-warning'></i>
+ <i className='fa fa-warning'/>
<FormattedMessage
id='admin.recycle.reloadFail'
defaultMessage='Recycling unsuccessful: {error}'
@@ -64,7 +64,7 @@ export default class RecycleDbButton extends React.Component {
);
}
- let helpText = (
+ const helpText = (
<FormattedHTMLMessage
id='admin.recycle.recycleDescription'
defaultMessage='Deployments using multiple databases can switch from one master database to another without restarting the Mattermost server by updating "config.json" to the new desired configuration and using the <a href="../general/configuration"><b>Configuration > Reload Configuration from Disk</b></a> feature to load the new settings while the server is running. The administrator should then use <b>Recycle Database Connections</b> feature to recycle the database connections based on the new settings.'
diff --git a/webapp/components/admin_console/reload_config.jsx b/webapp/components/admin_console/reload_config.jsx
index cf65fee8b..0b50d5803 100644
--- a/webapp/components/admin_console/reload_config.jsx
+++ b/webapp/components/admin_console/reload_config.jsx
@@ -48,14 +48,14 @@ export default class ReloadConfigButton extends React.Component {
render() {
if (global.window.mm_license.IsLicensed !== 'true') {
- return <div></div>;
+ return <div/>;
}
let testMessage = null;
if (this.state.fail) {
testMessage = (
<div className='alert alert-warning'>
- <i className='fa fa-warning'></i>
+ <i className='fa fa-warning'/>
<FormattedMessage
id='admin.reload.reloadFail'
defaultMessage='Reload unsuccessful: {error}'
@@ -67,7 +67,7 @@ export default class ReloadConfigButton extends React.Component {
);
}
- let helpText = (
+ const helpText = (
<FormattedHTMLMessage
id='admin.reload.reloadDescription'
defaultMessage='Deployments using multiple databases can switch from one master database to another without restarting the Mattermost server by updating "config.json" to the new desired configuration and using the <b>Reload Configuration from Disk</b> feature to load the new settings while the server is running. The administrator should then use the <a href="../advanced/database"><b>Database > Recycle Database Connections</b></a> feature to recycle the database connections based on the new settings.'
diff --git a/webapp/components/admin_console/sync_now_button.jsx b/webapp/components/admin_console/sync_now_button.jsx
index e91f902bf..95d126291 100644
--- a/webapp/components/admin_console/sync_now_button.jsx
+++ b/webapp/components/admin_console/sync_now_button.jsx
@@ -53,7 +53,7 @@ export default class SyncNowButton extends React.Component {
if (this.state.fail) {
failMessage = (
<div className='alert alert-warning'>
- <i className='fa fa-warning'></i>
+ <i className='fa fa-warning'/>
<FormattedMessage
id='admin.ldap.syncFailure'
defaultMessage='Sync Failure: {error}'
@@ -65,7 +65,7 @@ export default class SyncNowButton extends React.Component {
);
}
- let helpText = (
+ const helpText = (
<FormattedHTMLMessage
id='admin.ldap.syncNowHelpText'
defaultMessage='Initiates an AD/LDAP synchronization immediately.'
diff --git a/webapp/components/admin_console/user_item.jsx b/webapp/components/admin_console/user_item.jsx
index 632233309..1e6f523b3 100644
--- a/webapp/components/admin_console/user_item.jsx
+++ b/webapp/components/admin_console/user_item.jsx
@@ -562,7 +562,7 @@ export default class UserItem extends React.Component {
aria-expanded='true'
>
<span>{currentRoles} </span>
- <span className='caret'></span>
+ <span className='caret'/>
</a>
<ul
className='dropdown-menu member-menu'
diff --git a/webapp/components/audit_table.jsx b/webapp/components/audit_table.jsx
index 58b5b9af7..8638910a2 100644
--- a/webapp/components/audit_table.jsx
+++ b/webapp/components/audit_table.jsx
@@ -237,7 +237,7 @@ class AuditTable extends React.Component {
sContent = <td className='word-break--all'>{auditInfo.sessionId}</td>;
}
- let descStyle = {};
+ const descStyle = {};
if (auditInfo.desc.toLowerCase().indexOf('fail') !== -1) {
descStyle.color = 'red';
}
diff --git a/webapp/components/backstage/components/backstage_header.jsx b/webapp/components/backstage/components/backstage_header.jsx
index 37b4be349..c2dc187b7 100644
--- a/webapp/components/backstage/components/backstage_header.jsx
+++ b/webapp/components/backstage/components/backstage_header.jsx
@@ -20,7 +20,7 @@ export default class BackstageHeader extends React.Component {
key={'divider' + index}
className='backstage-header__divider'
>
- <i className='fa fa-angle-right'></i>
+ <i className='fa fa-angle-right'/>
</span>
);
}
diff --git a/webapp/components/backstage/components/backstage_list.jsx b/webapp/components/backstage/components/backstage_list.jsx
index ecb8783b7..974a55239 100644
--- a/webapp/components/backstage/components/backstage_list.jsx
+++ b/webapp/components/backstage/components/backstage_list.jsx
@@ -89,7 +89,7 @@ export default class BackstageList extends React.Component {
</div>
<div className='backstage-filters'>
<div className='backstage-filter__search'>
- <i className='fa fa-search'></i>
+ <i className='fa fa-search'/>
<input
type='search'
className='form-control'
diff --git a/webapp/components/channel_header.jsx b/webapp/components/channel_header.jsx
index 65c151d8a..8710c6486 100644
--- a/webapp/components/channel_header.jsx
+++ b/webapp/components/channel_header.jsx
@@ -113,7 +113,7 @@ export default class ChannelHeader extends React.Component {
}
shouldComponentUpdate(nextProps) {
- return !!nextProps.channelId;
+ return Boolean(nextProps.channelId);
}
onListenerChange() {
diff --git a/webapp/components/channel_switch_modal.jsx b/webapp/components/channel_switch_modal.jsx
index a962b5880..57bc8b2d0 100644
--- a/webapp/components/channel_switch_modal.jsx
+++ b/webapp/components/channel_switch_modal.jsx
@@ -99,7 +99,7 @@ export default class SwitchChannelModal extends React.Component {
}
render() {
- let message = this.state.error;
+ const message = this.state.error;
return (
<Modal
className='modal-browse-channel'
diff --git a/webapp/components/code_preview.jsx b/webapp/components/code_preview.jsx
index 5d1a661be..6625f45f4 100644
--- a/webapp/components/code_preview.jsx
+++ b/webapp/components/code_preview.jsx
@@ -65,7 +65,7 @@ export default class CodePreview extends React.Component {
}
static support(filename) {
- return !!SyntaxHighlighting.getLanguageFromFilename(filename);
+ return Boolean(SyntaxHighlighting.getLanguageFromFilename(filename));
}
render() {
diff --git a/webapp/components/create_team/components/display_name.jsx b/webapp/components/create_team/components/display_name.jsx
index b30aadd77..f880d2554 100644
--- a/webapp/components/create_team/components/display_name.jsx
+++ b/webapp/components/create_team/components/display_name.jsx
@@ -100,7 +100,7 @@ export default class TeamSignupDisplayNamePage extends React.Component {
<FormattedMessage
id='create_team.display_name.next'
defaultMessage='Next'
- /><i className='fa fa-chevron-right'></i>
+ /><i className='fa fa-chevron-right'/>
</button>
<div className='margin--extra'>
<Link to='/select_team'>
diff --git a/webapp/components/emoji/components/emoji_list.jsx b/webapp/components/emoji/components/emoji_list.jsx
index 273fc8a25..340fc6afc 100644
--- a/webapp/components/emoji/components/emoji_list.jsx
+++ b/webapp/components/emoji/components/emoji_list.jsx
@@ -69,7 +69,7 @@ export default class EmojiList extends React.Component {
const filter = this.state.filter.toLowerCase();
const isSystemAdmin = Utils.isSystemAdmin(this.props.user.roles);
- let emojis = [];
+ const emojis = [];
if (this.state.loading) {
emojis.push(
<LoadingScreen key='loading'/>
@@ -129,7 +129,7 @@ export default class EmojiList extends React.Component {
</div>
<div className='backstage-filters'>
<div className='backstage-filter__search'>
- <i className='fa fa-search'></i>
+ <i className='fa fa-search'/>
<input
type='search'
className='form-control'
diff --git a/webapp/components/emoji/components/emoji_list_item.jsx b/webapp/components/emoji/components/emoji_list_item.jsx
index 0882ff764..0428f0286 100644
--- a/webapp/components/emoji/components/emoji_list_item.jsx
+++ b/webapp/components/emoji/components/emoji_list_item.jsx
@@ -110,7 +110,7 @@ export default class EmojiListItem extends React.Component {
{creatorName}
</td>
<td className='emoji-list-item_actions'>
- {deleteButton}
+ {deleteButton}
</td>
</tr>
);
diff --git a/webapp/components/file_upload_overlay.jsx b/webapp/components/file_upload_overlay.jsx
index 25fafddf1..86697cd62 100644
--- a/webapp/components/file_upload_overlay.jsx
+++ b/webapp/components/file_upload_overlay.jsx
@@ -26,7 +26,7 @@ export default class FileUploadOverlay extends React.Component {
src={fileOverlayImage}
alt='Files'
/>
- <span><i className='fa fa-upload'></i>
+ <span><i className='fa fa-upload'/>
<FormattedMessage
id='upload_overlay.info'
defaultMessage='Drop a file to upload it.'
diff --git a/webapp/components/filtered_channel_list.jsx b/webapp/components/filtered_channel_list.jsx
index 259c5cbf2..fd50704ff 100644
--- a/webapp/components/filtered_channel_list.jsx
+++ b/webapp/components/filtered_channel_list.jsx
@@ -103,7 +103,7 @@ export default class FilteredChannelList extends React.Component {
return channels.filter((chan) => {
const filter = this.state.filter.toLowerCase();
- return !!((chan.name.toLowerCase().indexOf(filter) !== -1 || chan.display_name.toLowerCase().indexOf(filter) !== -1) && chan.delete_at === 0);
+ return Boolean((chan.name.toLowerCase().indexOf(filter) !== -1 || chan.display_name.toLowerCase().indexOf(filter) !== -1) && chan.delete_at === 0);
});
}
diff --git a/webapp/components/get_link_modal.jsx b/webapp/components/get_link_modal.jsx
index 0f41b3b29..5363ad217 100644
--- a/webapp/components/get_link_modal.jsx
+++ b/webapp/components/get_link_modal.jsx
@@ -97,7 +97,7 @@ export default class GetLinkModal extends React.Component {
if (this.state.copiedLink) {
copyLinkConfirm = (
<p className='alert alert-success alert--confirm'>
- <i className='fa fa-check'></i>
+ <i className='fa fa-check'/>
<FormattedMessage
id='get_link.clipboard'
defaultMessage=' Link copied to clipboard.'
diff --git a/webapp/components/header_footer_template.jsx b/webapp/components/header_footer_template.jsx
index d86741ab7..0c5f53861 100644
--- a/webapp/components/header_footer_template.jsx
+++ b/webapp/components/header_footer_template.jsx
@@ -16,7 +16,7 @@ export default class NotLoggedIn extends React.Component {
$('#root').removeClass('container-fluid');
}
render() {
- let content = [];
+ const content = [];
if (global.window.mm_config.HelpLink) {
content.push(
@@ -78,7 +78,7 @@ export default class NotLoggedIn extends React.Component {
<div className='inner-wrap'>
<div className='row content'>
{this.props.children}
- <div className='footer-push'></div>
+ <div className='footer-push'/>
</div>
<div className='row footer'>
<div className='footer-pane col-xs-12'>
diff --git a/webapp/components/integrations/components/installed_outgoing_webhook.jsx b/webapp/components/integrations/components/installed_outgoing_webhook.jsx
index 4b478255c..664439843 100644
--- a/webapp/components/integrations/components/installed_outgoing_webhook.jsx
+++ b/webapp/components/integrations/components/installed_outgoing_webhook.jsx
@@ -115,7 +115,7 @@ export default class InstalledOutgoingWebhook extends React.Component {
);
}
- let urls = (
+ const urls = (
<div className='item-details__row'>
<span className='item-details__url'>
<FormattedMessage
diff --git a/webapp/components/invite_member_modal.jsx b/webapp/components/invite_member_modal.jsx
index e5ac63fc7..f4fd1d712 100644
--- a/webapp/components/invite_member_modal.jsx
+++ b/webapp/components/invite_member_modal.jsx
@@ -265,7 +265,7 @@ class InviteMemberModal extends React.Component {
className='btn btn-link remove__member'
onClick={this.removeInviteFields.bind(this, index)}
>
- <span className='fa fa-trash'></span>
+ <span className='fa fa-trash'/>
</button>
</div>
);
diff --git a/webapp/components/loading_screen.jsx b/webapp/components/loading_screen.jsx
index 288eda389..fe2cd6b11 100644
--- a/webapp/components/loading_screen.jsx
+++ b/webapp/components/loading_screen.jsx
@@ -31,9 +31,9 @@ export default class LoadingScreen extends React.Component {
<h3>
{message}
</h3>
- <div className='round round-1'></div>
- <div className='round round-2'></div>
- <div className='round round-3'></div>
+ <div className='round round-1'/>
+ <div className='round round-2'/>
+ <div className='round round-3'/>
</div>
</div>
);
diff --git a/webapp/components/navbar.jsx b/webapp/components/navbar.jsx
index 1e7711d2c..d55c2723b 100644
--- a/webapp/components/navbar.jsx
+++ b/webapp/components/navbar.jsx
@@ -446,7 +446,7 @@ export default class Navbar extends React.Component {
aria-expanded='true'
>
<span className='heading'><StatusIcon status={this.getTeammateStatus()}/>{channelTitle} </span>
- <span className='fa fa-chevron-down header-dropdown__icon'></span>
+ <span className='fa fa-chevron-down header-dropdown__icon'/>
</a>
<ul
className='dropdown-menu'
@@ -496,9 +496,9 @@ export default class Navbar extends React.Component {
defaultMessage='Toggle sidebar'
/>
</span>
- <span className='icon-bar'></span>
- <span className='icon-bar'></span>
- <span className='icon-bar'></span>
+ <span className='icon-bar'/>
+ <span className='icon-bar'/>
+ <span className='icon-bar'/>
</button>
);
} else {
@@ -517,9 +517,9 @@ export default class Navbar extends React.Component {
defaultMessage='Toggle sidebar'
/>
</span>
- <span className='icon-bar'></span>
- <span className='icon-bar'></span>
- <span className='icon-bar'></span>
+ <span className='icon-bar'/>
+ <span className='icon-bar'/>
+ <span className='icon-bar'/>
<NotifyCounts/>
</button>
);
diff --git a/webapp/components/navbar_dropdown.jsx b/webapp/components/navbar_dropdown.jsx
index c29bf61c3..60be47767 100644
--- a/webapp/components/navbar_dropdown.jsx
+++ b/webapp/components/navbar_dropdown.jsx
@@ -278,7 +278,7 @@ export default class NavbarDropdown extends React.Component {
<li
key='teamDiv'
className='divider'
- ></li>
+ />
);
for (var index in this.state.teamMembers) {
@@ -409,15 +409,15 @@ export default class NavbarDropdown extends React.Component {
/>
</a>
</li>
- <li className='divider'></li>
+ <li className='divider'/>
{integrationsLink}
{this.renderCustomEmojiLink()}
- <li className='divider'></li>
+ <li className='divider'/>
{teamSettings}
{manageLink}
{sysAdminLink}
{teams}
- <li className='divider'></li>
+ <li className='divider'/>
{helpLink}
{reportLink}
<li>
diff --git a/webapp/components/permalink_view.jsx b/webapp/components/permalink_view.jsx
index 55e250d04..5cd2d0fff 100644
--- a/webapp/components/permalink_view.jsx
+++ b/webapp/components/permalink_view.jsx
@@ -81,7 +81,7 @@ export default class PermalinkView extends React.Component {
id='center_panel.recent'
defaultMessage='Click here to jump to recent messages. '
/>
- <i className='fa fa-arrow-down'></i>
+ <i className='fa fa-arrow-down'/>
</Link>
</div>
</div>
diff --git a/webapp/components/post_view/components/post_attachment.jsx b/webapp/components/post_view/components/post_attachment.jsx
index 4442b735a..57335b94a 100644
--- a/webapp/components/post_view/components/post_attachment.jsx
+++ b/webapp/components/post_view/components/post_attachment.jsx
@@ -87,7 +87,7 @@ class PostAttachment extends React.Component {
return '';
}
- let fieldTables = [];
+ const fieldTables = [];
let headerCols = [];
let bodyCols = [];
@@ -104,7 +104,7 @@ class PostAttachment extends React.Component {
>
<thead>
<tr>
- {headerCols}
+ {headerCols}
</tr>
</thead>
<tbody>
@@ -134,8 +134,7 @@ class PostAttachment extends React.Component {
className='attachment-field'
key={'attachment__field-' + i + '__' + nrTables}
dangerouslySetInnerHTML={{__html: TextFormatting.formatText(field.value || '')}}
- >
- </td>
+ />
);
rowPos += 1;
lastWasLong = !(field.short === true);
@@ -175,8 +174,7 @@ class PostAttachment extends React.Component {
<div
className='attachment__thumb-pretext'
dangerouslySetInnerHTML={{__html: TextFormatting.formatText(data.pretext)}}
- >
- </div>
+ />
);
}
@@ -250,8 +248,7 @@ class PostAttachment extends React.Component {
<div
className='attachment__text'
dangerouslySetInnerHTML={{__html: this.state.text}}
- >
- </div>
+ />
);
}
@@ -307,7 +304,7 @@ class PostAttachment extends React.Component {
{fields}
</div>
{thumb}
- <div style={{clear: 'both'}}></div>
+ <div style={{clear: 'both'}}/>
</div>
</div>
</div>
diff --git a/webapp/components/post_view/components/post_attachment_list.jsx b/webapp/components/post_view/components/post_attachment_list.jsx
index 7da9efbee..7e9d7980d 100644
--- a/webapp/components/post_view/components/post_attachment_list.jsx
+++ b/webapp/components/post_view/components/post_attachment_list.jsx
@@ -7,7 +7,7 @@ import React from 'react';
export default class PostAttachmentList extends React.Component {
render() {
- let content = [];
+ const content = [];
this.props.attachments.forEach((attachment, i) => {
content.push(
<PostAttachment
diff --git a/webapp/components/post_view/components/post_body.jsx b/webapp/components/post_view/components/post_body.jsx
index 3295f5bac..5c02e9c40 100644
--- a/webapp/components/post_view/components/post_body.jsx
+++ b/webapp/components/post_view/components/post_body.jsx
@@ -169,7 +169,7 @@ export default class PostBody extends React.Component {
);
}
- let messageWrapper = (
+ const messageWrapper = (
<div
key={`${post.id}_message`}
id={`${post.id}_message`}
diff --git a/webapp/components/post_view/components/post_body_additional_content.jsx b/webapp/components/post_view/components/post_body_additional_content.jsx
index a5d8afa61..5cdbef050 100644
--- a/webapp/components/post_view/components/post_body_additional_content.jsx
+++ b/webapp/components/post_view/components/post_body_additional_content.jsx
@@ -174,7 +174,7 @@ export default class PostBodyAdditionalContent extends React.Component {
}
if (this.isLinkToggleable()) {
- let messageWithToggle = [];
+ const messageWithToggle = [];
// if message has only one line and starts with a link place toggle in this only line
// else - place it in new line between message and embed
diff --git a/webapp/components/post_view/post_view_cache.jsx b/webapp/components/post_view/post_view_cache.jsx
index 13ce79d7f..8ed225e4b 100644
--- a/webapp/components/post_view/post_view_cache.jsx
+++ b/webapp/components/post_view/post_view_cache.jsx
@@ -67,7 +67,7 @@ export default class PostViewCache extends React.Component {
const channels = this.state.channels;
const currentChannelId = this.state.currentChannelId;
- let postViews = [];
+ const postViews = [];
for (let i = 0; i < channels.length; i++) {
postViews.push(
<PostViewController
diff --git a/webapp/components/rename_channel_modal.jsx b/webapp/components/rename_channel_modal.jsx
index 794177373..bb6d4f26d 100644
--- a/webapp/components/rename_channel_modal.jsx
+++ b/webapp/components/rename_channel_modal.jsx
@@ -216,7 +216,7 @@ export class RenameChannelModal extends React.Component {
const {formatMessage} = this.props.intl;
let handleInputLabel = formatMessage(holders.handle);
- let handleInputClass = 'form-control';
+ const handleInputClass = 'form-control';
let readOnlyHandleInput = false;
if (this.state.channelName === Constants.DEFAULT_CHANNEL) {
handleInputLabel += formatMessage(holders.defaultError);
diff --git a/webapp/components/rhs_comment.jsx b/webapp/components/rhs_comment.jsx
index 2419e8316..e1af1227b 100644
--- a/webapp/components/rhs_comment.jsx
+++ b/webapp/components/rhs_comment.jsx
@@ -277,7 +277,7 @@ export default class RhsComment extends React.Component {
);
}
- let profilePic = (
+ const profilePic = (
<ProfilePicture
src={PostUtils.getProfilePicSrcForPost(post, timestamp)}
status={this.props.status}
diff --git a/webapp/components/rhs_header_post.jsx b/webapp/components/rhs_header_post.jsx
index d0d720bb5..54ace681e 100644
--- a/webapp/components/rhs_header_post.jsx
+++ b/webapp/components/rhs_header_post.jsx
@@ -123,7 +123,7 @@ export default class RhsHeaderPost extends React.Component {
placement='top'
overlay={backToResultsTooltip}
>
- <i className='fa fa-angle-left'></i>
+ <i className='fa fa-angle-left'/>
</OverlayTrigger>
</a>
);
diff --git a/webapp/components/rhs_thread.jsx b/webapp/components/rhs_thread.jsx
index 73c2fb9dc..7d0de8590 100644
--- a/webapp/components/rhs_thread.jsx
+++ b/webapp/components/rhs_thread.jsx
@@ -247,7 +247,7 @@ export default class RhsThread extends React.Component {
if (postsArray == null || selected == null) {
return (
- <div></div>
+ <div/>
);
}
diff --git a/webapp/components/search_bar.jsx b/webapp/components/search_bar.jsx
index 970da7925..dc00095ed 100644
--- a/webapp/components/search_bar.jsx
+++ b/webapp/components/search_bar.jsx
@@ -148,7 +148,7 @@ export default class SearchBar extends React.Component {
render() {
var isSearching = null;
if (this.state.isSearching) {
- isSearching = <span className={'fa fa-refresh fa-refresh-animate icon--refresh icon--rotate'}></span>;
+ isSearching = <span className={'fa fa-refresh fa-refresh-animate icon--refresh icon--rotate'}/>;
}
let helpClass = 'search-help-popover';
@@ -162,7 +162,7 @@ export default class SearchBar extends React.Component {
className='sidebar__collapse'
onClick={this.handleClose}
>
- <span className='fa fa-angle-left'></span>
+ <span className='fa fa-angle-left'/>
</div>
<span
className='search__clear'
diff --git a/webapp/components/search_results_item.jsx b/webapp/components/search_results_item.jsx
index 5cc0b4c54..1d36f7543 100644
--- a/webapp/components/search_results_item.jsx
+++ b/webapp/components/search_results_item.jsx
@@ -96,7 +96,7 @@ export default class SearchResultsItem extends React.Component {
botIndicator = <li className='bot-indicator'>{Constants.BOT_NAME}</li>;
}
- let profilePic = (
+ const profilePic = (
<img
src={PostUtils.getProfilePicSrcForPost(post, timestamp)}
height='36'
diff --git a/webapp/components/setting_item_max.jsx b/webapp/components/setting_item_max.jsx
index ad765a7d6..904e6c8d1 100644
--- a/webapp/components/setting_item_max.jsx
+++ b/webapp/components/setting_item_max.jsx
@@ -53,8 +53,7 @@ export default class SettingItemMax extends React.Component {
href='#'
onClick={this.props.submit}
value={Utils.localizeMessage('setting_item_max.save', 'Save')}
- >
- </input>
+ />
);
}
diff --git a/webapp/components/settings_sidebar.jsx b/webapp/components/settings_sidebar.jsx
index 3ccd372f7..d537b6d10 100644
--- a/webapp/components/settings_sidebar.jsx
+++ b/webapp/components/settings_sidebar.jsx
@@ -23,8 +23,8 @@ export default class SettingsSidebar extends React.Component {
}
}
render() {
- let tabList = this.props.tabs.map((tab) => {
- let key = `${tab.name}_li`;
+ const tabList = this.props.tabs.map((tab) => {
+ const key = `${tab.name}_li`;
let className = '';
if (this.props.activeTab === tab.name) {
className = 'active';
diff --git a/webapp/components/sidebar.jsx b/webapp/components/sidebar.jsx
index df1df22a8..712d75548 100644
--- a/webapp/components/sidebar.jsx
+++ b/webapp/components/sidebar.jsx
@@ -529,9 +529,9 @@ export default class Sidebar extends React.Component {
var icon = null;
if (channel.type === 'O') {
- icon = <div className='status'><i className='fa fa-globe'></i></div>;
+ icon = <div className='status'><i className='fa fa-globe'/></div>;
} else if (channel.type === 'P') {
- icon = <div className='status'><i className='fa fa-lock'></i></div>;
+ icon = <div className='status'><i className='fa fa-lock'/></div>;
} else {
// set up status icon for direct message channels (status is null for other channel types)
icon = <StatusIcon status={channel.status}/>;
diff --git a/webapp/components/sidebar_right.jsx b/webapp/components/sidebar_right.jsx
index 7d9934919..ffafb9434 100644
--- a/webapp/components/sidebar_right.jsx
+++ b/webapp/components/sidebar_right.jsx
@@ -37,7 +37,7 @@ export default class SidebarRight extends React.Component {
this.state = {
searchVisible: SearchStore.getSearchResults() !== null,
isMentionSearch: SearchStore.getIsMentionSearch(),
- postRightVisible: !!PostStore.getSelectedPost(),
+ postRightVisible: Boolean(PostStore.getSelectedPost()),
expanded: false,
fromSearch: false,
currentUser: UserStore.getCurrentUser(),
@@ -88,7 +88,7 @@ export default class SidebarRight extends React.Component {
$('.app__body .inner-wrap').removeClass('move--left').removeClass('move--right');
$('.app__body .sidebar--right').removeClass('move--left');
return (
- <div></div>
+ <div/>
);
}
@@ -118,7 +118,7 @@ export default class SidebarRight extends React.Component {
onSelectedChange(fromSearch, fromFlaggedPosts) {
this.setState({
- postRightVisible: !!PostStore.getSelectedPost(),
+ postRightVisible: Boolean(PostStore.getSelectedPost()),
fromSearch,
fromFlaggedPosts
});
diff --git a/webapp/components/sidebar_right_menu.jsx b/webapp/components/sidebar_right_menu.jsx
index a28125264..6f6a32a5e 100644
--- a/webapp/components/sidebar_right_menu.jsx
+++ b/webapp/components/sidebar_right_menu.jsx
@@ -177,7 +177,7 @@ export default class SidebarRightMenu extends React.Component {
href='#'
onClick={GlobalActions.showInviteMemberModal}
>
- <i className='icon fa fa-user-plus'></i>
+ <i className='icon fa fa-user-plus'/>
<FormattedMessage
id='sidebar_right_menu.inviteNew'
defaultMessage='Invite New Member'
@@ -193,7 +193,7 @@ export default class SidebarRightMenu extends React.Component {
href='#'
onClick={GlobalActions.showGetTeamInviteLinkModal}
>
- <i className='icon fa fa-link'></i>
+ <i className='icon fa fa-link'/>
<FormattedMessage
id='sidebar_right_menu.teamLink'
defaultMessage='Get Team Invite Link'
@@ -217,7 +217,7 @@ export default class SidebarRightMenu extends React.Component {
manageLink = (
<li>
<ToggleModalButton dialogType={TeamMembersModal}>
- <i className='icon fa fa-users'></i>
+ <i className='icon fa fa-users'/>
<FormattedMessage
id='sidebar_right_menu.viewMembers'
defaultMessage='View Members'
@@ -234,7 +234,7 @@ export default class SidebarRightMenu extends React.Component {
data-toggle='modal'
data-target='#team_settings'
>
- <i className='icon fa fa-globe'></i>
+ <i className='icon fa fa-globe'/>
<FormattedMessage
id='sidebar_right_menu.teamSettings'
defaultMessage='Team Settings'
@@ -248,7 +248,7 @@ export default class SidebarRightMenu extends React.Component {
dialogType={TeamMembersModal}
dialogProps={{isAdmin}}
>
- <i className='icon fa fa-users'></i>
+ <i className='icon fa fa-users'/>
<FormattedMessage
id='sidebar_right_menu.manageMembers'
defaultMessage='Manage Members'
@@ -265,7 +265,7 @@ export default class SidebarRightMenu extends React.Component {
to={'/admin_console'}
onClick={this.handleClick}
>
- <i className='icon fa fa-wrench'></i>
+ <i className='icon fa fa-wrench'/>
<FormattedMessage
id='sidebar_right_menu.console'
defaultMessage='System Console'
@@ -293,7 +293,7 @@ export default class SidebarRightMenu extends React.Component {
rel='noopener noreferrer'
to={global.window.mm_config.HelpLink}
>
- <i className='icon fa fa-question'></i>
+ <i className='icon fa fa-question'/>
<FormattedMessage
id='sidebar_right_menu.help'
defaultMessage='Help'
@@ -312,7 +312,7 @@ export default class SidebarRightMenu extends React.Component {
rel='noopener noreferrer'
to={global.window.mm_config.ReportAProblemLink}
>
- <i className='icon fa fa-phone'></i>
+ <i className='icon fa fa-phone'/>
<FormattedMessage
id='sidebar_right_menu.report'
defaultMessage='Report a Problem'
@@ -338,7 +338,7 @@ export default class SidebarRightMenu extends React.Component {
rel='noopener noreferrer'
to={global.window.mm_config.AppDownloadLink}
>
- <i className='icon fa fa-mobile'></i>
+ <i className='icon fa fa-mobile'/>
<FormattedMessage
id='sidebar_right_menu.nativeApps'
defaultMessage='Download Apps'
@@ -382,7 +382,7 @@ export default class SidebarRightMenu extends React.Component {
href='#'
onClick={this.getFlagged}
>
- <i className='icon fa fa-flag'></i>
+ <i className='icon fa fa-flag'/>
<FormattedMessage
id='sidebar_right_menu.flagged'
defaultMessage='Flagged Posts'
@@ -394,7 +394,7 @@ export default class SidebarRightMenu extends React.Component {
href='#'
onClick={() => this.setState({showUserSettingsModal: true})}
>
- <i className='icon fa fa-cog'></i>
+ <i className='icon fa fa-cog'/>
<FormattedMessage
id='sidebar_right_menu.accountSettings'
defaultMessage='Account Settings'
@@ -408,27 +408,27 @@ export default class SidebarRightMenu extends React.Component {
{consoleLink}
<li>
<Link to='/select_team'>
- <i className='icon fa fa-exchange'></i>
+ <i className='icon fa fa-exchange'/>
<FormattedMessage
id='sidebar_right_menu.switch_team'
defaultMessage='Team Selection'
/>
</Link>
</li>
- <li className='divider'></li>
+ <li className='divider'/>
<li>
<a
href='#'
onClick={GlobalActions.emitUserLoggedOutEvent}
>
- <i className='icon fa fa-sign-out'></i>
+ <i className='icon fa fa-sign-out'/>
<FormattedMessage
id='sidebar_right_menu.logout'
defaultMessage='Logout'
/>
</a>
</li>
- <li className='divider'></li>
+ <li className='divider'/>
{helpLink}
{reportLink}
<li>
@@ -436,7 +436,7 @@ export default class SidebarRightMenu extends React.Component {
href='#'
onClick={this.handleAboutModal}
>
- <i className='icon fa fa-info'></i>
+ <i className='icon fa fa-info'/>
<FormattedMessage
id='navbar_dropdown.about'
defaultMessage='About Mattermost'
diff --git a/webapp/components/suggestion/channel_mention_provider.jsx b/webapp/components/suggestion/channel_mention_provider.jsx
index 9e8a7b47b..17dbb6e48 100644
--- a/webapp/components/suggestion/channel_mention_provider.jsx
+++ b/webapp/components/suggestion/channel_mention_provider.jsx
@@ -17,7 +17,7 @@ class ChannelMentionSuggestion extends Suggestion {
const item = this.props.item;
const channelName = item.channel.display_name;
- let purpose = item.channel.purpose;
+ const purpose = item.channel.purpose;
let className = 'mentions__name';
if (isSelection) {
diff --git a/webapp/components/suggestion/search_channel_provider.jsx b/webapp/components/suggestion/search_channel_provider.jsx
index 6513f0f2b..1bfcda77d 100644
--- a/webapp/components/suggestion/search_channel_provider.jsx
+++ b/webapp/components/suggestion/search_channel_provider.jsx
@@ -23,7 +23,7 @@ class SearchChannelSuggestion extends Suggestion {
onClick={this.handleClick}
className={className}
>
- <i className='fa fa fa-plus-square'></i>{item.name}
+ <i className='fa fa fa-plus-square'/>{item.name}
</div>
);
}
diff --git a/webapp/components/suggestion/search_user_provider.jsx b/webapp/components/suggestion/search_user_provider.jsx
index e33c206a7..b5466cf39 100644
--- a/webapp/components/suggestion/search_user_provider.jsx
+++ b/webapp/components/suggestion/search_user_provider.jsx
@@ -27,7 +27,7 @@ class SearchUserSuggestion extends Suggestion {
className='profile-img rounded'
src={Client.getUsersRoute() + '/' + item.id + '/image?time=' + item.update_at}
/>
- <i className='fa fa fa-plus-square'></i>{item.username}
+ <i className='fa fa fa-plus-square'/>{item.username}
</div>
);
}
diff --git a/webapp/components/suggestion/switch_channel_provider.jsx b/webapp/components/suggestion/switch_channel_provider.jsx
index e0c862e7e..70e95b9b1 100644
--- a/webapp/components/suggestion/switch_channel_provider.jsx
+++ b/webapp/components/suggestion/switch_channel_provider.jsx
@@ -29,9 +29,9 @@ class SwitchChannelSuggestion extends Suggestion {
let icon = null;
if (item.type === Constants.OPEN_CHANNEL) {
- icon = <div className='status'><i className='fa fa-globe'></i></div>;
+ icon = <div className='status'><i className='fa fa-globe'/></div>;
} else if (item.type === Constants.PRIVATE_CHANNEL) {
- icon = <div className='status'><i className='fa fa-lock'></i></div>;
+ icon = <div className='status'><i className='fa fa-lock'/></div>;
} else {
icon = <StatusIcon status={item.status}/>;
}
@@ -41,8 +41,8 @@ class SwitchChannelSuggestion extends Suggestion {
onClick={this.handleClick}
className={className}
>
- {icon}
- {displayName}
+ {icon}
+ {displayName}
</div>
);
}
diff --git a/webapp/components/team_general_tab.jsx b/webapp/components/team_general_tab.jsx
index 4d1860de3..0d7acb0ca 100644
--- a/webapp/components/team_general_tab.jsx
+++ b/webapp/components/team_general_tab.jsx
@@ -354,8 +354,7 @@ class GeneralTab extends React.Component {
inputs.push(
<div key='teamInviteSetting'>
<div className='row'>
- <label className='col-sm-5 control-label visible-xs-block'>
- </label>
+ <label className='col-sm-5 control-label visible-xs-block'/>
<div className='col-sm-12'>
<input
className='form-control'
@@ -482,7 +481,7 @@ class GeneralTab extends React.Component {
ref='title'
>
<div className='modal-back'>
- <i className='fa fa-angle-left'></i>
+ <i className='fa fa-angle-left'/>
</div>
<FormattedMessage
id='general_tab.title'
diff --git a/webapp/components/team_import_tab.jsx b/webapp/components/team_import_tab.jsx
index 0fee6a3d8..2e3503f4a 100644
--- a/webapp/components/team_import_tab.jsx
+++ b/webapp/components/team_import_tab.jsx
@@ -70,7 +70,7 @@ class TeamImportTab extends React.Component {
break;
case 'in-progress':
messageSection = (
- <p className='confirm-import alert alert-warning'><i className='fa fa-spinner fa-pulse'></i>
+ <p className='confirm-import alert alert-warning'><i className='fa fa-spinner fa-pulse'/>
<FormattedMessage
id='team_import_tab.importing'
defaultMessage=' Importing...'
@@ -136,7 +136,7 @@ class TeamImportTab extends React.Component {
ref='title'
>
<div className='modal-back'>
- <i className='fa fa-angle-left'></i>
+ <i className='fa fa-angle-left'/>
</div>
<FormattedMessage
id='team_import_tab.import'
diff --git a/webapp/components/team_members_dropdown.jsx b/webapp/components/team_members_dropdown.jsx
index 8450551a9..d459d0b02 100644
--- a/webapp/components/team_members_dropdown.jsx
+++ b/webapp/components/team_members_dropdown.jsx
@@ -258,7 +258,7 @@ export default class TeamMembersDropdown extends React.Component {
);
}
- let makeActive = null;
+ const makeActive = null;
if (showMakeActive) {
// makeActive = (
// <li role='presentation'>
@@ -276,7 +276,7 @@ export default class TeamMembersDropdown extends React.Component {
// );
}
- let makeNotActive = null;
+ const makeNotActive = null;
if (showMakeNotActive) {
// makeNotActive = (
// <li role='presentation'>
@@ -352,7 +352,7 @@ export default class TeamMembersDropdown extends React.Component {
aria-expanded='true'
>
<span>{currentRoles} </span>
- <span className='fa fa-chevron-down'></span>
+ <span className='fa fa-chevron-down'/>
</a>
<ul
className='dropdown-menu member-menu'
diff --git a/webapp/components/textbox.jsx b/webapp/components/textbox.jsx
index 22738ffa3..fa2ffec1e 100644
--- a/webapp/components/textbox.jsx
+++ b/webapp/components/textbox.jsx
@@ -222,8 +222,7 @@ export default class Textbox extends React.Component {
className='form-control custom-textarea textbox-preview-area'
style={{display: this.state.preview ? 'block' : 'none'}}
dangerouslySetInnerHTML={{__html: this.state.preview ? TextFormatting.formatText(this.props.messageText) : ''}}
- >
- </div>
+ />
<div className='help__text'>
{helpText}
{previewLink}
diff --git a/webapp/components/tutorial/tutorial_tip.jsx b/webapp/components/tutorial/tutorial_tip.jsx
index 461d28386..7b613fe51 100644
--- a/webapp/components/tutorial/tutorial_tip.jsx
+++ b/webapp/components/tutorial/tutorial_tip.jsx
@@ -132,7 +132,7 @@ export default class TutorialTip extends React.Component {
target={() => this.refs.target}
>
<div className={'tip-overlay ' + this.props.overlayClass}>
- <div className='arrow'></div>
+ <div className='arrow'/>
{this.props.screens[this.state.currentScreen]}
<div className='tutorial__footer'>
<div className='tutorial__circles'>{dots}</div>
diff --git a/webapp/components/user_profile.jsx b/webapp/components/user_profile.jsx
index 4007f19fb..911ae63dd 100644
--- a/webapp/components/user_profile.jsx
+++ b/webapp/components/user_profile.jsx
@@ -162,7 +162,7 @@ export default class UserProfile extends React.Component {
/>
);
- let fullname = Utils.getFullName(this.props.user);
+ const fullname = Utils.getFullName(this.props.user);
if (fullname) {
dataContent.push(
<div
diff --git a/webapp/components/user_settings/custom_theme_chooser.jsx b/webapp/components/user_settings/custom_theme_chooser.jsx
index 016751faa..148996293 100644
--- a/webapp/components/user_settings/custom_theme_chooser.jsx
+++ b/webapp/components/user_settings/custom_theme_chooser.jsx
@@ -286,7 +286,7 @@ class CustomThemeChooser extends React.Component {
type='text'
defaultValue={theme[element.id]}
/>
- <span className='input-group-addon'><i></i></span>
+ <span className='input-group-addon'><i/></span>
</div>
</div>
);
@@ -308,7 +308,7 @@ class CustomThemeChooser extends React.Component {
type='text'
defaultValue={theme[element.id]}
/>
- <span className='input-group-addon'><i></i></span>
+ <span className='input-group-addon'><i/></span>
</div>
</div>
);
@@ -330,7 +330,7 @@ class CustomThemeChooser extends React.Component {
type='text'
defaultValue={theme[element.id]}
/>
- <span className='input-group-addon'><i></i></span>
+ <span className='input-group-addon'><i/></span>
</div>
</div>
);
@@ -370,8 +370,8 @@ class CustomThemeChooser extends React.Component {
defaultMessage='Sidebar Styles'
/>
<div className='header__icon'>
- <i className='fa fa-plus'></i>
- <i className='fa fa-minus'></i>
+ <i className='fa fa-plus'/>
+ <i className='fa fa-minus'/>
</div>
</div>
<div className='theme-elements__body'>
@@ -388,8 +388,8 @@ class CustomThemeChooser extends React.Component {
defaultMessage='Center Channel Styles'
/>
<div className='header__icon'>
- <i className='fa fa-plus'></i>
- <i className='fa fa-minus'></i>
+ <i className='fa fa-plus'/>
+ <i className='fa fa-minus'/>
</div>
</div>
<div className='theme-elements__body'>
@@ -406,8 +406,8 @@ class CustomThemeChooser extends React.Component {
defaultMessage='Link and Button Styles'
/>
<div className='header__icon'>
- <i className='fa fa-plus'></i>
- <i className='fa fa-minus'></i>
+ <i className='fa fa-plus'/>
+ <i className='fa fa-minus'/>
</div>
</div>
<div className='theme-elements__body'>
diff --git a/webapp/components/user_settings/desktop_notification_settings.jsx b/webapp/components/user_settings/desktop_notification_settings.jsx
index e5376c7ee..109212049 100644
--- a/webapp/components/user_settings/desktop_notification_settings.jsx
+++ b/webapp/components/user_settings/desktop_notification_settings.jsx
@@ -21,7 +21,7 @@ export default class DesktopNotificationSettings extends React.Component {
}
buildMaximizedSetting() {
- let inputs = [];
+ const inputs = [];
let extraInfo = null;
const activityRadio = [false, false, false];
diff --git a/webapp/components/user_settings/user_settings_notifications.jsx b/webapp/components/user_settings/user_settings_notifications.jsx
index 05881dcf9..35df53e0e 100644
--- a/webapp/components/user_settings/user_settings_notifications.jsx
+++ b/webapp/components/user_settings/user_settings_notifications.jsx
@@ -260,9 +260,8 @@ export default class NotificationsTab extends React.Component {
}
createPushNotificationSection() {
- let handleUpdatePushSection;
if (this.props.activeSection === 'push') {
- let inputs = [];
+ const inputs = [];
let extraInfo = null;
let submit = null;
@@ -508,9 +507,9 @@ export default class NotificationsTab extends React.Component {
}
}
- handleUpdatePushSection = function updateDesktopSection() {
+ const handleUpdatePushSection = () => {
this.props.updateSection('push');
- }.bind(this);
+ };
return (
<SettingItemMin
@@ -528,17 +527,12 @@ export default class NotificationsTab extends React.Component {
var keysSection;
var handleUpdateKeysSection;
if (this.props.activeSection === 'keys') {
- let inputs = [];
-
- let handleUpdateFirstNameKey;
- let handleUpdateUsernameKey;
- let handleUpdateMentionKey;
- let handleUpdateChannelKey;
+ const inputs = [];
if (user.first_name) {
- handleUpdateFirstNameKey = function handleFirstNameKeyChange(e) {
+ const handleUpdateFirstNameKey = (e) => {
this.updateFirstNameKey(e.target.checked);
- }.bind(this);
+ };
inputs.push(
<div key='userNotificationFirstNameOption'>
<div className='checkbox'>
@@ -561,9 +555,9 @@ export default class NotificationsTab extends React.Component {
);
}
- handleUpdateUsernameKey = function handleUsernameKeyChange(e) {
+ const handleUpdateUsernameKey = (e) => {
this.updateUsernameKey(e.target.checked);
- }.bind(this);
+ };
inputs.push(
<div key='userNotificationUsernameOption'>
<div className='checkbox'>
@@ -585,9 +579,9 @@ export default class NotificationsTab extends React.Component {
</div>
);
- handleUpdateMentionKey = function handleMentionKeyChange(e) {
+ const handleUpdateMentionKey = (e) => {
this.updateMentionKey(e.target.checked);
- }.bind(this);
+ };
inputs.push(
<div key='userNotificationMentionOption'>
<div className='checkbox'>
@@ -609,9 +603,9 @@ export default class NotificationsTab extends React.Component {
</div>
);
- handleUpdateChannelKey = function handleChannelKeyChange(e) {
+ const handleUpdateChannelKey = (e) => {
this.updateChannelKey(e.target.checked);
- }.bind(this);
+ };
inputs.push(
<div key='userNotificationChannelOption'>
<div className='checkbox'>
@@ -728,7 +722,7 @@ export default class NotificationsTab extends React.Component {
commentsActive[0] = true;
}
- let inputs = [];
+ const inputs = [];
inputs.push(
<div key='userNotificationLevelOption'>
diff --git a/webapp/components/user_settings/user_settings_security.jsx b/webapp/components/user_settings/user_settings_security.jsx
index 5bc29e0df..3cff93a0f 100644
--- a/webapp/components/user_settings/user_settings_security.jsx
+++ b/webapp/components/user_settings/user_settings_security.jsx
@@ -971,23 +971,23 @@ export default class SecurityTab extends React.Component {
<div className='divider-light'/>
{signInSection}
<div className='divider-dark'/>
- <br></br>
+ <br/>
<ToggleModalButton
className='security-links theme'
dialogType={AccessHistoryModal}
>
- <i className='fa fa-clock-o'></i>
+ <i className='fa fa-clock-o'/>
<FormattedMessage
id='user.settings.security.viewHistory'
defaultMessage='View Access History'
/>
</ToggleModalButton>
- <b> </b>
+ <b/>
<ToggleModalButton
className='security-links theme'
dialogType={ActivityLogModal}
>
- <i className='fa fa-clock-o'></i>
+ <i className='fa fa-clock-o'/>
<FormattedMessage
id='user.settings.security.logoutActiveSessions'
defaultMessage='View and Logout of Active Sessions'
diff --git a/webapp/components/user_settings/user_settings_theme.jsx b/webapp/components/user_settings/user_settings_theme.jsx
index d12a7689a..f1bed0085 100644
--- a/webapp/components/user_settings/user_settings_theme.jsx
+++ b/webapp/components/user_settings/user_settings_theme.jsx
@@ -209,7 +209,7 @@ export default class ThemeSetting extends React.Component {
let themeUI;
if (this.props.selected) {
- let inputs = [];
+ const inputs = [];
inputs.push(
<div
diff --git a/webapp/components/webrtc/components/webrtc_sidebar.jsx b/webapp/components/webrtc/components/webrtc_sidebar.jsx
index 59c25890b..d28158b09 100644
--- a/webapp/components/webrtc/components/webrtc_sidebar.jsx
+++ b/webapp/components/webrtc/components/webrtc_sidebar.jsx
@@ -57,7 +57,7 @@ export default class SidebarRight extends React.Component {
$('.app__body .inner-wrap').removeClass('webrtc--show').removeClass('move--right');
$('.app__body .webrtc').removeClass('webrtc--show');
return (
- <div></div>
+ <div/>
);
}
return null;
diff --git a/webapp/i18n/i18n.jsx b/webapp/i18n/i18n.jsx
index ccfb47ae7..49babb984 100644
--- a/webapp/i18n/i18n.jsx
+++ b/webapp/i18n/i18n.jsx
@@ -124,7 +124,7 @@ export function getLanguageInfo(locale) {
}
export function isLanguageAvailable(locale) {
- return !!availableLanguages[locale];
+ return Boolean(availableLanguages[locale]);
}
export function safariFix(callback) {
diff --git a/webapp/package.json b/webapp/package.json
index b2012b433..8ffe0a8f5 100644
--- a/webapp/package.json
+++ b/webapp/package.json
@@ -47,8 +47,8 @@
"babel-preset-stage-0": "6.5.0",
"copy-webpack-plugin": "3.0.1",
"css-loader": "0.25.0",
- "eslint": "3.0.1",
- "eslint-plugin-react": "5.2.2",
+ "eslint": "3.5.0",
+ "eslint-plugin-react": "6.3.0",
"exports-loader": "0.6.3",
"extract-text-webpack-plugin": "1.0.1",
"file-loader": "0.9.0",
diff --git a/webapp/utils/channel_intro_messages.jsx b/webapp/utils/channel_intro_messages.jsx
index 1d5f29f09..899e4e5a4 100644
--- a/webapp/utils/channel_intro_messages.jsx
+++ b/webapp/utils/channel_intro_messages.jsx
@@ -110,7 +110,7 @@ export function createDefaultIntroMessage(channel, centeredIntro) {
href='#'
onClick={GlobalActions.showGetTeamInviteLinkModal}
>
- <i className='fa fa-user-plus'></i>
+ <i className='fa fa-user-plus'/>
<FormattedMessage
id='intro_messages.inviteOthers'
defaultMessage='Invite others to this team'
@@ -247,7 +247,7 @@ function createInviteChannelMemberButton(channel, uiType) {
dialogType={ChannelInviteModal}
dialogProps={{channel}}
>
- <i className='fa fa-user-plus'></i>
+ <i className='fa fa-user-plus'/>
<FormattedMessage
id='intro_messages.invite'
defaultMessage='Invite others to this {type}'
@@ -266,7 +266,7 @@ function createSetHeaderButton(channel) {
dialogType={EditChannelHeaderModal}
dialogProps={{channel}}
>
- <i className='fa fa-pencil'></i>
+ <i className='fa fa-pencil'/>
<FormattedMessage
id='intro_messages.setHeader'
defaultMessage='Set a Header'
diff --git a/webapp/utils/markdown.jsx b/webapp/utils/markdown.jsx
index f6b218812..9c2eb47aa 100644
--- a/webapp/utils/markdown.jsx
+++ b/webapp/utils/markdown.jsx
@@ -232,7 +232,7 @@ function unescape(html) {
} else if (n.charAt(0) === '#') {
return n.charAt(1) === 'x' ?
String.fromCharCode(parseInt(n.substring(2), 16)) :
- String.fromCharCode(+n.substring(1));
+ String.fromCharCode(Number(n.substring(1)));
}
return '';
});
diff --git a/webapp/utils/syntax_hightlighting.jsx b/webapp/utils/syntax_hightlighting.jsx
index 4146c43c5..4db6d11e3 100644
--- a/webapp/utils/syntax_hightlighting.jsx
+++ b/webapp/utils/syntax_hightlighting.jsx
@@ -152,7 +152,7 @@ export function getLanguageFromFilename(filename) {
}
export function canHighlight(language) {
- return !!HighlightedLanguages[language.toLowerCase()];
+ return Boolean(HighlightedLanguages[language.toLowerCase()]);
}
export function getLanguageName(language) {
diff --git a/webapp/utils/text_formatting.jsx b/webapp/utils/text_formatting.jsx
index 3b96a1b42..2b0633e5c 100644
--- a/webapp/utils/text_formatting.jsx
+++ b/webapp/utils/text_formatting.jsx
@@ -154,7 +154,7 @@ const punctuation = XRegExp.cache('[^\\pL\\d]');
function autolinkAtMentions(text, tokens, usernameMap) {
// Test if provided text needs to be highlighted, special mention or current user
function mentionExists(u) {
- return (Constants.SPECIAL_MENTIONS.indexOf(u) !== -1 || !!usernameMap[u]);
+ return (Constants.SPECIAL_MENTIONS.indexOf(u) !== -1 || Boolean(usernameMap[u]));
}
function addToken(username, mention) {
@@ -206,7 +206,7 @@ function autolinkAtMentions(text, tokens, usernameMap) {
function autolinkChannelMentions(text, tokens, channelNamesMap) {
function channelMentionExists(c) {
- return !!channelNamesMap[c];
+ return Boolean(channelNamesMap[c]);
}
function addToken(channelName, mention, displayName) {
const index = tokens.size;
@@ -393,7 +393,7 @@ function parseSearchTerms(searchTerm) {
termString = termString.substring(captured[0].length);
// break the text up into words based on how the server splits them in SqlPostStore.SearchPosts and then discard empty terms
- terms.push(...captured[0].split(/[ <>+\(\)~@]/).filter((term) => !!term));
+ terms.push(...captured[0].split(/[ <>+\(\)~@]/).filter((term) => Boolean(term)));
continue;
}