zulip/.eslintrc.json

383 lines
11 KiB
JSON
Raw Normal View History

{
"env": {
"node": true,
"es6": true
},
"parserOptions": {
"sourceType": "module"
},
"globals": {
"$": false,
2016-11-29 17:59:32 +01:00
"_": false,
"run_test": false,
"schema": false,
2016-11-29 17:59:32 +01:00
"jQuery": false,
"Spinner": false,
"Handlebars": false,
"XDate": false,
"zxcvbn": false,
"SockJS": false,
"marked": false,
"md5": false,
"moment": false,
2016-11-29 17:59:32 +01:00
"i18n": false,
"LightboxCanvas": false,
2016-11-29 17:59:32 +01:00
"bridge": false,
"page_params": false,
"attachments_ui": false,
2016-11-29 17:59:32 +01:00
"csrf_token": false,
"copy_and_paste": false,
"click_handlers": false,
2016-11-29 17:59:32 +01:00
"typeahead_helper": false,
"pygments_data": false,
2016-11-29 17:59:32 +01:00
"popovers": false,
"server_events": false,
"server_events_dispatch": false,
"message_scroll": false,
"keydown_util": false,
"info_overlay": false,
2016-11-29 17:59:32 +01:00
"ui": false,
2017-03-18 21:17:41 +01:00
"ui_report": false,
"night_mode": false,
2017-03-18 21:35:35 +01:00
"ui_util": false,
2017-03-18 00:50:39 +01:00
"lightbox": false,
"input_pill": false,
"user_pill": false,
"compose_pm_pill": false,
2016-11-29 17:59:32 +01:00
"stream_color": false,
"people": false,
"user_groups": false,
2016-11-29 17:59:32 +01:00
"navigate": false,
"toMarkdown": false,
"settings_panel_menu": false,
"settings_toggle": false,
"settings_account": false,
2017-04-06 15:34:42 +02:00
"settings_display": false,
2017-04-06 16:01:07 +02:00
"settings_notifications": false,
2017-04-06 16:56:52 +02:00
"settings_muting": false,
2017-04-06 22:47:27 +02:00
"settings_bots": false,
"settings_sections": false,
2017-04-08 17:24:07 +02:00
"settings_emoji": false,
"settings_org": false,
"settings_ui": false,
"settings_users": false,
2017-04-08 21:02:08 +02:00
"settings_streams": false,
2017-04-08 23:24:03 +02:00
"settings_filters": false,
"settings_invites": false,
"settings_user_groups": false,
"settings_profile_fields": false,
2016-11-29 17:59:32 +01:00
"settings": false,
"resize": false,
"loading": false,
"typing": false,
2017-03-22 15:11:41 +01:00
"typing_events": false,
"typing_data": false,
"typing_status": false,
sending messages: Extract sent_messages.js. This commit extract send_messages.js to clean up code related to the following things: * sending data to /json/report_send_time * restarting the event loop if events don't arrive on time The code related to /json/report changes the following ways: * We track the state almost completely in the new send_messages.js module, with other modules just making one-line calls. * We no longer send "displayed" times to the servers, since we were kind of lying about them anyway. * We now explicitly track the state of each single sent message in its own object. * We now look up data related to the messages by local_id, instead of message_id. The problem with message_id was that is was mutable. Now we use local_id, and we extend the local_id concept to messages that don't get rendered client side. We no longer need to react to the 'message_id_changed' event to change our hash key. * The code used to live in many places: * various big chunks were scattered among compose.js, and those were all moved or reduced to one-line calls into the new module * echo.js continues to make basically one-line calls, but it no longer calls compose.report_as_received(), nor does it set the "start" time. * message_util.js used to report received events, but only when they finally got drawn in the home view; this code is gone now The code related to restarting the event loop if events don't arrive changes as follows: * The timer now gets set up from within send_messages.message_state.report_server_ack, where we can easily inspect the current state of the possibly-still-in-flight message. * The code to confirm that an event was received happens now in server_events.js, rather than later, so that we don't falsely blame the event loop for a downstream bug. (Plus it's easier to just do it one place.) This change removes a fair amount of code from our node tests. Some of the removal is good stuff related to us completing killing off unnecessary code. Other removals are more expediency-driven, and we should make another sweep at ramping up our coverage on compose.js, with possibly a little more mocking of the new `send_messages` code layer, since it's now abstracted better. There is also some minor cleanup to echo.resend_message() in this commit. See #5968 for a detailed breakdown of the changes.
2017-07-30 12:56:46 +02:00
"sent_messages": false,
"transmit": false,
"zcommand": false,
2016-11-29 17:59:32 +01:00
"compose": false,
2017-03-18 17:41:47 +01:00
"compose_actions": false,
"compose_state": false,
2016-11-29 17:59:32 +01:00
"compose_fade": false,
"overlays": false,
"stream_create": false,
"stream_edit": false,
2016-11-29 17:59:32 +01:00
"subs": false,
2017-03-19 16:00:35 +01:00
"stream_muting": false,
2017-03-19 16:03:07 +01:00
"stream_events": false,
2016-11-29 17:59:32 +01:00
"timerender": false,
"message_live_update": false,
2016-11-29 17:59:32 +01:00
"message_edit": false,
"reload": false,
"composebox_typeahead": false,
"search": false,
"topic_list": false,
2017-04-21 20:42:10 +02:00
"topic_generator": false,
2016-11-29 17:59:32 +01:00
"gear_menu": false,
"hashchange": false,
"hash_util": false,
"FetchStatus": false,
2016-11-29 17:59:32 +01:00
"message_list": false,
"Filter": false,
"flatpickr": false,
2016-11-29 17:59:32 +01:00
"pointer": false,
"util": false,
"MessageListData": false,
2016-11-29 17:59:32 +01:00
"MessageListView": false,
"blueslip": false,
"rows": false,
"WinChan": false,
"muting_ui": false,
"Socket": false,
"channel": false,
"components": false,
"scroll_util": false,
"message_viewport": false,
"upload_widget": false,
2016-11-29 17:59:32 +01:00
"avatar": false,
"realm_icon": false,
2016-11-29 17:59:32 +01:00
"feature_flags": false,
"search_suggestion": false,
"notifications": false,
"message_flags": false,
"bot_data": false,
"top_left_corner": false,
2017-04-18 17:08:59 +02:00
"stream_sort": false,
2016-11-29 17:59:32 +01:00
"stream_list": false,
"stream_popover": false,
"narrow_state": false,
2016-11-29 17:59:32 +01:00
"narrow": false,
"admin_sections": false,
2016-11-29 17:59:32 +01:00
"admin": false,
"stream_data": false,
"topic_data": false,
"list_util": false,
2016-11-29 17:59:32 +01:00
"muting": false,
"Dict": false,
"unread": false,
"alert_words_ui": false,
"message_store": false,
2017-03-19 22:43:38 +01:00
"message_util": false,
2017-03-19 20:23:48 +01:00
"message_events": false,
2017-03-19 18:19:48 +01:00
"message_fetch": false,
2016-11-29 17:59:32 +01:00
"favicon": false,
"condense": false,
"list_render": false,
2016-11-29 17:59:32 +01:00
"floating_recipient_bar": false,
"tab_bar": false,
"emoji": false,
"presence": false,
"user_search": false,
2018-04-19 15:46:56 +02:00
"buddy_data": false,
2018-04-19 14:17:22 +02:00
"buddy_list": false,
"list_cursor": false,
2016-11-29 17:59:32 +01:00
"activity": false,
"invite": false,
"colorspace": false,
Add frontend support for emoji reactions. This commit replaces the placeholder "clipboard" button with a reaction button. This is done on any message that can't be edited. Also, on messages sent by the user the actions popover (toggled by the down chevron icon) contains an option to add a reaction. When clicked, a popover with a search bar and a list of emojis is displayed. If the right sidebar is collapsed (the viewport is small), the popover is placed to the left of the button. Focus is set to the search bar. Typing in the search bar filters emojis. Emojis with which the user has reacted to this message are highlighted. Clicking them sends an API request to remove that reaction. Clicking on non-highlighted emojis sends an API request to add a reaction. When the popover loses focus it is closed. The frontend listens for reaction events. When an add-reaction event is received, the emoji is displayed at the bottom of the message with a count initialized to 1. If there was an existing reaction to the message with the same emoji, the count is incremented. Old messages fetched from the server contain reactions. They are displayed (along with title and count) at the bottom of each message. When clicking the emoji reaction at the bottom of the message, if the user has already reacted with that emoji to this message, the reaction is removed and the count is decremented. Otherwise, a reaction is added and the count is incremented. Hovering over the emoji reaction at the bottom of the message displays a list of users who have reacted with this emoji along with the emoji name. Hovering over the emoji reactions at the bottom of the message displays a button to add a reaction. Fixes #541.
2016-12-02 13:23:23 +01:00
"reactions": false,
"reminder": false,
2016-11-29 17:59:32 +01:00
"tutorial": false,
"templates": false,
"alert_words": false,
"fenced_code": false,
"markdown": false,
"local_message": false,
2016-11-29 17:59:32 +01:00
"echo": false,
"localstorage": false,
"localStorage": false,
2016-11-29 17:59:32 +01:00
"current_msg_list": true,
"home_msg_list": false,
"pm_list": false,
"pm_conversations": false,
"recent_senders": false,
"unread_ui": false,
"unread_ops": false,
"upload": false,
"user_events": false,
2018-02-23 15:54:07 +01:00
"voting_widget": false,
"tictactoe_widget": false,
"zform": false,
2018-02-23 16:20:33 +01:00
"widgetize": false,
"submessage": false,
"Plotly": false,
"emoji_codes": false,
"drafts": false,
"katex": false,
"ClipboardJS": false,
"emoji_picker": false,
"hotspots": false,
"compose_ui": false,
"common": false,
"panels": false,
"PerfectScrollbar": false
},
"plugins": [
"eslint-plugin-empty-returns"
],
"rules": {
"array-callback-return": "error",
"array-bracket-spacing": "error",
"arrow-spacing": [ "error", { "before": true, "after": true } ],
"block-scoped-var": 2,
"brace-style": [ "error", "1tbs", { "allowSingleLine": true } ],
"camelcase": 0,
"comma-dangle": [ "error",
{
"arrays": "always-multiline",
"objects": "always-multiline",
"imports": "always-multiline",
"exports": "always-multiline",
"functions": "never"
}
],
"complexity": [ 0, 4 ],
"curly": 2,
"dot-notation": [ "error", { "allowKeywords": true } ],
"empty-returns/main": "error",
"eol-last": [ "error", "always" ],
"eqeqeq": 2,
"func-style": [ "off", "expression" ],
"guard-for-in": 2,
"indent": ["error", 4, {
"ArrayExpression": "first",
"outerIIFEBody": 0,
"ObjectExpression": "first",
"SwitchCase": 0,
"CallExpression": {"arguments": "first"},
"FunctionExpression": {"parameters": "first"},
"FunctionDeclaration": {"parameters": "first"}
}],
"keyword-spacing": [ "error",
{
"before": true,
"after": true,
"overrides": {
"return": { "after": true },
"throw": { "after": true },
"case": { "after": true }
}
}
],
"max-depth": [ 0, 4 ],
"max-len": [ "error", 100, 2,
{
"ignoreUrls": true,
"ignoreComments": false,
"ignoreRegExpLiterals": true,
"ignoreStrings": true,
"ignoreTemplateLiterals": true
}
],
"max-params": [ 0, 3 ],
"max-statements": [ 0, 10 ],
"new-cap": [ "error",
{
"newIsCap": true,
"capIsNew": false
}
],
"new-parens": 2,
"newline-per-chained-call": 0,
"no-alert": 2,
"no-array-constructor": "error",
"no-bitwise": 2,
"no-caller": 2,
"no-case-declarations": "error",
"no-catch-shadow": 2,
"no-console": 0,
"no-const-assign": "error",
"no-control-regex": 2,
"no-debugger": 2,
"no-delete-var": 2,
"no-div-regex": 2,
"no-dupe-class-members": "error",
"no-dupe-keys": 2,
"no-duplicate-imports": "error",
"no-else-return": 2,
"no-empty": 2,
2016-11-29 17:59:32 +01:00
"no-empty-character-class": 2,
"no-eq-null": 2,
"no-eval": 2,
"no-ex-assign": 2,
"no-extra-parens": ["error", "all",
{
"conditionalAssign": false,
"nestedBinaryExpressions": false
}
],
"no-extra-semi": 2,
"no-fallthrough": 2,
"no-floating-decimal": 2,
"no-func-assign": 2,
"no-implied-eval": 2,
"no-iterator": "error",
"no-label-var": 2,
"no-labels": 2,
"no-loop-func": 2,
"no-mixed-requires": [ 0, false ],
"no-multi-str": 2,
"no-native-reassign": 2,
"no-nested-ternary": 0,
"no-new-func": "error",
"no-new-object": 2,
"no-new-wrappers": 2,
"no-obj-calls": 2,
"no-octal": 2,
"no-octal-escape": 2,
"no-param-reassign": 0,
"no-plusplus": 2,
"no-proto": 2,
"no-redeclare": 2,
"no-regex-spaces": 2,
"no-restricted-syntax": 0,
"no-return-assign": 2,
"no-script-url": 2,
"no-self-compare": 2,
"no-shadow": 0,
"no-sync": 2,
"no-ternary": 0,
"no-trailing-spaces": 2,
"no-undef": "error",
"no-undef-init": 2,
"no-underscore-dangle": 0,
"no-unneeded-ternary": [ "error", { "defaultAssignment": false } ],
"no-unreachable": 2,
"no-unused-expressions": 2,
"no-unused-vars": [ "error",
{
"vars": "local",
"args": "after-used",
"varsIgnorePattern": "print_elapsed_time|check_duplicate_ids"
}
],
"no-use-before-define": 2,
"no-useless-constructor": "error",
// The Zulip codebase complies partially with the "no-useless-escape"
// rule; only regex expressions haven't been updated yet.
// Updated regex expressions are currently being tested in casper
// files and will decide about a potential future enforcement of this rule.
"no-useless-escape": 0,
"space-unary-ops": 2,
"no-whitespace-before-property": 2,
"no-with": 2,
"one-var": [ "error", "never" ],
"padded-blocks": 0,
"prefer-const": [ "error",
{
"destructuring": "any",
"ignoreReadBeforeAssign": true
}
],
"quote-props": [ "error", "as-needed",
{
"keywords": false,
"unnecessary": true,
"numbers": false
}
],
"quotes": [ 0, "single" ],
"radix": 2,
"semi": 2,
"space-before-blocks": 2,
"space-before-function-paren": [ "error",
{
"anonymous": "always",
"named": "never",
"asyncArrow": "always"
}
],
"space-in-parens": 2,
"space-infix-ops": 2,
"spaced-comment": 0,
"strict": 0,
"template-curly-spacing": "error",
"unnecessary-strict": 0,
"use-isnan": 2,
"valid-typeof": [ "error", { "requireStringLiterals": true } ],
"wrap-iife": [ "error", "outside", { "functionPrototypeMethods": false } ],
"wrap-regex": 0,
"yoda": 2
}
}