From 023452e1c303e2954ad0328d6978aa746c3dfc00 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 7 Oct 2017 02:47:28 -0400 Subject: [PATCH] Add Page Populator from Sonarr --- build.sh | 3 +- .../Activity/Blacklist/BlacklistConnector.js | 13 ++ .../src/Activity/History/HistoryConnector.js | 10 ++ frontend/src/Activity/Queue/QueueConnector.js | 10 ++ .../Artist/Details/ArtistDetailsConnector.js | 17 +- frontend/src/Calendar/CalendarConnector.js | 16 +- frontend/src/Components/SignalRConnector.js | 31 +++- frontend/src/Utilities/pagePopulator.js | 17 ++ .../CutoffUnmet/CutoffUnmetConnector.js | 10 ++ .../src/Wanted/Missing/MissingConnector.js | 10 ++ package.json | 18 +- yarn.lock | 158 +++++++++++++----- 12 files changed, 244 insertions(+), 69 deletions(-) create mode 100644 frontend/src/Utilities/pagePopulator.js diff --git a/build.sh b/build.sh index f7ee88969..be16a7df3 100755 --- a/build.sh +++ b/build.sh @@ -114,6 +114,8 @@ RunGulp() #npm-cache install npm || CheckExitCode npm install --no-optional --no-bin-links ProgressEnd 'npm install' + LintUI + ProgressStart 'Running gulp' CheckExitCode npm run build -- --production ProgressEnd 'Running gulp' @@ -265,7 +267,6 @@ case "$(uname -s)" in ;; esac -LintUI Build RunGulp PackageMono diff --git a/frontend/src/Activity/Blacklist/BlacklistConnector.js b/frontend/src/Activity/Blacklist/BlacklistConnector.js index 8056639f6..82c0d7ba4 100644 --- a/frontend/src/Activity/Blacklist/BlacklistConnector.js +++ b/frontend/src/Activity/Blacklist/BlacklistConnector.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import createCommandsSelector from 'Store/Selectors/createCommandsSelector'; import * as blacklistActions from 'Store/Actions/blacklistActions'; import { executeCommand } from 'Store/Actions/commandActions'; @@ -35,6 +36,7 @@ class BlacklistConnector extends Component { // Lifecycle componentDidMount() { + registerPagePopulator(this.repopulate); this.props.gotoBlacklistFirstPage(); } @@ -44,6 +46,17 @@ class BlacklistConnector extends Component { } } + componentWillUnmount() { + unregisterPagePopulator(this.repopulate); + } + + // + // Control + + repopulate = () => { + this.props.fetchBlacklist(); + } + // // Listeners diff --git a/frontend/src/Activity/History/HistoryConnector.js b/frontend/src/Activity/History/HistoryConnector.js index e00eaae05..c3eb9d8b1 100644 --- a/frontend/src/Activity/History/HistoryConnector.js +++ b/frontend/src/Activity/History/HistoryConnector.js @@ -2,6 +2,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; import selectUniqueIds from 'Utilities/Object/selectUniqueIds'; import * as historyActions from 'Store/Actions/historyActions'; @@ -35,6 +36,7 @@ class HistoryConnector extends Component { // Lifecycle componentDidMount() { + registerPagePopulator(this.repopulate); this.props.gotoHistoryFirstPage(); } @@ -46,10 +48,18 @@ class HistoryConnector extends Component { } componentWillUnmount() { + unregisterPagePopulator(this.repopulate); this.props.clearHistory(); this.props.clearEpisodes(); } + // + // Control + + repopulate = () => { + this.props.fetchHistory(); + } + // // Listeners diff --git a/frontend/src/Activity/Queue/QueueConnector.js b/frontend/src/Activity/Queue/QueueConnector.js index afe160dd0..2e5c36ced 100644 --- a/frontend/src/Activity/Queue/QueueConnector.js +++ b/frontend/src/Activity/Queue/QueueConnector.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; import selectUniqueIds from 'Utilities/Object/selectUniqueIds'; import createCommandsSelector from 'Store/Selectors/createCommandsSelector'; @@ -44,6 +45,7 @@ class QueueConnector extends Component { // Lifecycle componentDidMount() { + registerPagePopulator(this.repopulate); this.props.gotoQueueFirstPage(); } @@ -56,10 +58,18 @@ class QueueConnector extends Component { } componentWillUnmount() { + unregisterPagePopulator(this.repopulate); this.props.clearQueue(); this.props.clearEpisodes(); } + // + // Control + + repopulate = () => { + this.props.fetchQueue(); + } + // // Listeners diff --git a/frontend/src/Artist/Details/ArtistDetailsConnector.js b/frontend/src/Artist/Details/ArtistDetailsConnector.js index e0eb318b5..9d36947d9 100644 --- a/frontend/src/Artist/Details/ArtistDetailsConnector.js +++ b/frontend/src/Artist/Details/ArtistDetailsConnector.js @@ -4,6 +4,7 @@ import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { findCommand } from 'Utilities/Command'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import createAllArtistSelector from 'Store/Selectors/createAllArtistSelector'; import createCommandsSelector from 'Store/Selectors/createCommandsSelector'; import { fetchEpisodes, clearEpisodes } from 'Store/Actions/episodeActions'; @@ -86,7 +87,8 @@ class ArtistDetailsConnector extends Component { // Lifecycle componentDidMount() { - this._populate(); + registerPagePopulator(this.populate); + this.populate(); } componentDidUpdate(prevProps) { @@ -102,26 +104,27 @@ class ArtistDetailsConnector extends Component { (prevProps.isRenamingFiles && !isRenamingFiles) || (prevProps.isRenamingArtist && !isRenamingArtist) ) { - this._populate(); + this.populate(); } // If the id has changed we need to clear the episodes/episode // files and fetch from the server. if (prevProps.id !== id) { - this._unpopulate(); - this._populate(); + this.unpopulate(); + this.populate(); } } componentWillUnmount() { - this._unpopulate(); + unregisterPagePopulator(this.populate); + this.unpopulate(); } // // Control - _populate() { + populate = () => { const artistId = this.props.id; this.props.fetchEpisodes({ artistId }); @@ -129,7 +132,7 @@ class ArtistDetailsConnector extends Component { this.props.fetchQueueDetails({ artistId }); } - _unpopulate() { + unpopulate = () => { this.props.clearEpisodes(); this.props.clearTrackFiles(); this.props.clearQueueDetails(); diff --git a/frontend/src/Calendar/CalendarConnector.js b/frontend/src/Calendar/CalendarConnector.js index 44b63a8a1..a5a99f853 100644 --- a/frontend/src/Calendar/CalendarConnector.js +++ b/frontend/src/Calendar/CalendarConnector.js @@ -2,6 +2,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; import selectUniqueIds from 'Utilities/Object/selectUniqueIds'; import * as calendarActions from 'Store/Actions/calendarActions'; @@ -40,6 +41,7 @@ class CalendarConnector extends Component { } componentDidMount() { + registerPagePopulator(this.repopulate); this.props.gotoCalendarToday(); this.scheduleUpdate(); } @@ -67,6 +69,7 @@ class CalendarConnector extends Component { } componentWillUnmount() { + unregisterPagePopulator(this.repopulate); this.props.clearCalendar(); this.props.clearQueueDetails(); this.props.clearTrackFiles(); @@ -75,11 +78,20 @@ class CalendarConnector extends Component { // // Control + repopulate = () => { + const { + time, + view + } = this.props; + + this.props.fetchQueueDetails({ time, view }); + this.props.fetchCalendar({ time, view }); + } scheduleUpdate = () => { this.clearUpdateTimeout(); - this.updateTimeoutId = setTimeout(this.scheduleUpdate, UPDATE_DELAY); + this.updateTimeoutId = setTimeout(this.updateCalendar, UPDATE_DELAY); } clearUpdateTimeout = () => { @@ -130,12 +142,14 @@ class CalendarConnector extends Component { CalendarConnector.propTypes = { time: PropTypes.string, + view: PropTypes.string.isRequired, items: PropTypes.arrayOf(PropTypes.object).isRequired, setCalendarView: PropTypes.func.isRequired, gotoCalendarToday: PropTypes.func.isRequired, gotoCalendarPreviousRange: PropTypes.func.isRequired, gotoCalendarNextRange: PropTypes.func.isRequired, clearCalendar: PropTypes.func.isRequired, + fetchCalendar: PropTypes.func.isRequired, fetchTrackFiles: PropTypes.func.isRequired, clearTrackFiles: PropTypes.func.isRequired, fetchQueueDetails: PropTypes.func.isRequired, diff --git a/frontend/src/Components/SignalRConnector.js b/frontend/src/Components/SignalRConnector.js index 3e10ca604..06c4db2e7 100644 --- a/frontend/src/Components/SignalRConnector.js +++ b/frontend/src/Components/SignalRConnector.js @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; import { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { repopulatePage } from 'Utilities/pagePopulator'; import { updateCommand, finishCommand } from 'Store/Actions/commandActions'; import { setAppValue, setVersion } from 'Store/Actions/appActions'; import { update, updateItem, removeItem } from 'Store/Actions/baseActions'; @@ -28,10 +29,12 @@ function getState(status) { function createMapStateToProps() { return createSelector( (state) => state.app.isReconnecting, + (state) => state.app.isDisconnected, (state) => state.queue.paged.isPopulated, - (isReconnecting, isQueuePopulated) => { + (isReconnecting, isDisconnected, isQueuePopulated) => { return { isReconnecting, + isDisconnected, isQueuePopulated }; } @@ -170,7 +173,8 @@ class SignalRConnector extends Component { this.props.updateItem({ section: 'calendar', updateOnly: true, - ...body.resource }); + ...body.resource + }); } } @@ -193,7 +197,8 @@ class SignalRConnector extends Component { this.props.updateItem({ section: 'episodes', updateOnly: true, - ...body.resource }); + ...body.resource + }); } } @@ -202,7 +207,8 @@ class SignalRConnector extends Component { this.props.updateItem({ section: 'tracks', updateOnly: true, - ...body.resource }); + ...body.resource + }); } } @@ -210,7 +216,8 @@ class SignalRConnector extends Component { if (body.action === 'updated') { this.props.updateItem({ section: 'trackFiles', - ...body.resource }); + ...body.resource + }); } } @@ -254,7 +261,8 @@ class SignalRConnector extends Component { this.props.updateItem({ section: 'cutoffUnmet', updateOnly: true, - ...body.resource }); + ...body.resource + }); } } @@ -263,7 +271,8 @@ class SignalRConnector extends Component { this.props.updateItem({ section: 'missing', updateOnly: true, - ...body.resource }); + ...body.resource + }); } } @@ -275,6 +284,13 @@ class SignalRConnector extends Component { console.log(`SignalR: [${state}]`); if (state === 'connected') { + // Repopulate the page (if a repopulator is set) to ensure things + // are in sync after reconnecting. + + if (this.props.isReconnecting || this.props.isDisconnected) { + repopulatePage(); + } + this.props.setAppValue({ isConnected: true, isReconnecting: false, @@ -329,6 +345,7 @@ class SignalRConnector extends Component { SignalRConnector.propTypes = { isReconnecting: PropTypes.bool.isRequired, + isDisconnected: PropTypes.bool.isRequired, isQueuePopulated: PropTypes.bool.isRequired, updateCommand: PropTypes.func.isRequired, finishCommand: PropTypes.func.isRequired, diff --git a/frontend/src/Utilities/pagePopulator.js b/frontend/src/Utilities/pagePopulator.js new file mode 100644 index 000000000..3fb26b1db --- /dev/null +++ b/frontend/src/Utilities/pagePopulator.js @@ -0,0 +1,17 @@ +let currentPopulator = null; + +export function registerPagePopulator(populator) { + currentPopulator = populator; +} + +export function unregisterPagePopulator(populator) { + if (currentPopulator === populator) { + currentPopulator = null; + } +} + +export function repopulatePage() { + if (currentPopulator) { + currentPopulator(); + } +} diff --git a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js index acbf8a1eb..3119ca349 100644 --- a/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js +++ b/frontend/src/Wanted/CutoffUnmet/CutoffUnmetConnector.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; import selectUniqueIds from 'Utilities/Object/selectUniqueIds'; import createCommandsSelector from 'Store/Selectors/createCommandsSelector'; @@ -46,6 +47,7 @@ class CutoffUnmetConnector extends Component { // Lifecycle componentDidMount() { + registerPagePopulator(this.repopulate); this.props.gotoCutoffUnmetFirstPage(); } @@ -63,11 +65,19 @@ class CutoffUnmetConnector extends Component { } componentWillUnmount() { + unregisterPagePopulator(this.repopulate); this.props.clearCutoffUnmet(); this.props.clearQueueDetails(); this.props.clearTrackFiles(); } + // + // Control + + repopulate = () => { + this.props.fetchCutoffUnmet(); + } + // // Listeners diff --git a/frontend/src/Wanted/Missing/MissingConnector.js b/frontend/src/Wanted/Missing/MissingConnector.js index cf4d9ad05..dd9a5de54 100644 --- a/frontend/src/Wanted/Missing/MissingConnector.js +++ b/frontend/src/Wanted/Missing/MissingConnector.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; +import { registerPagePopulator, unregisterPagePopulator } from 'Utilities/pagePopulator'; import hasDifferentItems from 'Utilities/Object/hasDifferentItems'; import selectUniqueIds from 'Utilities/Object/selectUniqueIds'; import createCommandsSelector from 'Store/Selectors/createCommandsSelector'; @@ -43,6 +44,7 @@ class MissingConnector extends Component { // Lifecycle componentDidMount() { + registerPagePopulator(this.repopulate); this.props.gotoMissingFirstPage(); } @@ -54,10 +56,18 @@ class MissingConnector extends Component { } componentWillUnmount() { + unregisterPagePopulator(this.repopulate); this.props.clearMissing(); this.props.clearQueueDetails(); } + // + // Control + + repopulate = () => { + this.props.fetchMissing(); + } + // // Listeners diff --git a/package.json b/package.json index f2f12109d..a2f2330e2 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "license": "GPL-3.0", "readmeFilename": "readme.md", "dependencies": { - "autoprefixer": "7.1.4", + "autoprefixer": "7.1.5", "babel-core": "6.26.0", "babel-eslint": "8.0.1", "babel-loader": "7.1.2", @@ -33,13 +33,13 @@ "del": "3.0.0", "element-class": "0.2.2", "esformatter": "0.10.0", - "eslint": "4.7.2", + "eslint": "4.8.0", "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", + "extract-text-webpack-plugin": "3.0.1", + "file-loader": "1.1.5", "filesize": "3.5.10", "gulp": "3.9.1", "gulp-cached": "1.1.1", @@ -56,7 +56,7 @@ "gulp-wrap": "0.13.0", "history": "4.7.2", "jdu": "1.0.0", - "jquery": "2.2.4", + "jquery": "3.2.1", "loader-utils": "^1.1.0", "lodash": "4.17.4", "mobile-detect": "1.3.7", @@ -89,7 +89,7 @@ "react-router-dom": "4.2.2", "react-router-redux": "5.0.0-alpha.6", "react-slider": "0.9.0", - "react-tabs": "1.1.0", + "react-tabs": "2.1.0", "react-tag-autocomplete": "5.4.1", "react-tether": "0.5.7", "react-virtualized": "9.10.1", @@ -103,11 +103,11 @@ "run-sequence": "2.2.0", "signalr": "2.2.2", "streamqueue": "1.1.1", - "style-loader": "^0.18.2", - "stylelint": "8.1.1", + "style-loader": "0.19.0", + "stylelint": "8.2.0", "stylelint-order": "0.7.0", "tar.gz": "1.0.5", - "url-loader": "0.5.9", + "url-loader": "0.6.2", "webpack": "3.6.0", "webpack-stream": "^4.0.0" }, diff --git a/yarn.lock b/yarn.lock index 960e4d20a..14d9246d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -257,15 +257,15 @@ atob@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773" -autoprefixer@7.1.4, autoprefixer@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.4.tgz#960847dbaa4016bc8e8e52ec891cbf8f1257a748" +autoprefixer@7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.5.tgz#d65d14b83c7cd1dd7bc801daa00557addf5a06b2" dependencies: - browserslist "^2.4.0" - caniuse-lite "^1.0.30000726" + browserslist "^2.5.0" + caniuse-lite "^1.0.30000744" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.11" + postcss "^6.0.13" postcss-value-parser "^3.2.3" autoprefixer@^6.3.1: @@ -279,6 +279,17 @@ autoprefixer@^6.3.1: postcss "^5.0.19" postcss-value-parser "^3.2.3" +autoprefixer@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.4.tgz#960847dbaa4016bc8e8e52ec891cbf8f1257a748" + dependencies: + browserslist "^2.4.0" + caniuse-lite "^1.0.30000726" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.11" + postcss-value-parser "^3.2.3" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1160,6 +1171,13 @@ browserslist@^2.4.0: caniuse-lite "^1.0.30000718" electron-to-chromium "^1.3.18" +browserslist@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.5.0.tgz#0ea00d22813a4dfae5786485225a9c584b3ef37c" + dependencies: + caniuse-lite "^1.0.30000744" + electron-to-chromium "^1.3.24" + browserslist@~1.3.1: version "1.3.6" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.3.6.tgz#952ff48d56463d3b538f85ef2f8eaddfd284b133" @@ -1256,6 +1274,10 @@ caniuse-lite@^1.0.30000718, caniuse-lite@^1.0.30000726: version "1.0.30000733" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000733.tgz#ebfc48254117cc0c66197a4536cb4397a6cfbccd" +caniuse-lite@^1.0.30000744: + version "1.0.30000744" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000744.tgz#860fa5c83ba34fe619397d607f30bb474821671b" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1532,7 +1554,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^2.1.0, cosmiconfig@^2.1.1, cosmiconfig@^2.1.3: +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" dependencies: @@ -1544,6 +1566,15 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1, cosmiconfig@^2.1.3: parse-json "^2.2.0" require-from-string "^1.1.0" +cosmiconfig@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^3.0.0" + require-from-string "^2.0.1" + create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" @@ -1962,6 +1993,10 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.18: version "1.3.21" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2" +electron-to-chromium@^1.3.24: + version "1.3.24" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.24.tgz#9b7b88bb05ceb9fa016a177833cc2dde388f21b6" + element-class@0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/element-class/-/element-class-0.2.2.tgz#9d3bbd0767f9013ef8e1c8ebe722c1402a60050e" @@ -2009,7 +2044,7 @@ errno@^0.1.3, errno@^0.1.4: dependencies: prr "~0.0.0" -error-ex@^1.2.0: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: @@ -2172,9 +2207,9 @@ eslint-scope@^3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint@4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.7.2.tgz#ff6f5f5193848a27ee9b627be3e73fb9cb5e662e" +eslint@4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.8.0.tgz#229ef0e354e0e61d837c7a80fdfba825e199815e" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -2361,9 +2396,9 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extract-text-webpack-plugin@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz#90caa7907bc449f335005e3ac7532b41b00de612" +extract-text-webpack-plugin@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.1.tgz#605a8893faca1dd49bb0d2ca87493f33fd43d102" dependencies: async "^2.4.1" loader-utils "^1.1.0" @@ -2442,11 +2477,12 @@ file-entry-cache@^2.0.0: flat-cache "^1.2.1" object-assign "^4.0.1" -file-loader@0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.11.2.tgz#4ff1df28af38719a6098093b88c82c71d1794a34" +file-loader@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa" dependencies: loader-utils "^1.0.2" + schema-utils "^0.3.0" filename-regex@^2.0.0: version "2.0.1" @@ -3510,7 +3546,11 @@ jdu@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/jdu/-/jdu-1.0.0.tgz#28f1e388501785ae0a1d93e93ed0b14dd41e51ce" -jquery@2.2.4, jquery@>=1.6.4: +jquery@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.2.1.tgz#5c4d9de652af6cd0a770154a631bba12b015c787" + +jquery@>=1.6.4: version "2.2.4" resolved "https://registry.yarnpkg.com/jquery/-/jquery-2.2.4.tgz#2c89d6889b5eac522a7eea32c14521559c6cbf02" @@ -3522,7 +3562,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.2.6, js-yaml@^3.4.3, js-yaml@^3.9.1: +js-yaml@^3.2.6, js-yaml@^3.4.3, js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: @@ -3609,9 +3649,9 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" -known-css-properties@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.3.0.tgz#a3d135bbfc60ee8c6eacf2f7e7e6f2d4755e49a4" +known-css-properties@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.4.1.tgz#baaaf704e5f8a5f10e0e221212aae3ea738ea372" lazy-cache@^1.0.3: version "1.0.4" @@ -4040,9 +4080,9 @@ mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.17: dependencies: mime-db "~1.30.0" -mime@1.3.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0" +mime@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" mimic-fn@^1.0.0: version "1.1.0" @@ -4501,6 +4541,12 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" + dependencies: + error-ex "^1.3.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -4898,6 +4944,12 @@ postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" +postcss-safe-parser@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142" + dependencies: + postcss "^6.0.6" + postcss-scss@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.2.tgz#ff45cf3354b879ee89a4eb68680f46ac9bb14f94" @@ -4979,6 +5031,14 @@ postcss@^6.0.12, postcss@^6.0.2, postcss@^6.0.9: source-map "^0.5.7" supports-color "^4.4.0" +postcss@^6.0.13: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.13.tgz#b9ecab4ee00c89db3ec931145bd9590bbf3f125f" + dependencies: + chalk "^2.1.0" + source-map "^0.6.1" + supports-color "^4.4.0" + prefix-style@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prefix-style/-/prefix-style-2.0.1.tgz#66bba9a870cfda308a5dc20e85e9120932c95a06" @@ -5298,9 +5358,9 @@ react-slider@0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/react-slider/-/react-slider-0.9.0.tgz#584ae63325be115581fc08bf7753adb8e4d4a0b1" -react-tabs@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-1.1.0.tgz#f1e3d6136e1d89f70f5ef8835468a2f03a54777a" +react-tabs@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-2.1.0.tgz#ba184a519e0a0803cf790a1eb19bc4fdba5fd0ea" dependencies: classnames "^2.2.0" prop-types "^15.5.0" @@ -5581,6 +5641,10 @@ require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" +require-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -5615,9 +5679,9 @@ resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" resolve-pathname@^2.0.0, resolve-pathname@^2.2.0: version "2.2.0" @@ -5886,6 +5950,10 @@ source-map@^0.1.38: dependencies: amdefine ">=0.0.4" +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" @@ -6079,9 +6147,9 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.18.2: - version "0.18.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" +style-loader@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759" dependencies: loader-utils "^1.0.2" schema-utils "^0.3.0" @@ -6098,14 +6166,14 @@ stylelint-order@0.7.0: postcss "^6.0.11" postcss-sorting "^3.0.2" -stylelint@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.1.1.tgz#9feeed699598b27427715551ed7786db341c19ad" +stylelint@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.2.0.tgz#6a15044553fb5c3143b16d62013a370314495b0d" dependencies: autoprefixer "^7.1.2" balanced-match "^1.0.0" chalk "^2.0.1" - cosmiconfig "^2.1.3" + cosmiconfig "^3.1.0" debug "^3.0.0" execall "^1.0.0" file-entry-cache "^2.0.0" @@ -6115,7 +6183,7 @@ stylelint@8.1.1: html-tags "^2.0.0" ignore "^3.3.3" imurmurhash "^0.1.4" - known-css-properties "^0.3.0" + known-css-properties "^0.4.0" lodash "^4.17.4" log-symbols "^2.0.0" mathml-tag-names "^2.0.1" @@ -6128,10 +6196,11 @@ stylelint@8.1.1: postcss-media-query-parser "^0.2.3" postcss-reporter "^5.0.0" postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^3.0.1" postcss-scss "^1.0.2" postcss-selector-parser "^2.2.3" postcss-value-parser "^3.3.0" - resolve-from "^3.0.0" + resolve-from "^4.0.0" specificity "^0.3.1" string-width "^2.1.0" style-search "^0.1.0" @@ -6474,12 +6543,13 @@ urix@^0.1.0, urix@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" -url-loader@0.5.9: - version "0.5.9" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.5.9.tgz#cc8fea82c7b906e7777019250869e569e995c295" +url-loader@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" dependencies: loader-utils "^1.0.2" - mime "1.3.x" + mime "^1.4.1" + schema-utils "^0.3.0" url@^0.11.0: version "0.11.0"