From 52e3d96f4ab0f1c11d1221f29183efa1ac83a717 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 7 Oct 2017 02:21:06 -0400 Subject: [PATCH] UI Formatting Cleanup --- .esprintrc | 9 + build-appveyor.cake | 1 + build.sh | 23 +- frontend/.eslintrc | 303 +++++++++--------- frontend/.stylelintrc | 4 + frontend/postcss.config.js | 10 +- .../src/Activity/Blacklist/BlacklistRow.js | 2 + frontend/src/Activity/History/HistoryRow.js | 2 + frontend/src/Activity/Queue/QueueRow.js | 2 + .../AddArtist/AddNewArtist/AddNewArtist.js | 4 +- .../AddNewArtist/AddNewArtistModalContent.css | 2 +- .../ImportArtist/Import/ImportArtistFooter.js | 2 +- .../SelectArtist/ImportArtistSelectArtist.css | 1 - .../SelectArtist/ImportArtistSelectArtist.js | 3 +- .../ImportArtistSelectFolderConnector.js | 1 - .../src/AlbumStudio/AlbumStudioConnector.js | 12 +- frontend/src/App/AppUpdatedModalContent.css | 2 +- frontend/src/Artist/Details/ArtistDetails.js | 2 +- frontend/src/Artist/Details/ArtistTags.js | 1 - .../Artist/Editor/ArtistEditorConnector.js | 12 +- .../Artist/Editor/Tags/TagsModalContent.js | 69 ++-- .../src/Artist/Index/ArtistIndexConnector.js | 2 +- .../src/Artist/Index/ArtistIndexFooter.js | 8 +- .../Index/Banners/ArtistIndexBanner.css | 3 - .../Index/Banners/ArtistIndexBanners.js | 2 + .../Banners/ArtistIndexBannersConnector.js | 12 +- .../Index/Posters/ArtistIndexPoster.css | 3 - .../Index/Posters/ArtistIndexPosters.js | 2 + .../Posters/ArtistIndexPostersConnector.js | 12 +- .../Index/Table/ArtistIndexTableConnector.js | 12 +- frontend/src/Calendar/Day/CalendarDay.js | 3 +- frontend/src/Calendar/Day/CalendarDays.js | 3 +- frontend/src/Calendar/Day/DayOfWeek.js | 3 +- frontend/src/Calendar/getStatusStyle.js | 1 + .../src/Components/CircularProgressBar.js | 3 +- .../Components/Form/EnhancedSelectInput.js | 2 +- .../src/Components/Form/FormInputGroup.js | 5 +- .../src/Components/Form/FormInputHelpText.js | 3 +- .../Components/Form/RootFolderSelectInput.js | 5 + .../Form/RootFolderSelectInputOption.js | 3 +- .../RootFolderSelectInputSelectedValue.js | 4 +- frontend/src/Components/Icon.js | 3 +- .../src/Components/Link/ClipboardButton.js | 1 - frontend/src/Components/Link/Link.css | 1 - .../Components/Loading/LoadingIndicator.css | 18 +- frontend/src/Components/Menu/FilterMenu.js | 44 ++- frontend/src/Components/Menu/SortMenu.js | 44 ++- frontend/src/Components/Menu/ViewMenu.js | 2 +- .../src/Components/Page/PageContentBody.js | 3 +- frontend/src/Components/Page/PageJumpBar.css | 2 +- .../Page/Sidebar/Messages/Message.js | 3 +- .../Page/Toolbar/PageToolbarSection.js | 3 +- .../Page/Toolbar/PageToolbarSeparator.js | 2 +- frontend/src/Components/ProgressBar.js | 24 +- .../Components/Scroller/OverlayScroller.css | 1 + .../src/Components/Table/TableHeaderCell.js | 12 +- frontend/src/Components/Table/VirtualTable.js | 4 +- .../Table/VirtualTableHeaderCell.js | 4 +- frontend/src/Content/Fonts/font-awesome.css | 4 + .../InteractiveEpisodeSearchConnector.js | 12 +- .../Artist/SelectArtistModalContent.js | 18 +- .../InteractiveImportModalContentConnector.js | 12 +- .../Interactive/InteractiveImportRow.js | 2 +- .../InteractiveImportRowCellPlaceholder.js | 2 +- .../SelectLanguageModalContentConnector.js | 2 +- .../SelectQualityModalContentConnector.js | 2 +- .../AddDownloadClientModalContent.js | 2 +- .../Options/DownloadClientOptionsConnector.js | 12 +- .../General/GeneralSettingsConnector.js | 12 +- .../Options/IndexerOptionsConnector.js | 12 +- .../MediaManagementConnector.js | 12 +- .../MediaManagement/Naming/NamingConnector.js | 12 +- .../MediaManagement/Naming/NamingModal.js | 226 ++++++------- .../Metadata/EditMetadataModalContent.js | 2 +- .../AddNotificationModalContent.js | 2 +- .../AddNotificationModalContentConnector.js | 1 - frontend/src/Settings/PendingChangesModal.js | 4 +- .../Settings/Profiles/Delay/DelayProfile.js | 2 - .../Profiles/Quality/QualityProfileItem.js | 2 +- .../src/Settings/UI/UISettingsConnector.js | 12 +- frontend/src/Shared/piwikCheck.js | 6 +- frontend/src/Shims/jquery.js | 4 +- ...reateSetServerSideCollectionSortHandler.js | 4 +- .../src/Store/Actions/artistActionHandlers.js | 14 +- .../Store/Actions/calendarActionHandlers.js | 12 +- .../src/Store/Actions/oAuthActionHandlers.js | 1 + .../Store/Actions/rootFolderActionHandlers.js | 7 +- .../Store/Actions/settingsActionHandlers.js | 140 ++++---- frontend/src/Store/Middleware/middlewares.js | 28 +- .../src/Store/Middleware/sentryMiddleware.js | 48 +++ ...reateSetClientSideCollectionSortReducer.js | 4 +- .../Reducers/Creators/createSetReducer.js | 24 +- .../Creators/createSetTableOptionReducer.js | 5 +- frontend/src/Store/Reducers/queueReducers.js | 1 - frontend/src/Styles/globals.css | 4 + frontend/src/Styles/scaffolding.css | 9 +- frontend/src/System/Events/LogsTableRow.js | 2 + frontend/src/System/Updates/UpdateChanges.js | 4 +- .../TrackFileEditorModalContentConnector.js | 1 + frontend/src/Utilities/Date/isTomorrow.js | 4 +- frontend/src/Utilities/ResolutionUtility.js | 2 +- frontend/src/Utilities/String/parseUrl.js | 34 ++ .../src/Utilities/Table/areAllSelected.js | 2 +- frontend/src/Utilities/createAjaxRequest.js | 3 +- .../src/Wanted/CutoffUnmet/CutoffUnmetRow.js | 2 + frontend/src/Wanted/Missing/MissingRow.js | 2 + frontend/src/polyfills.js | 6 +- frontend/src/preload.js | 1 + package.json | 7 +- yarn.lock | 125 +++++++- 110 files changed, 901 insertions(+), 701 deletions(-) create mode 100644 .esprintrc create mode 100644 frontend/src/Store/Middleware/sentryMiddleware.js create mode 100644 frontend/src/Utilities/String/parseUrl.js diff --git a/.esprintrc b/.esprintrc new file mode 100644 index 000000000..9330e00d1 --- /dev/null +++ b/.esprintrc @@ -0,0 +1,9 @@ +{ + "paths": [ + "frontend/src/**/*.js" + ], + "ignored": [ + "**/node_modules/**/*" + ], + "port": 5004 +} diff --git a/build-appveyor.cake b/build-appveyor.cake index e0d4d5048..f7b49540f 100644 --- a/build-appveyor.cake +++ b/build-appveyor.cake @@ -1,4 +1,5 @@ #addin "Cake.Npm" +#addin "Cake.Yarn" #addin "SharpZipLib" #addin "Cake.Compression" diff --git a/build.sh b/build.sh index a61280bde..f7ee88969 100755 --- a/build.sh +++ b/build.sh @@ -74,6 +74,17 @@ BuildWithXbuild() CheckExitCode xbuild /p:Configuration=Release /p:Platform=x86 /t:Build /p:AllowedReferenceRelatedFileExtensions=.pdb $slnFile } +LintUI() +{ + ProgressStart 'ESLint' + CheckExitCode yarn eslint + ProgressEnd 'ESLint' + + ProgressStart 'Stylelint' + CheckExitCode yarn stylelint + ProgressEnd 'Stylelint' +} + Build() { echo "##teamcity[progressStart 'Build']" @@ -98,13 +109,14 @@ Build() RunGulp() { - echo "##teamcity[progressStart 'npm install']" - npm-cache install npm || CheckExitCode npm install --no-optional --no-bin-links - echo "##teamcity[progressFinish 'npm install']" + ProgressStart 'npm install' + yarn install + #npm-cache install npm || CheckExitCode npm install --no-optional --no-bin-links + ProgressEnd 'npm install' - echo "##teamcity[progressStart 'Running gulp']" + ProgressStart 'Running gulp' CheckExitCode npm run build -- --production - echo "##teamcity[progressFinish 'Running gulp']" + ProgressEnd 'Running gulp' } CreateMdbs() @@ -253,6 +265,7 @@ case "$(uname -s)" in ;; esac +LintUI Build RunGulp PackageMono diff --git a/frontend/.eslintrc b/frontend/.eslintrc index 9b096f3ff..5208e3ad6 100644 --- a/frontend/.eslintrc +++ b/frontend/.eslintrc @@ -11,7 +11,7 @@ "globals": { "expect": false, "chai": false, - "sinon": false, + "sinon": false }, "parserOptions": { @@ -20,7 +20,7 @@ "ecmaFeatures": { "modules": true, "impliedStrict": true - }, + } }, "plugins": [ @@ -33,32 +33,32 @@ # ECMAScript 6 - arrow-body-style: [0], - arrow-parens: ["error", "always"], - arrow-spacing: ["error", { "before": true, "after": true }], - constructor-super: "error", - generator-star-spacing: "off", - no-class-assign: "error", - no-confusing-arrow: "error", - no-const-assign: "error", - no-dupe-class-members: "error", - no-duplicate-imports: "error", - no-new-symbol: "error", - no-this-before-super: "error", - no-useless-escape: "error", - no-useless-computed-key: "error", - no-useless-constructor: "error", - no-var: "warn", - object-shorthand: ["error", "properties"], - prefer-arrow-callback: "error", - prefer-const: "warn", - prefer-reflect: "off", - prefer-rest-params: "off", - prefer-spread: "warn", - prefer-template: "error", - require-yield: "off", - template-curly-spacing: ["error", "never"], - yield-star-spacing: "off", + "arrow-body-style": [0], + "arrow-parens": ["error", "always"], + "arrow-spacing": ["error", { "before": true, "after": true }], + "constructor-super": "error", + "generator-star-spacing": "off", + "no-class-assign": "error", + "no-confusing-arrow": "error", + "no-const-assign": "error", + "no-dupe-class-members": "error", + "no-duplicate-imports": "error", + "no-new-symbol": "error", + "no-this-before-super": "error", + "no-useless-escape": "error", + "no-useless-computed-key": "error", + "no-useless-constructor": "error", + "no-var": "warn", + "object-shorthand": ["error", "properties"], + "prefer-arrow-callback": "error", + "prefer-const": "warn", + "prefer-reflect": "off", + "prefer-rest-params": "off", + "prefer-spread": "warn", + "prefer-template": "error", + "require-yield": "off", + "template-curly-spacing": ["error", "never"], + "yield-star-spacing": "off", # Possible Errors @@ -110,7 +110,7 @@ "no-div-regex": "error", "no-else-return": "error", "no-empty-function": ["error", {"allow": ["arrowFunctions"]}], - no-empty-pattern: "error", + "no-empty-pattern": "error", "no-eval": "error", "no-extend-native": "error", "no-extra-bind": "error", @@ -122,158 +122,159 @@ "string": true, "allow": [/* "!!", "~", "*", "+" */] }], - no-implicit-globals: "error", - no-implied-eval: "error", - no-invalid-this: "off", - no-iterator: "error", - no-labels: "error", - no-lone-blocks: "error", - no-loop-func: "error", - no-magic-numbers: ["off", {"ignoreArrayIndexes": true, "ignore": [0, 1] }], - no-multi-spaces: "error", - no-multi-str: "error", + "no-implicit-globals": "error", + "no-implied-eval": "error", + "no-invalid-this": "off", + "no-iterator": "error", + "no-labels": "error", + "no-lone-blocks": "error", + "no-loop-func": "error", + "no-magic-numbers": ["off", {"ignoreArrayIndexes": true, "ignore": [0, 1] }], + "no-multi-spaces": "error", + "no-multi-str": "error", "no-native-reassign": ["error", {"exceptions": ["console"]}], - no-new: "off", - no-new-func: "error", - no-new-wrappers: "error", - no-octal: "error", - no-octal-escape: "error", - no-param-reassign: "off", - no-process-env: "off", - no-proto: "error", - no-redeclare: "error", - no-return-assign: "warn", - no-script-url: "error", - no-self-assign: "error", - no-self-compare: "error", - no-sequences: "error", - no-throw-literal: "error", - no-unmodified-loop-condition: "error", - no-unused-expressions: "error", - no-unused-labels: "error", - no-useless-call: "error", - no-useless-concat: "error", - no-void: "error", - no-warning-comments: "off", - no-with: "error", - radix: ["error", "as-needed"], - vars-on-top: "off", - wrap-iife: ["error", "inside"], - yoda: "error", + "no-new": "off", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": "off", + "no-process-env": "off", + "no-proto": "error", + "no-redeclare": "error", + "no-return-assign": "warn", + "no-script-url": "error", + "no-self-assign": "error", + "no-self-compare": "error", + "no-sequences": "error", + "no-throw-literal": "error", + "no-unmodified-loop-condition": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-useless-call": "error", + "no-useless-concat": "error", + "no-void": "error", + "no-warning-comments": "off", + "no-with": "error", + "radix": ["error", "as-needed"], + "vars-on-top": "off", + "wrap-iife": ["error", "inside"], + "yoda": "error", # Strict Mode - strict: ["error", "never"], + "strict": ["error", "never"], # Variables - init-declarations: ["error", "always"], - no-catch-shadow: "error", - no-delete-var: "error", - no-label-var: "error", - no-restricted-globals: "off", - no-shadow: "error", - no-shadow-restricted-names: "error", - no-undef: "error", - no-undef-init: "off", - no-undefined: "off", - no-unused-vars: ["error", { "args": "none" }], - no-use-before-define: "error", + "init-declarations": ["error", "always"], + "no-catch-shadow": "error", + "no-delete-var": "error", + "no-label-var": "error", + "no-restricted-globals": "off", + "no-shadow": "error", + "no-shadow-restricted-names": "error", + "no-undef": "error", + "no-undef-init": "off", + "no-undefined": "off", + "no-unused-vars": ["error", { "args": "none" }], + "no-use-before-define": "error", # Node.js and CommonJS - callback-return: "warn", - global-require: "error", - handle-callback-err: "warn", - no-mixed-requires: "error", - no-new-require: "error", - no-path-concat: "error", - no-process-exit: "error", + "callback-return": "warn", + "global-require": "error", + "handle-callback-err": "warn", + "no-mixed-requires": "error", + "no-new-require": "error", + "no-path-concat": "error", + "no-process-exit": "error", # Stylistic Issues - array-bracket-spacing: ["error", "never"], - block-spacing: ["error", "always"], - brace-style: ["error", "1tbs", { "allowSingleLine": false }], - camelcase: "off", - comma-spacing: ["error", {"before": false, "after": true}], - comma-style: ["error", "last"], - computed-property-spacing: ["error", "never"], - consistent-this: ["error", "self"], - eol-last: "error", - func-names: "off", - func-style: ["error", "declaration"], - indent: ["error", 2, {"SwitchCase": 1}], - key-spacing: ["error", {"beforeColon": false, "afterColon": true}], - keyword-spacing: ["error", {before: true, after: true}], - lines-around-comment: ["error", { "beforeBlockComment": true, "afterBlockComment": false }], - max-depth: ["error", {"maximum": 5}], - max-nested-callbacks: ["error", 4], - max-params: ["error", 4], - max-statements: "off", - max-statements-per-line: ["error", { "max": 1 }], - new-cap: ["error", {"capIsNewExceptions": ["$.Deferred"]}], - new-parens: "error", - newline-after-var: "off", - newline-before-return: "off", - newline-per-chained-call: "off", - no-array-constructor: "error", - no-bitwise: "error", - no-continue: "error", - no-inline-comments: "off", - no-lonely-if: "warn", - no-mixed-spaces-and-tabs: "error", - no-multiple-empty-lines: ["error", {max: 1}], - no-negated-condition: "warn", - no-nested-ternary: "error", - no-new-object: "error", - no-plusplus: "off", - no-restricted-syntax: "off", - no-spaced-func: "error", - no-ternary: "off", - no-trailing-spaces: "error", - no-underscore-dangle: ["error", { "allowAfterThis": true }], - no-unneeded-ternary: "error", - no-whitespace-before-property: "error", - object-curly-spacing: ["error", "always"], - one-var: ["error", "never"], - one-var-declaration-per-line: ["error", "always"], - operator-assignment: ["off", "never"], - operator-linebreak: ["error", "after"], - quote-props: ["error", "as-needed"], - quotes: ["error", "single"], - require-jsdoc: "off", - semi: "error", - semi-spacing: ["error", { "before": false, "after": true }], - sort-vars: "off", - space-before-blocks: ["error", "always"], - space-before-function-paren: ["error", "never"], - space-in-parens: "off", - space-infix-ops: "off", - space-unary-ops: "off", - spaced-comment: "error", - wrap-regex: "error", + "array-bracket-spacing": ["error", "never"], + "block-spacing": ["error", "always"], + "brace-style": ["error", "1tbs", { "allowSingleLine": false }], + "camelcase": "off", + "comma-spacing": ["error", {"before": false, "after": true}], + "comma-style": ["error", "last"], + "computed-property-spacing": ["error", "never"], + "consistent-this": ["error", "self"], + "eol-last": "error", + "func-names": "off", + "func-style": ["error", "declaration"], + "indent": ["error", 2, {"SwitchCase": 1}], + "key-spacing": ["error", {"beforeColon": false, "afterColon": true}], + "keyword-spacing": ["error", {before: true, after: true}], + "lines-around-comment": ["error", { "beforeBlockComment": true, "afterBlockComment": false }], + "max-depth": ["error", {"maximum": 5}], + "max-nested-callbacks": ["error", 4], + "max-params": ["error", 4], + "max-statements": "off", + "max-statements-per-line": ["error", { "max": 1 }], + "new-cap": ["error", {"capIsNewExceptions": ["$.Deferred"]}], + "new-parens": "error", + "newline-after-var": "off", + "newline-before-return": "off", + "newline-per-chained-call": "off", + "no-array-constructor": "error", + "no-bitwise": "error", + "no-continue": "error", + "no-inline-comments": "off", + "no-lonely-if": "warn", + "no-mixed-spaces-and-tabs": "error", + "no-multiple-empty-lines": ["error", {max: 1}], + "no-negated-condition": "warn", + "no-nested-ternary": "error", + "no-new-object": "error", + "no-plusplus": "off", + "no-restricted-syntax": "off", + "no-spaced-func": "error", + "no-ternary": "off", + "no-trailing-spaces": "error", + "no-underscore-dangle": ["error", { "allowAfterThis": true }], + "no-unneeded-ternary": "error", + "no-whitespace-before-property": "error", + "object-curly-spacing": ["error", "always"], + "one-var": ["error", "never"], + "one-var-declaration-per-line": ["error", "always"], + "operator-assignment": ["off", "never"], + "operator-linebreak": ["error", "after"], + "quote-props": ["error", "as-needed"], + "quotes": ["error", "single"], + "require-jsdoc": "off", + "semi": "error", + "semi-spacing": ["error", { "before": false, "after": true }], + "sort-vars": "off", + "space-before-blocks": ["error", "always"], + "space-before-function-paren": ["error", "never"], + "space-in-parens": "off", + "space-infix-ops": "off", + "space-unary-ops": "off", + "spaced-comment": "error", + "wrap-regex": "error", # React "react/jsx-boolean-value": [2, "always"], "react/jsx-uses-vars": 2, "react/jsx-closing-bracket-location": 2, - "react/jsx-space-before-closing": 2, + "react/jsx-tag-spacing": ["error"], "react/jsx-curly-spacing": [2, "never"], "react/jsx-equals-spacing": [2, "never"], "react/jsx-indent-props": [2, 2], "react/jsx-indent": [2, 2], "react/jsx-key": 2, - "react/jsx-no-bind": [2, { allowArrowFunctions: true }], + "react/jsx-no-bind": [2, { "allowArrowFunctions": true }], "react/jsx-no-duplicate-props": [2, { "ignoreCase": true }], "react/jsx-max-props-per-line": [2, { "maximum": 2 }], "react/jsx-handler-names": [2, { "eventHandlerPrefix": "on", "eventHandlerPropPrefix": "on" }], "react/jsx-no-undef": 2, "react/jsx-pascal-case": 2, "react/jsx-uses-react": 2, - "react/no-did-mount-set-state": 2, - "react/no-did-update-set-state": 2, + // Explicitly disabled in case we want to enable them again + "react/no-did-mount-set-state": 0, + "react/no-did-update-set-state": 0, "react/no-direct-mutation-state": 2, "react/no-multi-comp": [2, { "ignoreStateless": true }], "react/no-unknown-property": 2, diff --git a/frontend/.stylelintrc b/frontend/.stylelintrc index 5c7c74f43..57775146a 100644 --- a/frontend/.stylelintrc +++ b/frontend/.stylelintrc @@ -2,6 +2,10 @@ "plugins": [ "stylelint-order" ], +"ignoreFiles": [ + "frontend/src/Styles/scaffolding.css", + "frontend/src/Content/Fonts/font-awesome.css" +], "rules": { "at-rule-empty-line-before": [ "always", diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js index b9c229e48..f82554ba8 100644 --- a/frontend/postcss.config.js +++ b/frontend/postcss.config.js @@ -3,6 +3,11 @@ const reload = require('require-nocache')(module); module.exports = (ctx, configPath, options) => { const config = { plugins: { + 'postcss-mixins': { + mixinsDir: [ + 'frontend/src/Styles/Mixins' + ] + }, 'postcss-simple-vars': { variables: () => ctx.options.cssVarsFiles.reduce((acc, vars) => { @@ -10,11 +15,6 @@ module.exports = (ctx, configPath, options) => { }, {}) }, 'postcss-nested': {}, - 'postcss-mixins': { - mixinsDir: [ - 'frontend/src/Styles/Mixins' - ] - }, autoprefixer: { browsers: [ 'Chrome >= 30', diff --git a/frontend/src/Activity/Blacklist/BlacklistRow.js b/frontend/src/Activity/Blacklist/BlacklistRow.js index af7db6372..ef055798e 100644 --- a/frontend/src/Activity/Blacklist/BlacklistRow.js +++ b/frontend/src/Activity/Blacklist/BlacklistRow.js @@ -142,6 +142,8 @@ class BlacklistRow extends Component { ); } + + return null; }) } diff --git a/frontend/src/Activity/History/HistoryRow.js b/frontend/src/Activity/History/HistoryRow.js index 2dd73be4c..85564c9b3 100644 --- a/frontend/src/Activity/History/HistoryRow.js +++ b/frontend/src/Activity/History/HistoryRow.js @@ -205,6 +205,8 @@ class HistoryRow extends Component { ); } + + return null; }) } diff --git a/frontend/src/Activity/Queue/QueueRow.js b/frontend/src/Activity/Queue/QueueRow.js index 9ad2be6d4..6b849ecf3 100644 --- a/frontend/src/Activity/Queue/QueueRow.js +++ b/frontend/src/Activity/Queue/QueueRow.js @@ -268,6 +268,8 @@ class QueueRow extends Component { ); } + + return null; }) } diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js b/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js index 9c1ac863d..0c411294d 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtist.js @@ -161,9 +161,7 @@ class AddNewArtist extends Component { } -
- -
+
); diff --git a/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css b/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css index 59e993ff8..49328fc7b 100644 --- a/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css +++ b/frontend/src/AddArtist/AddNewArtist/AddNewArtistModalContent.css @@ -9,7 +9,7 @@ .poster { flex: 0 0 170px; - margin-right: 20px; + margin-right: 20px; height: 250px; } diff --git a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js index 1a62fc9a7..4ea72540b 100644 --- a/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js +++ b/frontend/src/AddArtist/ImportArtist/Import/ImportArtistFooter.js @@ -202,7 +202,7 @@ class ImportArtistFooter extends Component { { - isLookingUpArtist && + isLookingUpArtist && - } + } kind={kinds.INVERSE} position={tooltipPositions.BOTTOM} /> diff --git a/frontend/src/Artist/Details/ArtistTags.js b/frontend/src/Artist/Details/ArtistTags.js index efac57d65..7ea841a36 100644 --- a/frontend/src/Artist/Details/ArtistTags.js +++ b/frontend/src/Artist/Details/ArtistTags.js @@ -2,7 +2,6 @@ import PropTypes from 'prop-types'; import React from 'react'; import { kinds, sizes } from 'Helpers/Props'; import Label from 'Components/Label'; -import styles from './ArtistTags.css'; function ArtistTags({ tags }) { return ( diff --git a/frontend/src/Artist/Editor/ArtistEditorConnector.js b/frontend/src/Artist/Editor/ArtistEditorConnector.js index 9dbad896f..e6f1cb1ec 100644 --- a/frontend/src/Artist/Editor/ArtistEditorConnector.js +++ b/frontend/src/Artist/Editor/ArtistEditorConnector.js @@ -78,9 +78,9 @@ ArtistEditorConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'series', uiSection: 'artistEditor' } - )(ArtistEditorConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'series', uiSection: 'artistEditor' } +)(ArtistEditorConnector); diff --git a/frontend/src/Artist/Editor/Tags/TagsModalContent.js b/frontend/src/Artist/Editor/Tags/TagsModalContent.js index 153c8a0e8..c0d00d1f3 100644 --- a/frontend/src/Artist/Editor/Tags/TagsModalContent.js +++ b/frontend/src/Artist/Editor/Tags/TagsModalContent.js @@ -51,8 +51,7 @@ class TagsModalContent extends Component { const { artistTags, tagList, - onModalClose, - onApplyTagsPress + onModalClose } = this.props; const { @@ -107,55 +106,55 @@ class TagsModalContent extends Component { Result
- { - artistTags.map((t) => { + { + artistTags.map((t) => { + const tag = _.find(tagList, { id: t }); + + if (!tag) { + return null; + } + + const removeTag = (applyTags === 'remove' && tags.indexOf(t) > -1) || + (applyTags === 'replace' && tags.indexOf(t) === -1); + + return ( + + ); + }) + } + + { + (applyTags === 'add' || applyTags === 'replace') && + tags.map((t) => { const tag = _.find(tagList, { id: t }); if (!tag) { return null; } - const removeTag = (applyTags === 'remove' && tags.indexOf(t) > -1) || - (applyTags === 'replace' && tags.indexOf(t) === -1); + if (artistTags.indexOf(t) > -1) { + return null; + } return ( ); }) - } - - { - (applyTags === 'add' || applyTags === 'replace') && - tags.map((t) => { - const tag = _.find(tagList, { id: t }); - - if (!tag) { - return null; - } - - if (artistTags.indexOf(t) > -1) { - return null; - } - - return ( - - ); - }) - } + }
diff --git a/frontend/src/Artist/Index/ArtistIndexConnector.js b/frontend/src/Artist/Index/ArtistIndexConnector.js index 719609c89..70f460c33 100644 --- a/frontend/src/Artist/Index/ArtistIndexConnector.js +++ b/frontend/src/Artist/Index/ArtistIndexConnector.js @@ -1,4 +1,3 @@ -import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; @@ -151,6 +150,7 @@ class ArtistIndexConnector extends Component { } ArtistIndexConnector.propTypes = { + isSmallScreen: PropTypes.bool.isRequired, view: PropTypes.string.isRequired, scrollTop: PropTypes.number.isRequired, fetchArtist: PropTypes.func.isRequired, diff --git a/frontend/src/Artist/Index/ArtistIndexFooter.js b/frontend/src/Artist/Index/ArtistIndexFooter.js index 9ffc8262a..69bc9ff3b 100644 --- a/frontend/src/Artist/Index/ArtistIndexFooter.js +++ b/frontend/src/Artist/Index/ArtistIndexFooter.js @@ -31,22 +31,22 @@ function ArtistIndexFooter({ series }) {
-
+
Continuing (All tracks downloaded)
-
+
Ended (All tracks downloaded)
-
+
Missing Tracks (Artist monitored)
-
+
Missing Tracks (Artist not monitored)
diff --git a/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css b/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css index 91026d17e..3f890db26 100644 --- a/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css +++ b/frontend/src/Artist/Index/Banners/ArtistIndexBanner.css @@ -12,9 +12,6 @@ $hoverScale: 1.05; box-shadow: 0 0 12px $black; transition: all 200ms ease-in; - // Transforming causes the content to shift slightly - // transform: scale($hoverScale); - .controls { opacity: 0.9; transition: opacity 200ms linear 150ms; diff --git a/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js b/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js index 908f5e4da..43a104ecc 100644 --- a/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js +++ b/frontend/src/Artist/Index/Banners/ArtistIndexBanners.js @@ -72,6 +72,8 @@ function calculateRowHeight(bannerHeight, sortKey, isSmallScreen, bannerOptions) heights.push(19); } break; + default: + // No need to add a height of 0 } return heights.reduce((acc, height) => acc + height, 0); diff --git a/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js b/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js index 83063eed8..72a5156cf 100644 --- a/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js +++ b/frontend/src/Artist/Index/Banners/ArtistIndexBannersConnector.js @@ -25,9 +25,9 @@ function createMapStateToProps() { } export default connectSection( - createMapStateToProps, - undefined, - undefined, - { withRef: true }, - { section: 'series', uiSection: 'artistIndex' } - )(ArtistIndexBanners); + createMapStateToProps, + undefined, + undefined, + { withRef: true }, + { section: 'series', uiSection: 'artistIndex' } +)(ArtistIndexBanners); diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css b/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css index 9a8161ca2..c687874d4 100644 --- a/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css +++ b/frontend/src/Artist/Index/Posters/ArtistIndexPoster.css @@ -12,9 +12,6 @@ $hoverScale: 1.05; box-shadow: 0 0 12px $black; transition: all 200ms ease-in; - // Transforming causes the content to shift slightly - // transform: scale($hoverScale); - .controls { opacity: 0.9; transition: opacity 200ms linear 150ms; diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js b/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js index 69c5db179..cf5612182 100644 --- a/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js +++ b/frontend/src/Artist/Index/Posters/ArtistIndexPosters.js @@ -72,6 +72,8 @@ function calculateRowHeight(posterHeight, sortKey, isSmallScreen, posterOptions) heights.push(19); } break; + default: + // No need to add a height of 0 } return heights.reduce((acc, height) => acc + height, 0); diff --git a/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js b/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js index 58ce328a4..d0d27994c 100644 --- a/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js +++ b/frontend/src/Artist/Index/Posters/ArtistIndexPostersConnector.js @@ -25,9 +25,9 @@ function createMapStateToProps() { } export default connectSection( - createMapStateToProps, - undefined, - undefined, - { withRef: true }, - { section: 'series', uiSection: 'artistIndex' } - )(ArtistIndexPosters); + createMapStateToProps, + undefined, + undefined, + { withRef: true }, + { section: 'series', uiSection: 'artistIndex' } +)(ArtistIndexPosters); diff --git a/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js b/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js index 0bf6af71f..45df59b9d 100644 --- a/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js +++ b/frontend/src/Artist/Index/Table/ArtistIndexTableConnector.js @@ -26,9 +26,9 @@ function createMapDispatchToProps(dispatch, props) { } export default connectSection( - createMapStateToProps, - createMapDispatchToProps, - undefined, - { withRef: true }, - { section: 'series', uiSection: 'artistIndex' } - )(ArtistIndexTable); + createMapStateToProps, + createMapDispatchToProps, + undefined, + { withRef: true }, + { section: 'series', uiSection: 'artistIndex' } +)(ArtistIndexTable); diff --git a/frontend/src/Calendar/Day/CalendarDay.js b/frontend/src/Calendar/Day/CalendarDay.js index e4413a152..214c13ba5 100644 --- a/frontend/src/Calendar/Day/CalendarDay.js +++ b/frontend/src/Calendar/Day/CalendarDay.js @@ -20,7 +20,8 @@ function CalendarDay(props) {
+ )} + > { view === calendarViews.MONTH &&
+ )} + > { dates.map((date) => { return ( diff --git a/frontend/src/Calendar/Day/DayOfWeek.js b/frontend/src/Calendar/Day/DayOfWeek.js index b8ab0a43b..d97671522 100644 --- a/frontend/src/Calendar/Day/DayOfWeek.js +++ b/frontend/src/Calendar/Day/DayOfWeek.js @@ -36,7 +36,8 @@ class DayOfWeek extends Component { styles.dayOfWeek, view === calendarViews.DAY && styles.isSingleDay, highlightToday && styles.isToday - )}> + )} + > {formatedDate}
); diff --git a/frontend/src/Calendar/getStatusStyle.js b/frontend/src/Calendar/getStatusStyle.js index 5e60b301f..f46c19fb6 100644 --- a/frontend/src/Calendar/getStatusStyle.js +++ b/frontend/src/Calendar/getStatusStyle.js @@ -1,3 +1,4 @@ +/* eslint max-params: 0 */ import moment from 'moment'; function getStatusStyle(episodeNumber, downloading, startTime, isMonitored) { diff --git a/frontend/src/Components/CircularProgressBar.js b/frontend/src/Components/CircularProgressBar.js index d340af170..95c84f59a 100644 --- a/frontend/src/Components/CircularProgressBar.js +++ b/frontend/src/Components/CircularProgressBar.js @@ -103,8 +103,7 @@ class CircularProgressBar extends Component { strokeWidth, strokeDashoffset }} - > - + /> { diff --git a/frontend/src/Components/Form/EnhancedSelectInput.js b/frontend/src/Components/Form/EnhancedSelectInput.js index 76383f749..6310b4854 100644 --- a/frontend/src/Components/Form/EnhancedSelectInput.js +++ b/frontend/src/Components/Form/EnhancedSelectInput.js @@ -366,7 +366,7 @@ class EnhancedSelectInput extends Component { } - } + }
); } diff --git a/frontend/src/Components/Form/FormInputGroup.js b/frontend/src/Components/Form/FormInputGroup.js index 94b8e8d9b..7002a10a3 100644 --- a/frontend/src/Components/Form/FormInputGroup.js +++ b/frontend/src/Components/Form/FormInputGroup.js @@ -1,7 +1,6 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { icons, inputTypes } from 'Helpers/Props'; -import Icon from 'Components/Icon'; +import { inputTypes } from 'Helpers/Props'; import Link from 'Components/Link/Link'; import CaptchaInputConnector from './CaptchaInputConnector'; import CheckInput from './CheckInput'; @@ -85,7 +84,7 @@ function FormInputGroup(props) { errors, warnings, ...otherProps - } = props; + } = props; const InputComponent = getComponent(type); const checkInput = type === inputTypes.CHECK; diff --git a/frontend/src/Components/Form/FormInputHelpText.js b/frontend/src/Components/Form/FormInputHelpText.js index 327bd7283..d9195568b 100644 --- a/frontend/src/Components/Form/FormInputHelpText.js +++ b/frontend/src/Components/Form/FormInputHelpText.js @@ -23,7 +23,8 @@ function FormInputHelpText(props) { isError && styles.isError, isWarning && styles.isWarning, isCheckInput && styles.isCheckInput - )}> + )} + > {text} { diff --git a/frontend/src/Components/Form/RootFolderSelectInput.js b/frontend/src/Components/Form/RootFolderSelectInput.js index ab42c4343..5cc27a72b 100644 --- a/frontend/src/Components/Form/RootFolderSelectInput.js +++ b/frontend/src/Components/Form/RootFolderSelectInput.js @@ -98,8 +98,13 @@ RootFolderSelectInput.propTypes = { values: PropTypes.arrayOf(PropTypes.object).isRequired, isSaving: PropTypes.bool.isRequired, saveError: PropTypes.object, + includeNoChange: PropTypes.bool.isRequired, onChange: PropTypes.func.isRequired, onNewRootFolderSelect: PropTypes.func.isRequired }; +RootFolderSelectInput.defaultProps = { + includeNoChange: false +}; + export default RootFolderSelectInput; diff --git a/frontend/src/Components/Form/RootFolderSelectInputOption.js b/frontend/src/Components/Form/RootFolderSelectInputOption.js index c3d6ef16d..a4db9cd82 100644 --- a/frontend/src/Components/Form/RootFolderSelectInputOption.js +++ b/frontend/src/Components/Form/RootFolderSelectInputOption.js @@ -21,7 +21,8 @@ function RootFolderSelectInputOption(props) {
+ )} + >
{value}
{ diff --git a/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js b/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js index ef91d979e..e25664fee 100644 --- a/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js +++ b/frontend/src/Components/Form/RootFolderSelectInputSelectedValue.js @@ -18,8 +18,8 @@ function RootFolderSelectInputSelectedValue(props) { {...otherProps} >
- {value - }
+ {value} +
{ freeSpace != null && includeFreeSpace && diff --git a/frontend/src/Components/Icon.js b/frontend/src/Components/Icon.js index 6cb8f5d49..4fd1c4c11 100644 --- a/frontend/src/Components/Icon.js +++ b/frontend/src/Components/Icon.js @@ -24,8 +24,7 @@ function Icon(props) { style={{ fontSize: `${size}px` }} - > - + /> ); } diff --git a/frontend/src/Components/Link/ClipboardButton.js b/frontend/src/Components/Link/ClipboardButton.js index df78d0473..26f6a4f9f 100644 --- a/frontend/src/Components/Link/ClipboardButton.js +++ b/frontend/src/Components/Link/ClipboardButton.js @@ -83,7 +83,6 @@ class ClipboardButton extends Component { ...otherProps } = this.props; - const { showSuccess, showError diff --git a/frontend/src/Components/Link/Link.css b/frontend/src/Components/Link/Link.css index cd760cdae..ec2b35ab6 100644 --- a/frontend/src/Components/Link/Link.css +++ b/frontend/src/Components/Link/Link.css @@ -10,7 +10,6 @@ cursor: pointer; &:global(.isDisabled) { - /*color: $disabledColor;*/ pointer-events: none; } } diff --git a/frontend/src/Components/Loading/LoadingIndicator.css b/frontend/src/Components/Loading/LoadingIndicator.css index b8288f7f9..fd224b1d6 100644 --- a/frontend/src/Components/Loading/LoadingIndicator.css +++ b/frontend/src/Components/Loading/LoadingIndicator.css @@ -28,24 +28,8 @@ position: absolute; border: 2px solid #3a3f51; border-radius: 100%; - animation-fill-mode: both; animation: rippleContainer 1.25s 0s infinite cubic-bezier(0.21, 0.53, 0.56, 0.8); -} - -@-webkit-keyframes rippleContainer { - 0% { - opacity: 1; - transform: scale(0.1); - } - - 70% { - opacity: 0.7; - transform: scale(1); - } - - 100% { - opacity: 0; - } + animation-fill-mode: both; } @keyframes rippleContainer { diff --git a/frontend/src/Components/Menu/FilterMenu.js b/frontend/src/Components/Menu/FilterMenu.js index 815176e13..6a76db432 100644 --- a/frontend/src/Components/Menu/FilterMenu.js +++ b/frontend/src/Components/Menu/FilterMenu.js @@ -1,35 +1,29 @@ import PropTypes from 'prop-types'; -import React, { Component } from 'react'; +import React from 'react'; import { icons } from 'Helpers/Props'; import Menu from 'Components/Menu/Menu'; import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton'; import styles from './FilterMenu.css'; -class FilterMenu extends Component { +function FilterMenu(props) { + const { + className, + children, + ...otherProps + } = props; - // - // Render - - render() { - const { - className, - children, - ...otherProps - } = this.props; - - return ( - - - {children} - - ); - } + return ( + + + {children} + + ); } FilterMenu.propTypes = { diff --git a/frontend/src/Components/Menu/SortMenu.js b/frontend/src/Components/Menu/SortMenu.js index 2977f661b..7a2e931ea 100644 --- a/frontend/src/Components/Menu/SortMenu.js +++ b/frontend/src/Components/Menu/SortMenu.js @@ -1,34 +1,28 @@ import PropTypes from 'prop-types'; -import React, { Component } from 'react'; +import React from 'react'; import { icons } from 'Helpers/Props'; import Menu from 'Components/Menu/Menu'; import ToolbarMenuButton from 'Components/Menu/ToolbarMenuButton'; -class SortMenu extends Component { +function SortMenu(props) { + const { + className, + children, + ...otherProps + } = props; - // - // Render - - render() { - const { - className, - children, - ...otherProps - } = this.props; - - return ( - - - {children} - - ); - } + return ( + + + {children} + + ); } SortMenu.propTypes = { diff --git a/frontend/src/Components/Menu/ViewMenu.js b/frontend/src/Components/Menu/ViewMenu.js index 61be4f952..9c39bb3e2 100644 --- a/frontend/src/Components/Menu/ViewMenu.js +++ b/frontend/src/Components/Menu/ViewMenu.js @@ -18,7 +18,7 @@ function ViewMenu(props) { iconName={icons.VIEW} text="View" /> - {children} + {children} ); } diff --git a/frontend/src/Components/Page/PageContentBody.js b/frontend/src/Components/Page/PageContentBody.js index 478633cb2..81bd9b29b 100644 --- a/frontend/src/Components/Page/PageContentBody.js +++ b/frontend/src/Components/Page/PageContentBody.js @@ -40,7 +40,8 @@ PageContentBody.propTypes = { className: PropTypes.string, innerClassName: PropTypes.string, isSmallScreen: PropTypes.bool.isRequired, - children: PropTypes.node.isRequired + children: PropTypes.node.isRequired, + dispatch: PropTypes.func }; PageContentBody.defaultProps = { diff --git a/frontend/src/Components/Page/PageJumpBar.css b/frontend/src/Components/Page/PageJumpBar.css index 225ca3022..9a116fb54 100644 --- a/frontend/src/Components/Page/PageJumpBar.css +++ b/frontend/src/Components/Page/PageJumpBar.css @@ -1,7 +1,7 @@ .jumpBar { display: flex; - align-items: stretch; align-content: stretch; + align-items: stretch; align-self: stretch; justify-content: center; flex: 0 0 30px; diff --git a/frontend/src/Components/Page/Sidebar/Messages/Message.js b/frontend/src/Components/Page/Sidebar/Messages/Message.js index 0abaea247..1332a6599 100644 --- a/frontend/src/Components/Page/Sidebar/Messages/Message.js +++ b/frontend/src/Components/Page/Sidebar/Messages/Message.js @@ -43,7 +43,8 @@ function Message(props) {
+ )} + >
+ )} + > { buttons.map((button) => { return button; diff --git a/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js b/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js index 43cea8139..754248f99 100644 --- a/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js +++ b/frontend/src/Components/Page/Toolbar/PageToolbarSeparator.js @@ -8,7 +8,7 @@ class PageToolbarSeparator extends Component { render() { return ( -
+
); } diff --git a/frontend/src/Components/ProgressBar.js b/frontend/src/Components/ProgressBar.js index 23dcfc70d..112bfb575 100644 --- a/frontend/src/Components/ProgressBar.js +++ b/frontend/src/Components/ProgressBar.js @@ -55,22 +55,22 @@ function ProgressBar(props) { aria-valuemax="100" style={{ width: progressPercent }} /> - { - showText && + { + showText && +
-
-
- {progressText} -
+
+ {progressText}
- } +
+ }
); } diff --git a/frontend/src/Components/Scroller/OverlayScroller.css b/frontend/src/Components/Scroller/OverlayScroller.css index a55eca90b..707a9ac6f 100644 --- a/frontend/src/Components/Scroller/OverlayScroller.css +++ b/frontend/src/Components/Scroller/OverlayScroller.css @@ -1,4 +1,5 @@ .scroller { + /* Placeholder */ } .thumb { diff --git a/frontend/src/Components/Table/TableHeaderCell.js b/frontend/src/Components/Table/TableHeaderCell.js index f1417d5e9..73c4b7ec2 100644 --- a/frontend/src/Components/Table/TableHeaderCell.js +++ b/frontend/src/Components/Table/TableHeaderCell.js @@ -5,7 +5,7 @@ import Link from 'Components/Link/Link'; import Icon from 'Components/Icon'; import styles from './TableHeaderCell.css'; -class VirtualTableHeaderCell extends Component { +class TableHeaderCell extends Component { // // Listeners @@ -43,8 +43,8 @@ class VirtualTableHeaderCell extends Component { const isSorting = isSortable && sortKey === name; const sortIcon = sortDirection === sortDirections.ASCENDING ? - icons.SORT_ASCENDING : - icons.SORT_DESCENDING; + icons.SORT_ASCENDING : + icons.SORT_DESCENDING; return ( isSortable ? @@ -72,7 +72,7 @@ class VirtualTableHeaderCell extends Component { } } -VirtualTableHeaderCell.propTypes = { +TableHeaderCell.propTypes = { className: PropTypes.string, name: PropTypes.string.isRequired, label: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), @@ -86,9 +86,9 @@ VirtualTableHeaderCell.propTypes = { onSortPress: PropTypes.func }; -VirtualTableHeaderCell.defaultProps = { +TableHeaderCell.defaultProps = { className: styles.headerCell, isSortable: false }; -export default VirtualTableHeaderCell; +export default TableHeaderCell; diff --git a/frontend/src/Components/Table/VirtualTable.js b/frontend/src/Components/Table/VirtualTable.js index ecacfd82d..df23d3ff7 100644 --- a/frontend/src/Components/Table/VirtualTable.js +++ b/frontend/src/Components/Table/VirtualTable.js @@ -142,9 +142,9 @@ class VirtualTable extends Component { {...otherProps} /> - ); + ); + } } - } ); diff --git a/frontend/src/Components/Table/VirtualTableHeaderCell.js b/frontend/src/Components/Table/VirtualTableHeaderCell.js index 515eacc71..bf51062e9 100644 --- a/frontend/src/Components/Table/VirtualTableHeaderCell.js +++ b/frontend/src/Components/Table/VirtualTableHeaderCell.js @@ -58,8 +58,8 @@ class VirtualTableHeaderCell extends Component { const isSorting = isSortable && sortKey === name; const sortIcon = sortDirection === sortDirections.ASCENDING ? - icons.SORT_ASCENDING : - icons.SORT_DESCENDING; + icons.SORT_ASCENDING : + icons.SORT_DESCENDING; return ( isSortable ? diff --git a/frontend/src/Content/Fonts/font-awesome.css b/frontend/src/Content/Fonts/font-awesome.css index eab1cbb5b..2d70abd3c 100644 --- a/frontend/src/Content/Fonts/font-awesome.css +++ b/frontend/src/Content/Fonts/font-awesome.css @@ -1,3 +1,5 @@ +/* stylelint-disable */ + /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) @@ -2335,3 +2337,5 @@ overflow: visible; clip: auto; } + +/* stylelint-enable */ \ No newline at end of file diff --git a/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js b/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js index cff2595c8..f84bea723 100644 --- a/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js +++ b/frontend/src/Episode/Search/InteractiveEpisodeSearchConnector.js @@ -82,9 +82,9 @@ InteractiveEpisodeSearchConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'releases' } - )(InteractiveEpisodeSearchConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'releases' } +)(InteractiveEpisodeSearchConnector); diff --git a/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js b/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js index fd767575a..b180d319b 100644 --- a/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js +++ b/frontend/src/InteractiveImport/Artist/SelectArtistModalContent.js @@ -66,15 +66,15 @@ class SelectArtistModalContent extends Component { { items.map((item) => { return item.artistName.toLowerCase().includes(filter) ? - ( - - ) : - null; + ( + + ) : + null; }) } diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js index d0a702de0..fd07437f1 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportModalContentConnector.js @@ -147,9 +147,9 @@ InteractiveImportModalContentConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'interactiveImport' } - )(InteractiveImportModalContentConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'interactiveImport' } +)(InteractiveImportModalContentConnector); diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js index 1835e07a4..2234db00e 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.js @@ -178,7 +178,7 @@ class InteractiveImportRow extends Component { const artistName = artist ? artist.artistName : ''; const albumTitle = album ? album.title : ''; const trackNumbers = tracks.map((track) => track.trackNumber) - .join(', '); + .join(', '); const showArtistPlaceholder = isSelected && !artist; const showAlbumNumberPlaceholder = isSelected && !!artist && !album; diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js b/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js index 250106c0c..b6744d156 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportRowCellPlaceholder.js @@ -3,7 +3,7 @@ import styles from './InteractiveImportRowCellPlaceholder.css'; function InteractiveImportRowCellPlaceholder() { return ( - + ); } diff --git a/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js b/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js index a3b7277e7..4a9988b68 100644 --- a/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js +++ b/frontend/src/InteractiveImport/Language/SelectLanguageModalContentConnector.js @@ -50,7 +50,7 @@ class SelectLanguageModalContentConnector extends Component { onLanguageSelect = ({ value }) => { const languageId = parseInt(value); const language = _.find(this.props.items, - (item) => item.language.id === languageId).language; + (item) => item.language.id === languageId).language; this.props.updateInteractiveImportItem({ id: this.props.id, diff --git a/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js b/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js index e50b3af2e..ac5b42a7b 100644 --- a/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js +++ b/frontend/src/InteractiveImport/Quality/SelectQualityModalContentConnector.js @@ -49,7 +49,7 @@ class SelectQualityModalContentConnector extends Component { onQualitySelect = ({ qualityId, proper, real }) => { const quality = _.find(this.props.items, - (item) => item.quality.id === qualityId).quality; + (item) => item.quality.id === qualityId).quality; const revision = { version: proper ? 2 : 1, diff --git a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js index 56a5170a4..6ba496c45 100644 --- a/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js +++ b/frontend/src/Settings/DownloadClients/DownloadClients/AddDownloadClientModalContent.js @@ -46,7 +46,7 @@ class AddDownloadClientModalContent extends Component { } { - !isFetching && !error && + isPopulated && !error &&
diff --git a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js index 2acfc6275..cee9a544e 100644 --- a/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js +++ b/frontend/src/Settings/DownloadClients/Options/DownloadClientOptionsConnector.js @@ -84,9 +84,9 @@ DownloadClientOptionsConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - { withRef: true }, - { section: 'downloadClientOptions' } - )(DownloadClientOptionsConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + { withRef: true }, + { section: 'downloadClientOptions' } +)(DownloadClientOptionsConnector); diff --git a/frontend/src/Settings/General/GeneralSettingsConnector.js b/frontend/src/Settings/General/GeneralSettingsConnector.js index 0bc539d3e..fd0a11743 100644 --- a/frontend/src/Settings/General/GeneralSettingsConnector.js +++ b/frontend/src/Settings/General/GeneralSettingsConnector.js @@ -109,9 +109,9 @@ GeneralSettingsConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'general' } - )(GeneralSettingsConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'general' } +)(GeneralSettingsConnector); diff --git a/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js b/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js index b88894ebe..e6d39edf9 100644 --- a/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js +++ b/frontend/src/Settings/Indexers/Options/IndexerOptionsConnector.js @@ -84,9 +84,9 @@ IndexerOptionsConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - { withRef: true }, - { section: 'indexerOptions' } - )(IndexerOptionsConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + { withRef: true }, + { section: 'indexerOptions' } +)(IndexerOptionsConnector); diff --git a/frontend/src/Settings/MediaManagement/MediaManagementConnector.js b/frontend/src/Settings/MediaManagement/MediaManagementConnector.js index ae3af03f3..5f7ed7141 100644 --- a/frontend/src/Settings/MediaManagement/MediaManagementConnector.js +++ b/frontend/src/Settings/MediaManagement/MediaManagementConnector.js @@ -83,9 +83,9 @@ MediaManagementConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'mediaManagement' } - )(MediaManagementConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'mediaManagement' } +)(MediaManagementConnector); diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js b/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js index 59355c4b4..04d200eb1 100644 --- a/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js +++ b/frontend/src/Settings/MediaManagement/Naming/NamingConnector.js @@ -94,9 +94,9 @@ NamingConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'naming' } - )(NamingConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'naming' } +)(NamingConnector); diff --git a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js index 45869d06f..89b5a53a1 100644 --- a/frontend/src/Settings/MediaManagement/Naming/NamingModal.js +++ b/frontend/src/Settings/MediaManagement/Naming/NamingModal.js @@ -168,21 +168,21 @@ class NamingModal extends Component {
{ - fileNameTokens.map(({ token, example }) => { - return ( - - ); - } + fileNameTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -192,19 +192,19 @@ class NamingModal extends Component {
{ - artistTokens.map(({ token, example }) => { - return ( - - ); - } + artistTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -215,7 +215,7 @@ class NamingModal extends Component {
- { + { albumTokens.map(({ token, example }) => { return ( ); } - ) - } + ) + }
- { + { releaseDateTokens.map(({ token, example }) => { return ( ); } - ) - } + ) + }
@@ -263,19 +263,19 @@ class NamingModal extends Component {
{ - trackTokens.map(({ token, example }) => { - return ( - - ); - } + trackTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -290,19 +290,19 @@ class NamingModal extends Component {
{ - trackTitleTokens.map(({ token, example }) => { - return ( - - ); - } + trackTitleTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -311,19 +311,19 @@ class NamingModal extends Component {
{ - qualityTokens.map(({ token, example }) => { - return ( - - ); - } + qualityTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -332,19 +332,19 @@ class NamingModal extends Component {
{ - mediaInfoTokens.map(({ token, example }) => { - return ( - - ); - } + mediaInfoTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -353,19 +353,19 @@ class NamingModal extends Component {
{ - releaseGroupTokens.map(({ token, example }) => { - return ( - - ); - } + releaseGroupTokens.map(({ token, example }) => { + return ( + + ); + } ) }
@@ -374,20 +374,20 @@ class NamingModal extends Component {
{ - originalTokens.map(({ token, example }) => { - return ( - - ); - } + originalTokens.map(({ token, example }) => { + return ( + + ); + } ) }
diff --git a/frontend/src/Settings/Metadata/Metadata/EditMetadataModalContent.js b/frontend/src/Settings/Metadata/Metadata/EditMetadataModalContent.js index 9ed3aa48f..1e7006068 100644 --- a/frontend/src/Settings/Metadata/Metadata/EditMetadataModalContent.js +++ b/frontend/src/Settings/Metadata/Metadata/EditMetadataModalContent.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { inputTypes, kinds } from 'Helpers/Props'; +import { inputTypes } from 'Helpers/Props'; import Button from 'Components/Link/Button'; import SpinnerErrorButton from 'Components/Link/SpinnerErrorButton'; import ModalContent from 'Components/Modal/ModalContent'; diff --git a/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js b/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js index fa5a4af4f..9b261ea6b 100644 --- a/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js +++ b/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContent.js @@ -42,7 +42,7 @@ class AddNotificationModalContent extends Component { } { - !isFetching && !error && + !isPopulated && !error &&
{ diff --git a/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContentConnector.js b/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContentConnector.js index a724ba35b..a65670eca 100644 --- a/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContentConnector.js +++ b/frontend/src/Settings/Notifications/Notifications/AddNotificationModalContentConnector.js @@ -1,4 +1,3 @@ -import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; diff --git a/frontend/src/Settings/PendingChangesModal.js b/frontend/src/Settings/PendingChangesModal.js index 5754cb657..e3b14e228 100644 --- a/frontend/src/Settings/PendingChangesModal.js +++ b/frontend/src/Settings/PendingChangesModal.js @@ -1,6 +1,6 @@ import PropTypes from 'prop-types'; import React from 'react'; -import { kinds, sizes } from 'Helpers/Props'; +import { kinds } from 'Helpers/Props'; import Button from 'Components/Link/Button'; import Modal from 'Components/Modal/Modal'; import ModalContent from 'Components/Modal/ModalContent'; @@ -11,7 +11,6 @@ import ModalFooter from 'Components/Modal/ModalFooter'; function PendingChangesModal(props) { const { isOpen, - size, onConfirm, onCancel } = props; @@ -52,7 +51,6 @@ PendingChangesModal.propTypes = { className: PropTypes.string, isOpen: PropTypes.bool.isRequired, kind: PropTypes.oneOf(kinds.all), - size: PropTypes.oneOf(sizes.all), onConfirm: PropTypes.func.isRequired, onCancel: PropTypes.func.isRequired }; diff --git a/frontend/src/Settings/Profiles/Delay/DelayProfile.js b/frontend/src/Settings/Profiles/Delay/DelayProfile.js index b7be1622e..d72a06467 100644 --- a/frontend/src/Settings/Profiles/Delay/DelayProfile.js +++ b/frontend/src/Settings/Profiles/Delay/DelayProfile.js @@ -78,7 +78,6 @@ class DelayProfile extends Component { preferredProtocol, usenetDelay, torrentDelay, - order, tags, tagList, isDragging, @@ -158,7 +157,6 @@ DelayProfile.propTypes = { preferredProtocol: PropTypes.string.isRequired, usenetDelay: PropTypes.number.isRequired, torrentDelay: PropTypes.number.isRequired, - order: PropTypes.number.isRequired, tags: PropTypes.arrayOf(PropTypes.number).isRequired, tagList: PropTypes.arrayOf(PropTypes.object).isRequired, isDragging: PropTypes.bool.isRequired, diff --git a/frontend/src/Settings/Profiles/Quality/QualityProfileItem.js b/frontend/src/Settings/Profiles/Quality/QualityProfileItem.js index 684b0c905..1a0fa0114 100644 --- a/frontend/src/Settings/Profiles/Quality/QualityProfileItem.js +++ b/frontend/src/Settings/Profiles/Quality/QualityProfileItem.js @@ -58,7 +58,7 @@ class QualityProfileItem extends Component { name={icons.REORDER} />
- ) + ) }
); diff --git a/frontend/src/Settings/UI/UISettingsConnector.js b/frontend/src/Settings/UI/UISettingsConnector.js index 5c2765f96..70c9bdd14 100644 --- a/frontend/src/Settings/UI/UISettingsConnector.js +++ b/frontend/src/Settings/UI/UISettingsConnector.js @@ -74,9 +74,9 @@ UISettingsConnector.propTypes = { }; export default connectSection( - createMapStateToProps, - mapDispatchToProps, - undefined, - undefined, - { section: 'ui' } - )(UISettingsConnector); + createMapStateToProps, + mapDispatchToProps, + undefined, + undefined, + { section: 'ui' } +)(UISettingsConnector); diff --git a/frontend/src/Shared/piwikCheck.js b/frontend/src/Shared/piwikCheck.js index 4bc7d0ed1..b9e18fdbb 100644 --- a/frontend/src/Shared/piwikCheck.js +++ b/frontend/src/Shared/piwikCheck.js @@ -1,7 +1,7 @@ if (window.Sonarr.analytics) { - var d = document; - var g = d.createElement('script'); - var s = d.getElementsByTagName('script')[0]; + const d = document; + const g = d.createElement('script'); + const s = d.getElementsByTagName('script')[0]; g.type = 'text/javascript'; g.async = true; g.defer = true; diff --git a/frontend/src/Shims/jquery.js b/frontend/src/Shims/jquery.js index 224ef27e3..d0234889c 100644 --- a/frontend/src/Shims/jquery.js +++ b/frontend/src/Shims/jquery.js @@ -3,6 +3,8 @@ import ajax from 'jQuery/jquery.ajax'; ajax($); +const jquery = $; window.$ = $; window.jQuery = $; -export default $; + +export default jquery; diff --git a/frontend/src/Store/Actions/Creators/createSetServerSideCollectionSortHandler.js b/frontend/src/Store/Actions/Creators/createSetServerSideCollectionSortHandler.js index 457108894..6ee0ac4b2 100644 --- a/frontend/src/Store/Actions/Creators/createSetServerSideCollectionSortHandler.js +++ b/frontend/src/Store/Actions/Creators/createSetServerSideCollectionSortHandler.js @@ -12,8 +12,8 @@ function createSetServerSideCollectionSortHandler(section, getFromState, fetchHa if (!sortDirection) { if (payload.sortKey === sectionState.sortKey) { sortDirection = sectionState.sortDirection === sortDirections.ASCENDING ? - sortDirections.DESCENDING : - sortDirections.ASCENDING; + sortDirections.DESCENDING : + sortDirections.ASCENDING; } else { sortDirection = sectionState.sortDirection; } diff --git a/frontend/src/Store/Actions/artistActionHandlers.js b/frontend/src/Store/Actions/artistActionHandlers.js index 6e4f1d231..a238db253 100644 --- a/frontend/src/Store/Actions/artistActionHandlers.js +++ b/frontend/src/Store/Actions/artistActionHandlers.js @@ -12,13 +12,15 @@ const section = 'series'; const artistActionHandlers = { [types.FETCH_ARTIST]: createFetchHandler(section, '/artist'), - [types.SAVE_ARTIST]: createSaveProviderHandler(section, - '/artist', - (state) => state.series), + [types.SAVE_ARTIST]: createSaveProviderHandler( + section, + '/artist', + (state) => state.series), - [types.DELETE_ARTIST]: createRemoveItemHandler(section, - '/artist', - (state) => state.series), + [types.DELETE_ARTIST]: createRemoveItemHandler( + section, + '/artist', + (state) => state.series), [types.TOGGLE_ARTIST_MONITORED]: function(payload) { return function(dispatch, getState) { diff --git a/frontend/src/Store/Actions/calendarActionHandlers.js b/frontend/src/Store/Actions/calendarActionHandlers.js index 2054a64a0..168b4c6c2 100644 --- a/frontend/src/Store/Actions/calendarActionHandlers.js +++ b/frontend/src/Store/Actions/calendarActionHandlers.js @@ -130,12 +130,12 @@ const calendarActionHandlers = { }; const attrs = isPrePopulated ? - { - view, - ...basesAttrs, - ...dates - } : - basesAttrs; + { + view, + ...basesAttrs, + ...dates + } : + basesAttrs; dispatch(set(attrs)); diff --git a/frontend/src/Store/Actions/oAuthActionHandlers.js b/frontend/src/Store/Actions/oAuthActionHandlers.js index f65584015..aa2d5e038 100644 --- a/frontend/src/Store/Actions/oAuthActionHandlers.js +++ b/frontend/src/Store/Actions/oAuthActionHandlers.js @@ -1,3 +1,4 @@ +/* eslint callback-return: 0 */ import _ from 'lodash'; import $ from 'jquery'; import requestAction from 'Utilities/requestAction'; diff --git a/frontend/src/Store/Actions/rootFolderActionHandlers.js b/frontend/src/Store/Actions/rootFolderActionHandlers.js index f437721b7..bf0800f31 100644 --- a/frontend/src/Store/Actions/rootFolderActionHandlers.js +++ b/frontend/src/Store/Actions/rootFolderActionHandlers.js @@ -10,9 +10,10 @@ const section = 'rootFolders'; const rootFolderActionHandlers = { [types.FETCH_ROOT_FOLDERS]: createFetchHandler('rootFolders', '/rootFolder'), - [types.DELETE_ROOT_FOLDER]: createRemoveItemHandler('rootFolders', - '/rootFolder', - (state) => state.rootFolders), + [types.DELETE_ROOT_FOLDER]: createRemoveItemHandler( + 'rootFolders', + '/rootFolder', + (state) => state.rootFolders), [types.ADD_ROOT_FOLDER]: function(payload) { return function(dispatch, getState) { diff --git a/frontend/src/Store/Actions/settingsActionHandlers.js b/frontend/src/Store/Actions/settingsActionHandlers.js index 39b704c7a..abf1bdd90 100644 --- a/frontend/src/Store/Actions/settingsActionHandlers.js +++ b/frontend/src/Store/Actions/settingsActionHandlers.js @@ -88,34 +88,40 @@ const settingsActionHandlers = { [types.FETCH_QUALITY_PROFILES]: createFetchHandler('qualityProfiles', '/qualityprofile'), [types.FETCH_QUALITY_PROFILE_SCHEMA]: createFetchSchemaHandler('qualityProfiles', '/qualityprofile/schema'), - [types.SAVE_QUALITY_PROFILE]: createSaveProviderHandler('qualityProfiles', - '/qualityprofile', - (state) => state.settings.qualityProfiles), + [types.SAVE_QUALITY_PROFILE]: createSaveProviderHandler( + 'qualityProfiles', + '/qualityprofile', + (state) => state.settings.qualityProfiles), - [types.DELETE_QUALITY_PROFILE]: createRemoveItemHandler('qualityProfiles', - '/qualityprofile', - (state) => state.settings.qualityProfiles), + [types.DELETE_QUALITY_PROFILE]: createRemoveItemHandler( + 'qualityProfiles', + '/qualityprofile', + (state) => state.settings.qualityProfiles), [types.FETCH_LANGUAGE_PROFILES]: createFetchHandler('languageProfiles', '/languageprofile'), [types.FETCH_LANGUAGE_PROFILE_SCHEMA]: createFetchSchemaHandler('languageProfiles', '/languageprofile/schema'), - [types.SAVE_LANGUAGE_PROFILE]: createSaveProviderHandler('languageProfiles', - '/languageprofile', - (state) => state.settings.languageProfiles), + [types.SAVE_LANGUAGE_PROFILE]: createSaveProviderHandler( + 'languageProfiles', + '/languageprofile', + (state) => state.settings.languageProfiles), - [types.DELETE_LANGUAGE_PROFILE]: createRemoveItemHandler('languageProfiles', - '/languageprofile', - (state) => state.settings.languageProfiles), + [types.DELETE_LANGUAGE_PROFILE]: createRemoveItemHandler( + 'languageProfiles', + '/languageprofile', + (state) => state.settings.languageProfiles), [types.FETCH_DELAY_PROFILES]: createFetchHandler('delayProfiles', '/delayprofile'), - [types.SAVE_DELAY_PROFILE]: createSaveProviderHandler('delayProfiles', - '/delayprofile', - (state) => state.settings.delayProfiles), + [types.SAVE_DELAY_PROFILE]: createSaveProviderHandler( + 'delayProfiles', + '/delayprofile', + (state) => state.settings.delayProfiles), - [types.DELETE_DELAY_PROFILE]: createRemoveItemHandler('delayProfiles', - '/delayprofile', - (state) => state.settings.delayProfiles), + [types.DELETE_DELAY_PROFILE]: createRemoveItemHandler( + 'delayProfiles', + '/delayprofile', + (state) => state.settings.delayProfiles), [types.FETCH_QUALITY_DEFINITIONS]: createFetchHandler('qualityDefinitions', '/qualitydefinition'), [types.SAVE_QUALITY_DEFINITIONS]: createSaveHandler('qualityDefinitions', '/qualitydefinition', (state) => state.settings.qualitydefinitions), @@ -157,19 +163,22 @@ const settingsActionHandlers = { [types.FETCH_INDEXERS]: createFetchHandler('indexers', '/indexer'), [types.FETCH_INDEXER_SCHEMA]: createFetchSchemaHandler('indexers', '/indexer/schema'), - [types.SAVE_INDEXER]: createSaveProviderHandler('indexers', - '/indexer', - (state) => state.settings.indexers), + [types.SAVE_INDEXER]: createSaveProviderHandler( + 'indexers', + '/indexer', + (state) => state.settings.indexers), [types.CANCEL_SAVE_INDEXER]: createCancelSaveProviderHandler('indexers'), - [types.DELETE_INDEXER]: createRemoveItemHandler('indexers', - '/indexer', - (state) => state.settings.indexers), + [types.DELETE_INDEXER]: createRemoveItemHandler( + 'indexers', + '/indexer', + (state) => state.settings.indexers), - [types.TEST_INDEXER]: createTestProviderHandler('indexers', - '/indexer', - (state) => state.settings.indexers), + [types.TEST_INDEXER]: createTestProviderHandler( + 'indexers', + '/indexer', + (state) => state.settings.indexers), [types.CANCEL_TEST_INDEXER]: createCancelTestProviderHandler('indexers'), @@ -178,30 +187,35 @@ const settingsActionHandlers = { [types.FETCH_RESTRICTIONS]: createFetchHandler('restrictions', '/restriction'), - [types.SAVE_RESTRICTION]: createSaveProviderHandler('restrictions', - '/restriction', - (state) => state.settings.restrictions), + [types.SAVE_RESTRICTION]: createSaveProviderHandler( + 'restrictions', + '/restriction', + (state) => state.settings.restrictions), - [types.DELETE_RESTRICTION]: createRemoveItemHandler('restrictions', - '/restriction', - (state) => state.settings.restrictions), + [types.DELETE_RESTRICTION]: createRemoveItemHandler( + 'restrictions', + '/restriction', + (state) => state.settings.restrictions), [types.FETCH_DOWNLOAD_CLIENTS]: createFetchHandler('downloadClients', '/downloadclient'), [types.FETCH_DOWNLOAD_CLIENT_SCHEMA]: createFetchSchemaHandler('downloadClients', '/downloadclient/schema'), - [types.SAVE_DOWNLOAD_CLIENT]: createSaveProviderHandler('downloadClients', - '/downloadclient', - (state) => state.settings.downloadClients), + [types.SAVE_DOWNLOAD_CLIENT]: createSaveProviderHandler( + 'downloadClients', + '/downloadclient', + (state) => state.settings.downloadClients), [types.CANCEL_SAVE_DOWNLOAD_CLIENT]: createCancelSaveProviderHandler('downloadClients'), - [types.DELETE_DOWNLOAD_CLIENT]: createRemoveItemHandler('downloadClients', - '/downloadclient', - (state) => state.settings.downloadClients), + [types.DELETE_DOWNLOAD_CLIENT]: createRemoveItemHandler( + 'downloadClients', + '/downloadclient', + (state) => state.settings.downloadClients), - [types.TEST_DOWNLOAD_CLIENT]: createTestProviderHandler('downloadClients', - '/downloadclient', - (state) => state.settings.downloadClients), + [types.TEST_DOWNLOAD_CLIENT]: createTestProviderHandler( + 'downloadClients', + '/downloadclient', + (state) => state.settings.downloadClients), [types.CANCEL_TEST_DOWNLOAD_CLIENT]: createCancelTestProviderHandler('downloadClients'), @@ -210,38 +224,44 @@ const settingsActionHandlers = { [types.FETCH_REMOTE_PATH_MAPPINGS]: createFetchHandler('remotePathMappings', '/remotepathmapping'), - [types.SAVE_REMOTE_PATH_MAPPING]: createSaveProviderHandler('remotePathMappings', - '/remotepathmapping', - (state) => state.settings.remotePathMappings), + [types.SAVE_REMOTE_PATH_MAPPING]: createSaveProviderHandler( + 'remotePathMappings', + '/remotepathmapping', + (state) => state.settings.remotePathMappings), - [types.DELETE_REMOTE_PATH_MAPPING]: createRemoveItemHandler('remotePathMappings', - '/remotepathmapping', - (state) => state.settings.remotePathMappings), + [types.DELETE_REMOTE_PATH_MAPPING]: createRemoveItemHandler( + 'remotePathMappings', + '/remotepathmapping', + (state) => state.settings.remotePathMappings), [types.FETCH_NOTIFICATIONS]: createFetchHandler('notifications', '/notification'), [types.FETCH_NOTIFICATION_SCHEMA]: createFetchSchemaHandler('notifications', '/notification/schema'), - [types.SAVE_NOTIFICATION]: createSaveProviderHandler('notifications', - '/notification', - (state) => state.settings.notifications), + [types.SAVE_NOTIFICATION]: createSaveProviderHandler( + 'notifications', + '/notification', + (state) => state.settings.notifications), [types.CANCEL_SAVE_NOTIFICATION]: createCancelSaveProviderHandler('notifications'), - [types.DELETE_NOTIFICATION]: createRemoveItemHandler('notifications', - '/notification', - (state) => state.settings.notifications), + [types.DELETE_NOTIFICATION]: createRemoveItemHandler( + 'notifications', + '/notification', + (state) => state.settings.notifications), - [types.TEST_NOTIFICATION]: createTestProviderHandler('notifications', - '/notification', - (state) => state.settings.notifications), + [types.TEST_NOTIFICATION]: createTestProviderHandler( + 'notifications', + '/notification', + (state) => state.settings.notifications), [types.CANCEL_TEST_NOTIFICATION]: createCancelTestProviderHandler('notifications'), [types.FETCH_METADATA]: createFetchHandler('metadata', '/metadata'), - [types.SAVE_METADATA]: createSaveProviderHandler('metadata', - '/metadata', - (state) => state.settings.metadata), + [types.SAVE_METADATA]: createSaveProviderHandler( + 'metadata', + '/metadata', + (state) => state.settings.metadata), [types.FETCH_METADATA_PROVIDER]: createFetchHandler('metadataProvider', '/config/metadataProvider'), [types.SAVE_METADATA_PROVIDER]: createSaveHandler('metadataProvider', '/config/metadataProvider', (state) => state.settings.metadataProvider), diff --git a/frontend/src/Store/Middleware/middlewares.js b/frontend/src/Store/Middleware/middlewares.js index d6ef73f71..5cf93b2a6 100644 --- a/frontend/src/Store/Middleware/middlewares.js +++ b/frontend/src/Store/Middleware/middlewares.js @@ -1,35 +1,15 @@ import { applyMiddleware, compose } from 'redux'; -import Raven from 'raven-js'; -import createRavenMiddleware from 'raven-for-redux'; import thunk from 'redux-thunk'; import { routerMiddleware } from 'react-router-redux'; +import sentryMiddleware from './sentryMiddleware'; import persistState from './persistState'; export default function(history) { - const { - analytics, - branch, - version, - release, - isProduction - } = window.Sonarr; - - const dsn = isProduction ? 'https://c3a5b33e08de4e18b7d0505e942dbc95@sentry.io/216290' : - 'https://c3a5b33e08de4e18b7d0505e942dbc95@sentry.io/216290'; - - Raven.config(dsn).install(); - const middlewares = []; + const ravenMiddleware = sentryMiddleware(); - if (analytics) { - middlewares.push(createRavenMiddleware(Raven, { - environment: isProduction ? 'production' : 'development', - release, - tags: { - branch, - version - } - })); + if (ravenMiddleware) { + middlewares.push(ravenMiddleware); } middlewares.push(routerMiddleware(history)); diff --git a/frontend/src/Store/Middleware/sentryMiddleware.js b/frontend/src/Store/Middleware/sentryMiddleware.js new file mode 100644 index 000000000..1608d19ca --- /dev/null +++ b/frontend/src/Store/Middleware/sentryMiddleware.js @@ -0,0 +1,48 @@ +import _ from 'lodash'; +import Raven from 'raven-js'; +import createRavenMiddleware from 'raven-for-redux'; +import parseUrl from 'Utilities/String/parseUrl'; + +function cleanseUrl(url) { + const properties = parseUrl(url); + + return `${properties.pathname}${properties.search}`; +} + +function cleanseData(data) { + const result = _.cloneDeep(data); + + result.culprit = cleanseUrl(result.culprit); + result.request.url = cleanseUrl(result.request.url); + + return result; +} + +export default function sentryMiddleware() { + const { + analytics, + branch, + version, + release, + isProduction + } = window.Sonarr; + + if (!analytics) { + return; + } + + const dsn = isProduction ? 'https://c3a5b33e08de4e18b7d0505e942dbc95@sentry.io/216290' : + 'https://c3a5b33e08de4e18b7d0505e942dbc95@sentry.io/216290'; + + Raven.config(dsn).install(); + + return createRavenMiddleware(Raven, { + environment: isProduction ? 'production' : 'development', + release, + tags: { + branch, + version + }, + dataCallback: cleanseData + }); +} diff --git a/frontend/src/Store/Reducers/Creators/createSetClientSideCollectionSortReducer.js b/frontend/src/Store/Reducers/Creators/createSetClientSideCollectionSortReducer.js index 07f57e970..1bc048a80 100644 --- a/frontend/src/Store/Reducers/Creators/createSetClientSideCollectionSortReducer.js +++ b/frontend/src/Store/Reducers/Creators/createSetClientSideCollectionSortReducer.js @@ -12,8 +12,8 @@ function createSetClientSideCollectionSortReducer(section) { if (!sortDirection) { if (payload.sortKey === newState.sortKey) { sortDirection = newState.sortDirection === sortDirections.ASCENDING ? - sortDirections.DESCENDING : - sortDirections.ASCENDING; + sortDirections.DESCENDING : + sortDirections.ASCENDING; } else { sortDirection = newState.sortDirection; } diff --git a/frontend/src/Store/Reducers/Creators/createSetReducer.js b/frontend/src/Store/Reducers/Creators/createSetReducer.js index 2c673b927..2c2126c03 100644 --- a/frontend/src/Store/Reducers/Creators/createSetReducer.js +++ b/frontend/src/Store/Reducers/Creators/createSetReducer.js @@ -2,28 +2,6 @@ import _ from 'lodash'; import getSectionState from 'Utilities/State/getSectionState'; import updateSectionState from 'Utilities/State/updateSectionState'; -const whitelistedProperties = [ - 'isFetching', - 'isPopulated', - 'error', - 'isFetchingSchema', - 'schemaPopulated', - 'schemaError', - 'schema', - 'selectedSchema', - 'isSaving', - 'saveError', - 'isTesting', - 'isDeleting', - 'deleteError', - 'pendingChanges', - 'filterKey', - 'filterValue', - 'page', - 'sortKey', - 'sortDirection' -]; - const blacklistedProperties = [ 'section', 'id' @@ -33,7 +11,7 @@ function createSetReducer(section) { return (state, { payload }) => { if (section === payload.section) { const newState = Object.assign(getSectionState(state, section), - _.omit(payload, blacklistedProperties)); + _.omit(payload, blacklistedProperties)); return updateSectionState(state, section, newState); } diff --git a/frontend/src/Store/Reducers/Creators/createSetTableOptionReducer.js b/frontend/src/Store/Reducers/Creators/createSetTableOptionReducer.js index 5f36e7940..f353be97c 100644 --- a/frontend/src/Store/Reducers/Creators/createSetTableOptionReducer.js +++ b/frontend/src/Store/Reducers/Creators/createSetTableOptionReducer.js @@ -9,8 +9,9 @@ const whitelistedProperties = [ function createSetTableOptionReducer(section) { return (state, { payload }) => { - const newState = Object.assign(getSectionState(state, section), - _.pick(payload, whitelistedProperties)); + const newState = Object.assign( + getSectionState(state, section), + _.pick(payload, whitelistedProperties)); return updateSectionState(state, section, newState); }; diff --git a/frontend/src/Store/Reducers/queueReducers.js b/frontend/src/Store/Reducers/queueReducers.js index 368e94ed8..a48de2fe5 100644 --- a/frontend/src/Store/Reducers/queueReducers.js +++ b/frontend/src/Store/Reducers/queueReducers.js @@ -1,5 +1,4 @@ import { handleActions } from 'redux-actions'; -import updateSectionState from 'Utilities/State/updateSectionState'; import { sortDirections } from 'Helpers/Props'; import * as types from 'Store/Actions/actionTypes'; import createClearReducer from './Creators/createClearReducer'; diff --git a/frontend/src/Styles/globals.css b/frontend/src/Styles/globals.css index 1d77911f9..83e7649ae 100644 --- a/frontend/src/Styles/globals.css +++ b/frontend/src/Styles/globals.css @@ -1,4 +1,8 @@ +/* stylelint-disable */ + @import '~normalize.css/normalize.css'; @import 'scaffolding.css'; @import '../Content/Fonts/fonts.css'; @import '../Content/Fonts/font-awesome.css'; + +/* stylelint-enable */ \ No newline at end of file diff --git a/frontend/src/Styles/scaffolding.css b/frontend/src/Styles/scaffolding.css index 79786d5f9..8d95f8d12 100644 --- a/frontend/src/Styles/scaffolding.css +++ b/frontend/src/Styles/scaffolding.css @@ -1,19 +1,22 @@ +/* stylelint-disable */ * { box-sizing: border-box; } -*:before, -*:after { + +*::before, +*::after { box-sizing: border-box; } *:focus { outline: none; } +/* stylelint-enable */ html, body { color: #515253; - font-family: "Roboto", "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-family: 'Roboto', 'open sans', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; } body { diff --git a/frontend/src/System/Events/LogsTableRow.js b/frontend/src/System/Events/LogsTableRow.js index 9c54e5289..6321c5748 100644 --- a/frontend/src/System/Events/LogsTableRow.js +++ b/frontend/src/System/Events/LogsTableRow.js @@ -123,6 +123,8 @@ class LogsTableRow extends Component { /> ); } + + return null; }) } diff --git a/frontend/src/System/Updates/UpdateChanges.js b/frontend/src/System/Updates/UpdateChanges.js index 1e08c67af..63c7e0d85 100644 --- a/frontend/src/System/Updates/UpdateChanges.js +++ b/frontend/src/System/Updates/UpdateChanges.js @@ -27,7 +27,7 @@ class UpdateChanges extends Component {
  • {change}
  • - ) + ); }) } @@ -42,4 +42,4 @@ UpdateChanges.propTypes = { changes: PropTypes.arrayOf(PropTypes.string) }; -export default UpdateChanges +export default UpdateChanges; diff --git a/frontend/src/TrackFile/Editor/TrackFileEditorModalContentConnector.js b/frontend/src/TrackFile/Editor/TrackFileEditorModalContentConnector.js index 554b80b79..13b372baa 100644 --- a/frontend/src/TrackFile/Editor/TrackFileEditorModalContentConnector.js +++ b/frontend/src/TrackFile/Editor/TrackFileEditorModalContentConnector.js @@ -1,3 +1,4 @@ +/* eslint max-params: 0 */ import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; diff --git a/frontend/src/Utilities/Date/isTomorrow.js b/frontend/src/Utilities/Date/isTomorrow.js index 1d83d1b72..d22386dbd 100644 --- a/frontend/src/Utilities/Date/isTomorrow.js +++ b/frontend/src/Utilities/Date/isTomorrow.js @@ -1,6 +1,6 @@ import moment from 'moment'; -function isTomrrow(date) { +function isTomorrow(date) { if (!date) { return false; } @@ -8,4 +8,4 @@ function isTomrrow(date) { return moment(date).isSame(moment().add(1, 'day'), 'day'); } -export default isTomrrow; +export default isTomorrow; diff --git a/frontend/src/Utilities/ResolutionUtility.js b/frontend/src/Utilities/ResolutionUtility.js index 610d3fece..358448ca9 100644 --- a/frontend/src/Utilities/ResolutionUtility.js +++ b/frontend/src/Utilities/ResolutionUtility.js @@ -1,4 +1,4 @@ -var $ = require('jquery'); +import $ from 'jquery'; module.exports = { resolutions: { diff --git a/frontend/src/Utilities/String/parseUrl.js b/frontend/src/Utilities/String/parseUrl.js new file mode 100644 index 000000000..99377cd7a --- /dev/null +++ b/frontend/src/Utilities/String/parseUrl.js @@ -0,0 +1,34 @@ +import _ from 'lodash'; +import qs from 'qs'; + +// See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils +const anchor = document.createElement('a'); + +export default function parseUrl(url) { + anchor.href = url; + + // The `origin`, `password`, and `username` properties are unavailable in + // Opera Presto. We synthesize `origin` if it's not present. While `password` + // and `username` are ignored intentionally. + const properties = _.pick( + anchor, + 'hash', + 'host', + 'hostname', + 'href', + 'origin', + 'pathname', + 'port', + 'protocol', + 'search' + ); + + properties.isAbsolute = (/^[\w:]*\/\//).test(url); + + if (properties.search) { + // Remove leading ? from querystring before parsing. + properties.params = qs.parse(properties.search.substring(1)); + } + + return properties; +} diff --git a/frontend/src/Utilities/Table/areAllSelected.js b/frontend/src/Utilities/Table/areAllSelected.js index 23bc8e20d..26102f89b 100644 --- a/frontend/src/Utilities/Table/areAllSelected.js +++ b/frontend/src/Utilities/Table/areAllSelected.js @@ -1,4 +1,4 @@ -export default function aareAllSelected(selectedState) { +export default function areAllSelected(selectedState) { let allSelected = true; let allUnselected = true; diff --git a/frontend/src/Utilities/createAjaxRequest.js b/frontend/src/Utilities/createAjaxRequest.js index 1b56ae557..fc75d65b8 100644 --- a/frontend/src/Utilities/createAjaxRequest.js +++ b/frontend/src/Utilities/createAjaxRequest.js @@ -20,8 +20,7 @@ export default function createAjaxRequest() { xhr.aborted = aborted; return $.Deferred().reject(xhr, textStatus, errorThrown).promise(); - }) - .always(() => { + }).always(() => { complete = true; }); diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js index 5d5c68dc0..fb75a8bc7 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetRow.js @@ -143,6 +143,8 @@ function CutoffUnmetRow(props) { /> ); } + + return null; }) } diff --git a/frontend/src/Wanted/Missing/MissingRow.js b/frontend/src/Wanted/Missing/MissingRow.js index 0361b5fe2..e71b8c05f 100644 --- a/frontend/src/Wanted/Missing/MissingRow.js +++ b/frontend/src/Wanted/Missing/MissingRow.js @@ -129,6 +129,8 @@ function MissingRow(props) { /> ); } + + return null; }) } diff --git a/frontend/src/polyfills.js b/frontend/src/polyfills.js index 9ee333095..b5d17d598 100644 --- a/frontend/src/polyfills.js +++ b/frontend/src/polyfills.js @@ -1,3 +1,5 @@ +/* eslint no-empty-function: 0 no-extend-native: 0 */ + window.console = window.console || {}; window.console.log = window.console.log || function() {}; window.console.group = window.console.group || function() {}; @@ -26,7 +28,7 @@ if (!String.prototype.endsWith) { value(searchString, position) { position = position || this.length; position = position - searchString.length; - var lastIndex = this.lastIndexOf(searchString); + const lastIndex = this.lastIndexOf(searchString); return lastIndex !== -1 && lastIndex === position; } }); @@ -34,6 +36,6 @@ if (!String.prototype.endsWith) { if (!('contains' in String.prototype)) { String.prototype.contains = function(str, startIndex) { - return -1 !== String.prototype.indexOf.call(this, str, startIndex); + return String.prototype.indexOf.call(this, str, startIndex) !== -1; }; } diff --git a/frontend/src/preload.js b/frontend/src/preload.js index 0deb3bbe6..674699db9 100644 --- a/frontend/src/preload.js +++ b/frontend/src/preload.js @@ -1,3 +1,4 @@ +/* eslint no-undef: 0 */ import 'Shims/jquery'; __webpack_public_path__ = `${window.Sonarr.urlBase}/`; diff --git a/package.json b/package.json index bc39b34a3..f2f12109d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,10 @@ "description": "Lidarr", "scripts": { "build": "gulp build", - "start": "gulp watch" + "start": "gulp watch", + "eslint": "esprint check", + "eslint-fix": "eslint start --fix", + "stylelint": "stylelint frontend/**/*.css --config frontend/.stylelintrc" }, "repository": { "type": "git", @@ -34,6 +37,7 @@ "eslint-loader": "1.9.0", "eslint-plugin-filenames": "1.2.0", "eslint-plugin-react": "7.4.0", + "esprint": "0.4.0", "extract-text-webpack-plugin": "3.0.0", "file-loader": "0.11.2", "filesize": "3.5.10", @@ -64,6 +68,7 @@ "postcss-nested": "2.1.2", "postcss-simple-vars": "4.1.0", "prop-types": "15.6.0", + "qs": "6.5.1", "query-string": "5.0.0", "raven-for-redux": "1.0.0", "raven-js": "3.17.0", diff --git a/yarn.lock b/yarn.lock index 8d21e660d..960e4d20a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1020,6 +1020,10 @@ binary-extensions@^1.0.0: version "1.10.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" +bindings@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + bl@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" @@ -1162,6 +1166,12 @@ browserslist@~1.3.1: dependencies: caniuse-db "^1.0.30000525" +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + dependencies: + node-int64 "^0.4.0" + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1889,6 +1899,22 @@ dnd-core@^2.5.3: lodash "^4.2.0" redux "^3.7.1" +dnode-protocol@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dnode-protocol/-/dnode-protocol-0.2.2.tgz#51151d16fc3b5f84815ee0b9497a1061d0d1949d" + dependencies: + jsonify "~0.0.0" + traverse "~0.6.3" + +dnode@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/dnode/-/dnode-1.2.2.tgz#4ac3cfe26e292b3b39b8258ae7d94edc58132efa" + dependencies: + dnode-protocol "~0.2.2" + jsonify "~0.0.0" + optionalDependencies: + weak "^1.0.0" + doctrine@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" @@ -1977,7 +2003,7 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -errno@^0.1.3: +errno@^0.1.3, errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -2203,6 +2229,17 @@ esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" +esprint@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/esprint/-/esprint-0.4.0.tgz#f89c9bace36d90407968a8f9ceb0800ff786aab0" + dependencies: + dnode "^1.2.2" + fb-watchman "^2.0.0" + glob "^7.1.1" + sane "^1.6.0" + worker-farm "^1.3.1" + yargs "^8.0.1" + esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" @@ -2254,6 +2291,12 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +exec-sh@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + dependencies: + merge "^1.1.3" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -2356,6 +2399,12 @@ faye-websocket@~0.7.2: dependencies: websocket-driver ">=0.3.6" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + dependencies: + bser "^2.0.0" + fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" @@ -2691,7 +2740,7 @@ glob@^6.0.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.2: +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -3870,6 +3919,12 @@ make-dir@^1.0.0: dependencies: pify "^2.3.0" +makeerror@1.0.x: + version "1.0.11" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + dependencies: + tmpl "1.0.x" + map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3946,6 +4001,10 @@ meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" +merge@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" @@ -4083,7 +4142,7 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.3.0: +nan@^2.0.5, nan@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" @@ -4112,6 +4171,10 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + node-libs-browser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" @@ -5011,14 +5074,14 @@ qs@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz#a9f31142af468cb72b25b30136ba2456834916be" +qs@6.5.1, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + qs@~2.2.3: version "2.2.5" resolved "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz#1088abaf9dcc0ae5ae45b709e6c6b5888b23923c" -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - query-string@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.0.0.tgz#fbdf7004b4d2aff792f9871981b7a2794f555947" @@ -5667,6 +5730,18 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +sane@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-1.7.0.tgz#b3579bccb45c94cf20355cc81124990dfd346e30" + dependencies: + anymatch "^1.3.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + minimatch "^3.0.2" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.10.0" + sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -6255,6 +6330,10 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmpl@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -6289,6 +6368,10 @@ tough-cookie@~2.3.2: dependencies: punycode "^1.4.1" +traverse@~0.6.3: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -6546,12 +6629,22 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +walker@~1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + dependencies: + makeerror "1.0.x" + warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" dependencies: loose-envify "^1.0.0" +watch@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" + watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" @@ -6560,6 +6653,13 @@ watchpack@^1.4.0: chokidar "^1.7.0" graceful-fs "^4.1.2" +weak@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e" + dependencies: + bindings "^1.2.1" + nan "^2.0.5" + webpack-sources@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" @@ -6653,6 +6753,13 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +worker-farm@^1.3.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.0.tgz#adfdf0cd40581465ed0a1f648f9735722afd5c8d" + dependencies: + errno "^0.1.4" + xtend "^4.0.1" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -6670,7 +6777,7 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1: +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -6698,7 +6805,7 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs@^8.0.2: +yargs@^8.0.1, yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: