diff options
author | Christopher Speller <crspeller@gmail.com> | 2016-09-23 12:29:54 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-23 12:29:54 -0400 |
commit | 93f2b6a83302ceef5c98be4fb696840608ad3bc3 (patch) | |
tree | 89e86c5983058189f032c817573bfd945491b4e7 /webapp | |
parent | 214f9c13a261064733c23d762fa521444fbd7a9c (diff) | |
download | chat-93f2b6a83302ceef5c98be4fb696840608ad3bc3.tar.gz chat-93f2b6a83302ceef5c98be4fb696840608ad3bc3.tar.bz2 chat-93f2b6a83302ceef5c98be4fb696840608ad3bc3.zip |
Updating ESLint (#4085)
Diffstat (limited to 'webapp')
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; } |